Giới thiệu chung
Tràn ngăn xếp (stack overflow) và các lỗi liên quan đến kiểm soát luồng chương trình vẫn là nguồn gốc của nhiều lỗ hổng nghiêm trọng trong hệ thống phần mềm, đặc biệt trong thành phần kernel của hệ điều hành. Khi các lỗ hổng này bị lợi dụng, kẻ tấn công có thể tiến hành leo thang đặc quyền, chiếm quyền kiểm soát hệ thống hoặc phá hoại tính toàn vẹn của dữ liệu.
Một kỹ thuật phổ biến trong nhóm tấn công này là Return-Oriented Programming (ROP), trong đó kẻ tấn công không cần chèn mã mới mà tái sử dụng các đoạn mã hợp lệ đã tồn tại trong bộ nhớ để xây dựng chuỗi thực thi độc hại. Bằng cách ghi đè địa chỉ trả về, chúng có thể điều khiển dòng thực thi mà vẫn né tránh một số cơ chế bảo vệ truyền thống.
Để ngăn chặn hành vi này, Windows sử dụng cơ chế Shadow Stack dựa trên hỗ trợ phần cứng. Shadow Stack là một ngăn xếp phụ lưu trữ bản sao của địa chỉ trả về và được bảo vệ khỏi việc chỉnh sửa bởi ứng dụng hoặc mã kernel thông thường. Khi một hàm kết thúc, hệ thống sẽ so sánh địa chỉ trả về trên stack chính với bản sao trên Shadow Stack. Nếu phát hiện sai lệch, hệ điều hành sẽ chặn tiến trình nhằm ngăn chặn khai thác tiếp tục.
KMHESP là một cơ chế bảo mật của Windows nhằm bảo vệ kernel hệ điều hành trước các cuộc tấn công tràn bộ đệm trên ngăn xếp. Nhờ cơ chế cưỡng chế ở mức phần cứng, tính năng này giúp tăng cường tính toàn vẹn của luồng điều khiển trong kernel và giảm đáng kể khả năng khai thác lỗi tràn bộ nhớ, đặc biệt là các cuộc tấn công dựa trên ROP.

Hình 1. Hình thức tấn công ROP phổ biến
Cơ chế bảo vệ ngăn xếp ở chế độ kernel
Cơ chế bảo vệ ngăn xếp dựa trên phần cứng được thiết kế nhằm bảo đảm tính toàn vẹn của luồng điều khiển (control-flow integrity) trong quá trình thực thi chương trình, đặc biệt ở chế độ kernel. Thay vì chỉ dựa vào biện pháp kiểm tra phần mềm, cơ chế này tận dụng sự hỗ trợ trực tiếp từ kiến trúc CPU để phát hiện và ngăn chặn việc ghi đè trái phép lên dữ liệu điều khiển quan trọng trên ngăn xếp. Sử dụng các hỗ trợ phần cứng như Control-flow Enforcement Technology (CET) để phát hiện các thay đổi không mong muốn trong luồng điều khiển.
Trước hết, hệ thống thiết lập các giá trị kiểm soát (canary hoặc token bảo vệ) tại các vị trí nhạy cảm trong stack frame, đặc biệt gần địa chỉ trả về của hàm. Những giá trị này đóng vai trò như “dấu niêm phong” logic. Nếu một lỗi tràn bộ đệm xảy ra và dữ liệu vượt quá phạm vi được cấp phát, giá trị kiểm soát sẽ bị thay đổi. Khi hàm kết thúc và thực hiện lệnh return, hệ thống kiểm tra lại giá trị này; nếu phát hiện sai lệch, quá trình thực thi sẽ bị chặn ngay lập tức nhằm ngăn chặn chuyển hướng luồng điều khiển.

Hình 2. Công nghệ CET của Intel
Tuy nhiên, trong các cơ chế hiện đại ở chế độ kernel, việc bảo vệ không chỉ dừng ở canary phần mềm. Công nghệ như CET bổ sung một lớp cưỡng chế ở mức phần cứng thông qua cơ chế Shadow Stack. Khi một hàm được gọi, địa chỉ trả về không chỉ được lưu trên stack chính mà còn được ghi vào một ngăn xếp phụ do phần cứng quản lý. Shadow Stack này không thể bị sửa đổi bởi mã ứng dụng hoặc driver thông thường. Khi lệnh return được thực thi, CPU tự động so sánh địa chỉ trả về trên stack chính với bản sao trong Shadow Stack. Nếu hai giá trị không khớp, điều đó cho thấy đã xảy ra can thiệp bất hợp pháp vào luồng thực thi.
Khi phát hiện sai lệch, hệ điều hành có thể thực hiện nhiều phản ứng an ninh khác nhau, bao gồm chấm dứt tiến trình, tạo lỗi hệ thống (bug check) hoặc ghi nhận sự kiện để phục vụ phân tích forensics. Cách tiếp cận này làm giảm đáng kể khả năng khai thác các kỹ thuật như ROP, bởi kẻ tấn công không thể đơn giản ghi đè địa chỉ trả về mà không bị phát hiện ở mức phần cứng.
Triển khai và kích hoạt Kernel-mode Hardware-enforced Stack Protection
Yêu cầu hệ thống
Để kích hoạt cơ chế bảo vệ ngăn xếp ở chế độ kernel, hệ thống cần đáp ứng đồng thời các yêu cầu về phần cứng, hệ điều hành và cấu hình bảo mật. Trước hết, bộ xử lý phải hỗ trợ các công nghệ kiểm soát luồng điều khiển ở mức phần cứng, điển hình như Control-flow Enforcement Technology (CET) trên các CPU thế hệ mới. Các tính năng này bao gồm Shadow Stack và cơ chế theo dõi nhánh gián tiếp (Indirect Branch Tracking), cho phép CPU kiểm tra tính hợp lệ của địa chỉ trả về trong quá trình thực thi.
Bên cạnh yêu cầu về CPU, hệ điều hành phải là phiên bản hỗ trợ cơ chế này, chẳng hạn Windows 11 22H2 hoặc mới hơn, với các bản cập nhật bảo mật đầy đủ. Nhân hệ điều hành và các thành phần kernel liên quan phải được thiết kế để tương thích với Shadow Stack. Ngoài ra, các trình điều khiển (device drivers) đang hoạt động cũng cần tuân thủ yêu cầu tương thích, vì driver cũ hoặc không được biên dịch với các cờ bảo vệ phù hợp có thể gây xung đột khi bật tính năng.
Về cấu hình hệ thống, một số điều kiện như bật ảo hóa CPU (Virtualization-Based Security - VBS) trong BIOS/UEFI và trong Windows có thể là yêu cầu tiên quyết. Tính năng này thường được quản lý thông qua Windows Security hoặc Group Policy trong môi trường doanh nghiệp. Do đó, trước khi triển khai diện rộng, tổ chức cần đánh giá khả năng tương thích phần cứng, rà soát driver và thử nghiệm trong môi trường kiểm thử nhằm đảm bảo tính ổn định khi kích hoạt cơ chế bảo vệ ở mức kernel.
Kích hoạt KMHESP trên Windows 11
Mặc dù cơ chế KMHESP có nền tảng kỹ thuật tương đối phức tạp, quá trình kích hoạt trên Windows lại khá đơn giản đối với người dùng cuối.
Trên hệ thống chạy Windows 11 phiên bản 22H2 đã được cập nhật đầy đủ, người dùng có thể truy cập ứng dụng Windows Security, sau đó vào mục Device Security và chọn Core Isolation để kiểm tra trạng thái tính năng. Nếu thiết bị đáp ứng yêu cầu phần cứng, bao gồm CPU hỗ trợ công nghệ bảo vệ luồng điều khiển và đã bật ảo hóa (CPU virtualization), hệ thống sẽ hiển thị tùy chọn “Kernel-mode Hardware-enforced Stack Protection” trong phần cấu hình.

Hình 3. Tính năng KMHESP trên Windows 11
Để kích hoạt tính năng này, người dùng chỉ cần chuyển tùy chọn sang trạng thái “On”. Sau đó, Windows sẽ tự động kiểm tra các trình điều khiển đang được nạp trong hệ thống nhằm xác định liệu có thành phần nào không tương thích với cơ chế bảo vệ hay không. Nếu phát hiện trình điều khiển có khả năng xung đột, hệ thống sẽ hiển thị danh sách tương ứng và yêu cầu người dùng cập nhật chúng lên phiên bản mới hơn trước khi cho phép kích hoạt tính năng. Điều này là cần thiết vì một số driver cũ có thể không tương thích với cơ chế Shadow Stack hoặc các biện pháp kiểm soát luồng điều khiển dựa trên phần cứng.
Sau khi cập nhật đầy đủ các driver liên quan, người dùng có thể thử kích hoạt lại tính năng để kiểm tra xem còn xung đột nào tồn tại hay không. Trong trường hợp không phát hiện vấn đề tương thích, Windows có thể yêu cầu khởi động lại hệ thống để áp dụng thay đổi ở mức kernel.
Cần lưu ý rằng trong một số trường hợp hiếm gặp, việc bật cơ chế bảo vệ này có thể gây ra hành vi không mong muốn nếu môi trường phần cứng hoặc driver chưa hoàn toàn tương thích, do đó nên đảm bảo hệ thống đã được cập nhật đầy đủ trước khi triển khai.
|
Tài liệu tham khảo 1. https://www.bleepingcomputer.com/tutorials/how-to-enable-kernel-mode-hardware-enforced-stack-protection-in-windows-11/ 2. Yun, Joobeom & Park, Ki-Woong & Koo, Dongyoung & Shin, Youngjoo. (2020). Lightweight and Seamless Memory Randomization for Mission-Critical Services in a Cloud Platform. Energies. 13. 1332. 10.3390/en13061332. 3. https://www.forbes.com/sites/tonybradley/2020/06/17/intel-cet-raises-the-bar-for-malware-defense/ 4. https://www.bleepingcomputer.com/tutorials/how-to-enable-cpu-virtualization-in-your-computer-bios/ |
