Android逃逸技術匯編

分類:技術 時間:2016-10-24

360烽火實驗室

摘 要

  • 傳統逃逸技術涉及網絡攻防和病毒分析兩大領域,網絡攻防領域涉及的逃逸技術主要為網絡入侵逃逸技術,病毒分析領域涉及到的逃逸技術主要包括針對靜態分析、動態分析的木馬逃逸技術。
  • 本文介紹的Android木馬逃逸技術研究了針對用戶感知、殺軟查殺、沙箱動態養殖和人工分析的各種逃逸技術。
  • 大多數Android木馬的作惡途徑是長期留存用戶終端,通過持續性作惡獲取收益。
  • 為達到穩定留存的目的,大多數Android木馬使用的逃逸技術多為復雜的組合技術,并且通過木馬的自更新技術不斷升級逃逸技術。
  • 總結了Android木馬逃逸模型來描述Android木馬逃逸的一般性原理。
  • 我們將Android木馬生命周期內的每個環節串聯起來,形成了Android木馬逃逸鏈,而對應的感知元素串聯起來即Android木馬的(被)感知鏈。
  • Android木馬的逃逸技術具有明顯的針對性,按照其針對的目標可以分為殺軟逃逸技術、沙箱逃逸技術、對抗分析工具的逃逸技術、針對用戶感官的逃逸技術和反追蹤逃逸技術五個大類。
  • 殺軟逃逸技術主要涵蓋針對殺毒引擎規則和安全軟件的一系列逃逸技術。從長期的分析工作中,我們發現木馬更加偏向使用多種逃逸技術組合,以增強其自身的逃逸能力。
  • 沙箱逃逸技術涵蓋了針對沙箱環境和沙箱規則的逃逸技術。針對沙箱環境的檢測包括系統屬性、硬件屬性和網絡環境等方面,針對沙箱規則的逃逸涉及網絡請求、觸發條件、詞法分析等方面。
  • 針對分析工具的逃逸技術主要包括針對靜態分析工具、動態分析工具和抓包工具的逃逸技術,以及高級對抗方式——加固。
  • 針對用戶感官的逃逸技術主要針對用戶視覺和聽覺進行偽裝和欺騙,或騙取用戶點擊運行木馬,或掩蓋木馬運行后的痕跡。
  • 反追蹤技術針對分析師或網絡執法人員的分析追蹤。木馬投放者通過隱蔽的傳播手法投放木馬,試圖隱藏木馬的來源。
  • 我們相信安全技術共享是安全技術進步強有力的推動力,我們通過報告的形式共享安全技術以期望能夠推動國內移動安全技術的進步,我們也希望各友商都能夠參與到安全技術共享的活動中來,聯手將Android生態環境治理的更好。

關鍵詞:Android木馬、逃逸技術、沙箱逃逸、反追蹤

第一章 引言

一、 傳統逃逸技術簡介

傳統逃逸技術涉及網絡攻防和病毒分析兩大領域。網絡攻防領域涉及的逃逸技術主要為網絡入侵逃逸技術,如IPS[1]入侵逃逸技術和AET[2];病毒分析領域涉及到的逃逸技術主要包括針對靜態分析、動態分析(如動態調試和沙箱養殖)的木馬逃逸技術。

二、 網絡入侵逃逸技術

(一) 網絡入侵逃逸的基本定義

所謂入侵逃逸技術就是對原有的攻擊載荷進行變換或處理的技術,以便能夠逃脫入侵檢測防御系統的檢測,達到入侵后端服務器的目的。現有的入侵逃逸技術主要從網絡層和應用層兩個層次進行研究[3]。

網絡層逃逸技術主要利用 IP 分組的分片重組機制、TCP 流的組裝機制等實施逃逸,主要包括碎片化、分片重疊、分片覆蓋和分片超時。

應用層逃逸技術借助應用及協議所支持的各種變換能力來達到對畸形特征的隱藏,主要包括編解碼、載荷變換、應用或協議特性。

(二) IPS入侵逃逸技術

入侵預防系統(Intrusion Prevention System,縮寫為IPS),又稱為入侵偵測與預防系統(intrusion detection and prevention systems,縮寫為IDPS),是計算機網絡安全設施,是對防病毒軟件(Antivirus Softwares)[4]和防火墻的補充[1]。

入侵行為的實質就是利用了目標系統設計或編碼中存在的問題而形成的漏洞。攻擊者通過特定的攻擊報文(攻擊報文或在內容結構上、或在出現的時序上、或在流量的大小上進行精心構造),然后通過目標系統的漏洞,使目標系統或應用處于無法正確處理的狀態,從而達到攻擊目的。基于這種攻擊原理,IPS系統可以提取出這種利用漏洞的各種攻擊報文在內容結構上、出現時序上等等的特征,并對網絡數據流進行檢測匹配,從而阻斷攻擊報文[5]。

IPS入侵逃逸技術是針對IPS的逃逸技術。

(三) AET

高級逃逸技術AET( Advanced Evasion Technique),也稱高級隱遁技術、攻擊躲避技術。AET技術的目標是躲避開安全設備的監測,建立一條通往目標系統的“綠色”通道。常見的AET類型包括如下三類[6]:

  • 利用通訊協議參數的變換,或者是不同開發者理解上的差異,造成安全設備與目標系統的理解不一致。
  • 利用協議分片傳送技術,主要是安全設備重組與目標重組的不同,對協議理解上的差異,或者是造成重組時的紊亂,甚至無法重組。
  • 混淆不同的字符集,躲避IPS/WAF的特征匹配。

三、 木馬逃逸技術

傳統木馬逃逸技術包含靜態(Static)逃逸和動態(Dynamic)逃逸兩個層面。靜態層面的逃逸技術主要針對簽名規則和靜態反編譯工具,常見的逃逸技術包括Polymorphism、Metamorphism和Packing等;動態層面的逃逸技術主要針對沙箱養殖、動態調試和API調用監控,常見的逃逸技術如Red Pills、ScoopyNG、Anti Debugging Traps和Run under conditions等。

圖1.1 木馬逃逸技術[7]

四、 Android木馬逃逸技術簡介

本文介紹的Android木馬逃逸技術與傳統的網絡入侵逃逸技術和木馬逃逸技術略有不同,其范圍遠遠超出了上述各種類型的逃逸技術。本文對Android木馬逃逸技術的描述不遵從嚴格的學術定義,旨在研究Android木馬的逃逸周期,匯總周期內各個環節現已出現的各種逃逸技術,以供業內人士和安全廠商參考,助其升級查殺策略。

本文介紹的Android木馬逃逸技術研究了針對用戶感知、殺軟查殺、沙箱動態養殖和人工分析的各種逃逸技術,從利用用戶感官的逃逸到躲避殺軟規則的逃逸,不論技術深淺,一律進行了收錄,因為在Android平臺上,逃逸技術的深淺層度與其逃逸成功與否沒有必然的關系。

