Các yếu tố của ứng dụng
Android cung cấp nền tảng nguồn mở và môi trường ứng dụng cho thiết bị di động. Hệ điều hành cốt lõi dựa trên nhân Linux. Các ứng dụng Android thường được viết bằng ngôn ngữ lập trình Java và chạy trên máy ảo Android Runtime (ART). Tuy nhiên, các ứng dụng cũng có thể được viết bằng mã gốc. Các ứng dụng được cài đặt từ một tệp duy nhất có phần mở rộng tệp .apk.
Các khối xây dựng ứng dụng Android chính là:
AndroidManifest.xml : Tệp AndroidManifest.xml là tệp điều khiển cho hệ thống biết phải làm gì với tất cả các thành phần cấp cao nhất (cụ thể là các hoạt động, dịch vụ, bộ thu phát sóng và nhà cung cấp nội dung được mô tả bên dưới) trong một ứng dụng. Điều này cũng chỉ định những quyền nào được yêu cầu.
Hoạt động : Nói chung, Hoạt động là mã cho một nhiệm vụ duy nhất, tập trung vào người dùng. Nó thường bao gồm việc hiển thị giao diện người dùng cho người dùng nhưng không nhất thiết phải làm vậy -- một số Hoạt động không bao giờ hiển thị giao diện người dùng. Thông thường, một trong các Hoạt động của ứng dụng là điểm truy cập vào ứng dụng.
Dịch vụ : Dịch vụ là một đoạn mã chạy ở chế độ nền. Nó có thể chạy trong quy trình riêng của nó hoặc trong bối cảnh quy trình của ứng dụng khác. Các thành phần khác "liên kết" với một Dịch vụ và gọi các phương thức trên đó thông qua các lệnh gọi thủ tục từ xa. Một ví dụ về Dịch vụ là trình phát đa phương tiện: ngay cả khi người dùng thoát khỏi giao diện người dùng chọn phương tiện, người dùng có thể vẫn có ý định tiếp tục phát nhạc. Dịch vụ giúp âm nhạc tiếp tục phát ngay cả khi giao diện người dùng đã hoàn tất.
Bộ thu phát sóng : Bộ thu phát sóng là một đối tượng được khởi tạo khi cơ chế IPC được gọi là Ý định được hệ điều hành hoặc ứng dụng khác đưa ra. Ví dụ: một ứng dụng có thể đăng ký bộ thu cho thông báo pin yếu và thay đổi hành vi của nó dựa trên thông tin đó.
Mô hình cấp phép của Android: Truy cập các API được bảo vệ
Tất cả các ứng dụng trên Android đều chạy trong Hộp cát ứng dụng . Theo mặc định, ứng dụng Android chỉ có thể truy cập một phạm vi tài nguyên hệ thống hạn chế. Hệ thống quản lý quyền truy cập của ứng dụng Android vào các tài nguyên mà nếu sử dụng không đúng cách hoặc có mục đích xấu thì có thể ảnh hưởng xấu đến trải nghiệm người dùng, mạng hoặc dữ liệu trên thiết bị.
Những hạn chế này được thực hiện dưới nhiều hình thức khác nhau. Một số khả năng bị hạn chế do cố ý thiếu API cho chức năng nhạy cảm (ví dụ: không có API Android để thao tác trực tiếp với thẻ SIM). Trong một số trường hợp, việc phân tách vai trò cung cấp một biện pháp bảo mật, như với việc cách ly bộ lưu trữ trên mỗi ứng dụng. Trong các trường hợp khác, các API nhạy cảm được thiết kế để các ứng dụng đáng tin cậy sử dụng và được bảo vệ thông qua cơ chế bảo mật được gọi là Quyền.
Các API được bảo vệ này bao gồm:
- Chức năng máy ảnh
- Dữ liệu vị trí (GPS)
- Chức năng Bluetooth
- Chức năng điện thoại
- Chức năng SMS/MMS
- Kết nối mạng/dữ liệu
Những tài nguyên này chỉ có thể truy cập được thông qua hệ điều hành. Để sử dụng các API được bảo vệ trên thiết bị, ứng dụng phải xác định các khả năng cần thiết trong bảng kê khai của nó. Tất cả các phiên bản Android 6.0 trở lên đều sử dụng mô hình quyền khi chạy . Nếu người dùng yêu cầu một tính năng từ một ứng dụng yêu cầu API được bảo vệ, hệ thống sẽ hiển thị hộp thoại, nhắc người dùng từ chối hoặc cho phép quyền đó.
Sau khi được cấp, các quyền sẽ được áp dụng cho ứng dụng miễn là nó được cài đặt. Để tránh nhầm lẫn cho người dùng, hệ thống không thông báo lại cho người dùng về các quyền được cấp cho ứng dụng và các ứng dụng được bao gồm trong hệ điều hành cốt lõi hoặc được OEM đóng gói sẽ không yêu cầu quyền từ người dùng. Quyền sẽ bị xóa nếu ứng dụng bị gỡ cài đặt, do đó, lần cài đặt lại tiếp theo sẽ lại hiển thị các quyền.
Trong cài đặt thiết bị, người dùng có thể xem quyền đối với các ứng dụng mà họ đã cài đặt trước đó. Người dùng cũng có thể tắt một số chức năng trên toàn cầu khi họ chọn, chẳng hạn như tắt GPS, radio hoặc wi-fi.
Trong trường hợp một ứng dụng cố gắng sử dụng một tính năng được bảo vệ chưa được khai báo trong tệp kê khai của ứng dụng thì việc không cấp phép thường sẽ dẫn đến một ngoại lệ bảo mật được trả lại cho ứng dụng. Việc kiểm tra quyền API được bảo vệ được thực thi ở mức thấp nhất có thể để ngăn chặn hành vi gian lận. Một ví dụ về nhắn tin của người dùng khi một ứng dụng được cài đặt trong khi yêu cầu quyền truy cập vào các API được bảo vệ được hiển thị trong Hình 2 .
Các quyền mặc định của hệ thống được mô tả tại https://developer.android.com/reference/android/Manifest.permission.html . Các ứng dụng có thể khai báo quyền riêng của chúng để các ứng dụng khác sử dụng. Các quyền như vậy không được liệt kê ở vị trí trên.
Khi xác định quyền, thuộc tính ProtectionLevel sẽ cho hệ thống biết cách thông báo cho người dùng về các ứng dụng yêu cầu quyền hoặc ai được phép giữ quyền. Chi tiết về cách tạo và sử dụng các quyền cụ thể của ứng dụng được mô tả tại https://developer.android.com/guide/topics/security/security.html .
Có một số chức năng của thiết bị, chẳng hạn như khả năng gửi ý định quảng bá SMS, không có sẵn cho các ứng dụng của bên thứ ba, nhưng có thể được sử dụng bởi các ứng dụng được cài đặt sẵn bởi OEM. Các quyền này sử dụng quyền signatureOrSystem.
Cách người dùng hiểu ứng dụng của bên thứ ba
Android cố gắng làm rõ cho người dùng biết khi nào họ tương tác với các ứng dụng của bên thứ ba và thông báo cho người dùng về các khả năng mà các ứng dụng đó có. Trước khi cài đặt bất kỳ ứng dụng nào, người dùng sẽ thấy một thông báo rõ ràng về các quyền khác nhau mà ứng dụng đang yêu cầu. Sau khi cài đặt, người dùng sẽ không được nhắc xác nhận bất kỳ quyền nào nữa.
Có nhiều lý do để hiển thị quyền ngay trước thời gian cài đặt. Đây là khi người dùng tích cực xem xét thông tin về ứng dụng, nhà phát triển và chức năng để xác định xem nó có phù hợp với nhu cầu và mong đợi của họ hay không. Điều quan trọng nữa là họ chưa thiết lập được cam kết về mặt tinh thần hoặc tài chính đối với ứng dụng và có thể dễ dàng so sánh ứng dụng này với các ứng dụng thay thế khác.
Một số nền tảng khác sử dụng cách tiếp cận khác để thông báo cho người dùng, yêu cầu quyền vào đầu mỗi phiên hoặc khi ứng dụng đang được sử dụng. Tầm nhìn của Android là giúp người dùng chuyển đổi liền mạch giữa các ứng dụng theo ý muốn. Việc cung cấp xác nhận mỗi lần sẽ làm chậm người dùng và ngăn Android mang lại trải nghiệm tuyệt vời cho người dùng. Việc có quyền xem xét của người dùng tại thời điểm cài đặt sẽ cung cấp cho người dùng tùy chọn không cài đặt ứng dụng nếu họ cảm thấy không thoải mái.
Ngoài ra, nhiều nghiên cứu về giao diện người dùng đã chỉ ra rằng việc nhắc nhở người dùng quá mức sẽ khiến người dùng bắt đầu nói "OK" với bất kỳ hộp thoại nào được hiển thị. Một trong những mục tiêu bảo mật của Android là truyền tải thông tin bảo mật quan trọng đến người dùng một cách hiệu quả, điều này không thể thực hiện được bằng cách sử dụng các hộp thoại mà người dùng sẽ được đào tạo để bỏ qua. Bằng cách trình bày thông tin quan trọng một lần và chỉ khi nó quan trọng, người dùng sẽ có nhiều khả năng nghĩ về những gì họ đồng ý hơn.
Một số nền tảng chọn không hiển thị bất kỳ thông tin nào về chức năng ứng dụng. Cách tiếp cận đó khiến người dùng không thể dễ dàng hiểu và thảo luận về khả năng của ứng dụng. Mặc dù không phải lúc nào tất cả người dùng cũng có thể đưa ra quyết định đầy đủ thông tin nhưng mô hình quyền của Android giúp nhiều người dùng có thể dễ dàng truy cập thông tin về ứng dụng. Ví dụ: các yêu cầu cấp quyền không mong muốn có thể nhắc những người dùng phức tạp hơn đặt những câu hỏi quan trọng về chức năng của ứng dụng và chia sẻ mối quan ngại của họ ở những nơi như Google Play , nơi tất cả người dùng đều có thể nhìn thấy chúng.
Quyền khi cài đặt ứng dụng - Google Translate | Quyền của ứng dụng đã cài đặt - Gmail |
Giao tiếp liên tiến trình
Các tiến trình có thể giao tiếp bằng cách sử dụng bất kỳ cơ chế kiểu UNIX truyền thống nào. Ví dụ bao gồm hệ thống tập tin, ổ cắm cục bộ hoặc tín hiệu. Tuy nhiên, các quyền của Linux vẫn được áp dụng.
Android cũng cung cấp các cơ chế IPC mới:
Binder : Cơ chế gọi thủ tục từ xa dựa trên khả năng gọn nhẹ được thiết kế để mang lại hiệu suất cao khi thực hiện các cuộc gọi trong quá trình và giữa các quá trình. Binder được triển khai bằng trình điều khiển Linux tùy chỉnh. Xem https://developer.android.com/reference/android/os/Binder.html .
Dịch vụ : Dịch vụ (đã thảo luận ở trên) có thể cung cấp các giao diện có thể truy cập trực tiếp bằng chất kết dính.
Ý định : Ý định là một đối tượng thông điệp đơn giản thể hiện "ý định" làm điều gì đó. Ví dụ: nếu ứng dụng của bạn muốn hiển thị một trang web, nó thể hiện "Ý định" xem URL bằng cách tạo một phiên bản Ý định và chuyển nó cho hệ thống. Hệ thống định vị một số đoạn mã khác (trong trường hợp này là Trình duyệt) biết cách xử lý Ý định đó và chạy nó. Ý định cũng có thể được sử dụng để phát đi các sự kiện thú vị (chẳng hạn như thông báo) trên toàn hệ thống. Xem https://developer.android.com/reference/android/content/Intent.html .
ContentProviders : ContentProvider là kho lưu trữ dữ liệu cung cấp quyền truy cập vào dữ liệu trên thiết bị; ví dụ cổ điển là ContentProvider được sử dụng để truy cập danh sách liên hệ của người dùng. Một ứng dụng có thể truy cập dữ liệu mà các ứng dụng khác đã hiển thị thông qua ContentProvider và ứng dụng cũng có thể xác định ContentProvider của riêng nó để hiển thị dữ liệu của chính nó. Xem https://developer.android.com/reference/android/content/ContentProvider.html .
Mặc dù có thể triển khai IPC bằng các cơ chế khác như ổ cắm mạng hoặc tệp có thể ghi trên toàn thế giới nhưng đây là các khung IPC Android được đề xuất. Các nhà phát triển Android sẽ được khuyến khích sử dụng các phương pháp hay nhất để bảo mật dữ liệu của người dùng và tránh tạo ra các lỗ hổng bảo mật.
API nhạy cảm với chi phí
API nhạy cảm với chi phí là bất kỳ chức năng nào có thể tạo ra chi phí cho người dùng hoặc mạng. Nền tảng Android đã đặt các API nhạy cảm về chi phí vào danh sách các API được bảo vệ do HĐH kiểm soát. Người dùng sẽ phải cấp quyền rõ ràng cho các ứng dụng của bên thứ ba yêu cầu sử dụng API nhạy cảm với chi phí. Các API này bao gồm:
- Điện thoại
- TIN NHẮN SMS/MMS
- Mạng/Dữ liệu
- Thanh toán trong ứng dụng
- Truy cập NFC
Android 4.2 bổ sung thêm quyền kiểm soát việc sử dụng SMS. Android sẽ cung cấp thông báo nếu ứng dụng cố gắng gửi SMS tới một mã ngắn sử dụng các dịch vụ cao cấp có thể gây ra phí bổ sung. Người dùng có thể chọn cho phép ứng dụng gửi tin nhắn hoặc chặn nó.
Truy cập thẻ SIM
Quyền truy cập cấp thấp vào thẻ SIM không khả dụng đối với các ứng dụng của bên thứ ba. Hệ điều hành xử lý tất cả các giao tiếp với thẻ SIM bao gồm quyền truy cập vào thông tin cá nhân (danh bạ) trên bộ nhớ thẻ SIM. Các ứng dụng cũng không thể truy cập các lệnh AT vì chúng được quản lý độc quyền bởi Lớp Giao diện Vô tuyến (RIL). RIL không cung cấp API cấp cao cho các lệnh này.
Thông tin cá nhân
Android đã đặt các API cung cấp quyền truy cập vào dữ liệu người dùng vào bộ API được bảo vệ. Với mức sử dụng bình thường, thiết bị Android cũng sẽ tích lũy dữ liệu người dùng trong các ứng dụng của bên thứ ba do người dùng cài đặt. Các ứng dụng chọn chia sẻ thông tin này có thể sử dụng tính năng kiểm tra quyền của Hệ điều hành Android để bảo vệ dữ liệu khỏi các ứng dụng của bên thứ ba.
Các nhà cung cấp nội dung hệ thống có khả năng chứa thông tin cá nhân hoặc thông tin nhận dạng cá nhân như danh bạ và lịch đã được tạo với các quyền được xác định rõ ràng. Mức độ chi tiết này cung cấp cho người dùng chỉ dẫn rõ ràng về các loại thông tin có thể được cung cấp cho ứng dụng. Trong quá trình cài đặt, ứng dụng của bên thứ ba có thể yêu cầu quyền truy cập các tài nguyên này. Nếu được cấp quyền, ứng dụng có thể được cài đặt và sẽ có quyền truy cập vào dữ liệu được yêu cầu bất kỳ lúc nào khi cài đặt.
Theo mặc định, mọi ứng dụng thu thập thông tin cá nhân sẽ chỉ giới hạn dữ liệu đó cho ứng dụng cụ thể. Nếu một ứng dụng chọn cung cấp dữ liệu cho các ứng dụng khác thông qua IPC thì ứng dụng cấp quyền truy cập có thể áp dụng các quyền đối với cơ chế IPC do hệ điều hành thực thi.
Thiết bị nhập dữ liệu nhạy cảm
Các thiết bị Android thường cung cấp các thiết bị nhập dữ liệu nhạy cảm cho phép ứng dụng tương tác với môi trường xung quanh, chẳng hạn như máy ảnh, micrô hoặc GPS. Để ứng dụng của bên thứ ba truy cập vào các thiết bị này, trước tiên ứng dụng đó phải được người dùng cung cấp quyền truy cập rõ ràng thông qua việc sử dụng Quyền của hệ điều hành Android. Sau khi cài đặt, trình cài đặt sẽ nhắc người dùng yêu cầu quyền đối với cảm biến theo tên.
Nếu một ứng dụng muốn biết vị trí của người dùng, ứng dụng đó sẽ cần có quyền truy cập vào vị trí của người dùng. Sau khi cài đặt, trình cài đặt sẽ nhắc người dùng hỏi liệu ứng dụng có thể truy cập vị trí của người dùng hay không. Bất cứ lúc nào, nếu người dùng không muốn bất kỳ ứng dụng nào truy cập vào vị trí của họ, thì người dùng có thể chạy ứng dụng "Cài đặt", đi tới "Vị trí & Bảo mật" và bỏ chọn "Sử dụng mạng không dây" và "Bật vệ tinh GPS" . Điều này sẽ vô hiệu hóa các dịch vụ dựa trên vị trí cho tất cả các ứng dụng trên thiết bị của người dùng.
Siêu dữ liệu thiết bị
Android cũng cố gắng hạn chế quyền truy cập vào dữ liệu vốn không nhạy cảm nhưng có thể gián tiếp tiết lộ các đặc điểm về người dùng, sở thích của người dùng và cách họ sử dụng thiết bị.
Theo mặc định, các ứng dụng không có quyền truy cập vào nhật ký hệ điều hành, lịch sử trình duyệt, số điện thoại hoặc thông tin nhận dạng phần cứng/mạng. Nếu một ứng dụng yêu cầu quyền truy cập vào thông tin này khi cài đặt, trình cài đặt sẽ nhắc người dùng hỏi xem ứng dụng đó có thể truy cập thông tin hay không. Nếu người dùng không cấp quyền truy cập, ứng dụng sẽ không được cài đặt.
Cơ quan cấp chứng chỉ
Android bao gồm một tập hợp các Cơ quan cấp chứng chỉ hệ thống được cài đặt, được tin cậy trên toàn hệ thống. Trước Android 7.0, các nhà sản xuất thiết bị có thể sửa đổi bộ CA được cung cấp trên thiết bị của họ. Tuy nhiên, các thiết bị chạy 7.0 trở lên sẽ có một bộ CA hệ thống thống nhất vì việc sửa đổi của nhà sản xuất thiết bị không còn được phép.
Để được thêm làm CA công khai mới vào nhóm chứng khoán Android, CA phải hoàn tất Quy trình đưa vào Mozilla CA và sau đó gửi yêu cầu tính năng đối với Android ( https://code.google.com/p/android/issues/entry ) để thêm CA vào bộ CA Android gốc trong Dự án mã nguồn mở Android (AOSP).
Vẫn có những CA dành riêng cho thiết bị và không được đưa vào nhóm AOSP CA cốt lõi, chẳng hạn như CA riêng của nhà cung cấp dịch vụ có thể cần thiết để truy cập an toàn vào các thành phần cơ sở hạ tầng của nhà cung cấp dịch vụ, chẳng hạn như cổng SMS/MMS. Các nhà sản xuất thiết bị được khuyến khích chỉ đưa các CA riêng vào các thành phần/ứng dụng cần tin cậy các CA này. Để biết thêm chi tiết, hãy xem Cấu hình bảo mật mạng .
Ký đơn
Ký mã cho phép các nhà phát triển xác định tác giả của ứng dụng và cập nhật ứng dụng của họ mà không cần tạo các giao diện và quyền phức tạp. Mọi ứng dụng chạy trên nền tảng Android đều phải có chữ ký của nhà phát triển. Các ứng dụng cố gắng cài đặt mà không được ký sẽ bị Google Play hoặc trình cài đặt gói trên thiết bị Android từ chối.
Trên Google Play, việc ký ứng dụng là cầu nối giữa niềm tin mà Google dành cho nhà phát triển và niềm tin mà nhà phát triển dành cho ứng dụng của họ. Các nhà phát triển biết ứng dụng của họ được cung cấp, chưa được sửa đổi cho thiết bị Android; và các nhà phát triển có thể phải chịu trách nhiệm về hành vi của ứng dụng của họ.
Trên Android, ký ứng dụng là bước đầu tiên để đặt ứng dụng vào Hộp cát ứng dụng của nó. Chứng chỉ ứng dụng đã ký xác định id người dùng nào được liên kết với ứng dụng nào; các ứng dụng khác nhau chạy dưới các ID người dùng khác nhau. Việc ký ứng dụng đảm bảo rằng một ứng dụng không thể truy cập bất kỳ ứng dụng nào khác ngoại trừ thông qua IPC được xác định rõ.
Khi một ứng dụng (tệp APK) được cài đặt trên thiết bị Android, Trình quản lý gói sẽ xác minh rằng APK đã được ký chính xác với chứng chỉ có trong APK đó. Nếu chứng chỉ (hay chính xác hơn là khóa chung trong chứng chỉ) khớp với khóa được sử dụng để ký bất kỳ APK nào khác trên thiết bị thì APK mới có tùy chọn chỉ định trong tệp kê khai rằng nó sẽ chia sẻ UID với APK khác tương tự -các APK đã ký.
Các ứng dụng có thể được ký bởi bên thứ ba (OEM, nhà điều hành, thị trường thay thế) hoặc tự ký. Android cung cấp tính năng ký mã bằng chứng chỉ tự ký mà nhà phát triển có thể tạo mà không cần sự trợ giúp hoặc cho phép từ bên ngoài. Đơn đăng ký không cần phải có chữ ký của cơ quan trung ương. Android hiện không thực hiện xác minh CA cho chứng chỉ ứng dụng.
Các ứng dụng cũng có thể khai báo các quyền bảo mật ở cấp độ bảo vệ Chữ ký, chỉ hạn chế quyền truy cập vào các ứng dụng được ký bằng cùng một khóa trong khi vẫn duy trì các UID và Hộp cát ứng dụng riêng biệt. Mối quan hệ chặt chẽ hơn với Hộp cát ứng dụng dùng chung được cho phép thông qua tính năng UID dùng chung trong đó hai hoặc nhiều ứng dụng được ký bằng cùng một khóa nhà phát triển có thể khai báo UID dùng chung trong bảng kê khai của chúng.
Xác minh ứng dụng
Android 4.2 trở lên hỗ trợ xác minh ứng dụng. Người dùng có thể chọn bật “Xác minh ứng dụng" và yêu cầu người xác minh ứng dụng đánh giá ứng dụng trước khi cài đặt. Xác minh ứng dụng có thể cảnh báo người dùng nếu họ cố cài đặt một ứng dụng có thể gây hại; nếu ứng dụng đặc biệt tệ, nó có thể chặn cài đặt .
Quản lý bản quyền kỹ thuật số
Nền tảng Android cung cấp khung DRM có thể mở rộng cho phép các ứng dụng quản lý nội dung được bảo vệ quyền theo các ràng buộc về giấy phép liên quan đến nội dung. Khung DRM hỗ trợ nhiều sơ đồ DRM; kế hoạch DRM mà thiết bị hỗ trợ được giao cho nhà sản xuất thiết bị.
Khung DRM Android được triển khai theo hai lớp kiến trúc (xem hình bên dưới):
API khung DRM, được hiển thị cho các ứng dụng thông qua khung ứng dụng Android và chạy qua ART VM cho các ứng dụng tiêu chuẩn.
Trình quản lý DRM mã gốc, triển khai khung DRM và hiển thị giao diện cho các phần bổ trợ (tác nhân) DRM để xử lý việc quản lý và giải mã quyền cho các sơ đồ DRM khác nhau