移動安全測試 - 從攻防角度講滲透測試


| Kevin Mitnick 說沒有攻不破的系統,應用尤其這樣。而滲透測試則是通過去模擬黑客使用的漏洞發現技術和攻擊手段,從一個攻擊者可能存在的位置來進行分析,並且從這個位置有條件的主動利用安全漏洞,找到系統最脆弱的環節。那么滲透測試方法有哪些,具體分析策略如何?下面由技術專家張中文為大家進行精彩的技術解析。 |

滲透是一門比較獨立和特定領域的一門技術,可清晰地分為靜態分析和動態分析。

靜態分析方法

推薦分析工具:JEB

靜態分析的常見類別:

  • 獲取敏感數據

  • 可利用的代碼執行

  • 網絡/本地Socket

  • 路徑/URI/URL校驗

  • 數據文件的權限配置

  • SQL注入

  • 密碼秘鑰

  • 暗碼/后門

  • 證書校驗/中間人攻擊

  • Webview 專項

下面將針對每一項進行詳細分析:

1.獲取敏感數據

敏感數據包括:短信,聯系人,位置,秘鑰/口令,IMEI,瀏覽器歷史記錄,粘貼板數據,安裝的APP列表等。不同場景下可能包含其他的敏感數據類型。

敏感數據–API/Keyword

 

1.png
 

 

分析思路:

追蹤敏感數據流向:位於Sdcard 的數據;寫到 logcat 里的數據;數據被發送至外部的通道,如短信、網絡、WIFI、WIFI(3G&4G)藍牙、NFC等。

2、可利用的代碼執行

隨着應用的體量越來越大,插件化成為一個趨勢。插件化帶來很多優點,如易於升級,易於擴展等功能,但同時也帶來了攻擊點。除了插件,還有傳統的 Java exec 的代碼執行方式。

可利用的代碼執行–API/Keyword

 

2.png
 

 

分析思路:

對於 dex 插件

  • 查看插件的來源是否可控

查看插件的來源是否來自 SDCard,如果是直接替換;查看是否來自網絡下載,可否被中間人替換。

  • 查看是否進行了完整性校驗

是否校驗了 dex 插件的 hash value。

  • 如果來源可控且沒有完整性校驗,則可以用於代碼執行。

對於 exec

查看參數來源是否可控;

是否來自 intent,intent 是否可控;

是否來自 localsocket,localsocket 是否有訪問控制;

是否來自網絡流量(C&C),流量是否可以截獲並篡改。

3.網絡/本地Socket

網絡Socket/HTTP/HTTPS 是手機與外界數據交換的重要通道,手機中大量的數據都通過網絡流量傳輸。

本地Socket類似網絡Socket,不同的是本地Socket是本地兩個進程進行數據交換,不涉及到網絡流量。

網絡/本地Socket–API/Keyword

 

3.png
 

 

分析思路

  • 網絡Socket

分析發送的數據是否是敏感數據;

查看是否發送到指定的IP/端口;

是否有 Command and Control 的行為;

判斷是否是后門。

  • 本地Socket

是否有訪問控制,如果沒有訪問控制或者訪問控制可以被繞過則繼續分析;

如果是client,查看server是否存在,是否可以被仿冒;

如果是server,查看server提供的功能,是否有利用價值。

4.路徑/URI/URL校驗

應用/SDK大量使用路徑/Url作為參數,如果不校驗路徑的合法性,容易導致路徑遍歷攻擊。Android 平台最典型的路徑遍歷漏洞是ZipEntry,URL路徑遍歷問題與傳統的web相同。

路徑/URI/URL校驗–API/Keyword

 

4.png
 

 

分析思路

路徑遍歷問題較為普遍且涉及到眾多API,若僅僅用 API 作為關鍵字搜索精確度會降低。比較推薦的做法是先分析是否有利用價值,如加載一個配置文件,寫一些敏感數據等;再進一步分析路徑參數是否可以控制。因此,通常路徑遍歷漏洞需結合其他漏洞才能發揮比較大的價值。