第二章 Android木馬逃逸技術概述

在長期反病毒工作中,我們總結了Android木馬的如下兩個特點:

  • 大多數Android木馬的作惡途徑是長期留存用戶終端(除少數一次性使用的木馬外,如Android勒索軟件),通過持續性作惡獲取收益;
  • 為達到穩定留存的目的,大多數Android木馬使用的逃逸技術多為復雜的組合技術,并且通過木馬的自更新技術不斷升級逃逸技術。

Android木馬的如上兩個特點無疑是對安全軟件廠商檢出能力的持續性挑戰,更重要的是這種持續性挑戰構成了對Android手機用戶的持續性威脅,如果安全軟件廠商無法應對這種挑戰,將導致用戶利益嚴重受損。所以,我們覺得有必要對Android木馬的逃逸技術進行系統深入的分析,以幫助其他安全廠商應對這種威脅。

一、 Android木馬逃逸模型

我們總結了如下圖所示的Android木馬逃逸模型來描述Android木馬逃逸的一般性原理。采用常規手法(即不采用任何逃逸技術)容易被用戶感知或被安全軟件廠商攔截,使其無法在用戶終端穩定留存;如果使用逃逸技術,則有可能躲避用戶和安全軟件廠商的查殺,以達到長期留存用戶終端的目的。

圖2.1 Android木馬逃逸模型

二、 Android木馬逃逸鏈與感知鏈

針對Android木馬的感知元素貫穿了Android木馬的整個生命周期,所以Android木馬生命周期內的每個環節都催生了相應的逃逸技術,我們將Android木馬生命周期內的每個環節串聯起來,形成了Android木馬逃逸鏈,而對應的感知元素串聯起來即Android木馬的(被)感知鏈。

圖2.2 Android木馬逃逸鏈與感知鏈模型

  • 木馬投遞

即黑客傳播木馬的過程和手段,常見的手段包括上傳應用市場、通過社交平臺傳播以及ROM預置等。在此過程中,木馬需要獲取用戶信任并躲避殺毒引擎的掃描。安全意識較高的用戶可能對論壇或應用市場上的應用保持警惕,所以木馬需要通過偽裝自身以獲取用戶的信任。部分應用市場通過接入安全廠商的查殺接口進行安檢,查殺接口的實際功能由殺毒引擎提供,所以木馬在投遞環節也需要躲避引擎掃描。如果黑客通過生成的木馬下載鏈接傳播木馬,當下載鏈接被用戶點擊時,還會面臨網盾、網絡病毒監控系統對URL進行查殺。

  • 到達用戶

即木馬在用戶終端上著陸的過程,一般而言殺軟會在木馬下載完成時開啟掃描功能,即這個過程中用戶和殺軟同時接觸到木馬,但是我們為了敘述方便將其看作模型中的兩個環節,此外還存在如下先到達用戶的場景:如果是用戶主動下載,木馬先到達用戶,并且在這種情況下用戶可能忽略殺軟的風險提示;在用戶沒有安裝殺軟的情況下,木馬先到達用戶,如果用戶感知到木馬的存在,繼而可能會使用殺軟;對于ROM預置類木馬,如果用戶手機沒有預裝安全軟件,木馬先到達用戶。

  • 到達殺軟

到達殺軟有兩種場景:安裝掃描與用戶主動掃描。安裝掃描需要獲取Root權限,殺軟在系統安裝APK之前對該APK樣本進行安全性掃描,如果發現危險則會提示用戶;用戶主動掃描是用戶通過殺軟發起的快速或全盤掃描,快速掃描一般掃描已安裝的應用,全盤掃描則包含SD卡存儲的應用安裝包。在此環節中,木馬需要對抗殺毒引擎的靜態規則和云引擎規則。

  • 到達沙箱

殺軟未識別的樣本會被投入到沙箱進行動態養殖,動態養殖的原理是將樣本投入虛擬化運行環境中運行,通過模擬點擊和虛擬廣播事件觸發樣本的行為,進而通過動態規則匹配樣本行為進行檢出。木馬在此環節運用沙箱逃逸技術躲避沙箱規則的檢出,一般做法是根據沙箱特有的屬性或文件檢測當前運行環境是否可能為沙箱環境,如果是則不觸發任何惡意行為。

  • 到達分析師

當引擎和沙箱均無法識別木馬時,該木馬就會進入分析師的視野,分析師使用靜態反編譯工具和動態調試工具對木馬進行分析。為對抗分析師的分析,木馬大量使用對抗反編譯工具和調試工具的技術,這些技術大多建立在深入研究反編譯工具和調試工具工作原理的基礎之上,通過工具的缺陷或漏洞構造特殊的APK樣本,使靜態工具解析失敗或中斷動態調試器的調試連接。另外,對代碼的混淆和加密也可以在一定層度上增加分析師的逆向難度以及提取引擎規則的難度,并間接影響引擎規則的質量。

  • 穩定留存

當木馬成功地躲過了前五個環節之后,其將開始在用戶手機上長期留存并作惡。在長期留存的過程中,木馬依然面臨著病毒庫升級、主動防御和用戶感知帶來的壓力,所以在躲過了前面所有環節之后,其依然需要通過對逃逸技術的持續改進和自我更新來確保其能應對查殺,這一過程同時促進了逃逸和查殺技術的進一步發展。

三、 Android木馬逃逸技術

Android木馬的逃逸技術具有明顯的針對性,按照其針對的目標可以分為殺軟逃逸技術、沙箱逃逸技術、對抗分析工具的逃逸技術、針對用戶感官的逃逸技術和反追蹤逃逸技術五個大類,五類逃逸技術涵蓋了Android木馬逃逸鏈上的各個環節,也構成了Android逃逸技術的整個技術體系。

圖2.3 Android木馬逃逸技術

第三章 殺軟逃逸技術

本章介紹的殺軟逃逸技術,主要涵蓋了針對殺毒引擎規則和安全軟件(殺軟手機客戶端)的一系列逃逸技術。從長期的分析工作中,我們發現木馬更加偏向使用多種逃逸技術組合,以增強其自身的逃逸能力。

一、 字符串加密

  • 逃逸原理

字符串加密技術是一種成本較低的逃逸技術,其主要目的是對抗傳統靜態引擎的檢測,也能夠在一定程層度上對抗分析師的靜態分析。字符串規則是傳統靜態引擎使用的一種有效檢出規則,因此針對該規則的逃逸技術在Android木馬中相當常見。

  • 代表家族——Android.Obad[8]

圖3.1 Obad字符串加密

二、 Java反射

  • 逃逸原理

Java反射機制為Java應用程序提供檢查或修改運行時行為的方法,Java反射在使用上有如下特點:將類名標識符和方法名標識符轉換成字符串變量的形式,由于字符串變量可以進行加解密變換,所以可以使用加密字符串的形式替換原本的類名標識符或方法標識符;將調用序列碎片化,打亂了原始的調用序列。正因為Java反射機制的如上特點,使其能夠有效地躲避傳統靜態引擎的字符串規則以及基于方法調用序列的規則。

  • 代表家族——Android.Obad[8]

