標籤:

APP測試練手筆記(1)代碼保護與應用配置

APP測試練手筆記(1)代碼保護與應用配置

來自專欄 Zero-Security-Team4 人贊了文章

進入安全圈成為一名混子後的最大感受:緊張

尤其是乙方安服一天出兩份報告,而我偶爾出一份的時候。

以及師傅對我說:「這個站有好多漏洞,你待會好好看看的時候」

MMP,你們怎麼回事,還讓不讓人快樂的摸魚了。

言歸正傳,還是好好記錄下自己最近學習移動應用安全測試的流程吧,就當做筆記了,順便應付下李哥,畢竟當初說過要好好搞專欄的,一鴿就是兩月。。。。


目前的移動應用越來越多,應用市場裡面,各種奇葩功能的APP都有,來YY一個場景,看你在這個時間段,使用了多少應用。

首先假設你有一個女朋友,你今天要跟她出去約會。約會總不能幹聊天吧,淘票票買電影票對吧,美團得找個吃飯的地方把。離開家去約會地點得滴一下吧。微信聊天總不能不回吧,你見到女友後,進行各種活動的時候得拍照P圖吧,兩人玩半天總有累的時候,是該地圖上找個附近的房間休息一會兒吧,這時候得去小超市買點東西吧,哦豁,你的花唄又該派上用場了。

所以說你就光找女朋友玩個一天就得用上數個應用,花上***錢。

要是你使用的這些應用存在漏洞呢,泄露了某些無意義的數據還好,要是涉及到某些私密的東西就比較刺激了。

雖然可能沒有Web那麼頻繁,但是關於android app的安全漏洞也在不斷地出現,在面對一個安卓應用時,如何對它進行安全測試呢。

一. APP安全測試關注點

1) 敏感數據暴露

1 明文傳輸用戶名、密碼和驗證碼等敏感信息

2 不安全的本地存儲

3 泄漏後台伺服器地址,導致伺服器可控(如果該項產生問題,可以轉入Web方式進行測試

4 邊信道信息泄露

2) 鑒權機制缺陷

5 未使用有效的 token 機制,導致可以繞過鑒權(舉個簡單的列子,返回包修改,繞過登錄限制

6 傳輸數據可修改,造成越權訪問

7 登錄設計缺陷,存在被暴力破解風險

8 利用業務邏輯缺陷製作簡訊炸彈

3) 釣魚劫持風險

9 關鍵頁面存在釣魚劫持風險,導致用戶信息泄露

4) 代碼層面保護不足

10 可以重新編譯,自簽名打包

11 WebView 漏洞

12 Web表單設計缺陷,存在SQL注入等漏洞。(其實struts2,上傳等Web方面的常規漏洞也是存在的

5)公共組件漏洞

13 組件 Content Provider 配置錯誤,導致數據泄漏(這個組件還會引起sql注入,敏感目錄列表,還可以查看與下載敏感文件,比如etc/shadow等

14 組件 Activity 配置錯誤,導致登錄頁面被繞過(這個組件出問題的話,可以導致一些需要手勢,賬戶密碼等鑒權的頁面被繞過

15 組件 Service 配置錯誤,導致非法許可權提升

16 組件 Broadcast Receiver 配置錯誤,導致拒絕服務、非法越權

6)應用配置錯誤

17 開啟 allowbackup 備份許可權,存在備份數據泄露風險

18 開啟 Debuggable 屬性,存在應用信息篡改泄露風險

7)XcodeGhost 病毒

19 下載非官方開發工具,導致 IOS 版本 APP 被植入惡意代碼(這個比較有名,但是是屬於IOS安全的範疇,還要拖入IDA進行逆向分析,而由於自身能力不足。貧窮等諸多原因,從來沒關注過這一項

8)開發者證書不規範

二. APP安全測試流程

你以為我會嚴格照著上面的流程來測?不存在的,一會兒反編譯,一會ADB調試的,一會兒又抓包的,多累啊(關鍵是我不太熟練),下面我主要分代碼與應用配置,四大組件,以及APP業務邏輯與常規漏洞三個方面來做個練習。(ps: 全程以某個誘導充錢的約炮APP為例)

1) 代碼與應用配置方面的問題:

(1)代碼保護不足,可重新編譯打包

問題描述:破解者通過反編譯後得到程序源代碼,修改後重新編譯、簽名並安裝。

在重新打包的過程中,破解者可能注入惡意代碼,或者修改軟體邏輯繞過鑒權等。

步驟:首先使用ApkTool對目標APK文件進行反編譯(加殼的暫未學習)

命令:apktool.bat d -f target.apk -o outputfile

然後會在目標文件夾下生成反編譯好的文件,其中重點關注的是AndroidManifest.xml這個配置文件。其他的assets,lib,res等則是一些資源,以及庫文件。例外要記住的一點是,使用Apktool反編譯生成的並不是java源碼,而是smali文件。

反編譯完成之後,我們嘗試修改其中某些應用圖標文件,看看能夠重新進行編譯,並實現簽名安裝:

重新編譯依舊使用ApkTool : java -jar apktool.jar b APKFile

重新打包之後,可以在DIST文件夾里看到APK文件

接著使用用 ApkToolBox 對未簽名的 APK 文件進行簽名

最後進入虛擬機裡面安裝看看,是否存在一定的完整性驗證機制。

效果:可以正常安裝,但是TM的我寫的那兩小字不見了,不知道是字太小了,還是啥原因。

整改建議:通過檢查程序安裝後 classes.dex 文件的 Hash 值,判斷軟體是否被重

打包並進行提示

(2) allowbackup 備份許可權是否存在數據泄露風險

問題描述:被測應用的 AndroidManifest.xml 文件中 allowBackup 屬性值被設置

