RE Toolkit (5/5): triage malware và so sánh bản vá — capa, FLOSS, YARA-X, BinDiff, ghidriff
Tóm tắt
Triage tự động trả lời 'file này làm được gì' trong vài phút với capa, FLOSS, YARA-X. Patch diffing với ghidriff (một lệnh, dùng Ghidra), BinDiff hoặc Diaphora cho biết bản vá đã sửa hàm nào. Học tiếp với mytechnotalent/Reverse-Engineering và nightmare.
Hai câu hỏi xuất hiện liên tục trong công việc bảo mật: "File lạ này có thể làm gì?" và "Bản vá vừa phát hành đã sửa cái gì?". Trả lời bằng cách đọc từng hàm trong Ghidra thì mất nhiều ngày. Bài cuối của loạt RE Toolkit giới thiệu các repo tự động hoá hai việc đó: capa, FLOSS, YARA để phân loại nhanh, BinDiff, Diaphora, ghidriff để so sánh bản vá, và ba repo học tập để đi tiếp.

Phần 1: phân loại nhanh (triage)
| Repo | Trả lời câu hỏi | Sao · License |
|---|---|---|
| mandiant/capa | Chương trình này có những khả năng gì (mạng, persistence, mã hoá…)? | ~6,3k · Apache-2.0 |
| mandiant/flare-floss | Chuỗi nào bị giấu (mã hoá, dựng trên stack) mà strings không thấy? | ~4,2k · Apache-2.0 |
| VirusTotal/yara-x / yara | File nào khớp mẫu đã biết? (YARA-X là bản viết lại bằng Rust) | ~1,4k / ~10k · BSD-3-Clause |
capa: khả năng thay vì chữ ký
capa nhận PE, ELF, module .NET, shellcode hoặc báo cáo sandbox, rồi đối chiếu với bộ quy tắc cộng đồng (repo capa-rules) để liệt kê khả năng, ánh xạ sang MITRE ATT&CK. Kết quả kiểu "gửi HTTP request", "tạo service", "thực thi lệnh shell" cho bạn biết nên mở hàm nào trước.
capa sample.exe # bảng ATT&CK + danh sách khả năng
capa -v sample.exe # chi tiết: khả năng nằm ở địa chỉ/hàm nào
Kết quả có thể xem trực quan trên capa Explorer Web hoặc nạp vào IDA/Ghidra để nhảy thẳng tới hàm liên quan.
FLOSS và YARA
FLOSS giả lập các hàm giải mã để khôi phục chuỗi bị giấu, thường lộ ra URL máy chủ điều khiển, tên mutex, khoá registry. YARA biến những phát hiện đó thành quy tắc để quét hàng nghìn file khác:
floss sample.exe
rule Suspicious_Downloader {
strings:
$api = "URLDownloadToFileA" ascii
$cmd = "cmd.exe /c" ascii nocase
condition:
uint16(0) == 0x5A4D and all of them
}
yr scan rules.yar ./samples/ # YARA-X
Phần 2: so sánh bản vá (patch diffing)
Khi nhà cung cấp phát hành bản vá bảo mật mà không công bố chi tiết, so sánh binary trước và sau vá cho thấy chính xác hàm nào đổi. Đội phòng thủ dùng để đánh giá mức độ khẩn cấp và viết luật phát hiện; đội phát triển dùng để kiểm tra bản vá của thư viện bên thứ ba có đúng như changelog nói.
| Repo | Chạy trên | Điểm mạnh | Sao · License |
|---|---|---|---|
| google/bindiff | IDA, Ghidra, Binary Ninja (qua BinExport) | Chuẩn công nghiệp, Google đã mở mã nguồn, giao diện so sánh đồ thị | ~3,2k · Apache-2.0 |
| joxeankoret/diaphora | IDA | Nhiều heuristic so khớp, so sánh cả mã giả decompile | ~4,5k · AGPL-3.0 |
| clearbluejar/ghidriff | Ghidra, dòng lệnh | Một lệnh duy nhất, xuất Markdown/JSON/HTML, dễ tự động hoá | ~0,8k · GPL-3.0 |
ghidriff: patch diff trong một lệnh
ghidriff dùng Ghidra (miễn phí) để tìm hàm được thêm, xoá và sửa, kèm "meta diff" về chuỗi, hàm gọi/được gọi. Theo README, sau khi Ghidra phân tích xong, nó có thể diff toàn bộ nhân Windows trong chưa tới một phút.
pip install ghidriff # cần Ghidra đã cài
ghidriff old/driver.sys new/driver.sys
# hoặc dùng Docker:
docker run -it --rm -v $(pwd)/ghidriffs:/ghidriffs \
ghcr.io/clearbluejar/ghidriff:latest ghidriffs/old.sys ghidriffs/new.sys
File Markdown đầu ra có thể dán thẳng vào gist, wiki nội bộ hoặc ticket, rất tiện để cả team cùng xem.
Phần 3: repo để học tiếp
- mytechnotalent/Reverse-Engineering (~15,1k sao): giáo trình miễn phí về x86, x64, ARM 32/64-bit, AVR 8-bit, RISC-V.
- guyinatuxedo/nightmare (~3,3k sao): khoá học khai thác binary và reverse dựa trên các bài CTF thật.
- wtsxDev/reverse-engineering (~10,8k sao): danh sách tài nguyên "awesome"; cập nhật lần cuối năm 2023 nên một số link đã cũ.
Lưu ý
- capa và YARA chỉ mạnh bằng bộ quy tắc; mẫu mới hoặc bị làm rối nặng có thể không khớp gì.
- FLOSS giả lập code của mẫu nhưng không chạy thật; vẫn nên dùng trong VM phân tích.
- Diff giữa hai bản build khác trình biên dịch hoặc tối ưu sẽ ra rất nhiều thay đổi nhiễu; so sánh các bản liền kề.
Áp dụng thế nào?
- Dev / SOC: Gộp
capa+floss+yr scanthành một script triage chạy trên mọi file đáng ngờ trước khi mở Ghidra. - Tech Lead: Khi thư viện native quan trọng phát hành bản vá bảo mật, chạy ghidriff giữa hai phiên bản và đính kèm báo cáo vào ticket nâng cấp.
- PM: Triage tự động giúp quyết định trong vài phút file nào cần chuyên gia, thay vì xếp hàng chờ phân tích tay.
Nguồn & tham khảo
- mandiant/capa (GitHub) — mandiant
- mandiant/flare-floss (GitHub) — mandiant
- VirusTotal/yara-x (GitHub) — VirusTotal
- google/bindiff (GitHub) — google
- joxeankoret/diaphora (GitHub) — joxeankoret
- clearbluejar/ghidriff (GitHub) — clearbluejar
- mytechnotalent/Reverse-Engineering (GitHub) — mytechnotalent
- guyinatuxedo/nightmare (GitHub) — guyinatuxedo