Android 安全測試思路總結(攻擊面)
接觸Android安全測試一年有餘,被同被人問到給你一個App,你如何確定其中的安全問題。平時真的缺乏一份總結,這裡簡單總結一下。部落格中的提到的部分攻擊面,我比較熟悉,也有很多不太清楚的地方,不妨先簡單記錄下吧。
根據攻擊裝置的代價,我們做了如下分類。
- 遠端攻擊面
- 物理鄰接攻擊面
- 本地攻擊面
物理攻擊面
一、遠端攻擊面
最巨大的、最危險的、最有吸引力的攻擊介面,攻擊者無需本地物理接觸受害者。
1、Networking Stacks(網路協議)
Android系統使用的Linux核心提供的TCP/IP協議棧可能會引入攻擊面,1)Linux底層的網路協議棧由C/C++編寫,其存在的“緩衝區溢位”
檢查方法:程式碼review,並搜尋不安全函式
2、Exposed Network Services(暴露的網路服務)
Android本身很少暴露網路服務,多是由應用程式暴露,如開啟WIFI熱點功能後,會監聽TCP 53埠。
檢查方法:通過nmap掃描或者本地執行netstat -na|grep LISTEN可以獲得暴露的服務,再進行分析。
例子:百度系WormHole算這類漏洞。
3、Moblie Technologies
這類漏洞指的是通過手機專有的服務進入的遠端攻擊面,例如通過簡訊、wap服務這是其他作業系統例如windows、linux不具有的。這裡指SMS、MMS、電話等蜂窩網路服務暴露的攻擊面。
SMS、MMS服務使用WAP協議,其中的WAP PUSH訊息可被用來發送Service Loading request (SL訊息),SL訊息可以去呼叫USSD(Unstructured Supplementary Service Data)功能來執行充值、語音郵箱查詢等操作
USSD指令:當你使用手機鍵盤輸入一些網路已預先制定的數字或者符號比如*#等,再按send也就是撥號鍵就可以向網路傳送一條指令,網路根據你的指令選擇你需要的服務提供給你。可以用來打電話、修改PUK等 http://baike.baidu.com/link?url=ImBFOug4QRZFJHhypYHxY1i2ZPzzsgQw5Fq-LhWuGD1Bmcvry02IMXqG3QyP7sgZ
WAP PUSH:服務資訊或推入資訊,是種特殊格式簡訊 WAP PUSH某站點或某業務連結通簡訊傳送支援WAP PUSH功能手機,通過閱讀條簡訊(服務資訊)打簡訊連結直接訪問業務,節省尋找業務時間
WAP Push的內容有兩種,一種是SI,service indication;另一種 SL,service loading。這兩種內容型別的目的都是傳送URL連結到手機上。SI是以非同步方式傳送一個通知、警示、提醒等資訊到手機上,使用者會看到螢幕上顯示這條通知文字內容,然後,提示你是否去那個頁面,如果去,手機將啟用為WAP瀏覽器,開啟這個連結,瀏覽其內容。SL則是直接傳送一個 URL連結到手機上,手機不會給使用者任何提示,自動地啟動WAP微瀏覽器,下載這個URL對應的內容,顯示在手機上。讓人覺得好像是推送了一個頁面下來了似的。MMS就是利用這個機制實現的,已知攻擊是傳送tel://開頭的SL指令可觸發手機打電話 http://www.cnblogs.com/edward259/archive/2010/01/29/1659415.html
4、Client-side Attack Surface(客戶端攻擊面)
指由於Android上安裝的App或者系統提供的服務(App)引入的遠端攻擊面。
4.1 Browser Attack Surface(瀏覽器攻擊面)
主要有URL釣魚、MitM、XSS、CSRF方面的威脅
android 4.1之前版本使用的是android browser,4.4之前使用chrome for android ,4.4之後使用基於chromium的web browser(libwebview-chromium.so存在於framework層,為上層應用提供API,由於是隨framework更新,因此更新慢,容易受到half day攻擊)
另外,還有其他第三方瀏覽器由於存在漏洞而引人的攻擊面
4.2 Web-Powered Mobile Apps(web引擎移動應用)
使用webview技術而引人的攻擊面 利用WEB View的攻擊:例如 addJavascriptInterface和Android AD network。客戶端使用webview的xss、csrf等。
4.3 其他
包括:
- Ad Networks(廣告)
- Media and Document Processing(媒體推送)(處理圖片、文件的開源庫,如(libpng、libjpeg),包括最近的png攻擊和stagefright攻擊)
- Electronic Mail(電子郵件)
- Googel Infrastructure(Google基礎服務)
- Google Play
- Third-Party App Ecosystems
二、Physical Adjacency(物理鄰接攻擊)
廣義上也算遠端攻的一種,只是攻擊的範圍受到限制。 包括:
- GPS
1.使用者位置資訊被APP濫用,洩露使用者隱私
2.GPS spoofing : 傳送虛假GPS訊號導致GPS裝置定位錯誤
- Baseband
基帶處理晶片(CP)及android.telephony.stack協議棧
1.假基站
2.針對RIL層的攻擊:相關硬軟體如USRP,BladeRF,開源協議棧OSmocom
- Bluetooth
包含近30種Profile,每一個profile描述了藍芽的一種功能
比如:
1.HFP(Hand-free profile)/HSP(Headset profile)定義瞭如何控制麥克風、外放等外設
2.FTP(File transfer profile)
3.DUN(Dial-up Networking profile)
4.HID(Human Interface Device profile)
5.AVRCP(audio/video Remote Control profile)
可能的攻擊方法:Bluejacking,Bluesnarfing,Bluebugging
- Wi-Fi
功能點:連線internet,WIFI直連
協議和演算法:WEP、WPA、WPA2、開源協議棧:wpa_supplicant
可能的攻擊:Rogue熱點、MITM
- NFC
讀取Tag,資料傳輸(Beam)、移動支付
呼叫關係:物理NFC晶片->核心:libpn544_fs.so->
Native:libnfc_jni.so,libnfc.so,libnfc_ndef.so->
Framework:com.android.nfc ->上層APP
三、本地攻擊面
攻擊者通過安裝本地App達到攻擊的效果。
Exploring the File System
檔案系統訪問許可權設定、SUID/SGUID設定,Owner設定
檢查工具:adb shell和Canhazaxs
Applications life cycle
應用生命週期中引入的攻擊面
install
安裝流程中引入的攻擊面,如超長應用名攻擊,畸形AndroidManifest.xml標籤,APK佔位攻擊,簽名漏洞等。
Applications run
執行流程中引入的攻擊面
backup
應用備份恢復時引入的攻擊面,如ALLOW-BACKUP漏洞
Finding Other Local Attack Surface
System Calls
在原始碼中以“SYSCALL_DEFINE”定義
Sockets
sockets惡意呼叫
Binder
Shared Memory
Baseband Interface
Attacking Hardware Support Services
API
JAVA Native Interface
JNI惡意呼叫,JNI-DOS
AIDL service Calls
TrustZone Proxy
TurstZone Proxy是連結非安全世界和安全世界的代理
CDEV file_operations
驅動原始碼中file_operations中定義了驅動節點的介面,如open/write/read/mmap/ioctl
四、物理攻擊
USB、adb等。
參考文獻:http://colbert337.github.io/2015/08/24/android-attack-surface/