Phân tích các tấn cơng chiếm quyền điều khiển DLL
Trong bài này chúng tôi sẽ giới thiệu cho các bạn các lỗi trong kiến
trúc phần mềm có thể bị tấn công chiếm quyền điều khiển DLL, cách
phát hiện các ứng dụng có lỗ hổng hay khơng và cuối cùng là các
bước thực hiện để bảo đảm tránh được các tấn công kiểu này.
Cho đến cuối tháng 8 năm 2010, các nhà nghiên cứu bảo mật đã tiết lộ
các thông tin chi tiết về một lớp lỗ hổng bảo mật mà theo họ đã có một số
ảnh hưởng khá rộng. Họ đã phát hiện ra hàng trăm ứng dụng bị hổng
trước các tấn công này và tấn công này được đặt tên là chiếm quyền điều
khiển DLL (DLL Hijacking). Trong bài này chúng tôi sẽ giới thiệu cho cá
bạn một số lỗi về kiến trúc phần mềm có thể bị ảnh hưởng bởi các tấn
cơng này, thêm vào đó là cách cách phát hiện các ứng dụng có lỗ hổng
hay khơng và cuối cùng là các bước thực hiện để bảo đảm tránh được các
tấn công kiểu này.
Cách tấn công
DLL hijacking có thể được thực hiện là vì tất cả các ứng dụng Windows
đều dựa vào các thư viện liên kết động (viết tắt DLL) với tư cách là
những phần trong chức năng lõi của chúng. Các file DLL được các
chuyên gia phát triển phần mềm viết và triệu gọi bên trong các ứng dụng
của họ nhằm thực hiện các chức năng khác nhau. Bản thân Windows
cũng dựa trên kiểu kiến trúc như vậy và có chứa vơ số file DLL để thực
hiện rất nhiều chức năng khác nhau.
Hack Internet OS và bảo mật - Tập 1
Tác giả: Vũ Đình Cường (Chủ biên), Phương Lan (Hiệu
đính)
Giá bán: 49.000 VNĐ
Cùng với các file DLL có trong hệ điều hành Windows, các chuyên gia
phát triển ứng dụng cũng thường viết riêng các file DLL của họ để thực
hiện một số chức bởi chương trình. Khi viết xong, các file DLL sẽ được
đóng gói và được cài đặt cùng với ứng dụng. Vấn đề nảy sinh theo cách
các ứng dụng load các file DLL này. Mặc định, khi một ứng dụng khơng
có đường dẫn được định nghĩa cố định để chỉ đến một file DLL nào đó
mà nó u cầu thì ứng dụng này sẽ thực hiện hành động tìm kiếm động.
Trong quá trình thực hiện tìm kiếm, đầu tiên ứng dụng sẽ tìm kiếm trong
thư mục mà trước đó nó được 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 trong biến mơi trường PATH của hệ điều
hành. Trong 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.
Với các kiến thức cơ bản trên, hãy hình dung một kịch bản mà ở đó
chúng ta đã thực thi một ứng dụng 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 với ứng dụng nằm trong thư mục Windows system.
DLL được đặt trong thư mục với ứng dụng là DLL đã được điều chỉnh
bởi một kẻ tấn công nhằm truy cập từ xa vào hệ thống. Rõ ràng, ứng dụng
sẽ khơng thể tìm ra được DLL thực vì nó đã tìm thấy DLL trùng khớp mà
nó cần tìm.
Nhận dạng các ứng dụng có lỗ hổng
Vấn đề lớn nhất với các tấn công DLL hijacking là Microsoft khơng thể
phát hành bản vá để có thể vá được tất cả các ứng dụng có lỗ hổng. Điều
này là vì nếu tung ra một bản vá như vậy sẽ làm cho một số ứng dụng bị
vơ hiệu hóa. Chính vì vậy việc khắc phục vấn đề sẽ liên quan đến cả hai
bên. Đầu tiên, các công ty và chuyên gia phát triển phần mềm, người đã
tạo các ứng dụng có lỗ hổng phải sửa code của họ và cung cấp các bản
cập nhật đến người dùng. Tiếp đến, người dùng (các quản trị viên hệ
thống) phải xác định xem liệu mạng của họ có đang sử dụng các ứng
dụng có lỗ hổng hay khơng, tìm ra và cài đặt các bản vá được các hãng
cung cấp.
Có một số cách có thể phát hiện liệu bạn có đang sử dụng ứng dụng có lỗ
hổng hay khơng. Phương pháp đơn giản nhất là kiểm tra các tài nguyên
công cộng được post bởi các nhà nghiên cứu bảo mật và xem ứng dụng
của bạn có tồn tại ở đó hay khơng. Bạn có thể tìm kiếm các tài ngun
như vậy ở đây.
Hình 1: Danh sách các ứng dụng có lỗ hổng
Phương pháp thứ hai yêu cầu thêm một số công việc vì những gì cần
được thực hiện sẽ xảy ra trong các mơi trường bảo mật cao. Rất có thể
bạn sẽ nghĩ phương pháp này địi hỏi phải có hiểu biết kỹ thuật và chỉ
dành cho các chuyên gia bảo mật mức cao. Tuy nhiên không phải như
vậy, chuyên gia bảo mật HD Moore đã biết tầm quan trọng của tấn công
này và đã phát triển một bộ kit thẩm định (auditing kit), đây là bộ kit có
thể được sử dụng để tìm kiếm các ứng dụng có lỗ hổng trong một hệ
thống nào đó.
Bộ kit này có tên gọi DllHijackAuditKitv2 và được cung cấp tại đây. Khi
download xong, bạn cần đăng nhập với tư cách quản trị viên hệ thống,
bung các nội dung của file nén ZIP và thực thi file 01_StartAudit.bat.
Kịch bản này sẽ download Sysinternals Process Monitor và bắt đầu thực
hiện việc kiểm tra hệ thống để tìm ra các ứng dụng có lỗ hổng. Trong q
trình chạy nếu việc download Process Monitor thất bại thì bạn có thể
download nó trực tiếp từ đây. Khi đã download, bảo đảm cho Process
Monitor nằm trong cùng thư mục với các kịch bản thẩm định. Kịch bản
thẩm định ban đầu sẽ mất khá nhiều thời gian để chạy. Phụ thuộc vào số
lượng ứng dụng trên hệ thống mà việc thẩm định có thể mất từ 15 phút
đến hàng giờ.
Hình 2: Kiểm tra thẩm định ứng dụng có liên quan với phần mở rộng file
Sau khi kịch bản thẩm định hồn tất sự thực thi của nó, bạn phải chuyển
qua ứng dụng kiểm tra quá trình đã xuất hiện bởi kịch bản và lưu báo cáo
mà nó tạo ra. Kích File và Save để thực hiện việc đó. Bảo đảm lưu file ở
định dạng CSV với tên Logfile.CSV trong thư mục audit kit.
Tiếp đến, chạy kịch bản 02_Analyze.bat. Kịch bản này sẽ phân tích cú
pháp file CSV và tìm ra các lỗ hổng tiềm tàng. Nếu có lỗ hổng nào đó
được phát hiện, ứng dụng sẽ tạo một mã khai thác để minh chứng cho lỗ
hổng.
Hình 3: Kịch bản thứ hai cố gắng khai thác các lỗ hổng tiềm tàng đã được
phát hiện
Cuối cùng, nhắc lệnh bên trái được mở bởi kịch bản sẽ liệt kê các ứng
dụng đã bị khai thác thành cơng. Với một ứng dụng có thể bị khai thác,
kịch bản sẽ tạo một thư mục con bên dưới thư mục khai thác. Các thư
mục con này sẽ chứa các khai thác đang làm việc cho các ứng dụng bị
ảnh hưởng. Các khai thác sẽ thực hiện những thứ như khởi chạy các
command shell và các bộ lắng nghe backdoor. Đây chính là bằng chứng
về các khai thác vì chúng khởi chạy file calc.exe.
Các thông tin này sẽ rất có ích cho bạn trong việc phát hiện xem mình có
sử dụng các ứng dụng có lỗ hổng hay khơng.
Ngăn chặn tấn công
Trong khi đợi các bản vá phần mềm, có một số thứ bạn có thể thực hiện
để hạn chế việc lộ diện của bạn trước các tấn công DLL hijacking.
Sử dụng bản vá CWDIllegalInDllSearch
Đáp trả ban đầu bởi Microsoft cho lớp các lỗ hổng này là thay đổi
registry qua việc thay đổi cách load các DLL nhằm giảm nhẹ tấn công.
Bản vá đã được triển khai rất cẩn thận vì nó có thể phá vỡ chức năng hoạt
động của các ứng dụng đã cài đặt, tuy nhiên cũng nên test nếu bạn quan
tâm đến kiểu tấn công này. Bạn có thể đọc thêm về bản vá ở đây.
Khóa Outbound SMB vành đai
Hầu hết các tổ chức đã thực hiện điều này, cịn nếu bạn chưa thực hiện thì
đây là thời điểm tốt để làm điều đó. Điều này cũng giúp bạn tránh được
một số kiểu tấn công khác.
Hủy bỏ cài đặt phần mềm có lỗ hổng
Cách thức này không phải lúc nào cũng khả thi, tuy nhiên nếu bạn đang
sử dụng một ứng dụng có lỗ hổng và có thể dễ dàng thay thế thì cơng việc
mà bạn cần thực hiện để bảo đảm sự an toàn là chuyển đổi ứng dụng.
Triển khai phần phềm phát hiện xâm nhập (IDS)
Trong một số trường hợp không thể giảm nhẹ tấn cơng thì tốt nhất là tìm
ra kẻ tấn cơng trong sau khai thác. Sử dụng các công cụ phát hiện xâm
phạm miễn phí như Snort, bạn có thể phát hiện các dấu hiệu của hành
động tấn công mà ai đó đã khai thác trên máy tính có lổ hổng.
Kết luận
Sự xuất hiện của rất nhiều lỗ hổng DLL hijacking đã tạo ra một kịch bản
đáng quan tâm vì thực tế chúng ta không thể phát hành một bản vá cho hệ
điều hành để có thể vá một loạt các ứng dụng. Cách tốt nhất bạn có thể
thực hiện là bảo đảm rằng mình biết và có kiến thức về cách làm việc của
kiểu tấn công này, biết cách test xem nó có tồn tại trên các ứng dụng mà
bạn đang sử dụng trong mạng của mình hay khơng, tiếp đó cần phải nhận
các thơng tin đúng từ những người có thể cấp bản vá để sửa nó.