Khai thác lỗ hổng Windows sẽ được chúng tôi dựa theo các lab tại HackSys Extreme Vulnerable Driver nhằm giúp người đọc tiếp cận trong việc nghiên cứu bảo mật trên nền tảng Microsoft Windows. Các dạng khai thác phổ biến như Buffer Overflows, Use After Frees, Pool Overflows từ đơn giản đến phức tạp sẽ giúp bạn đọc từng bước tiếp cận lĩnh vực nghiên cứu bảo mật Windows và kiến trúc hệ điều hành.

Chuẩn bị lab:

  • Virtual Box
  • 2 máy ảo Windows 7 32 bit (cài đặt VirtualBox Guest Additions)
  • WinDbg (bạn có thể tải từ Windows SDK)

Trong suốt quá trình thực hiện debug tương tác với hệ điều hành, khả năng làm ảnh hưởng đến OS là hoàn toàn có thể xảy ra như bị treo hoặc không thể hoạt động. Do vậy, việc sử dụng máy ảo với những vai trò khác nhau sẽ giúp chúng ta dễ dàng theo dõi và ghi nhận các sự thay đổi xảy ra trên máy tính nạn nhân.

Thiết lập môi trường Debugger

Tại máy ảo 1 –  Debugger cài đặt phần mềm WinDbg từ gói Windows SDK. Việc cài đặt WinDbg sẽ giúp ta dễ dàng xác định các tương tác với hệ thống Windows.

Cài đặt gói Debugging Tools for Windows từ bộ cài đặt Windows SDK

Sau khi tiến hành cài đặt thành công, bạn cần thiết lập biến môi trường tại máy Debugger phục vụ kết nối từ máy ảo 2. Biến môi trường cần tạo là _NT_SYMBOL_PATH với giá trị SRV*C:\Symbols*https://msdl.microsoft.com/download/symbols như hình:

Thiết lập biến môi trường tại máy ảo 1

Thiết lập môi trường Debuggee

Tôi cần thực hiện bật chế độ Debug tại máy ảo 2, việc này cho phép máy ảo 1 có thể theo dõi quá trình hoạt động của máy 2. Công cụ bcdedit cho phép người dùng thêm một tùy chọn Debug khi khởi động máy tính và tự động kết nối đến máy ảo 1 thông qua Pipe Name hoặc cổng console. Tiến hành lần lượt các lệnh bên dưới như ví dụ trong hình:

bcdedit /copy {current} /d “Debug me”

bcdedit /debug {MY_GUID} on

bcdedit /dbgsettings

Thêm một tùy chọn debug khi khởi động hệ điều hành tại máy ảo 2 (Debuggee)

Khi tiến hành khởi động hệ điều hành, người dùng sẽ thấy tùy chọn “Debug me” như thông tin đã được tạo trong bước trên.

Chế độ Debug trong màn hình khởi động Windows

Thiết lập kết nối các máy ảo

Kết nối giữa các máy tính trên thực tế có thể sử dụng cồng Serial COM 1 để truyền dữ liệu, tuy nhiên nếu sử dụng máy ảo, bạn chỉ cần thiết lập thông tin Named Pipe có cùng đường dẫn theo cấu trúc \\.\pipe\<pipe_name> (đối với máy cài VirtualBox sử dụng Windows) và /tmp/<pipe_name> (đối với máy cài VirtualBox sử dụng Linux).

Thiết lập kết nối Serial giữa các máy ảo

Kiểm tra kết nối các máy ảo

Sau khi thiết lập các thông tin hoàn chỉnh, tôi tiến hành khởi động máy Debugger trước và khởi động chương trình WinDbg > File >Kernel Debug.

Tạo kết nối nhận thông tin tại cổng Serial trên máy 1 Debugger

Khởi động máy ảo 2 ở chế độ Debug, nếu kết nối thành công, màn hình WinDbg máy 1 sẽ hiển thị các thông tin hoạt động của máy 2 như hình dưới:

Thông tin khởi động máy 2 hiển thị tại WinDbg

Xem video hướng dẫn tại: Windows Kernel Exploitation