Hiển thị các bài đăng có nhãn OS/Mobile Security. Hiển thị tất cả bài đăng
Hiển thị các bài đăng có nhãn OS/Mobile Security. Hiển thị tất cả bài đăng

Thứ Ba, 18 tháng 10, 2011

Phần cuối: Tìm hiểu về bảo mật trên Android - Các API Permission thời gian chạy

>>> Phần 1 >>> Phần 2 >>> Phần 3 >>> Phần 4 >>> Phần 5 >>> Phần 6
 
VII. Các API Permission thời gian chạy

Android cung cấp các API để kiểm tra, bắt tuân thủ, cấp và thu hồi các quyền hạn trong thời gian chạy.

Các API này là một phần của lớp android.content.Context, cung cấp toàn bộ thông tin về một môi trường ứng dụng.

Ví dụ, nếu bạn muốn xử lý các quyền hạn một cách trang nhã, bạn có thể xác định xem ứng dụng của bạn đã được cấp quyền truy cập vào Internet chưa (xem Liệt kê 5).

Liệt kê 5. Sử dụng một API Permission thời gian chạy để kiểm tra, bắt tuân thủ, cấp và thu hồi các quyền hạn trong thời gian chạy

if (context.checkCallingOrSelfPermission(Manifest.permission.INTERNET)
!= PackageManager.PERMISSION_GRANTED) {
// The Application requires permission to access the
// Internet");
} else {
// OK to access the Internet
}

Đối với các API quyền hạn khác để kiểm tra, bắt tuân thủ, cấp và thu hồi các quyền hạn trong thời gian chạy, hãy xem lớp ngữ cảnh. 

Source:  Ibm.com

P6: Tìm hiểu về bảo mật trên Android - Các quyền hạn của các nhà cung cấp nội dung và của tệp

VI. Các quyền hạn của các nhà cung cấp nội dung và của tệp

Các nhà cung cấp nội dung trưng ra một URI chung là URI duy nhất xác định dữ liệu của họ (xem phần Tài nguyên).

Để bảo vệ các nhà cung cấp nội dung như vậy, khi bắt đầu một hoạt động hoặc trả về một kết quả hoạt động của mình, người gọi có thể thiết lập Intent.FLAG_GRANT_READ_URI_PERMISSIONIntent.FLAG_GRANT_WRITE_URI_PERMISSION, để cấp quyền cho hoạt động thu nhận truy cập vào URI của dữ liệu cụ thể theo ý đích này.

Theo mặc định, các tệp của ứng dụng được bảo vệ. Các tệp được bảo vệ dựa trên các ID người dùng và do đó chỉ người chủ sở hữu của ứng dụng, có cùng ID người dùng, mới có thể truy cập được. Như đã trình bày ở trên, các ứng dụng chia sẻ ID người dùng giống nhau (và được ký bằng cách sử dụng cùng một chứng chỉ số) chạy trên cùng một tiến trình và vì thế chia sẻ quyền truy cập các ứng dụng của chúng.

Các ứng dụng có thể cho phép các ứng dụng hoặc các tiến trình khác có quyền truy cập tới các tệp của mình. Sự cho phép này được thực hiện bằng cách chỉ ra chế độ hoạt động MODE_WORLD_READABLEMODE_WORLD_WRITEABLE thích hợp để cho phép quyền truy cập đọc hoặc viết vào tệp, hoặc MODE_PRIVATE để mở tệp trong chế độ riêng tư. 

Bạn có thể xác định một chế độ hoạt động bằng các phương thức sau khi bạn tạo hoặc mở các tệp:

  • getSharedPreferences(filename, operatingMode)
  • openFileOutput(filename, operatingMode)
  • openOrCreateDatabase(filename, operatingMode, SQLiteDatabase.CursorFactory)

Source: Ibm.com

P5: Tìm hiểu về bảo mật trên Android - Sử dụng các quyền hạn

V. Sử dụng các quyền hạn

Các quyền hạn là một cơ chế bảo mật của nền tảng Android để cho phép hoặc hạn chế ứng dụng truy cập đến các API và các tài nguyên bị hạn chế.

Theo mặc định, các ứng dụng Android không được cấp các quyền hạn nào, làm cho chúng an toàn bằng cách không cho phép chúng truy cập vào các API được bảo vệ hoặc các tài nguyên trên thiết bị. Ứng dụng phải yêu cầu các quyền hạn thông qua tệp bản kê và người dùng cấp hoặc không cấp các quyền hạn trong khi cài đặt.

Android định nghĩa một danh sách dài các quyền hạn qua bản kê, bảo vệ các khía cạnh khác nhau của hệ thống hoặc các ứng dụng khác. Để yêu cầu cấp quyền hạn, hãy khai báo một thuộc tính <user-permission> trong tệp bản kê: 
<uses-permission android:name="string" />

Ở đây android:name xác định tên của quyền hạn này.

Để biết một danh sách tất cả các quyền hạn qua bản kê do Android định nghĩa, hãy xem trang Manifest.permisson.  

Liệt kê 2 là một ví dụ của một tệp bản kê yêu cầu cấp quyền sử dụng Internet và quyền ghi vào bộ nhớ ngoài:

Liệt kê 2. Khai báo (yêu cầu cấp) một quyền hạn

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
android:versionCode="1"
android:versionName="1.0"
package="com.cenriqueortiz.tutorials.datastore"
android:installLocation="auto">

<application
:
:
:
</application>

<uses-permission
android:name="android.permission.INTERNET"/>
<uses-permission
android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
</manifest>

Các ứng dụng có thể định nghĩa các quyền hạn tùy chỉnh riêng của mình để bảo vệ tài nguyên của ứng dụng. 

Các ứng dụng khác muốn truy cập vào tài nguyên được bảo vệ của một ứng dụng phải yêu cầu có các quyền hạn thích hợp thông qua tệp bản kê riêng của mình. Liệt kê 3 chỉ ra một ví dụ về cách định nghĩa các quyền hạn. 

Liệt kê 3. Khai báo một quyền hạn tùy chỉnh

<permission
xmlns:android="http://schemas.android.com/apk/res/android"
android:name="com.cenriqueortiz.android.ACCESS_FRIENDS_LIST"
android:description="@string/permission_description"
android:label="@string/permission_label"
android:protectionLevel="normal"
>
</permission>

Trong Liệt kê 3, một quyền hạn khách hàng được định nghĩa bằng cách xác định các thuộc tính tối thiểu name (tên), description (mô tả), label (nhãn) và protectionLevel (mức bảo vệ). Các thuộc tính khác có thể được định nghĩa thêm, nhưng chúng không được trình bày ở đây.

Một thuộc tính cần quan tâm đặc biệt là android:protectionLevel, biểu thị phương thức mà hệ thống phải tuân theo khi cấp (hoặc không cấp) một quyền hạn cho một ứng dụng đang yêu cầu.

Các mức bảo vệ gồm có: 

  • normal (bình thường), nghĩa là tự động cấp các quyền này (mặc dù người sử dụng luôn có thể xem xét lại trước khi cài đặt), việc cấp các quyền hạn dựa trên chữ ký (có nghĩa là, nếu ứng dụng đang yêu cầu đã được ký với cùng một chứng chỉ).
  • dangerous (nguy hiểm), biểu thị các quyền hạn truy cập đến dữ liệu riêng hoặc có tác động tiêu cực tiềm năng khác. 

Để biết thêm thông tin về thuộc tính bản kê <permission> hãy xem trang <permission> (xem phần Tài nguyên).

Các ứng dụng có thể hạn chế truy cập vào ứng dụng và các thành phần hệ thống mà nó sử dụng như là: Activity (Hoạt động), Service (Dịch vụ), Content Provider (Nhà cung cấp nội dung) và Broadcast Receiver (Máy thu quảng bá). 

Sự hạn chế này dễ dàng thực hiện bằng cách định nghĩa thuộc tính android:permission như trong Liệt kê 4. Mức bảo vệ này để cho ứng dụng đó cho phép hoặc hạn chế các ứng dụng khác truy cập vào tài nguyên hệ thống. 

Liệt kê 4. Định nghĩa một quyền hạn cho một hoạt động

<activity 
android:name=".FriendsListActivity"
android:label="Friends List">
android:permission="com.cenriqueortiz.android.ACCESS_FRIENDS_LIST"
<intent-filter>
:
:
</intent-filter>
</activity>

