Tải bản đầy đủ (.pdf) (37 trang)

TÌM HIỂU VỀ ANDROID SECURITY

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.49 MB, 37 trang )

BAN CƠ YẾU CHÍNH PHỦ
HỌC VIỆN KỸ THUẬT MẬT MÃ
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯

BÁO CÁO BÀI TẬP LỚN

TÌM HIỂU VỀ ANDROID SECURITY

Mơn: An tồn và Bảo mật ứng dụng di động

Nhóm sinh viên thực hiện:
Nguyễn Quang Đức
Nguyễn Đăng Nam
Nguyễn Tuấn Anh
Lớp: CT2C

Hà Nội, 2021


BAN CƠ YẾU CHÍNH PHỦ
HỌC VIỆN KỸ THUẬT MẬT MÃ
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯

BÁO CÁO BÀI TẬP LỚN

TÌM HIỂU VỀ ANDROID SECURITY

Mơn: An tồn và Bảo mật ứng dụng di động

Nhóm sinh viên thực hiện:
Nguyễn Quang Đức


Nguyễn Đăng Nam
Nguyễn Tuấn Anh
Lớp: CT2C
Giảng viên hướng dẫn:
ThS. Thái Thị Thanh Vân
Khoa Công nghệ thông tin – Học viện Kỹ thuật mật mã

Hà Nội, 2021



MỤC LỤC
Danh mục kí hiệu và viết tắt .................................................................................. ii
Danh mục hình vẽ .................................................................................................. iii
Lời cảm ơn .............................................................................................................. iv
Lời nói đầu............................................................................................................... v
Chương 1. TỔNG QUAN VỀ ĐỀ TÀI .................................................................. 1
1.1. Khái niệm về Android ...................................................................................... 1
1.2. Bảo mật trong Android ..................................................................................... 2
1.3. Android mã nguồn mở và tương lai .................................................................. 3
1.4. Kết luận chương 1............................................................................................. 3
Chương 2. ANDROID SECURITY ....................................................................... 4
2.1. Phát triển và gỡ lỗi trên Android ...................................................................... 4
2.1.1. Phát triển ............................................................................................... 4
2.1.2. Gỡ lỗi ..................................................................................................... 4
2.2. Cơ chế bảo mật IPC .......................................................................................... 5
2.2.1. Activities ................................................................................................ 6
2.2.2. Services .................................................................................................. 6
2.2.3. Broadcasts ............................................................................................. 6
2.2.4. ContentProviders .................................................................................. 7

2.2.5. Binder .................................................................................................... 7
2.3. Mơ hình bảo mật trong Android ....................................................................... 7
2.4. Quyền hạn trên Android ................................................................................... 8
2.5. Intent trong Android ....................................................................................... 10
2.6. Activity trong Android ................................................................................... 12
2.7. Broadcast trong Android ................................................................................ 15
2.8. Service trong Android .................................................................................... 16
2.9. ContentProvider trong Android ...................................................................... 17
2.10.Phòng chống SQL injection trong Android .................................................... 19
2.11.Tập tin, tham chiếu và lưu trữ dữ liệu trên Android ....................................... 19
2.12.Binder trong Android...................................................................................... 20
2.13.Kết luận chương 2........................................................................................... 22
Chương 3. ANDROID SECURITY TOOLS ...................................................... 23
3.1. Khái quát vấn đề ............................................................................................. 23
3.2. Package viewer ............................................................................................... 23
3.3. Dexplorer ........................................................................................................ 26
3.4. Kết luận chương 3........................................................................................... 27
Kết luận.................................................................................................................. 28
Tài liệu tham khảo ................................................................................................ 29

i


DANH MỤC KÍ HIỆU VÀ VIẾT TẮT
ADB

Android debug bridge

IPC


Inter process communicator

SQL

Structure query language

OS

Operating System

ii


DANH MỤC HÌNH VẼ
Hình 2.1.Android debug bridge client use ................................................................ 5
Hình 2.2.Ứng dụng yêu cầu Permision ..................................................................... 9
Hình 2.3.Intent trong Android ................................................................................ 11
Hình 2.4.Trạng thái của Android ............................................................................ 13
Hình 2.5.Vịng đời của Activity.............................................................................. 13
Hình 2.6.Truy xuất tới ContentProvider ................................................................. 18
Hình 3.1.Package viewer ........................................................................................ 23
Hình 3.2.Thơng tin chi tiết của sổ sức khỏe điện tử ............................................... 25
Hình 3.3.Dexplorer ................................................................................................. 26
Hình 3.4.Dexplorer sổ sức khỏe điện tử ................................................................. 27

iii


LỜI CẢM ƠN
Trong quá trình thực hiện báo cáo bài tập mơn học An tồn và bảo mật ứng

dụng di động, nhóm chúng em đã nhận được sự giúp đỡ tận tình, sự quan tâm sâu
sát và kiến thức mà xuyên suốt môn học của giáo viên hướng dẫn là ThS. Thái Thị
Thanh Vân – Giảng viên Khoa Công nghệ thông tin Học viện Kỹ thuật mật mã đã
truyền tải đến với chúng em, tạo tiền đề giúp nhóm chúng em có thể hồn thành
được bài báo cáo này.
Một lần nữa nhóm chúng em xin cảm ơn cơ đã tạo những điều kiện tốt nhất
để nhóm chúng em có thể hồn thành báo cáo bài tập mơn học này!
NHĨM SINH VIÊN THỰC HIỆN BÁO CÁO

iv


LỜI NĨI ĐẦU
Cuốn theo dịng chảy xã hội là sự phát triển rất mạnh mẽ của lĩnh vực công
nghệ thông tin qua các thập kỷ gần đây. Công nghệ thông tin và ứng dụng công nghệ
thông tin đã len lỏi vào mọi ngóc ngách của cuộc sống hiện tại, và các nhu cầu cuộc
sống hằng ngày của con người cũng tăng lên và yêu cầu cũng trở lên khắt khe hơn.
Con người ngày càng phát triển kéo theo đó là nhu cầu tiếp cận kiến thức mới
và xu hướng của mọi người. Nhu cầu đó, đã và đang ngày càng khiến cho con người
ta hài lòng hơn khi việc tiếp cận tới tri thức ở mọi nơi, mọi nguồn chỉ qua một thiết
bị cầm tay và vỏn vẹn vừa cái túi của bạn. Và tất nhiên thiết bị đó được kết nối
Internet, nó là điện thoại di động.
Song song với việc xây dựng và phát triển của ngành ứng dụng CNTT, việc
an toàn và bảo mật ứng dụng và dữ liệu là phần cũng rất cần được trú trọng đến.
Việc thiết bị di động luôn luôn được đem bên người mỗi khi và nó chính là nơi lưu
trữ nhiều thơng tin nhạy cảm của một cá nhận nên việc an tồn và bảo mật cho nó là
điều khơng thể thiếu. Vận dụng kiến thức và sự truyền đạt, hướng dẫn của giảng viên
Thái Thị Thanh Vân trong quá trình học mơn học này, nhóm em có tìm hiểu về đề
tài An toàn và Bảo mật Android (Android Security). Trong báo cáo này, nhóm em
có tìm hiểu và trình bày về một số kiến thức:

1. Sự hoạt động của các ứng dụng Android
2. Cơ chế bảo mật trong ứng dụng Android
3. Một số công cụ đánh giá và theo dõi hoạt động của ứng dụng trên nền tảng
Android
Chúng em rất mong nhận được sự góp ý của giáo viên cũng như các bạn để
hoàn thiện tài liệu hơn về đề tài này.
NHÓM SINH VIÊN THỰC HIỆN BÁO CÁO

v


CHƯƠNG 1. TỔNG QUAN VỀ ĐỀ TÀI
1.1. Khái niệm về Android
Android là nền tảng di động được tạo bởi Google và Hiện hội di động Open
Handset Alliance. Android là hệ điều hành nguồn mở dựa trên nền tảng Linux, chủ
yếu dành cho các thiết bị có màn hình cảm ứng như điện thoại, máy tính bảng.
Với mã nguồn mở và giấy phép khơng có nhiều ràng buộc nên Android ngày
càng trở thành nền tảng điện thoại thông minh phổ biến nhất thế giới.
Vào quý 3 năm 2012, Android chiếm 75% thị phần về điện thoại thơng minh
trên tồn thế giới với con số tổng cộng khoảng 500 triệu thiết bị đã được kích hoạt
và 1,3 triệu lượt kích hoạt mỗi ngày.
Ưu điểm:
+ Là một hệ điều hành mã nguồn mở, nó có khả năng tùy biến cao, có thể tự
do chỉnh sửa mà không bị Google can thiệp hay cấm đoán.
+ Sản phẩm đa dạng, nhiều hãng điện thoại và thiết bị công nghệ đã ưa chuộng
Android cho thiết bị của mình, giá cả hợp lý, từ bình dân đến cao cấp.
+ Kho ứng dụng Google Play Store khổng lồ.
+ Thân thiện và dễ sử dụng.
+ Khả năng đa nhiệm cao, chạy nhiều ứng dụng cùng lúc.
Nhược điểm:

+ Dễ bị phần mềm độc hại và vi rút. Do tính chất mã nguồn mở nên vẫn cịn
rất nhiều phần mềm khơng được kiểm soát, chất lượng kém hoặc lỗ hổng bảo
mật được sử dụng.
+ Quá nhiều cửa hàng ứng dụng gây ra các vấn đề về kiểm soát chất lượng,
thiếu các ứng dụng thực sự tốt.
+ Phân mảnh lớn Trong khi một số thiết bị Android tuyệt vời như Galaxy S5,
Galaxy Note 4, Xperia Z3 ... đã được phát hành, vẫn có rất nhiều sản phẩm thơng
thường rẻ tiền khác trên thị trường.
+ Cập nhật không tự động cho tất cả các thiết bị. Khi phiên bản hệ điều hành
mới ra mắt, không phải sản phẩm nào cũng được cập nhật, dù muốn trải nghiệm bạn
thường phải mua thiết bị mới.

1


1.2. Bảo mật trong Android
Android cung cấp một tập hợp trừu tượng hóa cho các nhà phát triển gồm giao
diện người dùng, vòng đời ứng dụng, các ứng dụng khác nhau, các cơ thế IPC hiệu
quả và phân quyền. Kèm với đó là các cơng cụ phát triển và trình gỡ lỗi tích hợp với
cơng cụ phát triển Android. Tất cả điều này được cung cấp đầu tiên trên mô hình
bảo mật Linux truyền thống vẫn cịn được sử dụng cho đến hiện giờ.
Android là nền tảng mã nguồn “mở” bởi vì các nhà phát triển có thể thấy và
thay đổi mã nguồn của nó mà khơng cần có giấy phép hoặc cấp phép hoặc hạn chế
nào cả. Android là mã nguồn “mở” với cơ chế thiết kế để bảo vệ và có thể chạy các
ứng dụng của bên thứ ba nào đó. Bên cạnh đó, mã nguồn “mở” cũng là cách để mọi
người chung tay, đóng góp với mã nguồn để có những sáng tạo mới hơn cho nền
tảng này.
Các ứng dụng Android được coi là tương đương, ngang hàng nhau khi được
chạy và thực hiện trên thiết bị. Điều này có nghĩa rằng, Android có thể cấp phép cho
bất kỳ ứng dụng nào hoạt động với bất kỳ quyền hạn nào mà ứng dụng đó muốn

trong q trình được hoạt động và cài đặt trên thiết bị. Việc này được vận dụng vào
quá trình phát triển ứng dụng trên nền tảng Android bởi các nhà phát triển để yêu
cầu thiết bị chạy Android có thể cung cấp các quyền hạn nhất định cho ứng dụng đó
được chạy và cài đặt.
Các bản phân phối Android trên các thiết bị di động đều được cấu hình để
người sở hữu nó khơng có quyền root cao nhất trên hệ thống, qua đó khơng thể thay
đổi các khía cạnh nhất định của hệ thống trên thiết bị đó. Điều này thể hiện đặc trưng
và đặc quyền nhất định của các hãng sản xuất.
Tuy nhiên, với bất kỳ thiết bị di động nào, có các kỹ thuật khác nhau với các
quyền truy cập vật lý vào thiết bị là có thể “sửa, đổi” hoặc tác động vào cấu hình, hệ
thống của thiết bị chạy Android. Thật vậy, đấy cũng chính là lỗi bảo mật trong
Android khi nó là nền tảng mã nguồn “mở”, bên cạnh đó cũng có nhiều cách khác
nhau để có thể tác động vào bộ nạp khởi động, firmware, bộ nhớ, cấu hình bus,… ở
cả phần cứng và phần mềm của thiết bị Android. Do đó, các thiết bị mã nguồn mở
thì thường khơng chắc chắn tối đa tính bảo mật như những các nền tảng khác khơng
có tính “mở” như iPhone, Windows Phone.

2


1.3. Android mã nguồn mở và tương lai
Một trong những điều độc đáo về nền tảng Android là các nhà phát triển có
thể trực tiếp đóng góp vào sự phát triển trong tương lai của nó. Nếu bạn có một số
tính năng thơng minh hoặc ý tưởng về cách tạo nền tảng tốt hơn, bạn có thể gói lại
một tập các bản vá và submit chúng lên cộng đồng phát triển. Quá trình này tương
tự như cách các dự án nguồn mở khác chấp nhận đóng góp và hỗ trợ của cộng đồng.
Tương lai của Android thì khơng thực sự rõ ràng. Nó rõ ràng là đã có những
thành cơng thương mại tuyệt vời trong những năm đầu tiên, và nó có một lượng lớn
các tính năng và mơi trường phát triển tuyệt vời. Làm thế nào mà nó có thể xử lý các
vấn đề thương thich, các yếu tố về hình thức khác nhau, kích thước màn hình, ….

Điều đó vẫn chưa được chứng minh, nhưng có rất nhiều tiếng vang về các thiết bị
mới. Tại thời điểm viết, thiết bị được triển khai rộng rãi duy nhất là T-Mobile G1 và
hỗ trợ các ứng dụng trả phí trên store Android của Google là một điều khác là mới
mẻ.
1.4. Kết luận chương 1
Được áp dụng là “mã nguồn mở” nên Android đã đem lại nhiều các bản phân
phối khác nhau, có nhiều những phiên bản được phát triển đa dạng với nền tảng là
Android và khiên Android là nền tảng rất phổ biến hiện nay. Nhưng đi kèm với điều
kiện mở và đa dạng đó là những lỗ hổng về tính an tồn và bảo mật của nền tảng
được khai thác vào. Do đó việc nghiên cứu để hạn chế tối đa các lỗi bảo mật là một
điều rất được lưu ý.
Trong chương 2, ta sẽ cùng nhau đi đến các khái niệm về: công cụ bảo mật và
theo dõi trên Android, cơ chế bảo mật IPC và mô hình bảo mật Android, khai báo
và phân quyền cho ứng dụng Android.

3


CHƯƠNG 2. ANDROID SECURITY
2.1. Phát triển và gỡ lỗi trên Android
2.1.1. Phát triển
Android có 2 tập nhà phát triển:
- Nhà phát triển ứng dụng: xây dựng phần nền cho nền tảng Android
- Nhà phát triển hệ thống : mở rộng và điều chỉnh các cấu hình, thống số trên
nền tảng Android
Các nhà phát triển thì đa dạng ở các tầng lớp và các quốc gia. Và hầu hết các
nhà phát triển hệ thống, họ làm việc cho các công ty hoặc tập đoàn là hãng sản xuất
phát triển hệ thống và sản xuất thiết bị. Còn các nhà phát triển ứng dụng phân bố
rộng hơn, họ có thể tạo ra nhiều các ứng dụng của riêng họ, chạy trên các hệ thống
sử dụng nền tảng Android.

Các nhà phát triển ứng dụng được hỗ trợ rất nhiều các tài liệu bao gồm các
ebook, website, documents, video, … về vòng đời của một ứng dụng Android, cách
sử dụng các chức năng, tính năng của phương thức, tài liệu hướng dẫn từng bước về
cách xây dựng, tích hợp và biên dịch ra các ứng dụng chạy trên nền tảng Android.
Trong việc phát triển hệ thống Android, các nhà phát triển hệ thống có thể sử
dụng GNU Linux hoặc OS X để nghiên cứu và thực hiện phát triển một cách sâu xa
về mã nguồn và hệ thống hoạt động như thế nào khi sử dụng Android. Khi phát triển
và nghiên cứu, họ có thể được sử dụng nhiều các tính năng, mã nguồn của riêng
công ty của họ để phát triển và tối ưu mã nguồn đó.
Bộ phát triển phần mềm (SDK) cung cấp các cơng cụ miễn phí để xây dựng
và gỡ lỗi các ứng dụng, hỗ trợ các nhà phát triển trên Linux, Windows và OS X. Các
hướng dẫn chi tiết cho việc cấu hình các cơng cụ trên mỗi nền tảng đều đã được tích
hợp sẵn. SDK cung cấp một trình giả lập rất tốt, trình giả lập mơ phỏng một thiết bị
có chip ARM tương tự như T-Mobile G1, mặc dù các cấu hình phần cứng được giả
lập hóa với Android Virtual Devices thì được hỗ trợ trong SDK 1.5.
2.1.2. Gỡ lỗi