防御方法:

通過../過濾后判斷合法性

獲取絕對路徑后判斷路徑合法性

5.數據文件的權限配置

數據文件有很多類型,最典型的是SharedPreference.xml和Provider.db,以及

存在 sdcard上的配置文件等。

分析思路:

如果測試手機有Root權限,直接 ls -l 查看文件權限,否則查看源代碼。

6.SQL注入

Android使用 SQLite 數據庫,也會遭受 SQL 注入攻擊。如果暴露的Provider組件在query()中使用拼接字符串組成SQL語句的形式去查詢數據庫,容易發生SQL注入攻擊。

SQL注入–API/Keyword

 

5.png
 

 

SQL注入示例

 

6-2.png
 

 

用 “_id’”探測,如果應用出錯,則存在注入;如果修改projection的內容為

"* from sqlite_master where type='table';--",SQL語句就會變成select "* from sqlite_master where type='table';--“,“;--”之后的SQL語句就作為注釋被忽略掉了。

Drozer 工具可以幫助檢測和利用SQL注入漏洞。

7.密碼秘鑰

應用的秘鑰管理一直沒有完美的解決方案,有安全意識的開發者會把重要的秘鑰數據存儲在keystore里,但也有相當多開發者將秘鑰硬編碼寫在應用里,反編譯后就可以輕易獲取到。

密碼秘鑰– API/Keyword

 

6.png
 

 

案例分享:CVE-2017-2704

 

7-1.png
 

 

 

7-2.png
 

 

密鑰硬編碼在代碼中,逆向分析可以破解出明文。

8.暗碼/后門

暗碼通常是在撥號盤界面輸入##secret_code##,就會得到很多信息。如常見的進入工程菜單的暗碼,在撥號盤輸入##2846579##就可以進入華為手機的工程菜單,暗碼的這種特性被一些人用作后門。檢測暗碼可以在 AndroidManifest.xml 中搜索如下action,找到對應的處理代碼,查詢是否存在后門行為。

暗碼/后門– API/Keyword

 

8.png
 

 

代碼示例:

使用暗碼功能要在AndroidManifest.xml里聲明,在組件接收到暗碼消息后進行相應的處理。

 

9-1.png
 

 

 

9-2.png
 

 

9.Webview 專項

Webview 作為廣泛使用的一個控件,其地位足以和四大組件相媲美。Webview 讓應用變得更加豐富多彩,也提供了不用來回切換界面的良好用戶體驗。但是便利總是需要付出一些代價,使用Webview付出的代價是應用的安全性變差。

Webview 專項–API/Keyword

 

10.png
 

 

Webview 攻擊面分析

  • 遠程代碼執行

CVE-2012-6636 addJavascriptInterface 利用該漏洞執行任意Java對象的方法 

CVE-2013-4710 openFile 同源繞過

  • File 域控制不嚴

setAllowFileAccessFromFileURLs

setAllowUniversalAccessFromFileURLs

setAllowFileAccess + setJavaScriptEnabled(true)

  • 信息泄露

密碼明文存儲 setSavePassword (true)

地理位置泄露 setGeolocationEnabled

  • Url 外部可控

loadUrl (String url)

loadUrl (String url, Map additionalHttpHeaders)

loadData(String data, String mimeType, String encoding) 

loadDataWithBaseURL(String baseUrl, String data, String mimeType, String encoding, String historyUrl)

動態分析方法

動態分析的常用方法:

  • 動態調試

  • 運行時Hook

  • 實時流量包抓取/分析

  • 搭建簡易HTTP服務器挖掘RCE問題

通過靜態分析獲取了風險點后再進行動態分析,才能確定系統是否真的有問題。

1、動態調試:

