Chương 1: Tổng Quan bản bị lỗi của driver Intel để ánh xạ một driver tuỳ ý lên bộ nhớ [10], tuy nhiên, công cụ này chỉ hỗ trợ các phiên bản 64-bit của Windows OS. Mục tiêu Nghiên cứu này được thực hiện để nghiên cứu các kỹ thuật khai thác các driver lỗi. Từ đó chỉ ra những điểm đặc trưng của kỹ thuật này dé xây dựng phương pháp giảm thiểu rủi ro. Bên cạnh đó, chúng tôi cũng đặt mục tiêu tìm ra những hướng tiếp cận mới trong của kỹ thuật này, những hướng tiếp cận chưa bị được công bé trước đó.
Các mục tiêu cụ thể mà chúng tôi đã đề ra trong đề tài này: © Nghiên cứu kỹ thuật tan công khai thác các driver lỗi trên hệ điều hành Windows. Trinh bày một hướng tiếp cận mới của kỹ thuật tan công khai thác các driver lỗi có thé bypass nhiều phần mềm bảo mật phố biến hiện nay. e_ Trình bày những đặc trưng của kỹ thuật tấn công và đề xuất phương pháp phát hiện sớm để giảm thiéu rủi ro. 11 Chương 2: Lý Thuyết Chương 2: LÝ THUYET Chương 2 trình bày các lý thuyết có liên quan được sử dụng trong đề tài: định nghĩa về device driver, Windows API, shellcode và những kỹ thuật trích xuất thông tin đăng nhập từ bộ nhớ trên hệ điều hành Windows.
Giới thiệu Device driver, thường được gọi là driver hoặc hardware driver, là chương trình cho phép một hoặc nhiều thiết bị phần cứng giao tiếp với hệ điều hành của máy tính. Nếu thiếu driver, máy tính không thể gửi và nhận dữ liệu chính xác đến các thiết bị phần cứng, chang hạn như máy in. Ứng dụng Phanmém — Hé diéu hanh Phan cứng = (thông thường) Hình 1. Giới thiệu về device driver 12 Chương 2: Lý Thuyết Các thiết bị phần cứng mà hệ điều hành không xác định hoặc có các tính năng mà hệ điều hành không xác định đều yêu cầu driver.
Một số thiết bị phần cứng và thiết bị ngoại vi yêu cầu driver như: card mạng, card màn hình, bàn phím, máy in. Nếu driver không được cài đặt, thiết bị có thể không hoạt động bình thường. Bên cạnh đó, có một số thiết bi vẫn có thể hoạt động nếu thiếu driver, nhưng nó không thé hoạt động với tất cả tính năng của nó. Ví dụ, chuột máy tính thường có thể hoạt động mà không cần driver, nhưng những nút phụ của nó sẽ không thể hoạt động nếu thiếu driver.
Đối với Microsoft Windows, có hai loại driver cơ bản: ¢ User-mode: thực thi trong ngữ cảnh người dùng, chúng thường cung cấp khả năng tương tác giữa ứng dụng và kernel-mode driver hoặc các thành phần khác của hệ điều hành. ¢ Kernel-mode: thực thi trong ngữ cảnh kernel. Khi các tiến trình chạy ở ngữ cảnh kernel, chúng có quyền truy cập không hạn chế vào phần cứng. Driver Signature Enforcement Driver Signature Enforcement là một tinh năng có sẵn của các hệ điều hành Windows hiện nay nhằm bảo vệ máy tính của người dùng.
Nó sẽ chỉ cho phép người dùng sử dụng các driver đã được ký bởi Microsoft, nhằm ngăn chặn virus và các phần mềm độc hại khác được thêm vào driver mà người dùng không biết [1]. > TRwPC > DADA(Đ) > UT vie. mimidnssyz emf TẾ Administrator: Command Prompt o x General Securty Detals Previous Versions pH TpedMe: Ssentie(sn) Oenesdh: U#nownasepieaion Change Lecaton: DUT swe 320KB 627586400) Sze on deh: 320 KB (2. Vi dy vé tinh nang Driver Signature Enforcement 13 Chương 2: Lý Thuyết Ví dụ ở Hình 2 cho thấy Windows đã chặn không cho người dùng sử dụng driver vì không có chữ ký hợp lệ.
Tính năng này được mặc định bật trên các hệ điều hành Windows hiện nay. Driver chứa lỗ héng có chữ ký hợp lệ Nhiều lỗ héng trong các driver đã được báo cáo trong nhiều năm qua. Ví dụ gần đây, năm lỗ hồng nghiêm trọng trong driver của Dell đã được phát hiện vào tháng 5 năm 2021 [2]. Nhiều driver lỗi có thé dễ dàng tìm thấy trên mạng.
Ví dụ, tại hội nghị hack DEFCON năm 2019, Jesse và Shkatov đã công bố danh sách hơn 40 driver bị lỗi từ các nhà cung cấp được Microsoft chứng nhận [11]. Các phiên bản driver cũ, chứa lỗ héng vẫn là các chương trình lành tính có chữ ký điện tử hợp lệ và được phần mềm chống virus tin cậy. Tin tặc có thé phân tích các báo cáo và khai thác các driver lỗi dé thực thi mã ở kernel. Các lỗ hồng thường gặp trong kernel driver bao gồm: 1.
Không kiểm tra dé hạn chế quyền truy cập vào các thanh ghi quan trọng 2. Cho phép ánh xạ bộ nhớ physical từ chế độ người dùng dé đọc và ghi 3. Cho phép truy cập bộ nhớ virtual kernel từ chế độ người dùng dé đọc và ghi Nghiên cứu này khai thác lỗ hông thường gặp sé 2, cho phép ánh xạ bộ nhớ physical từ chế độ người dùng để đọc và ghi. Ngữ cảnh người dùng và ngữ cảnh kernel Bộ xử lý trong máy tính chạy Windows có hai ngữ cảnh khác nhau, người dùng (user mode) và kernel mode.
Bộ xử lý chuyền đổi giữa hai ngữ cảnh tùy thuộc vào loại mã nào đang chạy trên bộ xử lý. Các ứng dụng thường chạy ở ngữ cảnh người dùng và các thành phần hệ điều hành cốt lõi thường chạy ở ngữ cảnh kernel. Các driver chạy ở ngữ cảnh kernel, nhưng cũng có một sé driver có thể chạy ở ngữ cảnh người dùng. Ngữ cảnh người dùng Khi người dùng khởi động ứng dụng ở ngữ cảnh người dùng, Windows sẽ tạo một tiến trình cho ứng dụng.
Tiến trình này cung cấp cho ứng dụng một không gian virtual riêng 14 Chương 2: Lý Thuyết (virtual address space) và một bảng băm (handle table) riêng. Bởi vì không gian virtual của ứng dụng là riêng tư nên một ứng dụng không thể thay đổi dữ liệu thuộc về ứng dụng khác. Mỗi ứng dụng chạy riêng lẻ và nếu một ứng dụng gặp sự có, sự có chỉ giới hạn ở một ứng dụng đó. Các ứng dụng khác và hệ điều hành không bị ảnh hưởng bởi sự có.
Ngoài khả năng độc lập, không gian địa chỉ virtual của một ứng dụng ở ngữ cảnh người dùng bị hạn chế truy cập. Bộ xử lý chạy ở chế độ người dùng không thể truy cập các địa chỉ bộ nhớ virtual được dành riêng cho hệ điều hành. Việc giới hạn không gian địa chỉ virtual của ứng dụng ở chế độ người dùng sẽ ngăn ứng dụng thay đổi và có thể làm hỏng đữ liệu quan trọng của hệ điều hành. Ngữ cảnh Kernel Tắt cả mã chạy trong ché độ kernel đều chia sẻ một không gian địa chỉ virtual duy nhất.
Điều này có nghĩa là kernel-mode driver không bị cô lập với các driver khác và hệ điều hành. Nếu một kernel-mode driver vô tình ghi sai địa chỉ, dữ liệu thuộc hệ điều hành hoặc driver khác có thể bị xâm phạm. Nếu kernel-mode driver gap sự cố, toàn bộ hệ điều hành sẽ bị treo. Windows API Windows API, hay còn gọi là WinAPI, là một giao diện lập trình ứng dụng được viết bằng C bởi Microsoft.
Nó cho phép các chương trình do người dùng viết tương tác với Windows, chẳng hạn như hiển thị mọi thứ trên màn hình và nhận đầu vào từ chuột và bàn phím. Phiên bản gần đây nhát (tính đến năm 2007) là Win32 API. Microsoft duy trì một thư viện để cung cấp các thông tin hỗ trợ dành cho nhà các phát triển dé lập trình sử dụng WinAPI [12]. Chức năng được cung cấp bởi Windows API có thể được nhóm thành tám loại: ¢ Dich vụ cơ bản (Base Services): Cung cấp quyền truy cập vào các tài nguyên cơ bản có sẵn của hệ thống Windows.
Bao gồm các thứ như hệ thống tỆp, thiết bị, tiến trình và luồng, quyên truy cập vào Windows registry và xử lý lỗi. Các hàm này nằm trong các tệp kernel32.dll và advapi32.dll trên Windows 32 bit. 15 Chương 2: Lý Thuyết ¢ Dịch vụ nâng cao (Advanced Services): Cung cấp quyền truy cập vào các chức nâng cao ngoài kernel. Bao gồm những thứ như Windows registry, tắt / khởi động lại hệ thống, quản lý tiến trình dịch vụ, quản lý tài khoản người dùng.
Các hàm nay nằm trong advapi32.dll và advapires32.dll trên Windows 32-bit. © _ Giao diện đồ họa (Graphics Device Interface): Cung cấp chức năng xuất nội dung đồ họa ra màn hình, máy in và các thiết bị khác. Nó nằm trong gdi32.dll trên Windows 32 bit. © Giao diện người dùng (User Interface): Cung cấp chức năng quản ly cửa sé và hầu hết các điều khiển cơ bản, chẳng hạn như các nút và thanh cuộn, nhận đầu vào bằng chuột và bàn phím cũng như các chức năng khác được liên kết với phần GUI của Windows.
Đơn vị chức năng này nằm trong user32.dll trên Windows 32 bit. Ké từ Windows XP, các điều khiển cơ bản nằm trong comctl32.dll, cùng với các điều khién chung. e Thư viện hộp thoại chung (Common Dialog Box Library): Cung cấp cho ứng dụng các hộp thoại tiêu chuẩn để mở và lưu tệp, chọn màu và phông chữ. Thư viện nằm trong tệp comdlg32.dll trên Windows 32 bit.
Nó được nhóm trong danh mục Giao diện người dùng của API. ¢ Thu viện điều khiển chung (Common Control Library): Cấp cho ứng dụng quyền truy cập vào một số điều khiển nâng cao do hệ điều hành cung cấp. Chúng bao gồm thanh trạng thái, thanh tiến trình, thanh công cụ và tab. Thư viện nằm trong tệp DLL có tên comctl32.dll trên Windows 32 bit.
Nó được nhóm trong danh mục Giao diện người dùng của API. e Windows Shell: Thanh phan của Windows API cho phép các ứng dụng truy cập vào chức năng được cung cấp bởi shell của hệ điều hành, cũng như thay đổi và phát triển nó. Thành phan này nằm trong shell32.dll và shlwapi.dll trên Windows 32 bit. Nó được nhóm trong danh mục Giao diện người dùng của API.
¢ Dich vụ mang (Network Services): Cấp quyền truy cập vào các khả năng kết nối mạng khác nhau của hệ điều hành. Các thành phần phụ của nó bao gồm NetBIOS, Winsock, NetDDE, RPC và nhiều thành phan khác. 16 Chương 2: Lý Thuyết Bên cạnh đó, vẫn có nhiều API không được cung cấp tài liệu từ Microsoft, nhưng vẫn được các nhà phát triển độc lập phân tích và chia sẻ cho nhau, chúng được gọi là Undocumented API. Nghiên cứu này sử dụng một undocumented Windows API tên là MmCopyVirtualMemory, hàm này nằm trong ntoskrnl.
Shellcode Shellcode là chuỗi mã máy, hoặc các lệnh thực thi, được đưa vào bộ nhớ của máy tính với mục đích kiểm soát một chương trình đang chạy. Trong một cuộc tắn công máy tính, một trong các bước là chiếm quyền kiểm soát bộ đếm chương trình, bộ đếm này xác định lệnh tiếp theo sẽ được thực thi. Luồng chương trình sau đó có thể được chuyển hướng đến mã đã chèn.