Source: Ibm.com

P4: Tìm hiểu về bảo mật trên Android - Sử dụng ADT của Eclipse để tạo các khóa và chứng chỉ và để ký và tối ưu hóa các ứng dụng của bạn

IV. Sử dụng ADT của Eclipse để tạo các khóa và chứng chỉ và để ký và tối ưu hóa các ứng dụng của bạn

Để tạo các khóa khi sử dụng ADT của Eclipse, bạn phải xuất khẩu ứng dụng này. Có hai phương thức xuất khẩu các ứng dụng từ Eclipse:

  • Xuất khẩu một phiên bản chưa ký của ứng dụng mà bạn phải ký thủ công.
  • Xuất khẩu một phiên bản đã ký của ứng dụng, ở đây ADT sẽ làm tất cả các bước cho bạn.

1. Xuất khẩu một ứng dụng chưa ký

Bạn có thể xuất khẩu một phiên bản ứng dụng chưa ký của bạn mà bạn phải ký thủ công ứng dụng đó. Đó là, bạn cần phải chạy thủ công keytool (để tạo ra các khóa như được mô tả ở trên) và Jarsigner (để ký ứng dụng) và tối ưu hóa ứng dụng bằng cách sử dụng công cụ zipalign, như đã giải thích ở trên.

Để xuất khẩu một phiên bản ứng dụng chưa ký bằng cách sử dụng ADT, hãy nhấn chuột phải vào dự án đó và chọn Android Tools -> Export Unsigned Application Package (Các công cụ Android > Xuất khẩu gói ứng dụng chưa ký) (xem Hình 4).

Hình 4. Xuất khẩu ứng dụng chưa ký

Sau khi được chọn, ADT nhắc bạn về thư mục, nơi xuất khẩu ứng dụng chưa ký. Hãy nhớ rằng ngay khi ứng dụng được xuất khẩu, bạn phải ký và tối ưu hóa thủ công ứng dụng đó, như đã trình bày ở trên.

2. Xuất khẩu một ứng dụng đã ký

Với ADT của Eclipse, bạn có thể xuất khẩu một phiên bản ứng dụng đã ký. Khi sử dụng cách tiếp cận này, ADT nhắc cho bạn những việc sau:

  • Thông tin cần thiết để sử dụng một kho khóa hiện có hoặc tạo ra một kho khóa được bảo vệ mới.
  • Thông tin cần thiết để tạo ra một khóa riêng được bảo vệ.
  • Thông tin cần thiết để tạo ra chứng chỉ khoá-công khai.

Để xuất khẩu một ứng dụng đã ký, nhấn chuột phải vào dự án đó, nhưng lần này chọn mục trình đơn Android Tools -> Export Signed Application Package (Các công cụ Android > Xuất khẩu gói ứng dụng đã ký), như minh họa trong Hình 5.

Hình 5. Xuất khẩu một ứng dụng đã ký

Vào lúc này này, Trình thủ thuật xuất khẩu (Export Wizard) hoạt động, như trong Hình 6.

Hình 6. Trình thủ thuật xuất khẩu

Trong Hình 7, hãy chọn một kho khóa hiện có hoặc tạo một kho khóa mới và các ủy quyền để sử dụng.

Hình 7. Trình thủ thuật xuất khẩu: Chọn kho khóa

Trong Hình 8, hãy nhập thông tin để tạo ra khóa riêng và chứng chỉ số.

Hình 8. Trình thủ thuật xuất khẩu: Tạo khóa riêng và chứng chỉ số

Trong Hình 9, hãy nhập đường dẫn và tên của tệp đích và kiểm tra thời hạn hiệu lực.

Hình 9. Nhập đường dẫn và tên của tệp đích

Khi hoàn thành, bạn có một ứng dụng chế độ-phát hành đã ký và được tối ưu hóa có thể xuất bản được.

Ngoài ra, bạn cũng có thể gọi Export Wizard bằng cách sử dụng Android Manifest Tool (Công cụ Manifest của Android), như trong Hình 10.

Hình 10. Gọi Export Wizard bằng cách sử dụng công cụ Manifest Android

