使用Digital Ocean构建C2基础设施 - 第一部分
注意: 本博客中提到的技术和工具可能已过时,不适用于当前情况。然而,这篇博客仍可作为学习机会,并可能更新或集成到现代工具和技术中。
为红队和渗透测试部署攻击基础设施可能是重复且复杂的。我在团队中的角色之一是构建和维护红队系统,并控制对它们的访问。你可能希望部署的内容多种多样,但我发现自己一直在重复相同的基线部署。
在红队与蓝队的猫鼠游戏中,双方都面临着成功发起攻击和成功防御的挑战。对于红队,以及作为我们团队的基础设施处理者,以下事项是我的关注点:
- 稳定性: 一般系统性能和可靠的通信通道及访问
- 安全性: OPSEC和针对调查人员/蓝队的防御
- 功能性: 根据团队需求添加/删除/修改特性和能力
红队基础设施Wiki是这一概念的一个很好的例子和资源。你可以在https://github.com/bluscreenofjeff/Red-Team-Infrastructure-Wiki 阅读更多内容。
在这里,我将介绍以半自动化的方式使用Digital Ocean与Cobalt Strike团队服务器,这是更复杂和自动化过程及工具的开始,我希望在第二部分中很快发布。目前,这应该是一个很好的起点。
我们将构建的内容:
- 3个Digital Ocean droplets,用于不同的角色,我们的团队服务器运行Cobalt Strike
- 自定义SSH配置
- 服务器健康监控
- 团队服务器的防火墙访问
- 使用Let’s Encrypt for HTTPS信标
你需要提前准备的东西:
- Cobalt Strike许可证或试用版本(可以用MSF或Empire等替代)
- Digital Ocean账户
- C2K文件 https://github.com/invokethreatguy/C2K
- 你的域名的DNS配置访问权限(需要设置DNS A记录)
我们将设置的基础设施将执行以下操作(大部分是脚本化的):
- 通过Digital Ocean web UI部署我们的droplets
- SSH进入每个droplet,添加新的sudo用户,添加SSH密钥并传输C2K文件
- 限制SSH访问仅限新用户使用密钥
- 运行C2K构建脚本,该脚本将:
- 更新系统
- 安装lterm用于控制台日志记录(非常感谢KillswitchGUI提供此工具 https://github.com/killswitch-GUI)
- 安装Cobalt Strike的Java依赖项
- 激活Cobalt Strike
- 用自定义文件替换当前的SSH配置
- 创建防火墙规则
- 运行HTTPsC2DoneRight.sh(非常感谢KillswitchGUI提供此工具 https://github.com/killswitch-GUI)
开始吧!
步骤
登录到你的Digital Ocean控制面板。如你所见,我还没有droplets,所以让我们逐步进行。
我们将创建三个droplets。我使用的设置是Ubuntu 14.04作为操作系统,每月40美元的定价。如果你期望你的Cobalt Strike团队服务器做一些繁重的工作,我不建议低于这个配置。
我选择多伦多地区,因为我在那里,但你可以自由选择你的位置。从OPSEC的角度来看,不仅建议将你的团队服务器分散在不同的地理位置,而且根据你所需的防御级别,甚至可能选择不同的VPS提供商(以防蓝队阻止整个Digital Ocean范围,这可能会发生)。
在上面的图像中,我还选择了“Monitoring”,我们稍后会回来讨论,并附加了一个我已添加到Digital Ocean账户的SSH密钥。
最后,创建三个droplets,如下所示。我将我的droplets命名为“cnc1”、“cnc2”和“cnc3”。为了节省时间,我将在“cnc1”上演示其余的部署过程,但过程将与其他droplets相同。
droplets应该很快创建完成。一旦它们上线,使用root账户和我们在构建droplets时添加的SSH密钥SSH进入。
我会在这里暂停一下,提到Digital Ocean控制面板的一个相当新的功能(尽管我将要展示的内容已内置在提供的脚本中,这只是为了指出一个实现相同结果的酷功能)。
防火墙!
从控制面板点击Networking,然后选择Firewalls。
点击“Create Firewall”,你应该会看到一个配置菜单,其中有一个当前入站规则,SSH。我将在下面的图像中演示创建与我们在脚本中使用的相同规则。
在上面的图像中,我创建了以下入站规则:
- HTTP和HTTPS用于我们的HTTP/S信标
- DNS UDP和TCP用于DNS信标和你可能需要的邪恶DNS事物
- Cobalt Strike团队服务器端口(50050)
- 我们的自定义SSH端口(7654)
保存规则,然后将它们应用到你的droplets。你可以按名称或标签选择droplets,并将防火墙规则添加到所有droplets。非常方便!
好了,让我们回到droplets。我已经通过SSH登录,现在我们将进行一些手动配置。在下面的图像中,我正在为root账户添加密码,添加一个名为“demouser”的新用户,该用户将被添加到sudoers组,并将成为我们一切的主要账户。
当仍然以root身份登录时,编辑SSHD配置文件: ~# nano /etc/ssh/sshd_config
快速说明,在C2K文件夹中,有一个预制的SSHD配置,具有与我下面描述的完全相同的修改。在我们稍后使用的构建脚本中,你可以选择注释掉或删除脚本的这一部分。
让我们更改以下内容:
- Port 7654
- PermitRootLogin no
- PasswordAuthentication yes(请耐心等待)
在最底部添加以下内容:
- AllowUsers demouser
退出root的SSH会话,并将你的SSH公钥传输到demouser账户:
~# ssh-copy-id demouser@
现在你应该能够仅使用密钥登录。以demouser身份SSH进入,再次编辑SSHD配置文件,并将PasswordAuthentication设置更改为no。
你需要以某种方式(SCP、从github wget)将files.zip传输到你的团队服务器,你可以在这里找到:https://github.com/invokethreatguy/C2K
你还需要提供你自己的Cobalt Strike试用版,并在到达该点时将其放入解压的files.zip文件夹中(我的已经捆绑在一起,你稍后会看到)。
将所有内容解压到你的用户主文件夹中(这是我的偏好),你就可以运行安装脚本了。
在运行之前,如果你希望完全按照我的步骤操作,那么将所有内容(解压的files.zip内容和cobaltstrike-trial.tgz)移动到你的主文件夹。例如,无论你在哪里解压所有内容,你可以通过以下方式完成: ~# mv files/* ~
现在让我们运行安装脚本C2Ubuntu.sh,并看看这个脚本将做什么:
第一部分会问你是否准备好继续。这里没有巧妙的输入处理,所以输入“yes”。
然后脚本将安装lterm,这是一个由@Killswitch-GUI开发的fantastic终端日志记录实用程序,可以在这里找到:https://github.com/killswitch-GUI/lterm
接下来,它将准备Cobalt Strike的依赖项,并提示你输入许可证密钥。
然后脚本将复制它附带的自定义SSHD配置文件,但这完全取决于你的偏好。如果你不希望发生这种情况,只需注释掉这部分。我在控制面板中演示的防火墙规则将被设置并在重启后保存,然后SSH服务将重新启动。
当脚本完成时,它将执行HTTPsC2DoneRight.sh脚本,也由@Killswitch_GUI提供,可以在这里单独找到: https://github.com/killswitch-GUI/CobaltStrike-ToolKit/blob/master/HTTPsC2DoneRight.sh
我强烈建议你确保你希望启用HTTPS的团队服务器的DNS A记录已经配置,因为Let’s Encrypt过程需要验证它是活跃的。
如果一切顺利,你应该在输出末尾看到以下图像:
这个脚本将自动拉取Amazon Malleable C2配置文件,并将正确的条目添加到其配置中,以允许使用证书。
这里是Amazon.profile文件和证书添加到其配置中:
现在我们可以通过SSL访问我们的服务器地址来验证是否一切正常,你应该看到默认的Apache欢迎页面。
在启动Cobalt Strike之前,确保停止apache2服务,否则你的监听器会对你吠叫: ~# sudo service apache2 stop
现在连接到你的Cobalt Strike团队服务器并加载amazon配置文件:
~# ./teamserver
启动一个HTTPS监听器,交付给你的目标,如果一切顺利:
你的C2应该准备好了!
在结束之前,我想谈谈我们在开始时启用的droplet监控。C2性能监控有些被低估,如果你期望大量流量,这是一个很好的方式来密切关注事情。
回到Digital Ocean控制面板,选择Monitoring并创建一个警报策略。
我只是设置了CPU性能监视器的默认设置。酷的部分是你可以自动接收电子邮件并将警报连接到Slack频道。
任何新的性能警报都将发送到你指定的Slack频道。
结论
这个脚本还处于早期阶段,我希望能开发一个具有一些杀手级自动化功能的框架。目前,请随意更改设置以满足你的需求,反馈总是受欢迎的。
在本系列的第二部分中,我们将进一步在我们的脚本和部署中添加其他功能,例如:
- 自动化本文中的所有内容
- 使用Digital Ocean cloud_config功能
- 为droplets添加更多监控,用于防御和OPSEC目的(例如logwatch、AIDE)
- 扩展C2以包括每个C2团队服务器的重定向器
非常感谢BHIS让我为这个 awesome 博客做出贡献。你们都很棒!
*Lee Kagan是RedBlack Security的客座博主。他是一名 offensive 安全专业人士,在IT和InfoSec领域有近十年的经验。他是一名渗透测试员、红队员,目前是RedBlack Security的Rogue Team的负责人,专注于加拿大