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 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 độ phức tạp của mã ngày càng tăng, nếu không được chú ý, các lỗi về độ an toàn của 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 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 để 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ẽ đẩy nhanh hành trình của chúng tôi để đảm bảo an toàn đối với 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 xảy ra trên thiết bị của người dùng cuối. Và khi GWP-ASan ra mắt, chúng tôi đã truy vết phần lớn sự cố trong số đó đế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).
Các lỗi về an toàn bộ nhớ có ả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ù chúng tôi rất khuyến khích việc 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), chúng tôi cần nỗ lực 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ỗi khai thác được sử dụng 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ớ
Bắt đầu từ Android 12, chúng tôi đã thực hiện những thay đổi có hệ thống để giảm mật độ lỗi về an toàn bộ nhớ trong cơ sở mã của 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.
Các 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 an toàn của 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, trong Rust, việc viết lại tất cả mã không an toàn đối với bộ nhớ (hiện đang chiếm hơn 70% mã nền tảng Android) 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 về độ an toàn của 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ác công cụ của chúng tôi áp dụng cho rất 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 tài liệu tham khảo để sử dụng những công cụ đó trong sản phẩm của bạn.