圖3.2 Obad反射

三、 畸形包

  • 逃逸原理

Android應用程序包(APK)格式為標準的ZIP壓縮文件格式。木馬利用安全軟件解析APK過程中的缺陷構造特殊格式的ZIP文件,從而躲避安全軟件的掃描。

一種典型的技術為構造多級空目。安全軟件出于優化用戶體驗的目的,可能會設置掃描目錄上限,即不對ZIP包中深層次目錄進行掃描。Android木馬利用安全軟件這種設計上的缺陷,構造多級目錄,然后將核心代碼置于該多級目錄的最深一層目錄下,以躲避安全軟件的掃描。

  • 代表樣本——89cbb2e60631ef93ad2eba1c07432fb2

圖3.3 多級目錄畸形包

四、 載荷隱藏

  • 逃逸原理

DexClassLoader[9]為開發者提供了動態加載類的接口,開發者可以通過動態加載子包的方式加載部分受保護的核心代碼。利用動態加載機制,木馬既可以聯網下載攻擊載荷(一般為加密的Jar包),也可以通過各種形式本地釋放載荷。動態加載機制為木馬隱藏載荷創造了條件,最常出現的一種情形是,木馬將核心Jar包加密保存到assets目錄下,運行時解密釋放原始Jar包,并使用動態加載機制加載載荷中的類以實施攻擊。

  • 代表家族——“長老木馬”三代[10]

圖3.4 “長老木馬”三代載荷釋放過程

圖3.5 “長老木馬”三代載荷文件

五、 包名占坑

  • 逃逸原理一

包名占坑逃逸的一種原理是利用了Android系統的特性,即Android系統根據包名唯一區分已安裝應用,不可以重復安裝同包名的應用。木馬利用系統這一特性,將自身包名命名為與目標殺軟同包名,感染用戶手機之后使得用戶無法正常安裝目標殺軟。

  • 代表樣本——4b3f03bd8cebf1e24b594b31b8357160
  • 逃逸原理二

包名占坑逃逸的另一種原理是利用殺軟的漏洞,一種可能的情況是殺軟掃描應用的過程中如果發現某些特定的白包名(比如同屬該安全軟件廠商的軟件包名)便跳過對該應用的掃描,而不驗證其證書。木馬只需偽裝成特定的白包名即可躲過掃描。

圖3.6 包名占坑原理

另一種可能的情況是,安全軟件啟用指定包名的專殺工具時并未校驗專殺工具合法性,這一漏洞被木馬利用以躲避專殺工具的查殺。頑固木馬將自身包名命名為與專殺工具包名完全相同的名稱,當殺軟試圖啟用專殺工具時,該木馬被啟動,而非專殺工具,所以該木馬能夠成功躲避專殺工具的查殺。

圖3.7 包名占坑流程圖

  • 代表樣本——744e402f9be0ba1a5c11941a39da02a6

六、 混淆

(一) 代碼混淆

  • 逃逸原理

傳統殺毒引擎的部分規則基于樣本中的標識符名稱進行檢出,混淆標識符名稱即可以輕松地躲避檢測。

  • 代表家族——FakeTaobao[11]

圖3.8 FakeTaobao代碼混淆

(二) 簽名混淆

  • 逃逸原理

簽名可以標識樣本的來源。可信來源簽名下的樣本默認被視為正規軟件,除非發現有惡意軟件;不可信來源簽名下如存在大量惡意軟件,則被視為惡意簽名。因此,殺軟可直接根據簽名制定黑規則。惡意軟件通過將簽名隨機化(即簽名混淆)來躲避黑簽名規則。

  • 代表家族——色情視頻類

表3.1 簽名混淆

(三) 軟件名稱混淆

  • 逃逸原理

軟件名稱是色情視頻類惡意軟件早期最鮮明的特點之一,殺毒引擎在必要時(如色情視頻類惡意軟件大規模爆發時)會根據軟件名稱進行檢出,惡意軟件通過混淆軟件名稱來躲避這種檢出規則。

  • 代表家族——色情視頻類

表3.2 軟件名稱混淆

七、 載荷變換

(一) 攻擊代碼底層化

  • 逃逸原理

Android支持使用原生語言C或C 直接開發應用的部分功能。從開發的角度來看,使用Java語言開發比使用原生語言開發要簡單高效,因此絕大多數應用的大部分模塊都采用Java語言進行開發,殺毒引擎的查殺規則也大多基于Java語言(即針對DEX文件進行查殺);從逆向分析的角度來看,逆向原生語言實現的模塊(ELF格式文件)要比逆向Java實現的模塊(DEX格式文件)更加困難。基于以上兩點原因,木馬作者通過使用原生語言實現核心惡意模塊可以很好地躲避查殺和分析。

  • 代表家族——“長老木馬”三代[10]

圖3.9 “長老木馬”三代釋放惡意APK文件

(二) 載荷碎片化

  • 逃逸原理

傳統殺毒引擎的掃描一般針對完整的DEX文件進行,通過將DEX文件變換成字節數組或分割為獨立的字符串,破壞靜態DEX文件的完整性,運行時動態拼接為DEX文件,可以達到躲避檢測的目的。

  • 代表樣本——ed925b7ba90f877cf7ba2ef9d99bc330

圖3.10 DEX文件字符串化

圖3.11 DEX文件字節數組化

八、 規避殺軟

  • 逃逸原理

木馬啟動時檢測安全軟件是否存在,如果殺軟存在則不運行其惡意行為,如此可以規避殺軟的查殺。

  • 代表樣本——c17717dae0e1f3786f71cccf8a92f9ec

圖3.12 規避殺軟

九、 Root提權

  • 逃逸原理

部分殺軟實現其掃描流程時,考慮到性能和用戶體驗(因為普通權限的殺軟只能掃描但無法卸載系統目錄下的應用,可能會給用戶帶來困擾)等因素,不會對系統目錄進行深度掃描。木馬通過利用漏洞獲取Root權限,并將核心惡意模塊釋放到系統目錄之中,便可以躲避此類殺軟的查殺。即便殺軟具備深度掃描和查殺的能力,木馬獲取Root權限之后可以通過部署保護模塊或其他方法(比如后文提到的篡改網絡配置)來對抗殺軟的查殺。

  • 代表家族——“舞毒蛾”[12]

表3.3 “舞毒蛾”使用的提權漏洞

十、 結束殺軟

  • 逃逸原理

木馬在啟動時判斷殺軟是否存在,如果存在則直接結束殺軟,可以避免在其自身生命周期內被殺軟查殺。

  • 代表家族——FakeTaobao[11]

圖3.13 FakeTaobao結束殺軟

十一、 卸載殺軟

  • 逃逸原理

具備Root權限的木馬可以通過直接卸載安全軟件來躲避查殺。

  • 代表家族——“百腦蟲”[13]

