前言
Valak 在2019底被发现,在过去6个月内经历了疯狂迭代,发布的版本超过30个,从加载工具进化为了一个自成体系的恶意软件。Valak 恶意软件主要攻击位于美国和德国的用户,此前它曾和 Ursnif 和 IcedID 银行木马 payload 捆绑使用。
在最新的版本中,Valak已变成了针对个人和企业的信息窃取器。通过使用包含恶意宏的微软 Word 文档发动钓鱼攻击登录目标设备后,会下载名为 “U.tmp” 的 .DLL 文件并保存到一个临时文件夹中。之后调用 WinExec API并下载 JavaScript 代码,从而创建和C2服务器的连接。之后会下载其它文件,通过 Base64和 XOR 解密器解密。之后,Valak 下载并执行其它模块用于窃取信息。
最新版本的恶意载荷:project.aspx 和 a.aspx分别执行不同功能。Project.aspx 管理注册表键、恶意活动的任务调度以及持久性,而a.aspx (在内部被称为 PluginHost.exe)是一个可执行文件,用于管理其它组件。另外,Valak 还具备了反检测能力。
Valak 的最新变体已出现在针对微软 Exchange 服务器的攻击活动中,这些攻击活动被指专门针对企业。
攻击者利用这些敏感数据访问企业内部域名用户,获取企业的内部邮箱服务以及访问企业的域名证书。通过系统信息,攻击者可以识别出域名管理员的用户身份。
目前,Valak 已更新至版本24。
功能介绍
当Valak在2019年末首次被发现时,研究人员还以为它只是一个普通的加载工具,在针对美国的多个攻击种,它通常与Ursnif(又名Gozi)和IcedID一起使用。根据Cybereason公司 的Nocturnus 团队于2020年4月进行的调查,Valak 被确认用于主要针对美国和德国的攻击中。目前,总共发现了三十多种不同版本的恶意软件。 Valak的主要功能包括:
无文件阶段:Valak包含无文件阶段,在该阶段中,注册表使用注册表来存储不同的组件;
· 侦查:它从受感染的主机收集用户,计算机和网络信息;
· 地理位置:它可以检查受害者设备的地理位置;
· 屏幕截图:获取受感染设备的屏幕截图;
· 下载辅助载荷:它会下载其他插件和其他恶意软件;
· 攻击目标:它针对管理员和企业网络;
·渗透到Exchange 服务器:它从Microsoft Exchange邮件系统收集和窃取敏感信息,包括Credential和域证书。
Valak较新版本中最有趣的功能是名为“PluginHost”的组件,PluginHost提供与C2服务器的通信,并以“ManagedPlugin”的名称下载其他插件。在观察到的插件中有“Systeminfo”和“Exchgrabber”,它们似乎都是专门针对企业的。
感染过程
在这些活动中,最常见的感染媒介是通过嵌入了恶意宏代码的Microsoft Word文档。根据目标的不同,文档的内容为英文和德文。
恶意宏代码用于下载名为.Ub的.cab扩展名的DLL文件,并将其保存到临时文件夹中。
DLL文件下载地址为“hxxp://v0rzpbu[.]com/we201o85/aio0i32p.php?l=hopo4.cab”,下载DLL之后,代码使用“regsvr32.exe”启动恶意DLL。
执行后,DLL会使用WinExec API调用删除并启动。Valak恶意软件的此阶段使用恶意JavaScript文件,该文件的随机名称每次执行都会更改。在下面的示例中,JavaScript文件的名称为“sly4.0”。
多阶段攻击过程
第一阶段:获得初步攻击点
下载的JavaScript代码“sly4.0”包含一个名为“PRIMARY_C2”的变量,其中包含多个伪造和合法的域,包括Google,Gmail,Avast和Microsoft,域列表在样本之间有所不同。
Valak使用两个预定义的URI创建到列表中不同C2服务器的连接:
一个URI用于下载名为“project”的编码文件,另存为project [1] .htm。
在版本30中,文件被重命名为“rpx.aspx”。
一个URI用于下载名为“a.aspx”的编码文件,另存为a [1] .htm。
在版本30中,文件已重命名为“go.aspx”。
恶意软件使用Base64和XOR密码对这两个文件进行解码,密钥是预定义的字符串和运行时从内存收集的信息的组合。
函数“rot13_str”使用XOR解码字符串:
用于下载编码文件并使用第一个函数(rot13_str)和Base64对其进行解码的代码。
“GetID”函数用于创建XOR密钥并收集有关用户的信息,该恶意软件在“HKCU \ Software \ ApplicationContainer \ Appsw64”下的注册表项中设置诸如C2服务器、ID、下载的有效载荷和已解码的project.aspx之类的信息。这些密钥将在第二阶段中使用。
在下载有效载荷并设置注册表项和值之后,Valak通过计划任务设置其持久性。
计划的任务设置为启动wscript,该脚本执行JavaScript,该JavaScript存储为文件“Classic2Application.bz”中名为“Default2.ini”的备用数据流。
ADS中的脚本(“Default2.ini”)执行注册表项“HKCU \ Software \ ApplicationContainer \ Appsw64 \ ServerUrl”的内容,该注册表项包含第二阶段JavaScript文件“project.aspx”的内容。
第二阶段:获取和执行次级有效载荷
在第二阶段,它下载用于侦察活动和窃取敏感信息的其他模块。第二阶段将使用两个有效载荷(“project.aspx”和“a.aspx”)以及注册表项中的配置来执行恶意活动。
第二阶段JS-PROJECT.ASPX
“project.aspx”(或研究人员称为第二阶段JS)是一个看起来与第一阶段JavaScript(“sly4.0”)非常相似的JavaScript文件。但是,在仔细检查时,它包含其他功能。
该脚本由用于维护持久性的计划任务执行,其主要目标是:
1. 执行插件管理组件Pluginhost.exe;
2. 从C2下载并解析其他有效载荷。
3. 将有效内容另存为备用数据流,并设置计划的任务以运行它们。
在第二阶段,配置文件已更改为包含唯一的“Client_ID”并将尝试下载另一个文件“bounce.aspx”。
第二阶段还包含三个独特的函数,“CreateExecJob”,“CreateOleExecJob”和“LaunchPlugin”。
这些函数从“ParseTask”函数调用,并从C2接收已解析的任务。
如果恶意软件下载了以单词“ODTASK”开头的有效载荷,它将调用“CreateOleExecJob”,它将有效载荷写入文件“C:\\ Users\\Public\\PowerManagerSpm.jar”的ADS中。任务“PerfWatson_%taskname%”来运行它。
如果恶意软件收到的内容以单词“PLUGIN”开头,则会调用“LaunchPlugin”,该插件将使用WMI并将内容作为参数来执行PluginHost.exe文件。
如果恶意软件收到以“TASK”一词开头的内容,它将调用“CreateExecJob”,该内容作为文件“C:\\ Users\\Public\\PowerManagerSpm.jar”的ADS写入,并创建计划任务“PowerUtility_%任务名称%W”来运行它。
分析表明,这次,Valak下载的有效载荷为IcedID。但是,有效载荷可能会有所不同,因为攻击者可以将其他有效载荷下载到受感染的系统。
在以前的感染中,Valak下载了不同的远程管理工具,例如putty.exe和NetSupport Manager。
PLUGINHOST-A.ASPX
解码后的“a.aspx”以%TEMP%\< ID > .bin的形式保存在临时文件夹中。该文件内部名为“PluginHost.exe”,是一个可执行文件,将用于管理其他组件。
Valak的模块化插件架构
PLUGINHOST-插件管理组件
可执行文件“PluginHost.exe”的函数分为四个类别:Bot,HTTPClient,Program和Utils,这将使其可执行下载和加载恶意软件其他组件的主要目标。
Bot类负责从第一阶段设置的几个注册表项中读取。
1. GetID()从注册表ID“SetupServiceKey”中读取。
2. GetC2()从包含C2域的注册表项“ShimV4”中读取。
这两个函数都使用Utils类读取注册表项:
从注册表读取GetID()和GetC2()。
Utils类中的RegistryReadInfo()函数
HTTPClient类:HTTPClient类包含两个函数,post和GetPluginBytes。
GetPluginBytes()函数使用GetC2()获取C2域,并添加嵌入式URI。该URL用于下载该插件的其他模块。
Program类:Program类包含文件main()的主要函数。该函数执行函数GetPluginBytes()来下载类型为“ManagedPlugin”的模块组件。这些组件将以反射方式加载到可执行文件的内存中,并扩展插件功能。
Utils类包含其他类使用的几个维护函数:
MANAGEDPLUGIN:增强函数的插件套件
当提到其他插件时,值得注意的是,在早期版本的Valak中,插件是由第二阶段JS通过PowerShell下载的。 Valak的最新版本放弃了流行但易于检测的PowerShell下载器方法,并转换为PluginHost作为管理和下载其他有效载荷的方式。这种转变表明Valak的开发者正在寻找更隐秘的方法和方法来改进其逃避技术。
在分析过程中,研究人员发现了几个内部名称相同的不同模块“ManagedPlugin.dll”。
这些模块由“PluginHost.exe”下载和加载:
· Systeminfo:负责广泛的侦察;针对本地和域管理员;
· Exchgrabber:旨在窃取Microsoft Exchange数据并渗透到企业邮件系统中;
· IPGeo:验证目标的地理位置;
· Procinfo:收集有关受感染设备正在运行的进程的信息;
· Netrecon:执行网络侦察;
· 屏幕截图:捕获受感染设备的屏幕截图。
在这些组件中,有些组件专注于一项特定的活动以实现其目标,而在功能和潜在影响方面则相对不如其他组件那么强大,比如ipgeo,procinfo,netrecon和screencap。
MANAGEDPLUGIN:SYSTEMINFO,重新安装模块
在类名方面,“Systeminfo”与“PluginHost.exe”具有许多相似之处。但是,与“PluginHost”不同,它包含几个侦察功能,这些功能专注于收集有关用户,设备和现有AV产品的信息。
该模块收集有关用户的信息,并尝试验证这是本地管理员还是域管理员。这表明在感染计算机之后,Valak选择主要针对管理员和域管理员。这表明有可能针对较高级别的帐户,例如企业管理员。
该模块尝试使用AntivirusSoftware()函数查找受感染的计算机是否安装了任何安全产品,使用WMI查询“SELECT * FROM AntiVirusProduct”收集有关已安装的AV程序的信息。
该模块还收集受感染设备的物理地址(MAC)和IP地址:
ManagedPlugin(SystemInfo)收集计算机的物理地址。
与“PluginHost”相似,“SystemInfo”使用另一个名为GetQuery()的函数来构建URL,以将信息发送到远程C2,该URL使用Base64和一些char替换编码。
“ManagedPlugin”模块的核心功能在“ManagedPlugin”类中,该功能无限循环,并继续执行侦察活动并将其发送给攻击者。
管理插件:EXCHGRABBER-STEALER TARGETING ENTERPRISES
Exchgrabber与systeminfo相似,在Bot,HTTPClient和Utils等多个函数名称方面与PluginHost有一些相似之处。但是,它具有自己的差异化功能。
乍一看,该模块似乎仅用于窃取Credential,可以在几个类和数据参数中使用清晰的名称(例如“Credential”和“CredentialType”)看到该Credential。
该模块在“Credential”类中处理其Credential管理,该类包括几个功能,这些功能处理Credential管理活动和将保存这些Credential的数据类型。
此类中最有趣的函数之一是“Credential”,它接收四个参数:用户名,密码,目标和Credential类型。它将这些凭证插入相应的模块变量中。
核心ManagedPlugin函数中使用“目标”变量来存储与Microsoft Office应用程序有关的字符串。
“Credential”函数中的另一个有趣的参数是“CredentialType”,凭证的类型由枚举变量“CredentialType”的另一部分确定,该变量包含模块将尝试提取的每个凭证。
Credential类型是可以从企业Microsoft Exchange服务器数据中提取的敏感信息,包括域密码和域证书。
通过提取此敏感数据,攻击者可以访问企业内部邮件服务的内部域用户以及企业的域证书。使用systeminfo,攻击者可以识别哪个用户是域管理员。这会造成敏感数据泄漏和潜在的大规模网络间谍或信息窃取的非常危险的结合。它还表明,该恶意软件的预期目标首先是企业。
检查MainPlugin类背后的核心逻辑时,很明显,每个类如何与其他类协作以从Microsoft Exchange和Outlook中提取数据。
该模块尝试检查提取的数据是否与Microsoft Office或MS.Outlook有关。如果是这样,它将尝试使用函数GetFiles访问文件“Autodiscover.xml”。 “Autodiscover.xml”是动态生成的文件,其中包含Microsoft Outlook访问配置向导中输入的邮箱所需的数据。 Exchange自动发现服务的主要目的是建立与Exchange用户邮箱的初始连接。然后,它尝试收集专用交换林的AutoDiscover SMTP地址,并最终将所有提取的数据放入一个名为“text”的变量中。
收集敏感数据后,模块将使用Base64对其进行压缩。这是“实用程序”类中此特定模块的新功能。然后,它通过POST功能和嵌入式URI将敏感数据发送到攻击者的C2。
版本演变过程
插件管理组件的演变
较新版本的Valak在第一阶段会下载两个有效载荷。第一个载荷是Valak的插件管理组件(“pluginhost.exe”),第二个载荷是Valak的第二阶段JavaScript载荷。在早期版本中,Valak不包括“pluginhost”有效载荷。
PowerShell活动的演变
在较旧版本的Valak中,第二阶段JS会像更新版本一样下载其他内容,包括“TASK”/“ODTASK” /“PLUGIN”。在较新版本中,Valak还在第一阶段下载“PluginHost”,并在第二阶段收到任务“PLUGIN”后执行该程序,然后下载ManagedPlugin.dll。在旧版本中,Valak在第二阶段使用任务“PLUGIN”来利用PowerShell并下载“ManagedPlugin.dll”作为Base64二进制文件。
如前所述,Valak的更高版本放弃了流行但易于检测的PowerShell下载器方法,而过渡到“PluginHost”来管理和下载其他有效载荷。这种转变可能表明Valak的开发者正在寻求利用更秘密的方法并改善其逃避技术。
本文翻译自:https://www.cybereason.com/blog/valak-more-than-meets-the-eye如若转载,请注明原文地址: