在现代红队中,建立安全隐蔽的命令和控制 (C2) 基础设施对于成功至关重要。在博文第 1 部分中获取并重新分类域后 ,下一步是构建一个有效的系统,该系统不被发现并确保操作安全。在这篇文章中,我将分享如何使用 Sliver 和 NGINX Proxy Manager 创建分层 C2 设置,以及 Cloudflare提供额外的保护和匿名层。此外,我还对 Sliver 的网络流量进行了混淆和强化,以绕过 NDR、IDS/IPS和其他网络监控工具。为了完成设置,我开发了一个自定义 C++ dropper,它通过代理链直接在堆内存中下载和执行有效负载。这种设置确保了安全和隐蔽的操作,同时保持匿名并有效地绕过了高级网络防御。
目录
-
基础设施设计 -
利用 Cloud-flare 代理流量 -
将 NGINX 配置为 Re-director -
部署 Sliver 并混淆其网络流量模式 -
配置防火墙规则以保护 Sliver 服务器访问 -
构建自定义 C++ Dropper 以下载和执行有效负载 - 其他 OPSEC:静态内容(sliver 侦听器上的合法网站)
-
最后的思考
基础设施设计
该项目的基础在于创建一个隐蔽的多层命令和控制 (C2) 基础设施。设置包括:
- Cloudflare 代理
:隐藏流量并添加额外的匿名层。 - Alpha VPS 上的 NGINX 代理管理器
:充当重定向器,确保所有流量都流经此中间层。 - Contabo VPS 上的 Sliver C2 服务器
:用于管理有效负载和会话的核心服务器,由严格的防火墙规则保护。
设计概述: 来自 Cloudflare 上托管的诱饵域“onlin-notifications.net”的流量被代理到 Alpha VPS,NGINX 代理管理器在那里将其路由到 Sliver C2 服务器。
流量:自定义 C++ Dropper → Cloudflare Proxy → NGINX Proxy Manager → Sliver C2 Server。
利用 Cloudflare 代理流量
在第 1 部分中,我们通过 Cloudflare 购买了域 online-notifications.net。现在,我们将 Cloudflare 配置为中间代理,以匿名化流量。请执行以下步骤:
-
在 Cloudflare 中为域 online-notifications.net 和 www.online-notifications.net 添加 A 记录。 -
将记录指向 Nginx 代理服务器 IP (130.185.249.223)。 -
在 Cloudflare 中启用代理 (Orange Cloud) 选项以掩盖服务器的真实 IP 地址并安全地路由流量。
现在,解析 online-notifications.net 和 www.online-notifications.net 的 DNS 将返回 Cloudflare 的 IP 地址,而不是我们的 NGINX IP。这种设置通过使用 Cloudflare 作为受信任的中介来增强操作安全性 (OPSEC),有效地掩盖了我们 NGINX 代理服务器的真实 IP 地址并增加了额外的匿名层。
此外,Cloudflare 将隐藏敏感的 WHOIS 信息,例如您的电子邮件地址、组织名称和其他个人详细信息。这确保了更大的隐私和匿名性,进一步增强了使用诱饵域时的操作安全性 (OPSEC)。
作为一项额外练习,另一项 OPSEC 措施是限制通过 Cloudflare 访问您的 C2 和活动域,仅允许来自客户所在国家/地区的连接。此策略将有助于防止其他威胁情报团队和外部事件响应 (IR) 团队访问您的域。
将 NGINX 配置为 Re-director
重定向器充当中介,将流量从cloudflare 转发到实际的 C2 服务器。您可以使用下面的链接从 Alpha 购买 VPS 服务器。价格从 3.50 美元起,这已经足够了,因为我们只需要最少的资源进行重定向器。成本较低的选项将有效地满足要求。购买 VPS 后,我们将安装 Nginx 作为 Docker 容器。
https://alphavps.com/cheap-vps.html#plansTbl
- 在 Alpha VPS 上安装 Docker 和 Docker Compose
sudo apt updatesudo apt install -y docker.iosudo systemctl enable dockersudo systemctl start dockersudo curl -L "https://github.com/docker/compose/releases/download/v2.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-composesudo chmod +x /usr/local/bin/docker-compose
2. 为 Nginx 创建一个名为 docker-compose.yml 的 Docker Compose 文件
version:'3.8'services:app:image:'jc21/nginx-proxy-manager:latest'restart:unless-stoppedports:# These ports are in format <host-port>:<container-port>-'80:80'# Public HTTP Port-'443:443'# Public HTTPS Port-'81:81'# Admin Web Portvolumes:-./data:/data-./letsencrypt:/etc/letsencrypt
3- 使用 docker compose 将 Nginx 键入 docker compose up -d 安装在您保存 .yml 文件的同一目录上。然后 用于验证 NGINX 容器是否正在运行。docker ps
4. 登录 NGINX GUI 并配置重定向规则
安装后打开端口 81 的 VPS IP 以使用默认管理员用户登录电子邮件:[email protected] 密码:changeme 然后立即使用此默认用户登录后,系统会要求您修改详细信息并更改密码
访问 Nginx Proxy Manager GUI 后,我们将添加代理主机,如下所示:
添加以下内容:当使用域 online-notification.com 收到连接时,将流量路由到端口 443 上 IP 为 157.173.198.175 的 Sliver VPS。
然后单击自定义位置,点击并添加以下内容:如果对文件 online-notifications.net/microsofta-updates 发出请求,请将其路由到 IP 为 157.173.198.175 但位于端口 80 的同一 Sliver VPS,Apache 服务器在该端口托管信标有效负载。此有效负载将由 dropper 下载以建立反向 shell。
-
现在规则已经在 Nginx Proxy Manager 中创建了,所有传入的流量都将被重定向到 sliver C2 真实 IP。
部署 Sliver C2 并混淆其网络流量模式
我们将在 Contabo VPS 上部署 Sliver。您可以从下面的链接购买 VPS,计划起价为 4.50 美元。
云 VPS 1 |低价格、高性能的虚拟专用服务器 |Contabo
快速、灵活的 VPS:4 个 vCPU 内核、6 GB RAM、100 GB NVMe/400 GB SSD、1 个快照、32 TB 流量。经济实惠的云托管...
contabo.com
- Sliver:简介
我发现 Sliver 是最好的开源之一,我在许多真正的红队活动中使用了它,它非常有效。此外,我使用了 havoc,但我发现 Sliver 框架更健壮、成熟且用途广泛,可以取代 Cobalt Strike 和跨平台参与等工具。它适用于需要稳定性、加密和高级后开发的大型操作和红队成员。Sliver 是 Bishop Fox 的一个项目,他们将其描述为“开源跨平台的对手仿真 / 红队框架”。它是用 Go 编写的,面向 Windows、Linux 和 MacOS,可能还有所有其他 Go 编译器目标,尽管维护者不保证这一点。
Sliver 支持多用户操作,包括多个 C2 通道,所有通道都具有加密内置、旋转、BOF 等功能。该界面是基于文本的。注意:如果您正在寻找商业和更成熟的 C2 和最好的红队集,我建议使用 Fortra 的 Outflank 安全工具 (OST),您将轻松绕过所有 AV/EDR。
2. 安装 Sliver 服务器
sudo wget https://github.com/BishopFox/sliver/releases/download/v1.5.42/sliver-server_linuxchmod +x /opt/sliver/sliver-server_linux sudo /opt/sliver/sliver-server_linux
在更现实的情况下,将有一个团队共享服务器,您需要启用多人游戏模式。但是,作为使用此服务器的单个人,我可以从这里进行操作。
3. 混淆 Sliver C2 网络流量模式
安装 Sliver 后,所有日志和配置文件都位于 $HOME/.sliver 目录中。首先,我们将对 Sliver 的网络通信模式进行混淆处理,以绕过 NDR(网络检测和响应)。
查看默认模式文件的一些内容: cat ~/.sliver/configs/http-c2.json
,然后备份原始配置文件
cp ~/.sliver/configs/http-c2.json ~/.sliver/configs/http-c2.json.backup.
-
现在我们可以编辑 http-c2.json 文件,如果有任何问题,我们可以恢复原始配置文件。
让我们打开文件并通过更改目录名称、文件名和添加额外的 Web 服务器标头来混淆网络模式以混入合法流量。
Vim ~/.sliver/configs/http-c2.json
下面是我的 GitHub 上更新的混淆通信文件
主 Sliver/Obfuscate-Sliver-Network-http-c2.json ·0xFFF-cmd/裂片卒
通过在 GitHub 上创建帐户,为 0xFFF-cmd/Sliver 开发做出贡献。
github.com
混淆网络流量后,让我们重新打开 sliver server
然后启动 https 侦听器
确认侦听器打开
生成原始 shellcode 裂片信标
安装 Apache2 服务器
sudo apt update&& sudo apt install apache2
然后将 Beacon 复制到 Apache Server 目录以托管 Beacon 负载并授予文件下载权限
cp /opt/sliver/WOODEN_ENGINEER.bin /var/www/html/microsofta-updatessudo chown -R www-data:www-data /var/www/html/ microsofta-updates
配置防火墙规则以保护 Sliver 服务器访问
生成信标、托管信标并打开侦听器后,让我们配置防火墙规则,仅允许来自 sliver 上特定 IP 的流量,这将是 nginx 代理。
#1. Allow traffic from a specific IP on port 80 and 443sudo iptables -A INPUT -p tcp -s 130.185.249.223 --dport 80 -j ACCEPTsudo iptables -A INPUT -p tcp -s 130.185.249.223 --dport 443 -j ACCEPT#2. before dropping packets, i want to log any drop to see who want to access my machine sudo iptables -A INPUT -p tcp --dport 80 -j LOG --log-prefix "IPTABLES-DROP-PORT80: " --log-level 4sudo iptables -A INPUT -p tcp --dport 443 -j LOG --log-prefix "IPTABLES-DROP-PORT443: " --log-level 4# 3. Add Rules to Drop Traffic from All Other IPs for port 80 and 443 sudo iptables -A INPUT -p tcp --dport 80 -j DROPsudo iptables -A INPUT -p tcp --dport 443 -j DROP
列出规则以确保它们被正确应用:sudo iptables -L -n -v
通过使用 curl 或 Web 浏览器等工具将流量从不同 IP 发送到端口 80 和 443 来测试防火墙规则。
curl http://157.173.198.175:80 curl https://157.173.198.175:443
查看防火墙日志:日志存储在系统日志文件中,可以使用以下方法查看:sudo tail -f /var/log/syslog
过滤端口 80 或端口 443 上丢弃的数据包的日志
sudo grep "IPTABLES-DROP-PORT80" /var/log/syslogsudo grep "IPTABLES-DROP-PORT443" /var/log/syslog
如果需要删除所有规则以用于测试目的以刷新所有链(INPUT、OUTPUT、FORWARD):sudo iptables -F
构建自定义 C++ Dropper 以下载和执行有效负载
我们将使用托管在我的 GitHub 上的自定义 dropper 下载 Sliver 信标并将其注入内存。
Dropper Link:https://github.com/0xFFF-cmd/Sliver/blob/main/Dropper.cpp
注意:此 dropper 是用 C++ 编写的,使用前应进行编译。目前,我们正在将其用于测试目的。在接下来的部分中,我将向您展示如何开发更高级的 dropper 来绕过 AV 和 EDR 解决方案。目前,要允许此 dropper 工作,您需要禁用防病毒软件或将文件夹列入白名单。这个 dropper 只是下载 beacon shellcode,将其注入堆内存,更改内存的权限使其可执行,然后执行它。
在 Visual Studio 中创建新项目并选择类型 console APP C++
现在将 dropper 代码作为发布版本,然后编译它(Build > Build Solution 或 Ctrl+Shift+B)并执行它。
执行 dropper 的可执行文件后,我们检查 Apache 和 Sliver 日志以观察 dropper 的动作。
-
Apache 日志确认 beacon shellcode 文件下载成功
-
Sliver 日志使用新的混淆 URL、文件名和扩展名确认接收信标请求:tail -f ~/.sliver/logs/sliver.log
-
在银色中,我们收到了 beacon revere 外壳,它现在可以工作了
其他 OPSEC:静态内容(sliver 侦听器上的合法网站)
最后的思考
通过利用 NGINX 作为代理并结合流量混淆和内存注入等高级技术,我们确保了基础设施在保持有效性的同时不受关注。此外,我们还实施了防火墙规则来限制访问,增加了额外的安全层。这种设置为现代红队提供了坚实的基础,既可靠又隐蔽。在以后的文章中,我们将更深入地研究更高级的技术,以进一步增强红队行动的安全性和隐蔽性。
原文始发于微信公众号(安全狗的自我修养):掌握现代红队基础设施 — 第 2 部分:使用 Sliver 和 Re-director 构建隐蔽的 C2 基础设施
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论