Bộ nhớ không an toàn
Lỗi về độ an toàn của bộ nhớ (tức là lỗi khi xử lý bộ nhớ bằng ngôn ngữ lập trình gốc) là vấn đề thường gặp nhất trong cơ sở mã Android. Các lỗi này chiếm hơn 60% lỗ hổng bảo mật có mức độ nghiêm trọng cao và gây ra hàng triệu sự cố mà người dùng nhìn thấy.

Lỗi an toàn bộ nhớ ảnh hưởng tiêu cực đến chất lượng và độ ổn định, đồng thời chiếm một tỷ lệ đáng kể trong số các sự cố được ghi nhận trên thiết bị của người dùng cuối. Do đó, mật độ lỗi về an toàn của bộ nhớ cao có liên quan trực tiếp đến trải nghiệm người dùng kém.
Mã gốc, được viết bằng các ngôn ngữ có bộ nhớ không an toàn như C, C++ và Assembly
chiếm hơn 70% mã nền tảng Android và có trong khoảng
50% ứng dụng trên Cửa hàng Google Play.
Do mã ngày càng phức tạp, nếu không được chú ý, các lỗi về an toàn bộ nhớ sẽ tăng lên theo thời gian. Do đó, việc cung cấp cho hệ sinh thái của chúng tôi các công cụ và công nghệ có thể phát hiện và giảm thiểu các lỗi như vậy là rất quan trọng để chúng tôi đạt được thành công lâu dài.
Trong vài năm qua, chúng tôi đã hợp tác chặt chẽ với các đối tác phần cứng
để phát triển các công nghệ phần cứng như Gắn thẻ bộ nhớ Arm và đã
giới thiệu Rust trong cơ sở mã Android.
Những công nghệ này sẽ giúp chúng ta nhanh chóng đạt được mục tiêu an toàn bộ nhớ và
sẽ giúp ngành phần mềm nói chung giải quyết một vấn đề chính.
Lỗi về độ an toàn của bộ nhớ ảnh hưởng tiêu cực đến chất lượng
Các lỗi tiềm ẩn về an toàn bộ nhớ có thể gây ra kết quả không xác định, tuỳ thuộc vào trạng thái của hệ thống. Hành vi không thể đoán trước này dẫn đến sự cố và gây phiền toái cho người dùng.
Mỗi ngày, chúng tôi quan sát thấy hàng triệu sự cố gốc trên thiết bị của người dùng cuối và với việc ra mắt GWP-ASan, chúng tôi đã truy xuất phần lớn sự cố đó đến các lỗi về an toàn bộ nhớ.
Điểm dữ liệu này xác thực mối tương quan giữa chất lượng và mật độ lỗi an toàn về bộ nhớ, đồng thời phù hợp với những gì các đồng nghiệp của chúng tôi tại Chrome quan sát được (xem danh sách lỗi GWP-ASan hàng đầu của Chrome).
Lỗi về độ an toàn của bộ nhớ ảnh hưởng tiêu cực đến tính bảo mật
Lỗi về độ an toàn của bộ nhớ luôn là nguyên nhân hàng đầu gây ra các lỗ hổng bảo mật trên Android, kể từ bản phát hành Android đầu tiên.

