Tools

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.

Trang GitHub của mandiant/capa
Trang GitHub của mandiant/capa (ảnh chụp tháng 11/2026)

GitHub: https://github.com/mandiant/capa · khoảng 6,3 nghìn sao · Python · Apache-2.0

Phần 1: phân loại nhanh (triage)

RepoTrả lời câu hỏiSao · License
mandiant/capaChương trình này có những khả năng gì (mạng, persistence, mã hoá…)?~6,3k · Apache-2.0
mandiant/flare-flossChuỗ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 / yaraFile 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.

RepoChạy trênĐiểm mạnhSao · License
google/bindiffIDA, 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/diaphoraIDANhiều heuristic so khớp, so sánh cả mã giả decompile~4,5k · AGPL-3.0
clearbluejar/ghidriffGhidra, dòng lệnhMộ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

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 scan thà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

  1. mandiant/capa (GitHub) — mandiant
  2. mandiant/flare-floss (GitHub) — mandiant
  3. VirusTotal/yara-x (GitHub) — VirusTotal
  4. google/bindiff (GitHub) — google
  5. joxeankoret/diaphora (GitHub) — joxeankoret
  6. clearbluejar/ghidriff (GitHub) — clearbluejar
  7. mytechnotalent/Reverse-Engineering (GitHub) — mytechnotalent
  8. guyinatuxedo/nightmare (GitHub) — guyinatuxedo