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.
Trang này được dịch bởi Cloud Translation API.
Switch to English

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 và hệ thống khỏi các ứng dụng độc hại. Để thực hiện việc này, Android chỉ định một ID người dùng (UID) duy nhất cho từng ứ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 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ể nghe được và dựa trên sự phân tách người dùng theo kiểu UNIX đã có từ nhiều thập kỷ trước đối với các quy trình và quyền tệp.

Vì Hộp cát ứng dụng nằm trong 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, khung ứ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 khuôn khổ phát triển, bộ API hoặc ngôn ngữ cụ thể. Trên Android, không có hạn chế nào về cách viết ứng dụng được yêu cầu để thực thi bảo mật; về mặt này, mã gốc giống như hộp cát như mã được thông dịch.

Bảo vệ

Nói chung, để thoát ra khỏi Application Sandbox trong một thiết bị được định 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 của ứng dụng không phải là 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 việc cô lập 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 đặt mặc định an toàn hơn cho dữ liệu ứng dụng: Đối với ứng dụng có targetSdkVersion >= 24 , quyền DAC mặc định trên dir chủ của ứng dụng đã thay đổi từ 751 thành 700. Điều này cung cấp mặc định an toàn hơn cho dữ liệu ứng dụng riêng tư (mặc dù ứng dụng có thể ghi đè các mặc định này) .
  • Trong Android 8.0, tất cả các ứng dụng đã được thiết lập để chạy với bộ lọc seccomp-bpf giới hạn các cuộc gọi hệ thống mà ứng dụng được phép sử dụng, do đó củng cố ranh giới ứng dụng / nhân.
  • Trong Android 9, tất cả các ứng dụng không có đặc quyền có targetSdkVersion >= 28 phải chạy trong các hộp cát SELinux riêng lẻ, cung cấp MAC trên cơ sở 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, các ứng dụng vẫn có toàn quyền truy cập thô vào các đường dẫn dành riêng cho gói của chúng, như được trả về bởi bất kỳ phương thức áp dụng nào, 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 việc 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 trở lên, việc chia sẻ tệp theo cách này rõ ràng không được phép đối với các ứng dụng có targetSdkVersion>=28 .

Thay vì làm cho dữ liệu ứng dụng dễ tiếp cận, hãy sử dụng các nguyên tắc sau khi chia sẻ tệp:

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

Quyền thời gian chạy Bộ nhớ kiểm soát quyền truy cập vào các bộ sưu tập được đánh máy mạnh thông qua MediaStore . Để truy cập các tệp được nhập yếu như PDF và lớp MediaStore.Downloads , các ứng dụng phải sử dụng các ý định như ý định ACTION_OPEN_DOCUMENT .

Để bật hoạt động của Android 10, hãy sử dụng thuộc tính tệp kê khai requestLegacyExternalStorage và làm theo các phương pháp hay nhất về quyền Ứng dụng .

  • Giá trị mặc định của cờ tệp kê khai true với các ứng dụng nhắm mục tiêu đến Android 9 (trở xuống).
  • 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 chọn không tham gia chế độ xem bộ nhớ đã lọc trong các ứng dụng nhắm mục tiêu Android 10, hãy đặt giá trị của cờ tệp kê khai thành 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 bộ nhớ không hộp cát. Các ứng dụng không có trong danh sách cho phép được đóng hộp cát.