圖3.14 “百腦蟲”殺軟包名列表

圖3.15 “百腦蟲”卸載指定殺軟

十二、 躲避云查

(一) 篡改殺軟數據庫

  • 逃逸原理

安全軟件通過配置云查過濾規則來提高云查效率,即已知為白應用的樣本直接跳過云查,并將這些規則寫入本地數據庫。然而,部分使用這種規則的殺軟將規則信息明文寫入數據庫之中,使得具備Root權限的安全軟件可以直接修改該配置規則,以繞過云查。

  • 代表樣本——ccc01fd6d875b95e2af5f270aaf8e842

圖3.16 篡改殺軟數據庫

(二) 篡改網絡配置

  • 逃逸原理

Android系統繼承了很多Linux特性,其中包括管理網絡和數據包流動與傳送的Linux內核模塊netfilter,以及netfilter的控制應用軟件iptables[14]。木馬通過執行iptables命令配置網絡規則,禁止安全軟件聯網云查,從而躲避查殺。

  • 代表家族——DwallAv[15]

圖3.17 DwallAv配置網絡規則

十三、 封裝接口

(一) JavaScript接口調用

  • 逃逸原理

Android提供使用JavaScript語言訪問Java方法的接口。開發者使用addJavascriptInterface[16]方法即可將指定的Java對象注入到WebView中,通過引用Java對象的名稱即可實現對該對象的訪問。與直接使用Java實現程序功能相比,使用JavaScript語言訪問Java對象包含如下特征:程序的執行環境由Dalvik虛擬機轉移到WebKit;相關核心代碼由DEX文件轉移到HTML文件(或其他可執行網頁文件)。如果木馬使用JavaScript接口調用替代使用Java實現的功能,便可以躲避原本針對DEX文件的殺毒引擎規則。

  • 代表家族——Android.JSBlack[17]

圖3.18 JavaScript接口調用

(二) E4A中文編程

  • 逃逸原理

易安卓[18],以下簡稱E4A,是一個基于谷歌Simple語言的編程工具,實現通過類似易語言的Basic語法輕松編寫Android應用程序。由于E4A使用中文替代了Java語言,使其可以躲避現存的傳統殺毒引擎規則。

  • 代表家族——Android.E4aInfoStealer

圖3.19 E4A中文編程

(三) Mono框架

  • 逃逸原理

Mono是一個由Xamarin公司(先前是Novell,最早為Ximian)所主持的自由開放源代碼項目。該項目的目標是創建一系列匹配ECMA標準(Ecma-334和Ecma-335)的.NET工具,包括C#編譯器和通用語言架構。[19]Mono for Android[20]允許開發者在Android應用程序中使用Mono框架。使用Mono框架的Android應用程序具備如下特點:程序運行環境由Dalvik轉移到Mono for Android運行時,在運行過程中通過Mono for Android運行時與Dalvik運行時的通信實現對Android API的調用。使用Mono框架實現的Android應用程序不同于直接使用Java的實現,因而可以躲避現存的傳統殺毒引擎規則。

  • 代表樣本——7350decd88f7810d6b655f94abe4aac6

圖3.20 使用Mono運行時

十四、 高級殺軟逃逸技術

(一) 白利用

  • 逃逸原理

“簽名混淆”一節曾提到過,對于可信來源簽名(白簽名)的樣本,安全軟件廠商一般默認其為安全軟件。因此,木馬可以使用特殊手段(比如感染開發者機器)使自身具備白簽名屬性,從而躲避殺軟的查殺。

  • 參考案例——疑百度編譯機或員工中毒導致百度彩票APP感染病毒代碼(發布流程管理不當)[21]

圖3.21 被利用的某廠商簽名

圖3.22 被感染的網頁文件

圖3.23 網頁文件中攜帶的惡意代碼

(二) Masterkey漏洞利用

  • 逃逸原理

Android應用程序包格式為標準的ZIP文件格式。ZIP文件格式允許存在兩個或以上完全相同的路徑,然而安卓系統沒有考慮此類情況。在這種情況下,Android包管理器校驗簽名取的是最后一個文件的Hash,而運行APK加載的DEX文件卻是ZIP文件的第一個dex文件(或者AndroidManifest.xml文件)。該漏洞被稱為Masterkey[22]漏洞,木馬利用該漏洞可以將惡意的DEX文件打包進正常文件,以躲避查殺。

  • 參考案例——Masterkey漏洞

圖3.24 雙DEX文件形式

圖3.25 雙AM文件形式

(三) 隱寫術

  • 逃逸原理

隱寫術是一門關于信息隱藏的技巧與科學,所謂信息隱藏指的是不讓除預期的接收者之外的任何人知曉信息的傳遞事件或者信息的內容。隱寫術的英文叫做Steganography,來源于特里特米烏斯的一本講述密碼學與隱寫術的著作Steganographia,該書書名源于希臘語,意為“隱秘書寫”[23]。

隱寫術也是Android木馬進行逃逸的手段之一。木馬通過特殊的算法將載荷文件隱寫到圖片文件之中,運行時通過還原算法將載荷從圖片文件中分離,然后動態加載載荷至運行環境中實施攻擊。

  • 參考案例——Android.Xiny.19.origin[24]

圖3.26 Android.Xiny.19.origin載體圖片

第四章 沙箱逃逸技術

沙箱逃逸技術涵蓋了針對沙箱環境和沙箱規則的逃逸技術。針對沙箱環境的檢測包括系統屬性、硬件屬性和網絡環境等方面,針對沙箱規則的逃逸涉及網絡請求、觸發條件、詞法分析等方面。

一、 檢測沙箱環境

  • 逃逸原理

Android沙箱一般通過虛擬化技術實現,其包含很多與真實Android機器不一樣的屬性和文件。木馬通過檢測沙箱的特有屬性和文件可以粗略判定當前運行環境是否為沙箱環境,如果為沙箱則停止觸發惡意行為。

  • 代表樣本——cc162960da2f130905b6cd813daf1222

圖4.1 模擬器屬性檢測

圖4.2 模擬器文件檢測

二、 對抗詞法分析

  • 逃逸原理

Android隱私竊取類木馬可能盜取用戶聯系人、短信等信息,并通過短信、郵箱或網絡請求的方式回傳。沙箱針對這類行為制定基于詞法分析的檢測規則,而木馬則通過字符串操作(加密、分割、替換等)來對抗此類檢測規則。

  • 代表家族——FakeTaobao[11]

圖4.3 對抗詞法分析

三、 載荷名混淆

  • 逃逸原理

Android木馬的大部分攻擊載荷都會以衍生物的形式釋放到本地文件系統。沙箱基于木馬的如上行為特點制定根據載荷名稱進行檢測的規則,而木馬則通過混淆載荷名稱來對抗此類檢測規則。

  • 代表家族——惡意廣告類

表4.1 載荷名稱混淆