為 true,可通過 adb backup 對應用數據進行備份,在無 root 的情況下可以導出用戶存儲數據,造成數據泄露。

步驟:在配置文件中查看allowBackup的設置

很不幸:漏洞存在,實錘了。

整改建議 將參數 android:allowBackup 屬性設置為 false,防止數據泄漏

(3)Debuggable 屬性是否存在應用信息篡改泄露風險

問題描述:被測應用的 AndroidManifest.xml 文件中 Debuggable 屬性值被設置為

true,可以設置斷點來控制程序的執行流程,在應用程序運行時修改其行為。

步驟:在 AndroidManifest.xml 中搜索 Debuggable 屬性,檢查是否被設置為 true。

經驗證,好像Debuggable沒有打開。。。。

(4)信任所有證書漏洞。

問題描述:很早以前提出的漏洞,在安卓配置文件中直接選擇信任所有證書(不論是官方CA還是個人的自簽名證書,沒有對證書的安全性進行檢查,可以導致中間人攻擊和劫持)

步驟:將APK拖入JEB,改之理,androidKiller等工具進行反編譯,全局搜索ALLOW_ALL關鍵字(現在安卓SDK都升級到高版本了,基本上不存在這個東西了吧)

整改建議: 升級使用的存在安全問題的SDK.改SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER為SSLSocketFactory.STRICT_HOSTNAME_VERIFIER驗證。

(5)開發者證書規範測試

問題描述:主要是查看證書是否滿足規範性,是否過期。

步驟: JEB CA查看頁面, java JDK 自帶的keytool工具

只有個地名,emmmmmm.

(6)關鍵頁面是否存在釣魚劫持風險,導致用戶信息泄露

問題描述:劫持釣魚,指惡意應用針對正常應用的特定界面進行仿冒替換,誘騙

用戶在仿冒界面操作,達到釣魚目的。此類攻擊,多針對 APP 的鑒權或支付場

景,誘騙用戶輸入關鍵隱私信息,如賬號、登陸密碼和支付密碼等,達到隱私竊

取的目的。

步驟:獲取棧頂 Activity 名稱,查看關鍵 Activity 是否可被釣魚劫持。

測試包含敏感信息的界面(登錄,支付等)查看是否有加釣魚劫持保護,如

提示用戶等。

經過測試,未發現有劫持問題。或許是我側漏了?

整改建議:

1.當應用程序具有支付等敏感頁面時,通過獲取棧頂 Activity,判斷當前運行

的是否本程序,一旦發現應用被切換(可能被劫持),給予用戶提示以防範釣魚程序的欺詐。建議在關鍵類的 onpause 中實現釣魚劫持防護功能。

2.使用 HTML5 架構或 android+HTML5 混合開發,實現登陸、支付等關鍵頁面,降低被劫持的風險。

(7)WebView 漏洞

問題描述:在 webView 下有一個非常特殊的介面函數 addJavascriptInterface,能實現本地 java 和 js 的交互。被測應用中存在 WebView 漏洞,沒有對註冊 JAVA類的方法調用進行限制,導致攻擊者利用 addJavascriptInterface 這個介面函數穿透 webkit 控制 android 本機。

檢查方法和步驟:利用反編譯軟體 dex2jar 和 jdgui.exe 得到java源代碼。然後全局搜索addJavascriptInterface介面,判斷版本,以及是否存在過濾。

Android sdk int > 17 => Android 4.2以上,做了版本限制

整改建議:

1.Android 4.2 之前版本對 addJavascriptInterface 的輸入參數進行過濾;

2.Android 4.2 及之後版本,使用聲明 @JavascriptInterface 來代替

addjavascriptInterface。

3.控制相關許可權或者儘可能不要使用 js2java 的 bridge。

(8)不安全的本地存儲

問題描述:安卓開發者使用多種方法將數據存儲在安卓應用中,而存儲在本地的

數據文件如果未加密,易造成敏感信息泄漏。

檢查方法和步驟:

1. Shared Preferences 是用 key‐value 來存儲私有的原始數據的 xml 文件。數據類

型有布爾型,浮點型,整形,長整型和字元串。存儲的路徑為:/data/data/<package name>/shared_prefs/<filename.xml>。直接打開查看是否有敏感數據

2.SQLite 資料庫是輕量級基於文件的資料庫。這些文件通常以db或者sqlite 結尾。安卓默認提供了大量 SQLite 支持。應用的資料庫一般存儲在下面的地方:/data/data/<package name>/databases/<databasename.db>,可以使用 SQLite 資料庫直接打開查看是否有敏感數據

3. 檢查 SD 卡目錄中是否存在敏感數據。

整改建議:對存儲在本地的數據文件進行加密。

(9)邊信道信息泄露

問題描述:當 APP 處理用戶或其它數據源輸入的數據時,可能會把數據放在不

安全的位置,容易導致邊信道被攻擊者利用造成信息泄露

檢查方法和步驟:adb logcat > output.txt

adb logcat|grep 「cookie」

這個APP本來就是用來騙傻子充錢的,手機註冊功能,密碼找回等功能點都沒有,唯一功能點就是能夠充值VIP。所以測試的時候邊信道信息泄露暫時沒有發現。

整改建議:

1. 在日誌中對於密碼等敏感信息進行加密存儲。

2. 對敏感信息的緩存進行加密


針對APP的代碼保護與應用配置測試就記錄到這裡,下一篇更新有關四大組件的安全測試。


推薦閱讀:

使用Netcat進行黑客攻擊
Win7網路安全 禁止不良頁面自動下載
美國國家網路空間安全態勢感知協調機制
黑客如何用谷歌伺服器儲存惡意文件並上傳Web shell
工具介紹 Shellsploit,ShellCode生成器

TAG:網路安全 |