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

NGHIÊN cứu, ĐÁNH GIÁ AN TOÀN THÔNG TIN mã NGUỒN hệ điều HÀNH ANDROID tùy BIẾN

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 (9.62 MB, 93 trang )

ĐẠI HỌC QUỐC GIA THÀNH PHỐ HỒ CHÍ MINH
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN


Lê Đức Thịnh
NGHIÊN CỨU, ĐÁNH GIÁ AN TOÀN THÔNG TIN MÃ NGUỒN
HỆ ĐIỀU HÀNH ANDROID TÙY BIẾN

LUẬN VĂN THẠC SĨ
NGÀNH CÔNG NGHỆ THÔNG TIN
Mã số: 60.48.02.01

NGƯỜI HƯỚNG DẪN KHOA HỌC: TS. PHẠM VĂN HẬU

TP HỒ CHÍ MINH - NĂM 2017


LỜI CẢM ƠN
Để hoàn thành khóa luận tốt nghiệp này, dựa trên những cố gắng của tôi, nhưng
không thể thiếu sự hỗ trợ của các thầy cô, các anh chị trường Đại học Công nghệ Thông
tin. Tôi xin bày tỏ lòng biết ơn đến:
Thầy cô trường ĐH Công Nghệ Thông Tin – ĐHQG TP. HCM, đặc biệt là thầy
cô bộ môn Khoa học và Kỹ thuật Thông tin, khoa Mạng máy tính & Truyền Thông đã
trang bị những kiến thức chuyên môn nền tảng vững chắc, tận tình giúp đỡ tôi trong quá
trình làm việc, học tập và nghiên cứu.
Đặc biệt tôi xin gởi lời cảm ơn sâu sắc nhất đến Tiến sĩ Phạm Văn Hậu, người
Thầy đã tận tình giúp đỡ, hướng dẫn cho chúng tôi trong suốt quá trình thực hiện đề tài.
Các anh, chị học viên lớp Cao học Công nghệ thông tin khoá 09, trường Đại học
Công nghệ thông tin đã luôn hỗ trợ, tạo điều kiện và giúp đỡ lẫn nhau trong quá trình
học tập cũng như làm luận văn.
Đồng nghiệp, bạn bè, các bạn sinh viên đã chia sẻ kinh nghiệm, kiến thức quí


báu và chia sẻ công việc giúp chúng tôi có thể làm tốt công việc của mình. Đặc biệt là
tập thể Đoàn Thanh Niên, Hội Sinh viên trường đã hỗ trợ công tác tại đơn vị giúp tôi có
thời gian hoàn thành nội dung của khóa luận.
Vợ tôi, gia đình tôi đã luôn đồng hành, động viên, tạo điều kiện về vật chất cũng
như tinh thần cho chúng tôi học tập và nghiên cứu.
Chúng tôi xin chân thành cảm ơn và kính gởi đến quí thầy cô, anh chị, bạn bè,
gia đình những lời chúc tốt đẹp, thành công trong công việc và cuộc sống.
Tp. Hồ Chí Minh, ngày 29 tháng 12 năm 2017
Tác giả luận văn

Lê Đức Thịnh

1


LỜI CAM ĐOAN
Tôi, Lê Đức Thịnh, xác nhận nội dung trong báo cáo này là dựa trên những tổng
hợp lý thuyết, quá trình nghiên cứu và tìm hiểu thực tế. Mọi thông tin trích dẫn đều
được chú thích và liệt kê rõ ràng thành các tài liệu tham khảo.
Tôi xác nhận đề tài nghiên cứu này là công trình của tôi dưới sự hướng dẫn của
TS. Phạm Văn Hậu và sự giúp đỡ của những người khác đã được ghi nhận trong báo
cáo.
Tác giả luận văn

Lê Đức Thịnh

2


MỤC LỤC

LỜI CẢM ƠN ................................................................................................................. 1
LỜI CAM ĐOAN ........................................................................................................... 2
MỤC LỤC ...................................................................................................................... 3
DANH MỤC KÝ HIỆU VÀ CHỮ VIẾT TẮT .............................................................. 6
DANH MỤC BẢNG ...................................................................................................... 7
DANH MỤC CÁC SƠ ĐỒ ............................................................................................ 8
DANH MỤC HÌNH........................................................................................................ 9
MỞ ĐẦU ...................................................................................................................... 10
CHƯƠNG 1 - TỔNG QUAN ....................................................................................... 16
1.1

Tình hình nghiên cứu trong nước.................................................................... 16

1.2

Tình hình nghiên cứu ở nước ngoài ................................................................ 17

1.3

Kết luận ........................................................................................................... 20

CHƯƠNG 2 – HIỂU VỀ KIẾN TRÚC, MÃ NGUỒN ANDROID (AOSP) .............. 21
2.1

Kiến trúc Android ........................................................................................... 21

2.2

Bảo mật Android ............................................................................................. 24


2.3

Bảo mật kernel ................................................................................................ 26

2.4

Các lời gọi hệ thống (System calls) ................................................................ 26

2.5

Tương tác với mã nguồn Android (AOSP) ..................................................... 27

2.6

Hiểu về cấu trúc cơ bản mã nguồn Android ................................................... 31

2.7

Hiểu về cấu trúc cơ bản kernel Android ......................................................... 38

2.8

Kết luận ........................................................................................................... 43

CHƯƠNG 3 – CÁC PHƯƠNG PHÁP SO SÁNH MÃ NGUỒN ............................... 44
3.1

Các công cụ thương mại ................................................................................. 44

3



Công

cụ

Code

Compare

-

File

and

Folder

Merge

Tool:

................................................................. 44
Công cụ Beyond Compare: .............. 47
3.2

Các công cụ mã nguồn mở, miễn phí.............................................................. 50
GNU Diffutils: ......................... 50
KDiff3: ...................................................... 52


3.3

Kết luận ........................................................................................................... 57

CHƯƠNG 4 – CÁC KỊCH BẢN CHỈNH SỬA MÃ NGUỒN AOSP CHO VIỆC THỬ
NGHIỆM PHƯƠNG PHÁP ĐÁNH GIÁ .................................................................... 58
4.1

Tổng quan ....................................................................................................... 58

4.2

Chỉnh sửa trong Activity ................................................................................. 59
Kịch bản 1: chỉnh sửa trong Activity lấy IMEI điện thoại gởi qua SMS. 61

4.3

Chỉnh sửa trong Services ................................................................................ 62
Kịch bản 2: Lấy thông tin vị trí gởi qua sms từ Services ......................... 64

4.4

Kết luận ........................................................................................................... 65

CHƯƠNG 5 – ĐỀ XUẤT PHƯƠNG PHÁP ĐÁNH GIÁ MÃ NGUỒN ANDROID
DỰA TRÊN PHÂN TÍCH TĨNH ................................................................................. 66
5.1

Tập dữ liệu sử dụng trong phương pháp phân tích tĩnh trong Android. ......... 66


5.2

Hướng tiếp cận và phạm vi ............................................................................. 68

5.3

Phương pháp đề xuất ....................................................................................... 69
Module General ........................................................................................ 71
Module Compare ...................................................................................... 72
5.3.2.1 Thử nghiệm trên Beyond Compare ...................................................... 73
5.3.2.2 Thử nghiệm trên diffutils (thử nghiệm trên linux) ............................... 76
Module Analysis ...................................................................................... 78

5.4

Cài đặt và thử nghiệm ..................................................................................... 82

4


Cài đặt môi trường và thiết lập cấu hình .................................................. 82
Thử nghiệm kịch bản 1 (được trình bài ở 4.2.1) ...................................... 83
Thử nghiệm kịch bản 1 và 2 (được trình bày ở 4.2.1 và 4.3.1)................ 85
5.5

Kết luận ........................................................................................................... 87

CHƯƠNG 6 – KẾT LUẬN, KHUYẾN NGHỊ VÀ HƯỚNG PHÁT TRIỂN ............. 88
6.1


Kết luận ........................................................................................................... 88

6.2

Hướng phát triển ............................................................................................. 89

TÀI LIỆU THAM KHẢO ............................................................................................ 90

5


DANH MỤC KÝ HIỆU VÀ CHỮ VIẾT TẮT
Chữ viết tắt
AOSP
Kernel
SuSi
Source
Sink
System Call
CFG
ICC
IAC

Nội dung chi tiết
Android Open Source Project
Hạt nhân (Android)
Source – Sink
Nơi chương trình đọc dữ liệu
Nơi chương trình gởi dữ liệu đến
Lời gọi hệ thống

Control Flow Graph
Inter-Component Communication
Inter-App Communication

6


DANH MỤC BẢNG
Bảng 1: Thị phần các nền tảng di động đến quý 1/2017 .............................................. 10
Bảng 2: Các thành phần của AOSP .............................................................................. 35
Bảng 3: Bảng chi tiết frameworks/base ........................................................................ 38
Bảng 4: Các thành phần của kernel Android Goldfish 3.18 ......................................... 42
Bảng 5: Bảng tóm tắt các công cụ so sánh mã nguồn .................................................. 57
Bảng 6: Phân nhóm Source Sink [10] .......................................................................... 68

7


DANH MỤC CÁC SƠ ĐỒ
Sơ đồ 1: Android System Services Pattern ................................................................... 63
Sơ đồ 2: Lớp service trong frameworks/base ............................................................... 64
Sơ đồ 3: Sơ đồ tổng quan giải pháp đánh giá mã nguồn Android ................................ 70
Sơ đồ 4: Sơ đồ hoạt động của của module Compare .................................................... 72
Sơ đồ 5: Sơ đồ hoạt động của module Analysis ........................................................... 79
Sơ đồ 6: Sơ đồ kỹ thuật phân tích luồng dữ liệu nhạy cảm .......................................... 81

8


DANH MỤC HÌNH

Hình 1: Phân phối các firmware Android độc hại ........................................................ 19
Hình 2: Kiến trúc Android [23] .................................................................................... 22
Hình 3: Điểm khác biệt giữa Linux truyền thống và Android [25] .............................. 27
Hình 4: Cấu trúc thư mục mã nguồn nguồn AOSP ...................................................... 30
Hình 5: Cấu trúc thư mục kernel Android goldfish-3.18 ............................................. 31
Hình 6: Kiến trúc Android ánh xạ với AOSP [26] ....................................................... 36
Hình 7: Cấu trúc kernel Android Goldfish 3.18 ........................................................... 39
Hình 8: Kết quả so sánh 2 thư mục với công cụ Code Compare (theo thứ tự từ trên
xuống tập tin bị chỉnh sửa, được thêm mới, bị xóa đi) ................................................. 46
Hình 9: Kết quả so sánh 2 file với Code Compare ....................................................... 47
Hình 10: So sánh thư mục với Beyond Compare ......................................................... 48
Hình 11: So sánh tập tin với Beyond Compare ............................................................ 48
Hình 12: Xuất báo cáo so sánh với Beyond Compare.................................................. 49
Hình 13: Hướng dẫn sử dụng công cụ diff ................................................................... 50
Hình 14: Kết quả so sánh tập tin với công cụ diff ........................................................ 52
Hình 15: Giao diện công cụ Kdiff3 .............................................................................. 53
Hình 16: Kết quả tổng quát so sánh 2 mã nguồn trong thư mục frameworks với Kdiff3
...................................................................................................................................... 54
Hình 17: Kết quả chi tiết so sánh 2 mã nguồn trong thư mục frameworks với Kdiff3 55
Hình 18: Các thành phần chính của ứng dụng Android ............................................... 59
Hình 19: Vòng đời của một Activity ............................................................................ 60
Hình 20: Cơ chế hoạt động của SuSi ............................................................................ 67
Hình 21: So sánh 2 thư mục trên Beyond Compare ..................................................... 73
Hình 22: Tóm tắt thông tin báo cáo so sánh trên Beyond Compare ............................ 74
Hình 23: Xuất báo cáo trên Beyond Compare.............................................................. 75
Hình 24: Định dạng báo cáo kết quả so sánh của Beyond Compare............................ 76
Hình 25: Script thực thi diffutils................................................................................... 76
Hình 26: Thời gian thực hiện so sánh của công cụ diffutils ......................................... 77
Hình 27: Định dạng báo cáo của công cụ diffutils ....................................................... 77
Hình 28: Cấu trúc công cụ đánh giá được đề xuất ....................................................... 82


9


MỞ ĐẦU
Ngày nay, với sự phát triển của khoa học công nghệ và nhu cầu công việc của
con người ngày càng mang tính di động cao, chính vì thế các thiết bị di động (điện thoại
thông minh, máy tính bảng, …) trở thành một phần không thể thiếu trong cuộc sống của
chúng ta. Xu thế này đã được khẳng định bằng việc thị phần của máy tính cá nhân có
xu hướng giảm và thị phần của thiết bị di động có xu hướng tăng nhanh 1.
Thiết bị di động ngày càng phong phú, đang dạng và có nhiều nền tảng khác
nhau như iOS, Android, Windows Mobile, FireFox OS, BlackBerry OS, … Trong số
này nổi bật lên đó là nền tảng Android do Google phát triển, đây là một nền tảng mã
nguồn mở, được cộng đồng hỗ trợ nên phát triển rất nhanh và hiện đang đứng đầu thế
giới về số lượng thiết bị đang chạy hệ điều hành này, xem bảng 1.
Period

Android

iOS

Windows
Phone

Others

2016Q1

83.4%


15.4%

0.8%

0.4%

2016Q2

87.6%

11.7%

0.4%

0.3%

2016Q3

86.8%

12.5%

0.3%

0.4%

2016Q4

81.4%


18.2%

0.2%

0.2%

2017Q1

85.0%

14.7%

0.1%

0.1%

Bảng 1: Thị phần các nền tảng di động đến quý 1/2017
Nguồn: IDC, tháng 5/2017 2
Số lượng ứng dụng được phát triển cho nền tảng này ngày càng nhiều, mỗi ngày
có hàng ngàn ứng dụng mới được phát triển, nhưng hệ thống kiểm tra tính an toàn ứng
dụng của Google Play chưa được chặt chẽ dẫn đến việc ngày nay đây là nền tảng có độ
rủi ro về an toàn thông tin cao nhất trong các nền tảng di động, theo thống kê của
Kaspersky thì trong năm 2016 3, tấn công liên quan đến Android đứng vị trí thứ 2 (chiếm
21%) sau Browsers (chiếm 50%). Các nguy cơ ảnh hưởng đến tính an toàn thông tin

1
2

, truy cập tháng 10/2017
/>

3

/>cs_ENG.pdf (trang 5)

10


của người dùng thông qua việc truy xuất dữ liệu cá nhân quan trọng, nhạy cảm, ảnh
hưởng đến tính riêng tư của người dùng như thông tin vị trí, danh bạ, thông tin thiết bị
đang sử dụng, truy cập Internet, truy xuất bộ nhớ, gởi tin nhắn (sms), tự động tải các
thành phần nguy hiểm từ internet, tạo các backdoor, trojan, … và tự động gởi những
thông tin này ra bên ngoài mà không được sự đồng ý của người dùng hoặc người dùng
không hay biết, cao cấp hơn, các ứng dụng có thể “thông đồng” [1] với nhau để đánh
cắp các thông tin nhạy cảm, riêng tư của người dùng.
Các sản phẩm công nghệ, công trình để hạn chế mã độc hiện tại [2-6] đa phần
chỉ tập trung phân tích ở mức đơn ứng dụng hoặc đa ứng dụng mà chưa đề cập đến phân
tích mã nguồn của hệ điều hành Android.
Chẳng hạn, công trình CHEX [2] phát hiện các thành phần đánh cắp, rò rỉ thông
tin trong ứng dụng Android bằng cách theo dõi các dòng dữ liệu được đánh dấu giữa
nguồn dữ liệu nhạy cảm với các Interface có khả năng truy cập và gởi thông tin ra bên
ngoài; FlowDroid [3] là một công cụ phát hiện rò rỉ thông tin dự trên dòng dữ liệu được
đánh dấu trước đó với tỉ lệ phát hiện sai sót thấp, tuy nhiên, công cụ này chỉ có khả năng
phân tích độc lập một ứng dụng. Epicc [4] hỗ trợ phân tích vấn đề Inter-Component
Communication (ICC) nhưng ICC này là trong cùng một ứng dụng do nó chưa kiểm
soát được các URI của các ứng dụng; công cụ Amandroid [5] phát hiện được rò rỉ thông
tin nhạy cảm bằng cách theo vết các luồng điều khiển và dòng ICC trong một ứng dụng
hoặc cơ chế Inter-App Communication (IAC) giữa các ứng dụng khác nhau. LeakMiner
[6] sử dụng phương pháp “taint” tĩnh và áp dụng thuật toán xây dựng biểu đồ lời gọi
(call graph) để phân tích ứng dụng, …
Riêng công trình [7] thì đã có đề cập đến phân tích những bản ROM Android tùy

biến, các tác giả phân tích 250 bản ROM trôi nổi trên thị trường và rút ra được kết luận
có đến 99.6% có chứa lỗ hỏng giúp cho việc leo thang đặc quyền Java, 7.8% chứa mã
độc theo dõi người dùng. Bên cạnh đó, nghiên cứu [8] đã bước đầu tiếp xúc và đánh giá
trên mã nguồn ban đầu của kernel Android, nghiên cứu này tập trung chủ yếu vào phát
hiện các lỗi kỹ thuật lập trình trên mã nguồn kernel (C/C++) như memory leaks, out of
bounds arrays, and null pointer dereferences, … Nhưng những công trình dạng này hiện

11


tại còn rất ít. Đây là điều rất đáng lo ngại. Chính vì vậy, việc đánh giá an toàn mã nguồn
hệ điều hành Android là cấp thiết.
Hiện nay, có một vài phương pháp đánh giá tính bảo mật, an toàn của mã nguồn
hệ điều hành Android, cũng tương tự như đánh giá bảo mật ứng dụng Android, điển
hình là phương pháp phân tích tĩnh và phương pháp phân tích động. Phương pháp phân
tích tĩnh là phương pháp phân tích dựa vào những công cụ phân tích mã nguồn để quét
qua mã nguồn, tìm kiếm những đoạn mã có tính chất độc hại. Phương pháp này không
đòi hỏi phải thực thi mã lệnh mà chỉ đọc và phân tích mã ban đầu. Phân tích động dựa
vào việc thực thi các thành phần Android trong một môi trường được kiểm soát và theo
dõi (Sandbox), từ đó phát hiện ra những hành vi có tính chất độc hại, dựa trên những
hành vi này truy ngược lại đoạn mã tương ứng, từ đó tiếp tục phân tích mở rộng. Ngoài
ra, để khắc phục các yếu điểm của từng phương pháp trên, hiện nay nhiều công trình sử
dụng kết hợp cả hai phương pháp phân tích tĩnh và phân tích động, được gọi là phương
pháp tổng hợp.
Với những nhận định trên, đề tài này sẽ tiếp cận và đề xuất phương pháp đánh
giá an toàn thông tin của mã nguồn hệ điều hành Android tùy biến dựa trên phương
pháp phân tích tĩnh. Chúng tôi sử dụng phương pháp phân tích tĩnh bởi vì đối tượng
nghiên cứu của chúng tôi xác định là đánh giá mã nguồn thuần túy của hệ điều hành
Android (dạng text) mà không tiến hành thực thi các mã nguồn này, do đó, hướng tiếp
cận dùng phương pháp phân tích tĩnh là phù hợp nhất. Ban đầu, đề tài sẽ phân tích cấu

trúc của mã nguồn Hệ điều hành Android để xác định các thành phần quan trọng của
mã nguồn nhằm lựa chọn những điểm nhạy cảm nhất để đánh giá mà không tiến hành
vét cạn toàn bộ mã nguồn. Tiếp theo là chúng tôi so sánh hai (hay nhiều) mã nguồn hệ
điều hành Android tùy biến, sử dụng các công cụ phân tích để tìm ra các đoạn mã khác
biệt mà nghi ngờ chúng có tính chất độc hại so với tính chất vốn có trong mã nguồn do
chính Google phân phối (mã nguồn Android gốc) để giới hạn dữ liệu đầu vào cho việc
phân tích. Sau đó, sẽ tiến hành phân tích luồng dữ liệu trên các đoạn mã khác biệt được
tìm thấy trong mã nguồn để đánh giá xem có xảy ra rò rỉ thông tin hay không. Mục tiêu
của đề tài là đề xuất một phương pháp ban đầu đánh giá an toàn thông tin của mã nguồn

12


Android tùy biến để đưa ra những khuyến cáo cho người dùng trước khi sử dụng mã
nguồn đó.
Tính khoa học và tính mới của đề tài:
Mã nguồn hệ điều hành Android được phân phối rộng rãi trên Internet và từ nhiều
nguồn khác nhau, có những cá nhân, tổ chức thực hiện việc tùy biến sẵn cho một số
dòng thiết bị phổ biến và chia sẻ cho cộng đồng. Từ đó, người dùng có thể tải về sử
dụng cho thiết bị của mình mà không biết mã nguồn đó có chứa những gì, có tiềm ẩn
nguy cơ an toàn thông tin người dùng hay không. Các công trình đánh giá an toàn của
các mã nguồn, ROM Android còn rất ít, điển hình có công trình [7] phân tích trên các
bản ROM đã được build sẵn, công trình [8] phân tích mã nguồn ban đầu của kernel,
công trình [9] phân tích trên mã nhị phân của kernel, công trình [10] nghiên cứu trên
frameworks của ROM ở mã Smali. Do đó, việc đề xuất ra một phương pháp tổng quan
đánh giá và khuyến cáo người dùng về nguy cơ bảo mật trên mã nguồn ban đầu (text)
của Android dựa trên những nghiên cứu, công cụ đã được công bố làm nền tảng là rất
cần thiết.
Đề tài này sẽ tập trung vào việc nghiên cứu và đề xuất một phương pháp đánh
giá an toàn hệ điều hành Android tùy biến bằng phương pháp phân tích tĩnh, theo hướng

so sánh những khác biệt trong mã nguồn để lọc dữ liệu đầu vào và tiến hành phân tích
luồng thông tin trên những mã nguồn khác biệt đó. Với cách tiếp cận này đến thời điểm
hiện tại chưa thấy có công trình được công bố.
Mục tiêu, đối tượng và phạm vi nghiên cứu:
Mục tiêu: nghiên cứu các bộ công cụ hiện có trong quá trình phân tích mã nguồn
phần mềm, mã nguồn hệ điều hành, từ đó đề xuất một phương pháp tổng quan bước đầu
để đánh giá an toàn của mã nguồn hệ điều hành Android tùy biến, trong đó chú trọng
đến việc thất thoát thông tin.
Đối tượng: mã nguồn hệ điều hành Android, bảo mật trên Android, các công cụ
phát hiện dựa trên phương pháp phân tích tĩnh, các phương pháp so sánh mã nguồn.
Phạm vi:
-

An toàn thông tin là một khái niệm rộng, theo Luật an toàn thông tin mạng của

13


Việt Nam, an toàn thông tin là sự bảo vệ thông tin, hệ thống thông tin trên mạng tránh
bị truy nhập, sử dụng, tiết lộ, gián đoạn, sửa đổi hoặc phá hoại trái phép nhằm bảo đảm
tính nguyên vẹn, tính bảo mật và tính khả dụng của thông tin. Hướng tiếp cận của đề tài
này, tính an toàn thông tin bị vi phạm khi có thông tin người dùng bị rò rỉ ra bên ngoài
mà không được sự cho phép của người dùng. Cụ thể, hành vi đọc thông tin từ 1 điểm
(source) và thông tin này được gởi đến 1 điểm để gởi ra bên ngoài (sink). Hay nói cách
khác, nếu tồn tại luồng thông tin đi từ source đến sink thì mã nguồn mất an toàn thông
tin. 4
-

Đối với việc phân tích mã nguồn cả hệ điều hành Android là một đề tài rất rộng,


trong phạm vi nghiên cứu này tập trung so sánh hai mã nguồn Android mà ta đã biết
trước kết quả để đánh giá kết quả của phương pháp đề xuất. Giả sử rằng, mã nguồn hệ
điều hành Android do Google trực tiếp phân phối đã đạt chuẩn về an toàn thông tin, dựa
vào đó đề tài có sự so sánh với mã nguồn khác và đưa ra các đánh giá. Chúng tôi sẽ tải
bộ mã nguồn hệ điều hành Android được bản mã nguồn thứ nhất, chỉnh sửa mã nguồn
trên, thêm vào một vài lỗ hỏng bảo mật để được mã nguồn thứ hai. Áp dụng và đánh
giá phương pháp đề xuất ở những điểm cốt lõi, những khác biệt trên mã nguồn này.
-

Trước mắt, chúng tôi đề xuất phương pháp áp dụng trên ngôn ngữ Java và các

đoạn mã độc nằm trên cùng một tập tin mã nguồn.
Bước mở rộng của đề tài có thể được tiếp tục phát triển hơn dành cho nghiên cứu
trong tương lai là đánh giá an toàn trên toàn bộ ngôn ngữ, đánh giá các đoạn mã nằm ở
nhiều tập tin trong mã nguồn hệ điều hành Android, hướng đến đánh giá một mã nguồn
bất kỳ so với mã nguồn Android của Google phân phối, cao hơn nữa là đánh giá một
mã nguồn Android bất kỳ có an toàn để sử dụng hay không.
Cấu trúc luận văn
Luận văn được cấu thành bởi 6 chương:
Chương 1: trình bày tổng quan về tình hình nghiên cứu trong và ngoài nước liên
quan đến chủ đề mà đề tài đang đề cập đến để tạo cơ sở nền tảng ban đầu, từ đó nêu ra

4

/>
14


các phương án thực hiện một cách khái quát làm tiền đề cho quá trình nghiên cứu tiếp
theo.

Chương 2: đây là bước đầu tiên trong giải pháp dự định thực hiện để đánh giá những
điểm quan trọng trong bộ mã nguồn Android (không vét cạn toàn bộ mã nguồn), ở đây
sẽ trình bày cơ bản về kiến trúc Android và mã nguồn Android, các cơ chế bảo mật
được sử dụng trong Android, bảo mật mã nguồn AOSP, cách tương tác với mã nguồn
AOSP, mã nguồn kernel Android, phân tích cấu trúc thư mục và mô tả chức năng các
thành phần trong mã nguồn Android do Google cung cấp.
Chương 3: sẽ nói việc tìm hiểu, nghiên cứu các công cụ so sánh mã nguồn để tiến
hành tìm ra sự khác biệt giữa hai phiên bản mã nguồn hệ điều hành Android. Chương
này sẽ trình bày các tính năng của những công cụ tiêu biểu về so sánh mã nguồn, cách
thức cài đặt và sử dụng. Đánh giá điểm mạnh, điểu yếu của từng công cụ cũng được
thảo luận tại đây. Kết quả ở chương này sẽ góp phần rất quan trọng giúp giới hạn dữ
liệu đầu vào cho các bước tiếp theo của phương pháp.
Chương 4: chương này trình bày một số kịch bản chỉnh sửa mã nguồn căn cứ vào
việc hiểu cấu trúc mã nguồn được phân tích ở chương 2 để tạo ra mã nguồn AOSP tùy
biến làm dữ liệu kiểm thử cho phương pháp đánh giá đề xuất.
Chương 5: sẽ dựa trên kết quả nghiên cứu từ các chương trước đặc biệt là chương 3
và chương 4 để giới hạn phạm vi của dữ liệu đầu vào cho phương pháp đánh giá được
đề xuất ngay sau đây. Mã nguồn của AOSP rất lớn nếu không được giới hạn sẽ ảnh
hưởng rất lớn đến hiệu suất đánh giá dẫn đến phương pháp đề xuất không hiệu quả. Nội
dung của chương nêu chi tiết các giai đoạn trong phương pháp đánh giá mã nguồn được
đề xuất với dữ liệu đầu vào là mã nguồn AOSP do Google cung cấp và mã nguồn tùy
biến (thêm/chỉnh sửa các đoạn mã, các hàm dẫn đến khả năng rò rỉ thông tin người
dùng) từ mã nguồn của Google trên, đảm bảo kết quả theo mục tiêu đặt ra trong phạm
vi của luận văn.
Chương 6: chương này sẽ đưa ra kết luận về phương pháp đề xuất, thảo luận hướng
phát triển trong tương lai.

15



CHƯƠNG 1 - TỔNG QUAN
Chương này tập trung trình bày tổng quan về tình hình nghiên cứu trong và ngoài
nước liên quan đến chủ đề mà đề tài đang đề cập đến để tạo cơ sở nền tảng ban đầu, từ
đó nêu ra các phương án thực hiện một cách khái quát làm tiền đề cho quá trình nghiên
cứu tiếp theo.
1.1 Tình hình nghiên cứu trong nước
Ở Việt Nam, hiện tại, chưa có công trình nghiên cứu nào về phân tích, đánh giá độ
an toàn mã nguồn hệ điều hành Android tùy biến, các đề tài đã được thực hiện cũng chỉ
phân tích mã độc trên các ứng dụng trên Android, chưa phân tích cả hệ điều hành. Chẳng
hạn, nhóm nghiên cứu của tiến sĩ Phạm Văn Hậu, Lê Thanh Trúc, đại học Quốc tế có
đề tài “Detecting privilege escalation attacks on android device” [11] nghiên cứu về
phương pháp phân tích tĩnh trong phát hiện loại tấn công dựa vào các đặc quyền được
cấp phát cho các ứng dụng Android. Công trình của tiến sĩ Phạm Văn Hậu, Nguyễn
Quốc Kiện, Trần Quang Huy, Đại học CNTT, ĐHQG Tp. HCM, với đề tài “Security
assessment of android application basing on CFG analysis” [12], nghiên cứu phương
pháp đánh giá tính bảo mật của ứng dụng Android dựa trên phân tích CFG (Control
Flow Graph). Các tác giả đã đưa ra một quy trình dựa trên các công cụ trích xuất và
phân tích nhằm phát hiện ra nguy cơ sử dụng các hàm “nhạy cảm” để đánh cắp dữ liệu
của người dùng trong một ứng dụng Android.
Về áp dụng phương pháp so sánh sự khác biệt và đánh giá mức độ an toàn dựa trên
những điểm khác biệt, đề tài “Phát triển công cụ tự động so sánh và đánh giá an toàn
thông tin android application framework” [10], nhóm tác giả đã tách riêng phần
Android Application Framework từ file nén của 02 bản ROM để so sự khác biệt giữa
chúng, từ đó phân tích luồng thông tin trên các hàm khác biệt đó và đưa ra đánh giá về
an toàn thông tin. Nhóm tác giả cũng giả định rằng bản ROM do Google cung cấp là
đạt chuẩn về an toàn thông tin, từ đó tác giả chỉnh sửa bản ROM đó tạo ra phiên bản
không an toàn và đây là 02 dữ liệu đầu vào của công cụ, kết quả của công trình đã tạo
ra được một công cụ tự động thực hiện các công việc phân tích và thể hiện báo cáo khá
trực quan. Công trình “Nghiên cứu, đề xuất phương pháp đánh giá tính bảo mật của
kernel android dựa trên phương pháp phân tích tĩnh” [9] đã tập trung đánh giá Kernel


16


Android ở dạng mã nhị phân. Công trình cũng đã sử dụng dữ liệu đầu vào gồm bản
Kernel do Google phân phối được xem là đánh tin cậy về an toàn thông tin, tác giả chỉnh
sửa bản mã nguồn này để tạo ra một bản Kernel được xem là không an toàn. Kết quả
tác giả đã đề xuất được một phương pháp tổng hợp với thời gian đánh giá nhanh hơn
các phương pháp hiện tại và kết quả phân tích rất khả quan phát hiện được những điểm
có nguy cơ mất an toàn trong bản kernel Android đã được chỉnh sửa.
Kết hợp phương pháp phân tích tĩnh với phân tích động, công trình “Nghiên cứu cơ
chế phát hiện rò rĩ thông tin bằng phương pháp kết hợp phân tích tĩnh và động trên
Android” [13] đã dựa trên 2 công cụ chính DidFail [14] và SmartDroid [15] xây dựng
lại và kết hợp 2 công cụ này để tạo ra một hệ thống vừa có khả năng phân tích chính
xác luồng dữ liệu rò rỉ (điều mà DidFail chưa làm được), vừa có khả năng phân tích trên
nhiều ứng dụng (điều mà SmartDroid chưa làm được). Kết quả thực nghiệm cho thấy
công cụ này có tính năng vượt trội hơn ở khả năng xác định chính xác luồng dữ liệu rò
rỉ thông qua phương pháp xây dựng Activity Call Graph - Function Call Graph (ACGFCG) và khả năng phân tích liên ứng dụng. Tuy nhiên, công trình này đối tượng nghiên
cứu là lớp Ứng dụng (Application) trong kiến trúc của Android.
1.2 Tình hình nghiên cứu ở nước ngoài
Trên thế giới, chưa có nhiều công trình thực hiện việc đánh giá tính an toàn, bảo mật
của mã nguồn hệ điều hành Android tùy biến. Chủ đề này còn khá mới mẻ, rất nhiều
công trình nghiên cứu về tính an toàn, bảo mật trên Android nhưng hầu hết đề tập trung
vào đơn ứng dụng, đa ứng dụng. Tham khảo các chủ đề và những công trình nghiên cứu
về bảo mật trên thiết bị di động tại [16] để rõ hơn nhận định trên.
Với nghiên cứu [17] đã trình bày tổng quan các kỹ thuật trong phương pháp phân
tích tĩnh trong lĩnh vực an toàn/bảo mật phần mềm như Model Checking, Control-flow
analysis, Data-flow analysis, Symbolic analysis, Information-flow analysis. Các công
cụ phân tích tĩnh, trong đó có ba công cụ phân tích có hướng tiếp cận xây dựng cấu trúc
hàm và luồng dữ liệu như SPlint hướng đến việc xây dựng cây cấu trúc trừu tượng Abstract Syntax Tree (AST); GraphMath hướng đến việc tạo ra System Dependence

Graph (SDG) từ mã nguồn, SDG là một mở rộng của Program Dependence Graph
(PDG) và cả hai sử dụng control-flow and data-flow analysis; Fortify sử dụng bốn kỹ

17


thuật phát hiện Semantic, Data Flow, Control Flow, Configuration and Structural. Các
công trình trên cho thấy sự đa dạng về phương pháp và có tính khả thi trong việc phân
tích luồng dữ liệu trên mã nguồn.
Android Lint 5 là một công cụ phân tích code tĩnh được Google tùy biến riêng trên
nền tảng Lint để phân tích các source code của các project Android với chức năng phát
hiện và tối ưu các lỗi tiềm ẩn bên trong source code của project để từ đó cải thiện về
tính chính xác, độ bảo mật, hiệu năng, khả năng tái sử dụng, cũng như đơn giản hóa
source code giúp cho người khác dễ dàng hơn trong việc đọc hiểu source code. Công
cụ này được tích hợp vào Android Studio, vào menu Analyze  Inspect Code. Công
cụ này hướng đến chuẩn hóa mã nguồn, tránh các lỗi lập trình hơn là phân tích an toàn
thông tin người dùng.
Ngoài ra, việc phân tích mã nguồn tĩnh các ngôn ngữ lập trình, hiện nay trên thế giới
đã có nhiều công cụ hỗ trợ, có thể tham khảo danh sách tại [18]. Mã nguồn Android bao
gồm nhiều ngôn ngữ như Java, C, C++. Trong giai đoạn đầu, đề tài sẽ tập trung vào các
công cụ phân tích ngôn ngữ Java, phân tích đa ngôn ngữ sẽ được thực hiện trong phần
mở rộng.
Công trình [8] đã sử dụng hai công cụ tại [18] là CppCheck và Goanna để phân tích
toàn bộ mã nguồn kernel Android Goldfish với khoảng 740k dòng code C/C++ và hơn
10.000 tập tin. Công trình đã chỉ ra những lỗi lập trình để từ đó đánh giá được mức độ
ảnh hưởng đến tính an toàn, bảo mật của kernel. Các tác giả so sánh hai công cụ dựa
trên các tiêu chuẩn như dễ cài đặt và tương tác, thời gian chạy, phân tích các tắc nghẽn,
dễ đánh giá kết quả và chất lượng của kết quả. Công trình này đã bước đầu tiếp xúc và
đánh giá trên mã nguồn ban đầu (text) của kernel Android.
Công trình nghiên cứu phân tích các bản ROM Android đã được biên dịch và được

phân phối rộng rãi trên Internet, DroidRay [7]. DroidRay sử dụng cả phương pháp phân
tích tĩnh và phân tích động để phân tích cả tầng ứng dụng và tầng hệ thống của bản
ROM. Công trình đánh giá một firmware ở hai mức đó là mức ứng dụng được cài đặt
sẵn và mức các thông số hệ thống. Tác giả đã sử dụng 250 bản ROM khác nhau để phân
5

/>
18


tích hệ thống và các ứng dụng được cài trước (pre-installed applications) (thường là bên
thứ 3). Công trình tập trung phân tích các chữ ký ứng dụng, bảo mật mạng, và leo thang
đặc quyền trên bản ROM. Tuy nhiên, quá trình đánh giá còn khá đơn giản như dựa trên
các thông tin medtadata để kiểm tra các chữ ký (signature), kiểm tra các tập tin elf
(Executable and Linkable Format) để kiểm tra các CFG. Các phương pháp đánh giá chỉ
mới tập trung ở các lớp bên ngoài, chưa thực sự đánh giá tính bảo mật của kernel
Android. Ngoài ra, qua việc phân tích, các tác giả đã đưa ra nhận định đáng chú ý rằng
các nhà viết phần mềm độc hại trả tiền cho nhà sản xuất đưa phần mềm đó vào thiết bị
để hạ giá thành của sản phẩm, đây là một khuyến cáo đáng quan tâm đối với những
người dùng sản phẩm có giá thành rẻ hơn so với những thiết bị có cùng cấu hình, thể
hiện qua hình 1 [7]:

Hình 1: Phân phối các firmware Android độc hại
Đối với cách tiếp cận của đề tài là so sánh mã nguồn, công trình so sánh mã nguồn
của ứng dụng [19] đã đưa ra cách so sánh sự giống nhau giữa các ứng dụng phần mềm.
Đóng góp chính của công trình này là xây dựng một framework mở rộng phù hợp và
một thuật toán mới để tính toán sự tương đồng của các ứng dụng Java sử dụng các khái
niệm lớp ngữ nghĩa (semantic layers) tương ứng với các gói (packages) và phân cấp lớp
(class hierarchies).
Bên cạnh đó, các công cụ (có phí, miễn phí) so sánh mã nguồn (code) hiện nay hỗ

trợ mạnh mẽ việc so sánh từ dạng text thuần túy đến so sánh cả thư mục, cấu trúc thư
mục, so sánh cấu trúc mã nguồn, … để cho thấy sự giống nhau/khác nhau của chúng và
cho kết quả một cách trực quan. Chúng ta có thể tham khảo một số công cụ và tính năng

19


của chúng tại [20, 21], nổi bật như Code Compare, Compare++, Beyond Compare,
WinMerge, diffutils, …
Năm 2015, tại hội nghị SANER lần thứ 22, nhóm các tác giả Sreeja Nair và các cộng
sự đã đề xuất một công cụ “A static code analysis tool for control system software”
[22]. Nhóm tác giả đã sử dụng phương pháp phân tích mã nguồn tĩnh để phát hiện những
mã nguồn có thể xảy ra lỗi run-time trong quá trình compile. Để phát hiện ra những lỗi
run-time này, công cụ phân tích các cây cấu trúc trừu tượng (AST) và các CFG của ứng
dụng. Một thuật toán tổng hợp được đưa ra dựa trên diễn giải trừu tượng, kỹ thuật phân
tích luồng dữ liệu truyền thống được sử dụng để kiểm tra các CFG.
1.3 Kết luận
Chương đã trình bày khái quát về các công trình nghiên cứu liên quan đến hướng
tiếp cận của đề tài. Các công trình tập trung phân tích ở mức ứng dụng và liên ứng dụng
(apk), phân tích ROM ở định dạng binary, smali code, các công cụ phân tích mã nguồn
đơn lẻ chưa áp dụng vào phân tích một bộ mã nguồn thuần túy (dạng text) một cách
hoàn chỉnh. Hầu hết các công trình trên khi thực hiện bài toán thì dữ liệu đầu vào thường
là các mã binary, smali, Jimple vì dịch ngược từ các tập tin nén (.apk, .jar, .tif, …) đã
được build, không phải là mã nguồn thuần túy ban đầu (Java, C, C++). Bởi vì, khi dịch
ngược trở về mã nguồn ban đầu (Java, C, C++) sẽ cho kết quả không chuẩn.
Dựa trên các nghiên cứu này, chúng tôi sẽ khảo sát chi tiết một số công trình, công
cụ phân tích, công cụ so sánh, dựa trên kết quả đó sẽ đề xuất một phương pháp đánh giá
an toàn thông tin cho mã nguồn Android. Với các kết quả đã trình bày ở trên cho thấy
phương pháp đề xuất với các bước trình bày ở cuối phần mở đầu có tính khả thi để thực
hiện.


20


CHƯƠNG 2 – HIỂU VỀ KIẾN TRÚC, MÃ NGUỒN ANDROID (AOSP)
Đây là bước đầu tiên trong giải pháp đề xuất để đánh giá những điểm quan trọng
trong bộ mã nguồn Android, ở đây sẽ trình bày cơ bản về kiến trúc Android và mã
nguồn Android, các cơ chế bảo mật được sử dụng trong Android, bảo mật mã nguồn
AOSP, cách tương tác với mã nguồn AOSP, mã nguồn kernel Android, phân tích cấu
trúc thư mục và mô tả chức năng các thành phần trong mã nguồn Android do Google
cung cấp.
2.1 Kiến trúc Android
Android 6 là dự án phần mềm mã nguồn mở (hay còn được gọi là Android Open
Source Project – AOSP) được tạo ra cho một số lượng lớn các thiết bị có thiết kế cấu
hình khác nhau. Mục đích chính của Android là tạo ra một nền tảng phần mềm mã
nguồn mở cho các nhà cung cấp dịch vụ, các nhà sản xuất OEM và các nhà phát triển
làm cho những ý tưởng sáng tạo của họ thành hiện thực và để giới thiệu một sản phẩm
thành công trên thực tế nhằm cải thiện trải nghiệm di động cho người dùng.

6

/>
21


Hình 2: Kiến trúc Android [23]
Theo [24] chúng ta có thể chia hệ thống ra thành các lớp chính sau đây:
Linux kernel:
Android dựa trên Linux kernel nhưng nó không phải là hệ thống Linuxbase Desktop, nó không phải Ubuntu. Tuy nhiên, các nhà thiết kế và các nhà
phát triển dựa trên Linux kernel bởi vì nó là mã nguồn mở, nó được thử

nghiệm rộng rãi trên toàn thế giới và phù hợp với yêu cầu phần cứng của bất
kỳ loại thiết bị phần cứng nào.
Các đóng góp của Google cho Linux kernel tập trung ở sửa lỗi, thêm phần
cứng mới, cải thiện quản lý năng lượng, cải thiện báo lỗi, cải thiện hiệu năng,
cải thiện bảo mật.
HAL: HAL cho phép hệ thống tương tác với phần cứng thông qua một giao
diện giao tiếp bên trong cụ thể. Với cách tiếp cận này, hệ thống Android
không biết và cũng không cần biết phần cứng được truy cập hay được quản
lý như thế nào. HAL như là một lớp trung gian giữa phần cứng và hệ thống,
nó được phát triển bằng C/C++ thuần và các share libraries. Không có sự hạn

22


chế nào từ Google về cách chúng ta cần implement HAL và các trình điều
khiển thiết bị (device drivers) của chúng ta.
Libraries: là một tập các thư viện được tạo dành riêng để làm việc trên
Android, cho phép và làm việc với các thành hệ thống và việc phát triển ứng
dụng. Quan trọng nhất là các thư viện
o SQLite: là một việc thực thi SQL rút gọn (tiny SQL implementation) được
nhúng vào hệ thống và nó cung cấp các chuẩn để truy cập vào dữ liệu
công khai được tạo bởi content providers hoặc cơ sở dữ liệu SQL được
tạo bởi người dùng.
o SSL: cung cấp môi trường bảo mật chuẩn cho giao tiếp mạng.
o OpenGL: các thư viện OpenGL được liên kết giữa Java (C/C++) và
OpenGL/ES 3D graphics rendering API.
o SGL: cung cấp cách truy xuất 2D rendering engine
o Media framework: cung cấp các codecs for rendering, recording, và
playback cho các định dạng đa phương tiện phổ biến nhất.
o Webkit: là một HTML rendering engine phổ biến.

o Libc: là một BSD-derived implementation của thư viện C chuẩn, được
chỉnh sửa riêng để thực thi tốt nhất trên các thiết bị nhúng trên nền tảng
Linux.
Application framework: đây là cốt lõi của hệ sinh thái phần mềm Android.
Nó cung cấp rất nhiều các manager thuận tiện cho các tác vụ phổ biến nhất
của các nhà phát triển Android và cho chính hệ thống Android. Các thành
phần quan trọng nhất trong lớp này là:
o Activity manager: cung cấp việc điều hướng và quản lý vòng đời các
Activity Android.
o Resource manager: cung cấp việc truy cập đến các tài nguyên không phải
mã code chứa trong ứng dụng như graphics, localized string, styles, và
colors.
o Location manager: cung cấp thông tin chính xác nhất về thông tin vị trí,
sử dụng dữ liệu được thu thập từ cảm biến GPS, tháp di động và mạng
không dây lân cận.

23


o Notification manager: thông báo các cảnh báo trên thanh trạng thái.
o Content providers: cung cấp cách tiếp cận phổ biến để chia sẻ dữ liệu giữa
các ứng dụng khác nhau.
o Views and widgets: bao gồm phần lõi giao diện người dùng (UI core) của
Android.
Binder IPC: Binder Inter-Process Communication (IPC) là một lớp ẩn, nó tạo
kênh giao tiếp trong suốt giữa Android API bậc cao, có thể truy xuất thông
qua Android SDK và hệ thống Android thực.
Applications: tất cả các ứng dụng được tạo bởi bên thứ ba, như các nhà sản
xuất smartphone, các lập trình viên Android, …
2.2 Bảo mật Android 7

Nền tảng Android là một nền tảng di động hiện đại được thiết kế thực sự mở. Do
đó, nó đòi hỏi một kiến trúc bảo mật mạnh mẽ và các chương trình bảo mật nghiêm
ngặt. Android được thiết kế bảo mật nhiều lớp (multi-layered security) tạo nên sự linh
hoạt cần thiết cho một nền tảng mở.
Hình 2 tóm tắt các thành phần bảo mật và sự xem xét các mức độ khác nhau của
kiến trúc phần mềm Android. Với sự ngoại lệ một số lượng nhỏ mã nguồn hệ điều hành
Android chạy với quyền root, tất cả những mã nguồn phía trên Linux Kernel (theo hình
2) bị giới hạn bởi ứng dụng SandBox.
SandBox: mọi ứng dụng Android đều chạy trong một chế độ gọi là Application
Sandbox. Cũng giống như nằm trong một chiếc hộp chứa, bất kỳ ứng dụng nào đều
được chứa bên trong một Sandbox ảo để giữ nó tách biệt với bất kỳ thứ nào khác bên
ngoài – một khu vực cô lập trong hệ thống và không được quyền truy cập đến phần còn
lại của tài nguyên hệ thống, trừ khi nó được người dùng trao quyền.
Nền tảng chính của Android được xây dựng thành các khối:


Phần cứng thiết bị (Device Hardware): Android chạy trên một mảng các cấu hình
thiết bị bao gồm smart phones, tablets, and set-top-boxes.

7

/>
24


×