Android App安全滲透測試(一)


一、            實驗環境搭建

1.      安裝JDK

2.      安裝Android Studio

3.      模擬器或真機

我的是夜神模擬器和nexus

工具

Apktool

下載地址:https://ibotpeaches.github.io/Apktool/

下載完成直接保存打開,啟動apktool,使用下面命令查看選項幫助

 

Dex2jar/JD-GUI

Dex2jar和JD-GUI是安卓應用逆向工程中經常用到的兩個工具。Dex2jar能將.dex文件轉換 為.jar文件。JD-GUI則是一個Java反編譯工具,可以將.jar文件還原為原始的Java源代碼

下載地址:http:// sourceforge.net/projects/dex2jar/     http://jd.benow.ca

 下載后無需安裝直接可以打開。

 

 

Burp suite

下載地址:http://portswigger.net/burp/download.html

手機端設置bp代理,進行APP流量抓取分析。

Drozer

下載地址:https://labs.mwrinfosecurity.com/tools/drozer/

agent

下載地址:https://github.com/mwrlabs/drozer/releases/download/2.3.4/drozer-agent-2.3.4.apk

電腦安裝drozer,安裝完測試

 

接下來安裝前面下載的agent.apk,安裝到模擬器或者真機上。可以使用adb命令進行安裝.apk文件。

在使用drozer進行評估之前,我們首先要將工作站中的drozer控制台連接到模擬器的代理上。所以我們先要在模擬器上啟動代理,並使用命令進行端口轉發。

 

端口轉發並啟動連接到手機

 

 

 

 

Advanced REST Client

谷歌擴展程序,直接從谷歌商店下載

adb基礎

adb是一款對安卓應用進行滲透測試的必備工具,Android SDK默認自帶adb,它位於Android SDK的platform-tools目錄中。

adb基礎命令

adb connect 127.0.0.1:62001 鏈接夜神模擬器

adb devices 查看連接

adb logcat  打印logcat

adb install  安裝,覆蓋安裝是-r

adb uninstall卸載

adb push   推送本地文件至 Android 設備

adb pull    推送Android文件至本地

adb shell mount -o remount rw / 修改系統讀寫權限

adb root  獲得root權限

adb kill-server  重啟

二、            安卓ROOT

1.      什么是root

Android 是基於Linux內核的系統,Linux有兩種用戶系統:一種是普通用戶賬戶,一種是root賬戶。普通用戶賬戶的權限通常比較低,在進行軟件安裝、操作系統設置更改等特權操作之前需要獲得root權限。而root賬戶享有諸如更新應用、安裝軟件、執行命令等權限。root用戶能對整個系統進行更精細化的控制,通過對設備進行完全控制的行為被稱為root。

檢測你是否擁有設備root權限的一個簡單方法是,在adb shell中執行su命令。

在root過的設備上,通常我們的UID等於0,root shell中使用”#”而不是”$”來表示root。

 

 

 

2.      為什么要root設備

由於硬件制造商和運營商的限制,我們不能完全控制安卓設備。通過ROOT設備,我們能夠突破這些限制,從而獲得額外的權限。

root的好處

l  完全控制設備:在默認情況下,普通用戶不能完全訪問設備,但在ROOT之后,用戶可以完全控制安卓設備

l  安裝其他應用:擁有root權限的用戶可以安裝一些具有特殊功能的應用,這些應用被稱為root應用

l  更多的特性和個性化功能:在安卓設備上安裝第三方的recovery和ROM之后,可以獲得更好的特性和個性化功能

root的壞處

   ROOT降低設備的安全性:一旦設備被ROOT之后,它的安全性就會降低。

  讓設備變磚:設備變磚的意思是,它可能會變得毫無 用處,你需要找到修復的方法。

  使保修失效:ROOT過的設備會使保修失效。

3.      鎖定和已解鎖的boot loader

boot loader是設備啟動后先運行的程序。它負責維護和啟動硬件和安卓內核,若沒有它, 設備將無法啟動。

三、            安卓應用的基本構造

1.      安卓應用基礎知識

1.1     安卓應用結構

 

解壓APK文件的步驟如下。

(1) 把文件擴展名.apk改成.zip。

(2) 在Linux或Mac系統中,使用下面的命令解壓文件:

Unzip filename.zip 在Windows系統中,可以使用7-Zip、WinRAR或者其他類似的工具來解壓文件。

文件或文件夾包含的內容

   AndroidManifest.xml:包含應用的大部分配置信息、包名、應用組件、組件安全設置、應 用所需權限,等等。

  classes.dex:包含由開發人員編寫的源代碼生成的Dalvik字節碼,以及應用在設備上運行 時所執行的內容。

  resources.arsc:包含編譯過的資源。

  Res:包含應用所需的原始資源,比如應用圖標等圖片。

  Assets:用於存放開發人員感興趣的音樂、視頻、預置的數據庫等文件,這些文件會與應 用綁定。

  META-INF:用於存放應用簽名和應用所用到的所有文件的SHA1摘要。

1.2     APK文件存儲位置

  /data/app/   用戶安裝應用的存放位置,全局可讀可復制

  /system/app/   存放系統自帶的應用程序,全局可讀可復制

  /data/app-private/   存放禁止復制的應用,有root權限便可提取。

提取過程:

