nǝıH
Active Member
-
23/03/2020
-
24
-
37 bài viết
Gần 300 tệp tin thực thi trên Windows 10 có thể bị tấn công DLL Hijacking
Nhà nghiên cứu Wietze Beukema, phát hiện gần 300 tệp tin thực thi trên Windows 10 dễ bị tấn công DLL Hijacking.
Beukema giải thích rằng: "Có gần 300 tệp tin thực thi trong thư mục System32 dễ bị tấn công DLL. Chỉ cần một VBScript đơn giản, một số tệp thực thi này có thể được sử dụng để leo thang đặc quyền hay có thể bypass UAC." (UAC- User Account Control là một tính năng của hệ điều hành Windows giúp cho người dùng quản lý và giám sát các sự thay đổi trái phép bên trong hệ thống. UAC đảm bảo rằng tất các các hành động đều được xác nhận từ tài khoản quản trị- Administrator)
Lỗ hổng DLL Hijacking (chiếm quyền điều khiển DLL) có thể cho phép kẻ tấn công khiến một phần mềm trên Windows khi đang thực thi sẽ gọi đến một DLL tùy ý của người này.
Các cuộc tấn công chiếm quyền điều khiển DLL có thể giúp kẻ tấn công có thể thực thi mã tùy ý, leo thang đặc quyền và tấn công persistence trên hệ thống đích.
Các kỹ thuật khác nhau của việc chiếm quyền điều khiển DLL được mô tải trên một bài blog của Beukema bao gồm DLL replacement, DLL Proxying, DLL search order hijacking, Phantom DLL hijacking, DLL redirection, WinSxS DLL replacement và path DLL Hijacking.
Giải thích về DLL Hijacking:
Cùng với các file DLL có trong hệ điều hành Windows, khi phát triển ứng dụng cũng phải có riêng các file DLL để thực hiện các chức năng khác. Các file DLL sẽ được đóng gói và được cài cùng với ứng dụng. Mặc định, khi một ứng dụng không có đường dẫn cố định chỉ đến một file DLL mà nó yêu cầu thì ứng dụng sẽ thực hiện tìm kiếm động. Đầu tiên ứng dụng sẽ tìm kiếm trong thư mục trước đó nó thực thi, sau đó sẽ tìm kiếm thư mục hệ thống, thư mục hệ thống 16-bit, thư mục Windows, thư mục hiện hành và sau đó là các thư mục được liệt kê trong biến môi trường PATH của hệ điều hành. Trong khi tìm kiếm các đường dẫn này, ứng dụng sẽ sử dụng DLL mà nó tìm thấy đầu tiên.
Khi thực thi một ứng dụng, nó phải thực hiện tìm kiếm động một DLL, ứng dụng sẽ ngay lập tức tìm kiếm đường dẫn mà nó được thực thi trước đó và tìm ra một DLL trùng khớp. Tuy nhiên với người dùng, DLL thực có liên quan tới ứng dụng nằm trong thư mục Windows system. Kẻ tấn công chỉ cần thay đổi DLL thực bằng một DLL tương tự và tùy ý, khi đó ứng dụng sẽ không thể tìm ra được DLL thực vì nó đã tìm thấy một DLL giống với DLL mà nó cần tìm.
Mô tả cách tấn công
Để chứng minh việc chiếm quyền điều khiển DLL liên quan đến đường dẫn trong thực tế, Beukema tập trung vào các thư viện có trong thư mục "C:\Windows\System32" trên máy Windows 10 (v1909).
Beukema đã sao chép file winstat.exe vào thư mục downloads trên hệ thống. Sau đó chạy thử và sử dụng công cụ theo dõi tiến trình để hiểu rõ hơn về việc EXE đang tìm kiếm những DLL nào trong quá trình thực thi.
Giám sát quá trình các DLL được truy cập
"Cách tốt nhất để tìm ra DLL nào được tải đúng cách là biên dịch DLL sau đó làm cho chúng ghi vào một tệp duy nhất khi tải thành công, tệp đó sẽ cho chúng ta biết DLL nào dễ bị tấn công DLL hijacking. "
Tuy nhiên, một thách thức đặt ra cho kẻ tấn công là tạo ra một DLL có thể được thực thi bởi một phần mềm mà không có bất kỳ vấn đề nào. Để có được sự hiểu biết về cấu trúc DLL hợp pháp, Beukema khuyên chúng ta nên sử dụng các công cụ như DLL Export Viewer để phân tích. Công cụ này cung cấp cái nhìn cụ thể về cấu trúc DLL được biên dịch lại bằng cách liệt kê tất cả các tên hàm bên ngoài, sau đó sẽ được sao chép trong một DLL Hijacking sử dụng để khai thác.
Các nhà nghiên cứu đã cung cấp một danh sách các thư viện là mục tiêu cho các cuộc tấn công hijacking. Đây không chỉ là các mục tiêu lý thuyết, chúng được thử nghiệm và xác nhận là có hiệu quả. Danh sách này bao gồm 287 tệp thực thi trong đó có 263 DLL.
Một danh sách đầy đủ các thư viện này đã được cung cấp qua GitHub.
Một số hạn chế
Như giải thích bởi các nhà nghiên cứu, cuộc tấn công này có thể thực hiện khi:
- Chỉ chạy các tệp thực thi không yêu cầu bất kỳ đối số nào
- Tránh các ứng dụng đi kèm với GUI nâng cao và khả năng báo lỗi
- Tránh các DLL được viết bằng C++
Bypassing UAC
User Account Control (UAC) là một tính năng bảo mật được thêm vào trong Windows Vista trở lên, nó hỏi người dùng xem họ có định chạy một ứng dụng có rủi ro cao trước khi nó được thực thi không.
Beukema giải thích: “Bạn có thể thử chạy mã tùy ý với các đặc quyền nâng cao bằng cách sử dụng một tệp thực thi được đánh dấu tự động nâng quyền khiến hệ thống dễ bị tấn công DLL hijacking. Có khoảng 35 mã thực thi như vậy".
Nếu khai thác thành công, các DLL độc hại được thực thi có thể sử dụng để tạo các lời nhắc lệnh nâng cao đặc quyền, cho phép truy cập vào máy tính với quyền quản trị.
“Vấn đề cần khắc phục là thư mục đáng tin cậy: cả tệp thực thi tự động và DLL tùy chỉnh cần được đặt trong thư mục đáng tin cậy, nhưng chúng không thể được ghi vào thư mục tin cậy bởi người dùng.”
Một số kỹ thuật "làm giả" có ích ở đây, chẳng hạn như tạo thư mục giả "C:\windows \system32" (có dấu cách ở ngay sau “windows”). Thư mục này có thể lừa một chương trình thực thi coi nó là "thư mục đáng tin cậy".
Có một số tranh luận nếu việc có thể tạo các thư mục như vậy nên được coi là một lỗ hổng bảo mật vì nó cung cấp một con đường cho kẻ tấn công khai thác lỗ hổng DLL hijacking.
"Người ta tranh cãi liệu đây có phải là một lỗ hổng bảo mật hay không - Microsoft cho rằng không phải vậy, nhưng ít nhất đó là một lỗ hổng, vì hầu hết các máy tính Windows cá nhân (không tính doanh nghiệp) đều sử dụng tài khoản administrator là tài khoản mặc định", nhà nghiên cứu nói.
VBScript là gì?
Một trong những lý do tác giả đề xuất sử dụng VBScript là vì việc tạo các thư mục Windows có tên chứa dấu cách không phải là thứ có thể làm được bằng cách thông thường
Bạn có thể viết một số dòng C để thực hiện điều này, chỉ với một vài dòng code bạn có thể làm việc này
Một PoC được viết bằng VBScript tạo ra các "thư mục đáng tin cậy" giả
Khi được hỏi bởi một người dùng, Beukema đã giải thích lý do tại sao anh ta chọn VBScript khi khai thác lỗ hổng DLL hijacking.
"Tôi biết ... đó chỉ là vì PowerShell sẽ không cho phép bạn làm điều đó, trong khi VBScript có. Và vì đó là VBScript, bạn sẽ không cần phải mang các tệp nhị phân được biên dịch để sử dụng thủ thuật này, nghĩa là ngoài DLL tùy chỉnh của bạn, bạn có thể làm mọi thứ với Living of the Land + script"
Kỹ thuật và phát hiện phòng ngừa
Một vài phương pháp có thể được sử dụng để ngăn chặn các cuộc tấn, chẳng hạn như tìm kiếm hoạt động trong thư mục giả “windows \”. Ngoài ra, điều chỉnh cài đặt UAC thành “always notify” (luôn thông báo) có thể giúp ngăn chặn các cuộc tấn công như thế này
Một cách khác là theo dõi các trường hợp tạo và tải DLL từ các đường dẫn không mong muốn nên khi xây dựng các ứng dụng, các nhà phát triển nên thực thi bằng cách sử dụng các đường dẫn tuyệt đối và không sử dụng đường dẫn tương đối để tải DLL.
Nguồn: bleepingcomputer
Chỉnh sửa lần cuối: