Trang này mô tả các lỗi và công cụ liên quan đến độ an toàn của bộ nhớ.
Bộ nhớ không an toàn
Các 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 đề phổ biến 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.
Hình 1. Lỗi an toàn bộ nhớ và tác động tiêu cực của chúng đến chất lượng, tính bảo mật và chi phí.
Các lỗi liên quan đến độ an toàn của bộ nhớ ảnh hưởng tiêu cực đến chất lượng và độ ổn định, đồng thời chiếm một phần đáng kể trong số các sự cố quan sát được trên thiết bị của người dùng cuối. Do đó, mật độ cao của các lỗi về an toàn bộ nhớ tương quan trực tiếp với 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 độ phức tạp của mã ngày càng tăng, nếu không được xử lý, các lỗi 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 những lỗi như vậy là rất quan trọng đối với thành công lâu dài của chúng tô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ư tính năng gắn thẻ bộ nhớ Arm và đã giới thiệu Rust trong toàn bộ mã nguồn Android.
Những công nghệ này sẽ đẩy nhanh quá trình chuyển đổi sang bộ nhớ an toàn và giúp ngành phần mềm nói chung giải quyết một vấn đề quan trọng.
Các 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 bảo mật bộ nhớ tiềm ẩn 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ó đoán 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 ghi nhận 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 tìm được phần lớn các sự cố đó là do lỗi 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 độ của các lỗi an toàn 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 quan trọng của Chrome).
Lỗi an toàn bộ nhớ ảnh hưởng tiêu cực đến tính bảo mật
Các 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ừ phiên bản Android đầu tiên.
Hình 2. Các lỗi về độ an toàn của bộ nhớ góp phần tạo ra các lỗ hổng trên Android.
Mặc dù thậ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ê của Chrome và Microsoft), nhưng chúng ta cần phải 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 bảo mật zero-day đã được dùng trong các cuộc tấn công thực tế nhằm vào người dùng dưới dạng các lỗ hổng bảo mật zero-day. Đây không phải là các lỗi giả định mà là các lỗ hổng bảo mật đang được dùng 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 phần lớn.
Lỗi an toàn bộ nhớ làm tăng chi phí
Việc cập nhật các bản sửa lỗi bảo mật cho thiết bị giúp người dùng của chúng tôi luôn an toàn nhưng lại tốn kém chi phí cho hệ sinh thái của chúng tôi.
Mật độ cao của các lỗi về độ an toàn của bộ nhớ trong mã nhà cung cấp cấp thấp (thường có các sửa đổi tuỳ chỉnh) làm 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 những lỗi này trong chu kỳ phát triển có thể 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 hệ sinh thái của chúng tôi khá phức tạp, số lượng cơ sở mã trung bình do một nhà cung cấp duy trì và độ phức tạp ngày càng tăng của phần mềm, mức tiết kiệm có thể cao hơn.
An toàn bộ nhớ
Android 12 trở lên có những thay đổi mang tính hệ thống để giảm mật độ lỗi 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à đưa ra các yêu cầu mới nhằm khuyến khích hệ sinh thái của chúng tôi giải quyết danh mục lỗi này. Theo thời gian, những thay đổi này sẽ giúp người dùng có được chất lượng cao hơn và độ bảo mật tốt hơn, đồng thời giảm chi phí cho các nhà cung cấp của chúng tôi.
Tính an toàn của bộ nhớ có thể sẽ trở thành yếu tố khác biệt về chất lượng và tính bảo mật trong những năm tới, và Android dự định đi đầu trong lĩnh vực này.
Các yêu cầu hỗ trợ tính năng an toàn bộ nhớ
Tài liệu định nghĩa về khả năng tương thích (CDD) của Android đặc biệt khuyến nghị sử dụng các công cụ an toàn bộ nhớ trong quá trình phát triển.
Chúng tôi đang hợp tác chặt chẽ với hệ sinh thái của mình để tăng cường việc sử dụng các công cụ an toàn bộ nhớ và tích hợp các công cụ này vào quy trình kiểm thử và tích hợp 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 lần chạy đầy đủ Bộ kiểm tra tính tương thích (CTS) bằng cách sử dụng các công cụ an toàn bộ nhớ. Điều này cho thấy không có lỗi nào như vậy được tìm thấy. Ví dụ: Các nền tảng Arm v9 sẽ phải cung cấp một lần chạy CTS có 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à một ngôn ngữ lập trình mới cho mã nền tảng
Android 12 đã giới thiệu Rust làm ngôn ngữ nền tảng. Rust mang đến sự an toàn cho bộ nhớ và luồng ở mức hiệu suất tương tự như C/C++. Chúng tôi hy vọng 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ừ nay trở đi, Rust sẽ bổ sung cho các công cụ đảm bảo an toàn 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 các lỗi liên quan đến độ an toàn của bộ nhớ. Hình dưới đây trình bày một phân loại các công cụ an toàn bộ nhớ hiện có của Android.

Hình 3. Bối cảnh của các công cụ đảm bảo an toàn bộ nhớ trên Android.
Công cụ của chúng tôi hỗ trợ nhiều tình huống và mục tiêu triển khai. Tài liệu trong phần nà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.