來自FreeBuf.COM
連結:http://www.freebuf.com/articles/terminal/161599.html
*參考來源:OWASP基金會
寫在前面
最近研究了下Android應用測試,找了一些資料,覺得OWASP這篇寫的還是比較系統的,所以翻譯出來給大家分享下。文中的翻譯盡可能保持原文格式,但一些地方為了通順和易於理解也做了一定改動,如有翻譯問題,還請各位大牛指正。本文翻譯時版本是20170911,後續如果有大更新的話同樣會跟進更新。
介紹
這份速查表提供了一份進行Android應用測試所需要進行的測試清單。主要根據OWASP十大移動安全問題進行敘述。
1.1. 測試方法論
一個完整的安卓應用滲透測試包含了幾個不同的領域,如上圖所示。
1.1.1. 應用架構
在這個領域,重點在於理解應用程式邏輯和應用程式到底是做什麼的。這包含了一些手動測試專案,我們會進行一些基本操作例如安裝APK到手機上,登入並且瞭解APP的功能。
瞭解應用的架構,並尋找可能的攻擊向量例如:
1.應用程式的型別是什麼?(遊戲,商業,生產力等等)
2.應用程式是否連線到後臺的Web服務?
3.應用程式是完全自行編寫還是使用了現有框架?
4.應用程式是否在裝置上儲存資料?
5.應用程式都使用了裝置上的哪些功能?(攝像頭,陀螺儀,通訊錄等等)
1.1.2. 客戶端攻擊
這是滲透測試過程中最具挑戰性和激動人心的部分。安卓APP被打包成APK檔案,也被稱為Android Package Kit或Android Application Package。作為滲透測試人員的任務就是確認應用程式在面對已知攻擊向量時,現有的防護機制是否有效。安卓的移動應用通常是透過例如Google Play的平臺進行分發。自從應用完全安裝在客戶端上以後,它就需要承受來自客戶端的任何種類攻擊。
1.1.3. 網路攻擊
正如我們需要識別客戶端中的漏洞,透過分析流量來確認客戶端和伺服器端的通訊是否安全也是十分必要的。為達到這個目的,使用代理工具,評估潛在的SSL問題,以及分析Wireshark抓包檔案都是進行評估工作的必要組成部分。
1.1.4. 服務端攻擊
最後但重要的是,服務端層面的問題同樣會影響應用程式的安全。一些不安全的實現例如錯誤配置,存在漏洞和問題的API或資料庫層面的問題,同樣會影響到應用的安全性
在裝置層面,應用需要以兩種方式進行測試。逆向工程是移動應用測試的必要組成部分。這需要一臺已經ROOT的裝置。如果對為什麼我們需要對已安裝的APK進行逆向工程比較疑惑,主要原因在於客戶端上。
1.2. 裝置
同樣有兩種方法測試應用程式,我們需要考慮在測試中具體使用哪種方法。
1.安卓裝置執行在出廠裝置或普通樣式下測試
2.安卓裝置執行在ROOT樣式下測試
在應用層面,應當以兩種方式進行測試
1.應用程式在真實裝置中執行(有利於測試觸控相關特性)
2.應用程式在模擬器中執行(使用臺式或筆記本的大屏有利於進行測試)
OWASP入門指南
對於下麵的每個標準,測試人員應遵循多個步驟進行測試
2.1. M1-平臺使用不當【客戶端攻擊】
l 檢查AndroidManifest.xml許可權配置,某些許可權配置可能是危險的。
l 如果應用使用了指紋識別,根據此特性測試不同的漏洞。參考https://www.blackhat.com/docs/us-15/materials/us-15-Zhang-Fingerprints-On-Mobile-Devices-Abusing-And-Leaking-wp.pdf
2.2. M2-不安全的資料儲存【客戶端攻擊】
這部分測試應該在使用應用一段時間以後進行,以便充分測試。這種方式需要給予應用將一些資料儲存在磁碟上所需的時間。這可能需要一個已經ROOT的安卓裝置,以便能訪問安卓中的例如’/sdcard’的常見路徑。
/data/data/app_folder/sdcard//sdcard1/
安卓應用程式需要在本地以sqllite或XML結構儲存資料,因此需要執行SQL/XML查詢或監控檔案I/O。
由此可能造成2種主要威脅。
1.SQL/XML註入,並且如果讀取標的是公開的,那另一個應用也可能讀取此資料。
2.本地檔案讀取可能允許其他應用程式讀取相關應用程式檔案,如果它們包含敏感資料,那資料可能透過此途徑洩露。
如果應用程式是一個HTML5的混合應用程式,則還需要考慮跨站指令碼(XSS)問題。XSS會將整個應用程式暴露給攻擊者,因為HTML5應用程式能夠呼叫本機功能,從而控制整個應用(WebView)。
另外,應用程式可以使用“adb backup”的選項來製作應用程式的備份,透過分析備份內容可以識別當與客戶端進行互動的時候,應用程式儲存和洩露了什麼。
2.3. M3-網路層保護不足【網路/流量攻擊】
這裡提供對不同層面進行測試的方法。
2.3.1. 伺服器側
l 識別所有SSL終端。
l 使用(sslscan)或類似軟體識別SSL加密方式
l 是否禁用SSLv2,SSLv3
l 是否支援TLS1.2和1.1(1.2對於確保盡可能高的安全連線十分重要)
l 是否禁用RC4和基於CBC的加密演演算法
l DH引數應當>2048位
l SSL證書應當至少使用sha2/sha256簽署
l ECDHE金鑰/金鑰應當支援完全正向保密
l SSL證書應當由受信任的RootCA簽發
l SSL證書不應過期
l 驗證行程間通訊實現是否存在問題
2.3.2. 裝置側
l 透過瀏覽確認應用是否正常工作
l 在應用程式和遠端伺服器間設定代理。如果應用無法載入,應用程式可能進行了證書校驗。註意logcat(譯者註:logcat是Android中一個命令列工具,可以用於得到程式的log資訊。)是否有訊息輸出
l 將代理使用的RootCA證書新增至裝置受信任的RootCA串列。
l 嘗試再次使用應用。如果應用仍然無法連線,應用程式可能使用了證書系結。
你可以透過攔截或修改Smali程式碼來繞過證書系結
2.3.2.1. 使用Xposed:
l 安裝Xposed Framework以及Just Trust Me模組(譯者註:用於禁用SSL證書驗證),啟用JustTrustMe然後重啟裝置。
l 再試一次如果一切正常那我們就透過使用Xposed模組成功繞過了證書系結。
l 目前安卓的安全提供程式(Securityprovider)已經針對SSL漏洞進行了適當更新。
2.3.2.2. 修改SMALI:
l 識別/搜尋實現證書系結的方法(查詢關鍵字例如’sha256/‘後面跟著證書值類似於”sha256/wl0L/C04Advn5NQ/xefY1aCEHOref7f/Q+sScuDcvbg=”)
l 將證書系結值改變為你使用的BURP證書所對應的值。
2.4. M4-不安全的認證【客戶端/服務端攻擊】
在這個部分的測試中,需要有一些必要的工具以進行評估。
l 代理工具如ZAP,BURP或者Charles
l 用於流量分析的Wireshark
透過分析客戶端和伺服器間的流量(HTTP請求/響應),註意檢查以下專案
l 分析會話管理和工作流
l 使用代理分析API認證
l 不安全的WebView
l 檢查憑據是存放在資料儲存還是伺服器端
l 濫用或可訪問AccountManager(安卓的使用者管理類)
l Authenticating Callers元件呼叫
不正確的會話處理通常會和糟糕的身份驗證帶來同樣結果。當你透過認證並給予一個會話資訊時,這個會話資訊允許你訪問移動應用。這裡有很多東西需要註意
l 檢查並驗證後端的會話
l 檢查會話超時保護
l 檢查不正確的Cookie配置
l 不安全的令牌建立
l 不安全的WebView實現
2.5. M5-加密不足【客戶端/網路/服務端攻擊】
在這個部分,你需要在使用加密的地方進行列舉以執行一個全面分析。例如:
使用SSL/TLS加密型別
l 使用HTTPS URL或使用一個安全通道例如實現HttpsURLConnection或SSLSocket
l 身份驗證會話令牌
l 在資料儲存中明文存放敏感資訊
l 可以訪問加密金鑰或不正確的金鑰管理
l 使用已知的弱加密演演算法例如Rot13, MD4,MD5, RC2, RC4, SHA1
l 自製或自行設計的加密演演算法
l 程式程式碼內硬編碼金鑰
l 使用自有協議
l 不安全的使用隨機生成器
2.6. M6-不安全的授權【客戶端/服務端攻擊】
在對應用程式架構和資料流有所理解後,可以依照以下方法驗證授權機制:
l 憑據處理:應用程式是否使用授權令牌而不是始終詢問憑證?
l 驗證應用程式是否僅允許指定角色訪問。
l 在資料儲存中儲存使用者名稱密碼,而不是使用AccountManager
2.7. M7-客戶端程式碼質量【客戶端攻擊】
這部分有兩種方法:
l 如果你可以訪問原始碼,對客戶端程式碼和伺服器API進行程式碼審計。
l 如果不能訪問原始碼,你可以透過反編譯APK檔案來檢查程式碼
在這個案例裡我們強烈建議進行程式碼審計。由於不正確的實現,這裡肯定會有很多潛在的漏洞。
2.8. M8-程式碼篡改【客戶端攻擊】
這一部分你需要一臺已經root的裝置以及逆向工程技術。
l 使用工具例如apktool, dex2jar /enjarify, Bytecodeviewer或商業工具類似JEB反編譯APK檔案。
l 使用反編譯器例如JD-GUI或Bytecodeviewer分析程式碼。商業版本的工具類似JEB甚至允許你除錯已經反編譯的應用,雖然不是所有情況都可以。
l 在分析完程式碼後,嘗試繞過各類功能,無論是透過Xposed或Frida框架修改Smali程式碼還是劫持方法實現。
l 驗證應用程式是否進行了混淆並且透過搜尋指定字串驗證混淆級別。
l 反編譯APK並更改Smali(利用這個工具,它可以自動反編譯,編譯和簽名應用。https://github.com/voider1/a2scomp)
l 安卓的二進位制檔案本質上是dex類,如果不加保護,可以直接反編譯出原始碼。
需要進行檢查和驗證是否有以下限制:
l 已越獄,Root後的裝置-檢測限制
l 校驗和限制
l 證書系結限制
l 除錯器檢測限制
l Xposed檢測限制
l 動態載入程式碼
l 使用安卓NDK中原生程式碼
2.9. M9-逆向工程【客戶端攻擊】
逆向工程在移動應用測試中是一個必要部分。它同樣需要使用一部已經Root的裝置。為了這部分測試請確保你已經準備了以下工具:
l 已安裝SDK工具的Android Studio
l 一部已經Rooted的安卓裝置或模擬器
l 已經Root的安卓模擬器可以使用已安裝Xposed的CuckoDroid
l 安裝了不同的APK反編譯工具例如apktool,Dex2Jar/enjarify或選擇整合環境的話可以是Bytecodeviewer或JEB
l IDA pro (分析程式碼流程)
l Smali反編譯器/編譯器以及簽名程式:https://github.com/voider1/a2scomp
驗證以下問題:
l 應用程式是否進行了混淆?
l 利用工具Bytecodeviewer或JEB查詢關鍵字串以及關鍵詞
l 搜尋SSL證書系結實現,裝置Root許可權獲取或API連線(查詢關鍵字例如’TrustManager’ , ‘SHA256’, X509 ,SHA, SSL ,更多細節請查閱安卓安全概覽https://developer.box.com/docs/android-security-guidelines)
2.10. M10-多餘的功能
進行這部分的測試需要進行程式碼審計或對APK進行逆向工程(如果無法獲得程式碼)
作者和主要編輯者
l Jonathan Carter
l Prashant Phatak
l Milan Singh Thakur
l Anant Shrivastava
l Johanna Curiel
●本文編號294,以後想閱讀這篇文章直接輸入294即可
●輸入m獲取到文章目錄
駭客技術與網路安全
更多推薦《18個技術類公眾微信》
涵蓋:程式人生、演演算法與資料結構、駭客技術與網路安全、大資料技術、前端開發、Java、Python、Web開發、安卓開發、iOS開發、C/C++、.NET、Linux、資料庫、運維等。