ĐẠ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í
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
Công
cụ
Code
Compare
-
File
and
Folder
Merge
Tool:
https://www.devart.com/codecompare/ ................................................................. 44
Công cụ Beyond Compare: https://www.scootersoftware.com/ .............. 47
3.2
Các công cụ mã nguồn mở, miễn phí.............................................................. 50
GNU Diffutils: https://www.gnu.org/software/diffutils/ ......................... 50
KDiff3: http://kdiff3.sourceforge.net/ ...................................................... 52
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
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
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%
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
http://gs.statcounter.com/platform-market-share/desktop-mobile-tablet , truy cập tháng 10/2017
http://www.idc.com/prodserv/smartphone-os-market-share.jsp
(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
Đề 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
-
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.
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
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
http://developer.android.com/tools/help/lint.html
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à
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
https://source.android.com/source/
21
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