Android 漏洞研究介紹
Android 研究環境準備
進行 Android 漏洞研究的環境可分為模擬器(emulator)環境以及實體手機環境,模擬與實體手機上的研究還是存在差異性。如模擬環境中無法將硬體一同模擬,不同廠牌的手機也會有自己實作應用程式、保護機制等,因此在研究的選擇上主要會以實體手機為主。
選擇較好進行刷機 (rooting) 的手機做為研究設備能夠較快建立好研究環境,如 Google 、小米等。 Rooting 的目的在於能幫助研究人員能夠進行更加便利的使用,以及較能不受到 SELinux 安全機制的影響。
高層級攻擊面 (High-level Attack surface)
Android APP 層面的攻擊面有非常多,包含受保護的組件 (protected component) 上的錯誤設定(misconfiguration),導致 APP 能夠存取到任意系統檔案。或者 APP 開發者使用動態方式將系統路徑的函式庫進行載入,若該 APP 存在路徑遍歷 (path traversal) 相關漏洞的話,則能將該 APP 載入惡意的函式庫 (share object file) 達到持久性本地程式碼執行 (persistent local code execution) 或者遠端程式碼執行 (RCE, Remote Code Execution)。
- Android 深度連結 (Deep link) : Android 中的 Deep Link 是一種特殊的 URL,允許應用程式直接導到應用內的特定內容或頁面,而不僅是啟動應用程式的主畫面。在 Pwn2own 2022 有參賽者 利用 Samsung Galaxy Store 中的 Deeplink 漏洞達到程式碼執行,能夠安裝並開啟任意 APP。
- 動態程式碼載入 (Dynamic code loading) : Android APP 也會使用 share object files,以 CVE-2021-40724 為例,該漏洞發生在 adobe PDF Reader APP 中,漏洞成因為 APP 允許使用者以 URL 形式將期望開啟的 PDF 路徑傳給 APP。然而在後續功能實作中並未對該路徑內容進行檢查,導致了 path traversal 的漏洞。攻擊者能夠透過該漏洞建立出任意檔案,PoC 為利用 path traversal 建立 APP 預設會載入的 share object file,其中 share object file 的內容為攻擊者所能控制,藉此達到 RCE。
- 受保護的組件 (Protected components) : 在 Android 系統中
intent
是一個可序列化 (Parcelable) 的物件,然而開發者可能會不小心使用錯誤的呼叫方式,或者檢查不夠嚴謹,導致攻擊者能夠從使用第三方 app 來存取到目標 app 底下的相關資訊。
低層級攻擊面 (Low-level Attack surface)
- Android kernel : 由於 Android kernel 是基於 Linux kernel 開發的,因此若是在 Linux kernel 中存在的漏洞, Android 系統上也是有可能具有相關漏洞,如 Dirty-CoW , Dirty Pipe 等漏洞皆能夠在 Android 系統中重現,但由於 OS 環境上的差異性,會使得重現過程中需繞過如 SELinux 等問題。
- Android kernel driver : Android kernel driver 負責與硬體設備的溝通,若在其中存在漏洞也可能導致攻擊者能夠在目標手機上提權拿到 root。如 ARM 的 Mali GPU driver 目前已被發現存在多個漏洞。
- Android TEE : Android 系統中大多使用 TEE (Trust Execution Environment) 來保護裝置的安全性,不同手機廠牌會根據所使用的 CPU 晶片來決定使用哪個架構的 TEE,如 Samsung Exynos 使用的 TEE 環境為 TEEGRIS,而 Pixel4 XL 使用的為高通的 QSEE。 TEE 的攻擊面有 TEEOS 以及 TA (Trusted Applications) 等。
漏洞重現
我們針對 Android 系統環境中進行漏洞的移植及重現,幫助研究人員了解成因及系統架構上的差異性。在 2022 年的 HITCON 中,我們以成功移植 Dirty-Pipe (CVE-2022-0847) 的漏洞到 Android 12 Pixel6 的手機。
在該研究的最終目的是希望能夠在 Android 系統中使用 Dirty-Pipe 漏洞,並且能夠獲取繞過 SELinux 的 reverse root shell。
Dirty-Pipe 漏洞介紹
當 Pipe 在進行操作時,會使用 zero copy,來降低資源的浪費。對 page 進行操作時會使用 page reference 進行操作。其中
PIPE_BUF_FLAG_CAN_MERGE
flag 設上後會以當下的 page 進行寫入而不會重新 allocate 新的 page。Dirty-Pipe 漏洞發生在 Pipe 操作時由於
PIPE_BUF_FLAG_CAN_MERGE
並未初始化而導致使用時不會重新分配新的 page 而是直接對拿到的 page 進行寫入,因此可以透過 splice system call 來獲取想要 overwrite 目標的 page ,再以 Dirty-Pipe 漏洞進行寫入,就能達到對 read-only 檔案有著趨近於任意寫的功能。Dirty-Pipe 本身在任意寫上存在一些限制:
- 對檔案必須要有 read 與 open 的權限
- 每一次寫入只能寫 1 個 page 大小
- page 的第 1 個 byte 無法進行寫入
- None-regular file 是不能寫入
Linux 系統中 Dirty-Pipe 漏洞提權方法
有著趨近於任意寫的功能下,能夠對任何能夠 open read 的檔案進行寫入,在 linux 系統中提權方法相較於 Android 系統中較為簡單與直接。
- 找出帶有 SUID 的程式作為目標,如
/usr/bin/sudo
,將該程式的 Entry point 複寫為 Shellcode 的位置即可以 root 權限開啟 Shell 。
Reference
TeamT5 杜浦數位安全專精網路威脅研究,提供端點偵測與回應(EDR)解決方案 - ThreatSonar,有效偵測,避免企業系統漏洞遭到有心人士濫用、遭遇資安攻擊。團隊具備超過10年的惡意程式與進階持續性威脅(APT)的經驗,基於地緣和語言優勢,我們有效掌握亞太地區的駭客攻擊,協助美日臺大型企業有效保護商業機密文件,營運不受網路攻擊影響;更經常受邀參加世界級資安會議、發表研究成果。若您有資安防護的需求,歡迎填寫諮詢表單