回归最本质的信息安全

;

利用Digital Ocean构建远控基础设施

2018年4月17日发布

33,571
0
0

导语:在这篇文章中,我们将介绍C2K的变化以及重新部署具有所有新功能的演示C2基础架构。值得注意的是,并非所有显示的内容都是自动的或是C2K脚本的一部分。当前正在进行的C2K中还增加了更多功能。

在本系列一篇文章中,我决定重写C2K(可以在此处找到),以更改其用户的行为和选项。

在这篇文章中,我们将介绍C2K的变化以及重新部署具有所有新功能的演示C2基础架构。值得注意的是,并非所有显示的内容都是自动的或是C2K脚本的一部分。当前正在进行的C2K中还增加了更多功能。

C2K又叫命令和控制工具包,是一个bash脚本,用于加速重复C2构建和任务的过程。新的设计允许用户轻松快速地移除,添加或编辑完成工作所需的功能。目前C2K提供以下功能:

· 部署Cobalt Strike团队服务器

· 为HTTP C2实例部署Apache mod_rewrite重定向器

· 将HTTPS支持添加到HTTP C2实例

· 为C2流量配置防火墙规则

· 锁定对C2实例的SSH访问

· 配置终端记录

· 在C2实例上配置Logwatch

在这篇文章中,我们将使用所有上述功能以及一些手动添加,如:

· 将Cobalt Strike信标事件整合到Slack中

· 将Digital Ocean性能警报集成到Slack中

· 使用Digital Ocean doctl CLI创建全球基础设施防火墙

为了使用C2K(和手动警报设置),在使用它之前,你需要一些下面的要求:

· Digital Ocean账户

· Digital OceanAPI密钥

· Cobalt Strike工许可证

· Slack

· 为传入的webhook创建Slack应用程序

· 域名和DNS管理(GoDaddy)

新的C2K演练

我们来看看代码以及如何使用C2K。

blob.png

C2K程序包包含了3个可从GitHub提取的项目:

· c2k.sh – 执行的主脚本

· HTTPsC2DoneRight.sh – 来自@Killswitch_GUI的脚本来设置HTTPS支持

· sshd_config – 用于锁定SSH访问的自定义SSHD配置模板

注意:你需要为自己的Cobalt Strike副本负责。一旦你下载了所有内容,将解压后的压缩文件保存在上述文件夹中。

继续,打开c2k.sh,让我们看看里面的东西。

blob.png

c2k.sh脚本中的所有内容都被细分为多个部分,存储桶和函数,以便用户可以快速轻松地修改任何内容。在上面的图片中,你需要设置以下变量:

· DOTOKEN – 将你的Digital Ocean API密钥放在引号之间

· NEWUSER – 将你用于通过SSH登录到新的droplet中的用户名放在引号之间

这里的所有内容都按功能细分。这样能够使得添加/删除/编辑命令和功能变得非常简单。

blob.png

函数“func_getDependencies”是一个基本的更新并安装了一些必需的组件。在奇怪的事件中,如果你没有安装python,它也会自己添加。 

函数“func_createUser”将为SSH访问创建新用户并将该帐户添加到sudoers组。

“func_setupSSH”函数将进行必要的更改,以便为新用户设置SSH访问权限,并将已经在droplet上的现有密钥移至该用户(现有的SSH密钥就是你用来通过root用户首次登录到新的droplet的内容)。

blob.png

函数“func_createDroplets”是droplet创建魔术发生的地方。它利用了Digital Ocean 的API。在上面的图片中,我展示了如何一次创建多个droplet。如果你想一次创建一个,只需从curl开始删除第二个和第三个内容块。

你需要为每个droplet设置“YOUR_DROPLETS_HOSTNAME”字段。你还可以根据需要设置区域,大小和图像(仅在Ubuntu 16.04上测试过)。最后,你需要在“YOUR_SSHKEY_FINGERPRINT”字段中添加SSH密钥指纹。当你添加你的SSH密钥时,可以在Digital Ocean控制面板中获得(我们稍后会看到的)。

blob.png

因为这个脚本是围绕使用Cobalt Strike的,所以上图中的功能都与它相关,但可以根据你的首选框架(即MSF或Empire)进行修改。