Sau khi ứng dụng được ký, bước tiếp theo là để bạn xác định các quyền hạn mà ứng dụng đó cần đến trong bản kê. Quá trình này được mô tả tiếp sau.

Lưu ý rằng trang web của nhà phát triển Android có nhiều tài liệu thú vị về việc ký ứng dụng, nó luôn cập nhật khi các bản phát hành mới của nền tảng Android trở nên có sẵn (xem phần Tài nguyên để biết thêm thông tin).

Source: Ibm.com

P3: Tìm hiểu về bảo mật trên Android - Các trường hợp sử dụng của nhà phát triển

III. Các trường hợp sử dụng của nhà phát triển

Hình 3 -  Minh họa một số các trường hợp sử dụng (use case) có liên quan đến bảo mật được tìm thấy khi bạn phát triển các ứng dụng Android.

Hình 3. Các lĩnh vực bảo mật hiện có khi lập trình các ứng dụng Android

Việc ký ứng dụng hoặc mã là quá trình tạo các khóa riêng và khóa công khai và các chứng chỉ khóa-công khai, ký và tối ưu hóa ứng dụng.

Các quyền hạn là một cơ chế bảo mật của nền tảng Android cho phép hoặc hạn chế ứng dụng truy cập vào các API và các tài nguyên hạn chế. Theo mặc định, các ứng dụng Android không được cấp các quyền hạn nào, làm cho chúng an toàn nhờ không cho phép chúng truy cập vào các API hoặc các tài nguyên được bảo vệ trên thiết bị. Các quyền hạn phải cần thiết, các quyền hạn tùy chỉnh được định nghĩa và các nhà cung cấp nội dung và tệp được bảo vệ. Hãy chắc chắn rằng bạn kiểm tra, tuân thủ và thu hồi các quyền hạn trong thời gian chạy.

Tiếp theo, hãy xem xét từng lĩnh vực bảo mật cụ thể hơn.

1. Việc ký ứng dụng

Tất cả các ứng dụng Android phải được ký. Việc ký ứng dụng hoặc mã là quá trình ký số một ứng dụng cụ thể bằng cách sử dụng một khóa riêng để:

  • Xác định tác giả của mã.
  • Phát hiện ra nếu các ứng dụng đã thay đổi.
  • Xây dựng sự tin cậy giữa các ứng dụng.

Căn cứ vào mối quan hệ tin cậy này, các ứng dụng có thể chia sẻ mã và dữ liệu theo cách an toàn.

Các ứng dụng đã ký bằng cách sử dụng cùng một chữ ký số có thể cho phép lẫn nhau các quyền hạn khác để truy cập các API dựa trên chữ ký và cũng có thể chạy trong cùng một tiến trình nếu chúng chia sẻ các ID người dùng, cho phép truy cập vào mã và dữ liệu của nhau.

Việc ký ứng dụng bắt đầu bằng cách tạo ra một cặp khóa riêng và khóa công khai và một chứng chỉ khóa-công khai có liên quan, cũng được biết là một chứng chỉ khoá-công khai.

Khi làm việc với các ứng dụng Android, bạn có thể xây dựng các ứng dụng trong chế độ chế độ gỡ lỗi (debug) và chế độ phát hành (release-mode):

  • Các ứng dụng được xây dựng khi sử dụng các công cụ xây dựng Android (dòng lệnh và ADT của Eclipse) được tự động ký bằng cách sử dụng một khóa riêng gỡ lỗi; các ứng dụng này được gọi là các ứng dụng chế độ gỡ lỗi. Các ứng dụng chế độ gỡ lỗi được sử dụng để thử nghiệm và không nên được phân phối. Lưu ý rằng các ứng dụng chưa được ký hoặc các ứng dụng đã ký bằng cách sử dụng một khóa riêng gỡ lỗi không thể được phân phối thông qua thị trường Android.
  • Khi bạn đã sẵn sàng để phát hành ứng dụng của mình, bạn phải xây dựng một phiên bản chế độ phát hành của nó, có nghĩa là ký ứng dụng đó bằng khóa riêng của bạn.

Việc ký mã trong Android được thực hiện theo một cách đơn giản hơn nhiều so với các nền tảng di động khác. Trong Android, chứng chỉ này có thể tự ký, có nghĩa là, không cần phải có người có thẩm quyền chứng nhận. Cách tiếp cận này làm đơn giản hóa quá trình xuất bản và các chi phí liên quan.

Tiếp theo, tôi trình bày cách ký các ứng dụng Android thủ công từ dòng lệnh và ký bằng cách sử dụng ADT của Eclipse. Tôi không trình bày một cách tiếp cận thứ ba, sử dụng Ant, trong bài viết này. 

1.1. Tạo thủ công các khóa riêng và khóa công khai và chứng chỉ khóa-công khai

Hãy nhớ rằng các ứng dụng chế độ gỡ lỗi được ký tự động bằng các công cụ xây dựng khi sử dụng khóa/chứng chỉ gỡ lỗi. Để ký một ứng dụng chế độ phát hành, trước tiên bạn phải tạo cặp khóa riêng và khóa công khai và chứng chỉ khóa-công khai. Bạn có thể ký ứng dụng của bạn bằng thủ công hoặc bằng cách sử dụng ADT của Eclipse. Trong cả hai cách tiếp cận, khóa của công cụ khóa của JDK (Java Developer Kit – Bộ dụng cụ của nhà phát triển Java) và tiện ích quản lý chứng chỉ được sử dụng.

Để tạo thủ công thông tin khóa riêng và khóa công khai, hãy sử dụng keytool từ dòng lệnh, như trong Liệt kê 1.

Liệt kê 1. Sử dụng keytool để tạo các khóa riêng/khóa công khai và chứng chỉ

keytool -genkey -v -alias <alias_name> -keystore <keystore.name>
-keyalg RSA -keysize 2048 -validity <number of days>

Lưu ý: Liệt kê 1 giả định JDK đã được cài đặt trên máy tính của bạn và đường dẫn JAVA_HOME được xác định đúng để trỏ đến thư mục JDK của bạn (xem phần Tài nguyên với các thông tin tải về và thiết lập).

Trong Liệt kê 1:
  • -genkey biểu thị một mục nhập cặp khóa riêng và khóa công khai, cũng như một chuỗi của chứng chỉ X.509 v1 có một phần tử, tự ký bao gồm khóa công khai được tạo ra. 
  • -v biểu thị chế độ dài dòng. 
  • -alias là bí danh để sử dụng cho mục nhập kho khóa (keystore) để lưu trữ khóa riêng và chứng chỉ được tạo. 
  • -keystore cho biết tên của kho khóa muốn sử dụng. 
  • -keyalg là thuật toán sử dụng để tạo ra cặp khoá. 
  • -keysize là kích thước của khóa để tạo ra, ở đây giá trị mặc định là 1024, nhưng khuyến khích sử dụng là 2048. 
  • -validity là thời hạn hiệu lực theo ngày; khuyến cáo sử dụng một giá trị lớn hơn 1000.

Lưu ý: Sau khi bạn tạo ra các khóa của mình, điều rất quan trọng là bạn bảo vệ khóa riêng của bạn. Không chia sẻ khóa riêng và không chỉ rõ nó trên dòng lệnh hoặc trong các kịch bản lệnh; lưu ý rằng công cụ khóa (keytool) và trình ký jar (jarsigner) nhắc nhở mật khẩu. Về điều này và các thủ thuật khác, xem "Bảo vệ khóa riêng của bạn" từ trang web của các nhà phát triển Android (xem phần Tài nguyên để có một liên kết).

Keytool nhắc gõ tên và họ, tổ chức, thành phố, bang, quốc gia của bạn để từ đó tạo ra một Tên Nhận biết X.500 (xem phần Tài nguyên để biết thêm thông tin) và các mật khẩu để bảo vệ khóa riêng và để tự bảo vệ kho khóa.

Với thời hạn hiệu lực, đảm bảo chắc chắn sử dụng một thời hạn vượt quá vòng đời dự kiến của ứng dụng và các ứng dụng liên quan. Nếu bạn đang xuất bản ứng dụng của mình trên thị trường Android, thời hạn phải kết thúc sau 22 tháng 10 năm 2033; nếu không, bạn không thể tải nó lên. Ngoài ra, các chứng chỉ có vòng đời lâu dài làm cho bạn dễ dàng hơn khi nâng cấp các ứng dụng của bạn. May mắn thay, thị trường Android đòi hỏi các chứng chỉ có vòng đời lâu dài để giúp bạn tránh các tình huống như vậy.

