转自:https://xz.aliyun.com/t/4103
介绍
在最近几天,一场声势浩大的网络攻击袭击了意大利的一些组织。正如N020219的公告所示,攻击者尝试伪造Express Courier合法通信来进行攻击。然而在分析Cybaze-Yoroi ZLAB
的同时,我们的分析人员偶然间发现了AZORult工具包
与Gootkit
木马payload之间的某些联系。
技术分析
步骤一—附加的Javascript信息
大多数攻击尝试均是由特定的电子邮件附件开始。其附件中包含隐秘JavaScript代码的压缩存档,而此压缩文档能够在攻击的初始阶段绕过防病毒的检测。
这个JS文件是一个被模糊过的dropper
工具,其目的是“安全”的远程位置下载另一个组件:
它联系两个不同的服务器,googodsgld.]com
和driverconnectsearch.] info
。 这种JavaScript stager
拥有最重要的一个功能:它可以下载许多可执行代码并执行攻击者想要进行的各种操作。
这种模式和代码本身的简单性类似于Brushaloader
攻击(一种用VBScript编写并以类似方式与远程基础架构进行联系的dropper/stager工具
)。 我们可以假设恶意软件编写者可能已经模拟了Brushaloader
的功能,创建了一种利用相同机制的自定义软件版本。
在第一次尝试与googodsgld [.] com
联系之后,脚本与另一个目标进行通信,并检索在driverconnectsearch [.] info
中返回的可执行javascript代码块中编码的Cabinet Archive
信息。 然后将其存储在“%APPDATA%\Local\Temp\
”中。
如上图所示,编码的payload字符串的第一个字符是“TVNDRg
”,它转换为“MSCF”:Microsoft Cabinet压缩文件格式的标准头。
步骤二—内核机制
实际上,这个.CAB
存档只是PE32
可执行文件的shell部分:
执行RuntimeBroker5.exe
示例后我们发现它的功能与另一个dropper工具十分相似:它们均从远程服务器“hairpd [.] com
”下载另外两个组件。
示例文件实际上不仅只是进行下载操作。 这是本文的重点之一:它还与AZORult C2
主机“ssl.] admin] itybuy.]it
建立了沟通渠道。
我们已经知道其通信模式并且与服务器交换的网络分组确认了识别模式,之后动态分析还示出了此威胁的行为情况。
如下图所示,“%APPDATA%\Local\Temp\
”路径中的书写文件与Unit42研究组描述的AZORult分析非常匹配。
在动态分析期间,RuntimeBroker5.exe
示例从C2服务器收到一种配置文件。 我们从正在运行的恶意软件中提取它并对其进行解码:
firefox.exe
SOFTWARE\Wow6432Node\Mozilla\Mozilla Firefox\
SOFTWARE\Mozilla\Mozilla Firefox
SOFTWARE\Clients\StartMenuInternet\FIREFOX.EXE\shell\open\command
SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\firefox.exe
%appdata%\Mozilla\Firefox\Profiles\
MozillaFireFox
CurrentVersion
Install_Directory
nss3.dll
thunderbird.exe
SOFTWARE\Wow6432Node\Mozilla\Mozilla Thunderbird\
SOFTWARE\Mozilla\Mozilla Thunderbird
SOFTWARE\Classes\ThunderbirdEML\DefaultIcon
%appdata%\Thunderbird\Profiles\
ThunderBird
SELECT host, path, isSecure, expiry, name, value FROM moz_cookies
SELECT fieldname, value FROM moz_formhistory
NSS_Init
PK11_GetInternalKeySlot
PK11_Authenticate
PK11SDR_Decrypt
NSS_Shutdown
PK11_FreeSlot
logins.json
logins
hostname
timesUsed
encryptedUsername
encryptedPassword
cookies.sqlite
formhistory.sqlite
%LOCALAPPDATA%\Google\Chrome\User Data\
%LOCALAPPDATA%\Google\Chrome SxS\User Data\
%LOCALAPPDATA%\Xpom\User Data\
%LOCALAPPDATA%\Yandex\YandexBrowser\User Data\
%LOCALAPPDATA%\Comodo\Dragon\User Data\
%LOCALAPPDATA%\Amigo\User Data\
%LOCALAPPDATA%\Orbitum\User Data\
%LOCALAPPDATA%\Bromium\User Data\
%LOCALAPPDATA%\Chromium\User Data\
%LOCALAPPDATA%\Nichrome\User Data\
%LOCALAPPDATA%\RockMelt\User Data\
%LOCALAPPDATA%\360Browser\Browser\User Data\
%LOCALAPPDATA%\Vivaldi\User Data\
%APPDATA%\Opera Software\
%LOCALAPPDATA%\Go!\User Data\
%LOCALAPPDATA%\Sputnik\Sputnik\User Data\
%LOCALAPPDATA%\Kometa\User Data\
%LOCALAPPDATA%\uCozMedia\Uran\User Data\
%LOCALAPPDATA%\QIP Surf\User Data\
%LOCALAPPDATA%\Epic Privacy Browser\User Data\
%APPDATA%\brave\
%LOCALAPPDATA%\CocCoc\Browser\User Data\
%LOCALAPPDATA%\CentBrowser\User Data\
%LOCALAPPDATA%\7Star\7Star\User Data\
%LOCALAPPDATA%\Elements Browser\User Data\
%LOCALAPPDATA%\TorBro\Profile\
%LOCALAPPDATA%\Suhba\User Data\
%LOCALAPPDATA%\Safer Technologies\Secure Browser\User Data\
%LOCALAPPDATA%\Rafotech\Mustang\User Data\
%LOCALAPPDATA%\Superbird\User Data\
%LOCALAPPDATA%\Chedot\User Data\
%LOCALAPPDATA%\Torch\User Data\
GoogleChrome
GoogleChrome64
InternetMailRu
YandexBrowser
ComodoDragon
Amigo
Orbitum
Bromium
Chromium
Nichrome
RockMelt
360Browser
Vivaldi
Opera
GoBrowser
Sputnik
Kometa
Uran
QIPSurf
Epic
Brave
CocCoc
CentBrowser
7Star
ElementsBrowser
TorBro
Suhba
SaferBrowser
Mustang
Superbird
Chedot
Torch
Login Data
Web Data
SELECT origin_url, username_value, password_value FROM logins
SELECT host_key, name, encrypted_value, value, path, secure, (expires_utc/1000000)-11644473600 FROM cookies
SELECT host_key, name, name, value, path, secure, expires_utc FROM cookies
SELECT name, value FROM autofill
SELECT name_on_card, expiration_month, expiration_year, card_number_encrypted value FROM credit_cards
%APPDATA%\Microsoft\Windows\Cookies\
%APPDATA%\Microsoft\Windows\Cookies\Low\
%LOCALAPPDATA%\Microsoft\Windows\INetCache\
%LOCALAPPDATA%\Packages\Microsoft.MicrosoftEdge_8wekyb3d8bbwe\AC\INetCookies\
%LOCALAPPDATA%\Packages\Microsoft.MicrosoftEdge_8wekyb3d8bbwe\AC\#!001\MicrosoftEdge\Cookies\
%LOCALAPPDATA%\Packages\Microsoft.MicrosoftEdge_8wekyb3d8bbwe\AC\#!002\MicrosoftEdge\Cookies\
%LOCALAPPDATA%\Packages\Microsoft.MicrosoftEdge_8wekyb3d8bbwe\AC\MicrosoftEdge\Cookies\
InternetExplorer
InternetExplorerLow
InternetExplorerINetCache
MicrosoftEdge_AC_INetCookies
MicrosoftEdge_AC_001
MicrosoftEdge_AC_002
MicrosoftEdge_AC
Software\Microsoft\Internet Explorer
Software\Microsoft\Internet Explorer\IntelliForms\Storage2
Software\Microsoft\Windows NT\CurrentVersion\Windows Messaging Subsystem\Profiles\Outlook
Software\Microsoft\Office\15.0\Outlook\Profiles\Outlook
Software\Microsoft\Office\16.0\Outlook\Profiles\Outlook
POP3
IMAP
SMTP
HTTP
%appdata%\Waterfox\Profiles\
Waterfox
%appdata%\Comodo\IceDragon\Profiles\
IceDragon
%appdata%\8pecxstudios\Cyberfox\Profiles\
Cyberfox
sqlite3_open
sqlite3_close
sqlite3_prepare_v2
sqlite3_step
sqlite3_column_text
sqlite3_column_bytes
sqlite3_finalize
%APPDATA%\filezilla\recentservers.xml
<RecentServers>
</RecentServers>
<Server>
</Server>
<Host>
</Host>
<Port>
</Port>
<User>
</User>
<Pass>
</Pass>
<Pass encoding="base64">
FileZilla
ole32.dll
CLSIDFromString
{4BF4C442-9B8A-41A0-B380-DD4A704DDB28}
{3CCD5499-87A8-4B10-A215-608888DD3B55}
vaultcli.dll
VaultOpenVault
VaultEnumerateItems
VaultGetItem
MicrosoftEdge
Browsers\AutoComplete
CookieList.txt
SELECT host_key, name, encrypted_value, value, path, is_secure, (expires_utc/1000000)-11644473600 FROM cookies
%appdata%\Moonchild Productions\Pale Moon\Profiles\
PaleMoon
%appdata%\Electrum\wallets\
\Electrum
%appdata%\Electrum-LTC\wallets\
\Electrum-LTC
%appdata%\ElectrumG\wallets\
\ElectrumG
%appdata%\Electrum-btcp\wallets\
\Electrum-btcp
%APPDATA%\Ethereum\keystore\
\Ethereum
%APPDATA%\Exodus\
\Exodus
\Exodus Eden
*.json,*.seco
%APPDATA%\Jaxx\Local Storage\
\Jaxx\Local Storage\
%APPDATA%\MultiBitHD\
\MultiBitHD
mbhd.wallet.aes,mbhd.checkpoints,mbhd.spvchain,mbhd.yaml
.wallet
wallets\.wallet
wallet.dat
wallets\wallet.dat
electrum.dat
wallets\electrum.dat
Software\monero-project\monero-core
wallet_path
Bitcoin\Bitcoin-Qt
BitcoinGold\BitcoinGold-Qt
BitCore\BitCore-Qt
Litecoin\Litecoin-Qt
BitcoinABC\BitcoinABC-Qt
%APPDATA%\Exodus Eden\
%Appdata%\Psi+\profiles\
%Appdata%\Psi\profiles\
<roster-cache>
</roster-cache>
<jid type="QString">
<password type="QString">
</password>
浏览器Cookie
和CryptoWallets
的多次引用确认最初隐藏在cabilet
存档中的“RuntimeBroker5.exe
”示例是AZORult
的变化版本。
步骤三—payload信息
AZORult的样本是从hairpd [.] com
处下载的可执行的PE32
。
“sputik.exe”使用一组规避技术来避免进程被监视,例如调用“UuidCreateSequential
”API来检测虚拟机的MAC地址使用情况,但这种技术可以通过欺骗来轻松绕过网卡检测。
绕过所有逃避技术揭示了payload的本质:Gootkit进行恶意代码植入操作。
通过检测植入代码的执行情况,我们提取恶意软件的部分JavaScript
代码。 Gootkit代码计算了嵌入到PE文件中的NodeJS技术之上编写的几个模块,揭示了植入代码的一部分情况。
在过去几年中,Gootkit源代码已在网上泄露,部分内容也可在Github平台上获得。 通过这种方式,我们可以比对提取的代码段与之前泄露的已知恶意软件版本之间的差异。
我们发现代码之间有很多相似之处,它们可以完全兼容。 例如,私钥和证书已被修改,表明恶意软件作者选择了更强的密钥。
结论
在此次对意大利组织和用户的攻击事件进行分析后,我们发现了用于监视和检测InfoSec社区和CERT-Yoroi之间的联系,并揭示了连接此特定AZORult实例和Gootkit木马的隐藏链接。
此外,该分析还发现了网络犯罪分子所使用技术是如何演变的,并且展示了如何使用高级语言(在这种情况下为JavaScript)来帮助攻击者。
Iocs
- Dropurl:
hairpd[.com/stat/stella.exe
hairpd[.com/stat/sputik.exe
ivanzakharov91[.example[.com
googodsgld[.com
185.154.21[.208
driverconnectsearch.info
host.colocrossing.com
192.3.179[.203
Components:
RuntimeBroker5.exe 2274174ed24425f41362aa207168b491e6fb55cab208116070f91c049946097a
stella.exe
6f51bf05c9fa30f3c7b6b581d4bbf0194d1725120b242972ca95c6ecc7eb79bc
- sputik a75b318eb2ae6678fd15f252d6b33919203262eb59e08ac32928f8bad54ca612
- C2 (AZORult)
ssl[.admin[.itybuy[.it
avant-garde[.host
kinzhal[.online
- Hash:
2274174ed24425f41362aa207168b491e6fb55cab208116070f91c049946097a
6f51bf05c9fa30f3c7b6b581d4bbf0194d1725120b242972ca95c6ecc7eb79bc
a75b318eb2ae6678fd15f252d6b33919203262eb59e08ac32928f8bad54ca612
12791e14ba82d36d434e7c7c0b81c7975ce802a430724f134b7e0cce5a7bb185
Tara规则
rule Gootkit_11_02_2019{
meta:
description = "Yara Rule for Gootkit"
author = "Cybaze Zlab_Yoroi"
last_updated = "2019_02_11"
tlp = "white"
category = "informational"
strings:
$a = {4D 5A}
$b1 = {2D EE 9D 00 04 29 76 EC 00 00 F9}
$c1 = {E6 C5 1F 2A 04 5A C8}
$d1 = "LoadCursorW"
$b2 = {75 0E E8 84 8D FF FF 83 CF FF C7}
$c2 = {B9 C7 25 E7 00 5A 00 00 BA}
$d2 = "GetCurrentPosition"
condition:
$a and (($b1 and $c1 and $d1) or ($b2 and $c2 and $d2))
}
rule Azorult_11_02_2019{
meta:
description = "Yara Rule for Azorult"
author = "Cybaze Zlab_Yoroi"
last_updated = "2019_02_11"
tlp = "white"
category = "informational"
strings:
$a = "MZ"
$b = {44 00 02 00 00 00 6A 04 58 6B C0 00 8B 0D}
$c = {00 00 8B 45 0C 8B 55 F8 39 50 0C 74 10 68}
$d = {41 00 FF D6 8B D8 89 5D D4 85 DB 74 74 FF 35}
condition:
all of them
}
本文为翻译文章,原文:https://blog.yoroi.company/research/gootkit-unveiling-the-hidden-link-with-azorult/