當前位置:
首頁 > 新聞 > Hawkeye逃避機制和反調試技術分析

Hawkeye逃避機制和反調試技術分析

介紹

「Hawkeye Keylogger」是一款在暗網上出售的信息竊取軟體,自2013年以來一直在不斷發展,也增加了許多新的功能和技術。它的主要功能就是從各種應用程序(主要是電子郵件客戶端、Web瀏覽器和FTP客戶端)處收集憑據,並通過協議(如FTP,HTTP和SMTP)將它們發送給威脅行為者。

Cybaze-Yoroi ZLAB將通過最近的Hawkeye樣本對其逃避機制和利用Visual Basic封裝器實施的反調試技術作說明。

技術分析

樣本文件是一個ISO映像,其中有一個實際為PE文件的bat文件,我們可以提取bat文件並將其擴展名替換為「exe」。

圖1:偽bat文件

表1:PE文件的信息

ISO文件的AV檢出率較低,近年來利用ISO文件攻擊的手法也變得越來越流行,只有從ISO中提取出可執行文件才能提高檢出率:

圖2:ISO壓縮文件(左)和提取文件(右)的AV檢測

PE文件包含Visual Basic 5.0的存根,它能保護惡意軟體的核心並使分析複雜化:

圖3:Visual Basic封裝程序

如上所示,惡意軟體是用Visual Basic 5.0編寫的,可以通過ad-hoc反編譯器來處理。

圖4:VB代碼反編譯成p-code

反編譯後的代碼被混淆過,想要獲取感染機制更多信息的唯一解決方案是調試程序。

為了使分析複雜化,攻擊者第一個技巧是動態地創建一個新的內存段,通過「VirtualAlloc」函數向里注入一些代碼。惡意軟體對該段代碼解碼後,會選擇一個隨機的新虛擬地址空間來分配內存,在本例中是「0x00260000」載入到了EAX寄存器中。

圖5:通過VirtualAlloc API分配內存

GetTickCount反調試技術

在新分配的區域內切換上下文之後,惡意軟體採用「GetTickCount()」反調試技術。根據MSDN文檔,GetTickCount檢索自系統啟動以來經過的毫秒數,最多為49.7天。惡意行為者通過使用這個API調用來檢索進程執行的時間,如果超過預設的閾值,則惡意程序終止執行:

圖6:GetTickCount常式一個新的地址空間

創建地址空間的第一個惡意操作是調用GetTickCount API,結果是:

圖7:EAX寄存器中的GetTickCount結果

GetTickCount函數的結果存儲在EAX寄存器中。惡意軟體在完成其他解密操作後會繼續調用它。

圖8:GetTickCount的減法反調試技巧

在第二次調用GetTickCount之後,會立即將上圖所示的兩個值相減,並將其放在EAX寄存器中。下一條指令是EAX寄存器和預先設置的閾值「0x5DC」之間的比較,「0x5DC」是十進位表示的1500。根據Microsoft文檔,GetTickCount函數的解析度為10ms,因此我們可以推斷出攻擊者的判定閾值為15秒。在理解了這個技巧之後,很容易繞過它繼續分析樣本。

圖9:運行有效負載的ShellExecute常式

圖10:原始exe和自修改exe之間的資源比較

如上圖所示,原始文件(左側)僅顯示圖標和清單作為資源,而自操作文件則在「RCData」中顯示了一個名為「__」的資源,它是加密的最終payload。

圖11:惡意資源檢索常式

為了保護自己讓分析變得更加困難,惡意軟體通過「CreateProcessInternalW」API調用重新生成自己:

圖12:最終payload的執行常式

現在,真正的payload已準備好使用自定義內部常式進行自解密。

圖13:最終payload的解碼常式

在解密常式之後,惡意軟體通過「memcpy」函數將這段新代碼複製到另一塊內存中。此外,為了驗證payload是否正確提取,惡意軟體會檢查存儲器備用的前兩個位元組是否為「0x5A4D」,即ASCII碼中的「MZ」。

圖14:驗證最終payload的正確解碼

轉儲文件後,真正的payload就顯現了出來。

Payload

提取的payload是使用.NET C#語言編譯的PE文件,其中包含以下靜態信息:

表2:最終payload的靜態信息

Payload使用了.NET Reactor工具進行模糊處理,但可以輕鬆恢復已清除的版本:

圖15:.NET Reactor混淆器使用痕迹

最終payload的一些靜態信息:

表3:最終payload已清除版本的靜態信息

由於payload是用.NET框架編寫的,可以調試代碼以檢索此新樣本的所有詳細信息。調試樣本的過程讓我們發現其屬於惡意軟體HawkEye。

圖16:通過Rijndael演算法的循環字元串解密常式