4


Hình 2.11Android debug bridge client use
Trình hỗ trợ gỡ lỗi được tích hợp vào Android trên thiết bị cũng như trên các
trình giả lập thiết bị. Android hỗ trợ trình gỡ lỗi là cung cấp chủ yếu thơng qua trình
gỡ lỗi Deamon “(/sbin/adbd)”, cái này cho phép phần mềm chạy trên máy bạn phát
triển của bạn kết nối với phần mềm chạy trên thiết bị. Có hai cách riêng biệt để gỡ
lỗi trên nền tảng Android: một là dành cho mã native và một là chạy code trên máy
ảo (Dalvik).
Phần lớn các mã code phát triển có thể được gỡ lỗi khi nó được chạy trong
trình giả lập hoặc trên thiết bị thực tế nào đó. Đây là trình gỡ lỗi được Google cung
cấp và kèm theo tài liệu hướng dẫn để bạn có thể thực hiện gỡ lỗi trong quá trình

phát triển. Đối với lỗi đặc trưng so với thiết bị để hoạt động, ta cần phải có trình
Android Debug Bridge Daemon (adbd) đang chạy trên thiết bị đó. Để sử dụng trình
gỡ lỗi này, cần kết nối USB giữa di động và máy tính của bạn. Sau đó để “Cài Đặt |
Ứng dụng | Phát triển” sau đó chọn “Trình gỡ lỗi qua USB thiết bị”. Để kết nối và
truy cập vào hệ thống tệp tin và ứng dụng của thiết bị, ta cần sử dụng “Android
Debug Brigde” (ADB), đây là chương trình máy khách chạy bằng “command line”
để tương tác với adbd trên thiết bị. Để nhận danh sách thiết bị có sẵn kết nối với máy
tính, gõ lệnh “ADB DEVICES” trên trình dịng lệnh và ta có danh sách trả về như
hình trên.
2.2. Cơ chế bảo mật IPC
Android thực hiện một vài cơng cụ chính được sử dụng để giao tiếp hoặc phối
hợp giữa các chương trình một cách an tồn. Các cơ chế này cung cấp cho các ứng
dụng Android Khả năng chạy các quy trình trong nền, cung cấp dịch vụ được tiêu
thụ bởi các ứng dụng khác, chia sẻ dữ liệu quan hệ một cách an toàn, bắt đầu các
5


chương trình khác và sử dụng lại các thành phần từ các ứng dụng khác một cách an
toàn.
Phần lớn giao tiếp giữa các liên lạc (IPC) xảy ra trên Android được thực hiện
thông qua việc vượt qua các cấu trúc dữ liệu có tên là "Intents". Đây là những bộ
sưu tập thơng tin có một vài thuộc tính dự kiến, hệ thống có thể sử dụng để giúp tìm
ra nơi gửi “Intents” nếu nhà phát triển không định nghĩa rõ từ trước.
Mỗi cơ chế IPC để sử dụng “Intents” và nó rất quen thuộc với hầu hết các nhà
phát triển Android. Và việc sử dụng các kiểu dữ liệu này lại là chìa khóa cho việc
bảo mật trong Android với các khái niệm theo kèm bên dưới:
2.2.1. Activities
Trong ứng dụng Android, Activity đóng vai trị đặc biệt quan trọng, là nơi
giúp người dùng tương tác trực tiếp với ứng dụng, ví dụ như gọi điện thoại, chụp
ảnh, gửi e-mail hoặc xem bản đồ.

Activity được coi là xương sống của một ứng dụng Android, một ứng dụng
có thể có một hoặc nhiều Activity (bất kì ứng dụng nào cũng cần có ít nhất 1
Activity). Activity có thể hiển thị ở chế độ tồn màn hình, dạng cửa sổ hoặc với một
kích thước nhất định.
Một Activity có thể gọi đến một Activity khác, Activity được gọi đến sẽ tương
tác với người dùng tại thời điểm được gọi tới.
2.2.2. Services
- Service là một thành phần ứng dụng chạy ngầm trên hệ điều hành ví dụ như
nghe nhạc, hoặc tương tác với một content provider. Service không tương tác trực
tiếp với người dùng, khi service chạy thì người dùng vẫn có thể tương tác với một
thành phần khác trong ứng dụng hoặc có thể tương tác với một ứng dụng khác trong
hệ thống. Ví dụ: Chúng ta có thể vừa nghe nhạc, vừa lướt facebook là do ứng dụng
nghe nhạc có một service chạy ngầm trong background để phát nhạc trong khi người
dùng đang tương tác với ứng dụng facebook.
- Theo trang chủ android, Service trong Android được chia thành 3 loại đó là:
Foreground Service, Background Service và Bound Service.
2.2.3. Broadcasts
- Broadcasts là một phần phần trong ứng dụng Android, nó cung cấp cách để
gửi đi các thống báo giữa các ứng dụng với nhau.
Ví dụ: cánh báo thời gian cho người dùng, cảnh báo tin nhắn đến, thông báo
các thông tin khác, …
6


- Khi gửi đi một broadcast, một ứng dụng đặt các thông báo, thông tin gửi vào
một Intent. Ứng dụng này có thể chỉ định những chương trình phát sóng họ quan
tâm đến các ý định mà họ muốn nhận bằng cách chỉ định một IntentFilter.
2.2.4. ContentProviders
- ContentProviders cung cấp một cách để chia sẻ dữ liệu quan hệ hiệu quả
cách và an tồn giữa các tiến trình (processes). Chúng được dựa trên SQL và nên

