6 điểm bởi darjeeling 9 ngày trước | Chưa có bình luận nào. | Chia sẻ qua WhatsApp

Google đã đưa một trình phân tích cú pháp DNS dựa trên Rust, ngôn ngữ an toàn bộ nhớ, vào firmware baseband (modem) di động của Pixel 10.
Đây là biện pháp chủ động nhằm giảm nhóm lỗ hổng về an toàn bộ nhớ trong baseband, nơi có bề mặt tấn công từ xa lớn.

Điểm chính

  • Trên Pixel 9, Google đã áp dụng các biện pháp giảm thiểu lỗ hổng an toàn bộ nhớ; sang Pixel 10, hãng tiến thêm một bước khi đưa mã Rust vào firmware baseband thực tế.
  • Mục tiêu triển khai đầu tiên là trình phân tích DNS. DNS không chỉ được dùng trong trình duyệt mà còn trong các chức năng viễn thông cơ bản như chuyển hướng cuộc gọi; do phải trực tiếp phân tích dữ liệu không đáng tin cậy nên đây là khu vực dễ phát sinh lỗ hổng.
  • Google đã chọn thư viện DNS Rust mã nguồn mở hickory-proto. Hãng đánh giá cao tình trạng bảo trì, độ bao phủ kiểm thử và mức độ được cộng đồng chấp nhận của thư viện này.
  • Tuy nhiên, thư viện vẫn thiếu hỗ trợ no_std cần thiết cho môi trường bare-metal, nên Google đã trực tiếp bổ sung hỗ trợ no_std cho các crate liên quan và phụ thuộc của chúng, rồi đóng góp ngược lên upstream.
  • Kích thước mã được đo vào khoảng 371KB. Trong đó, 350KB là hickory-proto và các phụ thuộc, 17KB là core·alloc·compiler_builtins, còn 4KB là mã shim kết nối với modem.
  • Thay vì dùng Cargo để ghép nhiều staticlib độc lập, Google chọn cách tích hợp trực tiếp bước biên dịch Rust vào hệ thống build modem hiện có (Pigweed/GN).
  • Bộ cấp phát bộ nhớ và xử lý panic của Rust cũng được tích hợp bằng cách kết nối qua FFI với allocator và crash backend của firmware modem hiện có.
  • Ở giai đoạn liên kết, compiler_builtins đã ghi đè các triển khai memcpy/memset tối ưu sẵn có của modem, gây suy giảm hiệu năng; Google đã giải quyết bằng cách loại bỏ phần đó bằng một script một dòng.
  • Google cho biết đây không phải biện pháp dùng một lần, mà là nền tảng để tiếp tục mở rộng ngôn ngữ an toàn bộ nhớ sang các trình phân tích và đoạn mã rủi ro cao khác trong baseband về sau.

Vì sao điều này quan trọng

Baseband di động là lớp phần mềm mức thấp tiếp xúc trực tiếp với bên ngoài nên có giá trị tấn công cao. Trên thực tế, Project Zero từng trình diễn khai thác thực thi mã từ xa qua Internet trên modem Pixel trong quá khứ. Trong môi trường như vậy, các vấn đề an toàn bộ nhớ của mã C/C++ rất dễ trở thành rủi ro mang tính cấu trúc.

Thông báo lần này của Google có ý nghĩa không chỉ ở mức “đã dùng Rust”, mà còn cho thấy ngôn ngữ an toàn bộ nhớ có thể được triển khai thực tế ngay cả trong lĩnh vực firmware nhạy cảm và nhiều ràng buộc như baseband di động.

Điểm kỹ thuật đáng chú ý

  • Đã bổ sung hỗ trợ no_std để chạy hickory-proto trên bare-metal.
  • Giao diện giữa Rust và mã C/C++ hiện có được kết nối qua FFI.
  • Việc phân tích phản hồi do Rust đảm nhiệm, còn cập nhật cấu trúc bộ nhớ C hiện có thì tái sử dụng callback của các hàm C sẵn có.
  • Vì có hơn 30 crate bên ngoài, Google đã tận dụng cargo-gnaw của Fuchsia để tạo quy tắc build GN thay cho việc viết quy tắc build thủ công.

Chưa có bình luận nào.

Chưa có bình luận nào.