LazyCat:针对澳大利亚议会的APT攻击事件分析
导语:近日,澳大利亚国会和相关政党的计算机受到网络工具,Cybaze-Yoroi ZLab根据现有样本对该攻击事件进行了技术分析。
近日,澳大利亚主要政党与国会的电脑系统遭到了外国政府的攻击。澳洲总理莫里森当天说,安全机构在调查针对国会议员的网络攻击事件时发现,包括自由党、工党和国家党等几个政党的网络也受到了影响。Cybaze-Yoroi ZLab对该攻击事件进行了技术分析。
技术分析
所有分析的样本看似都属于后利用阶段,即攻击者用来进行数据窃取和之后的行动。这些模块并不属于开源的后利用框架,而是用C#语言在.NET框架上开发的。
LazyCat DLL
第一个分析的恶意软件样本是LazyCat,主要来源于著名的Mimikatz渗透测试工具。
表1: LazyCat样本信息
静态分析表明使用的库是.NET框架编写的,没有使用高度混淆,因此可以逆向其源代码。
图1: LazyCat样本静态分析
图2: 恶意软件的部分代码
代码中有一个函数表明该恶意软件可以监控和收集任意进程内存的竞争信息,完成该功能使用的是DbgHelp库的MiniDumpWriteDump函数。函数的结果保存在一个Output字符串参数命名的文件里,如图3所示。
图3: DumpMemory函数
该恶意软件还可以启动TcpRelay服务,可能是为了创建一个攻击者所在网络与受害者所在网络的路径,为下一步攻击活动做准备。
图4: StartTcpRelay 函数
研究人员进一步分析源代码发现一个名为的RottenPotato模块。其中含有一个Windows环境中后利用阶段相关的函数,包括findNTLMBytes和HandleMessageAuth。研究人员搜索发现了一个位于GitHub的开源工具https://github.com/foxglovesec/RottenPotato。
图5: findNTLMBytes函数
研究人员将GitHub开源工具的代码和恶意软件代码进行了差分分析,发现RottenPoteto中的一些函数不在开源代码中。这表明网络攻击者进一步将开源代码武器化了,使其可以更有效的完成攻击目标。同时,使用开源代码和工具使分析人员很难发现攻击者真正的归属。
LazyCat样本中还有一个名为LogEraser的模块。
图6: LazyCat.LogEraser模块
该模块的主函数是RemoveETWLog,其目的是删除与攻击者的恶意动作习惯的ETW(Event Tracing for Windows,是Windows提供的原生的事件跟踪日志系统)文件。
图7: 删除Windows日志事件的代码
如上图所示,恶意软件可以扫描与Windows日志相关的所有记录,如果记录id与给定id相同,那么就删除该记录。
截止分析时,该恶意样本被AV成功检测的比率相对较低,可能是因为该恶意软件是从开源代码中修改的,VirusTotal分析结果如下图所示:
图8: LazyCat检测率
Powerkatz DLL
表2: powerkatz样本2的关键信息
表3: powerkatz样本3的关键信息
虽然哈希值不同,但恶意DLL的功能是相同的,攻击者简单修改了字符串和变量名,可能是为了绕过AV检测。样本之间的相似度如图9所示。
图9: 样本的差异分析
对main class的反编译源码也确认了相似性,比如图10中的AsyncTask class。因此,研究人员在下图中引用了一个样本。
图10: 样本的AsyncTask class的比较
该样本是由一些类和函数组成的,其中一个是StartNew。该样本可以在受害者机器上开启一个新的异步任务,执行目标任务,也就是_app参数。任务启动后,函数会使用重复的1秒休眠循环来等待完成,然后返回给函数调用一个有效的代码状态。该模块可能和其他函数一起使用来来后台执行一些恶意动作。
图11: StartNew函数源代码
该样本名Powerkatz让研究人员想起了一个GitHub上的开源工具https://github.com/digipenguin/powerkatz,虽然名字是一样的但是代码却是不同的。该样本的检测率为28/70,也很低,如图11所示。
图12: 样本检测率
Recon模块
表4: 扫描器样本的关键信息
与其他样本类似,该样本也是用C#语言编写的。其含有两个主要的类PortScanner和ReconCommonFuncs。
图13: 样本的类
分析第一个样本的代码,其中portScan含有一个可以列出常用网络端口的整数数列,涵盖了大多数本地网络服务,比如HTTP, TELNET, RDP, POP, IMAP, SSH, SQL等
图14: 含有要扫描的端口号的数组
对每个端口,函数都可以执行TCP扫描,并尝试连接。如果端口后有可用的服务,就响应对应的服务标记,并保存到StringBuilder对象中。该恶意软件会将来自所有扫描端口的响应连接在一起,使用ReconCommonFuncs类将最终结果写入一个文件中。
图15: 执行端口扫描的代码
图16: 使用TcpClient C# 类来执行扫描
ReconCommonFuncs类提供了一些工具函数,比如Append和GZipAndBase64,这些工具函数都是自解释的。
图17: 属于ReconCommonFuncs 类的函数
Powershell Agent
表5: 样本关键信息
最后一个样本是OfficeCommu.dll,可能是为了与大多数Windows机器上合法的office通信模块进行混淆。
该样本也是一个工具,可能用于后利用阶段,目的是创建一个PowershellAgent来分析和执行powershell命令。
图18: PowershellAgent主函数
结论
从分析的样本来看,攻击者选择多模块的方法来进行工具。虽然使用的函数和库不含有0day漏洞利用和技术,但这些模块绕过恶意软件检测工具的比率都很高。攻击者使用开源的渗透测试工具可能是检测率低的一个原因。截至目前,还没有关于攻击者所属组织或国家的确切证据。
发表评论