Tích hợp Cargo-Auditable: Theo dõi Thành phần Rust trong 10 phút

cargo-auditable là một công cụ hữu ích giúp bạn có thể kiểm tra các thành phần phụ thuộc của các tệp nhị phân Rust được tạo ra trong môi trường sản xuất. Công cụ này nhúng thông tin về cây phụ thuộc trực tiếp vào tệp nhị phân đã biên dịch. Điều này cho phép bạn quét các lỗ hổng bảo mật đã biết trên quy mô lớn mà không cần phải duy trì danh sách phụ thuộc thủ công.

Tại sao nên sử dụng Cargo-Auditable?

Việc quản lý các thành phần phụ thuộc là cực kỳ quan trọng trong phát triển phần mềm, đặc biệt là trong môi trường sản xuất. cargo-auditable giải quyết các thách thức thường gặp trong quản lý phụ thuộc truyền thống:

  • Không cần ghi chép thủ công: Tự động nhúng thông tin phụ thuộc vào tệp nhị phân, loại bỏ nhu cầu duy trì danh sách phụ thuộc riêng biệt.
  • Kích thước nhỏ gọn: Dữ liệu nhúng thường chỉ chiếm chưa đầy 4KB, ngay cả đối với các dự án lớn có hơn 400 phụ thuộc.
  • Khả năng tương thích rộng: Hỗ trợ chính thức cho Linux, Windows, macOS và WebAssembly, cùng với khả năng tương thích với các mục tiêu ELF khác.
  • Tích hợp hệ sinh thái: Hoạt động liền mạch với nhiều công cụ quét lỗ hổng và tạo Báo cáo Vật liệu Phần mềm (SBOM).

Cài đặt

Việc cài đặt cargo-auditable rất đơn giản. Chạy lệnh sau trong terminal của bạn:

cargo install cargo-auditable cargo-audit

Lệnh này cài đặt hai công cụ:

  • cargo-auditable: Dùng để biên dịch các tệp nhị phân với thông tin phụ thuộc.
  • cargo-audit: Dùng để quét lỗ hổng trong các tệp nhị phân đã được xử lý.

Cách sử dụng

Biên dịch cơ bản

Sử dụng cargo-auditable tương tự như quy trình biên dịch cargo thông thường. Chỉ cần thêm tiền tố auditable vào lệnh cargo của bạn:

cargo auditable build --release

Lệnh này sẽ biên dịch dự án của bạn và nhúng dữ liệu cây phụ thuộc vào tệp nhị phân kết quả. Mọi đối số bạn cung cấp cho cargo auditable sẽ được chuyển tiếp nguyên vẹn tới cargo, cho phép bạn tiếp tục sử dụng các tùy chọn biên dịch quen thuộc.

Quét lỗ hổng

Sau khi biên dịch, hãy sử dụng cargo audit để quét tệp nhị phân đã tạo:

cargo audit bin target/release/ten-cua-ban

Thay thế ten-cua-ban bằng tên tệp thực thi của bạn. Lệnh này sẽ phân tích thông tin phụ thuộc được nhúng và báo cáo bất kỳ lỗ hổng bảo mật đã biết nào.

Sử dụng với Rust Nightly

Nếu bạn đang sử dụng phiên bản nightly của Rust, bạn có thể tận dụng tính năng tiền thân SBOM gốc của Cargo để ghi lại các thành phần phụ thuộc một cách chính xác hơn:

CARGO_BUILD_SBOM=true cargo +nightly auditable build -Z sbom --release

