part1
点击上方蓝字关注我们
往期推荐
将二进制空间安全设为"星标⭐️"
第一时间收到文章更新
声明: 二进制空间安全公众号文章中的技术只做研究之用,禁止用来从事非法用途,如有使用文章中的技术从事非法活动,一切后果由使用者自负,与本公众号无关。
part1
1.摘要
在本文中,将探讨在微软Azure的CDN网络中使用C2域名和Nginx作为反向代理来构建一个红队基础设施。内容包括:C2域的选择和DNS配置、Cobalt Strike配置和Nginx反向代理配置。通过这些配置, 可以使目标主机中的植入程序能够通过路径:Azure CDN -> C2域 -> Nginx反向代理与Cobalt Strike团队服务器进行通信, 以下是整体流程图:
part1
2.所需组件及C2域选择
在实际应用中, 专门为C2服务器选择一个域名不是必须的选择, 但选择域名的好处在于可以避免在CDN配置中将Nginx反向代理的IP地址指定为源主机名并可以指定C2域的合法子域的完全限定域名(FQDN), 这样可以通过A记录指向Nginx反向代理的公网IP。
为C2服务选择域名有几种选择。一种是注册一个新域名并对其进行维护建设,增加其信誉度。另一种选择是通过如:expireddomains.net等服务购买已过期的域名。为了节省时间,这里选择后者。但无论是选择购买新域名还是已过期的域名,都要确保该域名有良好的信誉度,并且没有被安全厂商列入黑名单。剩下的步骤就是在Azure中创建Nginx虚拟机并配置公网IP,最后将公网IP与域名进行绑定。
在Azure中实现C2服务部署,必须的组件包括:Linux VM for Nginx Reverse Proxy、Linux VM for Cobalt Strike Team Server和
Edgio CDN Endpoint
part1
3.Azure Nginx VM配置
第一步首先要创建一个Linux VM用来实施Nginx反向代理。由于反向代理负责处理传入的流量并将其转发到对应的C2服务器, 因此在C2基础设施中起着核心作用, 在后面还将介绍其在C2环境中的使用方法以及它与简单的重定向器(socat或iptables)的区别。
下面将重心放到Linux VM的创建和配置流程上, 在Azure中创建一个新的的Linux VM,如图:
下面将看到关于虚拟机VM的基本设置, 在该界面需要将虚拟机分配到一个资源组, 命名并选择合适的区域和镜像。设置方法如下图:
将选项卡由Basics切换到Disks,磁盘配置选项如下图:
配置完磁盘选项,切换到选项卡Review+create, 到这里就可以直接点击create按钮创建虚拟镜像了,如图:
虚拟机创建完毕, 下面将配置Nginx虚拟机的网络设置, 由于在创建虚拟机时禁用了所有传入端口,因此首先要允许对SSH服务的访问, 但也不会全部放开, 只允许在特定IP地址范围内的IP能够远程访问。其次开放了HTTPS连接端口, 由于在红队行动场景中,通常无法提前知道目标的公网IP地址, 因此这里允许不受限制的HTTPS访问请求。配置如下图:
完成入站规则配置后, 下面要为Nginx虚拟机分配一个内部静态IPv4地址, 这里是:10.3.0.4, 这样做是必要的, 以便稍后配置Cobalt Strike虚拟机的入站规则, 使其仅接受来自Nginx虚拟机内部IPv4地址的HTTPS请求。配置如下图:
part1
4.Azure Cobalt Strike VM配置
与 Nginx 虚拟机一样,Cobalt Strike 虚拟机也只能通过特定 IP 地址进行 SSH 访问。这确保了只有授权用户才能访问虚拟机。
开放端口: 50050,该端口用于 Cobalt Strike 客户端与 Cobalt Strike 团队服务器之间的连接。同样,将对该端口的访问限制在某些 IP 地址,以确保只有授权的 IP 能够通过端口 50050 与团队服务器通信。
此外,允许 HTTPS 流量到达 Cobalt Strike 虚拟机,但与 Nginx 虚拟机不同,这里将入站连接限制在特定的 IP 地址范围内。在这种情况下,仅允许来自 Nginx 虚拟机内部 IPv4 地址(在本例中为 10.3.0.4)的入站请求进入 Cobalt Strike 虚拟机的 HTTPS 端口。这种配置确保了Cobalt Strike 团队服务器通常只接受来自 Nginx 反向代理的入站 HTTP 流量。
此举通过严格限制访问的通信渠道和 IP 地址,提升了 Cobalt Strike 基础设施的安全性,从而减少了攻击面,保护了 Cobalt Strike 团队服务器的完整性。如下图:
这里为Cobalt Strike 虚拟机分配了一个静态内部 IPv4 地址(10.3.0.5),该地址将在后续的 Nginx 配置中使用。这确保了 Nginx 虚拟机与 Cobalt Strike 虚拟机之间的通信保持稳定和可预测,这在配置反向代理时尤为重要。如下图:
part1
5.C2域名配置
在配置CDN之前, 需要在C2域中创建一个DNS记录, 该记录将在CDN配置中用作源主机名, CDN端点将指向它。如图:
在上图中, 首先为将与 C2 域一起使用的子域选择一个名称(在此示例中为“docs”)。然后通过 A 记录将该名称指向 Nginx 虚拟机的公网 IP 地址。这确保了目标上的植入程序通过 CDN 和 C2 域,使用源主机名与 Nginx 虚拟机进行通信。
part1
6.CDN端点配置
下一步是在 Microsoft Azure 中创建一个 CDN 端点,用于传输C2流量。这里无需详细讨论CDN的工作原理,只需了解它们在这里的场景中起着至关重要的作用。CDN 允许我们使用微软 Azure 域名(如 ajax.microsoft.com)这一声誉非常高的域名,有效地伪装 C2 流量。
通过使用 CDN,可以将流量路由通过受信任的、常用的基础设施,从而使得我们的活动更难被检测和阻止。这在红队行动场景中具有极大的优势,因为此类场景的目标是保持隐蔽,避免产生可疑的互联网流量。设置 CDN 的第一步是在 Azure 中进行配置,如下图所示:
下一步需要选择Standard Edgio
选项,如下图:
接下来的步骤是对 CDN 配置文件进行基本配置。与虚拟机一样,需要拥有一个有效的 Azure 订阅,并选择包含 Nginx 和 Cobalt Strike 虚拟机的资源组。CDN 的名称可以自由选择,CDN 端点名称也可以自由设置(如果尚未分配)。在本示例中,将使用 xyz-cache.azuredge.net
。
将“Origin Type”(源类型)设置为“Custom Origin”(自定义源)。在“Origin Hostname”(源主机名)字段中,输入之前在 C2 域的 DNS 中创建的子域的 FQDN(完全限定域名),该子域通过 A 记录指向 Azure 中 Nginx 虚拟机的公网 IP。换句话说,如果C2 域名是 domain.com
,并且在 DNS 中定义了一个指向 Nginx 虚拟机公网 IP 的子域,例如 docs
,那么需要将 docs.domain.com
作为“源主机名”输入。
这种配置确保了所有对 CDN 端点的请求都会被重定向到C2 域的相应子域,而该子域又直接指向 Azure 中的 Nginx 虚拟机的公网 IP。通过这种方式,可以有效地掩盖通过 CDN 传输的指挥与控制流量,并确保它最终正确到达Nginx 虚拟机。如下图:
切换到Review + create选项卡, 配置如下图:
现在,已经成功创建了一个CDN节点, 但还需要进行一些配置, 第一步是在Overview
中查看端点Hostname,如下图:
在Settings
的Compression
选项卡中, 将Compression
选项设置为:Off
, 如图:
在Caching rules
选项中, 将Caching behavior
选项的内容设置为:Bypass cache
,如下图:
至此, 所有基础配置全部完成。
在下一篇文章中, 将重点介绍Nginx的安装配置、Cobalt Strike的安装配置、C2安装测试。
往期推荐
点个在看你最好看
原文始发于微信公众号(二进制空间安全):在CDN上搭建支持反向代理的C2服务器(上)
- 左青龙
- 微信扫一扫
- 右白虎
- 微信扫一扫
评论