经验分享 | 通过adbd配置漏洞在安卓设备上提升权限
近日,Android上的一個本地提權(quán)漏洞已被確認,該漏洞可通過設備上運行的Android Debug Bridge Daemon(adbd)被利用。
如果一個安卓設備被發(fā)現(xiàn)正在運行于TCP端口監(jiān)聽的adbd,那么設備上運行的惡意程序就可以進行連接和身份驗證,從而實現(xiàn)提權(quán)。該漏洞影響版本為Android 4.2.2到Android 8.0,編號為CVE-2017-13212。利用這種錯誤配置可以允許安卓應用從“u:r:untrusted_app:s0”提升為“u:r:shell:s0”。
影響
該adbd配置可以被設備上的惡意應用程序利用,不過惡意應用程序必須能夠連接到adbd正在監(jiān)聽的TCP端口,這就需要應用程序在它的AndroidMainifest.xml中定義INTERNET權(quán)限。一旦應用程序通過了adbd daemon的驗證,就可以使用adb shell用戶的權(quán)限執(zhí)行命令了。其可以安裝/卸載程序,讀寫SD卡,截取屏幕,注入觸摸事件來模擬用戶輸入等等。但由于默認情況下AOSP映像中adbd被配置為只能通過認證的USB連接訪問,因此該漏洞的影響已顯著降低。此外,安裝在設備上的程序無法強制ADB通過Wifi連接,因此僅當開啟“ADB over Wifi”功能時該露洞才可以被利用。
技術(shù)細節(jié)
只有在Android設備啟用了“USB調(diào)試”并且在TCP端口上監(jiān)聽adbd的情況下,此漏洞才存在。 先前通過TCP攻擊adb的研究已經(jīng)說明攻擊者和受害者需要在同一局域網(wǎng)內(nèi),然后通過局域網(wǎng)向adbd發(fā)起身份驗證,不過這個漏洞已經(jīng)在Android 4.2.2通過引入USB安全調(diào)試被修補,USB安全調(diào)試需要用戶驗證adb server的RSA公鑰來授權(quán)每一個adb server連接。因此,攻擊者必須在認證到adbd之前避開RSA認證。 下面顯示了此RSA身份驗證提示的一個示例:
在Android 5.0之前,Android的AOSP映像會將adb二進制文件發(fā)送到/system/bin/adb下。一些研究人員已經(jīng)發(fā)現(xiàn)可以使用這個二進制文件連接adbd并獲得shell用戶的權(quán)限。但是自Android 6.0,這個arm二進制文件就從AOSP中刪除了。不過即便是這樣,攻擊者也可以遠程地在目標設備上通過惡意應用打破或繞過現(xiàn)有的防御措施,并通過TCP利用adbd。
為了讓惡意應用程序能夠利用此配置漏洞,首先其必須識別adbd正在監(jiān)聽的TCP端口,然后向守護進程驗證其自身。一旦通過身份驗證,惡意應用程序就可以作為adb shell用戶在設備上執(zhí)行命令。此攻擊已經(jīng)在Android 7.1.2上進行了測試,還會影響所有支持通過TCP連接到adbd的版本。
使用adb命令“adb tcpip <portnumber>”來啟用adbd以監(jiān)聽TCP端口。為了演示此漏洞,adbd被配置為監(jiān)聽端口5555:
要確認adbd正在偵聽TCP端口5555,目標設備的netstat輸出如下所示:
在啟用了USB調(diào)試,且adbd正于TCP端口監(jiān)聽的情況下,惡意應用程序可以利用自帶的adb二進制文件連接adbd,或者可以實現(xiàn)adb server協(xié)議與adbd通信。如果adb server尚未被設備授權(quán),則會觸發(fā)認證請求并提示用戶驗證并接受RSA公鑰。
為了避免RSA 身份認證,攻擊者可以使用覆蓋圖部分掩蓋RSA公鑰提示以授權(quán)adb server。這種繞過adbd身份驗證的方法也可以被用于其他用途,在Android Manifest中聲明了SYSTEM_ALERT_WINDOW權(quán)限的應用程序能夠在SystemUI提示上繪制覆蓋圖。
為了證明這種攻擊,研究人員開發(fā)了一個PoC應用程序。應用程序綁定了預編譯的adb二進制文件,并使用該文件在設備上安裝一個adb server實例。此PoC應用程序定義了INTERNET權(quán)限,以允許其連接到adbd正在監(jiān)聽的TCP端口。其還定義了SYSTEM_ALERT_WINDOW權(quán)限,以繞過身份認證。為了驗證是否提權(quán),應用程序中還添加了一個”REFRESH ID”按鈕,可以顯示應用程序當前的uid和用戶組。以下截圖顯示了提權(quán)之前PoC應用程序的uid和用戶組:
上圖中的“ESCALATE”按鈕可進行提權(quán),代碼片段如下(如欲復制,點此查看原文):
點擊“ESCALATE”后,與PoC應用程序捆綁的adb server會嘗試連接到adbd,此時會觸發(fā)SystemUI的彈出,提示用戶接受adb server的RSA公鑰,具體如下圖所示:
該SystemUI窗口很容易遭到劫持,為了欺騙用戶,可以使用任意消息進行覆蓋,如下圖所示:
如果用戶點擊OK,RSA密鑰將被接受,應用程序啟動的adb server將成功驗證adbd。一旦認證,應用程序就可以通過adb server執(zhí)行命令。?以下屏幕截圖顯示了使用提權(quán)后執(zhí)行id命令的應用程序:
一旦升級到shell用戶,應用程序?qū)⒈皇谟铏?quán)限,uid變成了2000,并在/data/system/packages.xml中定義。 一些更有趣的列舉如下:
解決方法
在顯示RSA身份驗證提示的SystemUI彈出窗口中添加覆蓋檢測功能即可解決此漏洞。 該補丁包含在2018年1月5日的Android安全公告中。 建議Android用戶將設備更新。
*參考來源:mwrinfosecurity,Covfefe編譯,轉(zhuǎn)載請注明來自FreeBuf,COM
總結(jié)
以上是生活随笔為你收集整理的经验分享 | 通过adbd配置漏洞在安卓设备上提升权限的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: CVE-2017-8890漏洞分析与利用
- 下一篇: 绕过安卓SSL验证证书的四种方式