được sử dụng một cách cẩn thận. Một số giao diện widgets người dùng tốt được tạo
từ ContentProviders rất là hấp dẫn ngay cả khi dữ liệu quan hệ khơng được cao cho
lắm.
- ContentProviders có thể được đảm bảo và báo mật bằng việc phân quyền ở
Android, và được sử dụng để chia sẻ dữ liệu giữa các tiến trình, ví dụ như các files
trên hệ thống Unix truyền thống.
2.2.5. Binder
- Binder cung cấp một cơ chế giao tiếp hiệu quả cao trên Android. Nó được
tích hợp trong kernel, và bạn có thể dễ dàng xây dựng giao diện RPC trên đỉnh mơ
hình bằng cách sử dụng ngôn ngữ định nghĩa giao diện Android (AIDL).
- Binder thường được sử dụng để làm cầu nối giữa Java và mã code native để
chạy trong các tiến trình riêng biệt.
2.3. Mơ hình bảo mật trong Android
Android được cung cấp một mơ hình bảo mật dựa trên Linux Kernel. Tuy
nhiên, Android có sự trừu tượng mà khác biệt riêng với nó, và chúng được triển khai
trên nền Linux, qua đó tận dụng các user Linux có thể được áp dụng.
Android permissions, quyền hạn trên Android là các quyền được cung cấp cho
các ứng dụng để cho phép ứng dụng có thể chụp ảnh, sử dụng GPS, thực hiện cuộc
gọi thoại, … Qua đó, các ứng dụng khi được cài đặt, nó nhận được một mã định
danh (uid) tương ứng với ứng dụng đó trong hệ thống để có thể kiểm soát. Mã định
danh (uid) của một ứng dụng được sử dụng để bảo vệ dữ liệu của nó và sử dụng một
cách rõ ràng để nó có thể chia sẻ với các ứng dụng khác nữa.
Việc ngăn chặn mọi người từ việc tạo ra những lựa chọn xấu nhưng mang tính
thăm dị là việc nằm ngồi phạm vi của mơ hình bảo mật – mơ hình cấp quyền hệ
thống được thiết kế để đưa ra các lựa chọn có tính sắp xếp từ trước. Mơ hình quyền
Android có thể mở rộng và các nhà phát triển cần ghi nhớ những gì hợp lý cho người
dùng điện thoại để hiểu khi xác định quyền mới cho họ. Để giảm thiểu mức độ lạm
7



dụng có thể, các quyền là cần thiết cho các chương trình thực hiện các hoạt động
nguy hiểm tiềm tàng mà điện thoại cần hỗ trợ, chẳng hạn như sau:
- Cuộc gọi quay số trực tiếp (có thể phải chịu phí đường truyền)
- Truy cập vào dữ liệu riêng tư
- Thay đổi sổ địa chỉ, e-mail, v.v.
Hệ thống thời gian chạy của Android theo dõi quyền nào mà mỗi ứng dụng
có; Các quyền này được cấp khi hệ điều hành được cài đặt hoặc khi cài đặt ứng dụng
của người dùng. Để được cài đặt, ứng dụng yêu cầu người dùng phê duyệt quyền
cho nó để chạy trên thiết bị. Người dùng sẽ do dự để cài đặt các ứng dụng muốn truy
cập vào dữ liệu cá nhân hoặc trình quay số. Hầu hết sẽ mọi người sẽ không ngại khi
chấp nhận quyền truy cập Internet hoặc truy cập vào xác định vị trí, hoặc bất kỳ sự
cấp phép quyền hạn nào có ý nghĩa đối với ứng dụng được cài đặt.
2.4. Quyền hạn trên Android
Các ứng dụng cần được phê duyệt để thực hiện các nhiệm vụ mà người dùng
thiết bị có thể phàn nàn, chẳng hạn như gửi tin nhắn SMS, sử dụng máy ảnh hoặc
truy cập CSDL, danh sách liên hệ của người dùng thiết bị. Android sử dụng các
quyền kê khai để theo dõi những gì người dùng cho phép ứng dụng thực hiện. Nhu
cầu sử dụng quyền của ứng dụng được thể hiện trong file “AndroidManifest.xml” và
người dùng đồng ý chấp nhận khi cài đặt các ứng dụng đó trên thiết bị của mình.
Mục đích của Permission là để đảm bảo sự an toàn và quyền riêng tư cho
người dùng. Điện thoại của chúng ta giờ là một "kho tàng" dữ liệu cá nhân trong đó
nên việc bảo vệ như thế này là cần thiết. Trong điện thoại có đủ hết mọi loại dữ liệu
nhạy cảm, từ tin nhắn, hình ảnh, video cho đến dữ liệu duyệt web hay tài khoản ngân
hàng. Thậm chí bộ định vị GPS, dữ liệu di động camera hay micro của smartphone
cũng là thứ nhạy cảm vì nó có thể ghi lại hình ảnh của bạn hay những gì bạn nói,
cho người khác biết bạn đang ở đâu, bạn đang nói chuyện với ai, nội dung bạn nói
là gì...
Ứng dụng phải cơng khai các quyền (permission) cái mà nó u cầu bằng thẻ
<uses-permission> trong file manifest. Ví dụ, một ứng dụng cần gửi SMS message
sẽ có dịng này trong Mainifest:

<manifest xmlns:android=" />package="com.example.snazzyapp">
<uses-permission android:name="android.permission.SENDSMS"/>
<application ...>
8


...
</application>
</manifest>

Hình 2.2.Ứng dụng yêu cầu Permision
Bốn mức độ quyền trên Android:
Normal