四、 URL混淆

  • 逃逸原理

Android木馬的聯網動作主要反映在URL上,因此沙箱一般包含對木馬URL的監控,將惡意下載或惡意廣告相關的URL加入到黑名單。木馬通過混淆URL(包含頻繁變更域名或混淆服務器路徑)來躲避沙箱的這種監控。

  • 代表家族——“道有道”惡意廣告家族[25]

表4.2 “道有道”URL混

五、 條件觸發

  • 逃逸原理

條件觸發一般針對沙箱的動態行為檢測,最常見的條件觸發為木馬設定其惡意行為觸發日期為某個日期之后,由于這個日期在木馬投入沙箱養殖(沙箱養殖時間一般較短)的時間之后,所以木馬不會在養殖期間表現其惡意行為。

  • 代表樣本——1b85f1e2a782bb294ddde746a8e90ada

圖4.4 定時觸發

六、 高級沙箱逃逸技術

  • 逃逸原理

Android木馬的絕大多數行為都是基于網絡的,幾乎每一個Android木馬都會申請聯網權限。沙箱為了更全面地觸發木馬的惡意行為,必需接入網絡。黑客通過編寫探測程序可以獲取Google Bouncer[26]或安全廠商沙箱的IP段,然后在惡意程序中植入判斷邏輯,如果IP屬于安全廠商或Google Bouncer,便不觸發任何惡意行為,以此躲避沙箱的檢測。

  • 參考案例——BrainTest[27]

研究人員在2015年9月發現了一款名為“BrainTest”的Android木馬。該木馬通過檢測運行環境的IP來判斷其是否在Google Bouncer中運行,從而達到躲避Bouncer檢測的目的。

圖4.5 通過IP檢測GoogleBouncer

樣本啟動時,通過IP信息檢測其是否在Google的服務器上運行,如果檢測到運行環境的IP符合如下條件之一,則不會運行惡意代碼:

IP在209.85.128.0-209.85.255.255, 216.58.192.0-216.58.223.255,173.194.0.0-173.194.255.255,74.125.0.0-74.125.255.255范圍內;

IP掛載的域名包含“google”、“android”或“1e100”。

第五章 對抗分析工具

針對分析工具的逃逸技術主要包括針對靜態分析工具、動態分析工具和抓包工具的逃逸技術,以及高級對抗方式——加固。

一、 針對靜態工具的對抗

(一) 偽加密

  • 逃逸原理

Android系統解析APK文件的流程,與解壓縮軟件及反編譯工具解析ZIP文件的流程存在差異。Android系統解析APK文件時不考慮ZIP文件的加密問題,而解壓縮軟件和反編譯工具需要首先檢查ZIP包的加密標志位,檢驗其是否加密。木馬通過僅改變加密標志位,即可騙過解壓縮軟件和反編譯工具,如此即可躲過靜態分析工具。

  • 代表樣本——45daf4f3eaca42eda83957c6ecea3652

圖5.1 偽加密前

圖5.2 偽加密后

(二) 資源文件對抗

  • 逃逸原理

2015年8月,研究人員發現一種通過構造特殊格式的資源文件對抗反編譯工具Apktool的技術,該技術原理如下圖所示。

圖5.3 資源文件對抗反編譯原理

Apktool解析APK包中的資源文件時,會驗證同類型資源里是否包含重名資源,如果包含重名資源則會拋出異常,中斷反編譯過程。黑客通過在木馬中插入重名資源,并且保證在程序運行過程中始終不會調用該資源,則即可保證程序的正常安裝與運行,又可對抗Apktool的反編譯。

  • 參考案例——《Android應用資源文件格式解析與保護對抗研究》[28]

(三) axml文件對抗

  • 逃逸原理

AndroidManifest.xml文件為axml文件格式[29]。黑客通過在AndroidManifest.xml文件中插入偏移異常(超出文件大小的偏移)的資源以對抗反編譯工具的解析,而該資源不會被程序使用,從而也能保證程序的正常安裝與運行。

圖5.4 axml文件對抗反編譯原理

  • 參考案例——《淺談xaingce apk樣本分析》[30]

(四) DEX文件對抗

  • 逃逸原理A

由于Baksmali不支持解析DEX文件的link section,所以黑客通過在DEX文件中構建link section即可使Baksmali工具奔潰。

  • 參考案例——《Android DEX安全攻防戰》[31]
  • 逃逸原理B

DEX文件的類定義結構中包含一個source_file_idx項,表示源代碼文件的信息。黑客首先向DEX文件中添加一個程序運行時不會使用的類,然后修改對應的source_file_idx,因為程序未使用該類,所以可以成功安裝和運行,但反編譯工具靜態解析DEX文件時,由于找不到source_file_idx對應的值,便會拋出異常,中斷反編譯過程。

  • 參考案例——《Android-對抗反編譯工具的一種方式》[32]

(五) 剝離二進制

  • 逃逸原理

剝離二進制文件,就是將二進制文件的符號表刪除,增加病毒分析師調試樣本的難度。開發者可以通過添加如下gcc編譯選項[33]隱藏符號表。

Gcc編譯選項:LOCAL_CFLAGS := -fvisibility=hidden

圖5.5 二進制剝離前后對比

  • 參考案例——《Android應用安全開發之源碼安全》[34]

(六) 無效指令

  • 逃逸原理

2015年9月,研究人員發現了一種通過在DEX文件中插入無效指令對抗反編譯工具Dex2jar的技術,該技術原理如下圖所示。

圖5.6 構造無效指令對抗Dex2jar

Dex2jar解析DEX文件的過程中會校驗每個方法的形參和實參類型,如果形參類型和實參類型不一致則會拋出異常,中斷反編譯過程。通過插入形參與實參不一致的無效指令即可觸發該異常,導致解析失敗。

  • 參考案例——《Android程序的反編譯對抗研究》 [35]

二、 針對動態調試工具的對抗

(一) 限制調試器連接

  • 逃逸原理

Android使用android:debuggable[36]標簽標識應用程序是否可調試,通過將android:debuggable設置為false便可限制調試器連接。

  • 參考案例——《Smalidea無源碼調試 android 應用》[37]

(二) 自校驗反調試

  • 逃逸原理

按照前一小節中的方法限制調試連接之后,分析人員便無法直接對木馬進行調試。只有修改調試標簽,經過回編譯并重新簽名才可以使木馬可調試。木馬則通過對簽名文件的自校驗來防止其被重打包,以此間接對抗調試分析。

圖5.7 FakeTaobao自校驗

  • 代表家族——FakeTaobao[11]

(三) 搶占ptrace

  • 逃逸原理

搶占ptrace的概念繼承至Linux系統的ptrace系統調用。ptrace系統調用為開發者提供一種使用一個進程監視、控制另一個進程的執行或檢查、改變另一個進程內存和寄存器的方法[38]。ptrace經常被用來實現反調試功能,因為一個進程只能被ptrace一次,如果木馬使用ptrace進行自我監控和跟蹤,就可以阻止分析人員的調試。

