jackgreen译自:Cybereason 全球 SOC 和事件响应团队
原文链接:https://www.cybereason.com/blog/sliver-c2-leveraged-by-many-threat-actors
Cybereason 的 GSOC 和事件响应团队分析了一个 不断发展的名为 Sliver 的C2 框架。该框架由一家名为Bishop Fox网络安全公司创建。C2 框架或命令与控制 (C&C) 基础设施被安全专业人员(红队队员和渗透测试人员)用于在安全评估期间远程控制受感染的机器。出于同样的原因,它们也被威胁行为者利用。
在此之后,我们将详细描述该框架的工作原理、使用步骤、威胁参与者如何利用它以及如何实施检测和预防。
与此 Purple Team 系列中的往常一样,Cybereason GSOC 从不同的角度涵盖了该主题:
-
Sliver C2框架说明
-
红队方面 - 在测试机上安装 Sliver C2
-
蓝队方面 ——分析过去使用 Sliver C2 的 BumbleBee 感染案例
-
紫队方面 ——使用蓝队和红队知识,产生检测和分析能力
本篇为下篇,主要介绍蓝队方面Sliver C2框架使用分析和紫队方面的Sliver C2 的检测和狩猎策略。
在本章中,我们从安全分析师的角度,分析使用 Sliver C2 框架,在攻击模拟过程中收集到的遥测数据。
3.1分析已经产生的攻击
提醒一下,我们的“受害者”组织由三项资产组成:
-
一个工作站,位于工作站网络区域,是攻击者通过鱼叉式钓鱼的入口
-
网络区域中的服务器 托管在DMZ,用于文档和托管 Confluence 服务
-
服务器网络区域中的域控制器。
3.1.1蓝队 - 执行和操作系统发现 (Execution and OS Discovery)
攻击者首先执行名为nasty_roast.exe的 Sliver beacon。 在初始受害者机器(工作组)上。
执行 Sliver C2 植入程序,名称为“NASTY_ROAST.exe”
进一步分析 nasty_roast.exe 进程,我们发现网络连接似乎是 Sliver C2 服务器,在 TCP 端口 8888 上:
与 Sliver C2 的网络连接
然后攻击者从beacon 执行whoami.exe /all :
显示从 nasty_roast.exe 生成 whoami.exe 的 Cybereason 进程树
此命令显示恶意植入用户的执行上下文。
3.1.2蓝队 - 命令执行
攻击者通过“net.exe”命令继续发现:
显示本地管理员组内容以及 Active Directory“域管理员”组的 Net.exe 命令
3.1.3蓝队 - 权限提升
蓝队 - UAC绕过
攻击者需要的第一步是获得 NTSystem 权限。为了获得该特权,攻击者需要 绕过用户帐户控制或“UAC”。
在实验室环境中,攻击者编译 C# 源代码(.cs 扩展名),生成文件 cmstp-uac-bypass.dll :
编辑和编译旨在绕过 UAC 的 DLL
执行利用生成的 DLL 的 PowerShell 脚本 然后,攻击者执行命令:
powershell C:Users[..]Documentsfileuac.ps1
Powershell.exe 从 Sliver C2 植入物中衍生出来,创建一个 cmstp.exe 进程
此方法允许攻击者利用 cmstp.exe绕过计算机上的 UAC。
结果命令是:
"c:windowssystem32cmstp.exe" /au C:windowstempy1zuhb4s.inf
我们可以观察到 DLL 是在 powershell.exe 进程本身中反射加载的:
powershell.exe 的加载模块
作为攻击者执行此 UAC 绕过的结果,我们识别出一个新创建的“nasty_roast.exe ”进程,其中“dllhost.exe”为父进程:
在提升状态下处理“nasty_roast.exe”
可以注意到属性“ Elevated child process privileges ”,这是由进程提升引起的。
攻击者在此步骤之后使用另一个 whoami.exe /all 命令。但是这个过程仍然在用户帐户下运行,而不是 NTSystem 。
下一个合乎逻辑的步骤是攻击者执行“ GetSystem ”Sliver C2 命令以在受害机器上获得系统权限,从而导致注入 spoolsv.exe 进程 :
以“系统”权限注入spoolsv.exe
因此,我们确定了 用户上下文中执行的spoolsv.exe 在 NTSystem 进程的注入链。攻击者在 spoolsv.exe 注入后使用另一个 whoami /all 命令来验证其权限。
注入函数标记为“ CreateRemoteThread ”,表明 Sliver C2 植入程序正在 spoolsv.exe 中创建一个远程线程。
我们稍后观察到使用 Sliver C2 的“Shell ”命令以独特的方式 运行powershell.exe :
使用特定参数执行 powershell.exe,Sliver C2 独有
由于这是 Sliver C2 独有的,因此可用于本文后面的 检测。
3.1.4蓝队 - 凭据访问
现在攻击者获得了完整的用户权限,他将继续在机器上收集用户帐户。
Execute-Assembly
攻击者利用“Execute-Assembly”Silver C2 功能来查询域控制器 LDAP 服务:
从 spoolsv.exe 注入到 notepad.exe,连接到 TCP 端口 389 (LDAP) 上的域控制器
分析表明,默认情况下,Sliver C2 植入程序会创建 notepad.exe 进程,并在使用该功能时将其注入。
LSASS 转储
在此活动之后,攻击者尝试另一种方法从受害计算机窃取用户凭据。攻击者执行了一个内存转储的lsass.exe进程 :
在 lsass.exe 的内存转储之后创建 MalOp 和进程树新项目
然后,攻击者利用 mimikatz.exe 分析主机本身的内存转储:
Mimikatz.exe执行
此时,攻击者拥有主动连接到受害机器的本地用户和域用户的帐户。
3.1.5蓝队 - 内网发现
攻击者利用powershell.exe通过以下命令扫描内部网络:
powershell "5..15 | ForEach-Object {Get-WmiObject Win32_PingStatus -Filter Address=10.0.2.$_" and Timeout=200 and ResolveAddressNames=true and "StatusCode=0 | select ProtocolAddress*}"
攻击者然后使用 Windows 系统二进制文件(net.exe、nltest.exe )获取 Active Directory 信息发现命令:
Active Directory 发现
3.1.5蓝队 - 横向移动
在发现和凭据盗窃活动之后,攻击者现在继续攻击发现的其他资产。
从工作组到 DMZ 服务器
攻击者在机器的系统权限下在服务器上远程创建服务:
(1)攻击者通过微软分布式网络远程过程调用(RPC)技术的RCreateServiceW函数从工作站远程启动服务器上的一个服务:
此 MSRPC 指示创建了从 alon-wks 到 s1-confluence.stagezero.lab 的远程服务
(2)我们观察到对应的 Sliver C2 implant 通过services.exe在 s1-confluence 服务器上的创建了一个新进程的 :
远程创建和启动“pentest2”服务,执行随机生成的进程( wehsbmf4im.exe )
创建的远程服务默认名称为“Sliver”。在这种情况下,攻击者故意将其更改为“ pentest2 ”。
蓝队 - 通过 PsExec 进行横向移动
此操作是使用 Sliver C2 的“ PsExec ”远程命令产生的,它创建了一个具有随机生成名称的implant可执行文件。路径为 c:windowstempwehsbmf4im.exe )。
与工作组上的其他implant一样,该implant也在 TCP 端口 8888 上与 Sliver C2 服务器基础设施进行通信。
在横向移动之后,攻击者再次通过 whoami /all 命令检查他的用户权限。在此操作之后,对 notepad.exe 的另一次注入与使用 Sliver C2“ Execute-Assembly ”函数有关。他还执行命令“ nltest /dclist ”来识别域控制器的名称,这可能是他的下一个目标。创建并注入的 notepad.exe 进程包含一个名为 Rubeus的模块:
notepad.exe的加载进程,再次展示了Execute-Assembly的使用
Rubeus 是一个用于原始 Kerberos 交互和滥用的 C# 程序。在这种情况下,它用于与域控制器交互。除了使用 Rubeus 之外,攻击者还直接从植入的进程中进行了lsass.exe内存转储。
可疑进程wehsbmf4im.exe(远程部署在服务器上的Sliver C2植入),显示lsass.exe的内存转储
Rubeus 的使用表明潜在的 Kerberos 票证操纵,以便通过 票证传递攻击重新使用被盗帐户。在攻击进行时建立会话的事实表明攻击者获得了域管理权限:
使用域管理员帐户建立的登录会话
从 DMZ 服务器到域控制器
为了控制域控制器 (dc-1),攻击者通过再次使用 PsExec 方法将其作为目标:
显示在域控制器上创建另一个远程服务的文件事件
此时,攻击者控制了环境的域控制器。在域控制器上,攻击者执行与之前在服务器和工作站上类似的操作:
-
对notepad.exe 指示使用 Execute-Assembly 方法使用 Silver C2 armory 模块进行注入
-
通过 Execute-Assembly 功能使用 Rubeus
-
通过 Sliver C2 的 Shell 特性 启动 mimikatz.exe
-
创建和操作 Kerberos 票证
-
用于凭据盗窃的 LSASS 内存转储
指示 Kerberos 票证文件操作的文件事件
攻击者最终利用 Mimikatz 的“ DCSync ”功能来模拟域控制器以窃取凭证数据库:
此 MSRPC 显示了域控制器复制的使用,可被滥用于窃取 AD 凭据
3.1.6收集(Collection)
当攻击者准备数据窃取时,我们检测到新的活动,包括在进程 necessary_eviction.exe (Sliver C2 生成的随机名称)下产生另一个 Sliver C2 植入程序。
首先,攻击者执行新落地的植入物,如下面的文件事件所示:
指示新可执行文件落地的文件事件(Sliver C2 植入)
然后,攻击者执行文件:
在域控制器上执行的新植入
这一次,攻击者将植入程序配置为通过 UDP 端口 999(非默认端口,默认端口为 51820)到达 Sliver C2 服务器基础设施:
UDP 连接到 Sliver C2 服务器
在此阶段,任何熟悉 Sliver C2 框架的分析师都会推测,该框架唯一使用 UDP 的网络协议的 WireGuard 协议符合此行为。在 Sliver C2 项目 wiki 上,一个页面阐明了端口转发的使用,并指出应该使用 Wireguard 来更好地远程访问内部网络:
https://github.com/BishopFox/sliver/wiki/Port-Forwarding
创建 WireGuard 植入程序后,攻击者启动与 DMZ 服务器 (s1-confluence) 的 RDP 服务的连接,如连接屏幕所示:
显示 DMZ 服务器的 3389 端口 (RDP) 上的 TCP 连接的连接屏幕
此连接是通过使用 Sliver C2 的 WireGuard 端口转发功能创建的。有趣的是,我们还发现了初始植入程序 fnhoczptph.exe 显示了针对 s1-confluence DMZ 服务器的 Confluence 端口的代理活动:
这表明攻击者正在从内部 Confluence 服务器窃取数据
在本节中,我们列出了用于检测 Sliver C2 Framework 的使用的工具和技术。
4.1 寻找 Sliver 基础设施
我们可以通过连接到可能属于 Sliver C2 基础设施的外部服务器来识别可疑进程。在本节中,我们将列出迄今为止发现的所有方法。
4.1.1 TLS 证书和 JARM 哈希
JARM是一种主动传输层安全 (TLS) 服务器指纹识别工具。正如该指纹识别工具的发起者Salesforce所述 ,使用 JARM 扫描提供了识别和分组互联网上恶意服务器的能力。
与 Cobalt Strike类似,我们发现 Sliver C2 默认情况下会生成 Sliver 的典型 TLS 配置,正如 微软威胁团队的文章所述。
当尝试对我们的 C2 服务器的 TLS 服务(配置有 mTLS beacon通信)进行指纹识别时,我们确实识别了这个哈希值:
针对 Sliver C2 启动的 Salesforce JARM 工具
这意味着如果机器上的进程存在可疑连接,则可以通过其 JARM 哈希识别它是 Sliver C2 服务器。
以下值可用于确定它是否是 Sliver C2 基础设施:
-
HTTPS 3fd21b20d00000021c43d21b21b43d41226dd5dfc615dd4a96265559485910
-
MTLS 00000000000000000043d43d00043de2a97eabb398317329f027c66e4c1b01
但是必须要小心,因为这个 JARM 哈希可以与其他非 Sliver C2 服务器共享。此检查必须特定于何时怀疑 C2,而不是相反(在 TLS 服务器的大型数据集中寻找 Sliver C2)。
检测逻辑 进程与 SSL/TLS 服务建立网络连接,该服务的 JARM 散列为 3fd21b20d00000021c43d21b21b43d41226dd5dfc615dd4a96265559485910 或00000000000000000043d43d00043de2a97eabb39 8317329f027c66e4c1b01 |
4.1.2 Web 服务器标头 (HTTP)
该检测逻辑仅在beacon配置模式为 HTTPS 且没有启用mTLS时有效 .在 Sliver C2 服务器上设置好 HTTPS 监听器后,我们通过 openssl 命令进行访问:
连接 Sliver C2 HTTPS 侦听器的 openssl 工具
我们可以观察到的证据链是特殊的,可以帮助识别Sliver C2(美国城市与“CN = localhost”)。
在请求“/”网络路径时,我们收到熟悉的“404 Not Found”消息,没有明确的指示。
响应对Sliver C2服务器web根路径的请求
发出“错误”请求后,我们会收到此 400 错误消息:
响应格式错误的请求
这可以作为服务器是 Sliver C2 的确认。它应该与 JARM 检测结合使用。
检测逻辑 JARM 检测逻辑和进程连接到 TLS 服务,该服务回答“HTTP/1.1 400 Bad Request Content-Type: text/plain; charset=utf-8 Connection: close“ for malformed requests格式错误的请求 |
Wireguard 服务器监听器
默认情况下,Wireguard VPN 服务器和 Sliver C2 wireguard 侦听器使用 UDP 端口 51820。这可能导致误报,需要与其他发现相关联。
检测逻辑 侦听在 UDP 端口 51820 上的公共 IP 地址 |
4.2 狩猎 Sliver C2 植入(implant)
使用 Sliver C2 会产生许多独特的行为,可以用作检测触发器。在下图中,我们列出了通过这项研究确定的所有检测技术。
在下一章中,我们用一个子章来介绍每种检测技术。任何人都可以在自己喜欢的安全检测工具中使用和实施这些检测方法,以发现特定环境中 Sliver C2 的使用。
4.2.1Shell 功能 - 特定 Powershell 命令行的检测
如前面章节所述,当使用 Sliver C2 的“shell”命令针对特定植入物执行命令时,Sliver C2用一种非常独特的方式来生成powershell.exe进程。要检测 Sliver C2 的“Shell”功能的使用,可以使用包含“-NoExit -Command [Console]::OutputEncoding=[Text.UTF8Encoding ]::UTF8 ”。
以下检测逻辑总结了这条规则:
检测逻辑 进程名称为powershell.exe 命令行包含:“-NoExit -Command [Console]::OutputEncoding=[Text.UTF8Encoding]::UTF8” |
Sliver Execute-Assembly 或 Migrate 功能
Sliver C2 migrate 命令默认将植入二进制文件注入新创建的notepad.exe 进程,并创建一个远程线程来运行恶意代码。
检测与CreateRemoteThread相关的事件 ID 8。
notepad.exe 中的远程线程创建日志,如 Sysmon 事件日志所示
检测逻辑 Windows API 的调用 检测对CreateRemoteThread以在另一个名为 notepad.exe 的进程中运行代码 |
4.2.2Sliver 获取系统权限检测
Sliver C2 getsystem 当从管理面板执行 命令时,我们发现托管当前植入程序的进程将系统地将自身注入到spoolsv.exe 进程中。因此,可以检测从任何进程托管注入线程 (CreateRemoteThread) 到spoolsv.exe 的 。
检测逻辑 Windows API 的调用 检测对CreateRemoteThread以在另一个名为 spoolsv.exe 的进程中运行代码 |
4.2.3PsExec 特征检测
Sliver C2 内置 PsExec 命令,用于横向移动,在远程机器上创建一个默认名称为“Sliver”的服务。
名为“Sliver”的服务创建
检测逻辑 进程创建包含名称“Sliver”的远程 Windows 服务 |
4.2.4C:WindowsTemp 中的 Sliver C2 有效载荷
Sliver 无需任何自定义,即可在 C:WindowsTemp 目录中远程交付其有效负载。虽然它可能会导致误报,但使用存储在该文件夹中的任何图像文件搜索可疑/注入的进程可以识别 Sliver C2 的使用。
检测逻辑 进程在 C:WindowsTemp 目录中创建可执行文件或脚本 从驻留在 C:WindowsTemp 目录中的图像文件创建的进程 |
4.2.5特定端口通信
如果没有另外指示,Sliver C2 服务器会在默认端口上侦听:
-
mTLS 服务的 TCP 端口 8888
-
Wireguard 服务的 UDP 端口 51820
-
HTTPS 服务的 TCP 端口 443
端口 443 上的通信过于常见,无法成为检测因素。但是,端口 TCP/8888 和 UDP/51820 上的通信可能是检测机会。
我们还可以添加另一个标准,即启动连接的进程是可疑的(随机的、未签名的可执行文件)或进程注入的结果(请参阅 GetSystem 或 Migrate 功能)。
TCP 端口 8888 上的通信
mTLS 连接默认在 TCP 端口 8888 上。如上所述,这可用于创建检测逻辑:
检测逻辑 进程在 TCP 端口 8888 上与 TCP 服务建立 TLS 加密网络连接 |
UDP 端口 51820 上的通信
Wireguard VPN 默认端口为 UDP 51820,此信息可用于检测 Sliver C2 植入通信。
检测逻辑 进程在 UDP 端口 51820 上与 UDP 服务建立网络连接 |
4.3推荐建议
为了有效检测 Sliver C2 攻击,建议如下:
-
谨慎处理来自外部来源(电子邮件、Web 浏览)的文件。
-
尝试进行威胁狩猎:进行用于检测sliver自定义威胁狩猎。
以下师傅的问题对学习和了解sliver使用提供了重要帮助,特此鸣谢:
https://forum.butian.net/share/2274
https://forum.butian.net/share/2275
https://forum.butian.net/share/2243
原文始发于微信公众号(Desync InfoSec):Sliver C2的行为分析和检测狩猎策略(下篇)
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论