Permission cho ứng dụng với việc ảnh hưởng của nó tới các
dữ liệu hoặc các thông tin trên thiết bị là nhỏ
Ví dụ: bật tắt bluetooth, thiết lập âm thanh, rung, múi giờ, …

Dangerous

Permission như “WRITE_SETTINGS, SEND_SMS”, …
hoặc các permission liên quan đến việc truy cập và thay đổi
calendar, camera, location, contacts, storage, …
Có nguy cơ cao làm nguy hại đến sự riêng tư và bảo mật trên
thiết bị

Signature

Những permission này chỉ được cấp cho các ứng dụng tương
thích cho việc bảo mật và có kết hợp với việc khơng publish

các thơng tin ra ngồi.

SignatureOrSystem Tương tự với Signature, nhưng quyền này có thể có những
sửa đổi và yêu cầu các quyền trên hệ thống
9


2.5. Intent trong Android
• Intent:
Đây là một cơ chế dành riêng cho Android để di chuyển dữ liệu giữa các tiến
trình Android, và chúng nằm ở lõi của Android IPC. Chúng khơng thực thi các chính
sách bảo mật, nhưng thực tế thường là vượt qua ranh giới bảo mật hệ thống. Để cho
phép các role giao tiếp giữa chúng, Intents có thể được gửi qua Binder interfaces để
được cấp phép. Hầu hết các giao tiếp của Android interprocess được thực hiện thông
qua Binder, mặc dù phần lớn thời gian này được ẩn đi.
Intent có 2 loại chính là Explicit Intent và Implicit Intent:
- Explicit Intent (Intent tường minh): xác định rõ và cụ thể các thành phần
tham gia hành động.
Intent intent = new Intent(MainActivity.this, DialerActivity.class);
startActivity(intent);
- Implicit Intent (Intent không tường minh): Loại Intents này chỉ ra hành động
cần được thực hiện (action) và dữ liệu cho hành động đó (data). Khi bạn sử
dụng implicit intent, hệ thống Android sẽ tìm kiếm tất cả thành phần thích
hợp để start bằng cách cách so sánh nội dung của Intent đc gửi với các
IntentFilter đc khai báo trong ứng dụng khác. Nếu intent đc gửi đó khớp
với intent filter trong một component hoặc một ứng dụng nào đó, thì ngay
lập tức hệ thống sẽ khởi động thành phần đó và cung cấp cho nó intent ban
đầu đc gửi. Nếu nhiều IntentFilter tương thích thì hệ thống sẽ hiển thị hộp
thoại để người dùng có thể chọn ứng dụng nào sẽ sử dụng.
Intents được sử dụng qua rất nhiều cách và trường hợp trên Android:

- Để bắt đầu một Activity (kết hợp với các chương trình khác): sử dụng
Context.startActivity()
- Sử dụng như Broadcasts để thơng báo cho các chương trình liên quan các
sự thay đổi nào đó hoặc sự kiện nào đó xảy ra: sử dụng
Context.sendBroadcast(),
sendStickyBroadcast(),
hoặc
sendOrderedBroadcast()
- Sử dụng để start, stop, communicate với các background Services: sử dụng
Context.startService(), stopService(), hoặc bindService()

10


- Sử dụng như một callback để xử lý sự kiện nào đó, như là trả lại kết quả
hoặc lỗi một cách đồng bộ với interface “PendingIntents” cung cấp qua việc
client giao tiếp server qua Binder interfaces.

Hình 2.33.Intent trong Android
Intents có thể có các tùy chọn như danh sách Categories, type, component, bit
flags, và các cặp key/values gọi là “Extras”. Nói chung, các API có thể làm Intents
bị hạn chế bởi manifest permissions. Và bạn có thể tạo các Activities,
BroadcastReceivers, ContentProviders, và Services mà chỉ có thể được truy cập từ
các ứng dụng người dùng cấp permissions cho nó.
• IntentFilters:
Đây là thành phần giúp cho hệ thống Android biết được ứng dụng của bạn có
thể làm được những gì. Activity, Service và BroadcastReceiver sử dụng IntentFilter
để thông báo cho hệ thống biết các dạng Implicit Intent mà nó có thể xử lý. Nói cách
khác, IntentFilter là bộ lọc Intent, chỉ cho những Intent phù hợp đi qua nó.
Trong Android, Intent Filter là một biểu thức (expression) trong file manifest

của ứng dụng (ActivityMainfest.xml) và nó được sử dụng để xác định loại Intent mà
component muốn nhận. Trong trường hợp chúng ta tạo Intent Filter cho một activity,
các ứng dụng khác sẽ có thể khởi chạy activity bằng cách gửi loại intent phù hợp,
nếu khơng thì activity chỉ có thể được bắt đầu bằng một explicit intent.
Thẻ Intent Filters (<intent-filter>) trong file manifest nằm trong thẻ các
component tương ứng. Ta có thể xác định loại intent phù hợp thông qua ba yếu tố
dưới đây:
11


- <action>: mô tả tên của một intent action phù hợp và nó phải là chuỗi ký
tự, khơng phải là hằng số
- <category>: mô tả tên của một loại intent được chấp nhận và nó phải là
chuỗi ký tự, khơng phải là hằng số.
- <data>: xác định loại dữ liệu sẽ phù hơp và bằng cách sử dụng một hoặc
nhiều thuộc tính, chúng ta có thể chỉ định loại dữ liệu của URI (scheme,
host, port, path) và loại MIME.
Thêm các thơng số về action (phải có ít nhất 1), category hoặc data tương ứng
vào một Intent để có thể xác định và vượt qua IntentFilters sau đó có thể thực hiện
Intent đó. Qua đó có thể hạn chế một phần nào đó về vấn đề bảo mật cho ứng dụng
Android.
Ví dụ:
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.BROWSERABLE" />
<data android:mimeType="text/plain"/>
</intent-filter>
</activity>
2.6. Activity trong Android

