Tools

RE Toolkit (4/5): phân tích firmware IoT với binwalk v3, unblob, EMBA, FACT và Qiling

Tóm tắt

binwalk v3 viết lại bằng Rust để nhận diện và giải nén; unblob giải nén hơn 78 định dạng chính xác hơn; EMBA quét toàn diện và sinh SBOM; FACT quản lý nhiều phiên bản; Qiling giả lập ARM/MIPS. Entropy cao, phẳng thường là firmware mã hoá.

Router, camera IP, thiết bị IoT trong nhà máy đều chạy firmware: một file nhị phân chứa bootloader, kernel và cả hệ thống file Linux thu nhỏ. Lỗ hổng thường nằm ngay trong đó: mật khẩu cứng, BusyBox cũ hàng chục năm, dịch vụ web viết bằng C không kiểm tra đầu vào. Bài 4 của loạt RE Toolkit giới thiệu năm repo mã nguồn mở để đi từ file .bin tải về tới danh sách điểm yếu cụ thể.

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

GitHub: https://github.com/ReFirmLabs/binwalk · khoảng 14,6 nghìn sao · Rust · MIT

Năm repo theo từng bước

BướcRepoLàm gìSao · License
Nhận diện, giải nénReFirmLabs/binwalkTìm file và dữ liệu nhúng bên trong, đồ thị entropy, giải nén~14,6k · MIT
Giải nén chính xáconekey-sec/unblobGiải nén đệ quy hơn 78 định dạng, cắt riêng phần không nhận diện được~2,6k · MIT
Phân tích tự độnge-m-b-a/embaQuét bảo mật firmware toàn diện, sinh SBOM và báo cáo HTML~3,8k · GPL-3.0
Quản lý, so sánhfkie-cad/FACT_coreNền tảng web lưu trữ, phân tích và so sánh nhiều phiên bản firmware~1,5k · GPL-3.0
Giả lậpqilingframework/qilingGiả lập binary đa kiến trúc (ARM, MIPS…) có thể can thiệp từng bước~6,2k · GPL-2.0

binwalk v3: viết lại bằng Rust

binwalk là công cụ kinh điển của mảng này; bản v3 được viết lại hoàn toàn bằng Rust để nhanh và chính xác hơn bản Python cũ. Cách dễ nhất để có đủ công cụ giải nén phụ thuộc là build Docker image theo wiki, hoặc cài qua cargo.

binwalk firmware.bin        # liệt kê những gì nhúng bên trong
binwalk -eM firmware.bin    # giải nén, quét đệ quy file vừa giải nén
binwalk -E firmware.bin     # đồ thị entropy

Đọc đồ thị entropy: vùng gần 1 và phẳng thường là dữ liệu nén hoặc mã hoá. Nếu toàn bộ file có entropy cao mà binwalk không nhận ra định dạng nén nào, nhiều khả năng firmware đã được mã hoá và bạn cần tìm khoá (thường trong bản firmware cũ hơn hoặc bootloader).

unblob: khi binwalk giải nén chưa sạch

unblob xác định cả điểm đầu và điểm cuối của từng khối theo đặc tả định dạng, nên ít báo nhầm hơn, và phần không khớp định dạng nào được cắt riêng kèm entropy để bạn xem tay. Nó chạy với quyền user thường và xuất báo cáo JSON.

pip install unblob
unblob --show-external-dependencies     # kiểm tra công cụ phụ thuộc
unblob -e ./out --report report.json firmware.bin

EMBA: từ file firmware tới báo cáo

EMBA tự động hoá cả chuỗi: giải nén, nhận diện kiến trúc, tìm thành phần và phiên bản, đối chiếu CVE, tìm mật khẩu cứng và cấu hình nguy hiểm, phân tích tĩnh binary và có thể giả lập để kiểm thử động. Kết quả là báo cáo HTML và SBOM. EMBA nằm trong phương pháp OWASP Firmware Security Testing Methodology.

git clone https://github.com/e-m-b-a/emba.git && cd emba
sudo ./installer.sh -d
sudo ./emba -l ./log -f ./firmware.bin -p ./scan-profiles/default-scan.emba

Một lần quét đầy đủ có thể mất nhiều giờ; nên chạy trên máy ảo riêng. Repo anh em EMBArk cung cấp giao diện web để quản lý nhiều lần quét.

FACT và Qiling: khi làm ở quy mô lớn hoặc cần chạy thử

  • FACT_core phù hợp với team phải theo dõi hàng trăm bản firmware: tải lên một lần, tự giải nén và phân tích bằng plugin, rồi so sánh hai phiên bản để thấy file nào thay đổi sau bản vá.
  • Qiling giả lập một binary ARM/MIPS trên laptop x86 mà không cần thiết bị thật, cho phép hook syscall, đặt điểm dừng và theo dõi bộ nhớ. Hữu ích để kiểm tra một dịch vụ web của router mà không phải dựng lại cả hệ thống.

Lưu ý an toàn

  • Hệ thống file giải nén có thể chứa symlink trỏ ra ngoài (ví dụ tới /etc). Giải nén trong VM hoặc container, không dùng sudo khi không cần thiết.
  • Chỉ phân tích firmware thiết bị bạn sở hữu hoặc được phép; công bố lỗ hổng theo quy trình responsible disclosure.
  • Kết quả đối chiếu CVE theo phiên bản có thể báo nhầm do nhà sản xuất backport bản vá; cần xác minh lại.

Áp dụng thế nào?

  • Dev nhúng: Chạy unblob và EMBA trên firmware của chính bạn trước khi phát hành; thứ bạn thấy cũng là thứ đối thủ và kẻ tấn công thấy.
  • Tech Lead: Dùng SBOM từ EMBA để theo dõi thành phần bên thứ ba, đáp ứng yêu cầu ngày càng phổ biến về SBOM cho thiết bị kết nối.
  • PM: Khi mua thiết bị IoT cho doanh nghiệp, yêu cầu nhà cung cấp gửi báo cáo kiểu này, hoặc tự chạy EMBA trên firmware công khai để so sánh độ "sạch" giữa các hãng.

Nguồn & tham khảo

  1. ReFirmLabs/binwalk (GitHub) — ReFirmLabs
  2. onekey-sec/unblob (GitHub) — onekey-sec
  3. e-m-b-a/emba (GitHub) — e-m-b-a
  4. fkie-cad/FACT_core (GitHub) — fkie-cad
  5. qilingframework/qiling (GitHub) — qilingframework