雲棲號資訊:【點擊查看更多行業資訊】
在這裏您能夠找到不一樣行業的第一手的上雲資訊,還在等什麼,快來!
前端
1、前言算法
移動互聯網應用程序(Mobile APP,如下簡稱「APP」或「移動APP」)安全早已成爲信息安全領域中廣受關注的熱點話題。做爲安全檢測人員,在平常測試工做中常常涉及移動APP的安全檢測,在此結合相關移動APP檢測標準和工做經驗,從滲透測試角度,對移動APP的檢測進行概要性總結說明。shell
2、目標分析編程
移動APP的安全問題與傳統桌面軟件有所不一樣。雖然現代移動操做系統(如Android和iOS)已比較注重安全防禦,但若是APP開發人員在開發移動應用程序時不全面仔細地考慮安全性,APP仍可能會存在可被利用的安全漏洞,從而面臨安全威脅。移動APP滲透測試目的就是充分分析和挖掘移動APP和相關係統存在的安全問題,進而幫助其進行修復,提高安全性,保護用戶信息。安全
從業務上來看,在移動APP架構中,面臨安全威脅的目標 / 路徑主要有三個,它們分別是:移動APP、數據傳輸和服務端。服務器
3、面臨的威脅網絡
1. 客戶端架構
客戶端(移動APP)主要面臨的威脅包括反編譯、調試、篡改/重打包、輸入記錄、組件安全、注入和Hook、本地敏感數據泄露等。併發
(1) 反編譯框架
對一個軟件進行分析能夠分爲靜態分析和動態分析兩大部分。反編譯是靜態分析的一種基礎手段。高級編程語言源代碼通過編譯變成可執行文件,反編譯就是其逆過程。經過反編譯和逆向,能夠在沒有軟件源碼的狀況下了解其內部實現細節,進行漏洞挖掘和算法分析等。移動APP測試,常見的測試對象是Android APP和iOS APP,因爲應用結構、構建工具鏈等差別,Android APP和iOS APP的逆向分析、反編譯技術方法均不盡相同。常見的反編譯工具備IDA Pro及相關Decompiler插件、Radare2 、Ghidra、JD-GUI、Smali/Baksmali、dex2jar、Hopper等等。
(2) 調試
調試是軟硬件開發人員用於排查軟件錯誤的一種手段,也是安全檢測人員進行動態分析的一種基本方式。從調試對象來看,調試可分爲硬件調試和軟件調試。對於移動APP,安全檢測工程師通常只需進行軟件調試。軟件調試又可分爲源碼級調試和非源碼級調試。在獲取不到源碼的狀況下,通常只能先作非源碼級調試。經過調試,安全檢測工程師能夠動態地分析APP內部原理和行爲。移動APP檢測中,常見的APP調試工具備IDA Pro、GDB、LLDB、ADB、JDB和Cycript等。
(3) 篡改/重打包
Android和iOS應用在正式發佈前需進行數字簽名,在安裝時系統會對APP簽名進行檢查,檢查經過才能成功安裝運行。這可在必定程度上保護APP不被篡改。但因爲簽名驗籤機制不少技術都是公開的,被研究的比較透徹,再加上不一樣平臺的簽名機制對APP限制程度各不相同,對安全性要求比較高的APP若是隻依靠系統層面的簽名保護進行防篡改/重打包還遠遠不夠。滲透測試過程當中,有時咱們爲了更好的分析APP,也須要對APP進行修改重打包,而後利用相應平臺的工具進行從新簽名,最後安裝運行。相應的工具備:apktool、apksigner 、signapk、jarsigner和codesign等。
(4) 輸入記錄
當APP在不安全的環境中運行時,存在用戶輸入被記錄風險。通常可能經過軟硬件鍵盤輸入設備事件或屏幕截取等方式來進行記錄。根據對APP不一樣的安全要求,滲透測試中宜需關注這些風險。
(5) 組件安全
Android組件包括Activity、Broadcast Receiver、Service和Content Provider。若權限配置不當而致使組件暴露,APP就存在可能被其餘應用攻擊或劫持風險,進而致使認證被繞過、敏感數據被竊取等。測試過程當中,通常可經過對APP進行反編譯,查看AndroidManifest文件或直接掃描查找暴露的組件,分析反編譯的相關組件代碼,查看是否有安全漏洞並進行驗證。
(6) 注入和Hook
注入和Hook均可對目標APP運行時行爲進行修改。雖然咱們經常將它們放在一塊兒說,但其實它們的實現原理並不相同。注入是指將一段代碼或一個完整的可執行模塊加載到目標程序中,而Hook是指經過劫持程序執行流程來改變程序運行行爲。不一樣平臺的APP運行框架和機制不一樣,這也致使它們的注入和Hook方式不一樣,但都會經過系統或框架提供的相關機制和接口進行操做。測試人員可根據需求尋找Hook點,編寫注入或Hook模塊。經常使用的相關工具備libinject、Xposed、Cydia、fishhook和Frida等。
(7) 本地敏感數據泄露
APP的本地存儲數據或運行日誌有可能會泄露敏感或非敏感數據。通常測試人員經過泄露的數據,能夠去進一步深刻理解APP內部原理。測試人員可查看APP本地數據存儲(特別是會關注APP是否在公共區域存儲了數據)和APP運行日誌內容,結合業務場景綜合分析是否存在本地敏感數據泄露風險。經常使用工具adb、RE、SQLite和ifile等。
2. 數據傳輸
APP與服務端進行的網絡數據傳輸過程當中主要面臨的威脅包括數據竊聽、數據篡改和數據重放等。
(1) 數據竊聽
若APP和服務端通訊過程當中未對傳輸的數據進行機密性保護,數據就有可能會被竊聽。例如,不少APP和服務端之間在不安全的傳輸通道中直接使用的HTTP協議進行通訊,若用戶名、口令以及其餘重要數據未進行加密,這些數據在網絡傳輸中的各個節點就可能會被竊聽而泄露。測試人員應根據APP業務場景確認APP的敏感數據**、數據傳輸通道和協議,分析是否存在敏感數據泄露風險。對安全性要求比較高的APP,例如金融類APP,還要分析其加密方式(若是有)是否安全有效。經常使用工具備Wireshark、Burpsuite、Fiddler和Charles等。
(2) 數據篡改
若APP和服務端通訊過程當中未對傳輸的數據進行完整性保護,數據就有可能會被篡改,使APP更易被結合其餘安全漏洞發起攻擊。不一樣的業務場景下,數據篡改帶來的風險高低也不一樣。測試人員可嘗試對截取到的數據進行篡改後發送,觀察和分析APP或服務端是否可識別出數據被篡改並做出合理反應。對安全性要求比較高的APP,好比金融類APP,還要分析其防篡改方式(若是有)是否安全有效。經常使用工具備Wireshark、Burpsuite、Fiddler和Charles等。
(3) 數據重放
重放攻擊是指將以前竊聽到的數據原封不動地從新發送給接收方。這種攻擊一般用於身份認證、交易等過程。例如,對HTTP協議,測試人員可重複發送截取到的請求報文,並觀察和分析服務端的反應。經常使用工具備Wireshark、Burpsuite、Fiddler和Charles等。
3. 服務端
服務端主要面臨的威脅包括不安全的中間件、認證與會話管理、訪問控制、注入、應用層拒絕服務、密碼算法和密鑰管理等。
(1) 不安全的中間件
服務器爲提供完整的服務所使用的各個中間件,因爲未及時更新或未啓用安全的配置可能引起安全漏洞,致使服務器存在遭受攻擊的風險,如IIS文件名解析漏洞、Weblogic反序列化漏洞、SMB遠程命令執行漏洞等,攻擊者可經過這些漏洞獲取服務器敏感信息、執行惡意命令,甚至獲取服務器管理員權限。
(2) 認證與會話管理
服務器提供的身份認證和會話管理機制存在安全漏洞,如系統關鍵組件或應用使用弱口令,對於高安全級別的系統未採用雙因子認證方式,無防止認證口令或驗證碼暴力破解攻擊的機制,未對SessionID的生成、過時和銷燬進行安全配置等,攻擊者可利用這些漏洞在非受權的狀況下登陸系統並執行惡意操做。
(3) 訪問控制
開發者未對用戶登陸系統後的操做進行進一步的訪問權限控制,服務端對從客戶端收到的對數據進行增、刪、改、查詢等操做的請求未進行鑑權處理,致使攻擊者可執行超出自身帳戶權限的操做。
(4) 注入
應用運行時可能須要調用一些向前端寫入內容、查詢數據或執行系統命令的函數,若是用戶能控制這些函數的輸入,而開發者未對輸入的內容進行嚴格的過濾,攻擊者能夠在前端提交惡意構造的輸入,進行XSS注入、SQL注入、命令注入等攻擊,從而致使服務器重要數據泄露或執行惡意命令。
(5) 應用層拒絕服務
服務器未對應用的最大鏈接數或發起請求的IP和頻率進行限制,攻擊者經過併發大量的請求或構造畸形的數據包,如CC攻擊、Slowloris攻擊,形成系統資源耗盡,致使服務器拒絕服務。
(6) 密碼算法和密鑰管理
應用使用已被證實爲不安全的密碼算法對重要數據的傳輸和存儲進行加解密,如使用MD5算法對用戶口令進行存儲,使用DES算法對數據進行加密傳輸,可能致使攻擊者獲取密文後短期內恢復出明文信息;應用使用不安全的方式進行密鑰管理,如將系統使用的密鑰明文編碼在應用代碼中或在服務器配置文件中明文存儲,將致使攻擊者輕易獲取數據加解密密鑰,進而獲得加密數據的明文信息。
4、APP滲透測試流程
滲透測試的最終目的是幫助目標APP或系統發現並修復安全漏洞,提高APP或系統安全性。一個優秀的滲透測試工程師或團隊首先要有良好的職業道德,同時也應注意保護本身,其次要有專業的技術知識、規範的測試流程和活躍的思惟。下面,咱們先介紹通常的APP滲透流程,而後探討下結合APP,對服務端開展滲透測試的一些思路。
1. 準備階段
定義安全測試的範圍,包括確認適用的安全控制點、受測方的測試目標和敏感數據。同時在開展滲透測試前,應拿到被測單位的書面蓋章滲透測試受權。
2. 信息收集
收集包括APP的環境、業務用例和架構等信息。其中:
- 環境信息如APP的業務功能、行業分類、開發或運營組織的基本信息和工做流程等;
- 架構信息包括APP自己(如何訪問數據和資源、是否檢測自身運行在root或模擬環境中等)、APP適用的操做系統及版本、與服務端的通訊協議(是否使用安全傳輸協議、是否有其餘安全防禦措施等)和遠程服務(APP使用哪些遠程服務、這些遠程服務被攻擊是否會影響APP)等。
這些信息大體分爲開發或運營組織的信息和APP相關技術信息兩大類,通常前者可由商務人員負責去收集,後者可由技術人員收集。
3. 應用描繪
根據前2個階段收集的資料(亦可經過自動掃描、手動分析APP來進行相應補充),測試人員已較爲全面的瞭解受測APP的環境、業務用例和架構等信息,並基本肯定了受測APP的滲透測試入口點、收集存儲的數據和可能潛在的安全漏洞,便可根據這些漏洞風險等級高低,對其進行排序,以便測試人員肯定滲透測試的攻擊路徑,並制定相應的測試用例。
4. 漏洞利用和測試工具開發
在此階段,測試人員將嘗試利用前一階段發現的漏洞,對應用程序進行滲透,以驗證發現的漏洞是否真實、有效,同時在漏洞驗證過程當中可能涉及測試工具、腳本的開發;該階段在APP滲透測試的整個過程當中是很是必要和關鍵的一環。
5. 提交報告
此階段,測試人員將已經驗證後的漏洞造成報告,提交客戶。報告內容至少應包括詳細的漏洞名稱、類型、漏洞風險分析、漏洞利用過程和結果、滲透測試過程當中非受權訪問的數據等。
注:不一樣類型安全檢測除流程上會有差別外,報告內容、形式也會有差異,應根據具體狀況具體分析。
5、結合APP滲透服務端
這一章節咱們主要列舉經過APP以滲透相關服務端的一些思路。在此,假設測試人員僅被受權對APP和相關服務端進行滲透。一般包含5個較爲重要的環節,分別是:信息收集、網站/服務端滲透、APP功能分析、第三方SDK分析、帳號安全和業務安全分析。
1. 信息收集
爲達成對服務端的攻擊,首先應對服務端進行「定位」。對服務端定位的經常使用方法有反編譯APP、抓包分析、APP相關信息搜索、信息彙總分析等,具體以下:
一是反編譯APP。這個過程可能會涉及到對APP進行脫殼等。反編譯後,在反編譯代碼和資源文件中,利用字符串搜索和過濾,蒐集全部連接等信息。除HTTP/HTTPS連接外,還應關注是否有FTP、登陸憑證(好比郵箱帳號,有些APP會發Crash信息等到郵箱)等信息。字符串搜索和過濾能夠經過寫腳本,或在自動化工具中對掃描規則進行配置等方式來完成。
二是抓包分析。通常移動APP和服務端通訊使用HTTP(S),可以使用抓包工具對傳輸數據進行抓包分析。抓包過程當中咱們能夠手動點擊APP中各功能菜單,或利用工具觸發APP各類功能,經過抓包工具過濾或定製系統等方式儘可能排除非受測APP的網絡通訊數據干擾(有些URL多是第三方SDK官方地址,非受權滲透測試目標,應予以過濾)。
三是APP相關信息搜索。
- 應經過互聯網普遍搜索APP相關信息,若能找到其官網,應將其相關的官網、論壇的連接都蒐集整理出來,若受權許可,亦可將其歸入到滲透的目標範圍內。
- 尋找該APP的歷史版本,由於若該APP當前版本的安全加固措施作得比較到位,對其進行逆向分析較爲複雜,但在某個時間節點前的歷史版本多是未加固的。
- 可能會有其餘意想不到的發現。
四是信息彙總分析。經過對收集到的信息綜合篩選分析,造成一個信息集,包括但不限於URL、IP、使用的第三方SDK(下面展開說)等信息。
2. 網站/服務端滲透
這一階段,與傳統的Web滲透過程相同,測試人員經過各類嗅探工具對信息集中的URL、IP進行嗅探和漏掃,以期發現可能存在的漏洞等,並經過發現的漏洞(無論0day仍是nday),嘗試獲取服務器的權限。因本章節重點是介紹如何結合APP作服務端滲透,因此這部分不詳細展開。
3. APP功能分析
在信息收集階段,測試人員已基本對APP功能有了一些瞭解,在這一環節,測試人員應實際試用APP,除了試用一些上傳下載、聊天、留言等經常使用功能外,同時還應關注其相對冷門的功能,由於功能越冷門,開發人員對其的關注就越少,相應的服務端服務存在安全問題的可能性就越大。
4. 第三方SDK作分析
在信息收集環節中咱們提到若無受權,測試人員不能隨便對第三方SDK官網開展滲透測試,那爲什麼還要對第三方SDK開展分析呢?緣由是不少第三方SDK客戶端和服務端是配套搭建的,有些部署在SDK官方服務端,有些則部署在SDK使用方(也就是APP官方服務端)。許多SDK官方會對其進行詳細的說明,包括功能、部署方式、API等等。對於服務端SDK,測試人員能夠將其下載下來(若沒法探測到服務端版本號,可根據收集到的APP業務上線日期進行推測,並結合經驗和已蒐集到的信息,從下載的SDK挑選重要的SDK),對其進行歷史漏洞搜索(該工做也可在信息收集環節開展)、掃描和分析,也許會發現一些有用的漏洞(0day最好,nday也要試一試,萬一沒補呢?)。
5. 帳號安全和業務安全
最後,咱們再談談帳號安全和業務安全。這一環節在APP功能分析過程當中也可能會涉及,其與滲透獲取服務器shell權限可能沒太大關係,但其從攻擊者的角度來看卻很是關鍵,由於大部分攻擊者獲取服務器shell權限的目的就是爲了獲取APP用戶的數據或資料,固然也有單純爲了搞破壞和黑客炫技的狀況存在。
在這一環節,測試人員要詳細分析APP的帳號機制和業務邏輯,隨着APP官方與黑產對抗的加深,APP的業務邏輯和身份認證機制可能會作的很複雜。同時若是APP是使用用戶數量大時間、上線時間比較久,存在帳戶安全問題(爆破、信息泄露、越權、綁定/換綁邏輯等等)的可能性相對要低不少;同理,越是成熟的業務,存在安全問題的機率就會越低,因此測試人員能夠重點關注被測APP中可能存在的冷門或新上線業務。
隨着移動APP安全攻防對抗逐漸增強,對其及相關服務端開展滲透測試,必然會愈來愈多的涉及逆向、調試、數據或流量解密等工做(雖然一些邏輯漏洞可經過分析其業務功能、流程發現,但實現漏洞利用通常還需進一步逆向和抓包分析)。滲透測試人員和團隊應善於使用、定製或開發自動化工具輔助檢測以節省時間和人力。
能夠想象,一旦攻擊者藉助APP拿下了服務端,就能夠反過來批量攻擊APP(或用戶),從而造成一個攻擊閉環,且攻擊者能作的事情還遠不止這些!
6、結束語
以上就是筆者關於移動APP滲透測試的總結,但願能幫到你們,但限於知識和技術水平,會有許多不完善甚至不許確之處,還望多多指正。
【雲棲號在線課堂】天天都有產品技術專家分享!
課程地址:https://yqh.aliyun.com/live當即加入社羣,與專家面對面,及時瞭解課程最新動態!
【雲棲號在線課堂 社羣】https://c.tb.cn/F3.Z8gvnK
原文發佈時間:2020-05-20
本文做者:極客安全MobileSecurity
本文來自:「cocoachina」,瞭解相關信息能夠關注「cocoachina」