想到什麼就隨手寫點吧,最近剛看完《Android軟件安全與逆向分析》。
另外還有一本《Android應用安全防護和逆向分析》,準備開始看。兩本書的PDF鏈接我會放在末尾,需要的自取。
《Android軟件安全與逆向分析》書中提到了多種去除Android本地限制的方法,傾向於基礎性的安卓破解,比如去內購(不過本書的內購都是圍繞着google play來講的,和國內的內購相差很大,國內的話更多可以參考52pojie的教程帖子)。看完了這本書可以對smail語言更瞭解,初步接觸到IDA這個神器。我看完的感受是基本能看懂smail大概的意思,然後配合jad和IDA能把代碼邏輯理清楚,對代碼關鍵點進行修改。(當然裏邊的實例記得動手,實例在圖靈社區就可以下載)不過感覺這對於android安全來說僅僅是開始,更多的想接觸加固,脫殼,hook。而這些,在《Android應用安全防護和逆向分析》書中都有涉及。不過這個彙編語言真的是我人生大敵ORZ。。。
組件安全——Activity安全
Activity可以在android:exported進行設置,如果爲false則不可以被外部程序調用。
如果要進行外部調用的話,需要使用android:permission進行權限限制。
如果不進行限制,activity可以被劫持。
組件安全——Broadcast Receiver安全
廣播信息分無序廣播(可以被所有接收者接收到,不能被abortBroadcast()中止)【sendBroadcast()】和有序廣播【sendOrdererBroadcast()】。有序廣播優先級高的接收者比優先級低接收者先接受,然後依次向下傳遞。這個時候存在的安全問題就是優先級高的接收者可以對廣播內容進行篡改。android:priority屬性的參數越大,優先級越高,最高位1000。
安全建議的話是加入intent.setClass(MainActivity.this.DataReceiver.class);對廣播權限進行限制,只能由本實例的DataReceiver接受。
組件安全——Service安全
Service一般是系統後臺進程控制服務,惡意的service操作可以破解程序的執行環境,直接影響到程序的正常運行。
startService():啓動服務。
bindService():綁定服務。
stopService():停止服務,對程序功能進行惡意破壞。
service也是可以進行權限控制的,參數爲Android:exported--》false。同樣支持多程序間調用的相互權限檢查
組件安全——Content Provider安全
數據共享交換服務(比如聯繫人,短信,賬戶等)。主要也是對權限進行檢查。
組件安全是移動應用安全的基礎,同樣也是乙方安服滲透測試的基礎項。新人不瞭解移動安全,或者對APP滲透的瞭解僅限於業務安全的話可以瞭解下相關的成因和危害,以後在跟客戶講解的時候也可以更有底氣。我這算是補坑了吧。
安卓基礎項測試分享:
- adb常用命令
adb connect 127.0.0.1:62001 鏈接夜神模擬器
adb devices 查看連接
adb logcat 打印logcat
adb install 安裝,覆蓋安裝是-r
adb uninstall卸載
adb push 推送本地文件至 Android 設備
adb pull 推送Android文件至本地
adb shell mount -o remount rw / 修改系統讀寫權限
adb root 獲得root權限
- 安裝包簽名校驗
jarsigner -verify -verbose –certs +安卓包
CN字段後爲簽名信息
- 應用程序數據可備份
檢查AndroidManifest.xml文件中的allowBackup屬性-- 檢查是否顯式設置爲false(不能是true)
- 客戶端程序保護
是否可以用killer進行反編譯
- debug模式
檢查AndroidManifest.xml文件中的debuggable屬性-- 檢查是否能被調試(應該是false)
- 應用完整性校驗
反編譯後更改原程序代碼,資源,重新打包,看是否能正常運行
- Drozer(安卓組件)
原理:(待補充)
安裝,windows+Android
drozer地址:https://github.com/mwrlabs/drozer/releases
第一步:adb forward tcp:31415 tcp:31415 端口轉發
第二步:開啓drozer drozer console connect
Activity
>run app.activity.info -a packagename
>run app.activity.start --component com.example.package com.example.package.welcome
Service
>run app.service.info -a com.mwr.example.sieve
>run app.service.start --component com.mwr.example.sieve com.mwr.example.sieve.xxx
Broadcast Recevier
dz> run app.broadcast.info -a com.package.name
dz> run app.broadcast.send --component com.package.name --action android.intent.action.XXX
Content Provider
使用drozer命令run scanner.provider.injection -a APP包名 測試Content Provider -- 檢測是否存在SQL注入
使用drozer命令run scanner.provider.traversal -a APP包名 測試Content Provider -- 檢測是否存在目錄遍歷
WebView代碼執行檢測
>run scanner.misc.checkjavascriptbridge -a 包名
WebView不校驗證書檢測
搜“onReceivedSslError”,看是否調用了handle.process()方法(在webview組件代碼中測試)
WebView密碼明文保存檢測
搜”setSavePassword”,看是否顯式設置爲false(在webview組件代碼中測試)。
具體可以參考https://www.cnblogs.com/goodhacker/p/3906180.html
- 敏感信息文件和字符串檢查
- 本地文件敏感信息
檢查/data/data/APP包名 路徑下的文件以及SD卡中包含APP名稱的目錄中的文件 -- 檢測是否存在敏感信息(如私鑰等)、是否加密以及是否能通過修改SD卡文件影響APP正常運行。
- 檢查APP源碼
分析是否硬編碼敏感信息(如賬號密碼、IP地址、郵箱等)
- 程序目錄權限檢查
Adb shell進入文件管理,使用ls –al查看檢查/data/data/APP包名 路徑下的文件權限。建議將app移動客戶端私有目錄權限設置爲文件權限“rw-rw----”,目錄權限爲“rwxrwx—x”。
- logcat日誌檢查
使用adb logcat命令查看APP的日誌輸出 -- 檢測日誌信息中是否包含敏感信息。
- 鍵盤劫持測試
安裝安卓按鍵記錄工具(ns_keylogger.apk),在設置中選擇我們的輸入法,啓動APP,輸入框長按空格,選擇我們的測試鍵盤,使用logcat/DDMS查看測試鍵盤記錄 -- 查看APP案件能否被測試鍵盤記錄。
- 內存訪問和修改檢測
安裝memspector.apk,嘗試搜索、查看、修改APP內存數據(用戶名、密碼等數據通常會在/dev/ashmem/dalvik-heap內存段) -- 檢測是否有明文的敏感數據、是否能夠修改關鍵數據。
- 本地端口開放檢測
Adb shell中執行busybox netstat -tuanp|grep -Ei 'listen|udp*'
- 外部動態加載DEX安全風險檢測
搜DexClassLoader
- 風險位置:
public DexClassLoader(String dexPath,String optimizedDirectory, String libraryPath, ClassLoader parent)[2]
查看AndroidManifest.xml包package值相對應路徑下的文件中是否含有DexClassLoader()函數調用。
鏈接:https://pan.baidu.com/s/18lQvG1GRLO3AqVfUBod5-A
提取碼:tgop