6 phút đọc
Trong hệ sinh thái các công cụ phân tích thiết bị thông minh, repository nmatt0/moria nổi lên như một giải pháp chuyên biệt dành cho nhiệm vụ nhận dạng và bóc tách dữ liệu từ các tệp tin firmware IoT. Được phát triển chính bằng ngôn ngữ C++ và ghi nhận lần cập nhật gần đây vào ngày 30/10/2026, dự án hiện đạt 440 lượt stars cùng 60 lượt forks. Moria được thiết kế để phát hiện các thành phần nhúng bên trong hình ảnh firmware mà không đòi hỏi quyền quản trị root hay sự hỗ trợ từ các công cụ bên ngoài.
Cơ chế nhận diện cấu trúc và giải nén an toàn
Moria tự động quét và phân tích cấu trúc của các tệp firmware IoT nhằm phát hiện những thành phần nhúng như hệ thống tệp (filesystems), nhân hệ điều hành (kernels), trình khởi động (bootloaders), tệp nén (archives) và các khóa bảo mật (keys). Mỗi kết quả phân tích được công cụ báo cáo chi tiết bao gồm vị trí offset theo byte, phân loại định dạng và độ tin cậy của phát hiện.
Công cụ hỗ trợ hai chế độ xuất dữ liệu: hiển thị định dạng văn bản dễ đọc cho người dùng mặc định hoặc truy xuất định dạng JSON chuẩn thông qua cờ -j. Định dạng JSON sạch này giúp các kịch bản tự động hóa hoặc đại lý mô hình ngôn ngữ lớn (LLM agents) dễ dàng kết nối và điều khiển.
Khi kích hoạt tham số -e, Moria tiến hành giải nén các định dạng được nhận diện vào thư mục có tên <file>.extracted/. Mỗi vùng dữ liệu sẽ được phân loại vào từng thư mục riêng biệt theo định dạng 0x<offset>-<type>/, đồng thời tạo ra một tệp manifest.json để ánh xạ chính xác các offset tới đường dẫn tương ứng. Công cụ có khả năng tự động đệ quy vào các bộ chứa lồng nhau và dựng lại các hình ảnh UBI theo từng volume.
Để phòng chống các cuộc tấn công thông qua dữ liệu đầu vào độc hại (như bom nén), Moria tích hợp sẵn các cơ chế bảo vệ nghiêm ngặt:
- Thiết lập giới hạn độ sâu đệ quy qua
--depth. - Khống chế số lượng tệp tối đa bằng
--max-files. - Giới hạn dung lượng byte xử lý qua
--max-bytes. - Áp đặt trần tỷ lệ nén (decompression-ratio cap).
Nếu một trong các rào cản bảo vệ này bị kích hoạt, nhánh xử lý đó sẽ dừng lại nhưng công cụ vẫn khôi phục và trả về đầy đủ các dữ liệu đã thu thập được trước đó.
Kiến trúc tự đóng gói và khả năng mở rộng chữ ký
Một ưu điểm kỹ thuật của Moria là tính độc lập cao. Toàn bộ tập hợp chữ ký nhận dạng (signatures) đều được tích hợp sẵn vào tập tin thực thi trong quá trình biên dịch. Điều này giúp tệp nhị phân moria có thể chạy ở bất kỳ môi trường nào sau khi sao chép mà không cần cài đặt thêm tệp hỗ trợ đi kèm.
Trong trường hợp người dùng muốn thử nghiệm tệp cấu hình chữ ký dạng .toml mới mà không muốn biên dịch lại toàn bộ công cụ, Moria cho phép chỉ định thư mục chữ ký bên ngoài thông qua tùy chọn --sigs DIR hoặc thiết lập biến môi trường $MORIA_SIGDIR.
Moria thực hiện toàn bộ quá trình giải nén ngay trong tiến trình (in-process), hoàn toàn không phụ thuộc vào công cụ thứ ba và không yêu cầu quyền lệnh sudo.
Để biên dịch đầy đủ Moria, hệ thống cần trình quản lý build CMake, trình biên dịch hỗ trợ chuẩn C++20 cùng các thư viện phát triển như zlib, liblzma, lz4 và zstd. Trên các hệ điều hành Debian hoặc Ubuntu, người dùng cài đặt gói phụ thuộc qua lệnh sudo apt install cmake g++ zlib1g-dev liblzma-dev liblz4-dev libzstd-dev. Nếu muốn xây dựng phiên bản tối giản chỉ dùng để nhận dạng mà không cần giải nén, người dùng có thể cấu hình tùy chọn -DMORIA_OPTIONAL_CODECS=ON để vô hiệu hóa các bộ giải mã còn thiếu.
Việc bổ sung một định dạng mới vào hệ thống khá đơn giản: người phát triển chỉ cần thả một tệp .toml vào thư mục signatures/. Công cụ chỉ yêu cầu viết thêm bộ xác thực C++ nhỏ đối với các trường hợp mà lớp khai báo không thể biểu diễn, ví dụ như kiểm tra CRC hoặc con trỏ liên khối. Chi tiết về quy ước trường dữ liệu như magic_offset, thứ tự byte (endianness), chữ ký ngắn, ràng buộc mềm và hợp đồng xác thực được ghi nhận tại tệp SIGAUTHORING.md.
Tái thực thi thuật toán độc lập và phân định ranh giới tính năng
Về mặt kỹ thuật, một số trình xử lý định dạng lưu trữ trên đĩa của Moria là kết quả của việc tái thực thi độc lập các thuật toán từ những dự án mã nguồn mở khác trên lớp I/O riêng của Moria mà không sao chép mã nguồn nguyên bản:
- Bộ giải nén UCL/NRV2B và bộ lọc CTO từ UPX/UCL (tuân thủ giấy phép GPL-2.0, chỉ áp dụng thuật toán).
- Cấu trúc metadata-commit và CTZ skip-list của littlefs (tuân thủ giấy phép BSD-3-Clause).
- Bố cục trang và đối tượng của SPIFFS (tuân thủ giấy phép MIT).
Tác giả dự án cũng làm rõ ranh giới chức năng: Moria tập trung hoàn toàn vào việc nhận dạng cấu trúc, giải nén và bóc tách dữ liệu (carving). Các tác vụ khác như quét lộ mật khẩu/thông tin xác thực (secret/credential scanning), quản lý danh mục thành phần phần mềm (SBOM), phân tích lỗ hổng bảo mật (CVE) hay phân tích giấy phép mã nguồn không thuộc phạm vi của Moria mà được đảm nhiệm bởi một công cụ riêng biệt có tên là mithril.
Điều còn bỏ ngỏ
Dù thông tin từ repository cung cấp cái nhìn chi tiết về kiến trúc C++20, cơ chế bảo vệ an toàn và cách thức tùy biến chữ ký qua TOML, tài liệu hiện tại vẫn chưa đề cập đến hiệu năng xử lý thực tế (benchmark) của Moria khi đối mặt với các bộ dữ liệu firmware dung lượng cực lớn so với các công cụ truyền thống. Ngoài ra, thông tin tích hợp sâu hơn giữa Moria và công cụ phân tích an ninh đi kèm (mithril) cũng như kế hoạch mở rộng danh sách thuật toán tệp tin mặc định trong các phiên bản tiếp theo vẫn chưa được công bố chi tiết.
Nguồn tham khảo: Xem bài gốc