Activity là một thành phần của ứng dụng Android. Android Activity là nơi để
ứng dụng tương tác trực tiếp với người dùng thơng qua giao diện. Một ứng dụng có
thể sẽ có nhiều màn hình và mỗi màn hình có thể là một Activity (nếu không sử dụng
Fragment).
Mỗi Activity thường hoạt động độc lập với nhau nhưng có thể tương tác và
truyển dữ liệu qua nhau thơng qua Intent. Chính vì Activity hoạt động độc lập nên
sẽ có vịng đời riêng từ lúc được khởi tạo cho đến lúc được huỷ đi.

12


Activity trong q trình chạy ở chương trình sẽ có những trạng thái như dưới:

Hình 2.44.Trạng thái của Android
Trong Android, người ta đã định nghĩa sẵn các callback tương ứng với từng
trạng thái của vịng đời Activity. Vì thế, việc xử lý logic tương ứng với từng trại thái
của Activity là rất quan trọng. Điều đó đảm bảo ứng dụng hoạt động ổn định và đáng
tin cậy với người dùng. Bạn có thể tham khảo hình ảnh minh họa vịng đời Activity:

Hình 2.55.Vịng đời của Activity
13


- onCreate(): được gọi bởi OS khi Activity được tạo
- onStart(): được gọi ngay trước khi Activity được chạy và tương tác với
người dùng
- onResume(): được gọi khi Activity chuẩn bị chạy hoặc được kích hoạt trở
lại từ trạng thái Stop
- onPause(): được gọi khi ứng dụng chuyển sang chạy nền
- onStop(): chạy ngay sau onPause() , khi Activity không còn tương tác với

người dùng
- onRestart(): được gọi khi Activity bị tạm dừng và bây giờ được kích hoạt
lại
- onDestroy(): hủy một Activity khi chủ động tắt hoặc OS gọi để giải phóng
khi hết tài nguyên.
Cách đơn giản để tạo một Activity an toàn là xác nhận bất kỳ thay đổi nào hoặc
hành động rõ ràng nào đó với user. Hãy yêu cầu một permission để thực hiện nó.
Một Intent nhận bởi một untrusted Activity và cần được xác thực cẩn thận.
Activitiy không thể phụ thuộc vào IntentFilters (qua tag <intent-filter> trong
AndroidManifest.xml) cho việc ngăn chặn caller truyền các cấu hình khơng tốt cho
Intent. Có thể hiểu nhầm rằng đây là một đoạn mã lỗi phổ biến. Mặc khác, việc triển
Activity có thể phụ thuộc vào việc kiểm tra các permissions như là các cơ chế bảo
mật khác. Cài đặt thuộc tính android:permission trong một <activity> tag sẽ ngăn
chương trình bị thiếu hụt các permission thích hợp khi bắt đầu các Activity trong
quá trình hoạt động. Ta cần chỉ định một file manifest với các permission khác nhau
để không làm cho IntentFilter bối rối khi phải xác định hoặc xác thực các input đầu
vào khi được gọi đến các Intent.
Khi bắt đầu một Activity, nếu bạn biết các component nào bạn có ý định gọi
nó, bạn có thể chỉ định một Intent với việc gọi phương thức “setComponent()”. Điều
này ngăn hệ thống bắt đầu một số Activity để trả lời câu gọi Intent của bạn. Thậm
chí trong tình huống này, vẫn sẽ là khơng an tồn khi truyền các đối số nhạy cảm
vào Intents (ví dụ, tiền trình với permission GET_TASKS có thể thấy trình quản lý
ActivityManager.RecentTaskInformation, trình này có hiển thị các base Intent dùng
để gọi các Activities). Bạn có thể nghĩ rằng Intent được sử dụng để gọi Actitity như
các đối số câu lệnh của một chương trình nào đó.

14


2.7. Broadcast trong Android

Broadcast là một hình thức quan trọng của giao tiếp khơng đồng bộ giữa hai
tiến trình trên Android. Broadcast được gửi dưới dạng một Intent, và hệ thống xử lý
gửi chúng đi kèm với các receivers và thực thi các permission.
BroadcastReceiver là một component cho phép hệ thống hoặc các ứng dụng
khác phân phối các sự kiện đến ứng dụng như: Gửi tin nhắn pin yếu hoặc màn hình
tắt tin nhắn đến ứng dụng. Các ứng dụng cũng có thể bắt đầu khởi tạo tín hiệu
broadcast để cho các ứng dụng khác biết rằng dữ liệu cần thiết có sẵn trong thiết bị
để sử dụng nó. Chúng ta sử dụng Intent gửi các sự kiện broadcast cho các ứng dụng
khác và BroadcastReceivers sử dụng thông báo trên thanh trạng thái để cho phép
người dùng biết rằng sự kiện xảy ra.
Trong Android, BroadcastReceiver được kế thừa như một lớp con của
BroadcastReceiver và mỗi tín hiệu (broadcast) được truyền dưới dạng đối tượng
Intent.
Chúng ta có thể đăng ký ứng dụng chỉ để nhận được một vài tin nhắn
broadcast. Khi một broadcast được nhận, hệ thống sẽ kiểm tra broadcast được chỉ
định đã đăng ký hay chưa dựa trên việc nó sẽ định tuyến các broadcast đến các ứng
dụng.
Trong Android, có thể đăng ký nhận các broadcast theo 2 cách:
• khai báo trong file AndroidManifest.xml:
<receiver android:name=".SampleBroadcastReceiver">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED"/>
</intent-filter>
</receiver>
Code trên sẽ kích hoạt sự kiện hệ thống broadcast trong code bất cứ khi nào
q trình khởi động hồn thành.
• đăng ký một phương
Context.registerReceiver():