1.2. Ký thủ công ứng dụng của bạn

Tiếp theo, ký ứng dụng chưa ký bằng cách sử dụng công cụ jarsigner, một phần của JDK:
jarsigner -verbose -keystore <keystore.name> <my_application.apk> <alias_name>

Trong đoạn mã trên:
  • -verbose cho biết chế độ dài. 
  • -keystore cho biết tên của kho khóa sử dụng. 
  • Tiếp theo là tên của ứng dụng (.apk) và cuối cùng là bí danh để sử dụng cho khóa riêng.
  • Jarsigner nhắc nhập mật khẩu để sử dụng kho khóa và khóa riêng.

Các ứng dụng có thể được ký nhiều lần bằng cách sử dụng các khóa khác nhau và các ứng dụng đã ký với cùng một khóa riêng có thể thiết lập một mối quan hệ tin cậy với nhau và có thể chạy trong cùng một tiến trình và chia sẻ mã và dữ liệu.

1.3. Tối ưu hóa ứng dụng của bạn bằng thủ công

Bước cuối cùng trong quá trình ký là tối ưu hóa ứng dụng này để cho các ranh giới của dữ liệu được sắp xếp trong bộ nhớ với sự bắt đầu của tệp, một kỹ thuật giúp cải thiện hiệu năng thời gian chạy và sử dụng bộ nhớ.
Để sắp xếp ứng dụng, sử dụngzipalign:

zipalign -v 4 your_project_name-unaligned.apk your_project_name.apk

Trong đoạn mã trên:

  • -v biểu thị kết quả đầu ra dài. 
  • Số 4 cho biết sử dụng sự sắp xếp bốn-byte (luôn luôn sử dụng bốn byte). 
  • Đối số tiếp theo là tên tệp của ứng dụng đầu vào đã ký (.apk), ứng dụng đó phải được ký bằng khóa riêng của bạn và đối số cuối cùng là tên tệp kết quả đầu ra; nếu ghi đè một ứng dụng hiện có, hãy thêm vào -f.

1.4. Kiểm tra thủ công xem ứng dụng đã được ký chưa

Để kiểm tra xem ứng dụng được ký chưa, sử dụng Jarsigner, lúc này dùng cờ -verify:

jarsigner -verify -verbose -certs my_application.apk

Trong đoạn mã trên:
  • -verify biểu thị việc kiểm tra ứng dụng.
  • -verbose biểu thị chế độ dài dòng.
  • -certs biểu thị sẽ hiển thị trường CN của những người đã tạo ra khóa và đối số cuối cùng là tên của gói ứng dụng Android cần kiểm tra.

Lưu ý: Nếu CN là "Android Debug", có nghĩa là ứng dụng này đã được ký bằng cách sử dụng khóa gỡ lỗi và nó không thể được xuất bản; hãy nhớ sử dụng một khóa riêng nếu kế hoạch của bạn là xuất bản ứng dụng của mình trên Thị trường Android.

Đúng là bạn vừa thấy cách tạo thủ công các khóa riêng và khóa công khai và cách ký và tối ưu hóa ứng dụng này. Tiếp theo, hãy xem xét cách sử dụng ADT (Các công cụ phát triển Android) của Eclipse để tự động tạo các khóa riêng và khóa công khai và cách ký và tối ưu hóa ứng dụng cho bạn.

Source: Ibm.com

P2: Tìm hiểu về bảo mật trên Android - Các hộp cát, các tiến trình và các quyền hạn

II. Các hộp cát, các tiến trình và các quyền hạn

Android sử dụng khái niệm về hộp cát để bắt buộc tách riêng giữa ứng dụng với nhau và các quyền hạn để cho phép hoặc ngăn không cho một ứng dụng truy cập vào các tài nguyên của thiết bị như các tệp và các thư mục, các mạng, các cảm biến và các API nói chung.