圖5.8 搶占ptrace

  • 參考案例——《反調試方法二 – 搶占ptrace》[39]

(四) 檢測TracerPid

  • 逃逸原理

Linux進程狀態文件利用TracerPid[40]記錄調試(跟蹤)進程的進程號,如果進程未被調試(跟蹤)則該值為0。Android繼承了Linux系統的這種特性,所以通過讀取進程的/proc/self/status文件,檢測TracerPid的值即可判斷是否存在調試進程。

圖5.9 檢測TracerPid值

  • 參考案例——《android-native反調試》[41]

(五) 檢測wchan

  • 逃逸原理

Linux使用/pro/pid/wchan[42]文件保存進程正在等待的事件或睡眠狀態,如果進程正在運行則該文件為空。根據wchan文件中的關鍵字(如ptrace_stop、ep_poll等)即可判斷進程是否處在被調試狀態。

圖5.10 檢測wchan文件內容

  • 參考案例——《Android應用安全開發之源碼安全》[34]

(六) 檢測fd

  • 逃逸原理

Linux的進程/proc/self/fd[43]目錄包含所有打開文件的fd,當程序被調試器打開時,其對應的進程實際上繼承至該調試器進程,即調試器進程是當前運行進程的父進程,并且父進程打開文件的fd也會顯示在當前進程(被調試進程)的fd目錄下。調試器運行時一般會打開多個進程,所以程序可以通過檢測fd目錄下文件的個數是否多于正常水平來判斷進程是否正被調試。

圖5.11 檢測fd目錄文件個數

  • 參考案例——《Android應用安全開發之源碼安全》[34]

(七) 檢測父進程

  • 逃逸原理

如前一小節所述,調試器進程是被調試進程的父進程,所以程序通過檢測父進程的名稱是否包含調試器標識(如gdb)即可簡單判斷當前進程是否正被某種調試器調試。

圖5.12 檢測父進程

  • 參考案例——《Android應用安全開發之源碼安全》[34]

(八) 檢測調試輔助進程

  • 逃逸原理

同檢測父進程原理相似,調試過程必須借助一些輔助進程,如android_server[44],所以程序也可以通過判斷調試輔助進程是否存在來簡單判斷其是否處在被調試狀態。

圖5.13 檢測調試輔助進程

  • 參考案例——《Android應用安全開發之源碼安全》[34]

(九) 檢測時間差

  • 逃逸原理

由于程序在調試時的斷點、檢查修改內存等操作,運行時間往往要遠大于正常運行時間。所以,一旦程序運行時間過長,便可能是由于正在被調試。

  • 參考案例——《Android應用安全開發之源碼安全》[34]

(十) 設置單步調試陷阱

  • 逃逸原理

單步調試陷阱是指通過人為設置斷點指令并注冊信號處理函數,迷惑調試器和分析人員,對抗動態調試。

ARM架構下的調試器對程序設置斷點時,會首先保存下斷點處的原始指令,并將斷點處指令替換為breakpoint機器碼。

圖5.14 下斷點

程序運行至斷點處會命中斷點,此時程序向系統發送SIGTRAP信號,調試器接收到SIGTRAP信號之后,先將斷點處指令替換為原始指令,然后將PC指針退回至斷點處。

圖5.15 命中斷點時的指令執行

如上過程即一般的調試器斷點運行原理,需要注意的是,通過Linux信號處理函數signal[45]可以注冊單步調試信號——SIGTRAP的回調處理函數,我們可以認為在程序中插入breakpoint機器碼,然后通過注冊SIGTRAP回調處理函數,在調試器命中breakpoint時將breakpoint機器碼替換為nop,這就是單步調試陷阱的運行原理。

圖5.16 設置單步調試陷阱

圖5.17 單步調試陷阱處的指令執行

  • 參考案例——《Anti-debugging Skills in APK》[46]

(十一) 檢測軟件斷點

  • 逃逸原理

軟件斷點通過改寫斷點地址處原始指令的頭幾字節為breakpoint機器碼實現,所以通過遍歷ELF文件中可執行段,查找是否存在breakpoint機器碼,即可判斷軟件斷點是否存在。

  • 參考案例——《Anti-debugging Skills in APK》[46]

(十二) 檢測Dalvik調試字段

  • 逃逸原理

Dalvik虛擬機自帶檢測調試連接的方法——dvmDbgIsDebuggerConnected,dvmDbgIsDebuggerConnected通過判斷DvmGlobals結構體中debuggerActive字段的值來檢測調試連接。程序也可以直接獲取DvmGlobals結構體中debuggerActive字段的值,以檢測調試連接。

  • 參考案例——《Anti-debugging Skills in APK》[46]

(十三) ARM與THUMB指令識別缺陷

  • 逃逸原理

IDA采用遞歸下降算法來反匯編指令,該算法最大的缺點在于它無法處理間接代碼路徑,如利用指針表來查找目標地址的跳轉或調用。ARM架構下存在ARM和THUMB兩種指令集,兩種指令集模式的切換通過帶鏈接的跳轉指令完成,IDA在某些情況下無法正確地識別ARM和THUMB指令。如果在指令識別錯誤的地點寫入斷點,則有可能使調試器崩潰。

  • 參考案例——《Anti-debugging Skills in APK》[46]

(十四) Inotify 監控文件

  • 逃逸原理

Inotify函數繼承至Linux操作系統。Inotify函數能夠監控文件系統事件(打開、讀寫、刪除等),程序可以通過監控/proc/pid/maps、/proc/pid/mem等文件的讀寫事件,防止分析師動態調試程序時使用內存dump技術dump內存(內存dump是調試分析中常用的脫殼技術)。

  • 參考案例——《Anti-debugging Skills in APK》[46]

三、 針對抓包工具的對抗(HTTPS)

  • 逃逸原理

超文本傳輸安全協議(英語:Hypertext Transfer Protocol Secure,縮寫:HTTPS,也被稱為HTTP over TLS,HTTP over SSL或HTTP Secure)是一種網絡安全傳輸協議。在計算機網絡上,HTTPS經由超文本傳輸協議進行通信,但利用SSL/TLS來對數據包進行加密。HTTPS開發的主要目的,是提供對網絡服務器的身份認證,保護交換數據的隱私與完整性。這個協議由網景公司(Netscape)在1994年首次提出,隨后擴展到互聯網上[47]。Android木馬利用HTTPS進行加密網絡通信,對抗分析人員使用抓包工具對其進行分析。

  • 代表樣本——58fed8b5b549be7ecbfbc6c63b84a728

四、 高級對抗(加固)

  • 逃逸原理

APK加固是一種對APK文件的數據進行壓縮和加密保護,將APK文件壓縮成自我解壓檔案,并能隱藏解壓進程。主流的APK加固廠商提供多方面的加固服務,其意圖在于保護開發者的軟件不被破解,但是由于審核不嚴或加固廠商安檢能力不強等原因,大量惡意軟件通過合法的加固渠道進行加固以躲避查殺。

  • 參考案例——請參考國內主流加固廠商

第六章 針對用戶感官的逃逸技術

針對用戶感官的逃逸技術主要針對用戶視覺和聽覺進行偽裝和欺騙,或騙取用戶點擊運行木馬,或掩蓋木馬運行后的痕跡。

一、 隱藏圖標

  • 逃逸原理

Android提供禁用應用組件的接口,通過調用setComponentEnabledSetting方法,并將第二個參數設置為COMPONENT_ENABLED_STATE_DISABLED即可禁用指定的組件。如果指定的組件為應用的啟動界面則可隱藏應用圖標,使其消失在用戶的視野內。

  • 代表家族——Dendoroid.B[50]

圖6.1 Dendoroid隱藏圖標

二、 透明圖標

  • 逃逸原理

木馬使用透明圖片作為其應用圖標,安裝之后給用戶造成“該桌面區域內不存在應用”的假象。

  • 代表樣本——03d1d8db0e71b07cf29ea4087a334848

圖6.2 偽“京東客戶端”透明圖標

三、 欺騙

(一) 偽造提示

  • 逃逸原理

木馬通過將應用名稱設置為特殊提示語句(如“為正常系統軟件,請點擊取消,刪除了會造成手機崩潰,請不要刪除”),當殺軟彈出報毒提示時,使用該語句混淆報毒提示,以欺騙用戶。

  • 代表樣本——745739d76b8c0b29f5f2bb2810bca8da

圖6.3 偽造殺軟提示

(二) 偽裝正常應用

  • 逃逸原理

偽裝正常應用的主要方式是將其自身圖標設置成正常應用的圖標,以此欺騙用戶下載、安裝和運行。

  • 代表家族——FakeTaobao [11]

圖6.4 FakeTaobao偽裝正常應用

(三) 偽造卸載現場

  • 逃逸原理

木馬通過監控卸載動作,檢測到其正被用戶卸載時,彈出偽裝的卸載程序供用戶選擇。一旦用戶選擇了該卸載程序,則會誤以為木馬已卸載成功,而實際上該卸載程序并未真正執行卸載。

  • 代表家族——FakeTaobao[11]

圖6.5 FakeTaobao監控程序卸載

圖6.6 FakeTaobao彈出偽造的卸載程序

四、 后臺下載

  • 逃逸原理

Android提供設置下載管理器執行下載任務時是否彈出系統通知的接口,使用setNotificationVisibility[52]方法并將其參數設置為VISIBILITY_HIDDEN即可實現后臺下載,讓用戶感知不到下載事件。

  • 代表樣本——03ad8735b6f18849ae2b905059b9aed2

五、 設置響鈴模式

  • 逃逸原理

向被控手機撥打電話和發送短信指令是Android木馬較為常用的手段,為了不讓用戶感知到這些惡意行為,木馬將用戶手機的響鈴模式設置為靜音。

  • 代表家族——Android.Cokri[53]

圖6.7 Cokri設置響鈴為靜音模式

六、 刪除短信

  • 逃逸原理

短信是木馬執行隱私竊取和遠程控制時的一種常用手段,木馬通過向用戶手機發送短信指令控制用戶手機。木馬收發短信之后刪除相關內容,以避免用戶通過短信應用感知到這種私自收發短信的行為。

  • 代表家族——FakeTaobao[11]

圖6.8 FakeTaobao刪除短信

七、 預裝

  • 逃逸原理

在無線行業中,預裝往往指,將產品裝在未銷售的手機終端ROM中[54]。將木馬植入ROM,可以繞過安裝環節,即用戶對木馬的安裝過程完全無感知。

  • 代表家族——“萬藍”[55]

第七章 反追蹤技術

反追蹤技術針對分析師或網絡執法人員的分析追蹤。木馬投放者通過隱蔽的傳播手法投放木馬,試圖隱藏木馬的來源。

一、 利用第三方平臺生成下載鏈接

  • 逃逸原理

樣本下載源是分析人員和網絡執法人員追蹤木馬來源和木馬作者的途徑之一,為躲避分析人員和執法人員的追蹤,木馬作者匿名注冊第三方社交賬號或應用市場,借助第三方社交平臺或者應用市場生成下載鏈接,然后進行傳播。

  • 代表家族——Android勒索軟件[51]

圖7.1 Android勒索軟件借助第三方平臺生成下載鏈接

二、 域名隱私保護

  • 逃逸原理

域名隱私保護服務是一種域名增值服務,即通過一定的技術手段適當保護用戶的注冊聯系人、管理聯系人、技術聯系人、繳費聯系人信息(使用戶提交的有關注冊信息不在域名whois數據庫中公開顯示)。 通過此項服務,可以保護您的個人隱私不被公開,減少垃圾郵件和針對個人信息的竊取等[56]。木馬作者注冊域名時如果使用了域名隱私保護服務,亦可對抗分析人員和網絡執法人員的追蹤。

  • 參考案例——惡意廣告類

圖7.2 惡意廣告URL使用域名隱私保護

三、 非實名注冊

  • 逃逸原理

實名制是一種近年來開始興起的制度,即在辦理和進行某項業務時需要提供有效的能證明個人身份的證件或資料,最初是因為網癮低齡化而開始試水,而如今隨著網絡化的不斷發展,各種各樣虛擬身份的交易日益重要而已經成為一項趨勢,其很大程度上帶來了安全保障,但另一方面其對個人隱私可能的侵犯也需要人們去探索研究[57]。

非實名注冊即繞過實名制注冊,從黑市購買偽造的身份信息,進而注冊網絡虛擬身份、電話號碼、銀行卡等。非實名注冊在網絡電信詐騙中應用較為廣泛,詐騙者通過黑市購買身份證或銀行卡,從而進行轉賬或洗錢。

  • 參考案例——網絡電信詐騙木馬[58]

四、 熟人關系傳播

  • 逃逸原理

熟人關系傳播利用了Android手機用戶對于通訊錄聯系人的信任,使用這種傳播方式可以從傳播的環節躲避追蹤。蝗蟲手機木馬是Android平臺上第一個成功利用熟人關系傳播的案例,該木馬遍歷用戶通訊錄,并給通訊錄聯系人發送包含木馬下載鏈接的短信。

  • 代表家族——蝗蟲手機木馬[59]

圖7.3 蝗蟲手機木馬通過通訊錄聯系人傳播

五、 偽基站

  • 逃逸原理

偽基站利用移動信令監測系統監測移動通訊過程中的各種信令過程,獲得手機用戶當前的位置信息。偽基站啟動后就會干擾和屏蔽一定范圍內的運營商信號,之后則會搜索出附近的手機號,并將短信發送到這些號碼上。屏蔽運營商的信號可以持續10秒到20秒,短信推送完成后,對方手機才能重新搜索到信號。大部分手機不能自動恢復信號,需要重啟。偽基站能把發送號碼顯示為任意號碼,甚至是郵箱號和特服號碼。載有偽基站的車行駛速度不高于60公里/小時,可以向周邊用戶群發短信,因此,偽基站具有一定的流動性[60]。

