CSDL của Windows Defender (Phần 2)
Trong phần tiếp theo của bài viết về CSDL của windows defender (WD), ta sẽ cùng tìm hiểu về một số loại signature khác trong bộ cơ sở dữ liệu bao gồm SIGNATURE_TYPE_DELTA_BLOB, SIGNATURE_TYPE_FRIENDLYFILE_SHA256 và SIGNATURE_TYPE_LUASTANDALONE.
SIGNATURE_TYPE_DELTA_BLOB
Ở phần trước, ta đã tìm hiểu về các tập tin VDM. Trong số các tệp VDM, có tập tin mpasdlta.vdm và mpavdlta.vdm chứa thông tin về các thay đổi cho tập tin base VDM tương ứng.
Tập tin delta chứa các dữ liệu cập nhật nhằm giúp cho việc update signature nhanh hơn. Thay vì tải cả tập tin mới, chỉ cần tải tệp chứa các thay đổi và áp dụng các thay đổi này sẽ có 1 CSDL hoàn chỉnh. Dữ liệu trong tập tin delta bao gồm SIGNATURE_TYPE_DELTA_BLOB_RECINFO và SIGNATURE_TYPE_DELTA_BLOB. SIGNATURE_TYPE_DELTA_BLOB_RECINFO sẽ chứa các thông tin về bản cập nhật như phiên bản build,… Phần tử SIGNATURE_TYPE_DELTA_BLOB có cấu trúc gồm kích thước của CSDL sau khi áp dụng các thay đổi trong tệp delta, crc checksum và mảng dữ liệu delta:
Windows defender thực hiện ghép các dữ liệu data_blob bằng cách bắt đầu đọc 2 byte đầu tiên (WORD sizeX;), sau đó lấy dữ liệu cho tập tin hoàn chỉnh theo 2 hướng:
- Nếu bit trọng số cao nhất trong flagX được bật, đọc 1 đoạn dữ liệu có kích thước (flagX & 0x7fff) + 6 từ tập tin base tại offset là 4 byte tiếp theo (DWORD offset).
- Ngược lại, đọc 1 đoạn dữ liệu với kích thước sizeX tại offset hiện tại của tập tin delta.
Sau khi ghép hết các dữ liệu tại data_blob, tập tin VDM hoàn chỉnh sẽ được Windows Defender sử dụng thay vì tập tin VDM base ban đầu. Gần đây, MS đã phát hành bản vá cho CVE CVE-2023-24934 nhằm khắc phục vấn đề kẻ tấn công có thể tùy ý tạo ra tập tin delta VDM và áp dụng nó để cập nhật cho CSDL từ đó thay đổi database của windows defender và thực hiện các tấn công như xóa bỏ các signature bất kì, thêm whitelist cho tập tin theo hash,…. Mọi người có thể tham khảo tại bài viết tại Windows Defender Security Risk: Defender Pretender | SafeBreach.
SIGNATURE_TYPE_FRIENDLYFILE_SHA256
Ngoài các dữ liệu mô tả các điều kiện để phát hiện một mã độc hay hành vi độc hại, trong các tập tin VDM còn chứa cả các dạng dữ liệu khác có tác dụng làm danh sách loại trừ như SIGNATURE_TYPE_FRIENDLYFILE_SHA256.
Có thể coi tập hợp hợp gần 500.000 hash này là một danh sách loại trừ đáng tin để sử dụng trong quá trình rà soát tổng thể hệ thống, giúp tiết kiệm thời gian phân tích hơn.
SIGNATURE_TYPE_LUASTANDALONE
Trong bài phân tích tại https://github.com/commial/experiments/blob/master/windows-defender/ASR/README.md, tác giả đã chỉ ra việc sử dụng LUA script trong luồng hoạt động của Windows Defender. Signature của LUA script có thể tạm hiểu theo dạng cấu trúc:
Trong đó, Type là trường chưa rõ mục đích, DescSize là kích thước của chuỗi mô tả Category mà script thuộc về, nếu không được phân loại vào category nào thì giá trị của phần tử này sẽ = 0. LUASize là kích thước của script được tính từ phần header của LUA có giá trị là “1b 4c 75 61 51 00 01 04 08 04 08 01”. Dữ liệu data sẽ có thể bao gồm các chunk data khác sau đó mới tới phần nội dung của script. LUAScript được sử dụng ở đây là bản 5.1 và có thể decompile được bằng luadec https://github.com/viruscamp/luadec (cần build bản luadec 64 bit):
Để có thể decompile lua script, ta cần trích xuất dữ liệu LuaScript ra, sử dụng script tại https://github.com/commial/experiments/tree/master/windows-defender/lua để convert dữ liệu đó sang format mà luadec có thể decompile được (do MS đã thay đổi một phần header và kích thước của các trường dữ liệu), sau đó sử dụng luadec để decompile và lưu kết quả của output chương trình.
Đa số các script đều trích xuất và decompile được, tuy nhiên không phải script nào cũng được luadec decompile hoàn thiện 100% nhưng 1 phần nào cũng đã chứa nhiều thông tin đáng để tìm hiểu thêm.
Một số LUAScript hay ho sau khi được decompile
Script theo dõi commandline của các chương trình hay được ransomware sử dụng như wmic, vssadmin:
Script theo dõi các tiến trình đọc tiến trình lsass.exe, cũng bao gồm một số loại trừ:
Script phát hiện các tập tin có phần mở rộng bất thường hoặc bao gồm 2 phần mở rộng:
Script bắt tên các tập tin bất thường bằng regex của CVE-2023-38831 khai thác lỗ hổng của Winrar:
Script phát hiện các loại command encode của powershell:
Ngoài ra còn rất nhiều script khác, mọi người có thể xem thêm tại:
https://github.com/hongson11698/defender-database-extract/tree/master/as_db
Tổng kết
Việc tìm hiểu CSDL của windefender cho thấy nhiều lợi ích khác như tìm hướng tấn công, cách cập nhật bổ sung dữ liệu, phương thức sàng lọc, phát hiện các mối nguy mới hoặc cách bypass các signature đã có. Dưới đây là cập nhật 2 script (có thêm phần patch tập tin delta, friendly_sha256 và lua script) để trích xuất nội dung các tập trích vdm version 1.397.0.0 sau khải đã giải nén bằng WDExtract ra dữ liệu dạng csv để mọi người tham khảo. :
https://raw.githubusercontent.com/hongson11698/defender-database-extract/master/lua_sig_parser_decompile.py
https://raw.githubusercontent.com/hongson11698/defender-database-extract/master/extract_sig.cpp
Tài liệu tham khảo:
https://github.com/commial/experiments/tree/master/windows-defender/VDM
https://github.com/hfiref0x/WDExtract
https://github.com/SafeBreach-Labs/wd-pretender
Cảm ơn các bạn đã đón đọc!
By,
Blue_Team