1. 简介
Lazarus(T-APT-15)组织是来自朝鲜的APT组织,该组织长期对韩国、美国进行渗透攻击,此外还对全球的金融机构进行攻击,堪称全球金融机构的最大威胁。
在这次活动中,Lazarus进行了鱼叉式网络钓鱼攻击,这次攻击将诱饵文件伪装成航天航空巨头洛克希德马丁公司的招聘工作主题文档,巧妙的使用Windows更新程序来执行恶意程序和将github作为C&C服务器。
2. 样本信息
招聘工作主题诱饵文档
文件名 | Md5 |
---|---|
Lockheed_Martin_JobOpportunities.doc | 3f326da2affb0f7f2a4c5c95ffc660cc |
shellcode解密的PE文件
文件名 | Md5 |
---|---|
stage1_winword.dll | e48f4983962d4ca5974ec04be38eecd1 |
stage1_winword.dll注入到进程explorer.exe的dll文件
文件名 | Md5 |
---|---|
Stage2_explorer.dll | 0e12a4f94326fcfc866b991f6a03452c |
嵌入在stage2_explorer.dll的两个文件。
文件名 | Md5 |
---|---|
drop_link.dll | 4e72dccee9f33f41a29485442ea57fd7 |
文件名 | Md5 |
Stage3_runtimeBroker.dll | e997f9210791529fbc86db6c26d29fd1 |
由stage3_runtimeBroker.dll释放的文件
文件名 | Md5 |
---|---|
Wuaueng.dll | f2e548ad8f31a8bc656c1ec4c49d5928 |
由wuaueng.dll注入到进程explorer.exe的dll文件。
文件名 | Md5 |
---|---|
core_module.dll | ea5012291b7f0d62be0552eacbd4792d |
Core_module.dll从github获取的恶意模块
文件名 | Md5 |
---|---|
Get_basic_info.dll | e2a17841099800fb734c44ea4be47ebb |
3. 流程图
4. 样本分析
4.1 Lockheed_Martin_JobOpportunities文档分析
文档打开时显示如下图,并提示该文档需要启用宏文档才能查看文件内容,一旦启用则宏代码被执行。在宏代码中通过替换kernelCallbackTable中的__fnDWORD函数指针来达到劫持控制流程达到执行恶意代码的目的。
对一些常用的window API声明别名,将其设置为WMVCORE.dll中导出的函数名,用于诱导分析人员将其误分析为正常代码。
所有声明的函数别名如下:
函数名 | 函数别名 |
---|---|
CryptStringToBinaryW | WMCreateBackupRestorer |
LoadPlaybackHD | LoadLibraryA |
GetProcAddress | WMvdspt |
VirtualProtect | WMVSDecd |
NtQueryInformationProcess | WmScrEncd |
memcpy | WMVdspa |
加载WMVCORE.dll文件,并且定义了三个常量,因为包含对x86或者x64两个版本的shellcode,对应的某些结构或者偏移都不一样,需要分别定义。
其中WMPlaybackRadd为指针长度,wmorder2为KenerCalbackTable在结构体PEB的偏移。Wmorder为函数指针__fnDWORD在kernelCallbackTable中的偏移。
从下图可以看出从xp到win10的x86和x64系统,kernelCallBackTable在结构体PEB中的偏移分别为0x2C和0x58
创建变量WMCreateFileSink,当shellcode已经被注入内存时,将值设为WMBackupSignal。在执行Frame_Layout1函数时,使用WMIsAvailableOffline函数判断shellcode是否已经被注入到内存中,避免重复执行shellcode注入操作。
通过别名为WmScrEncd的函数获取peb地址,从peb地址中获取kernelcallbackTable地址中的函数指针__fnDWORD。将__fnDWORD替换为WMIsAvailableOffline地址来劫持控制流程,该函数代码实际上已经被shellcode覆盖,原来的__fnDWOD地址被保存到该函数地址。
WMCheckURLScheme1、WMCheckURLScheme2和WMCheckURLScheme3分别为shellcode的三部分,解密后拼接在一起组成完整的shellcode。WMCreateBackupRestorer对应的函数为CryptStringToBinaryW,第三个参数为解密方法,在这里第三个参数WM_CERTSYNCREAD的值为1,对应的解密方法为base64。
虽然函数WmScrEncd参数使用的结构体与NtQueryInformationProcess的参数使用的结构体名字不一样,但从在内存中的布局来看却是一样的,因此字段WmScrData2对应着peb结构的地址。
4.2 stage1_word_exe分析
此阶段为文档宏注入的shellcode,当某种操作触发回调函数__fnDWORD时执行WMIsAvailableOffline地址处的shellcode代码,该shellcode主要功能为解密dll文件。
在shellcode通过自定义的hash来获取dll基址和函数地址。
Hash值的计算方法如下图:
find_api_addr_by_hash第一个参数为dll名hash,第二个参数为api名hash,通过peb结构体的相关字段遍历已经加载的dll然后计算dll名的hash并与第一个参数比较。
dll名hash相同则遍历该dll所有导出的api并计算hash与第二个参数进行比较,如果hash相同则返回对应api的地址。
4.3 进程注入
攻击链上的shellcode或者dll均使用相同方式将dll或代码注入到目标进程。将内存加载需要的API和dll文件以及内存加载代码写入远程进程,在远程进程中执行内存加载代码加载dll。
4.4 stage1_winword.dll分析
该dll主要功能为恢复被修改的kernelCallbackTable,并将stage2_explorer.dll注入到进程explorer.exe中。
4.4 stage2_explorer.dll分析
winword进程注入该文件到explorer.exe进程。经过分析发现在数据段包含两个额外dll文件,根据dll文件实现的功能分别将其命名为drop_link.dll和stage3_runtimebroker.dll。
首先判断文件”C:\Wíndows\system32\wuaueng.dll”是否存在,存在则表示stage2_explorer.dll已经被执行过,后续操作不需要再次执行。在当前进程将drop_link.dll加载到内存并执行,以挂起的方式创建RuntimeBroker.exe进程。
如果创建成功则将stage3_runtimebroker.dll注入到RuntimeBroker.exe进程,如果因为某种原因创建进程失败,则将stage3_runtimebroker.dll加载到内存并执行。
创建runtimeBroker进程时使用的进程命令行参数。
4.5 drop_link.dll分析
使用com接口在%startup% 目录下创建快捷方式WindowsUpdateConf.lnk。
在快捷方式中,通过windows更新程序wuauclt.exe来加载恶意文件wuaueng.dll来执行恶意代码。
4.6 stage3_runtimebroker.dll分析
该文件主要功能为创建隐藏目录”C:\Wíndows\System32”和创建恶意文件wuaueng.dll。
将嵌入在数据段的PE文件写入wuaueng.dll。
4.7 wuaueng.dll分析
文件的详细信息伪装成系统文件wuaueng.dll。
当该恶意文件是由进程explorer.exe启动时,加载core_module.dll到内存并执行;当由进程wuauclt.exe启动时,注入到core_module.dll并执行。
4.8 core_module.dll分析
我们很少见到由恶意程序使用github作为C&C服务器,这是第一次观察到Lazarus组织利用它,使用github时安全产品很难区分合法和恶意链接。如下所示,core_module.dll从github用户名为DanielManwarningRep的仓库ERPLocalSys的images目录中下载文件并加载到内存然后执行。
下载模块并不是标准的PE模块,而是伪装成图片,PE文件嵌入在图片中。
文件头如下图所示。
PE文件在偏移0x181C5处。
该文件主要功能为获取当前用户名和运行的进程。
获取当前运行的进程时,排除”tasklist.exe”、”svchost.exe”和”runtimeBroker.exe”进程,所有收集到的进程名用”;”隔开。
由于github账户已经被封禁,因此无法找到更多的模块,无法继续深入分析。
5. 安全检测
6. IOC
3f326da2affb0f7f2a4c5c95ffc660cc
e48f4983962d4ca5974ec04be38eecd1
0e12a4f94326fcfc866b991f6a03452c
e997f9210791529fbc86db6c26d29fd1
4e72dccee9f33f41a29485442ea57fd7
f2e548ad8f31a8bc656c1ec4c49d5928
ea5012291b7f0d62be0552eacbd4792d
e2a17841099800fb734c44ea4be47ebb
DanielManwarningRep
ERPLocalSys
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
C:\\Wíndows\\system32\\wuaueng.dll
WindowsUpdateConf.lnk
UpdateDeploymentProvider C:\Wíndows\system32\wuaueng.dll /RunHandlerComServer
7. ATT&CK矩阵
Tactic | ID | Name | Description |
---|---|---|---|
Command and Control | T1102 | Web Service | 利用github作为C&C服务器 |
T1105 | Ingress Tool Transfer | 从C&C下载模块 | |
Defense Evasion | T1055 | Process Injection | 注入dll到系统进程explorer |
T1027 | Obfuscated Files or Information | 从C&C下载的文件伪装成图片格式 | |
Persistence | T1547 | Boot or Logon Autostart Execution | 在启动项创建快捷方式。 |
8. 参考
us-19-Kotler-Process-Injection-Techniques-Gotta-Catch-Them-All-wp.pdf
最后更新: 2024年04月07日 11:44:29
本文链接: http://shxi.cc/post/7c2abb96.html
版权声明: 本作品采用 CC BY-NC-SA 4.0 许可协议进行许可,转载请注明出处!