NGHIÊN cứu cơ CHẾ PHÁT HIỆN rò rỉ THÔNG TIN BẰNG PHƯƠNG PHÁP PHÂN TÍCH TĨNH TRÊN ỨNG DỤNG ANDROID

125 124 2
NGHIÊN cứu cơ CHẾ PHÁT HIỆN rò rỉ THÔNG TIN BẰNG PHƯƠNG PHÁP PHÂN TÍCH TĨNH TRÊN ỨNG DỤNG ANDROID

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

ĐẠI HỌC QUỐC GIA TP.HỒ CHÍ MINH TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN PHAN THẾ DUY NGHIÊN CỨU CƠ CHẾ PHÁT HIỆN RỊ RỈ THƠNG TIN BẰNG PHƯƠNG PHÁP PHÂN TÍCH TĨNH TRÊN ỨNG DỤNG ANDROID LUẬN VĂN THẠC SĨ Ngành: Công Nghệ Thông Tin Mã số: 60.48.02.01 TP HỒ CHÍ MINH – 2016 ĐẠI HỌC QUỐC GIA TP.HỒ CHÍ MINH TRƯỜNG ĐẠI HỌC CƠNG NGHỆ THƠNG TIN PHAN THẾ DUY NGHIÊN CỨU CƠ CHẾ PHÁT HIỆN RÒ RỈ THƠNG TIN BẰNG PHƯƠNG PHÁP PHÂN TÍCH TĨNH TRÊN ỨNG DỤNG ANDROID 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 – Trường ĐH Công Nghệ Thông Tin TP.HCM TP HỒ CHÍ MINH – 2016 Lời Cảm Ơn Đầu tiên cho phép gửi lời cảm ơn chân thành sâu sắc đến quý thầy cô giáo Đại Học Công Nghệ Thông Tin – ĐHQG TP Hồ Chí Minh, đặc biệt q thầy Bộ mơn Cơng Nghệ Thơng Tin quan tâm, tận tình truyền đạt kiến thức suốt trình học tập, nghiên cứu trường Tôi trân trọng biết ơn TS Phạm Văn Hậu tận tình hướng dẫn, bảo, góp ý cho tơi suốt q trình thực đề tài luận văn để hơm hồn thành đề tài luận văn tốt nghiệp Trong khoảng thời gian qua thầy người định hướng giúp đỡ tơi trước việc tháo gỡ khó khăn trở ngại đề tài, buổi gặp trao đổi kiến thức nghiên cứu khoa học buối trao đổi kinh nghiệm sống kỉ niệm không quên bước phía trước tơi Con xin chân thành cảm ơn đến ba mẹ, gia đình; xin cảm ơn đến tất bạn bè, người thân thiết, người mà bên cạnh động viên, chia sẻ vui buồn khó khăn với tơi suốt thời gian qua Mặc dù có nhiều cố gắng để thực đề tài hoàn chỉnh nhất, song buổi đầu làm quen với công việc nghiên cứu khoa học mang tính chun mơn sâu, hạn chế kiến thức kinh nghiệm nên tránh khỏi thiếu sót định Rất mong đóng góp, phê bình chân thành Q Thầy Cơ để đề tài hồn chỉnh Xin kính chúc người dồi sức khỏe có nhiều niềm vui, hạnh phúc, thành công sống Chúc Trường Đại học Công Nghệ Thông Tin, ĐHQG Tp HCM ngày phát triển Phan Thế Duy Tp HCM, 24 tháng 04 năm 2016 Lời Cam Đoan Tôi xin cam đoan luận văn tơi thực hướng dẫn khoa học TS Phạm Văn Hậu, giảng viên Trường Đại Học Công Nghệ Thông Tin – ĐHQG Tp HCM Các mơ hình đề xuất kết nghiên cứu luận văn trung thực, tơi phân tích, nghiên cứu, xác lập, xây dựng đánh giá Các thơng tin trích dẫn, sử dụng tài liệu nghiên cứu luận văn rõ nguồn gốc Nếu sai, tơi xin chịu hồn tồn trách nhiệm TP.Hồ Chí Minh, tháng năm 2016 Học viên Phan Thế Duy Mục lục Mục lục Danh Mục Các Kí Hiệu & Chữ Viết Tắt Danh Mục Bảng Danh mục hình vẽ Mở Đầu Chương I – Tổng quan 1.1 Tình hình nghiên cứu 1.1.1 Giới thiệu chung 1.1.2 Tình hình nghiên cứu ngồi nước 12 1.1.3 Tình hình nghiên cứu nước 15 1.2 Tính khoa học tính đề tài: 16 1.3 Mục tiêu, đối tượng phạm vi nghiên cứu đề tài 17 1.4 Nội dung, phương pháp nghiên cứu 17 Chương II – Cơ sở lý thuyết 20 2.1 Hệ điều hành di động Android ứng dụng 20 2.1.1 Tổng quan hệ sinh thái Android 20 2.1.2 Sơ lược số nguyên tắc bảo mật Android 23 2.2 Kiến trúc mơ hình bảo mật ứng dụng Android 25 2.2.1 Thành phần ứng dụng Android 26 2.2.2 Giao tiếp liên thành phần ICC thông qua Intent URI 27 2.2.3 Kiến trúc an ninh AndroidManifest Permission 35 2.3 Nền tảng phương pháp phân tích tĩnh 51 2.3.1 Tổng quan phương pháp phân tích tĩnh 51 2.3.2 Call Graph Control Flow Graph 53 2.3.3 Phân tích tĩnh taint data flow ứng dụng Android 59 2.3.4 Các thách thức kỹ thuật phân tích tĩnh ứng dụng Android 61 Chương III – Hệ thống phân tích tĩnh phát rò rỉ liệu ứng dụng Android 64 3.1 Tình minh họa 64 3.2 Mơ hình phân tích tĩnh phát ứng dụng rò rỉ liệu DidFail 67 3.2.1 Mơ hình hóa tốn 67 3.2.2 Phase 69 3.2.3 Phase 74 Mô hình cải tiến cơng cụ phân tích tĩnh DidFail 77 3.3 3.3.1 Xác định khả cho phép truy cập component 78 3.3.2 Xem xét permission component/app build graph tìm ICC 79 3.3.3 Phương pháp cải tiến chế matching flow 79 Chương IV – Cài đặt & Đánh giá 86 4.1 Cài đặt 86 4.1.1 Cài đặt mơ hình DidFail 86 4.1.2 Cài đặt mơ hình cải tiến dựa DidFail 87 4.2 Thử nghiệm & Đánh giá 88 4.2.1 Bộ ứng dụng S dùng kiểm thử 88 4.2.2 Kết phân tích ứng dụng S 91 Chương V – Cài đặt & Đánh giá 94 5.1 Kết luận 94 5.2 Hướng phát triển 95 Tài liệu tham khảo 98 Phụ Lục 101 Phụ lục A: Các hàm source & sink ứng dụng Android xác định SuSi 101 Phụ lục B: Kết flows.out phân tích ứng dụng DidFail 110 Phụ lục C: Kết phân tích độc lập Phase DidFail ứng dụng 114 Danh Mục Các Kí Hiệu & Chữ Viết Tắt Kí hiệu & Chữ viết tắt Ý nghĩa ICC – (Inter Component Communication) IAC – (Inter Application Communication) IPC – (Inter-process communication) URI (Uniform Resource Identifier) UID (shared user id) Cơ chế giao tiếp liên thành phần CFG (Control Flow Graph) Cơ chế giao tiếp liên ứng dụng Cơ chế giao tiếp liên tiến trình Chuỗi định danh tài nguyên Mã định danh chia sẻ ứng dụng chung nhà phát triển Đồ thị luồng xứ lý Danh Mục Bảng Bảng II.1 - Các thành phần ứng dụng Android 26 Bảng II.2 - Các thành phần phụ ứng dụng Android 27 Bảng II.3 - Một số phương thức ICC sử dụng phổ biến Android 28 Bảng II.4 - Cấu trúc thành phần URI 35 Bảng II.5 - Khai báo xác định component công khai/ riêng tư 38 Danh mục hình vẽ Hình I-1 - Ví dụ dòng liệu liên kết Activity Service 11 Hình I-2 - Ví dụ rò rỉ liệu GPS thơng qua chế ICC 12 Hình I-3 - Cách tiếp cận tìm sources/sinks SuSi 13 Hình I-4 - Mơ hình LeakMiner 14 Hình II-1 - Kiến trúc hệ điều hành Android 21 Hình II-2 - Mơ hình truy cập thông tin cá nhân người dùng ứng dụng 24 Hình II-3 - Hiển thị Permission ứng dụng 25 Hình II-4 – Ví dụ chi tiết q trình rò rỉ liệu thơng qua chế ICC Intent 28 Hình II-5 - Giao tiếp ICC qua Intent không tường minh 31 Hình II-6 - Hộp thoại chọn ứng dụng 32 Hình II-7 - Minh họa cách Intent khơng tường minh chuyển thông qua hệ thống để bắt đầu Activity khác 34 Hình II-8 - Permission yêu cầu 39 Hình II-9 - Source code Call Graph lớp Java 55 Hình II-10 - Flow Sensitivity 55 Hình II-11 - Path sensitivity 56 Hình II-12 - Field sensitivity 56 Hình II-13 - Context sensitivity 56 Hình II-14 - Object Sensitivity 56 Hình II-15 - Control Flow Graph 57 Hình II-16 - Ví dụ code ứng dụng Android LeakageApp [1] 58 Hình II-17 - CFG ứng dụng LeakageApp, p điều kiện rẽ nhánh 59 Hình III-1 - Minh họa tình giao tiếp liên ứng dụng 64 Hình III-2 - SendSMS.button1listener.java 65 Hình III-3 - AndroidManifest.xml Echoer.apk 65 Hình III-4 - Echoer.MainActivity.java 66 Hình III-5 Echoer.button1listener.java 66 Hình III-6 - SendSMS.MainActivity.java 67 Hình III-7 - Mơ hình hóa tốn tương tác nhiều component 68 Hình III-8 - Tương tác cụ thể component C1 C2 68 Hình III-9 - Phase DidFail 69 Hình III-10 - Sử dụng sources/sinks cung cấp SuSi 70 Hình III-11 - Sources sử dụng FlowDroid 71 Hình III-12 - Sink dùng công cụ FlowDroid 71 Hình III-13 - Sơ đồ hoạt động FlowDroid 72 Hình III-14 – Mơ hình Retarget Dalvik Bytecode Dare 72 Hình III-15 -Mã nguồn Java Dalvik bytecode 73 Hình III-16 - Java bytecode retarget Dare 73 Hình III-17 - Phase DidFail 75 Hình III-18- Các yếu tố dùng xác định đường liệu ứng dụng Android 77 Hình III-19 - Mơ hình cải tiến DidFail 80 Hình III-20 - Các thuộc tính dùng q trình so khớp Intent Intent Filter 81 Hình IV-1 - Bộ ứng dụng mẫu DidFail 87 Hình IV-2 - Cấu trúc manifest ứng dụng SendSMS 88 Hình IV-3 - Cấu trúc manifest ứng dụng Echoer nguyên 89 Hình IV-4 - Cấu trúc manifest ứng dụng WriteFile 89 Hình V-1 - Hướng phát triển xây dựng hệ thống đánh giá rò rỉ liệu sử dụng DidFail 96 % -> _SINK_ % -> _SINK_ % -> _SINK_ % -> _SINK_ % -> _SINK_ % -> _SINK_ % -> _SINK_ % -> _SINK_ % -> _SINK_ % -> _SINK_ % -> _SINK_ % -> _SINK_ % -> _SINK_ % -> _SINK_ % -> _SINK_ % -> _SINK_ % -> _SINK_ % -> _SINK_ -> _SINK_ -> _SINK_ -> _SINK_ -> _SINK_ -> _SINK_ -> _SINK_ -> _SINK_ -> _SINK_ android.permission.SEND_SMS -> _SINK_ android.permission.SEND_SMS -> _SINK_ android.permission.SEND_SMS -> _SINK_ -> _SINK_ -> _SINK_ > _SINK_ -> _SINK_ -> _SINK_ -> _SINK_ -> _SINK_ -> _SOURCE_ -> _SOURCE_ -> _SOURCE_ -> _SOURCE_ -> _SOURCE_ -> _SOURCE_ -> _SOURCE_ -> _SOURCE_ -> _SOURCE_ -> _SOURCE_ -> _SOURCE_ -> _SOURCE_ 108 -> _SOURCE_ -> _SINK_ -> _SINK_ -> _SOURCE_ -> _SOURCE_ -> _SINK_ -> _SINK_ -> _SINK_ -> _SINK_ -> _SINK_ -> _SINK_ -> _SINK_ 109 Phụ lục B: Kết flows.out phân tích ứng dụng DidFail Kết flows.out (chạy phase DidFail) Changed: Changed: Changed: Ryan modified Flows with intent(s) -[Flow(src='Src: ', app='org.cert.echoer', sink='Sink: '), Flow(src='Src: ', app='org.cert.sendsms', sink='Sink: '), Flow(src='Src: ', app='org.cert.sendsms', sink='Sink: '), Flow(src='Src: ', app='org.cert.WriteFile', sink='Sink: '), Flow(src='Src: ', app='org.cert.WriteFile', sink='Sink: '), Flow(src='Src: ', app='org.cert.WriteFile', sink='Sink: '), Flow(src='Src: ', app='org.cert.WriteFile', sink='Sink: '), Flow(src='Src: ', app='org.cert.WriteFile', sink='Sink: ')] 110 Ryan modified Flows with intent(s) -[Flow(src=Intent(tx=('org.cert.sendsms', 'MainActivity'), rx=('org.cert.echoer', 'MainActivity'), intent_id='newField_8'), app=None, sink='Sink: '), Flow(src=Intent(tx=('org.cert.WriteFile', 'MainActivity'), rx=('org.cert.echoer', 'MainActivity'), intent_id='newField_10'), app=None, sink='Sink: '), Flow(src=IntentResult(i=Intent(tx=('org.cert.sendsms', 'MainActivity'), rx=('org.cert.echoer', 'MainActivity'), intent_id='newField_8')), app=None, sink='Sink: '), Flow(src='Src: ', app=None, sink=Intent(tx=('org.cert.sendsms', 'MainActivity'), rx=('org.cert.echoer', 'MainActivity'), intent_id='newField_8')), Flow(src=IntentResult(i=Intent(tx=('org.cert.WriteFile', 'MainActivity'), rx=('org.cert.echoer', 'MainActivity'), intent_id='newField_10')), app=None, sink='Sink: '), Flow(src='Src: ', app=None, sink=Intent(tx=('org.cert.WriteFile', 'MainActivity'), rx=('org.cert.echoer', 'MainActivity'), intent_id='newField_10')), Flow(src='Src: ', app=None, sink=Intent(tx=('org.cert.WriteFile', 'MainActivity'), rx=('org.cert.echoer', 'MainActivity'), intent_id='newField_10')), Flow(src='Src: ', app=None, sink=Intent(tx=('org.cert.WriteFile', 'MainActivity'), rx=('org.cert.echoer', 'MainActivity'), intent_id='newField_10')), Flow(src=IntentResult(i=Intent(tx=('org.cert.WriteFile', 'MainActivity'), rx=('org.cert.echoer', 'MainActivity'), intent_id='newField_10')), app=None, sink='Sink: ')] Ryan modified Flows with intent(s) -[Flow(src=Intent(tx=('org.cert.sendsms', 'MainActivity'), rx=('org.cert.echoer', 'MainActivity'), intent_id='newField_8'), app=None, sink=IntentResult(i=Intent(tx=('org.cert.sendsms', 'MainActivity'), rx=('org.cert.echoer', 'MainActivity'), intent_id='newField_8'))), 111 Flow(src=Intent(tx=('org.cert.WriteFile', 'MainActivity'), rx=('org.cert.echoer', 'MainActivity'), intent_id='newField_10'), app=None, sink=IntentResult(i=Intent(tx=('org.cert.WriteFile', 'MainActivity'), rx=('org.cert.echoer', 'MainActivity'), intent_id='newField_10')))] May 2016 -#### 'Intent(tx=('org.cert.WriteFile', 'MainActivity'), rx=('org.cert.echoer', 'MainActivity'), intent_id='newField_10')': ### ['Src: ', 'Src: ', 'Src: '] #### 'Intent(tx=('org.cert.sendsms', 'MainActivity'), rx=('org.cert.echoer', 'MainActivity'), intent_id='newField_8')': ### ['Src: '] May 2016 -#### 'IntentResult(i=Intent(tx=('org.cert.WriteFile', 'MainActivity'), rx=('org.cert.echoer', 'MainActivity'), intent_id='newField_10'))': ### ['Src: ', 'Src: ', 'Src: '] #### 'IntentResult(i=Intent(tx=('org.cert.sendsms', 'MainActivity'), rx=('org.cert.echoer', 'MainActivity'), intent_id='newField_8'))': ### ['Src: '] May 2016 -#### 'Sink: ': ### ['Src: ', 'Src: ', 112 'Src: ', 'Src: '] #### 'Sink: ': ### ['Src: ', 'Src: ', 'Src: ', 'Src: ', 'Src: '] #### 'Sink: ': ### ['Src: ', 'Src: '] 113 Phụ lục C: Kết phân tích độc lập Phase DidFail ứng dụng Nội dung file out.json cung cấp nhìn tồn cảnh đường liệu ứng dụng với (SendSMS, Echoer, WriteFile), tiết lộ luồng liệu nhạy cảm bị rò rỉ khỏi ứng dụng dựa nguồn liệu đánh dấu để theo vết Kết quả: out.json -{ "Flows": [ [ "Src: ", "org.cert.echoer", "Sink: " ], [ "Src: ", "org.cert.sendsms", "Sink: " ], [ "Src: ", "org.cert.sendsms", "Sink: " ], 114 [ "Src: ", "org.cert.WriteFile", "Sink: " ], [ "Src: ", "org.cert.WriteFile", "Sink: " ], [ "Src: ", "org.cert.WriteFile", "Sink: " ], [ "Src: ", "org.cert.WriteFile", "Sink: " ], [ "Src: ", "org.cert.WriteFile", 115 "Sink: " ], [ "Intent(tx=('org.cert.sendsms', 'MainActivity'), rx=('org.cert.echoer', 'MainActivity'), intent_id='newField_8')", null, "Sink: " ], [ "Intent(tx=('org.cert.WriteFile', 'MainActivity'), rx=('org.cert.echoer', 'MainActivity'), intent_id='newField_10')", null, "Sink: " ], [ "IntentResult(i=Intent(tx=('org.cert.sendsms', 'MainActivity'), rx=('org.cert.echoer', 'MainActivity'), intent_id='newField_8'))", null, "Sink: " ], [ "Src: ", null, "Intent(tx=('org.cert.sendsms', 'MainActivity'), rx=('org.cert.echoer', 'MainActivity'), intent_id='newField_8')" ], 116 [ "IntentResult(i=Intent(tx=('org.cert.WriteFile', 'MainActivity'), rx=('org.cert.echoer', 'MainActivity'), intent_id='newField_10'))", null, "Sink: " ], [ "Src: ", null, "Intent(tx=('org.cert.WriteFile', 'MainActivity'), rx=('org.cert.echoer', 'MainActivity'), intent_id='newField_10')" ], [ "Src: ", null, "Intent(tx=('org.cert.WriteFile', 'MainActivity'), rx=('org.cert.echoer', 'MainActivity'), intent_id='newField_10')" ], [ "Src: ", null, "Intent(tx=('org.cert.WriteFile', 'MainActivity'), rx=('org.cert.echoer', 'MainActivity'), intent_id='newField_10')" ], [ "IntentResult(i=Intent(tx=('org.cert.WriteFile', 'MainActivity'), rx=('org.cert.echoer', 'MainActivity'), intent_id='newField_10'))", 117 null, "Sink: " ], [ "Intent(tx=('org.cert.sendsms', 'MainActivity'), rx=('org.cert.echoer', 'MainActivity'), intent_id='newField_8')", null, "IntentResult(i=Intent(tx=('org.cert.sendsms', 'MainActivity'), rx=('org.cert.echoer', 'MainActivity'), intent_id='newField_8'))" ], [ "Intent(tx=('org.cert.WriteFile', 'MainActivity'), rx=('org.cert.echoer', 'MainActivity'), intent_id='newField_10')", null, "IntentResult(i=Intent(tx=('org.cert.WriteFile', 'MainActivity'), rx=('org.cert.echoer', 'MainActivity'), intent_id='newField_10'))" ] ], "Taints": { "Intent(tx=('org.cert.WriteFile', 'MainActivity'), rx=('org.cert.echoer', 'MainActivity'), intent_id='newField_10')": [ "Src: ", "Src: ", "Src: " ], "Intent(tx=('org.cert.sendsms', 'MainActivity'), rx=('org.cert.echoer', 'MainActivity'), intent_id='newField_8')": [ "Src: " 118 ], "IntentResult(i=Intent(tx=('org.cert.WriteFile', 'MainActivity'), rx=('org.cert.echoer', 'MainActivity'), intent_id='newField_10'))": [ "Src: ", "Src: ", "Src: " ], "IntentResult(i=Intent(tx=('org.cert.sendsms', 'MainActivity'), rx=('org.cert.echoer', 'MainActivity'), intent_id='newField_8'))": [ "Src: " ], "Sink: ": [ "Src: ", "Src: " ], "Sink: ": [ "Src: ", "Src: ", "Src: ", "Src: ", "Src: " ], 119 "Sink: ": [ "Src: ", "Src: ", "Src: ", "Src: " ], "Src: ": [ "Src: " ], "Src: ": [ "Src: " ], "Src: ": [ "Src: " ], "Src: ": [ "Src: " ], "Src: ": [ "Src: " ] } 120 } 121 ... ĐẠI HỌC CÔNG NGHỆ THÔNG TIN PHAN THẾ DUY NGHIÊN CỨU CƠ CHẾ PHÁT HIỆN RỊ RỈ THƠNG TIN BẰNG PHƯƠNG PHÁP PHÂN TÍCH TĨNH TRÊN ỨNG DỤNG ANDROID LUẬN VĂN THẠC SĨ Ngành: Công Nghệ Thông Tin Mã số: 60.48.02.01... 2.3.3 Phân tích tĩnh taint data flow ứng dụng Android 59 2.3.4 Các thách thức kỹ thuật phân tích tĩnh ứng dụng Android 61 Chương III – Hệ thống phân tích tĩnh phát rò rỉ liệu ứng dụng Android. .. rò rỉ thơng tin ứng dụng Android Kết quả:  Các phương pháp phân tích tĩnh dùng ứng dụng phân tích bảo mật giúp nhận dạng mối nguy hiểm rò rỉ thơng tin ứng dụng Android  Phương pháp xác định

Ngày đăng: 23/12/2018, 06:17

Mục lục

    PHAN THE DUY - Bia-va-tranglot-bia- LuanVan- CH08-CNTT

    PHAN THE DUY-THESIS-Static Analysis-on-Androidapps-CH08 - CNTT