ParseDroid漏洞:針對Android開發者和安全分析人員
傳送門
Apktool未正確解析XML導致的XXE漏洞分析
一、前言
Check Point研究團隊在最近研究工作中發現了一些漏洞,任何單位或組織只要涉及Java或Android開發工作都可能受這些漏洞影響,攻擊者可以利用這些漏洞來滲透這些目標。
漏洞存在於開發者工具中,下載版及雲服務版均存在這一問題。這些開發者工具的使用範圍非常廣泛。作為世界上最大的應用生態系統,Android應用使用的正是這類開發者工具。這些工具中包括所有Java或Android程序員用來生成應用的工具,也包括安全分析人員所使用的一些工具。
今年年初時維基解密公布了名為「Vault7」的一系列文件,從這些文件中,我們了解到CIA以及NSA正在利用各種公司產品中的漏洞來實施攻擊,這些公司規模大小不一,遍布全球。今年年初時,我們也看到過與CIA有關的安全事件,當時CIA攻擊了CCleaner、Notepad++以及其他軟體,目的是利用供應鏈渠道將惡意軟體滲透到目標組織中,以收集相關企業及用戶信息。
經過研究後,我們發現了某些安全漏洞,這些漏洞會影響最常用的Android IDE工具(如Google的Android Studio以及JetBrains的IntelliJ IDEA以及Eclipse產品),也會影響用於逆向分析Android應用的主流工具(如APKTool、Cuckoo-Droid服務等)。
我們可以利用這些工具來訪問內部文件,大家可以觀看下面這個視頻了解利用過程。2017年5月,Check Point向APKTool開發者以及其他IDE公司報告了研究成果。隨後,Google以及JetBrains驗證並確認了這些安全問題,發布了相應補丁,成功修復這些漏洞。
視頻演示:
http://v.youku.com/v_show/id_XMzIxMTc2ODMzMg==.html
二、技術細節:從XXE到RCE
我們第一階段研究工作主要關注的是APKTool(全稱為Android Application Package Tool)。
作為第三方Android應用最常用的一個逆向分析工具,APKTool可以用來支持自定義平台、分析應用程序、解碼及重構應用資源等。
2.1 XXE漏洞
APKTool最主要的兩個功能為:
1、反編譯(Decompile)APK文件;
2、生成(Build)APK文件。
在研究過程中,我們發現這些功能中存在安全漏洞。
查看APKTool的源碼後,我們找到了一個XML外部實體(XML External Entity,XXE)漏洞,APKTool所使用的XML解析器並沒有禁用外部實體引用功能,因此在解析程序內部的XML文件時就會存在XXE漏洞。
存在漏洞的函數為loadDocument,APKTool兩個核心功能(生成及反編譯)中都會用到該函數。
這個漏洞會讓APKTool用戶操作系統中的文件暴露無遺,也就是說,攻擊者可以利用XXE漏洞,通過惡意「AndroidManifest.xml」文件來竊取受害者主機上的任何文件,並將這些文件發送到攻擊者控制的遠程伺服器上。XXE攻擊可以導致各種安全風險,不單單局限於這種攻擊場景。
為了讓Android開發者及研究人員認識到該漏洞的嚴重性,我們將研究內容拓展到存在漏洞的XML解析器:DocumentBuilderFactory,這是APKTool項目中使用的解析器。
2.2 開發者工具中的漏洞
在後續研究中,我們發現其他項目所使用的XML解析器也存在漏洞。此外,我們發現用來開發Android應用的IDE工具也受這類漏洞影響,這些工具包括Intellij、Eclipse以及Android Studio。
當IDE載入Android工程中的惡意「AndroidManifest.xml」文件時,就會按照攻擊者的指示,泄露攻擊者所需的任何文件。
為了演示漏洞利用過程,我們將一個惡意項目庫上傳到GitHub,並將其克隆(clone)到某個Android Studio項目中。
帶有XXE攻擊載荷的惡意Github工程如下所示:
將其克隆到Android Studio中:
攻擊結果:攻擊順利完成,受保護的文件現在已被竊取,發送到攻擊者控制的伺服器中,用戶對整個過程毫無知覺,如下圖所示:
此外,我們也發現了另一種攻擊場景,實際環境中攻擊者可以將包含XXE載荷的AAR(Android Archive Library)庫注入到倉庫中,藉此大範圍攻擊Android開發人員。
比如,攻擊者可以將被感染的AAR上傳到公共倉庫中(如中央Maven庫),但在演示場景中,我們會將被感染的AAR上傳到本地倉庫中。當受害者從該倉庫克隆被感染的AAR時,攻擊者就可以從文件系統上竊取敏感文件,比如配置文件、源代碼、公司保密數據等。
將惡意AAR上傳到本地倉庫:
將AAR添加到Android Studio工程中:
攻擊結果:攻擊順利完成,受保護的文件現在已被竊取,發送到攻擊者控制的伺服器中,用戶對整個過程毫無知覺,如下圖所示:
對APKTool進一步研究後,我們找到了另一個漏洞,利用該漏洞我們可以在受害者主機上執行系統命令。
APKTool有一些高級用法,其中包括名為「APKTOOL.YML」的一個配置文件。
該文件中包含一個比較有趣的欄位,即「unknownFiles」。用戶可以在該欄位中包含非標準的文件路徑,APK重建過程中會將這些文件存放在合適的位置。這些文件存放在文件系統的「Unknown」目錄中。
正常的「APKTOOL.YML」文件結構如下圖所示:
通過操控「APKTOOL.YML」文件中「unknownFiles」欄位所包含的文件路徑,攻擊者有可能能夠將任意文件注入到文件系統上的任意路徑(路徑遍歷攻擊)。這是因為APKTool在處理過程中,並沒有驗證從APK文件中提取的未知文件所存放的具體路徑。
實際上,只要能將任意文件注入到文件系統的任意路徑中,攻擊者就能達到遠程代碼執行(Remote Code Execution,RCE)目的,也就是說,只要APKTool用戶或服務嘗試解析攻擊者精心構造的惡意APK文件,就容易受到RCE攻擊影響。
在演示場景中,我們創建了一個Web網站,其功能與官方的APK在線解碼器(https://apk.tools)類似。
APKTool會將惡意文件釋放到伺服器上的wwwroot目錄中(這裡我們使用的惡意文件為一個PHP web shell):
當使用修改後的配置文件來生成APK文件時,就會生成包含惡意文件的一個APK文件,惡意文件位於我們構造的異常路徑中。
將該APK上傳到我們搭建的演示站點後,攻擊者就可以在這個伺服器上執行系統命令。只要任何在線或者離線服務在後台使用APKTool來解碼APK文件,攻擊者就可以對這些目標發起攻擊。
當然,除了RCE以外,該漏洞還可以配合各種攻擊方法加以使用,我們演示的這種方法只是其中一個攻擊場景。事實上,利用路徑遍歷方法,我們可以將任何文件複製到文件系統中的任意路徑中,這也大大拓展了攻擊面的範圍及種類。
三、總結
本文演示的這些攻擊方法適用於跨平台及通用場景,因為APKTool可以在各種操作系統上運行,如果APKTool在系統上不受任何限制,攻擊者也可以藉此攻擊這些系統。
想精確估計這個開源項目的用戶數量是不可能完成的一個任務。然而,我們知道這些用戶中包含一些大型服務及企業(如https://apk.tools、http://www.javadecompilers.com/APKTool、https://www.apkdecompilers.com/、http://undroid.av-comparatives.info以及Cuckoo droid等),我們聯繫了APKTool研發人員以及IDE公司,他們修復了所有安全問題,發布了更新補丁,更新了相應軟體的版本。
登錄安全客 - 有思想的安全新媒體查看更多信息~
推薦閱讀:
※操作系統為什麼都有無數的漏洞?是故意留下的還是技術上無法達到完美?
※科普 | 你必須了解的漏洞利用緩解及對抗技術
※OpenSSL 漏洞對普通網民有什麼影響,應該做些什麼?
※如何看待谷歌在微軟發布補丁之前公布並演示相關漏洞?
※Dirty Cow, CVE-2016-5195漏洞的危害大概怎麼樣,有沒有修復方案建議?