Về việc này, Android sử dụng các phương tiện của Linux như bảo mật cấp-xử lý, các ID của người dùng và của nhóm có liên quan đến ứng dụng và các quyền hạn để bắt tuân thủ những hoạt động nào mà một ứng dụng được phép thực hiện.
Mã định danh (ID) người dùng: Linux so với Android:
Trong Linux - một ID của người dùng xác định một người dùng cụ thể còn trên Android -  một ID của người dùng xác định một ứng dụng. Các ID của người dùng được gán khi ứng dụng được cài đặt và chúng vẫn còn tồn tại cho đến hết vòng đời của ứng dụng đó trên thiết bị.
Các quyền hạn là nói về việc cho phép hoặc hạn chế ứng dụng (chứ không phải người dùng) truy cập vào tài nguyên của thiết bị.

Về khái niệm, một hộp cát có thể được thể hiện như trong Hình 1.

Hình 1. Hai ứng dụng Android, mỗi ứng dụng ở trong hộp cát hoặc tiến trình cơ sở riêng của mình

Các ứng dụng Android chạy trên tiến trình Linux riêng của mình và được gán cho một ID của người dùng duy nhất. Theo mặc định, các ứng dụng chạy trong một tiến trình của hộp cát cơ sở không được gán cho các quyền hạn, do đó ngăn không cho các ứng dụng như vậy được truy cập vào hệ thống hoặc các tài nguyên. Tuy nhiên, các ứng dụng Android có thể yêu cầu các quyền hạn thông qua các tệp bản kê (manifest) của ứng dụng.

Các ứng dụng Android có thể cho phép các ứng dụng khác truy cập vào tài nguyên của chúng bằng cách:

  • Khai báo các quyền hạn-bản kê thích hợp.
  • Chạy trong cùng tiến trình với các ứng dụng tin cậy khác, do đó chia sẻ quyền truy cập vào dữ liệu và mã của chúng.

Cách sau được minh họa trong Hình 2.

Hình 2. Hai ứng dụng Android, chạy trên cùng một tiến trình

Các ứng dụng khác nhau có thể chạy trong cùng tiến trình này. Đối với cách tiếp cận này, trước tiên bạn phải ký các ứng dụng đó bằng cách sử dụng cùng một khóa riêng và sau đó bạn phải gán cho chúng cùng một ID người dùng Linux khi sử dụng tệp bản kê, bằng cách định nghĩa thuộc tính bản kê android:sharedUserId với cùng một giá trị/tên.

Source: Ibm.com

P1: Tìm hiểu về bảo mật trên Android - Tổng quan

I. Tổng quan
 
Android bao gồm một khung phát triển, các thư viện ứng dụng và một máy ảo thời gian thực Dalvik, tất cả chạy trên Linux. Bằng cách lợi dụng nhân Linux, Android có được một số trong các dịch vụ của hệ điều hành, bao gồm việc quản lý các tiến trình và bộ nhớ, một ngăn xếp mạng, các trình điều khiển thiết bị, một tầng trừu tượng hóa phần cứng có liên quan đến chủ đề của bài viết này - các dịch vụ bảo mật. 

1. Các điều kiện cần có trước

Để đồng hành cùng bài viết này, bạn cần những kỹ năng và các công cụ sau đây:

  • Kiến thức cơ bản về công nghệ Java™ và cách sử dụng Eclipse (hoặc IDE yêu thích của bạn).
  • JDK (phiên bản cần thiết là 5 hoặc 6).
  • Eclipse (phiên bản 3.4 hoặc 3.5).
  • SDK Android và Trình cắm thêm ADT.

Để tải về và có các thông tin thiết lập, hãy xem phần Tài nguyên.

2. Các từ viết tắt thường dùng

  • ADT: Android Development Tools - Các công cụ phát triển Android.
  • API: Application Program Interface - Giao diện lập trình ứng dụng.
  • IDE: Integrated Development Environment - Môi trường phát triển tích hợp.
  • JDK: Java Development Kit - Bộ dụng cụ phát triển Java.
  • URI: Uniform Resource Identifier - Trình nhận dạng tài nguyên thống nhất.
  • XML: Extensible Markup Language - Ngôn ngữ đánh dấu mở rộng.

Source: Ibm.com