Promon 公司發現了一種新的安卓惡意軟件,并命名爲命名爲 FjordPhantom,它具有很強的隐蔽性和傳播能力,本文将深入探讨 FjordPhantom 的性質及工作原理。
背景
通過合作夥伴 i-Sprint,Promon 安全研究團隊在 9 月初知道了一種新的安卓惡意軟件在東南亞(主要在印尼、泰國和越南)傳播的消息。它主要通過消息傳遞服務傳播,将基于應用程序的惡意軟件與社交工具相結合,以欺騙銀行客戶。Promon 與該地區的銀行交流後得知,在撰寫本文時,一名客戶被騙走了約 28 萬美元。
Promon 已收到了從終端用戶設備中提取的惡意軟件樣本。這個樣本針對一家特定的銀行,但含有的代碼也可以針對其他銀行應用程序。目前未能找到更多的惡意軟件樣本,也無法找到任何關于該惡意軟件的公開信息,于是我們自行進行了技術分析。安卓銀行惡意軟件無處不在,而這個惡意軟件的獨特之處在于,使用虛拟化技術攻擊應用程序,虛拟化通常用作逆向工程中的工具,這是我們此前從未見過的。
FjordPhantom 如何傳播?
FjordPhantom 主要通過電子郵件、短信和消息傳遞應用程序傳播。用戶被提示下載一個看起來像銀行正規應用程序的應用程序,實際上,下載的應用程序包含銀行真實的安卓應用程序,但它在虛拟環境中運行,額外組件可以對應用程序進行攻擊。
下載後,用戶會受到社會工程攻擊。通常,這是由呼叫中心的攻擊團隊支持的。他們假裝是銀行的客戶服務,指導客戶完成運行應用程序的步驟。
惡意軟件使攻擊者能夠跟蹤用戶的操作,從而引導用戶執行交易或使用該過程竊取憑據,他們可以使用這些憑據發動另外的攻擊。
FjordPhantom 如何使用虛拟化?
惡意軟件使用可以在 GitHub 上找到的不同開源 / 免費項目組合而成。最重要的是,它嵌入了一個虛拟化解決方案和一個鈎子框架來執行攻擊。
虛拟化解決方案允許在虛拟容器中安裝和運行應用程序,近年來,它們在安卓上變得非常流行。因爲其中許多應用程序都可以從 Google Play Store 下載,所以谷歌也接受了這種解決方案。此外,使用這種解決方案的一個普遍原因是能夠多次安裝相同的應用程序,以便用不同的帳戶登錄。這在安卓上通常是不可能實現的。
在這種情況下," 虛拟容器 " 的确切含義因不同的虛拟化解決方案而異。
在 FjordPhantom 使用的解決方案中,虛拟化解決方案是一個可以托管不同應用程序的應用程序。托管的應用程序被安裝到虛拟文件系統中。當托管的應用程序啓動時,解決方案創建一個新進程,将應用程序加載到其中,然後啓動該進程。
從安卓系統的角度來看,隻有一個應用程序(主機)。這意味着當托管的應用程序啓動時,它們也會看到自己在托管應用程序的上下文中運行,這将導緻不同類型的應用程序出現許多問題,而它們期望在定義明确的環境中運行。此外,如前所述,托管的應用程序被安裝到虛拟文件系統中。因此,爲了使托管的應用程序正常執行,虛拟化解決方案嚴重依賴鈎子、修改安卓運行時環境的不同屬性,以及代理托管的應用程序所做的許多事情。
虛拟化突破安卓沙盒
以這種方式将應用程序加載到虛拟容器中的危險之處在于它突破了安卓沙盒。
安卓上的每個應用通常在自己的沙盒中獨立運行,在這樣的虛拟化解決方案中,不同的應用程序都運行在同一個沙盒中。這使它們能夠訪問彼此的文件和内存,并調試對方。也意味着,對于攻擊者來說,虛拟化解決方案可能是不錯的選擇。突破沙盒通常需要對設備擁有 root 訪問權。然而,當應用程序安裝到同一個沙盒中時,就不需要這樣了。這就使得攻擊變得更容易,因爲不需要獲得設備的 root 權限,而且它還阻止 root 檢測(針對安全關鍵應用程序的一種流行檢查)。因此,虛拟化解決方案在攻擊者中變得非常流行。
到目前爲止,我們所看到的所有涉及虛拟化解決方案的攻擊都是由試圖攻擊其安裝的應用程序的安卓設備用戶進行。這适用于使用調試器(比如 gdb 或 lldb)或鈎子框架(比如 Frida)分析應用程序,或使用 GameGuardian 等工具在沒有 root 訪問權的情況下在遊戲中作弊。
除此之外,惡意軟件使用的此類虛拟化解決方案還可以用來向應用程序注入代碼,因爲虛拟化解決方案首先将自己的代碼(以及應用程序中發現的所有其他内容)加載到一個新進程中,然後加載托管應用程序的代碼。傳統上,最流行的代碼注入方法一直是用附加代碼重新包裝應用程序。因此,許多安全攸關的應用程序執行重新包裝檢測,這使得攻擊更難得逞。然而,使用虛拟化注入代碼将繞過這些檢測,因爲原始應用程序并沒有被修改。
FjordPhantom 如何工作?
圖 1
FjordPhantom 使用上述的虛拟化解決方案。它嵌入它所攻擊的特定銀行應用程序的 APK,當它啓動時,就在虛拟容器中安裝并啓動嵌入的應用程序。對于用戶來說,看起來銀行應用程序啓動,沒有虛拟化解決方案的明顯痕迹。FjordPhantom 的獨特之處在于:與我們之前看到的虛拟化攻擊相比,不是設備用戶調用了虛拟化,而是安卓惡意軟件在用戶不知情的情況下調用了虛拟化。
在虛拟容器中托管目标應用程序使惡意軟件能夠執行攻擊。如上所述,它有許多攻擊可能性。
以 FjordPhantom 爲例,虛拟化主要用于将額外代碼加載到托管應用程序的進程中,注入的代碼是實際惡意軟件本身的代碼和惡意軟件使用的鈎子框架。
FjordPhantom 本身以模塊化的方式編寫,以便攻擊不同的銀行應用程序。它将對這些應用程序執行各種攻擊,具體取決于嵌入到惡意軟件中的銀行應用程序。
以惡意軟件樣本爲例,有一個特定的銀行應用被嵌入,并成爲直接攻擊的對象。但在惡意軟件代碼中,我們發現它還可以攻擊另外 7 個銀行應用程序。惡意軟件對目标應用程序執行幾種不同的攻擊,如下所述。
FjordPhantom 如何使用鈎子框架?
FjordPhantom 使用它嵌入的挂鈎框架來挂鈎到應用程序通常使用的 API,以确定是否打開了可訪問性服務以及當前啓用了哪些服務。這是應用程序用來檢測惡意惡意屏幕閱讀器的标準方法,通過挂鈎這些 API 并返回錯誤信息,就可以繞過屏幕閱讀器檢測方法。這使得攻擊者可以使用屏幕閱讀器在應用程序不知道的情況下從應用程序的屏幕上抓取敏感信息。
類似地,安卓惡意軟件使用它嵌入的鈎子框架來挂鈎到與 GooglePlayServices 相關的 API,使其看起來不可用。GooglePlayServices 由 SafetyNet 使用,通常用于檢測 root 權限。通過假裝 GooglePlayServices 不可用,試圖檢測 root 權限的應用程序可能上當受騙,跳過 root 權限檢查的 SafetyNet 部分。
對于一些應用程序,惡意軟件還挂鈎到與對話框相關的 UI 功能,如果它們包含某些文本,它将自動關閉它們。我們調查了目标應用程序中的這些對話框,它們警告用戶,在其設備上檢測到了一些可能惡意的活動。大多數對話框不能關閉,防止用戶在可能惡意的場景中使用應用程序。通過阻止用戶看到這些對話框,并讓用戶可以正常使用應用程序,惡意軟件就能在不引起懷疑的情況下對這些應用程序進行進一步攻擊。
最後,我們還看到惡意軟件放置了許多鈎子,這些鈎子記錄目标應用程序所做的不同操作,而不修改它們的行爲,這很可能是惡意軟件中留下來的調試功能,用于開發針對不同應用程序的攻擊。這表明 FjordPhantom 正在積極開發中,可能會完善或已經完善到攻擊其他應用程序的程度。