Rust được đưa vào một trong những ngôn ngữ chính để phát triển nền tảng Android

Google đã công bố đưa ngôn ngữ lập trình Rust vào danh sách các ngôn ngữ được phép phát triển nền tảng Android. Trình biên dịch ngôn ngữ Rust đã được đưa vào cây nguồn Android vào năm 2019, nhưng việc hỗ trợ cho ngôn ngữ này vẫn còn ở giai đoạn thử nghiệm. Một số thành phần Rust đầu tiên được lên kế hoạch cho Android bao gồm các triển khai mới của cơ chế giao tiếp liên tiến trình Binder và ngăn xếp Bluetooth.

Việc giới thiệu Rust được thực hiện như một phần của dự án nhằm tăng cường bảo mật, thúc đẩy các kỹ thuật lập trình an toàn và tăng hiệu quả xác định các vấn đề khi làm việc với bộ nhớ trong Android. Cần lưu ý rằng khoảng 70% tất cả các lỗ hổng nguy hiểm được xác định trên Android là do lỗi khi làm việc với bộ nhớ. Sử dụng Rust, tập trung vào an toàn bộ nhớ và quản lý bộ nhớ tự động, sẽ giảm nguy cơ xảy ra các lỗ hổng do lỗi bộ nhớ như truy cập sau khi rảnh và lỗi tràn bộ đệm.

Rust thực thi an toàn bộ nhớ tại thời điểm biên dịch thông qua kiểm tra tham chiếu, quyền sở hữu đối tượng và theo dõi vòng đời đối tượng (phạm vi) và bằng cách đánh giá tính chính xác của truy cập bộ nhớ trong thời gian chạy. Rust cũng cung cấp khả năng bảo vệ chống tràn số nguyên, yêu cầu khởi tạo các giá trị biến trước khi sử dụng, xử lý lỗi tốt hơn trong thư viện chuẩn, sử dụng khái niệm tham chiếu và biến bất biến theo mặc định, đồng thời cung cấp kiểu gõ tĩnh mạnh để giảm thiểu lỗi logic.

Trong Android, tính năng an toàn về bộ nhớ được cung cấp bằng các ngôn ngữ đã được hỗ trợ là Kotlin và Java, nhưng chúng không phù hợp để phát triển các thành phần hệ thống do chi phí cao. Rust giúp đạt được hiệu suất gần với ngôn ngữ C và C++, cho phép nó được sử dụng để phát triển các phần cấp thấp của nền tảng và các thành phần để tương tác với phần cứng.

Để đảm bảo tính bảo mật của mã C và C++, Android sử dụng cách ly hộp cát, phân tích tĩnh và thử nghiệm làm mờ. Khả năng cách ly hộp cát bị hạn chế và đã đạt đến giới hạn khả năng của chúng (việc phân mảnh sâu hơn thành các quy trình là không thực tế xét theo quan điểm tiêu thụ tài nguyên). Những hạn chế của việc sử dụng hộp cát bao gồm chi phí chung lớn và mức tiêu thụ bộ nhớ tăng do nhu cầu tạo ra các quy trình mới cũng như độ trễ bổ sung liên quan đến việc sử dụng IPC.

Đồng thời, sandbox không loại bỏ các lỗ hổng trong mã mà chỉ giảm rủi ro và làm phức tạp cuộc tấn công, vì việc khai thác yêu cầu xác định không phải một mà là một số lỗ hổng. Các phương pháp dựa trên kiểm tra mã còn hạn chế ở chỗ để xác định lỗi cần tạo điều kiện để vấn đề tự biểu hiện. Không thể bao gồm tất cả các lựa chọn có thể, vì vậy nhiều lỗi không được chú ý.

Đối với các quy trình hệ thống trong Android, Google tuân thủ "quy tắc hai", theo đó mọi mã được thêm vào phải đáp ứng không quá hai trong ba điều kiện: làm việc với dữ liệu đầu vào không được xác thực, sử dụng ngôn ngữ lập trình không an toàn (C/C++) và chạy mà không có cách ly hộp cát nghiêm ngặt (có đặc quyền nâng cao). Quy tắc này ngụ ý rằng mã để xử lý dữ liệu ngoài phải được giảm xuống mức đặc quyền tối thiểu (tách biệt) hoặc được viết bằng ngôn ngữ lập trình an toàn.

Google không có ý định viết lại mã C/C++ hiện có trong Rust mà có kế hoạch sử dụng ngôn ngữ này để phát triển mã mới. Việc sử dụng Rust cho mã mới là điều hợp lý vì theo thống kê, hầu hết các lỗi đều xuất hiện ở mã mới hoặc mã được thay đổi gần đây. Đặc biệt, khoảng 50% lỗi bộ nhớ được phát hiện trên Android được phát hiện ở mã được viết cách đây chưa đầy một năm.

Rust được đưa vào một trong những ngôn ngữ chính để phát triển nền tảng Android


Nguồn: opennet.ru

Thêm một lời nhận xét