一、概述
近期,绿盟科技伏影实验室在日常威胁狩猎过程中发现了一种依托钓鱼文档的新型攻击流程,并通过深入研究确认了两种新型木马程序以及多种少见的攻击技战术。
伏影实验室认为该新型攻击流程来自一个新型攻击者,该攻击者具备较高技术水平与谨慎的攻击态度,而本次捕获到的钓鱼攻击活动是该攻击者对特定目标进行定向打击的一部分,是其实现域内渗透的主要手段。
伏影实验室将该攻击者命名为AtlasCross,并将新型木马程序分别命名为DangerAds与AtlasAgent。
本报告将详细介绍该新型攻击者使用的攻击流程、攻击技术以及攻击工具。
二、攻击者定性
伏影实验室对本次攻击过程进行深入研究后发现,该攻击者在执行流程、攻击技术栈、攻击工具、实现细节以及攻击目标、行为倾向等主要归因指标方面都与已知的黑客组织特征有较大的差异,而该攻击者在这个活动过程中展现的技术水平与谨慎态度也非常值得重视。
因此,伏影实验室将该事件的主导者判定为一个新型攻击者,并将其命名为AtlasCross。
伏影实验室通过深入分析AtlasCross的各项攻击指标,确认了其在开发技术方面和攻击策略方面的高级威胁属性。AtlasCross在当前阶段的活动范围较小,攻击方式以针对特定网络域中主机的定向攻击为主,但使用的攻击流程非常健壮成熟。伏影实验室推断该攻击者很有可能会将该攻击流程投入更大规模的网络攻击活动中。
目前尚无法确定AtlasCross攻击者的组织来源。
三、诱饵信息
本次活动中,AtlasCross设计了以美国红十字会献血信息为主题的诱饵文档,文档名为“Blood Drive September 2023.docm”。
该诱饵文档打开后,默认情况下显示如下所示的提示信息,要求受害者启用word的编辑功能:
诱饵文档显示的提示内容
如果受害者遵从指示启用了宏功能,诱饵文档将显示隐藏的内容。隐藏的内容为美国红十字会的献血宣传文档,如下所示。
诱饵文档显示的欺骗内容
结合攻击者在后续攻击阶段中的设计(详见攻击流程章节),可以推断本次活动是针对某红十字会相关人士的定向网络攻击。
四、攻击流程
本次攻击活动的流程可分为三个部分,诱饵文档阶段、加载器阶段以及木马阶段。整体攻击流程如下图所示。
本次活动主要攻击流程
- 诱饵文档阶段
该攻击流程的第一阶段由诱饵文档中包含的恶意宏代码执行。该恶意宏的主要功能包括释放载荷、设置计划任务、上传受害主机基本信息三部分。
恶意宏文档将会提取文档内名为”Hyperlink Base”的属性的值,将其释放至%APPDATA%MicrosoftWord路径下随机数字名称的文件夹内,保存为名为”KB4495667.zip”的文件。随后恶意文档使用items方法提取zip文件中的内容至同目录下,该zip内包含名为”KB4495667.pkg”的文件。
恶意宏文档代码中zip内置文件的提取方式
随后,宏代码设置一个名为”Microsoft Office Updates”的计划任务,该计划任务将在设置后3天内每天执行一次。
该计划任务会调用windows .net组件InstallUtil.exe,使用/?参数调用上述”KB4495667.pkg”文件的help方法,实现过保护与隐蔽执行恶意程序。
恶意宏文档设置的计划任务
随后,恶意宏文档还会向特定网络位置http://data.vectorse.com/target发起通信,发送一个由本机信息构成的ID,推测该行为是攻击者用于统计受害者情况的操作。
恶意宏文档发送的通信流量
跟踪发现,该网址data.vectorse.com是属于美国工程公司Vector Structural Engineering的子域名,很可能已被AtlasCross攻击者控制。
- 加载器阶段
上述恶意宏代码释放的名为KB4495667.pkg的程序,是该攻击流程第二部分的主要恶意程序。为方便后续跟踪,伏影实验室根据其携带的字符串信息,将该恶意程序命名为DangerAds。
该程序是一种加载器木马,主要功能为检测宿主机环境并在本自身进程中执行一段内置的shellcode,shellcode则用于加载第三阶段的最终载荷。
值得注意的是,该木马仅在检测到受害主机的用户名或本地域名包含特定字符串时才会执行恶意代码,这样的设计说明攻击者是在成功入侵目标网络后,使用该攻击流程进行域内渗透。
对DangerAds木马的分析详见木马分析章节。
- 最终载荷阶段
上述加载器木马最终会在内存中加载一个x86或x64版本的DLL程序,这是该攻击流程的最终载荷。伏影实验室根据该程序的PDB信息,将其命名为AtlasAgent。
AtlasAgent的主要功能为获取主机信息,执行shellcode,下载执行等。
对AtlasAgent木马的分析详见木马分析章节。
五、技战术分析
伏影实验室分析发现,AtlasCross攻击者在整个活动过程中使用了大量攻击策略,这些策略主要集中于防御规避层面,也涉及资源开发、持久化等阶段,反映了该攻击者具有的明显的对抗意识。
- 资源开发
5.1.1 获取基础设施
分析表明,AtlasCross攻击者在设计本次活动的攻击流程之前,就已经通过漏洞利用的方式控制了大量公网主机,并将其改造为本次活动中使用的统计服务器或CnC服务器。
AtlasCross使用的失陷主机具有明显共性,包括使用7.4版本OpenSSH和1.20.1版本nginx,并且都配置了包含插件包的WordPress建站服务,这样的配置会受到多个漏洞的影响,该攻击者很可能是通过此类脆弱性批量接管了这些主机。
本次活动中,AtlasCross共投入了12个不同的失陷服务器,这些服务器全部来自美国,归属于亚马逊云主机。
AtlasCross攻击者的这种积累网络资源的方式,有效地降低了自身在攻击活动中的暴露几率,并且由于此类失陷主机多数不存在恶意行为记录,容易绕过各类基于黑名单的防御方案,有较高的有效性和可靠性。
- 持久化
5.2.1计划任务
AtlasCross攻击者在本次攻击流程中,使用计划任务的方式完成持久化。值得注意的是该攻击者在配置持久化时的策略。
首先,该计划任务使用windows组件InstallUril.exe加载恶意DLL程序,能够起到良好的绕过EDR软件的效果;其次,该计划任务使用/?参数调用恶意DLL程序的help方法,这样的设计避免了恶意DLL程序的主要导出函数被暴露,也能阻止某些动态检测产品使用枚举导出函数的方式强行启动DLL程序的恶意代码,减少了恶意程序的暴露几率。
- 防御规避
5.3.1 进程注入
AtlasCross攻击者制作的AtlasAgent程序支持多种注入方法。AtlasAgent实现了基于内核层函数的注入方法,能够将shellcode注入其他进程的已有线程或新线程中。
AtlasAgent的注入代码没有调用任何用户层的API函数,而是直接使用了NtAllocateVirtualMemory、NtWriteVirtualMemory和NtCreateThreadEx等kernel API。这样就可以绕过AV/EDR对VirtualAllocEx、WriteProcessMemory和CreateRemoteThread等用户层API函数的钩子,从而提高免杀效果。
AtlasAgent程序可以根据攻击者选定的进程,将shellcode注入选定进程本身的线程中或进程新创建的线程中。注入进程本身的线程中这种注入方式不会增加额外的线程,隐蔽性更好不易被安全工具所发现。
5.3.2 反射式加载
AtlasCross攻击者在制作DangerAds加载器木马时,使用了开源方案sRDI(https://github.com/monoxgas/sRDI/blob/master/shellcodeRDI/shellcodeRDI.c)构建shellcode部分。这套方案完成了反射式加载DLL程序的操作,实现不落地执行DLL程序中的恶意代码,减少了由额外文件操作及进程操作导致暴露的几率。
DangerAds中的sRDI代码
5.3.3 API混淆
AtlasCross攻击者制作的AtlasAgent程序通过两种加密方式对敏感API进行加密。增大样本分析的难度,同时减少了沙箱杀软等安全工具对其的检出率。
其中方法一使用了LoadLibrary函数加载对应DLL并根据Hash(此处使用Hash算法和方法二中的不同)后的函数名进行对比找到函数名称从而获取函数地址的方法,可以有效的防止杀软或沙箱的静态检测,同时增加了分析人员发现关键函数的难度。
方法二则通过异或后的DLL名称确定要加载的DLL。通过PEB找到解析DLL文件导出表信息,并将导出的Zw系列API加上偏移算出Nt系列API的地址。该方案在导出过程中未使用API,执行函数时也不直接调用内核函数位置,对AV/EDR有较强的规避效果。由于作者修改了该Hash算法的种子数值,因此生成的函数名称Hash无法从网络中搜索到对应的值,进一步提高了分析的难度。
5.3.4 反虚拟化与反沙箱
AtlasCross攻击者使用的DangerAds加载者木马,仅在检测到正确用户名或本地域名时才会启动,这种逻辑能有效避免自身在虚拟化环境中运行。
- 命令控制
5.4.1 后备通道
AtlasCross攻击者制作的AtlasAgent程序具有备用CnC机制,能够遍历一个CnC列表获得能够正确通信的CnC地址。特别的是,该AtlasAgent木马的备用CnC地址数量高达11个,并且这些CnC地址皆为AtlasCross攻击者通过网络攻击入侵并劫持的高价值公网站点。
在以往的分析中,很少有攻击者会在一个木马程序中投入如此大规模的网络资源,AtlasAgent木马的这一特征说明该攻击者对木马的CnC正常运作有很高的要求,进一步证实了本次活动的定向打击与高级威胁性质。
六、木马分析
- DangerAds
该木马是AtlasCross攻击者在本次活动中使用的一种加载者木马,主要功能为检测宿主机环境并在自身进程中执行一段内置的shellcode,并由该shellcode加载运行后续的木马程序。
DangerAds会将主要恶意代码写入.NET dll程序的HelpText方法中,因此可以当外部程序调用该dll程序的帮助时,恶意代码才会启动。
需要注意的是,DangerAds的主要恶意功能执行之前会先收集主机的用户名与本地域名,当这两个名称之一包含”danger”或”ads-wcf”的关键词时才会执行后续代码,因此可以判断本次攻击是针对名称包含”ads-wcf”的域或用户名的定向攻击。
DangerAds的主体恶意代码会判断程序版本位数,选择性解密执行一段x86或x64的shellcode。DangerAds使用的解密方式为多字节异或,而shellcode的加载方式为本进程内直接加载运行。
DangerAds的shellcode执行逻辑
shellcode阶段,DangerAds使用了一套开源方案sRDI(https://github.com/monoxgas/sRDI/blob/master/shellcodeRDI/shellcodeRDI.c)实现加载执行DLL程序,该shellcode最终加载的是其尾部附加的DLL程序,并调用导出函数EnumWinEvent。
该shellcode加载的DLL程序即为AtlasCross攻击者开发的AtlasAgent木马。
- AtlasAgent
AtlasAgent是AtlasCross攻击者在本次活动中使用的自研木马程序。该木马的主要功能为获取主机信息,获取进程信息,防多开,注入指定shellcode以及从CnC下载文件等。该木马通过HTTP协议与CnC进行通信,使用RC4加密后Base64编码加密通信数据,同时使用两种加密方式对关键API进行加密。
6.2.1 基础功能分析
6.2.1.1 执行流程
AtlasAgent木马程序是用C++编写的DLL程序。木马加载后会检测是否有名称为EnumSvc的互斥体防止多开程序。
创建互斥体防多开
随后AtlasAgent会解密CnC域名并连接到CnC,并将获取到的计算系统信息加密后作为上线包发送到控制端。
最后AtlasAgent会等待服务端发送指令并执行指令对应的功能。
6.2.1.2 主要功能
获取系统信息
木马会获取系统及计算机的信息,包括计算机Guid编号、获取本机计算机名、本地计算机的适配器信息、本机IP地址、本机网卡信息、操作系统位数、当前运行的操作系统的版本信息、获取进程ID,并会将数据用“|”符号分割并作为上线包将信息加密后发送到服务端。
部分获取系统信息的代码
shellcode运行
该程序接收控制端指令,通过指令中给出的数据执行shellcode运行操作,该木马支持以下shellcode注入或运行模式:
1. 将shellcode注入到指定进程中新创建的线程中运行;
2. 将shellcode注入到指定进程中的已有线程中运行;
3. 将shellcode在木马本身的主线程中执行;
4. 将shellcode在木马本身的进程中的新线程执行;
该木马注入指定进程中的线程的流程为,使用进程ID遍历到该进程中的线程,通过NtOpenThread函数获取线程句柄,再通过NtAllocateVirtualMemory函数为要注入的代码在目标进程中分配一块虚拟内存空间,向内存中写入注入代码后并修改内存页属性后,最后调用NtResumeThread函数,恢复目标进程的线程。
使用内核层函数将shellcode注入指定进程
这种方法不创建新的线程,不容易被系统安全策略发现。
指定进程注入shellcode
该木马在注入过程中如果遇到错误,会根据错误发生位置,返回给CnC不同的错误代码,可以推断木马在积极调整完善注入部分的功能。
6.2.1.3 API加密
除了使用GetProcAddress动态加载windows API地址,此木马还使用了两种基于Hash的API动态获取方式,以增大沙箱和分析人员分析的难度。
方法一
木马使用LoadLibrary加载指定DLL,再通过对比Hash找到函数名称对应的函数地址:
匹配Hash值加载DLL获取函数地址
方法二
木马首先从PEB中遍历找到ntdll.dll,并解析函数名称,rva与函数地址。
随后木马循环解析ntdll.dll中的前500个导出函数,将解析出的函数名称(Hash),RVA,函数地址等信息存入结构体数组中。
最后,木马通过查询结构体数组的特定Hash值,获取对应API的地址与RVA,进而调用该API。
AtlasCross攻击者在设计该API加密模式时,参考了已有的代码实现,但攻击者调整了该木马中的Hash生成函数,从而生成了一套全新的Hash值,降低了被检测的风险。
方法二中的函数地址解析函数
6.2.1.4 关键字符串加密方法
木马中的敏感字符串被作者加密后存储在程序代码段中。当程序执行字符串位置时使用加密函数解密字符串,加解密逻辑为单字节异或。
解密字符串函数
6.2.2 网络分析
程序运行后会先通过木马程序中的解密函数,解密写在代码段中的加密数据。
该数据解密后为CnC域名列表,木马会顺序获取CnC列表中的域名并尝试连接,直到成功通信为止。
解密CnC列表
随后木马获取计算机系统信息,并将获取到的信息通过RC4加密后进行Base64编码。
改木马在Base64转码过程中替换了部分字符,将“+”转义为“~”,将“/”转义为“_”。
随后木马构建上线信息,并将信息发送至CnC。
上传上线包
上线包发送数据示例如下:
orderinfo=gr~pCy7a8DFMfx~gLCF7dOie07F85lvKTXxrzxXFF~IB_uK_h0zEN7IeQEo2FnT4ZQMxuwhwZAD3O9ae29uiGvZhI9CevVg_F~BcP4P4~_6n~tsgFbAdnuSXpTAuPTXYEKfFG2ypvfVWCeXSKTi_uQgwji62BYtrTeFI1OHFmWJq6wuAT7B
上线包原始数据示例如下:
aQ0TGubLVS c29aceaa-xxxx-xxx2-8b67-6e6aa4497df7(GUID)|WIN-ULABCDE9CJ|Intel(R) PRO/1000 MT Network Connection:192.168.80.150;|x86|6.10(系统版本)|1(提权成功与否)|1.26(猜测为该木马的版本号)|1|3980(进程Id)
1.26为硬编码在程序中的字符串,猜测为该木马版本信息。
最后,木马接收CnC返回的数据,解密并执行命令指定的功能。
接收CnC消息
6.2.3 CMD指令功能
AtlasAgent木马支持如下所示的CMD指令,该木马支持的恶意功能包括文件操作、进程操作、shellcode注入以及反向shell等。
- CMD功能表
七、总结
伏影实验室本次发现的新型攻击者AtlasCross,是一个非常小心谨慎,具有较强的流程和工具开发能力的黑客组织。
该攻击者一方面能够积极吸收各类黑客技术,融合至自身技术栈和工具开发过程中;另一方面在环境探测、执行策略、网络设施选择等方面都选择了最保守的路线,不惜牺牲效率也要降低自身暴露的风险。此外,AtlasCross自研木马中残留的debug代码也能证明该攻击者仍在完善攻击流程。
这些特征反映了该攻击者的高级威胁性质,该攻击者可能在本次攻击之后,继续组织其他针对重点目标的网络攻击活动。
伏影实验室将持续跟踪该攻击者的后续攻击活动。
八、IoC
转载来源:https://mp.weixin.qq.com/s/T_syldYfZHItkhEYSHZJYg
图片来源网络侵权可联系删除