安卓應用程式滲透測試(六)
前面囉嗦了這麼多,講了很多基礎知識,現在,就讓我們開始滲透的樂趣吧。
根據Owasp,漏洞共分為十大類。
M1—平臺使用不當
M2—不安全的資料儲存
M3—不安全的通訊
M4—不安全的身份驗證
M5—不安全的密碼
M6—不安全的授權
M7—客戶端程式碼質量問題
M8—程式碼篡改
M9—逆向工程
M10—附加功能
漏洞應用程式實戰合集:
ofollow,noindex">https://pentestlab.blog/2016/11/07/list-of-vulnerable-android-applications/
本文中,我們將使用不安全的銀行App來演示漏洞。
資訊收集
我們可以使用Drozer來收集安卓APP的資訊。
命令 – run app.package.info –a <.apk name>
詳細資訊:UID,GID,使用者許可權,資料目錄,Apk路徑,共享庫,共享使用者,版本和應用名稱。
攻擊安卓元件
我已經在 安卓應用程式滲透測試(五) 中介紹了所有的安卓元件,Activities(活動),Services(服務),Content Provider(內容提供商)和Broadcast Receiver(廣播接收器)。現在我們就來找找它們的漏洞以及它們在應用程式是如何容易被攻擊的。
攻擊Activities
exported activities(匯出活動)
匯出活動(exported=true)是在同一臺裝置上可以被其他App訪問的那些活動。絕大多數是在安卓上進行身份驗證後。
使用者都知道,當進行認證之後,應用程式會切換到另一個活動,例如,音樂播放器登陸後的播放列表。但是,開發者保留了這些匯出活動,甚至沒有進行自定義許可權。
在安卓manifest檔案中,活動可以通過匯出值或者使用drozer命令來獲取。
獲取匯出活動的相關資訊:
命令– run App.activity.info –a <.apk name>
manifest檔案
<activity android:label=”@7F070040″ android:name=”com.android.insecurebankv2.LoginActivity”><intent-filter><action android:name=”android.intent.action.MAIN”><activity android:label=”@7F070040″ android:name=”com.android.insecurebankv2.LoginActivity”><intent-filter><action android:name=”android.intent.action.MAIN”> </action><category android:name=”android.intent.category.LAUNCHER”> </category></intent-filter></activity><activity android:label=”@7F070057″ android:name=”com.android.insecurebankv2.FilePrefActivity” android:windowSoftInputMode=”0x00000034″> </activity><activity android:label=”@7F070054″ android:name=”com.android.insecurebankv2.DoLogin”> </activity><activity android:label=”@7F07005B” android:name=”com.android.insecurebankv2.PostLogin” android:exported=”true”> </activity><activity android:label=”@7F07005E” android:name=”com.android.insecurebankv2.WrongLogin”> </activity><activity android:label=”@7F070055″ android:name=”com.android.insecurebankv2.DoTransfer” android:exported=”true”> </activity><activity android:label=”@7F07005D” android:name=”com.android.insecurebankv2.ViewStatement” android:exported=”true”> </activity>
Drozer:
由於許可權未定義或登入後的活動的匯出值為true,我們可以使用它來繞過身份驗證。
我們嘗試使用Drozer在沒有憑證的情況下來呼叫登陸後的活動。
比如:Dotransfer(轉賬),Viewstatement(檢視狀態),Changepassword(修改密碼)。
drozer命令 –run app.activity.start –component <.apkname>< activityname>
run app.activity.start –component com.android.insecurebankv2 com.android.insecurebankv2.DoTransfer
之前:
之後:
使用惡意App呼叫其他應用程式的活動
呼叫其他應用程式活動的另一種方法是編寫惡意應用程式併為它提供你想要啟動的安裝包的名字和活動。在我們的案例中,惡意應用程式不需要任何許可權來啟動存在漏洞應用程式的“登入後”活動。
保護活動元件
設定Android:exported屬性值為false。
在我們的應用程式的AndroidManifest.XML檔案中,我們應該將以下屬性新增到要保護的應用程式元件中。在我們的案例中,應該保護登入後的活動不被任意呼叫。
<activity android: label=”@7F070055″ android: name=”com.android.insecurebankv2.DoTransfer” android: exported=”false“></activity>
True:provider可供其他應用程式使用。任何應用程式都可以使用provider的內容URI來訪問它,具體取決於為provider指定的許可權。
False:provider不可用於其他應用程式。設定android:exported =“false”以限制對應用程式provider的訪問。只有與provider具有相同使用者ID(UID)的應用程式才能訪問它。
上面的程式碼嚴格限制了除了當前App之外的其他App或任何系統元件來訪問這個activities。只有與當前App具有相同使用者ID(uid)的App才能訪問這個活動。
自定義許可權來限制訪問
android:exported屬性值並不是限制activities暴露給其他App的唯一方法。我們還可以通過為activities設定自定義許可權來強制實施基於許可權的限制。如果開發人員想要對他的App元件設定許可權,只允許那些具有許可權的App才能訪問,這種自定義許可權的方法是非常奏效的。
敬請期待安卓應用程式滲透測試七
其他部分的連結如下: