Quản trị mạng – 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ó yê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 nguyên 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 quá 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 hoà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ó.