使用Digital Ocean构建C2基础设施 - 第一部分

本文详细介绍了如何利用Digital Ocean搭建Cobalt Strike团队服务器的C2基础设施,包括SSH配置、防火墙规则设置、Let's Encrypt证书部署及自动化脚本使用,为红队和渗透测试提供稳定可靠的攻击基础设施。

使用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 httpsProfile/amazon.profile

启动一个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的负责人,专注于加拿大

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计