App安全問題
- App 運(yùn)行時(shí)虛擬機(jī)監(jiān)測(cè)
- App 運(yùn)行時(shí)root監(jiān)測(cè)
- App數(shù)據(jù)備份檢測(cè)
- 代碼反編譯檢測(cè)
- 敏感權(quán)限使用
- 敏感信息泄露
- 拒絕服務(wù)測(cè)試
- 目錄穿越安全測(cè)試
- App 緩存安全檢測(cè)
- 接口安全測(cè)試
- 弱加密安全測(cè)試
- 秘鑰硬編碼安全檢測(cè)
- 數(shù)據(jù)存儲(chǔ)安全檢測(cè)
- 數(shù)據(jù)傳輸安全檢測(cè)
- 日志信息泄露檢測(cè)
- App組件導(dǎo)出檢測(cè)
- App組件權(quán)限檢測(cè)
- webview 多項(xiàng)漏洞安全測(cè)試
- App Webview DOM 安全測(cè)試
- 本地SQL注入安全測(cè)試
- SQLite 存儲(chǔ)安全審計(jì)
案件分析
APP運(yùn)行時(shí)虛擬機(jī)檢測(cè)
該app未進(jìn)行虛擬機(jī)運(yùn)行檢測(cè),攻擊者在虛擬機(jī)中安裝運(yùn)行該app,即可在虛擬機(jī)中截取并操作數(shù)據(jù)包或進(jìn)行其他有害操作田度。
APP數(shù)據(jù)備份檢測(cè)
在對(duì)某app進(jìn)行安全測(cè)試時(shí)幕庐,發(fā)現(xiàn)并未對(duì)app進(jìn)行數(shù)據(jù)備份檢測(cè),安卓AndroidManifest.xml文件中android:allowBackup為true骤素,當(dāng)這個(gè)標(biāo)志被設(shè)置成true或不設(shè)置該標(biāo)志位時(shí)匙睹,應(yīng)用程序數(shù)據(jù)可以備份和恢復(fù),adb調(diào)試備份允許惡意攻擊者復(fù)制應(yīng)用程序數(shù)據(jù)济竹。
在對(duì)某app進(jìn)行安全測(cè)試時(shí)痕檬,發(fā)現(xiàn)并未對(duì)app進(jìn)行數(shù)據(jù)備份檢測(cè),其AndroidManifest.xml文件中android: allowBackup為true规辱,存在數(shù)據(jù)任意備份漏洞谆棺。
連接手機(jī),然后輸入以下備份命令罕袋,會(huì)出現(xiàn)一個(gè)對(duì)話窗改淑,輸入備份密碼即可:
adb backup -nosystem -noshared -apk -f com.xxx.wallet com.xxx.wallet
連接到另一臺(tái)手機(jī)或root的本機(jī),輸入下列命令浴讯,彈出對(duì)話框朵夏,輸入備份時(shí)的密碼即可恢復(fù)數(shù)據(jù)
adb restore com
如果用戶賬號(hào)密碼保存在本地,則恢復(fù)到另一臺(tái)root的手機(jī)后榆纽,可以看到各種敏感信息仰猖。
建議設(shè)置AndroidManifest.xml的android:allowBackup標(biāo)志為false。
代碼反編譯檢測(cè)
若app的apk文件可被反編譯奈籽,就有可能導(dǎo)致源代碼信息泄露饥侵,攻擊者也可對(duì)其進(jìn)行代碼審計(jì)以找出可能存在隱患的攻擊點(diǎn)。
對(duì)某app進(jìn)行安全測(cè)試時(shí)衣屏,通過檢測(cè)apk文件是否通過加固躏升,代碼是否通過加密或者混淆,是否可以通過反編譯攻擊等方面對(duì)該app進(jìn)行測(cè)試狼忱。發(fā)現(xiàn)該apk文件可被反編譯膨疏,反編譯后可以看到j(luò)ava源代碼,導(dǎo)致源代碼信息泄露钻弄。(通過jadx-gui或其他反編譯工具可直接操作apk佃却,查看java源代碼。)
建議窘俺,可使用專業(yè)加固工具對(duì)apk進(jìn)行加殼處理饲帅。
敏感權(quán)限使用
目前很多系統(tǒng)在app請(qǐng)求權(quán)限這一方面上都不甚敏感,這也是如今移動(dòng)端并不那么安全的成因之一。很多app都會(huì)請(qǐng)求一些敏感的權(quán)限洒闸,有的甚至?xí)苯永@過染坯,不向用戶請(qǐng)求就直接自行取得了權(quán)限。而這些app有可能對(duì)用戶都產(chǎn)生足夠的惡意影響丘逸。
在對(duì)某app進(jìn)行安全測(cè)試時(shí)单鹿,檢測(cè)APP程序中是否存在敏感權(quán)限的使用,發(fā)現(xiàn)確實(shí)存在敏感權(quán)限使用漏洞深纲。
建議仲锄,可使用專業(yè)加固工具對(duì)apk進(jìn)行加殼處理。
敏感權(quán)限如下:
- android.permision.WRITE_EXTERNAL_STORAGE 允許應(yīng)用寫入外部存儲(chǔ)
- 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)限。
敏感信息泄露
敏感信息泄露危害極大币呵,如泄露出測(cè)試/管理員數(shù)據(jù)怀愧,參數(shù)注釋信息等。但它又是一種危害雖大卻又較容易避免的漏洞余赢,只要開發(fā)人員多加注重安全意識(shí)即可避免大部分問題芯义。
在對(duì)某app進(jìn)行安全測(cè)試時(shí),查找其 app 程序文件中是否存在敏感信息泄露(如源碼中妻柒,備份文件中扛拨,xml 資源文件中等),發(fā)現(xiàn)確實(shí)存在敏感信息泄露漏洞举塔,源碼中泄露了微信公眾號(hào) appid 和 secretkey:
獲取token:
秘鑰硬編碼安全
被測(cè)試的app绑警,若通信存在加密處理,即可檢查源碼或者靜態(tài)資源文件中是否存在硬編碼的加密秘鑰央渣,從而破解通信加密的數(shù)據(jù)计盒。
在對(duì)某app進(jìn)行安全測(cè)試時(shí),檢查是否存在秘鑰硬編碼漏洞芽丹,此app請(qǐng)求數(shù)據(jù)默認(rèn)是通過請(qǐng)求數(shù)據(jù)排列章郁,然后加上appkey加上另外一個(gè)秘鑰進(jìn)行md5,再通過算法后去字符串再次md5得到最后的簽名志衍。
這里加密使用的appkey硬編碼到apk中。如下圖:
另一個(gè)加密key在so文件中聊替,通過逆向可以獲嚷シ尽:
這樣一來即可通過修改數(shù)據(jù)后重新簽名構(gòu)造任意數(shù)據(jù)了,加簽也就失去了意義惹悄。
(以下為第二個(gè)例子春叫。)
在對(duì)另一個(gè)app進(jìn)行測(cè)試時(shí),使用burp工具截取該app傳輸?shù)臄?shù)據(jù)包,發(fā)現(xiàn)響應(yīng)包內(nèi)容已經(jīng)過加密并有base64的特征暂殖。
對(duì)apk進(jìn)行逆向獲取到加密方式為aes cbc補(bǔ)碼方式為pkcs7价匠。
在反編譯源碼中未查詢到aes秘鑰相關(guān)信息 對(duì)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ù)存儲(chǔ)安全
如果安卓手機(jī)用戶的app文件存放在external storage踩窖,例如SD卡,那這些文件就是全局可讀寫的晨横,external storage可以被任何用戶操作洋腮,且可以被所有的應(yīng)用修改使用。
在對(duì)某app進(jìn)行安全測(cè)試時(shí)手形,使用動(dòng)態(tài)方法監(jiān)測(cè)/data/data/<packagename>/目錄下所有生成的目錄是否帶有明文信息泄露啥供。
進(jìn)入到/data/data/com.xxx.wallet/shared_prefs目錄,查看config.xml文件库糠,此文件存儲(chǔ)了用戶的支付信息等非常敏感的信息伙狐,而這些信息可被其他用戶接觸導(dǎo)致信息被盜取等。
建議瞬欧,app的敏感數(shù)據(jù)不要存放在external storage贷屎,如若不得不這樣做,請(qǐng)對(duì)數(shù)據(jù)進(jìn)行加密處理
App組件導(dǎo)出檢測(cè)
檢測(cè)app中Activity黍判、activity-alias豫尽、service、receiver組件對(duì)外暴露情況顷帖,如果檢測(cè)到組件的exported屬性為true或者未設(shè)置美旧,而且組件的permission屬性為normal或者dangerous或者未設(shè)置組件的permission屬性時(shí),app將存在組件導(dǎo)出漏洞贬墩,導(dǎo)致數(shù)據(jù)泄露和惡意的dos攻擊以及釣魚攻擊榴嗅。
在對(duì)某app進(jìn)行安全測(cè)試時(shí),檢測(cè)到該app存在Activity組件導(dǎo)出漏洞陶舞。
檢測(cè)app中Activity嗽测、activity-alias、service肿孵、receiver組件對(duì)外暴露情況唠粥,先檢測(cè)組件的exported屬性,再檢測(cè)組件的permission對(duì)應(yīng)的protectionlevel屬性停做。
具體檢測(cè)存在漏洞的方法如下:
建議:
- 最小化組件暴露晤愧。對(duì)不會(huì)參與跨應(yīng)用調(diào)用的組件添加android:exported=”false”屬性。
- 設(shè)置組件訪問權(quán)限蛉腌。對(duì)跨應(yīng)用間調(diào)用的組件或者公開的receiver官份、service只厘、activity和activity-alias設(shè)置權(quán)限,同時(shí)將權(quán)限的protectionLevel設(shè)置為”signature”或”signatureOrSystem”舅巷。
- 組件傳輸數(shù)據(jù)驗(yàn)證羔味。對(duì)組件之間,特別是跨應(yīng)用的組件之間的數(shù)據(jù)傳入與返回做驗(yàn)證和增加異常處理钠右,防止惡意調(diào)試數(shù)據(jù)傳入赋元,更要防止敏感數(shù)據(jù)返回。
SQLite 存儲(chǔ)安全
此類安全問題的檢測(cè)爬舰,使用adb工具將sqlite數(shù)據(jù)庫拖到本地们陆,使用sqlite數(shù)據(jù)庫連接軟件查看是否存在敏感數(shù)據(jù)即可。如下為測(cè)試某app發(fā)現(xiàn)的漏洞范例情屹。