【安全測試工具】Drozer介紹及使用


一、前言:
    項目測試間隙調研了下移動APP安全測試,發現不少文檔都提到了Drozer這款安全測試工具,遂拿來學習並投入項目中實踐下。
 

二、Drozer介紹:

    Drozer是一款針對Android的安全測試框架,分為安裝在PC端的控制台、安裝在終端上的代理APP兩部分。可以利用APP的IPC通信,動態的發現被測試APP的安全風險。
    貼一張網上的圖片,Drozer的功能點:
 
 
 
 

三、安裝

 
1、官方下載地址
2、安裝比較簡單,不介紹了。
    中間有個java環境變量的小插曲說明下,如果運行drozer console connect后,報“ Could not find java. Please ensure that it is install ed and on your PATH. ”檢查下自己本地的java環境變量是否有問題,如果設置正確,但是drozer還是找不到的話,Windows用戶在“c:\users\用戶名”文件夾下新建.drozer_config文件,文件內容為:
 
[executables]
java=C:\Program Files\Java\jdk1.7.0_79\bin\java.exe
javac=C:\Program Files\Java\jdk1.7.0_79\bin\javac.exe
(路徑為自己的jdk目錄)
    Windows文件名不能為空,導致不能新建.drozer_config文件的話,cmd下用命令rename 1.drozer_config .drozer_config改文件名為空。

四、界面介紹及連接設備

 

1、頁面展示:

PC上的控制台,用的是免費社區版,所以控制台沒有UI界面。

 

手機上的代理APP頁面展示:

 

 

2、連接設備:

首先運行設備上的Drozer代理並啟動守護服務,然后運行下面的命令做端口轉發:

adb forward tcp:31415 tcp:31415

使用下面的命令建立鏈接:

drozer console connect

連接成功后,控制台顯示dz>
 

五、常用命令介紹:

 

1、查找所有的攻擊面:

 
dz> run app.package.attacksurface com.example
輸出結果:
Attack Surface:
  6 activities exported  暴露的控件接口
  17 broadcast receivers exported     暴露的廣播接收器
  0 content providers exported  數據提供接口,數據泄漏
  3 services exported  service服務接口
    is debuggable
解釋:
  • 應用程序中,一個Activity通常就是一個單獨的屏幕,它上面可以顯示一些控件也可以監聽並處理用戶的事件做出響應。應用程序中,一個Activity通常就是一個單獨的屏幕,它上面可以顯示一些控件也可以監聽並處理用戶的事件做出響應。Activity之間通過Intent進行通信。在Intent 的描述結構中,有兩個最重要的部分:動作和動作對應的數據
  • BroadcastReceive廣播接收器:應用可以使用它對外部事件進行過濾只對感興趣的外部事件(如當電話呼入時,或者數據網絡可用時)進行接收並做出響應。廣播接收器沒有用戶界面。然而,它們可以啟動一個activity或serice 來響應它們收到的信息,或者用NotificationManager 來通知用戶。通知可以用很多種方式來吸引用戶的注意力──閃動背燈、震動、播放聲音等。一般來說是在狀態欄上放一個持久的圖標,用戶可以打開它並獲取消息。
  • content providers exported:android平台提供了Content Provider使一個應用程序的指定數據集提供給其他應用程序。這些數據可以存儲在文件系統中、在一個SQLite數據庫、或以任何其他合理的方式, 其他應用可以通過ContentResolver類(見ContentProviderAccessApp例子)從該內容提供者中獲取或存入數據.(相當於在應用外包了一層殼), 只有需要在多個應用程序間共享數據是才需要內容提供者。例如,通訊錄數據被多個應用程序使用,且必須存儲在一個內容提供者中。它的好處:統一數據訪問方式。
  • service服務接口,一般常駐,連接上公開的service后,可通過service提供的接口調起其他activity等。
 
檢測到攻擊面,可進行的攻擊:
  • activities exported  越權攻擊,發送偽造消息等;
  • broadcast receivers exported 發送惡意廣播,偽造廣播消息,越權攻擊等;
  • content providers exported 數據泄漏,SQL注入等;
  • services exported 越權攻擊,服務拒絕,權限提升等;
2.1、intent介紹:
  • 可以將Intent理解為不同組件之間通信的“媒介”專門提供組件互相調用的相關信息。Intent可以啟動一個Activity,也可以啟動一個Service,還可以發起一個廣播Broadcasts。
  • Intent有以下幾個屬性: 動作(Action),數據(Data),分類(Category),類型(Type),組件(Compent)以及擴展信(Extra)。其中最常用的是Action屬性和Data屬性。通過Drozer完整的發送intent消息命令格式為:

 

run app.activity.start [-h] [–action ACTION] [–category CATEGORY [CATEGORY …]] [–component PACKAGE COMPONENT] [–data-uri DATA_URI][–extra TYPE KEY VALUE] [–flags FLAGS [FLAGS …]] [–mimetype MIMETYPE]

2.2、對activity嘗試進行攻擊:

  • 來一把越權攻擊:繞過登錄頁直接拉activity,看到有activity啟動不需要權限,嘗試用drozer直接拉起這些activity看看。
    run  app.activity.start  --component  com.example   com.example.activity.WelcomeActivity  
  • 發送偽造的殘缺消息,刻意制造不完整的intent,發送給對應的activity。
run app.activity.start --action android.intent.action.SEND --component com.example com.example.activity.share.ShareToSessionActivity
intent中缺少extra部分
 

3、查看暴露的廣播組件接口

 
run app.broadcast.info -a   com.example  -i  獲取暴露的廣播組件信息
嘗試拒絕服務攻擊,向廣播組件發送不完整intent(空action或空extras)
run app.broadcast.send --component com.example com.example.sdk.communication.AppRegisterReceiver --extra string TEXT "hahahaha"
傳遞空的action

4、查看數據接口

 
如果有暴露的content組件接口,可能存在:
數據泄漏問題;
--直接訪問URI獲取敏感信息;--目錄遍歷;
構造特殊的URI進行SQL注入;
獲取content provider的信息
dz> run app.provider.info -a  com.example  -i
使用drozer的scanner模塊去猜測可能存在的URIs
dz> run scanner.provider.finduris -a  com.example
檢測可注入的URI的注入點
dz> run scanner.provider.injection  -a  com.example
SQL注入的方式,如果上一步有拿到可注入的URI
獲取某個表(如Key)中的數據:run app.provider.query content://com.mwr.example.sieve.DBContentProvider/Passwords/ --projection "* FROM Key;--"
 
 
 
 

5、查找service服務接口

獲取公開的service服務接口信息

dz> run app.service.info -a  com.example -i
直接啟動服務看下
run app.service.start --action com.example.plugin.game.service.GameDownloadService --component  com.example com.example.plugin.game.service.GameDownloadService
 
 
 

6、文件操作

 
  • 安裝minimal來可以獲取暫時的root權限
run tools.setup.minimalsu
  • 進入shell模式,查看/data/data/com.example下是否有明文存儲敏感信息
  • 在AndroidManifest.xml中android:allowBackup字段是否為true。當這個標志被設置為true或不設置該標志時應用程序數據可以備份和恢復,adb調試備份允許惡意攻擊者復制應用程序數據。有名的栗子新浪微博android客戶端越權泄密事件。
 

六、總結:

 
    使用Drozer在項目中實踐后,有發現多處不校驗導出組件(activity,broadcast,service等)傳遞參數導致的安全漏洞,反饋給開發后進行排查,現已經全部修復。

本文來自網易實踐者社區,經作者yixin.shenhui授權發布。 


免責聲明!

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



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