Android Fuzz 漏洞挖掘初探

2021-09-05 10:33:42 字數 2769 閱讀 4137

最近因為某些原因,主要看了幾乎能找到的安卓相關的fuzz指令碼。當然時間原因具體實際測試的並不是特別多,下面就發現的一些問題,以及個人想法分享一下。

(1) binder 機制

android的binder機制

binder其實也不是android提出來的一套新的程序間通訊機制,它是基於openbinder來實現的。binder是一種程序間通訊機制,它是一種類似於com和corba分布式元件架構,提供遠端過程呼叫(rpc)功能。

那麼何為binder?

直觀來說,binder是android中的乙個類,它繼承了ibinder介面;

從ipc角度來說,binder是android中的一種跨程序通訊方式,binder還可以理解為一種虛擬的物理裝置,它的裝置驅動是/dev/binder,該通訊方式在linux中沒有;

從android framework角度來說,binder是servicemanager連線各種manager(activitymanager、windowmanager等)和相應managerservice的橋梁;

從android應用層來說,binder是客戶端和服務端進行通訊的媒介,當你bind service的時候,服務端會返回乙個包含了服務端業務呼叫的binder物件,通過這個binder物件,客戶端就可以獲取服務端提供的服務或者資料,這裡的服務包括普通服務和基於aidl的服務。

在android系統的binder機制中,由系統元件組成,分別是client、server、service manager和binder驅動程式,其中client、server和service manager執行在使用者空間,binder驅動程式執行核心空間,如圖1所示。binder就是一種把這四個元件粘合在一起的粘結劑,其中核心元件便是binder驅動程式了,service manager提供了輔助管理的功能,client和server正是在binder驅動和service manager提供的基礎設施上,進行client-server之間的通訊。service manager和binder驅動已經在android平台中實現好,開發者只要按照規範實現自己的client和server元件就可以了。

(2) aidl機制

aidl (android inte***ce definition language) 是一種idl 語言,用於生成可以在android裝置上兩個程序之間進行程序間通訊(interprocess communication, ipc)的**。如果在乙個程序中(例如activity)要呼叫另乙個程序中(例如service)物件的操作,就可以使用aidl生成可序列化的引數。

aidl ipc機制是面向介面的,像com或corba一樣,但是更加輕量級。它是使用**類在客戶端和服務端傳遞資料。只有你允許客戶端從不同的應用程式為了程序間的通訊而去訪問你的service,以及想在你的service處理多執行緒。如果不需要進行不同應用程式間的併發通訊(ipc),或者你想進行ipc,但不需要處理多執行緒的。使用aidl前,必須要理解如何繫結service。

aidl ipc機制是面向介面的,像com或corba一樣,但是更加輕量級。它是使用**類在客戶端和實現端傳遞資料。

(1)系統保留測試介面

android給我們留下了「測試後門」。在shell中,通過service指令可以直接對系統服務進行測試,並支援對所有aidl檔案中定義的方法的測試。

直接adb shell service list 列出系統服務名稱,如圖二所示:

測試命令 :service call service code 就是對aidl檔案中定義的方法的測試。其中,service就是對應的service名,code就是在aidl檔案中定義的方法,其數值根據定義的方法遞增,從1開始。方法中的引數是直接給的null 值。測試指令碼如下圖三:

在實際測試過程中,直接fuzz出來的有乙個本地拒絕服務漏洞、以及ui服務的一些影響系統可用的bug。比如下面的漏洞,在華為手機測試出來的,最新版本已經修復了adb 命令: service call package 100 即可觸發漏洞

bug資訊,如下圖5:

漏洞位置如下圖6:

根據bug資訊,找到pm包的**,可以定位到漏洞的真正原因,沒有對packagename校驗null值造成的本地拒絕服務。

這算是第一次真正的自己嘗試去挖漏洞,收穫還是挺大的,從了解fuzz 基礎,到參考別人指令碼去實現某些測試,這個過程也遇到了不小的難題。比如在嘗試進行檔案fuzz的時候,對各種檔案格式了解不夠詳細,在生成畸形檔案測試的時候就無從下手。繼而,在安卓驅動fuzz部分也是進行了嘗試,自己去寫了一些指令碼,寫的過程中發現在構造引數的過程構造不出合適資料,造成fuzz 指令碼沒有真正發揮作用。這些問題,最終都要解決。

最後,最近一段時間會花大量時間在漏洞挖掘這塊,如果有感興趣的小夥伴也希望能一起多交流。

文章:指令碼:

漏洞挖掘 目錄瀏覽漏洞

web中介軟體如果開啟了目錄瀏覽功能,當使用者訪問web應用時,web伺服器會將web應用的目錄結構 檔案資訊返回給客戶端,攻擊者可能利用這些敏感資訊對web應用進行攻擊,如資料庫指令碼sql檔案路徑洩露 程式備份壓縮檔案路徑洩露等。中 直接訪問web應用存在的一些目錄,如果返回檔案列表資訊,證明存...

漏洞挖掘 弱口令漏洞

應用存在預設口令或口令較簡單易被猜到。高 首先登陸進入dvwa後,修改安全等級 然後在brute force模組進行測試弱口令 使用brupsuite進行抓包 發現賬戶和密碼是使用get方式提交的,然後我們右鍵將抓到的包傳送到intruder模組進行暴力破解 進入到intruder模組後,發現有四種...

Android APP漏洞挖掘

0x00 1 元件公開安全漏洞 參考android 元件安全。2 content provider檔案資料夾遍歷漏洞 參考content provider檔案資料夾遍歷漏洞 3 androidmanifest.xml中allowbackup安全檢測 4 intent劫持風險安全檢測 參考androi...