Lưu ý: Do một lỗi đã biết trong Cargo, nếu bạn sử dụng cả -Z sbom và lệnh cargo auditable không có tùy chọn này trong cùng một dự án, bạn có thể cần chạy touch src/* hoặc cargo clean trước.

Tích hợp vào quy trình làm việc hiện có

Thay thế Cargo

Nếu bạn không thể sửa đổi trực tiếp cách gọi cargo, bạn có thể sử dụng cargo-auditable làm trình thay thế cho cargo. Xem tệp REPLACING_CARGO.md trong kho lưu trữ dự án để biết thêm chi tiết.

Thiết lập bí danh (Khuyến nghị)

Để sử dụng cargo-auditable thuận tiện hơn, bạn có thể thiết lập một bí danh. Trên Linux hoặc macOS, thêm dòng sau vào tệp .bashrc hoặc .zshrc của bạn:

alias cargo="cargo auditable"

Sau khi thiết lập, mỗi khi bạn chạy cargo build, nó sẽ thực thi cargo auditable build, đảm bảo tất cả các bản dựng đều bao gồm thông tin phụ thuộc một cách tự động.

Tích hợp GitHub Releases

Nếu bạn sử dụng cargo dist để quản lý các bản phát hành trên GitHub, bạn có thể bật hỗ trợ cho cargo-auditable. Tham khảo tài liệu của cargo-dist để biết thêm chi tiết.

Công cụ tiêu thụ dữ liệu

Thông tin phụ thuộc được tạo bởi cargo-auditable có thể được phân tích và sử dụng bởi nhiều công cụ:

Công cụ báo cáo lỗ hổng

  • cargo audit (v0.17.3+): Phát hiện dữ liệu phụ thuộc trong các tệp nhị phân.
  • trivy (v0.31.0+): Phát hiện dữ liệu phụ thuộc trong các tệp nhị phân.
  • grype (v0.83.0+): Phát hiện dữ liệu phụ thuộc trong các tệp nhị phân và image container.
  • osv-scanner (v2.0.1+): Đọc dữ liệu phụ thuộc khi quét image container.

Công cụ khôi phục danh sách phụ thuộc

  • syft (v1.15.0+): Khôi phục dữ liệu phụ thuộc và xuất ra nhiều định dạng.
  • docker: Có thể nhúng tài liệu CycloneDX vào image container để theo dõi phụ thuộc ở cấp độ container.
  • blint (v2.1.3+): Khôi phục dữ liệu phụ thuộc và xuất ra định dạng CycloneDX.
  • wasm-tools (v1.227.0+): Khôi phục dữ liệu phụ thuộc từ WebAssembly (sử dụng lệnh wasm-tools metadata show).
  • rust-audit-info: Khôi phục danh sách phụ thuộc từ tệp nhị phân và xuất ra JSON.
  • auditable2cdx: Khôi phục danh sách phụ thuộc từ tệp nhị phân và xuất ra định dạng CycloneDX.

Câu hỏi thường gặp

Dung lượng tệp nhị phân có tăng đáng kể không?

Không. Ngay cả với các dự án lớn có hơn 400 phụ thuộc, dữ liệu nhúng thường chỉ chiếm chưa đầy 4KB, thường chỉ chiếm khoảng 1/1000 đến 1/10000 dung lượng tệp nhị phân.

Điều này có ảnh hưởng đến khả năng tái tạo bản dựng không?

Không. Định dạng dữ liệu được thiết kế đặc biệt để không ảnh hưởng đến khả năng tái tạo bản dựng. Nó không bao gồm dấu thời gian và dữ liệu JSON được sắp xếp để đảm bảo tính nhất quán giữa các lần biên dịch khác nhau. Trên thực tế, nó còn giúp ích cho khả năng tái tạo bản dựng vì bạn sẽ biết chính xác tất cả các phiên bản phụ thuộc của một tệp nhị phân cụ thể.

Điều này có làm lộ thông tin nhạy cảm không?

Không. Tất cả các URL và đường dẫn tệp đều được ẩn danh, nhưng tên và phiên bản của các crate (thư viện) được ghi lại nguyên trạng. Các thông báo panic hiện có cũng có thể tiết lộ thông tin này và nhiều hơn nữa. Ngoài ra, theo yêu cầu của giấy phép MIT và nhiều giấy phép khác, bạn có thể có nghĩa vụ pháp lý phải tiết lộ việc sử dụng các crate mã nguồn mở cụ thể.

Điều này có ngăn chặn các cuộc tấn công chuỗi cung ứng không?

Không. Hãy sử dụng cargo-vet hoặc cargo-crev để phòng chống các cuộc tấn công chuỗi cung ứng. Bản thân SBOM không ngăn chặn được các cuộc tấn công chuỗi cung ứng, và chúng cũng không thể được sử dụng để đánh giá tác động sau khi một cuộc tấn công xảy ra, vì bất kỳ thư viện độc hại nào cũng có thể tự loại bỏ khỏi SBOM.

Chi tiết định dạng dữ liệu

Định dạng dữ liệu nhúng được mô tả bởi lược đồ JSON cargo-auditable.schema.json. Dữ liệu JSON được nén bằng Zlib và đặt trong một phần linker có tên .dep-v0. Để biết thêm thông tin về cách phân tích cú pháp dữ liệu, vui lòng tham khảo PARSING.md.

Quá trình phân tích cú pháp rất đơn giản, bạn thậm chí có thể hoàn thành nó với khoảng 5 dòng mã Python nếu cần đọc dữ liệu bằng các ngôn ngữ khác.

Ứng dụng trong ngành

cargo-auditable đã được áp dụng bởi nhiều tổ chức uy tín:

  • Microsoft: Sử dụng cargo-auditable trong nội bộ và đã duy trì một thư viện trích xuất dữ liệu cho Go.
  • Các bản phân phối Linux: Alpine Linux, NixOS, openSUSE, Void Linux, Chimera Linux và Wolfi OS sử dụng cargo-auditable để xây dựng các gói Rust của họ.
  • Chainguard: Bao gồm cargo-auditable trong image cơ sở Rust của họ và cung cấp một trình bao bọc cargo mặc định để luôn gọi cargo-auditable.

Kết luận

cargo-auditable cung cấp một phương pháp đơn giản và hiệu quả để theo dõi và kiểm tra các thành phần phụ thuộc trong các tệp nhị phân Rust. Bằng cách nhúng thông tin phụ thuộc trong quá trình biên dịch, bạn có thể dễ dàng quét các lỗ hổng bảo mật trong môi trường sản xuất, từ đó nâng cao tính bảo mật của chuỗi cung ứng phần mềm.

Chỉ với vài phút thiết lập, bạn có thể tích hợp công cụ mạnh mẽ này vào quy trình làm việc phát triển Rust của mình, bổ sung thêm một lớp bảo mật quan trọng cho dự án của bạn. Hãy bắt đầu ngay:

cargo install cargo-auditable cargo-audit
cargo auditable build --release

Hãy làm cho các tệp nhị phân Rust của bạn có khả năng kiểm toán, nâng cao tính bảo mật và độ tin cậy của dự án!

Thẻ: Rust cargo dependency tracking vulnerability scanning sbom

Đăng vào ngày 9 tháng 11 lúc 00:03