Android木馬投放者通過偽基站向用戶發送帶有木馬下載鏈接的短信。由于偽基站的流動性,基本上不可能通過用戶接收到的短信反向追蹤其來源。

  • 參考案例——《“偽中國移動客戶端”–偽基站詐騙病毒解析》[61]

六、 虛擬運營商

  • 逃逸原理

虛擬運營商(Virtual Network Operator,VNO)是指沒有自己的通訊基礎設施,借助傳統的電信供應商來實現通訊服務的運營商[62]。

由于分析師無法通過虛擬運營商號碼追蹤木馬來源,木馬投放者通過虛擬運營商服務向受害者發送帶木馬下載鏈接的短信即可躲避分析師的追蹤。

  • 參考案例——《收到莫名短信別點鏈接 詳解木馬病毒傳送流程》[63]

七、 高級反追蹤

(一) 洋蔥網絡

  • 逃逸原理

洋蔥網絡是一種在計算機網絡上進行匿名通信的技術。通信數據先進行多層加密然后在由若干個被稱為洋蔥路由器組成的通信線路上被傳送。每個洋蔥路由器去掉一個加密層,以此得到下一條路由信息,然后將數據繼續發往下一個洋蔥路由器,不斷重復,直到數據到達目的地。這就防止了那些知道數據發送端以及接收端的中間人竊得數據內容[64]。

2014年5月,研究人員發現了第一個以Android為目標的Tor木馬[65]。該木馬通過修改Tor客戶端Orbot實現,并利用 Tor網絡的.onion代理服務器隱藏指令控制服務器的位置。木馬接收來自匿名服務器的指令并執行一系列任務,包括攔截短信,回傳手機型號、系統版本、國家、應用安裝列表和IMEI等信息,可用于遠程執行代碼。

  • 代表家族——Android.Torec

圖7.4 Torec家族包含洋蔥網絡的包結構

(二) 動態域名

  • 逃逸原理

動態域名可以將任意變換的IP地址綁定給一個固定的二級域名。不管這個線路的IP地址怎樣變化,因特網用戶還是可以使用這個固定的域名,來訪問或登錄用這個動態域名建立的服務器。[66]。分析人員和網絡執法人員主要根據IP地址對木馬服務器進行定位,如果木馬使用動態域名的方式,即意味著木馬服務器的IP地址時刻在改變,由此增加了追蹤的難度。

  • 代表家族——潛魔間諜程序[67]

圖7.5 潛魔間諜程序使用動態IP

圖7.6 潛魔間諜程序使用的動態IP提供商

(三) “跳板”網絡

  • 逃逸原理

“跳板”網絡的利用主要出現在隱私竊取木馬中,木馬作者利用第三方網絡平臺的信譽度以及這種特殊形式的隱蔽性來躲避分析人員和網絡執法人員的追蹤。木馬將用戶隱私信息上傳至第三方網絡平臺,比如以日記或日志的形式上傳至XX日記、XX空間等,是黑客常用的“跳板”網絡形式。

  • 代表家族——FakeTaobao[68]

圖7.7 FakeTaobao使用吾志作為跳板網絡

結束語

我們通過這篇報告總結了安卓平臺目前出現的主流逃逸技術,其中涵蓋了超過六十種逃逸技術的原理和參考案例。在搜集案例的過程中,由于精力、時間以及關注范圍等原因,可能遺漏了部分特殊的逃逸技術,希望大家發現后能夠及時反饋給我們。由于各種逃逸技術在技術上的深淺層度不同,報告中對某些逃逸技術的原理描述可能比較簡單,如果大家對報告中的任何細節有疑問都可以聯系我們。

現今,Android木馬技術更新換代越來越頻繁,逃逸技術和攻擊技術每天都在升級,Android安全形式極為嚴峻。嚴峻的安全形式對安全軟件廠商的安全技術提出了更高的要求。我們希望這篇報告能夠給安全友商們帶來一些啟發,以幫助他們增強引擎方法和檢出能力。我們相信安全技術共享是安全技術進步強有力的推動力,我們通過報告的形式共享安全技術以期望能夠推動國內移動安全技術的進步,我們也希望各友商都能夠參與到安全技術共享的活動中來,聯手將Android生態環境治理的更好。

我們希望這篇報告也能夠給移動安全從業者帶來一些啟發。目前網絡上缺少關于Android木馬逃逸技術的系統性介紹文章,甚至找不到關于Android逃逸技術的相關定義,這無疑為相關安全從業人員了解Android逃逸技術設置了一道無形的屏障。本報告系統性地描述了Android木馬逃逸技術,并給出了超過六十種逃逸技術原理和案例,可以幫助他們更加系統、全面地認識和研究Android木馬逃逸技術,以這篇報告作為移動安全從業者的參考手冊。

最后,感謝所有國內外發現并及時公布Android木馬逃逸技術的廠商或安全研究人員,希望通過大家的共同努力營造良好的安全技術研究氛圍。

附錄一:參考文獻

[1]. “入侵防御系統”維基百科定義:

https://zh.wikipedia.org/wiki/入侵預防系統

[2]. 《advanced evasion technique (AET)》:

http://searchsecurity.techtarget.com/definition/advanced-evasion-technique-AET

[3]. 王磊, 雙鍇.入侵逃逸技術綜述. 北京:北京郵電大學,2012

[4]. “安全軟件”維基百科定義:

https://zh.wikipedia.org/wiki/安全軟件

[5]. 《IPS入侵逃逸技術分析與防御》-楊永清

[6]. 《高級逃避技術(AET)是實現APT的重要手段之一》:

http://www.cngate.com.cn/index.php?m=contentamp;c=indexamp;a=showamp;catid=77amp;id=202

[7]. 《Malware Evasion Chart》:

http://marcoramilli.blogspot.com/2013/07/malware-evasion-chart.html

[8]. 《The most sophisticated Android Trojan》:

https://securelist.com/blog/research/35929/the-most-sophisticated-android-trojan/

[9]. DexClassLoader開發者文檔:

https://developer.android.com/reference/dalvik/system/DexClassLoader.html?hl=zh-cn

[10]. 《“長老木馬”三代揪出背后“大毒梟”》:

“長老木馬”三代揪出背后“大毒梟”

[11]. 《FakeTaobao家族變種演變》:

FakeTaobao家族變種演變

[12]. 《“舞毒蛾”木馬演變報告》:

“舞毒蛾”木馬演變報告

[13]. 《“百腦蟲”手機病毒分析報告》:

“百
Tags: 木馬 ARM匯編 安卓開發

文章來源:http://blogs.360.cn/360mobile/2016/10/24/android_e


ads
ads

相關文章
ads

相關文章

ad