www.e4938.cn-老师你下面太紧了拔不出来,99re8这里有精品热视频免费,国产第一视频一区二区三区,青青草国产成人久久

<button id="60qo0"></button>

<strike id="60qo0"></strike>
<del id="60qo0"></del>
<fieldset id="60qo0"><menu id="60qo0"></menu></fieldset>
  • 繞過(guò)安卓SSL驗(yàn)證證書(shū)的四種方式

    2018-02-13 15:17:19 FreeBuf  點(diǎn)擊量: 評(píng)論 (0)
    在此之前,移動(dòng)端應(yīng)用程序會(huì)直接忽略掉所有的SSL錯(cuò)誤,并允許攻擊者攔截和修改自己的通信流量。但是現(xiàn)在,很多熱門(mén)應(yīng)用程序至少會(huì)檢查證書(shū)

    在此之前,移動(dòng)端應(yīng)用程序會(huì)直接忽略掉所有的SSL錯(cuò)誤,并允許攻擊者攔截和修改自己的通信流量。但是現(xiàn)在,很多熱門(mén)應(yīng)用程序至少會(huì)檢查證書(shū)鏈?zhǔn)欠袷且粋€(gè)有效可信任的證書(shū)機(jī)構(gòu)(CA)頒發(fā)的。

    作為一名滲透測(cè)試人員來(lái)說(shuō),我們常常需要讓目標(biāo)應(yīng)用程序信任我們的證書(shū)是有效的,這樣我們就可以進(jìn)行中間人攻擊(MITM)并修改其流量了。在這篇文章中,我們將給大家介紹四種繞過(guò)Android SSL驗(yàn)證的方式。

    Android SSL驗(yàn)證

    一、SSL MitM

    為什么我們要特別關(guān)注移動(dòng)端應(yīng)用程序的SSL MitM安全情況呢?為了觀察或?qū)σ苿?dòng)端應(yīng)用程序的Web服務(wù)調(diào)用情況,我們需要使用類似BurpSuite或ZAP這樣的攔截代理。當(dāng)我們利用代理攔截下SSL流量之后,客戶端的SSL鏈接將會(huì)中斷。默認(rèn)情況下,類似Burp這種工具所生成的自簽名證書(shū)將失效,如果證書(shū)不被信任,那么移動(dòng)端App將會(huì)中斷連接。接下來(lái),我們所要介紹的技術(shù)將能夠讓移動(dòng)端應(yīng)用程序信任我們的攔截代理所提供的證書(shū)。

    技術(shù)#1-向用戶證書(shū)中添加自定義CA

    避免SSL錯(cuò)誤的最好方法就是設(shè)置一個(gè)有效可信任的證書(shū)。這種方法相對(duì)比較簡(jiǎn)單,如果你可以向設(shè)備安裝一個(gè)新的可信任CA證書(shū),并且操作系統(tǒng)信任你的CA,那么它就會(huì)信任由你CA簽名的證書(shū)。

    Android有兩個(gè)內(nèi)置的證書(shū)存儲(chǔ)(即System Store和User Store),它們會(huì)對(duì)操作系統(tǒng)信任的CA進(jìn)行跟蹤。其中System Store用于存儲(chǔ)預(yù)裝的CA,User Store存儲(chǔ)用戶安裝的CA。默認(rèn)配置下,使用了類似TLS或HTTPS的安全連接會(huì)信任預(yù)安裝的系統(tǒng)CA,而Android 6.0(API Level23)及以下版本默認(rèn)會(huì)新人用戶添加的CA。

    這意味著什么呢?如果我們向User Store中添加自己的CA,那我們就可以嘗試對(duì)Android 6.0及以下版本的設(shè)備進(jìn)行中間人攻擊了。如果針對(duì)的是高于Android 6.0版本的設(shè)備,那么我們所添加的證書(shū)將不會(huì)被信任。為了解決這個(gè)問(wèn)題,我們可以編輯應(yīng)用程序的Manifest文件,并強(qiáng)制它適配Android 6.0。目標(biāo)API Level定義在AndroidManifest.xml文件中的‘platformBuildVersionCode’屬性(’manifest’元素):

    
    
    1. <manifest xmlns:android="http://schemas.android.com/apk/res/android"package="com.test.app" platformBuildVersionCode="25"platformBuildVersionName="7.1.1"> 

    我們要把‘platformBuildVersionCode=25’改成23:

    
    
    1. <manifest xmlns:android="http://schemas.android.com/apk/res/android"package="com.test.app" platformBuildVersionCode="23"platformBuildVersionName="6.0"> 

    重新打包之后,應(yīng)用程序?qū)?huì)信任用戶添加的CA證書(shū)了。

    當(dāng)然了,如果你想要在特定平臺(tái)版本中運(yùn)行的話,你也可以在APK的‘/res/xml/network_security_config.xml’文件中定義一個(gè) 。比如說(shuō),下面的代碼就定義了一個(gè)新的受信任CA,文件存儲(chǔ)在/res/raw/my_ca:

    
    
    1. <?xm lversion="1.0" encoding="utf-8"?> 
    2. <network-security-config> 
    3. <base-config> 
    4. <trust-anchors> 
    5. <certificates src="@raw/my_ca"/> 
    6. </trust-anchors> 
    7. </base-config> 
    8. </network-security-config> 

     

    這樣一來(lái),我們就能夠順利完成MitM了。

     

    技術(shù)#2-用自定義CA證書(shū)重寫(xiě)已打包的CA證書(shū)

    如果第一種方法不起效的話,可能是因?yàn)殚_(kāi)發(fā)人員限制了應(yīng)用程序所能信任的CA證書(shū)了。還記得剛才我們使用自定義的 來(lái)提供CA證書(shū)路徑嗎?而開(kāi)發(fā)人員同樣可以使用這種方法來(lái)保護(hù)自己的應(yīng)用程序免受SSL攔截攻擊。

    在這種場(chǎng)景下,為了讓我們的攔截證書(shū)可以被信任,我們就需要提取APK并用我們自定義的CA證書(shū)來(lái)重寫(xiě)應(yīng)用程序所提供的CA證書(shū)。需要注意的是,這種方法可能會(huì)要求進(jìn)行一系列驗(yàn)證。

    使用APK Studio之類的工具打開(kāi)APK文件,然后在窗口中找到應(yīng)用程序所捆綁的證書(shū)。在上圖中,證書(shū)位于應(yīng)用程序的assets目錄下。接下來(lái),用我們自定義的CA覆蓋應(yīng)用程序原本的CA(‘UniversalRootCA’證書(shū)),這樣就可以讓?xiě)?yīng)用程序直接信任我們的證書(shū)了并實(shí)現(xiàn)流量攔截了。

    技術(shù)#3-Frida Hook

    如果安裝自定義CA也無(wú)法成功的話,說(shuō)明應(yīng)用程序可能使用了某種SSL綁定技術(shù)或采用了額外的SSL驗(yàn)證。一般來(lái)說(shuō),為了繞過(guò)這種驗(yàn)證方法,我們需要對(duì)應(yīng)用程序的代碼以及驗(yàn)證接口設(shè)置鉤子。這種接口一般用于限制手機(jī)被root或越獄,但是在Frida框架【工具下載】的幫助下,我們就可以在不root設(shè)備的情況下,對(duì)應(yīng)用程序進(jìn)行動(dòng)態(tài)分析了。

    Frida可以在操作系統(tǒng)中以獨(dú)立應(yīng)用程序的形式運(yùn)行,但是這需要對(duì)設(shè)備進(jìn)行root。為了避免root操作,我們可以直接將Frida注入到目標(biāo)APK之中。Frida工具中包含了一個(gè)能夠讓?xiě)?yīng)用程序在運(yùn)行時(shí)加載Frida的動(dòng)態(tài)庫(kù),并允許我們對(duì)目標(biāo)應(yīng)用程序的代碼和指令進(jìn)行動(dòng)態(tài)修改。

    接下來(lái),我們需要提取APK文件,注入動(dòng)態(tài)庫(kù),然后編輯一些smali代碼來(lái)讓我們的代碼庫(kù)在應(yīng)用程序啟動(dòng)時(shí)最先被調(diào)用。完成之后,重新打包APK并進(jìn)行安裝。整個(gè)過(guò)程的完整操作方法可以參考【這篇文章】。

    除此之外,我們也可以使用Objection工具【項(xiàng)目地址】來(lái)實(shí)現(xiàn)我們的目標(biāo)。Objection可以讓整個(gè)過(guò)程自動(dòng)化完成,我們只需要在命令行中提供目標(biāo)APK的路徑,Objection就可以幫我們完成所有的代碼注入以及修改操作。

    
    
    1. C:\>objection patchapk -s test_app.apk 
    2. No architecture specified. Determining it using `adb`... 
    3. Detected target device architecture as: armeabi-v7a 
    4. Github FridaGadget is v10.6.28, local is v10.6.13. Updating... 
    5. Downloading armeabi-v7a library toC:\.objection\android\armeabi-v7a\libfrida-gadget.so.xz... 
    6. Unpacking C:\.objection\android\armeabi-v7a\libfrida-gadget.so.xz... 
    7. Cleaning up downloaded archives... 
    8. Using Gadget version: 10.6.28 
    9. Unpacking test_app.apk 
    10. App already has android.permission.INTERNET 
    11. Reading smali from:C:\Temp\tmp8dxqks1u.apktemp\smali\com/test/app/TestMainActivity.smali 
    12. Injecting loadLibrary call at line: 10 
    13. Writing patched smali back to:C:\Temp\tmp8dxqks1u.apktemp\smali\com/test/app/TestMainActivity.smali 
    14. Creating library path: C:\Temp\tmp8dxqks1u.apktemp\lib\armeabi-v7a 
    15. Copying Frida gadget to libs path... 
    16. Rebuilding the APK with the frida-gadget loaded... 
    17. Built new APK with injected loadLibrary and frida-gadget 
    18. Signing new APK. 
    19. jar signed. 
    20. Signed the new APK 
    21. Performing zipalign 
    22. Zipaling completed 
    23. Copying final apk from C:\Users\cwass\AppData\Local\Temp\tmp8dxqks1u.apktemp.aligned.objection.apkto current directory... 
    24. Cleaning up temp files... 

    接下來(lái),我們的工作目錄中應(yīng)該會(huì)出現(xiàn)一個(gè)名叫‘test_app.objection.apk’的文件(默認(rèn)情況下,工具會(huì)在原始APK文件名的后面添加一個(gè).objection后綴)。我們可以像安裝普通APK一樣安裝這個(gè)文件,使用命令“adb install test_app.objection.apk”可以直接將其推送到連接設(shè)備上。安裝完成之后運(yùn)行目標(biāo)App,此時(shí)App將會(huì)卡在啟動(dòng)界面。現(xiàn)在,我們就可以連接到Frida服務(wù)器,并開(kāi)始監(jiān)聽(tīng)設(shè)備流量了。Frida命令行工具的使用方法如下:

    
    
    1. C:\>frida-ps-U 
    2. PID  Name 
    3. ----  ------ 
    4. 6383  Gadget 
    5.   
    6. C:\>frida-U gadget 
    7. ____ 
    8. / _ |Frida 10.3.14 - A world-class dynamic instrumentation framework 
    9. | (_|| 
    10. >_ | Commands: 
    11. /_/|_| help -> Displays the help system 
    12. . . .. object? -> Display information about 'object' 
    13. . . .. exit/quit -> Exit 
    14. . . .. 
    15. . . .. More info at http://www.frida.re/docs/home/ 
    16.   
    17. [MotorolaMoto G (5) Plus::gadget]-> Java.available 
    18. true 
    19.   
    20. Alternatively,Objection supports interaction with the listening Frida server by using the‘explore’ command: 
    21.   
    22. C:\>objectionexplore 
    23. ___||_  |_|___ ___| |_|_|___ ___ 
    24. | . |. | | | -_|  _|  _| | . |  | 
    25. |___|___|_||___|___|_| |_|___|_|_| 
    26. |___|(object)inject(ion)v1.2.2 
    27.   
    28. RuntimeMobile Exploration 
    29. by:@leonjza from @sensepost 
    30.   
    31. [tab]for command suggestions 
    32. com.test.appon (motorola: 7.0) [usb] # android hooking search classes TrustManager 
    33. android.security.net.config.RootTrustManager 
    34. android.app.trust.ITrustManager$Stub$Proxy 
    35. android.app.trust.ITrustManager 
    36. android.security.net.config.NetworkSecurityTrustManager 
    37. android.security.net.config.RootTrustManagerFactorySpi 
    38. android.app.trust.TrustManager 
    39. android.app.trust.ITrustManager$Stub 
    40. com.android.org.conscrypt.TrustManagerImpl 
    41. com.android.org.conscrypt.TrustManagerImpl$ExtendedKeyUsagePKIXCertPathChecker 
    42. com.android.org.conscrypt.TrustManagerImpl$TrustAnchorComparator 
    43. com.android.org.conscrypt.TrustManagerFactoryImpl 
    44. javax.net.ssl.TrustManagerFactory$1 
    45. javax.net.ssl.TrustManager 
    46. javax.net.ssl.TrustManagerFactory 
    47. javax.net.ssl.X509TrustManager 
    48. javax.net.ssl.TrustManagerFactorySpi 
    49. javax.net.ssl.X509ExtendedTrustManager 
    50. [Ljavax.net.ssl.TrustManager; 

    此時(shí),你就可以使用內(nèi)置的SSL綁定繞過(guò)函數(shù)來(lái)實(shí)施攻擊了:

    
    
    1. com.test.appon (motorola: 7.0) [usb] # android sslpinning disable 
    2. Job:2f633f86-f252-4a57-958e-6b46ac8d69d1 - Starting 
    3. [6b46ac8d69d1][android-ssl-pinning-bypass] Custom, Empty TrustManager ready 
    4. Job:2f633f86-f252-4a57-958e-6b46ac8d69d1 – Started 

    技術(shù)#4-逆向自定義證書(shū)的驗(yàn)證代碼

    當(dāng)然了,開(kāi)發(fā)人員也有可能會(huì)使用自己開(kāi)發(fā)的SSL庫(kù),而不是直接使用系統(tǒng)庫(kù)來(lái)處理SSL證書(shū)驗(yàn)證過(guò)程。如果這樣的話,我們就需要提取出APK文件,然后將smali代碼轉(zhuǎn)換成Java代碼,這樣我們才可以對(duì)負(fù)責(zé)處理證書(shū)驗(yàn)證的代碼進(jìn)行分析,并想辦法實(shí)現(xiàn)流量攔截,這里我們需要使用到dex2jar工具。

    dex2jar工具的使用命令語(yǔ)句如下所示:

    
    
    1. C:\>d2j-dex2jar.bat"C:\test_app.apk" 
    2. dex2jarC:\test_app.apk -> .\test_app-dex2jar.jar 

    輸出的.jar文件可以直接在絕大多數(shù)Java逆向工具(例如JD-GUI)中打開(kāi)。

    當(dāng)你找到了負(fù)責(zé)處理證書(shū)驗(yàn)證的代碼之后,你就可以選擇對(duì)代碼進(jìn)行直接修改或者使用Frida來(lái)給特定函數(shù)設(shè)置鉤子了。為了避免對(duì)整個(gè)應(yīng)用程序進(jìn)行重構(gòu),我們可以直接對(duì)證書(shū)驗(yàn)證函數(shù)設(shè)置鉤子。具體的操作方法可以參考技術(shù)#3所介紹的內(nèi)容(使用Frida命令行工具或Objection接口)。

    二、總結(jié)

    本文所介紹的技術(shù)可以允許我們繞過(guò)Android開(kāi)發(fā)人員所設(shè)置的常見(jiàn)防護(hù)措施,并攔截目標(biāo)Android應(yīng)用的SSL通信流量。除此之外,本文還簡(jiǎn)單介紹了Objection接口以及Frida工具,這些工具可以幫助我們繞過(guò)應(yīng)用程序的SSL綁定以及其他防護(hù)機(jī)制。本文揭露了多種繞過(guò)給定安全控制的方法,希望這篇文章可以給Android應(yīng)用程序的安全研究人員提供一些有用幫助。

    大云網(wǎng)官方微信售電那點(diǎn)事兒

    責(zé)任編輯:售電衡衡

    免責(zé)聲明:本文僅代表作者個(gè)人觀點(diǎn),與本站無(wú)關(guān)。其原創(chuàng)性以及文中陳述文字和內(nèi)容未經(jīng)本站證實(shí),對(duì)本文以及其中全部或者部分內(nèi)容、文字的真實(shí)性、完整性、及時(shí)性本站不作任何保證或承諾,請(qǐng)讀者僅作參考,并請(qǐng)自行核實(shí)相關(guān)內(nèi)容。
    我要收藏
    個(gè)贊
    ?
    拔萝卜视频播放在线观看免费| 欧美日韩中文无限码| 中文字幕一级片免费观看| 久久久国产精品| GOGOGO视频在线观看| 国产免看一级a一片成人av| 大地资源免费视频观看| 国产精品va无码一区| 国产精品女同一区二区久久| 欧美日韩一卡二卡三乱码|