thức


nhận

tự

động

thông

public class MainActivity extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context, log, Toast.LENGTH_LONG).show();
}}
15

qua


Giống như các Activity, các Intent mà BroadcastReceivers có thể nhận các
IntentFilter mà chúng đã đăng ký. Để hạn chế việc ứng dụng nào có thể gửi tới
receiver một Intent, hãy sử dụng thuộc tính android:permission bên trong tag
<receiver> để chỉ định kê khai một permission. Khi một permission được chỉ định
trên một receiver, Activity Manager sẽ xác thực rằng sender có một permission nào
đó phù hợp trước khi truyền Intent đi. Permission là cách đúng để chắc chắn chỉ các
receiver nào đó nhận được các Intents từ các senders đúng nào đó, nhưng permission
sẽ khơng ảnh hưởng đến các thuộc tính của Intents được chuyển tới.
* Gửi một Broadcast Intent an toàn
Khi gửi một broadcast, các nhà phát triển có thể gói thêm một số thơng tin
hoặc đơi khi là các đối tượng nhạy cảm như một Binder. Nếu dữ liệu gửi đi là nhạy

cảm, chúng sẽ cần phải an toàn đối với đối tượng sender. Cách đơn giản để bảo vệ
điều này là yêu cầu receiver có các permission phù hợp. Bằng cách truyền một tên
permission trong manifest tới phương thức Context’s broadcastIntent(), bạn có thể
yêu cầu recipients cần permission để thực hiện các thao tác trên nó. Điều này cho
phép bạn kiểm sốt ứng dụng nào có thể nhận được Intent từ ứng dụng của bạn. Bạn
có thể sử dụng cơ chế IPC để xác định các permission khi các Broadcast được gửi
đến yêu cầu thực thi khác.
Ví dụ, một ứng dụng SMS muốn phát đi thơng báo cho các ứng dụng khác
quan tâm tới SMS bằng cách phát đi một Intent broadcast. Có thể giới hạn receivers
cho các ứng dụng có quyền RECEIVE_SMS.
2.8. Service trong Android
Service là một thành phần (component) có thể thực hiện các hoạt động lâu dài
trong background và nó khơng cung cấp một giao diện người dùng. Một thành phần
khác của ứng dụng có thể start nó, và nó tiếp tục chạy trong background ngay cả khi
người dùng chuyển sang ứng dụng khác. Ngồi ra một thành phần có thể liên kết
(bind) với một Service để tương tác với Service đó, thậm chí là thực hiện truyền
thơng liên tiến trình IPC (interprocess communication - IPC bạn có thể hiểu là một
hoạt động chia sẽ dữ liệu qua nhiều tiến trình, thơng thường sử dụng giao thức truyền
thơng và nó phải có Client và Server).
Ví dụ: một Service có thể thực hiện các giao dịch mạng, chơi nhạc, ra vào file
I/O hoặc tương tác với một content provider, tất cả đều từ background.

16


Service tương tự như BroadcastReceivers và Activity là bạn có thể bắt đầu
chúng một cách độc lập với các IntentFilter bằng cách chỉ định một Component nào
đó. Services cũng có thể được bảo mật bằng cách thêm thò các kiểm tra permission
với tag <service> trong AndroidManifest.xml. Các kết nối lâu dài được cung cấp bởi
binderService() để tạo một kênh IPC dựa trên Binder interface. Binder interface có

thể kiểm tra các permission của các lệnh caller, cho phép chúng thực thi nhiều hơn
một permission tại một thời điểm hoặc trên các request khác nhau. Do đó, Service
cung cấp rất nhiều cách khác nhau để chắc chắn rằng caller là đáng tin cậy tương tự
với Activities, BroadcastReceivers và Binder interface.
Gọi một Service hơi khó khăn. Vì khi thiết lập một Service, bạn cần phải xác
thực rằng Service mà bạn kết nối đến an tồn và có tính đúng đắn và có cơ chế đảm
bảo tính an tồn và tồn vẹn cho thơng tin mà bạn cung cấp. Để linh hoạt cho phép
users thêm các Service và ủy quyền cho các Service đó bằng cách kiểm tra các
permission mà chúng được xác báo bởi người dùng.
Service được chia làm 3 loại:
- Foreground service: thực hiện một số thao tác mà người dùng chú ý và thấy
rõ (nghe nhac, tải, …)
- Background service: thực hiện các hoạt động không được người dùng chú
ý trực tiếp (thu gom bộ nhớ và dọn dẹp, …)
- Bound service: chạy khi nó bị ràng buộc với các service khác
Độ ưu tiên của service: Bound > Foreground > Background
2.9. ContentProvider trong Android
Content Providers là một tập dữ liệu được bao bọc trong một custom API để
có thể cho phép đọc và ghi. Nó hoạt động như một interface cho phép bạn lưu trữ
và truy xuất dữ liệu từ một nguồn lưu trữ dữ liệu (repository). Và nó đối tượng này
cũng cho phép bạn chia sẻ dữ liệu giữa các ứng dụng khác nhau. Tag
trong file AndroidManifest.xml đăng ký một provider có sẵn và các permission cho
nó.
Content Provider điều phối việc truy cập tới bỗ lưu trữ dữ liệu thơng qua các
API và các component như hình dưới, nó bao gồm:
- Chia sẻ dữ liệu từ ứng dụng của bán tới các ứng dụng khác
- Gửi dữ liệu sang widget
- Trả về một kết quả gợi ý khi search cho ứng dụng của bạn thông qua
Seach Framework sử dụng SearchRecentSuggestionsProvider
17



×