影響數千萬APP的安卓APP「寄生獸」漏洞技術分析

2021-01-20 紅客聯盟

0x00 前言

360手機安全研究團隊vulpecker近日發現了一種新型的安卓app安全漏洞,市面上數以千萬的app都受該漏洞影響。該漏洞一旦被攻擊者利用,可以直接在用戶手機中植入木馬,盜取用戶的簡訊、照片以及銀行、支付寶等帳號密碼,vulpecker以「寄生獸」命名這個漏洞。

目前vulpecker團隊已經通過補天平臺將相關詳情通知給各大安全應急響應中心,也向受此影響的各大廠商進行了通報,在此提醒用戶關注各APP廠商修復進程,並及時下載更新安裝最新的APP。

寄生獸是日本作家巖明均創作的漫畫《寄生獸》中的一種怪物,初始形態是一種蟲子,會鑽進生物的體內並奪取大腦,因人類嚴重的環境汙染而誕生,該漏洞的攻擊方式類似寄生獸的感染,可以長期駐留在受害者的手機內,本文將詳細分析這個漏洞,揭開漏洞的秘密。

0x01 關於app的緩存代碼

安卓的應用程式apk文件是zip壓縮格式的文件,apk文件中包含的classes.dex文件相當於app的可執行文件,當app運行後系統會對classes.dex進行優化,生成對應的odex格式的文件。

odex文件相當於app的可執行文件的緩存代碼,一般安卓系統在第一次加載運行apk時會將系統生成odex文件存放於/data/dalvik-cache目錄下。

如圖

可以看到該目錄下的文件只有system用戶有寫權限,只有在擁有system權限的情況下才能對odex文件進行寫操作。

0x02 廣泛流行的插件機制

由於安卓應用的升級都需要重新安裝程序,頻繁的升級給用戶體驗和開發都帶來了不便,所以市面上的app都開始採用插件機制,利用插件機制可以做到無縫升級和擴展功能,app只需要引入相應的插件文件就可以做到功能添加或升級,無需再重新安裝程序。

app插件機制的實現方式是把相關功能編寫成單獨的apk或jar文件,然後在程序運行時用DexClassLoader動態加載,進行反射調用。我們來看一下DexClassLoder的定義

public DexClassLoader (String dexPath, String optimizedDirectory, String libraryPath, ClassLoader parent)dexPath:是要加載的jar/apk的路徑optimizedDirectory:目標odex的路徑libraryPath:依賴的native library(so文件)路徑parent:父加載器

下面是常見的調用DexClassLoader的代碼片段

String dexFiles = "/data/data/com.test.dexload/app_al_sdk/drozer.apk";

final File optimizedDexOutputPath = appcontext.getDir("outdex", 0);

appcontext.getClassLoader();

DexClassLoader classLoader = new DexClassLoader(dexFiles, optimizedDexOutputPath .getAbsolutePath(), null, ClassLoader.getSystemClassLoader());

...

如圖drozer.apk插件在被調用後生成了drozer.dex緩存文件,注意這個文件是odex格式.

0x03 插件機制引入的攻擊點

在2013年,國外的mwr實驗室給出了一個利用中間人的方式劫持app升級插件的攻擊案例,參考

https://labs.mwrinfosecurity.com/blog/2013/11/20/applovin-ad-library-sdk-remote-command-execution-via-update-mechanism/

幾年前,大部分採用插件機制的app,在載入插件前都沒有對插件文件進行完整性校驗,導致黑客可以通過中間人劫持的方式替換app的升級插件,在插件中嵌入惡意代碼控制用戶的app和手機。

現今,大部分採用插件機制的app都加強了安全性,如最早使用插件開發方式的微信等app,在下載使用插件前都會校驗插件文件的籤名,黑客已經無法通過中間人的方式替換插件攻擊app。

0x04 插件機制新的攻擊點

近日,國外的nowsecure公司公布了三星輸入法的一個漏洞,利用過程直接替換了系統app的odex緩存代碼。參考:

