App安全問題
- App 運行時虛擬機(jī)監(jiān)測
- App 運行時root監(jiān)測
- App數(shù)據(jù)備份檢測
- 代碼反編譯檢測
- 敏感權(quán)限使用
- 敏感信息泄露
- 拒絕服務(wù)測試
- 目錄穿越安全測試
- App 緩存安全檢測
- 接口安全測試
- 弱加密安全測試
- 秘鑰硬編碼安全檢測
- 數(shù)據(jù)存儲安全檢測
- 數(shù)據(jù)傳輸安全檢測
- 日志信息泄露檢測
- App組件導(dǎo)出檢測
- App組件權(quán)限檢測
- webview 多項漏洞安全測試
- App Webview DOM 安全測試
- 本地SQL注入安全測試
- SQLite 存儲安全審計
案件分析
APP運行時虛擬機(jī)檢測
該app未進(jìn)行虛擬機(jī)運行檢測,攻擊者在虛擬機(jī)中安裝運行該app,即可在虛擬機(jī)中截取并操作數(shù)據(jù)包或進(jìn)行其他有害操作。

APP數(shù)據(jù)備份檢測
在對某app進(jìn)行安全測試時,發(fā)現(xiàn)并未對app進(jìn)行數(shù)據(jù)備份檢測,安卓AndroidManifest.xml文件中android:allowBackup為true,當(dāng)這個標(biāo)志被設(shè)置成true或不設(shè)置該標(biāo)志位時,應(yīng)用程序數(shù)據(jù)可以備份和恢復(fù),adb調(diào)試備份允許惡意攻擊者復(fù)制應(yīng)用程序數(shù)據(jù)。
在對某app進(jìn)行安全測試時,發(fā)現(xiàn)并未對app進(jìn)行數(shù)據(jù)備份檢測,其AndroidManifest.xml文件中android: allowBackup為true,存在數(shù)據(jù)任意備份漏洞。

連接手機(jī),然后輸入以下備份命令,會出現(xiàn)一個對話窗,輸入備份密碼即可:
adb backup -nosystem -noshared -apk -f com.xxx.wallet com.xxx.wallet

連接到另一臺手機(jī)或root的本機(jī),輸入下列命令,彈出對話框,輸入備份時的密碼即可恢復(fù)數(shù)據(jù)
adb restore com
如果用戶賬號密碼保存在本地,則恢復(fù)到另一臺root的手機(jī)后,可以看到各種敏感信息。
建議設(shè)置AndroidManifest.xml的android:allowBackup標(biāo)志為false。
代碼反編譯檢測
若app的apk文件可被反編譯,就有可能導(dǎo)致源代碼信息泄露,攻擊者也可對其進(jìn)行代碼審計以找出可能存在隱患的攻擊點。
對某app進(jìn)行安全測試時,通過檢測apk文件是否通過加固,代碼是否通過加密或者混淆,是否可以通過反編譯攻擊等方面對該app進(jìn)行測試。發(fā)現(xiàn)該apk文件可被反編譯,反編譯后可以看到j(luò)ava源代碼,導(dǎo)致源代碼信息泄露。(通過jadx-gui或其他反編譯工具可直接操作apk,查看java源代碼。)
建議,可使用專業(yè)加固工具對apk進(jìn)行加殼處理。

敏感權(quán)限使用
目前很多系統(tǒng)在app請求權(quán)限這一方面上都不甚敏感,這也是如今移動端并不那么安全的成因之一。很多app都會請求一些敏感的權(quán)限,有的甚至?xí)苯永@過,不向用戶請求就直接自行取得了權(quán)限。而這些app有可能對用戶都產(chǎn)生足夠的惡意影響。
在對某app進(jìn)行安全測試時,檢測APP程序中是否存在敏感權(quán)限的使用,發(fā)現(xiàn)確實存在敏感權(quán)限使用漏洞。
建議,可使用專業(yè)加固工具對apk進(jìn)行加殼處理。

敏感權(quán)限如下:
- android.permision.WRITE_EXTERNAL_STORAGE 允許應(yīng)用寫入外部存儲
- ndroid.permission.READ_PHONE_STATE 允許訪問電話狀態(tài)、設(shè)備信息
- ndroid.permission.CAMERA 允許訪問攝像頭
- android.permission.GET_TASKS 允許獲取系統(tǒng)應(yīng)用列表
- android.permission.MOUNT_UNMOUNT_FILESYSTEMS 允許掛載、反掛載外部文件系統(tǒng)
建議禁用不需要的敏感權(quán)限。
敏感信息泄露
敏感信息泄露危害極大,如泄露出測試/管理員數(shù)據(jù),參數(shù)注釋信息等。但它又是一種危害雖大卻又較容易避免的漏洞,只要開發(fā)人員多加注重安全意識即可避免大部分問題。
在對某app進(jìn)行安全測試時,查找其 app 程序文件中是否存在敏感信息泄露(如源碼中,備份文件中,xml 資源文件中等),發(fā)現(xiàn)確實存在敏感信息泄露漏洞,源碼中泄露了微信公眾號 appid 和 secretkey:

獲取token:

秘鑰硬編碼安全
被測試的app,若通信存在加密處理,即可檢查源碼或者靜態(tài)資源文件中是否存在硬編碼的加密秘鑰,從而破解通信加密的數(shù)據(jù)。
在對某app進(jìn)行安全測試時,檢查是否存在秘鑰硬編碼漏洞,此app請求數(shù)據(jù)默認(rèn)是通過請求數(shù)據(jù)排列,然后加上appkey加上另外一個秘鑰進(jìn)行md5,再通過算法后去字符串再次md5得到最后的簽名。
這里加密使用的appkey硬編碼到apk中。如下圖:

另一個加密key在so文件中,通過逆向可以獲?。?/p>

這樣一來即可通過修改數(shù)據(jù)后重新簽名構(gòu)造任意數(shù)據(jù)了,加簽也就失去了意義。
(以下為第二個例子。)
在對另一個app進(jìn)行測試時,使用burp工具截取該app傳輸?shù)臄?shù)據(jù)包,發(fā)現(xiàn)響應(yīng)包內(nèi)容已經(jīng)過加密并有base64的特征。

對apk進(jìn)行逆向獲取到加密方式為aes cbc補(bǔ)碼方式為pkcs7。

在反編譯源碼中未查詢到aes秘鑰相關(guān)信息 對apk進(jìn)行解壓 在靜態(tài)資源文件中發(fā)現(xiàn)aes_key與aes_iv。

使用收集到的aes_key與aes_iv 以pkcs7為補(bǔ)碼方式構(gòu)造aes cbc解密獲取到明文數(shù)據(jù)。
數(shù)據(jù)存儲安全
如果安卓手機(jī)用戶的app文件存放在external storage,例如SD卡,那這些文件就是全局可讀寫的,external storage可以被任何用戶操作,且可以被所有的應(yīng)用修改使用。
在對某app進(jìn)行安全測試時,使用動態(tài)方法監(jiān)測/data/data/<packagename>/目錄下所有生成的目錄是否帶有明文信息泄露。
進(jìn)入到/data/data/com.xxx.wallet/shared_prefs目錄,查看config.xml文件,此文件存儲了用戶的支付信息等非常敏感的信息,而這些信息可被其他用戶接觸導(dǎo)致信息被盜取等。
建議,app的敏感數(shù)據(jù)不要存放在external storage,如若不得不這樣做,請對數(shù)據(jù)進(jìn)行加密處理

App組件導(dǎo)出檢測
檢測app中Activity、activity-alias、service、receiver組件對外暴露情況,如果檢測到組件的exported屬性為true或者未設(shè)置,而且組件的permission屬性為normal或者dangerous或者未設(shè)置組件的permission屬性時,app將存在組件導(dǎo)出漏洞,導(dǎo)致數(shù)據(jù)泄露和惡意的dos攻擊以及釣魚攻擊。
在對某app進(jìn)行安全測試時,檢測到該app存在Activity組件導(dǎo)出漏洞。
檢測app中Activity、activity-alias、service、receiver組件對外暴露情況,先檢測組件的exported屬性,再檢測組件的permission對應(yīng)的protectionlevel屬性。

具體檢測存在漏洞的方法如下:

建議:
- 最小化組件暴露。對不會參與跨應(yīng)用調(diào)用的組件添加android:exported=”false”屬性。
- 設(shè)置組件訪問權(quán)限。對跨應(yīng)用間調(diào)用的組件或者公開的receiver、service、activity和activity-alias設(shè)置權(quán)限,同時將權(quán)限的protectionLevel設(shè)置為”signature”或”signatureOrSystem”。
- 組件傳輸數(shù)據(jù)驗證。對組件之間,特別是跨應(yīng)用的組件之間的數(shù)據(jù)傳入與返回做驗證和增加異常處理,防止惡意調(diào)試數(shù)據(jù)傳入,更要防止敏感數(shù)據(jù)返回。
SQLite 存儲安全
此類安全問題的檢測,使用adb工具將sqlite數(shù)據(jù)庫拖到本地,使用sqlite數(shù)據(jù)庫連接軟件查看是否存在敏感數(shù)據(jù)即可。如下為測試某app發(fā)現(xiàn)的漏洞范例。
