Bộ nhớ không an toàn
Lỗi an toàn bộ nhớ, lỗi xử lý bộ nhớ trong ngôn ngữ lập trình gốc, là vấn đề phổ biến nhất trong cơ sở mã Android. Chúng chiếm hơn 60% các 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 có thể nhìn thấy.
Các lỗi an toàn bộ nhớ tác động tiêu cực đến chất lượng và độ ổn định, đồng thời chiếm một phần đáng kể các sự cố xảy ra trên thiết bị của người dùng cuối. Do đó, mật độ lỗi an toàn 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ữ không an toàn về bộ nhớ như C, C++ và Assembly chiếm hơn 70% mã nền tảng Android và hiện diện trong khoảng 50% ứng dụng trên Cửa hàng Play.
Do độ phức tạp ngày càng tăng của mã, nếu không được giám sát, các lỗi an toàn bộ nhớ sẽ gia tăng theo thời gian. Do đó, việc cung cấp cho hệ sinh thái của chúng tôi những 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 sự 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ư Gắn thẻ bộ nhớ cánh tay và đã giới thiệu Rust trong cơ sở mã Android.
Những công nghệ này sẽ đẩy nhanh con đường hướng tới an toàn bộ nhớ của chúng ta và sẽ giúp ngành công nghiệp phần mềm rộng hơn giải quyết một vấn đề chính.
Lỗi an toàn bộ nhớ ảnh hưởng tiêu cực đến chất lượng
Lỗi an toàn bộ nhớ tiềm ẩn có thể gây ra kết quả không xác định, tùy 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 khó chịu cho người dùng của chúng tôi.
Hàng ngày, chúng tôi quan sát thấy hàng triệu sự cố cố định xảy ra từ thiết bị của người dùng cuối và với sự ra đời của GWP-ASan , chúng tôi đã phát hiện ra 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ớ và phù hợp với những gì các đồng nghiệp Chrome của chúng tôi quan sát được (xem Danh sách lỗi nóng của Chrome GWP-ASan ).
Lỗi an toàn bộ nhớ ảnh hưởng tiêu cực đến bảo mật
Lỗi an toàn 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.
Mặc dù thật đáng khích lệ khi biết rằng đây không chỉ là sự cố của Android (xem số liệu thống kê của Chrome và Microsoft ), chúng tôi cần phải làm nhiều hơn nữa vì sự an toàn của 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ỗi khai thác được sử dụng tích cực trong các cuộc tấn công chống lại người dùng. Các lỗi về an toàn bộ nhớ (hỏng bộ nhớ và không sử dụng sau) chiếm phần lớn.
Lỗi an toàn bộ nhớ làm tăng chi phí
Việc luôn cập nhật các bản sửa lỗi bảo mật giúp thiết bị của chúng tôi được an toàn nhưng lại gây ra tổn thất về mặt tài chính cho hệ sinh thái của chúng tôi.
Mật độ cao của các lỗi an toàn bộ nhớ trong mã nhà cung cấp cấp thấp, thường có các sửa đổi tùy chỉnh, làm tăng đáng kể chi phí sửa chữa và kiểm tra. 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 chi phí này.
Nghiên cứu cho thấy việc phát hiện lỗi sớm hơn có thể giảm chi phí tới sáu lần. Tuy nhiên, do sự phức tạp của hệ sinh thái của chúng tôi, số lượng cơ sở mã trung bình được duy trì bởi một nhà cung cấp và độ phức tạp ngày càng tăng của phần mềm, số tiền tiết kiệm được có thể cao hơn.
An toàn bộ nhớ
Bắt đầu từ Android 12, chúng tôi đã thực hiện những thay đổi mang tính hệ thống nhằm 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ớ 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 loại lỗi này. Theo thời gian, những điều này sẽ mang lại chất lượng cao hơn và bảo mật tốt hơn cho người dùng cũng như giảm chi phí cho nhà cung cấp của chúng tôi.
An toàn bộ nhớ có thể sẽ 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 có kế hoạch dẫn đầu.
Yêu cầu hỗ trợ an toàn bộ nhớ
Tài liệu định nghĩa tương thích Android (CDD) đặ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 sử dụng các công cụ an toàn bộ nhớ và tích hợp chúng vào quá trình thử nghiệm 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 toàn bộ quá trình chạy Bộ kiểm tra 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 chứng tỏ rằng không tìm thấy lỗi nào như vậy. Ví dụ: nền tảng Arm v9 sẽ được yêu cầu cung cấp hoạt động chạy CTS khi bật Gắn thẻ bộ nhớ, trong khi nền tảng Arm v8 sẽ được yêu cầu cung cấp hoạt động chạy CTS bằng cách sử dụng HWASAN và KASAN.
Rust là 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 cung cấp 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 kỳ 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 về bộ nhớ, hiện chiếm hơn 70% mã nền tảng Android, trong Rust là không khả thi. Trong tương lai Rust sẽ bổ sung cho các công cụ an toàn bộ nhớ.
Công cụ an toàn bộ nhớ
Android hỗ trợ rất nhiều công cụ giúp phát hiện các lỗi an toàn bộ nhớ. Hình dưới đây trình bày phân loại các công cụ an toàn bộ nhớ Android hiện có.
Công cụ của chúng tôi bao gồm rất nhiều kịch bản 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 tài liệu tham khảo để sử dụng chúng trong sản phẩm của bạn.