每個敏感信息、字元串或其他信息都是通過Rijndael演算法加密的,如圖16所示。在開始任何操作之前,惡意軟體會試圖做一個簡單的逃避伎倆——檢索受害者機器的用戶名,並將此用戶名與一系列硬編碼的用戶名進行比較,這些用戶名是沙箱採用的經典用戶名,如果其中一個用戶名匹配,則說明可能是在虛擬機中運行的。

圖17:沙箱逃避技巧

簡單檢查後,信息竊取程序開始執行其惡意操作。第一個惡意操作是持久性機制:

圖18:持久性機制

持久性機制是通過用值「C:\Users\Admin\AppData\Roaming\MyApp\MyApp.exe」設置註冊表項「HKCU\Software\Microsoft\Windows\CurrentVersion\Run」來成立的,值之前已在此路徑中複製了自身。但如果惡意軟體是從原始封裝器中啟動的,它將在「MyApp」路徑中複製整個可執行文件,因為payload作為線程在封裝器進程中執行;相反,如果只執行最終payload,則只存儲此部分。

圖19:禁用任務管理器

惡意軟體採用了一種特殊的自動保護機制,通過設置圖19中突出顯示的註冊表項,來禁用Task Manager進程開啟的可能。此時,惡意軟體可以啟動信息竊取程序。

圖20:從Internet Explorer檢索密碼的常式

信息竊取程序會從多種瀏覽器中檢索所有敏感數據和登錄數據,如下圖所示:

圖21:惡意軟體獲取的一部分瀏覽器列表

完整列表如下:

·Google Chrome

·Yandex

·Comodo Dragon

·Cool Novo

·Chromium

·Torch Browser

·7Star

·Amigo

·Brave

·Cent Browser

·Chedot

·Coccoc

·Elements Browser

·Epic Privacy

·Kometa

·Orbitum

·Sputnik

·Uran

·Vivaldi

·UC Browser

·Flock Browser

同樣,惡意軟體也會尋找其他服務的憑證,如CoreFTP、FileZilla和JDownloader,以及受害者機器上的註冊電子郵件帳戶。搜索的電子郵件客戶端為:

·Outlook

·SeaMonkey

·Postbox

·Thunderbird

現在,我們想了解Microsoft Outlook上惡意軟體是如何收集密碼的。

圖22:存儲Microsoft Outlook客戶端用戶配置的註冊表項

惡意軟體檢索特定的註冊表項:「HKCU \ Software \ Microsoft \ Windows NT \ CurrentVersion \ Windows Messaging Subsystem \ Profiles \ Outlook」,該表項中包含Microsoft Outlook用戶配置文件。

圖23:Outlook密碼解密常式

圖23中的方法「smethod_50」展示了如何簡單地解密保存在該註冊表項中的密碼:它檢索位元組數組並將其作為參數與CurrentUser DataProtectionScope一起用於NET框架中提供的靜態方法——「ProtectedData.Unprotect()」。之後,收集的信息將收集在列表中,隨時可以發送到伺服器。

圖24:創建收集的帳戶列表

最後一項操作是準備將信息發送給收件人。作為經典的HawkEye惡意軟體,傳輸的通信協議是SMTP。因此,惡意軟體需要使用.NET框架提供的API才能實例化SMTP客戶端。調試到正確的位置,惡意軟體配置顯示:

圖25:SMTP客戶端帳戶配置

結論

Hawkeye如今是眾所周知的威脅之一,之前已有文章分析過其感染鏈,在本文中我們對Hawkeye 的逃避機制和通過Visual Basic封裝器實施的反調試技術作了說明。

IoC

Hashes

a3aa6e220591f05f4e2ecc4f4741ac6b6715ebb2b5c42c2b7bb52142c54be30b

67a052d6be1368bb1ec29fea377ae5f529ae539ec0114a2c4a70f83009c6db36

C2 (smtps):

us2[.outboind[.mailhostbox[.com

208.91.199.225

持久性機制:

註冊表項設置 「HKCU\Software\Microsoft\Windows\CurrentVersion\Run」

Yara Rules

rule ISO_Dropper_HawkEye_201907 {

meta:

description = "Yara Rule for HawkEye ISO dropper"

author = "Cybaze - Yoroi ZLab"

last_updated = "2019-07-08"

tlp = "white"

category = "informational"

strings:

$s1 = "PowerISO" ascii wide

$s2 = "MSVBVM60.DLL" ascii wide

$h1 =

condition:

all of them

}

rule Visual_Basic_Loader_HawkEye_201906 {

meta:

description = "Yara Rule for Visual Basic Loader and its payload (HawkEye)"

author = "Cybaze - Yoroi ZLab"

last_updated = "2019-07-08"

tlp = "white"

category = "informational"

strings:

$h1 =

$h2 =

$s1 = "MSVBVM60.DLL" ascii wide

condition:

uint16(0) == 0x5A4D and all of them

}

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 嘶吼RoarTalk 的精彩文章:

數據說話:關於軟體供應鏈的真相
永信至誠的平行模擬術,大潘:穿過這場「連環夢」

TAG:嘶吼RoarTalk |