函数“func_getCSDependencies”会安装Cobalt Strike所需Java组件。函数“func_installCobaltStrike”解包并运行安装程序,它将提示你输入许可证。函数“func_getMalleable”将把Malleable C2配置文件压缩到解压缩的Cobalt Strike目录中。函数“func_addHTTPSSupport”将运行HTTPsC2DoneRight.sh脚本。

blob.png

限制与团队服务器的连接非常重要。在上图中,有一个简单的函数叫做“func_createFirewall”来设置哪些端口可以访问。这不是一个坚如磐石的防火墙,所以建议你根据需要限制访问(注:我们也将在后面讨论带有doctl的全局的基础设施防火墙)。

blob.png

在C2K中选择HTTP重定向器选项时,上图中的函数“func_createHTTPRedirector”利用了@n0pe_sled的优秀脚本。该脚本将自动完成配置HTTP重定向实例的过程。强烈建议访问作者GitHub页面(https://github.com/n0pe-sled/Apache2-Mod-Rewrite-Setup)查看所有可用选项。

在上面的例子中,该函数将下载脚本以及Malleable C2配置文件。该脚本支持使用Malleable配置文件进行重定向,但在上例中未使用。使用前要编辑的重要字段是“-block_url”和“-allow_url”。添加一个你希望向其发送流量的域名,该域名不应与你的团队服务器相关联,或者不符合重定向条件。然后添加应该代理流量的C2域名(这是你的HTTP C2实例)。

blob.png

最后一个函数是“func_installDefensiveTools”。这个函数是在C2实例中添加一些防御措施的起点。首先,它会再次从@Killswitch_GUI安装lterm,这是一个很不错的实用程序,它记录控制台活动并将其写入文件。它还会安装Logwatch并通过电子邮件报告你服务器上发生的事情。在上图中,你需要编辑电子邮件地址的2个字段(显示为  your@email.com )。你还可以调整上述任何设置,以便设置你所希望收到通知的首选方式,通知时间以及详细程度。

C2K准备

在执行C2K之前,让我们准备好开始创建基础架构所需的一切。计划如下:

· 域名(s) – 我将使用ilikedemos [.] com进行此演示

· 需要为我们的不同主机设置A记录

· 4个droplet – 这些将是我们模拟的C2实例

· Payload主机 – 用于托管下载,脚本,后门等的Cobalt Strike实例。

· HTTP主机 – 用于接收反向HTTP信标的Cobalt Strike实例

· HTTP重定向主机 – 用于代理的Apache mod_rewrite实例

· HTTPS主机 – Cobalt Strike实例接收反向HTTPS信标

· SSH密钥 – 将创建一个新的SSH密钥并添加到Digital Ocean

· Slack通道和webhook

· Cobalt Strike和Slack集成的攻击者脚本来自@bluscreenofjeff(https://github.com/bluscreenofjeff/AggressorScripts)

让我们开始吧。

从Digital Ocean开始,登录到你的帐户,我们将获得API密钥并将SSH密钥添加到我们的配置文件。

blob.png

点击页面顶部的“API”,如果你还没有点击“生成新令牌”,则创建一个新的API密钥。

blob.png

给你的令牌取一个新的名字。当它被创建时,一定要记下密钥,因为它只会显示一次哦。如果你忘记了,那么你需要重新生成一个新的令牌。 

接下来,在你的配置文件安全设置部分,通过单击“添加SSH密钥”创建新的SSH密钥或记下现有的SSH密钥指纹。

blob.png

blob.png

现在将是更新c2k.sh并添加Digital Ocean API密钥和SSH指纹的好时机。

我们现在可以运行c2k.sh脚本并为我们的C2创建droplet。我将使用以下设置创建4个droplet:

· 所有的droplet都将在nyc3中进行演示

· 所有的droplet的大小都是2GB,但我建议根据实际操作分配更多的空间

· 每个droplet的主机名将分别是:

· payload.ilikedemos.com

· http.ilikedemos.com

· httpred.ilikedemos.com

· https.ilikedemos.com

blob.png

选择选项1可以自动部署在脚本中配置的droplet。

一旦完成运行,检查你的Digital Ocean 的droplet页面,你应该可以看到新创建的droplet。

blob.png

现在将是更新你用于C2基础架构的域名的A记录的好时机。

接下来,我们需要将C2K文件夹的内容转移到每台机器上(实际上你不需要将Cobalt Strike转移到重定向器)。在下面的图片中,重复每个droplet的SCP过程。

blob.png

一旦你完成了将C2K包复制到每个droplet中的过程,SSH通常以root用户身份使用SSH密钥登录。在droplet上运行C2K脚本之前,我想设置一个root密码。因为我们稍后将使用sudoers组中的新用户通过SSH登录,如果你想直接提升到root用户,你将需要拥有一个密码(尽管不是必需的)。

blob.png

blob.png

在这个演示中,并不是所有的这4个droplet都需要在c2k.sh中运行相同的选择。下面是我将在每个droplet上执行的细节。

· Payload主机 – 安装Cobalt Strike,安装日志记录和防御工具。

· HTTP主机 – 安装Cobalt Strike,安装日志记录和防御工具。

· HTTPS主机 – 安装Cobalt Strike,安装HTTPS支持,安装日志记录和防御工具。

· 运行HTTPsC2DoneRight.sh之前,请确保设置了A记录

· 请注意,此脚本默认使用了带有HTTPS支持的amazon.profile Malleable C2配置文件。请务必编辑该文件或使用该配置文件运行你的HTTPS团队服务器

· 一旦完成就停止运行Apache,否则它将与Cobalt Strike发生冲突,从而成为监听器。

· HTTP重定向器主机 – 安装HTTP重定向,安装日志记录和防御工具。

· 运行此选项之前,请务必在c2k.sh脚本中设置apache_mod_rewrite_setup标志

还要记下sshd_config模板中的设置。有一个你需要更改的自定义SSH端口和用户名集。SSH端口取决于你,但要确保c2k.sh中的NEWUSER变量与sshd_config模板中的AllowUser指令相匹配。一旦c2k.sh脚本完成,你必须在使用newusername @ droplet_address -p 7654(或你选择的任何自定义端口)断开连接后,通过SSH登录。

一旦脚本完成上述选择,断开连接并重新登录新的用户帐户。

blob.png

blob.png

一旦完成了每个droplet的所有c2k.sh脚本选项,我们再添加一些监测和警报。

首先,我们添加Digital Ocean Slack集成以进行droplet性能监测。在你的Digital Ocean控制面板中,点击顶部导航栏中的“监控”。

blob.png

注意上图的底部。我们需要在每个想要监视性能的droplet上执行一条命令。在创建新策略之前,执行该命令(将很快将其集成到c2k.sh脚本中)。

完成后,点击“创建警报策略”。

blob.png

选择一个度量标准来提醒你,例如CPU,然后设置你所需的阈值设置。按名称或标记添加你的droplet,然后在警报部分下选择“Connect Slack”。你需要向你的Slack帐户进行身份验证,然后选择你希望收到提醒的频道。完成后,点击“创建警报策略”。下面的图片显示了Digital Ocean和Slack的结果。

blob.png

blob.png

不错。现在我们将把来自Cobalt Strikes beacon的警报整合到同一个Slack通道中。你需要创建一个新的Slack应用程序,并记下webhook以添加到Cobalt Strike中。这个过程可以跟在@bluescreenofjeff这里的优秀帖子一起使用:

https://bluescreenofjeff.com/2017-04-11-slack-bots-for-trolls-and-work/

转到你的Slack帐户应用程序页面并选择“创建应用程序”。

blob.png

点击“创建应用程序”,为你的应用程序指定一个名称和希望收到警报的Slack频道。

blob.png

在出现的下一页中选择“传入Webhooks”。

blob.png

在Webhooks页面上,你需要将其切换为激活该功能。

blob.png

一旦启用,你需要选择页面底部并创建一个新的Webhook。点击“添加新的Webhook到工作区”,然后在弹出窗口中选择Slack中的相同频道(或者如果你愿意的话),以接收警报。

blob.png

完成后,将显示新的Webhook URL。请记下这一点,因为你需要它输入Cobalt Strike的Aggressor脚本。

blob.png

现在剩下的就是测试我们的C2基础设施,并确保它们都按预期工作。

将我的Cobalt Strike客户端连接到所有活动的团队服务器后,添加eventlog-to-slack.cna Aggressor脚本并输入适当的设置。

blob.png

这种集成可以在适当的Slack通道中确认。

blob.png

接下来我创建了两个监听器。一个是在HTTP主机上同时也被设置为具有它的信标回调的HTTP重定向器。第二,在HTTPS监听器上的直接连接(不会重定向)。

blob.png

在有效负载主机上,我托管了一个PowerShell Web交付脚本,该脚本分阶段发送到将通过重定向器代理的HTTP主机。

blob.png

在受害机器上执行PowerShell负载之后,所有事情都通过重定向器成功执行,并通过HTTP主机获取访问权限。

blob.png

通过在重定向器上加载Apache日志,我们也可以看到重定向器正在运行。

blob.png

最后,我从HTTP主机上的访问中产生一个新的信标,回连HTTPS主机。

blob.png

blob.png

不错。看起来现在一切都已经完全运作,我们也有我们的新的信标Slack通知进来。

blob.png

全局防火墙

最后,我想回到刚开始提到的doctl工具。这是一个在你的物理主机上本地安装的CLI工具(但不一定是),它允许你访问和配置Digital Ocean提供的几乎所有选项。

我想到的是使用Digital Ocean防火墙功能来创建防火墙,以限制访问整个基础设施。其中一个原因是设置的规则只允许你和你的客户触摸基础架构。

当你第一次运行doctl时,你需要使用API密钥进行身份验证。

blob.png

之后,所有选项现在都可用。

blob.png

在上图中,你可以看到如何通过几条命令查询Digital Ocean账户中的各种信息。

我们来创建一个防火墙,然后我们将应用于所有的droplet。这里的想法是展示如何限制流量不仅来自你的实例,而且如果需要,还可以在它们之间进行流量限制。

blob.png

在上图中,我创建了一个名为“c2-infra-firewall”的演示防火墙,并定义了入站和出站规则。对于入站,你需要将0.0.0.0/0更改为你的原始IP地址,也可能是可能源自你正在测试的IP地址。

如果你的目标位于与蓝军团队不同的网络上,那么将流量限制到这种程度的其他一些优势就在于此。此外,限制互联网噪音和潜在的不受欢迎的访客接触你的C2。

blob.png

一旦你创建了防火墙,你可以列出它和它的设置,并开始向全局添加droplet。你只需要上图中所示的防火墙ID和dropletID。这些设置也反映在你的Digital Ocean控制面板中。

blob.png

blob.png

最后的想法和说明

在结束这篇文章之前,我对上述设计进行了一些思考:

· 从OPSEC的角度来看,如果Digital Ocean的整个范围受阻,则将整个C2托管在单个提供商处可能会出现问题。

· 关于OPSEC,将所有C2流量呼叫到单个域也不是很好。应该将其混合并分散出去 。

· 如果某些可能敏感的信息发布到Slack,则事件日志到缓冲的Aggressor脚本可能不是你或你的客户所满意的。考虑到这一点。

· 最近有一些关于云VPS和系统上的攻击基础设施的Twitter辩论,你实际上并没有真正的控制权和伦理道德。这是一个有效的且需要考虑的事情,以确保你和你的客户知道他们的数据将如何以及在何处受到保护

C2K远未完成项目。我还在努力添加诸如DNS团队服务器和重定向器,更多防御性设置以及SMTP中继自动化的网络钓鱼实例等新增内容。

我想特别感谢那些撰写了我已经整合到C2K中的工具的人以及一些对我有很大影响和有用资源的人:

· @Killswitch_GUI for lterm和HTTPsC2DoneRight.sh

· 用于创建Red Team Infrastructure Wiki的@bluscreenofjeff

· BlackHills Infosec的工作人员让我可以在他们的博客上发帖。

· @armitagehacker Cobalt Strike

本文翻译自:https://www.blackhillsinfosec.com/how-to-build-a-command-control-infrastructure-with-digital-ocean-c2k-revamped/如若转载,请注明原文地址: http://www.4hou.com/technology/11107.html

点赞 0
取消

感谢您的支持,我会继续努力的!

扫码支持

打开微信扫一扫后点击右上角即可分享哟

丝绸之路

嘶吼认证-特约作者/译者

发私信

发表评论