(1) 找到應用包名;

(2) 找到APK文件在設備上的存儲路徑;

(3) 從設備上拉取APK文件

2.      安卓應用組件

安卓基本組件:activity、service、connect provider、broadcastreceive

2.1     activity

activity為用戶提供了一個可以通過與之交互來完成某些操作的界面。有時,activity會包含多 個fragment。fragment表示activity中的一個行為或用戶界面的一部分。用戶可以在activity中進行 打電話、發短信等操作。

2.2     service

服務可以在后台長時間運行,而且不提供用戶界面。以音樂應用為例,當選好歌曲后,你可 以關閉它的所有界面,它能在后台正常播放歌曲

2.3     內容提供程序

內容提供程序以一個或多個表格的形式為外部應用提供數據。如果應用需要與其他應用共享 數據,內容提供程序就是一種方法,它可以充當應用間的數據共享接口。內容提供程序使用標准 的insert()、query()、update()、delete()等方法來獲取應用數據。所有的內容提供程序 都使用content://開頭的特殊格式的URI。只要知道這個URI並擁有合適的權限,任何應用都可以 從內容提供程序的數據庫中進行數據插入、更新、刪除和查詢等操作。

2.4     廣播接收器

廣播接收器是一個能在設備系統中接收廣播通知的組件。它能接收諸如低電量、啟動完成、 耳機連接等消息。雖然大部分廣播事件都是由系統發起的,但是應用也可以發出廣播。從開發人 員的角度來說,當應用需要針對特定的事件做出反應時,就可以使用廣播接收器。

1.      應用運行時都發生了什么

安卓系統啟動后,Zygote進程也會隨之啟動,它會監聽新應用的啟動請求。當用戶點擊一個 應用時,會通過Zygote啟動該應用。Zygote收到啟動新應用的請求后,會使用fork系統調用來創 建一個自身的副本。這種啟動新應用的方法效率更高,速度更快。新啟動的應用進程會加載運行應用所需的所有代碼。classes.dex文件包含能夠兼容Dalvik虛擬機的所有字 節碼。在使用安卓5.0及以上系統的最新版安卓設備中,默認的運行時環境是ART。在這個新的 運行時環境中,dex2oat工具會把classes.dex文件轉換成OAT文件。

ART---新的安卓運行時

作為一個可選的運行時環境,ART在安卓4.4系統中被首次使用,終端用戶可以從設備的開 發者選項中選擇ART。從安卓5.0(Lollipop)開始,谷歌把ART當作默認的運行時環境。用戶在 設備上安裝應用時,ART可以將應用的字節碼轉換為原生機器碼,這就是提前編譯。在引入ART 之前,Dalvik會在應用運行時將字節碼轉換為原生機器碼,這就是即時編譯。ART的優點是,無 需在每次啟動應用時都將字節碼轉換為機器碼,因為在應用安裝的過程中就已經完成了轉換。這 雖然會導致應用在第一次啟動時稍有延遲,但是從下一次運行開始,應用的性能就會得到大幅度 提升,耗電量也會下降。

2.      理解應用沙盒

一個應用對應一個UID

安卓系統是基於Linux內核的,Linux的用戶分離模式同樣適用於安卓,但又和傳統的Linux 略有不同。

Linux如果以root身份運行兩個不同的進程時,查看UID會發現他們都在同一個UID下運行。但安卓應用卻並非如此,每一個安裝在設備上的應用都會有自己的UID。這使得每個應用及 其資源都被沙盒化了,任何其他的應用都不能訪問。

注:使用了同一簽名的應用(如果兩個應用是由同一個開發人員開發的,就有可 能出現這種情況)可以互相訪問數據。

應用沙盒

每一個應用在/data/data/文件夾中都有各自存儲數據的入口,每一個應用都對其 擁有特定的所有權。

下面的代碼顯示了/data/data/文件夾中的每個應用的數據是如何獨立存儲在各自的沙盒環境 中的。由於受限的用戶無法訪問/data/data/文件夾,所以我們需要一個已經ROOT過的設備或者模 擬器來進行觀察。

(1)     使用adb在ROOT過的設備上獲取一個shell;

(2)     使用cd data/data/命令進入/data/data文件夾;

(3)     輸入ls -l命令

 

觀察上述輸出結果中的文件權限,你會發現每個應用的目錄都歸它自己所有,其他應用不能 讀寫這些目錄。

是否有方法打破沙盒限制

應用沙盒並不是牢不可破,但是想要在一台配置正常的設備上打破應用沙盒的限制,就必須犧牲Linux內核的安全性。這樣就會用到安卓root技術,讓用戶擁有root權限,能夠滿足用戶對安卓系統的大部分需求。

在使用Linux(以及UNIX)系統的計算機上,root是最高級的用戶,它擁有最高的權限來執 行任何任務。安卓系統默認只有Linux內核和少量的核心應用能夠以root身份運行。但是如果你 ROOT了設備,那么root用戶就會對設備上的所有應用開放。所以,擁有root權限的用戶或者應用 都可以突破沙盒環境的限制,進而修改安卓系統(包括內核)中的其他任意部分,包括應用及其 數據。

_______________________________________________________________________________________________________________________________________________________

內容來源於《Android App安全攻防實踐》,記錄一下自己的學習筆記

 


免責聲明!

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



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