Bảo mật ứng dụng

Các yếu tố của ứng dụng

Android cung cấp nền tảng mã 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 trong máy ảo Dalvik. 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 quyền nào được yêu cầu.

  • Hoạt động : Hoạt động nói chung là mã cho một tác vụ tập trung vào người dùng. Nó thường bao gồm hiển thị giao diện người dùng cho người dùng, nhưng nó không bắt buộc - 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 những Hoạt động của ứng dụng là điểm vào một ứng dụng.

  • Dịch vụ : Dịch vụ là một phần mã chạy ở chế độ nền. Nó có thể chạy trong quy trình của chính nó hoặc trong ngữ cảnh của 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. 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 lựa 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ữ cho âm nhạc tiếp tục ngay cả khi giao diện người dùng đã hoàn thành.

  • 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 ban hành. Ví dụ: một ứng dụng có thể đăng ký người nhận thông báo pin yếu và thay đổi hành vi của ứng dụng dựa trên thông tin đó.

Mô hình quyền 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, một ứng dụng Android chỉ có thể truy cập một số 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, nếu được sử dụng không đúng cách hoặc độc hại, 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 đối với chức năng nhạy cảm (ví dụ: không có API Android để thao tác trực tiếp thẻ SIM). Trong một số trường hợp, việc phân tách các vai trò cung cấp một biện pháp bảo mật, giống như việc cách ly lưu trữ theo từng ứng dụng. Trong các trường hợp khác, các API nhạy cảm được thiết kế để sử dụng bởi các ứng dụng đáng tin cậy 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

Các 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 mà ứng dụng cần trong tệp kê khai. Tất cả các phiên bản Android 6.0 trở lên đều sử dụng mô hình quyền thời gian chạy . Nếu người dùng yêu cầu một tính năng 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 không yêu cầu quyền từ người dùng. Quyền sẽ bị xóa nếu một ứng dụng bị gỡ cài đặt, do đó, việc cài đặt lại tiếp theo sẽ dẫn đến 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 ứng dụng cố gắng sử dụng tính năng được bảo vệ chưa được khai báo trong tệp kê khai của ứng dụng, lỗi quyền thường sẽ dẫn đến một ngoại lệ bảo mật được đưa trở lại ứng dụng. 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. Ví dụ về thông báo 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 cho 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 cho hệ thống biết cách người dùng được thông báo 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 dành riêng cho ứng dụng được mô tả tại https://developer.android.com/guide/topics/security/security.html .

Có một số khả năng của thiết bị, chẳng hạn như khả năng gửi ý định phát 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 OEM cài đặt sẵn. Các quyền này sử dụng quyền signatureOrSystem.

Cách người dùng hiểu các ứng dụng của bên thứ ba

Android cố gắng làm cho người dùng hiểu rõ khi họ đang 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ẽ được hiển thị 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 không được nhắc lại để xác nhận bất kỳ quyền nào.

Có nhiều lý do để hiển thị quyền ngay lập tức trước thời gian cài đặt. Đây là lúc người dùng đang 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 cam kết về 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 với các ứng dụng thay thế khác.

Một số nền tảng khác sử dụng một cách tiếp cận khác đối với thông báo của người dùng, yêu cầu quyền khi bắt đầu mỗi phiên hoặc trong khi các ứng dụng đang được sử dụng. Tầm nhìn của Android là cho phép người dùng chuyển đổi liên tục 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 người dùng tuyệt vời. Việc có quyền xem xét của người dùng tại thời điểm cài đặt 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 người dùng quá mức 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 hiệu quả thông tin bảo mật quan trọng đến người dùng, đ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 có nhiều khả năng nghĩ về những gì họ đồng ý.

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 đó ngăn cản người dùng dễ dàng hiểu và thảo luận về các 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 thông tin về các ứng dụng có thể dễ dàng tiếp cận với nhiều người dùng. Ví dụ: các yêu cầu cấp quyền không mong muốn có thể khiến người dùng phức tạp hơn đặt các câu hỏi quan trọng về chức năng ứng dụng và chia sẻ mối quan tâm của họ ở những nơi chẳng hạn như Google Play , nơi chúng hiển thị với tất cả người dùng.

Quyền khi cài đặt ứng dụng - Google Maps Quyền của một ứng dụng đã cài đặt - Gmail
Quyền khi cài đặt ứng dụng - Google MapsQuyền của một ứng dụng đã cài đặt - Gmail

