Google cam kết thúc đẩy công bằng chủng tộc cho Cộng đồng người da đen. Xem cách thực hiện.

Hộp cát ứng dụng

Nền tảng Android tận dụng tính năng bảo vệ dựa trên người dùng Linux để xác định và cô lập các tài nguyên ứng dụng. Điều này cách ly các ứng dụng với nhau và bảo vệ các ứng dụng cũng như hệ thống khỏi các ứng dụng độc hại. Để làm điều này, Android chỉ định một ID người dùng (UID) duy nhất cho mỗi ứng dụng Android và chạy ứng dụng đó trong quy trình riêng của ứng dụng đó.

Android sử dụng UID để thiết lập Hộp cát ứng dụng cấp nhân. Kernel thực thi bảo mật giữa các ứng dụng và hệ thống ở cấp quy trình thông qua các cơ sở Linux tiêu chuẩn như ID người dùng và nhóm được gán cho các ứng dụng. Theo mặc định, các ứng dụng không thể tương tác với nhau và có quyền truy cập hạn chế vào hệ điều hành. Nếu ứng dụng A cố gắng làm điều gì đó độc hại, chẳng hạn như đọc dữ liệu của ứng dụng B hoặc quay số điện thoại mà không được phép, ứng dụng này sẽ bị ngăn chặn làm như vậy vì ứng dụng này không có đặc quyền người dùng mặc định thích hợp. Hộp cát đơn giản, có thể kiểm tra được và dựa trên việc phân tách quy trình và quyền tệp theo kiểu UNIX của người dùng hàng thập kỷ.

Vì Hộp cát ứng dụng nằm trong hạt nhân, mô hình bảo mật này mở rộng cho cả mã gốc và ứng dụng hệ điều hành. Tất cả phần mềm bên trên hạt nhân, chẳng hạn như thư viện hệ điều hành, khuôn khổ ứng dụng, thời gian chạy ứng dụng và tất cả các ứng dụng, đều chạy trong Hộp cát ứng dụng. Trên một số nền tảng, các nhà phát triển bị hạn chế trong một khung phát triển, bộ API hoặc ngôn ngữ cụ thể. Trên Android, không có giới hạn nào về cách viết một ứng dụng được yêu cầu để thực thi bảo mật; về mặt này, mã gốc cũng giống như mã được thông dịch trong hộp cát.

Bảo vệ

Nói chung, để thoát ra khỏi Application Sandbox trong một thiết bị được cấu hình đúng, người ta phải thỏa hiệp tính bảo mật của nhân Linux. Tuy nhiên, tương tự như các tính năng bảo mật khác, các biện pháp bảo vệ riêng lẻ thực thi hộp cát ứng dụng không thể bất khả xâm phạm, vì vậy việc bảo vệ chuyên sâu là rất quan trọng để ngăn chặn các lỗ hổng đơn lẻ dẫn đến việc xâm nhập hệ điều hành hoặc các ứng dụng khác.

Android dựa vào một số biện pháp bảo vệ để thực thi hộp cát ứng dụng. Các biện pháp thực thi này đã được áp dụng theo thời gian và đã củng cố đáng kể hộp cát kiểm soát truy cập tùy ý (DAC) dựa trên UID. Các bản phát hành Android trước đây bao gồm các biện pháp bảo vệ sau:

  • Trong Android 5.0, SELinux đã cung cấp phân tách kiểm soát truy cập (MAC) bắt buộc giữa hệ thống và ứng dụng. Tuy nhiên, tất cả các ứng dụng của bên thứ ba đều chạy trong cùng một ngữ cảnh SELinux nên tính cách ly giữa các ứng dụng chủ yếu được thực thi bởi UID DAC.
  • Trong Android 6.0, hộp cát SELinux đã được mở rộng để cô lập các ứng dụng trên ranh giới mỗi người dùng thực tế. Ngoài ra, Android cũng thiết lập giá trị mặc định an toàn hơn cho dữ liệu ứng dụng: Đối với các ứng dụng với targetSdkVersion >= 24 , mặc định quyền DAC trên dir nhà của một ứng dụng thay đổi từ 751 đến 700. Đây được cung cấp mặc định an toàn hơn cho dữ liệu ứng dụng riêng (mặc dù ứng dụng có thể ghi đè lên các giá trị mặc định) .
  • Trong Android 8.0, tất cả các ứng dụng đã được thiết lập để chạy với một seccomp-bpf bộ lọc hạn chế syscalls rằng các ứng dụng được phép sử dụng, do đó tăng cường ứng dụng / kernel ranh giới.
  • Trong Android 9 tất cả các ứng dụng không có đặc quyền với targetSdkVersion >= 28 phải chạy trong sandbox SELinux cá nhân, cung cấp MAC trên một cơ sở cho mỗi ứng dụng. Tính năng bảo vệ này cải thiện khả năng phân tách ứng dụng, ngăn ghi đè các giá trị mặc định an toàn và (đáng kể nhất) ngăn các ứng dụng làm cho thế giới dữ liệu của chúng có thể truy cập được.
  • Trong các ứng dụng Android 10 có chế độ xem thô hạn chế của hệ thống tệp, không có quyền truy cập trực tiếp vào các đường dẫn như / sdcard / DCIM. Tuy nhiên, ứng dụng giữ lại đầy đủ quyền truy cập thô để đường dẫn gói cụ thể của họ, như được trả về bởi bất kỳ phương pháp được áp dụng, chẳng hạn như Context.getExternalFilesDir () .

Nguyên tắc chia sẻ tệp

Đặt dữ liệu ứng dụng là có thể truy cập được trên toàn thế giới là một phương pháp bảo mật kém. Quyền truy cập được cấp cho tất cả mọi người và không thể giới hạn quyền truy cập chỉ đối với (những) người nhận dự kiến. Thực tiễn này đã dẫn đến rò rỉ thông tin và làm nhầm lẫn các lỗ hổng bảo mật và là mục tiêu ưa thích của phần mềm độc hại nhắm vào các ứng dụng có dữ liệu nhạy cảm (chẳng hạn như ứng dụng email). Trong Android 9 và cao hơn, chia sẻ tập tin theo cách này là không được phép một cách rõ ràng cho các ứng dụng với targetSdkVersion>=28 .

Thay vì làm cho dữ liệu ứng dụng có thể truy cập được trên toàn thế giới, hãy sử dụng các nguyên tắc sau khi chia sẻ tệp:

  • Nếu nhu cầu ứng dụng của bạn để chia sẻ tệp với ứng dụng khác, sử dụng một nhà cung cấp nội dung . Cung cấp nội dung chia sẻ dữ liệu với các chi tiết thích hợp và không có nhiều nhược điểm của thế giới có thể truy cập quyền UNIX (để biết chi tiết, hãy tham khảo cơ bản cung cấp nội dung ).
  • Nếu ứng dụng của bạn có file đó thực sự nên có thể truy cập với thế giới (như ảnh), họ phải có phương tiện truyền thông cụ thể (hình ảnh, video, và chỉ có các file âm thanh) và được lưu trữ bằng cách sử dụng MediaStore lớp. (Để biết thêm chi tiết về làm thế nào để thêm một mục phương tiện truyền thông, xem truy cập các tập tin media từ lưu trữ chia sẻ .)

Storage điều khiển cho phép thời gian chạy truy cập vào bộ sưu tập mạnh mẽ-gõ qua MediaStore. Để truy cập vào các file yếu gõ như PDF và MediaStore.Downloads lớp, ứng dụng phải sử dụng intents như ACTION_OPEN_DOCUMENT ý định.

Để kích hoạt Android 10 hành vi, sử dụng requestLegacyExternalStorage thuộc tính biểu hiện, và làm theo App cho phép thực hành tốt nhất .

  • Giá trị mặc định lá cờ biểu hiện là true cho các ứng dụng nhắm mục tiêu Android 9 (và hạ thấp).
  • Giá trị mặc định là false cho các ứng dụng nhắm mục tiêu Android 10. Để tạm thời không tham gia vào quan điểm lưu trữ lọc trong các ứng dụng nhắm mục tiêu Android 10, thiết lập giá trị cờ manifest để true .
  • Sử dụng các quyền hạn chế, trình cài đặt đưa vào danh sách trắng các ứng dụng được phép sử dụng cho bộ nhớ không có hộp cát. Các ứng dụng không có trong danh sách cho phép được đặt trong hộp cát.