Android Studio下載smalidea(https://bitbucket.org/JesusFreke/smali/downloads/Android),打開 Studio,點擊 File -- Settings – Plugins,即可安裝成功。

2.運行時Hook

Hook框架 – Frida

Android有很多Hook框架,比如大名鼎鼎的Xposed,還有Cydia,Frida,ADBI, Dexposed,DroidPlugin,Legend等。這些Hook框架各有千秋,可以按照自己的喜好選擇使用。現在給大家推薦使用的 Hook 框架是 Frida。

• 安裝指導:

https://www.frida.re/docs/functions/

• 資源下載:

https://github.com/frida/frida/releases

使用示例 – Hook 應用

Part I: java script

 

11.png
 

 

Part II: python script

加載Java script 腳本 

 

12.png
 

 

在終端輸入以下命令

 

13.png
 

 

3.實時流量包抓取/分析

流量分析工具 – Burp

常見的流量分析工具有 burp 和 fiddler,二者差別不大,可自由選擇。

Burp 的社區版是免費的,並且滿足絕大部分滲透要求。

下載鏈接:

https://portswigger.net/burp/communitydownload

使用示例:

HTTPS有證書校驗,如果想抓到HTTPS的包,就需要妥善處理證書問題。一般來講HTTPS的抓包與證書的關系大致有三類:

1 不配置證書可以抓獲的,這類是客戶端忽略證書錯誤。

2 需要導入到信任證書才能抓獲的,這類是客戶端信任所有證書域。

3 需要hook才能抓獲的,這類是內置服務端證書在應用內。

示例:

針對第二種情形進行處理– 配置證書

PC端配置要點

1、打開Burp,配置Burp監聽本地所有的 8080 端口。

 

14.png
 

 

2、打開瀏覽器,訪問7localhost:8080,點擊右上角 CA Certificate,下載Burp證書

 

14-2.png
 

 

3、把下載的 Burp 證書導入到PC上受信任的根證書。

4、把上一步導入的證書(PortSwiggerCA) 導出,並安裝到手機上。安裝時要輸入手機的解鎖碼。

 

15.png
 

 

手機端配置方法

1、 配置代理

 

16.png
 

 

如圖主機名 127.0.0.1,端口 8080 跟 burp 保持一致。

2、把手機上的端口轉發到PC端

 

17.png
 

 

adb reverse tcp:8080 tcp:8080,Burp已經可以抓取手機上HTTPS流量包。

使用示例 – 中間人修改JS代碼竊取信息

背景:靜態分析發現Webview對外暴露了Java對象。

目的:調用對象接口,獲取敏感信息。

方法:用中間人的方法修改返回包的js腳本

1、打開 Intercept,攔截所有流量

 

18.png
 

 

2、抓到請求包,攔截響應包

 

19.png
 

 

3、攔截到響應包,修改響應包內容,插入竊取信息的腳本。 

 

20.png
 

 

4、用戶信息被竊取

 

21.png
 

 

4.搭建簡易HTTP服務器挖掘RCE問題

方法一:

最簡易的HTTP服務器搭建方法只需要輸入一條命令

python -m SimpleHTTPServer %PORT%

方法二:

安裝XAMPP,配置如下 3 個信息

Listen 8080

ServerName localhost:8080

DocumentRoot "E:ulnerabilitiesclone"

 

22.png
 

 

如果啟動成功后Apache背景會變成綠色。

簡易HTTP服務器在滲透測試中的應用

背景:應用對外暴露了 BROWSABLE 的 Activity,且Activity對外暴露了Java對象,此對象提供了敏感功能。

目的:利用此Activity啟動任意應用。

方法:搭建HTTP服務器,在頁面中嵌入攻擊腳本

環境配置步驟

  • PC端用 XAMPP 搭建服務器,端口配置成 8080

  • 轉發端口,把手機上的8080端口映射成PC上的8080端口 adb reverse tcp:8080 tcp:8080

  • 手機端不需要配置代理

  • 配置成功后,在手機瀏覽器上訪問 127.0.0.1:8080 能夠看到目錄下的文件 ( E:ulnerabilitiesclone )

 

23.png
 

 

用靜態分析的方法分析出攻擊路徑,構造攻擊腳本。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM