《Android安全攻防權威指南》由世界頂尖級黑客打造,是目前最全面的一本Android系統安全手冊。書中細緻地介紹了Android系統中的漏洞挖掘、分析,並給出了大量利用工具,結合實例從白帽子角度分析了諸多系統問題,是一本難得的安全指南。本書的目標讀者為軟體安全技術人員,作業系統及套用開發人員。
目錄
第1章 縱觀Android生態圈 1
1.1 了解Android的根源 1
1.1.1 公司歷史 1
1.1.2 版本歷史 2
1.1.3 審視Android設備家族 3
1.1.4 主體開源 5
1.2 了解Android的利益相關者 6
1.2.1 谷歌 7
1.2.2 硬體廠商 7
1.2.3 移動通信運營商 9
1.2.4 開發者 9
1.2.5 用戶 10
1.3 理解生態圈的複雜性 11
1.3.1 碎片化問題 12
1.3.2 兼容性 13
1.3.3 更新問題 13
1.3.4 安全性與開放性 15
1.3.5 公開披露 16
1.4 小結 17
第2章 Android的安全設計與架構 18
2.1 理解Android系統架構 18
2.2 理解安全邊界和安全策略執行 19
2.2.1 Android沙箱 19
2.2.2 Android許可權 22
2.3 深入理解各個層次 25
2.3.1 Android套用層 25
2.3.2 Android框架層 28
2.3.3 DalvikVM 29
2.3.4 用戶空間原生代碼層 30
2.3.5 核心 36
2.4 複雜的安全性,複雜的漏洞利用 41
2.5 小結 42
第3章 root Android設備 43
3.1 理解分區布局 43
3.2 理解引導過程 45
3.3 引導載入程式的鎖定與解鎖 47
3.4 對未加鎖引導載入程式的設備進行root 50
3.5 對鎖定引導載入程式的設備進行root 52
3.5.1 在已啟動系統中獲取root
許可權 52
3.5.2 NAND鎖、臨時性root與永久性root 53
3.5.3 對軟root進行持久化 55
3.6 歷史上的一些已知攻擊 56
3.6.1 核心:Wunderbar/asroot 56
3.6.2 恢復:Volez 57
3.6.3 udev:Exploid 57
3.6.4 adbd:RageAgainstTheCage 58
3.6.5 Zygote:Zimperlich和Zysploit 58
3.6.6 ashmem:KillingInTheNameOf和psneuter 58
3.6.7 vold:GingerBreak 59
3.6.8 PowerVR:levitator 59
3.6.9 libsysutils:zergRush 60
3.6.10 核心:mempodroid 60
3.6.11 檔案許可權和符號連結相關的攻擊 61
3.6.12 adb恢復過程競爭條件漏洞 61
3.6.13 Exynos4:exynos-abuse 62
3.6.14 Diag:lit/diaggetroot 62
3.7 小結 63
第4章 套用安全性評估 64
4.1 普遍性安全問題 64
4.1.1 套用許可權問題 64
4.1.2 敏感數據的不安全傳輸 66
4.1.3 不安全的數據存儲 67
4.1.4 通過日誌的信息泄露 68
4.1.5 不安全的IPC端點 69
4.2 案例分析:移動安全套用 71
4.2.1 初步剖析 71
4.2.2 靜態分析 72
4.2.3 動態分析 87
4.2.4 攻擊 95
4.3 案例分析:SIP客戶端 97
4.3.1 了解Drozer 97
4.3.2 發現漏洞 98
4.3.3 snarfing 99
4.3.4 注入 102
4.4 小結 104
第5章 理解Android的攻擊面 105
5.1 攻擊基礎術語 105
5.1.1 攻擊向量 106
5.1.2 攻擊面 106
5.2 對攻擊面進行分類 107
5.2.1 攻擊面屬性 108
5.2.2 分類決策 108
5.3 遠程攻擊面 108
5.3.1 網路概念 109
5.3.2 網路協定棧 112
5.3.3 暴露的網路服務 113
5.3.4 移動技術 114
5.3.5 客戶端攻擊面 115
5.3.6 谷歌的基礎設施 119
5.4 物理相鄰 123
5.4.1 無線通信 123
5.4.2 其他技術 127
5.5 本地攻擊面 128
5.5.1 探索檔案系統 128
5.5.2 找到其他的本地攻擊面 129
5.6 物理攻擊面 133
5.6.1 拆解設備 133
5.6.2 USB 134
5.6.3 其他物理攻擊面 137
5.7 第三方修改 137
5.8 小結 137
第6章 使用模糊測試來挖掘漏洞 139
6.1 模糊測試的背景 139
6.1.1 選定目標 140
6.1.2 構造畸形輸入 140
6.1.3 處理輸入 141
6.1.4 監控結果 142
6.2 Android上的模糊測試 142
6.3 對Broadcast Receiver進行模糊測試 143
6.3.1 選定目標 143
6.3.2 生成輸入 144
6.3.3 傳遞輸入 145
6.3.4 監控測試 145
6.4 對Android上的Chrome進行模糊測試 147
6.4.1 選擇一種技術作為目標 148
6.4.2 生成輸入 149
6.4.3 處理輸入 151
6.4.4 監控測試 152
6.5 對USB攻擊面進行模糊測試 155
6.5.1 對USB進行模糊測試的挑戰 155
6.5.2 選定目標模式 155
6.5.3 生成輸入 156
6.5.4 處理輸入 158
6.5.5 監控測試 158
6.6 小結 159
第7章 調試與分析安全漏洞 161
7.1 獲取所有信息 161
7.2 選擇一套工具鏈 162
7.3 調試崩潰Dump 163
7.3.1 系統日誌 163
7.3.2 Tombstone 164
7.4 遠程調試 165
7.5 調試Dalvik代碼 166
7.5.1 調試示例套用 167
7.5.2 顯示框架層原始碼 168
7.5.3 調試現有代碼 170
7.6 調試原生代碼 173
7.6.1 使用NDK進行調試 174
7.6.2 使用Eclipse進行調試 177
7.6.3 使用AOSP進行調試 179
7.6.4 提升自動化程度 183
7.6.5 使用符號進行調試 184
7.6.6 調試非AOSP設備 189
7.7 調試混合代碼 190
7.8 其他調試技術 191
7.8.1 調試語句 191
7.8.2 在設備上進行調試 191
7.8.3 動態二進制注入 192
7.9 漏洞分析 193
7.9.1 明確問題根源 193
7.9.2 判斷漏洞可利用性 205
7.10 小結 205
第8章 用戶態軟體的漏洞利用 206
8.1 記憶體破壞漏洞基礎 206
8.1.1 棧緩衝區溢出 206
8.1.2 堆的漏洞利用 209
8.2 公開的漏洞利用 215
8.2.1 GingerBreak 215
8.2.2 zergRush 218
8.2.3 Mempodroid 221
8.3 Android瀏覽器漏洞利用 222
8.3.1 理解漏洞 222
8.3.2 控制堆 224
8.4 小結 227
第9章 ROP漏洞利用技術 228
9.1 歷史和動機 228
9.2 ARM架構下的ROP基礎 230
9.2.1 ARM子函式調用 231
9.2.2 將gadget組成ROP鏈 232
9.2.3 識別潛在的gadget 234
9.3 案例分析:Android 4.0.1連結器 235
9.3.1 遷移棧指針 236
9.3.2 在新映射記憶體中執行任意代碼 237
9.4 小結 240
第10章 攻擊核心 242
10.1 Android的Linux核心 242
10.2 核心提取 242
10.2.1 從出廠固件中提取核心 243
10.2.2 從設備中提取核心 245
10.2.3 從啟動鏡像中提取核心 246
10.2.4 解壓核心 247
10.3 運行自定義核心代碼 247
10.3.1 獲取原始碼 247
10.3.2 搭建編譯環境 250
10.3.3 配置核心 251
10.3.4 使用自定義核心模組 252
10.3.5 編譯自定義核心 254
10.3.6 製作引導鏡像 257
10.3.7 引導自定義核心 258
10.4 調試核心 262
10.4.1 獲取核心崩潰報告 263
10.4.2 理解Oops信息 264
10.4.3 使用KGDB進行Live調試 267
10.5 核心漏洞利用 271
10.5.1 典型Android核心 271
10.5.2 獲取地址 273
10.5.3 案例分析 274
10.6 小結 283
第11章 攻擊RIL無線接口層 284
11.1 RIL簡介 284
11.1.1 RIL架構 285
11.1.2 智慧型手機架構 285
11.1.3 Android電話棧 286
11.1.4 對電話棧的定製 287
11.1.5 RIL守護程式 287
11.1.6 用於vendor-ril的API 289
11.2 簡訊服務 290
11.2.1 SMS訊息的收發