Mặc dù rất đáng mừng khi biết rằng đây không chỉ là vấn đề của Android (xem số liệu thống kê về Chrome và Microsoft), nhưng chúng tôi cần làm nhiều hơn nữa để đảm bảo an toàn cho người dùng.
Nhóm Project Zero
tại Google theo dõi
các lỗ hổng zero-day đã được sử dụng trong các cuộc tấn công thực sự nhằm vào người dùng dưới dạng lỗ hổng zero-day. Đây không phải là các lỗi giả định mà là các lỗ hổng được khai thác tích cực trong các cuộc tấn công nhằm vào người dùng. Lỗi an toàn bộ nhớ (hỏng bộ nhớ và sử dụng sau khi giải phóng) chiếm đa số.
Lỗi về độ an toàn của bộ nhớ làm tăng chi phí
Việc cập nhật thiết bị bằng các bản sửa lỗi bảo mật giúp người dùng của chúng tôi an toàn, nhưng cũng gây ra chi phí cho hệ sinh thái của chúng tôi.
Mật độ lỗi về độ an toàn của bộ nhớ trong mã của nhà cung cấp cấp thấp (thường có các sửa đổi tuỳ chỉnh) tăng đáng kể chi phí sửa lỗi và kiểm thử. Tuy nhiên, việc phát hiện sớm các lỗi này trong chu kỳ phát triển có thể làm giảm các chi phí này.
Nghiên cứu cho thấy việc phát hiện lỗi sớm có thể giảm chi phí lên đến 6 lần. Tuy nhiên, do sự phức tạp của hệ sinh thái, số lượng cơ sở mã trung bình mà một nhà cung cấp duy trì và sự phức tạp ngày càng tăng của phần mềm, nên mức tiết kiệm có thể cao hơn.
An toàn bộ nhớ
Kể từ Android 12, chúng tôi đã thực hiện các thay đổi mang tính hệ thống để giảm mật độ lỗi về an toàn bộ nhớ trong cơ sở mã Android. Chúng tôi đang mở rộng các công cụ an toàn bộ nhớ của Android và giới thiệu các yêu cầu mới để khuyến khích hệ sinh thái của chúng tôi giải quyết loại lỗi này. Theo thời gian, những điều này sẽ giúp nâng cao chất lượng và bảo mật cho người dùng cũng như giảm chi phí cho các nhà cung cấp.
Tính an toàn của bộ nhớ có thể trở thành điểm khác biệt về chất lượng và bảo mật trong những năm tới, và Android dự định sẽ dẫn đầu xu hướng này.
Yêu cầu hỗ trợ an toàn bộ nhớ
Tài liệu định nghĩa về khả năng tương thích với Android (CDD) đặc biệt khuyến khích việc sử dụng các công cụ an toàn về bộ nhớ trong quá trình phát triển.
Chúng tôi đang làm việc chặt chẽ với hệ sinh thái của mình để tăng cường sử dụng các công cụ an toàn cho bộ nhớ và tích hợp các công cụ đó vào quy trình tích hợp và kiểm thử liên tục.
Theo thời gian, chúng tôi muốn đảm bảo rằng mỗi thiết bị đều vượt qua một quy trình chạy Bộ kiểm thử khả năng tương thích (CTS) đầy đủ, bằng cách sử dụng các công cụ an toàn về bộ nhớ, cho thấy rằng không có lỗi nào như vậy. Ví dụ: các nền tảng Arm v9 sẽ phải cung cấp một lần chạy CTS đã bật tính năng Gắn thẻ bộ nhớ, trong khi các nền tảng Arm v8 sẽ được yêu cầu cung cấp một lần chạy CTS bằng HWASAN và KASAN.
Rust là ngôn ngữ lập trình mới cho mã nền tảng
Android 12 đã ra mắt Rust làm ngôn ngữ nền tảng. Rust cung cấp bộ nhớ và tính năng an toàn cho luồng ở mức hiệu suất tương tự như C/C++. Chúng tôi dự kiến Rust sẽ là lựa chọn ưu tiên cho hầu hết các dự án gốc mới. Tuy nhiên, việc viết lại tất cả mã không an toàn đối với bộ nhớ (hiện chiếm hơn 70% mã nền tảng Android) bằng Rust là không khả thi. Từ giờ trở đi, Rust sẽ bổ sung cho các công cụ an toàn về bộ nhớ.
Công cụ đảm bảo an toàn cho bộ nhớ
Android hỗ trợ nhiều công cụ giúp phát hiện lỗi an toàn về bộ nhớ. Hình dưới đây trình bày một cách phân loại các công cụ hiện có về an toàn bộ nhớ trên Android.

Công cụ của chúng tôi bao gồm nhiều tình huống và mục tiêu triển khai. Tài liệu sau đây mô tả từng công cụ và cung cấp thông tin tham khảo để sử dụng các công cụ đó trong sản phẩm của bạn.