Hình 1. Hiển thị quyền cho các ứng dụng

Giao tiếp giữa các quy trình

Các quá 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, ổ 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 : Một cơ chế gọi thủ tục từ xa dựa trên khả năng nhẹ được thiết kế để đạt 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ụ : Các 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 báo đơn giản đại diện cho một "ý định" để làm một cái 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 bản sao Ý đị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 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à một kho 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à một ứng dụng cũng có thể xác định ContentProvider của riêng mình để 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ách sử dụng các cơ chế khác như ổ cắm mạng hoặc tệp có thể ghi trên thế giới, đây là các khung IPC của 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 đưa các lỗ hổng bảo mật vào.

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í trong danh sách các API được bảo vệ do Hệ điều hành 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 các API nhạy cảm về chi phí. Các API này bao gồm:

  • Điện thoại
  • 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 một ứ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 các khoản 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 tin nhắn đó.

Quyề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 liên lạc với thẻ SIM bao gồm cả 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 tập hợp các API được bảo vệ. Với mức sử dụng thông thường, thiết bị Android cũng sẽ tích lũy dữ liệu người dùng bên 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 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.

Quyền truy cập vào dữ liệu người dùng nhạy cảm chỉ có sẵn thông qua các API được bảo vệ

Hình 2. Quyền truy cập vào dữ liệu người dùng nhạy cảm chỉ khả dụng thông qua các API được bảo vệ

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 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 dấu hiệu rõ ràng về các loại thông tin có thể được cung cấp cho ứng dụng. Trong khi 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 nó được cài đặt.

Theo mặc định, bất kỳ ứng dụng nào thu thập thông tin cá nhân sẽ chỉ giới hạn dữ liệu đó trong ứ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 quyền đối với cơ chế IPC được thực thi bởi hệ điều hành.

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ị đầu vào dữ liệu nhạy cảm cho phép các ứ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 có thể 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 đó yêu cầu 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. Tại bất kỳ thời điểm 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", chuyển đến "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" . Thao tác 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 không nhạy cảm về bản chất, 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 tại thời điểm 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 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 Tổ chức phát hành chứng chỉ hệ thống đã cài đặt, các tổ chức này đáng 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 tập hợp các CA được vận chuyển 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ì các nhà sản xuất thiết bị không còn cho phép sửa đổi.

Để được thêm làm CA công khai mới vào bộ chứng khoán Android, CA phải hoàn thành Quy trình đưa vào Mozilla CA và sau đó gửi yêu cầu tính năng chống lại Android ( https://code.google.com/p/android/issues/entry ) để thêm CA vào Android CA gốc trong Dự án nguồn mở Android (AOSP).

Vẫn có những CA dành riêng cho thiết bị và không nên được đưa vào tập hợp cốt lõi của AOSP CA, 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ủa 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ỉ bao gồm các CA riêng trong 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 .

Đăng ký ứng dụng

Việc 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 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 sự tin cậy của Google với nhà phát triển và sự tin tưởng của nhà phát triển với ứ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 mộ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ý đúng cách với chứng chỉ có trong APK đó. Nếu chứng chỉ (hoặc chính xác hơn là khóa công khai 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 người khác tương tự APK đã ký.

Ứ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ự hỗ trợ 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 các 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 được chia sẻ được cho phép thông qua tính năng UID được chia sẻ 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 một UID được chia sẻ trong tệp 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á 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 một ứng dụng đặc biệt xấu, 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 một 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 giấy phép được liên kết với nội dung đó. Khung DRM hỗ trợ nhiều chương trình DRM; những kế hoạch DRM nào mà một thiết bị hỗ trợ được để cho nhà sản xuất thiết bị.

Khung công tác Android DRM được triển khai trong hai lớp kiến ​​trúc (xem hình bên dưới):

  • Một API khung DRM, được tiếp xúc với các ứng dụng thông qua khung ứng dụng Android và chạy qua Dalvik 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 trình cắm thêm DRM (tác nhân) để xử lý việc quản lý quyền và giải mã cho các chương trình DRM khác nhau

Kiến trúc quản lý quyền kỹ thuật số trên nền tảng Android

Hình 3. Kiến trúc quản lý quyền kỹ thuật số trên nền tảng Android