啊好难找啊!kpi–!!
组织介绍
Evilnum 组织因使用 Evilnum 恶意软件而闻名,该组织最初于 2018 年被安全公司所披露。Evilnum 组织擅长对受害者目标使用鱼叉式网络钓鱼电子邮件,主要针对整个欧洲的金融科技公司。由于金融公司多数需要身份信息来验证注册,因而用于钓鱼邮件的附件通常使用扫描信用卡、水电费账单、身份证、驾驶执照和其他身份信息图片来作为诱饵内容。 Evilnum 专注于间谍活动,企图从目标单位企业获取财务信息,包括:客户列表和投资 及交易信息的文档、演示文稿、交易软件的凭证、浏览器数据、电子邮件登录信息、客户信用卡数据、甚至 VPN 配置等。自 2022 年初以来,Evilnum APT 组织的攻击行为一直在被各个国家密切监视。过程中发现他们针对英国和欧洲地区的国家发起的小规模针对性攻击活动的几个实例。近期的攻击行为使用最新的战术、技术和程序。在 2021 年观察到的早期活动中,该APT组织使用的主要分发媒介是 Windows 快捷方式文件 (LNK)或恶意文本文档 (ZIP) 作为电子邮件附件发送给受害者。在最近的例子中,攻击者已经开始使用 MS Office Word 文档,利用文档模板注入将恶意负载传送到受害者的机器上。
攻击手法
- Evilnum APT 组织的主要目标集中在金融科技(金融服务)领域,特别是在英国和欧洲处理贸易和合规的公司。
- 2022 年 3 月,Evilnum APT 组的目标选择有重大更新。他们瞄准了一个处理国际移民服务的政府间组织。
- 袭击的时间线和选定目标的性质与俄乌的冲突相吻合。
- 攻击者以“通用数据保护条例 (GDPR)”为诱饵针对 KOT4X 单位进行鱼叉攻击,除此还有身份验证信息类型诱饵。
- 诱饵文档采用 LNK 加载 JS 代码的方法执行恶意代码,LNK 文件包含 JS 代码、PDF、 EXE 等数据,经过 JS 代码多层解密后执行最后的后门程序,整体分多个阶段执行,复杂程度较高。
- 载荷具备反调试、检测杀软的功能,多个阶段的载荷都有延迟代码,在获取最终阶段的载荷失败,则会等待 3 个小时后再次运行,这意味着该后门将隐蔽性放在第一原则。
- 模板注入阶段使用的是基于宏的文档利用 VBA 代码技术,企图绕过静态分析以防止逆向技术。
- 使用严重混淆的 JavaScript 解密并丢弃端点上的有效负载。JavaScript 配置了一个计划任务来运行已删除的二进制文件。与 EvilNum APT 组织使用的先前版本相比,此 JavaScript 在混淆技术方面有着显著改进。
- 在执行过程中创建的所有文件名称都是由攻击者仔细构造的,以欺骗合法的 Windows 平台和其他第三方二进制文件检测工具。
- 在每个新实例中,APT 组织使用与行业垂直目标相关的特定关键字注册多个域名。
样本分析
第 1 阶段:恶意文档
主题的选取上延续了Evilnum在之前的行动中诱饵文件使用过的类似文件名,意为所有权证明。这些样本文档制作比较粗糙,包括本样本在内的一系列样本都是利用CVE-2017-0199来进行恶意行为执行,但内容却是诱导受害者打开Office宏的图。Evilnum在之前的行动中使用过这类诱导图片,不过本次未作修改就应用在这些样本中。
第 2 阶段:宏模板 [VBA 代码清除技术]
模板包含主要的恶意宏代码。它利用了相当少见的 VBA 代码清除技术。这种技术会破坏源代码,并且仅将 VBA 宏代码(也称为 p 代码)的编译版本存储在文档中。因此,这种技术可以防止 olevba 等静态分析工具提取反编译的 VBA 代码。
使用沃尔玛团队提出的VBA Stomping — Advanced Maldoc Techniques技术,我们能够提取完整的宏代码。
宏代码中的所有字符串均使用如图所示的字符串解密函数进行解密。
以下是宏的主要功能。
1.文档文件有两个文本框,内容是加密的。这些文本框将在运行时由 VBA 宏代码解密。
a) 文本框 1 - msform_ct.TextBox1.Text。这将被解密并将内容写入%appdata%"ThirdPartyNotices.txt”
b) 文本框 2 - msform_ct.TextBox2.Text - 这将被解密并将内容写入“ %appdata%\Redist.txt ”
2.将合法的 Windows 二进制Wscript.exe复制到名为“ msdcat.exe ”的文件中。此类文件复制操作是由恶意软件完成的,以此作为绕过端点安全产品的一种方式。
3.文件 - Redist.txt 包含将使用以下命令行执行的经过混淆的 JavaScript:
msdcat.exe” /E:jscRipt “%appdata%\Redist.txt” dg ThirdPartyNotices.txt\
注意: “dg”是存在于 VBA 宏代码中的硬编码命令行参数。
4. VBA宏代码执行过程中,多次调用doc.Shapes.AddPicture()从攻击者控制的服务器获取JPG图片。我们认为这是攻击者为了跟踪和记录端点上代码的执行而完成的。
图中显示了一个这样的示例。在命令行的构建和命令行的执行之间存在对 doc.Shapes.AddPicture() 的调用。
第 3 阶段:去混淆和分析
我们将重点介绍一些在混淆的 JavaScript 中很少观察到的独特混淆技术。在执行时使用以下命令行向此 JavaScript 传递了两个参数:
msdcat.exe” /E:jscRipt “C:\Users\user\AppData\Roaming\Redist.txt” dg ThirdPartyNotices.txt
参数 1:“dg”,此字符串稍后用于 JavaScript 中的字符串解密函数。
参数 2:文件“thirdpartynotifications .txt”包含加密代码,将由JavaScript解密并删除文件系统上名为SerenadeDACplApp.exe的文件。
大多数混淆技术涉及大量加密和编码字符串,这些字符串在整个代码中使用索引进行引用。进行去混淆的常用方法需要多次“检索和替换”操作,其中将引用替换为实际解密和解码的字符串。
在这种情况下,JavaScript使用了一种有趣的技术,原始字符串数组被打乱,执行时在内存中也被打乱。因此,在不打乱数组的情况下解密引用字符串的任何尝试都将导致错误。这样的方法可以用来阻止逆向工程,也可以绕过一些试图自动化去混淆的工具。
下面的图中显示了在 JavaScript 开头定义的巨大字符串数组。这个数组被包裹在一个函数中,作为一个额外的混淆层。
下一步是解密混淆数组。下图中显示了相关的 JavaScript 代码,该代码使用粗略近似法来解密混淆数组。它有一个预定义的种子值“0x6467a”。在每次迭代中,该函数使用如下图所示的算法去计算一个种子,并将其与预定义的种子“0x6467a”进行比较,如果不满足条件,该函数继续将数组的内容向右移动一个位置,直到满足此条件。代码中包含相关注释以说明其逻辑。
用于混淆的其他技术包括控制流扁平化技术,下图显示了一种使用这种混淆技术的字符串解密函数。使用 switch-case 对解密步骤的顺序进行打乱,并遵循以下顺序:
“15|12|3|2|14|5|1|10|9|17|8|7|6|4|13|16|0|11”
这意味着,最先执行“case 15”,然后执行“case 12”,依此类推。最后的“case 11”返回解密后的字符串。
第 4 阶段:丢弃二进制文件(加载程序)
正如上节所述,JavaScript 删除了两个文件:
a)一个可执行文件 (SerenadeDACplApp.exe)
b)二进制文件 (devZUQVD.tmp)
上边的exe文件由计划任务连同所需的参数一起执行。在执行过程中,它执行以下操作:
1.执行命令行提取要加载的二进制文件
加载程序检查命令行是否以 ( “ ) 结尾。如果为真,则终止进程,否则将解析参数以提取要加载的二进制文件。
# 提取文件名有两种代码逻辑
- 如果第一个参数具有格式 ( –[char]=[char]* ),则加载程序将从该参数字符串中删除前 5 个字符,在其前面加上“dev”并附加“.tmp”。生成的字符串用作已删除二进制文件的文件名。
例子:
参数字符串: –E=nThisIsUsedInFileName
提取的文件名: devThisIsUsedInFileName.tmp
- 第二个参数字符串用作已删除二进制文件的文件名
2.使用Heaven’s gate技术调用NtOpenFile API创建文件句柄
3.使用 RtlAllocateHeap API 为读取文件内容分配内存
4.使用Heaven’s gate技术调用NtReadFile API读取文件内容到分配的内存
5.解密文件内容
# 加密内容格式
XOR 密钥长度(1 字节)+ XOR 密钥 + 加密内容大小(4 字节)+ 加密内容
解密后的内容原来是一个 PE 文件,它使用自定义格式来存储 PE 标头和节标头信息。
# 解密内容格式
自定义 PE 标题(+ 自定义部分标题 + 部分数据)*部分数量
#PE头格式
解密内容的开始以及 PE 标头(1 字节 - 00)+ 图像基础(4 字节)+ 图像大小(4 字节)+ 入口点(4 字节)+ 节数(4 字节)+ 到第一节的偏移量解密内容开头的信息(4 字节)+ 解密内容的大小(4 字节)
# 节头格式
节号标记(1 字节)+ 节 RVA(4 字节)+ 节 VirtualSize(4 字节)+ 未知(4 字节)
7.使用Heaven’s gate技术调用NtAllocateVirtualMemory API 为要映射的PE文件分配内存。
注意:大小取自上述 PE 标头格式。
8.映射内存中的PE文件。
9.使用Heaven’s gate技术调用NtCreateThreadEx API 创建一个线程指向映射PE 的入口点。
注意:加载程序使用天堂之门技术来逃避端点安全产品以及系统调用或 API 监控应用程序。它使用自定义标头格式来阻止对 PE 标头或节标头模式的内存扫描,并且还难以将 PE 文件作为独立的可执行文件进行转储和分析。
第 5 阶段:映射 PE(后门)
1.解密后门包括:
a) C2 域名
b) 用户代理相关字符串
c) 网络路径
d) Referrer strings
e) Cookies
2.解析从配置中检索到库的 API 地址
3.对生成的字符串进行加密和Base64编码
4.通过从配置中选择一种 cookie,将编码字符串嵌入 cookie 标头字段中。
[+] 网络通讯
完成以上所有操作后。后门从配置中选择一个 C2 和一个路径,并发送网络请求。
如果请求成功,后门将向服务器查询可用内容并下载。
根据内容大小执行两种不同的操作:
1.如果内容大小为4,则后门检查下载的数据是否等于“01”。如果为真,它会获取机器快照并通过 POST 请求将其发送到 C2 服务器。快照数据以加密形式泄露,cookie 标头包含附加信息。
# cookie头字符串的格式
{
“u”:”{first_arg-user_id}”, “sc”:1, “dt”=”{snapshot_date_time}”
}
2.如果内容大小大于4,则后门将下载的数据解密并执行。
Indicators of compromise
MD5 | Description | Filename |
---|---|---|
0b4f0ead0482582f7a98362dbf18c219 | Document | proof of ownership.docx |
4406d7271b00328218723b0a89fb953b | Document | tradersway compliance.docx |
61776b209b01d62565e148585fda1954 | Document | vantagemarkets documents.docx |
6d329140fb53a3078666e17c249ce112 | Document | vantagefx compliance.docx |
db0866289dfded1174941880af94296f | Document | calliber docs (2).docx |
f0d3cff26b419aff4acfede637f6d3a2 | Document | complaince tfglobaltrading.docx |
79157a3117b8d64571f60fe62c19bf17 | Document | complaint europatradecapital.com.docx |
63090a9d67ce9534126cfa70716d735f | Document | fxtm_compliance.docx |
f5f9ba063e3fee25e0a298c0e108e2d4 | Document | livetraderfx.docx |
ea71fcc615025214b2893610cfab19e9 | Loader | SerenadeDACplApp.exe |
51425c9bbb9ff872db45b2c1c3ca0854 | Encrypted binary | devZUQVD.tmp |
3f230856172f211d5c9ed44ea783f850 | zip | Docs010621.zip |
87288fd98126fd4f7f2003c1103c3f2d | ||
04918bae6c83b6307b9c6c2018da6991 | ||
82aea1d24b6a13d37586e2d14d9a71f3 | ||
87288fd98126fd4f7f2003c1103c3f2d | ||
9c0e353c53a41e94709e928fefde6071 |
IP |
---|
185.161.208[.]64 |
185.161.208[.]194 |
185.161.209[.]97 |
185.161.209[.]170 |
185.161.208[.]209 |
C2 Domains |
---|
azure-ns[.]com |
microsft-ds[.]com |
afflaf[.]com |
quanatomedia[.]com |
webinfors[.]com |
khnga[.]com |
netwebsoc[.]com |
infcloudnet[.]com |
bgamifieder[.]com |
bunflun[.]com |
refinance-ltd[.]com |
book-advp[.]com |
mailservice-ns[.]com |
advertbart[.]com |
inetp-service[.]com |
yomangaw[.]com |
covdd[.]org |
visitaustriaislands[.]com |
traveladvnow[.]com |
tripadvit[.]com |
moreofestonia[.]com |
moretraveladv[.]com |
estoniaforall[.]com |
bookingitnow[.]org |
travelbooknow[.]org |
bookaustriavisit[.]com |
windnetap[.]com |
roblexmeet[.]com |
netrcmapi[.]com |
meetomoves[.]com |
bingapianalytics[.]com |
azuredcloud[.]com |
appdllsvc[.]com |
udporm[.]com |
pcamanalytics[.]com |
nortonalytics[.]com |
deltacldll[.]com |
mscloudin[.]com |
msdllopt[.]com |
zerobitfan[.]com |
edwardpof[.]com |
totaledgency[.]com |
mainsingular[.]com |
apidevops[.]org |
cloudreg-email[.]com |
mailservicenow[.]com |
namereslv[.]org |
apple-sdk[.]com |
dnstotal[.]org |
msftcrs[.]com |
sysconfwmi[.]com |
apiygate[.]com |
plancetron[.]com |
msftmnvm[.]com |
azurecfd[.]com |
msftprintsvc[.]com |
amazonpmnt[.]com |
cloudamazonft[.]com |
covidsrc[.]com |
covidsvcrc[.]com |
deuoffice[.]org |
alipayglobal[.]org |
worldsiclock[.]com |
printfiledn[.]com |
global-imsec[.]com |
amzncldn[.]com |
iteamates[.]com |
checkpoint-ds[.]com |
cloudhckpoint[.]com |
philipfin[.]com |
eroclasp[.]com |
azurecontents[.]com |
amznapis[.]com |
amazonappservice[.]com |
ammaze[.]org |
thismads[.]com |
mullticon[.]com |
amazoncontent[.]org |
tomandos[.]com |
wizdomofdo[.]com |
refsurface[.]com |
picodehub[.]com |
musthavethisapp[.]com |
dnserviceapp[.]com |
cloudazureservices[.]com |
anyfoodappz[.]com |
anypicsave[.]com |
cargoargs[.]com |
navyedu[.]org |
msftinfo[.]com |
invgov[.]org |
covidaff[.]org |
printauthors[.]com |
rombaic[.]com |
covsafezone[.]com |
amazoncld[.]com |
msftcd[.]com |
govtoffice[.]org |
covidgov[.]org |
questofma[.]com |
realshbe[.]com |
govdefi[.]com |
dogeofcoin[.]com |
borisjns[.]com |
travinfor[.]com |
Path |
---|
/actions/async.php |
/admin/settings.php |
/admin/user/controller.php |
/admin/loginauth.php |
/administrator/index.php |
/cms/admin/login.php |
/backend/login/ajax_index.php |
/wp-admin/media-new.php |
/get.php |
/auth/login |
/admin/index.php |
/actions/authenticate.php |
/index.php |
/admin/login.php |
/wp-admin/admin-ajax.php |