https://www.nowsecure.com/blog/2015/06/16/remote-code-execution-as-system-user-on-samsung-phones/

三星輸入法是擁有系統最高級別的system權限,可以直接替換任意app的緩存文件。那安卓app插件的緩存代碼是否和APP主程序直接產生的緩存代碼一樣能被任意替換?

我們去android源碼中驗證了一下,通過DexClassLoader() 加載jar/apk文件,最終會通過native接口openDexFileNative() 進入到native層。

對應於android-4.2.2_r1/dalvik/vm/native/dalvik_system_DexFile.cpp中的Dalvik_dalvik_system_DexFile_openDexFileNative() 方法,在native層對幾個參數做一系列校驗,如果檢測到第二個參數指定的odex文件存在,則會調用dvmOpenCachedDexFile() 直 接打開,調用處的代碼如下:

fd = dvmOpenCachedDexFile(fileName, cachedName,

dexGetZipEntryModTime(&archive, entry),

dexGetZipEntryCrc32(&archive, entry),

isBootstrap, &newFile, /createIfMissing=/true);

很明顯,第3、4個參數對應的是優化前的classes.dex的時間戳和crc校驗值。最終會調用

dvmCheckOptHeaderAndDependencies(fd, true, modWhen, crc,

expectVerify, expectOpt)

如果crc、modWhen參數正確,則返回該odex的文件句柄;若crc、modEWhen校驗錯誤,則嘗試刪除錯誤的odex,並重建新的odex。所以,攻擊者如果要注入目標odex,需要對修改後的odex文件的crc及modWhen做修改。

下面是一個修改後的odex文件實例,dex_old是修改前的odex文件,dex_new是修改後的dex文件,兩個文件的md5不一樣,但是crc及modWhen卻是一樣的,這樣就可以繞過DexClassLoader的校驗。

0x05 「寄生獸」漏洞的真正危害

安卓應用的代碼緩存機制是程序在執行時優先加載運行緩存代碼,而google卻只對緩存代碼做了可以偽造的弱校驗,這明顯這是一個安全架構實現上的嚴重漏洞。

廣大app開發者再使用插件機制開發app時可以對插件文件做完整性校驗,而系統生成的緩存代碼卻無法做到有效保護,一旦攻擊者將惡意代碼注入到緩存代碼中,開發者對app插件文件做的各種保護都將失效。這種攻擊很難被發現,即使重啟或關機,只要app一運行,惡意代碼也會隨之運行,同時安全軟體對這一塊的檢查和防禦也幾乎為零。

0x06 現實中的「寄生獸」漏洞攻擊案例

1)利用zip解壓縮漏洞覆蓋緩存代碼

在三星輸入法漏洞的利用中,作者用到了安卓下的zip解壓縮漏洞,這個漏洞是單獨的一個漏洞,且由來以久,在google官方的文檔中已經做了警告,存在問題的是ZipEntry.getName()方法,我們看一下google文檔中對該函數的描述:

連結:http://developer.android.com/reference/java/util/zip/ZipEntry.html#getName() Gets the name of this ZipEntry

Security note: Entry names can represent relative paths. foo/../bar or ../bar/baz ,for example. If the entry name is being used to construct a filename or as a pathcomponent, it must be validated or sanitized to ensure that files are not written outsideof the intended destination directory.

可以看到google對該方法給出了一個安全提示,提示開發者如果該方法的返回值中包含有"../"跳轉符,需要特別注意不要將文件寫到了目標文件夾之外。如果不對"../"跳轉符做過濾,就有可能遍歷目錄,在解壓zip文件時以本app的權限覆蓋任意文件。

我們檢測後發現市面上幾乎所有使用zip解壓縮功能的app都存在漏洞,為「寄生獸」漏洞的攻擊提供了便利,主要分為三類情況:

APP關聯文件類

這類漏洞主要影響有皮膚功能的APP,如輸入法,瀏覽器類APP .很多app在manifest中做了zip類文件的關聯,如果註冊的文件格式被點擊,對應的app就會啟動解壓文件。下圖是app註冊文件關聯的一個示例

這個app關聯了一個ssf格式的文件,其實這個文件的格式是zip壓縮格式,用戶在手機中下載打開ssf文件時,就會啟動對應的app自動解壓文件,文件中包含的惡意代碼可以覆蓋該app的緩存代碼。

驗證某輸入法app漏洞視頻

http://v.youku.com/v_show/id_XMTI3NDA2MjkyNA==.html

APP自升級類

這類漏洞主要影響有自動升級下載zip類文件功能的app,在app下載文件過程中可以被中間人劫持攻擊,我們發現地圖類的app和sdk插件最容易收到攻擊,app在下載解壓資源文件的過程中被攻擊

驗證某地圖app漏洞視頻

http://v.youku.com/v_show/id_XMTI3MzgyMDU0MA==.html

APP默認解壓類

這類漏洞主要影響默認有解壓縮zip文件功能的app,如瀏覽器直接下載zip文件打開後,app就被感染緩存代碼。

驗證某瀏覽器漏洞視頻: http://v.youku.com/v_show/id_XMTI3NDIxMzUzMg==.html

2)利用adb backup覆蓋緩存代碼

如果開發者沒有在manifest裡指定allowBackup="false" ,就可以在不需要root權限的情況下備份、恢復app私有目錄下的數據。如果該app用到了插件機制,則對應的插件的odex文件也會被備份。攻擊者可以先用adb backup備份用戶數據,對備份下來的odex文件進行修改,然後用adb restore恢復回去,就可以替換掉正常的odex文件,造成代碼劫持。

3)其他可能的APP數據讀寫

如果一個木馬病毒利用root權限實施「寄生獸」漏洞攻擊方式,將能實現隱蔽的apt木馬攻擊方式,長期潛伏在用戶的手機類,安全軟體很難發現app的緩存代碼被感染了。

0x07 「寄生獸」漏洞的防護方案

「寄生獸」漏洞的核心有兩點,一是google沒有考慮odex的安全問題需要開發者自己做防護,另一個是要阻斷漏洞的攻擊入口和利用方式,這裡我們給出一些防護建議緩解該漏洞的攻擊。

對odex文件進行完整性校驗

由於對odex一般是由系統(DexClassLoader)自動生成的,且odex與apk/jar是相對獨立的,開發者事先無法知道odex文件的MD5等信息,所以很難通過MD5校驗等手段保護odex的完整性;同時,系統的DexClassLoader函數只是校驗了odex中的crc、modWhen欄位,可以很輕易的被繞過。

所以,目前對odex的防護只能由app自身來做,可以在每次運行DexClassLoader之前,清除已經存在的odex;

另外,在odex第一次生成之後,存儲odex文件的MD5值,以後每次調用DexClassLoader的時候都對odex文件進行MD5校驗。

對可能的劫持odex的攻擊入口漏洞進行修復

對zip解壓縮的漏洞,只需要在調用zipEntry.getName()的時候,過濾返回值中的"../"跳轉符。對於引用的第三方的zip庫也需要注意,可以用上面的測試用例測試一下第三方庫是否有zip解壓縮的漏洞;

調用DexClassLoader動態加載dex的時候,第二個參數不要指定在sdcard上;

在manifest裡指定allowBackup=」false」,防止應用數據備份覆蓋;



相關焦點

  • 安卓爆存在「寄生獸」漏洞神不知鬼不覺的盜取用戶支付寶餘額
    安卓爆存在「寄生獸」漏洞神不知鬼不覺的盜取用戶支付寶餘額時間:2015-07-04 13:15   來源:中華軍事網   責任編輯:曉蕊 川北在線核心提示:原標題:安卓爆漏洞:高達九成APP都已中招來源:中華軍事網 今天,央視《新聞直播間》對新發現的寄生獸安卓APP漏洞做了長達3分鐘的報導。
  • 變色龍app製作:怎樣製作一款自己的app,app製作流程全解
    隨著科技時代的到來,只需打開手機,大家就會看到各式各樣的手機app應用軟體,各種APP應用軟體讓人們的生活變得方便快捷且非富有趣,那麼,怎樣製作一款自己的app呢?app製作的具體流程是什麼呢?接下來就為大家介紹一下怎樣製作app?
  • 安卓破解單機遊戲app
    九遊安卓破解單機遊戲app遊戲的分類相當豐富,用戶能輕鬆找到自己喜歡的遊戲類型。而排行裡用戶可以以新發布、下載量、評分來為遊戲排序,篩選遊戲非常方便,找到心儀遊戲完全沒難度!
  • 安卓無限內購破解遊戲大全 十大安卓破解遊戲app
    安卓無限內購破解遊戲大全 十大安卓破解遊戲app 來源:www.18183.com作者:wer時間:2020-11-18 安卓無限內購破解遊戲大全,十大安卓破解遊戲app.在這裡你可以每天都能看到最新破解遊戲資源下載
  • 地圖服務App分析報告 | 人人都是產品經理
    地圖服務app一直是日常使用非常頻繁的app種類。由於資質、技術、資源等因素的限制,地圖服務類app的進入門檻相對較高,看起來遠沒有其他行業那麼熱鬧喧囂。的用戶為16-35歲區間地圖服務app的安卓手機用戶中,OPPO手機佔比26.0%,排名第一一、行業介紹手機地圖服務行業的定義地圖服務app是以地圖為載體,提供地點位置信息(定位和搜索)、路線規劃、導航、路況信息以及基於地理位置各種服務的app。
  • 安卓手遊平臺哪個好用 2021安卓手遊平臺十大app_18183專區
    18183首頁 安卓手遊平臺哪個好用 2021安卓手遊平臺十大app 點擊領取
  • 【萬達APP 19元熱映】帶你走進《寄生獸》的世界
    寄生獸變身特寫片段共計17幕,寄生獸殺人吃人血腥場面共13幕,男主打鬥動作片段共計10餘幕,長達36分鐘。據悉成片在120分鐘左右,也就是說刪減掉了100分鐘左右內容,難道這些大尺度全部刪減了嗎?1.《寄生獸》上集的主線是新一與母親的親情線,他們兩人的戲份應該不會被刪減,由結局往前面倒推。①上集結尾,被寄生獸A寄生的母親和新一的戰鬥部分肯定會保留。②被寄生後的母親回到家裡,與新一戰鬥也將會保留。③母親被寄生的前因,是因為新一擊敗寄生獸A(警察)後,寄生獸A頻臨死亡。沒想到偶遇路過菜市場的新一媽媽,於是更換宿主。
  • 地震預警APP安卓/iOS版在哪下載?ICL地震預警APP下載地址
    地震預警APP安卓/iOS版在哪下載?ICL地震預警APP下載地址 由成都高新減災研究所研製的地震預警APP(ICL)安卓版和iOS在哪裡可以下載到呢,具體的下載地址是哪裡,以下我們來看下這個地震預警APP的下載地址。
  • 手機APP定位的基本原理分析
    打開APP 手機APP定位的基本原理分析 AA小小夏 發表於 2020-03-22 16:05:00 那麼app是如何得知當前設備所處的位置的呢?
  • 推薦幾款OCR識別App(提取圖像中的文字,適用安卓與ios)
    Ocr識別技術,說直白一點,就是把以圖像形式存在的文字變成可編輯的文字.書本OCR識別之後:10每個人都聽命於三個「長官」控制模式必須因時制宜,一藥不能治百疾現在讓我們來看看人的行為如何被控制或影響安卓系統應用-全能分詞(錘子BigBang)各大安卓手機的應用市場都能搜索下載到,小米應用商店名字是"全能分詞",酷安裡面是"錘子BigBang"(因為作者開發這個App是基於錘子公開的BigBang開源項目的)安裝好之後,登陸時候就有相應的功能介紹
  • 短視頻app開發,有哪些只有行內人才知道的事?
    那麼,站在技術的角度上看,是什麼推動了短視頻app的發展,我們該如何進行短視頻app開發工作,才能使用戶更喜愛短視頻app呢?2、 短視頻app開發技術成熟隨著短視頻app開發技術的成熟,軟體開發公司開發出成熟可用的短視頻源碼,短視頻app開發的成本越來越低,導致很多短視頻app加入市場,擴大了市場。
  • 校園社交app競品分析報告
    ,筆者認為現有的校園app大致可以分為三類。 其他的app,如完美校園、易校園等均為多功能校園生活服務類平臺,涵蓋生活、學習、交友等功能。 結合用戶使用量、產品類型與功能特點,本文選取今日校園和超級課程表作為競品進行分析。
  • 第三方app才是元兇
    其實,WiFi探針技術本無偷竊個人隱私的功能,手機裡亂裝的第三方app才是出賣用戶數據的元兇。WiFi探針不能獲取個人信息許多網友們現在還是搞不清WiFi探針是什麼。其實,WiFi探針是依附於無線AP等WiFi發射設備中的一種功能。
  • APP購票低至19元《寄生獸》一言不合就腦袋開花
    因為看過原著漫畫或者改編動畫的朋友們一定知道,《寄生獸》這部作品是多麼「少兒不宜」,尤其是不少怪物「變身」的片段,而且關鍵是動漫被禁,感覺控制不住體內的洪荒之力~而《寄生獸》這還原度我是服的。各種寄生獸形態的神還原(門面擔當米奇還帶著些許萌感):
  • 關於比心APP的市場分析及發展策略
    筆者從需求分析、市場分析到功能結構和部分界面,對比心app提出了自己的建議。比心app,作為吃雞直播間裡常常用來找玩伴的app,即陪玩app(能找著長得好看,聲音又好聽的小姐姐),目前商城裡能夠存活的app只有這一個,所以本文也不進行競品分析了
  • 變態手遊app排行上最好玩的變態手遊app變態手遊平臺_國內動態...
    變態手遊app排行上最好玩的變態手遊app變態手遊平臺。今天小編要為大家介紹一個可以下載的變態手遊app排行上最好玩的變態手遊app變態手遊平臺咪嚕遊戲。咪嚕遊戲是迄今為止變態手遊app排行上最好玩的變態手遊app變態手遊平臺!新用戶送首充,從此手遊無氪金!咪嚕遊戲同時聚合了bt,gm,折扣的多款手遊,同時提供安卓和ios版本下載。
  • 騰訊發現一個可克隆幾十款App的漏洞,多款應用受影響
    騰訊方面同時傳來了信息::騰訊玄武實驗室上報了一個重大漏洞,這屬於一個應用克隆的漏洞,騰訊方面還提出了漏洞利用方法。這也透露了一個信息,這個漏洞應該是影響安卓系統的多款應用,不然工信部領導不會來站臺。3點半左右,發布會開始,懸念揭曉。
  • 找app外包公司應該注意什麼
    現在很多非網際網路企業要開發app的話,基本都是找的外包公司,那麼在找外包公司合作的時候,應該注意哪些問題呢?西安青雲在線小編告訴您,現在我們一用百度搜索,就會出現很多的軟體開發公司,但是如何確定一家公司的開發實力如何呢?其實很簡單,那就是得從具體的一些產品和案例來看,這樣的話比較放心。
  • 大型單機遊戲破解版app_下載大型單機遊戲的app
    破解版遊戲近幾年很受玩家喜愛,遊戲將收費內容破解,還免費內購,可以說是玩家們的福音了,市面上有很多大型單機遊戲破解版app,那麼哪個軟體比較好呢?有比較好的安卓單機破解遊戲盒子嗎?下面小編就要帶來10款精品app推薦,一起來看看吧。