
Red Team 基础设施加固资源收集 Wiki
本维基旨在为搭建具有韧性的红队基础设施提供资源。它是为了补充 Steve Borosh(@424f424f)和 Jeff Dimmock(@bluscreenofjeff)在 BSides NoVa 2017 上的演讲“末日准备者:强化你的红队基础设施”(幻灯片)而创建的。
如果您想添加内容,请在仓库中提交 Pull Request 或提交 issue。
感谢本维基中所有引用内容的作者,以及所有贡献者!
在设计一个需要抵御主动响应或维持长期交战(数周、数月、数年)的红队基础设施时,根据功能隔离每个资产非常重要。这可以在活动资产开始被检测到时,为对抗蓝队提供韧性和敏捷性。例如,如果评估中的钓鱼邮件被识别,红队只需创建新的 SMTP 服务器和 payload 托管服务器,而无需重新搭建整个团队服务器。
考虑在不同资产上隔离以下功能:
每次社会工程学活动都可能需要这些功能。由于主动事件响应在红队评估中很常见,因此每次活动都应实施一套新的基础设施。
为了进一步增强韧性和隐蔽性,每个后端资产(即团队服务器)前都应放置一个重定向器。目标始终是在我们的目标和后端服务器之间保持一个主机。以这种方式搭建基础设施可以更快、更轻松地轮换全新基础设施——无需搭建新的团队服务器、迁移会话或重新连接后端未暴露的资产。
常见的重定向器类型:
每种重定向器类型都有多种适合不同场景的实现选项。这些选项将在维基的重定向器部分详细讨论。重定向器可以是 VPS 主机、专用服务器,甚至是运行在平台即服务(PaaS)实例上的应用。
以下是一个示例设计,考虑了功能隔离和重定向器的使用:

如何使用 Digital Ocean 构建 C2 基础设施 – 第 1 部分 - Lee Kagan (@invokethreatguy)
使用 Terraform 自动化部署红队基础设施 - 第 1 部分 - Rasta Mouse (@_RastaMouse)
感知到的域名声誉会因目标使用的产品及其配置而有很大差异。因此,选择一个能在目标上起作用的域名并非精确科学。开源情报收集(OSINT)对于帮助做出最佳猜测、判断控制措施的状态以及应针对哪些资源检查域名至关重要。幸运的是,在线广告商面临同样的问题,并创建了一些我们可以利用的解决方案。
expireddomains.net 是一个搜索最近过期或删除域名的搜索引擎。它提供搜索和高级过滤功能,例如过期时间、反向链接数量、Archive.org 快照数量、SimilarWeb 评分。使用该网站,我们可以注册带有域名年龄的二手域名,这些域名看起来与我们的目标相似、与我们要冒充的对象相似,或者很可能在目标网络中融入其中。

在为 C2 或数据外泄选择域名时,考虑选择归类为金融或医疗保健的域名。许多组织不会对这些类别执行 SSL 中间人检查,因为可能存在法律或数据敏感性问题。同样重要的是确保所选域名与任何先前的恶意软件或钓鱼活动无关。
Charles Hamilton(@MrUn1k0d3r)开发的工具 CatMyFish 可自动执行搜索,并使用 expireddomains.net 和 BlueCoat 进行 Web 分类检查。它可以修改以应用更多搜索过滤器,甚至对您注册的资产执行长期监控。
另一个工具 DomainHunter,由 Joe Vest(@joevest)和 Andrew Chiles(@andrewchiles)开发,返回 BlueCoat/WebPulse、IBM X-Force 和 Cisco Talos 分类、域名年龄、可用的替代 TLD、Archive.org 链接以及 HTML 报告。此外,它还使用 Malwaredomains.com 和 MXToolBox 检查域名是否用于已知恶意软件和钓鱼活动。该工具还支持 OCR,用于绕过 BlueCoat/WebPulse 验证码。有关该工具初始发布的更多详细信息,请查看博客文章。
另一个工具 AIRMASTER,由 Max Harley (@Max_68) 开发,使用 expireddomains.net 和 Bluecoat 查找已分类的域名。该工具使用 OCR 绕过 BlueCoat 验证码,从而提高搜索速度。
如果之前注册的域名不可用,或者您更愿意自行注册域名,也可以自行对域名进行分类。可以使用下面的直接链接,或使用 Dominic Chell(@domchell)开发的 Chameleon 等工具。大多数分类产品在确定域名分类时会忽略重定向或克隆内容。有关 Chameleon 使用的更多信息,请查看 Dominic 的文章分类不是安全边界。
最后,确保您的 DNS 设置已正确传播。
“简易”和“钓鱼”这两个词似乎从来不会同时出现。搭建一个合适的钓鱼基础设施可能非常麻烦。以下教程将为您提供知识和工具,以便快速搭建一个能通过“大多数”当前垃圾邮件过滤器的钓鱼服务器,并为您提供 RoundCube 界面,带来轻松的钓鱼体验,包括与目标的双向通信。网上有很多关于钓鱼的设置和文章。这只是其中一种方法。
一旦您拥有一个通过上一节所列适当检查的域名,并且您的钓鱼服务器已启动,您需要为您的域名创建几个“A”记录,如图所示。

接下来,通过 ssh 登录您的钓鱼服务器,并确保您的 /etc/hosts 中列出了正确的 FQDN 主机名。 示例“127.0.0.1 email.yourphishingserver.com email localhost”
现在,您将通过几个简单步骤安装用于钓鱼的 Web 前端。首先,将最新“BETA”版本的 iRedMail 下载到您的钓鱼服务器上。简单的方法是右键单击下载按钮,复制链接地址,使用 wget 直接下载到您的钓鱼服务器上。接下来,解压它“tar -xvf iRedMail-0.9.8-beta2.tar.bz2”。进入解压后的文件夹,使 iRedMail.sh 脚本可执行(chmod +x iRedMail.sh)。以 root 身份执行该脚本,按照提示操作,最后需要重启以完成所有设置。
您需要确保所有正确的 DNS 记录都指向您的邮件服务器。(https://docs.iredmail.org/setup.dns.html)。对于 DKIM,新命令应为“amavisd-new showkeys”以列出您的 DKIM 密钥。
对于 DMARC,我们可以使用(https://www.unlocktheinbox.com/dmarcwizard/)生成我们的 dmarc 条目。

现在,创建一个用于钓鱼的用户。

使用您的新用户登录 RoundCube 界面,并负责任地进行钓鱼!


Cobalt Strike 提供可自定义的鱼叉式钓鱼功能,以支持渗透测试或红队电子邮件钓鱼。它支持 HTML 和/或纯文本格式的模板、附件、退信地址、URL 嵌入、远程 SMTP 服务器使用以及每条消息的发送延迟。另一个有趣的功能是能够为每个用户的嵌入 URL 添加唯一令牌以进行点击跟踪。

有关更详细的信息,请查看以下资源:
对于客户端信任和 OPSEC 至关重要的红队和钓鱼演练,将捕获的客户端数据和主要基础设施保留在客户自己的服务器上(本地部署)相比纯云解决方案具有显著优势。这种方法仅将云资产用于轻量重定向器和前置,同时在内部维护敏感操作。
一个稳健的本地 Evilginx 设置通常包括:
Cookie 门控通过要求特定 cookie 才能访问钓鱼门户,从而减少机器人访问和自动扫描:``` (http.host eq "portal.example.com") and (not http.cookie contains "session_token=abc123def456") and not (http.host eq "landing.example.com" and http.request.uri.path eq "/favicon.ico")
此规则会将不包含所需 Cookie 的请求重定向到门户域名,同时豁免 favicon 请求以防止重定向循环。
### Caddy 配置示例```caddyfile
# Redirect direct IP access to prevent fingerprinting
1.2.3.4 {
redir https://legitimate-site.com{uri} permanent
}
landing.example.com {
log {
output file /var/log/caddy/landing_access.log
format console
}
tls internal
encode gzip
reverse_proxy http://127.0.0.1:8000
}
portal.example.com {
log {
output file /var/log/caddy/portal_access.log
format console
}
tls internal
encode gzip
reverse_proxy https://evilginx:443 {
transport http {
versions 1.1
tls_insecure_skip_verify
tls_server_name portal.example.com
}
header_up Host portal.example.com
header_up X-Forwarded-Proto https
}
}
在内部节点上使用适当的标志执行 Evilginx:```bash ./evilginx2 -p ./phishlets -t ./redirectors -developer -debug
**重要提示:** Evilginx 只能从私有网络内部访问;切勿将其 IP 发布到公共 DNS。
### OPSEC 与加固检查清单
1. **切勿在公共 DNS 中暴露 Evilginx IP** - 仅使用私有网络
2. **仅将敏感数据保留在客户端服务器上** - 重定向器不得存储捕获的凭据
3. **加固重定向器** - 轮换域名、使用短 TTL、部署多个临时重定向器
4. **实施 WAF/防火墙规则** - 使用 Cookie 检查、IP 白名单或 UA 验证
5. **分离日志记录与留存** - 将访问日志保留在 Caddy 上,将捕获日志保留在 Evilginx 主机上
6. **避免指纹特征** - 不要使用可预测的模式或相同的 TLS 指纹
这种混合方法(公共重定向器/私有捕获)既提供了云前置的弹性,又保持了将敏感操作保留在本地的安全性和法律优势。
## 钓鱼框架
除了自行搭建钓鱼环境或使用 Cobalt Strike 等渗透测试或红队框架之外,还有大量专门用于电子邮件钓鱼的工具和框架。虽然本 wiki 不会详细介绍每个框架,但下面为每个框架收集了一些资源:
### Gophish
* [Gophish 官方网站](https://getgophish.com/)
* [Gophish GitHub 仓库](https://github.com/gophish/gophish)
* [Gophish 用户指南](https://www.gitbook.com/book/gophish/user-guide/details)
### Phishing Frenzy
* [Phishing Frenzy 官方网站](https://www.phishingfrenzy.com/)
* [Phishing Frenzy GitHub 仓库](https://github.com/pentestgeek/phishing-frenzy)
* [Phishing Frenzy 介绍 - Brandon McCann (@zeknox)](https://www.pentestgeek.com/phishing/introducing-phishing-frenzy)
### 社会工程工具包
* [社会工程工具包 GitHub 仓库](https://github.com/trustedsec/social-engineer-toolkit)
* [社会工程工具包用户手册](https://github.com/trustedsec/social-engineer-toolkit/raw/master/readme/User_Manual.pdf)
### FiercePhish(原 FirePhish)
* [FiercePhish GitHub 仓库](https://github.com/Raikia/FiercePhish)
* [FiercePhish Wiki](https://github.com/Raikia/FiercePhish/wiki)
# 重定向器
## SMTP
“重定向器”可能不是描述我们即将实现目标的最佳词汇,但其目的与我们的其他重定向相同。我们希望从最终电子邮件头中移除任何钓鱼来源的痕迹,并在受害者和后端服务器之间提供缓冲。理想情况下,SMTP 重定向器应易于快速搭建且便于退役。
我们希望配置 SMTP 重定向器执行两个关键操作:
### Sendmail
#### 移除先前的服务器头
将以下行添加到 `/etc/mail/sendmail.mc` 的末尾:```bash
define(`confRECEIVED_HEADER',`by $j ($v/$Z)$?r with $r$. id $i; $b')dnl
在 /etc/mail/access 末尾添加:```bash
IP-to-Team-Server TAB RELAY
Phish-Domain TAB RELAY
[从电子邮件的Received From标头中移除发件人的IP地址](https://www.devside.net/wamp-server/removing-senders-ip-address-from-emails-received-from-header)
[从Postfix设置中移除标头](https://major.io/2013/04/14/remove-sensitive-information-from-email-headers-with-postfix/)
#### 配置一个catch-all地址
这将把发送到*@phishdomain.com的任何电子邮件转发到所选定的电子邮件地址。这对于接收钓鱼电子邮件的任何回复或退信非常有用。```bash
echo PHISH-DOMAIN >> /etc/mail/local-host-names
在 /etc/mail/sendmail.mc 中,紧接在 //Mailer Definitions//(靠近文件末尾)之前添加以下行:```bash
FEATURE(virtusertable', hash -o /etc/mail/virtusertable.db')dnl
将以下行添加到 `/etc/mail/virtusertable` 的末尾:```bash
@phishdomain.com external-relay-address
注意:这两个字段应以制表符分隔
Postfix 提供了比 sendmail 更简单的替代方案,且兼容性更广。Postfix 还通过 Dovecot 提供完整的 IMAP 支持。这使得测试人员能够与回复原始邮件的钓鱼目标进行实时通信,而无需依赖 catch-all 地址,也不必使用钓鱼工具创建新邮件。
关于如何设置 Postfix 邮件服务器用于钓鱼的完整指南,请参阅 Julian Catrambone(@n0pe_sled)的文章 Mail Servers Made Easy。

注意:使用 C2 重定向器时,应在后渗透框架上配置外部监听器,以便通过重定向器域名发送暂存流量。这将使受害主机像 C2 流量一样通过重定向器进行暂存。
socat 可用于将端口 53 上的传入 DNS 数据包重定向到我们的团队服务器。虽然此方法有效,但部分用户报告称,使用此方法时 Cobalt Strike 存在暂存问题或延迟问题。 编辑于 2017 年 4 月 21 日: 以下 socat 命令在 @xorrior 的测试帮助下似乎运行良好:``` socat udp4-recvfrom:53,reuseaddr,fork udp4-sendto::53; echo -ne
[重定向 Cobalt Strike DNS 信标 - Steve Borosh](https://medium.com/rvrsh3ll/redirecting-cobalt-strike-dns-beacons-e3dcdb5a8b9b)
### 用于 DNS 的 iptables
iptables DNS 转发规则已被证明能与 Cobalt Strike 良好配合。似乎不存在 socat 在处理此类流量时出现的那些问题。
以下是一个 DNS 重定向器规则集示例。```bash
iptables -I INPUT -p udp -m udp --dport 53 -j ACCEPT
iptables -t nat -A PREROUTING -p udp --dport 53 -j DNAT --to-destination <IP-GOES-HERE>:53
iptables -t nat -A POSTROUTING -j MASQUERADE
iptables -I FORWARD -j ACCEPT
iptables -P FORWARD ACCEPT
sysctl net.ipv4.ip_forward=1
另外,将“FORWARD”链策略改为“ACCEPT”
有些人可能有需求或需要在内部网络上托管C2服务器。通过结合使用IPTABLES、SOCAT和反向SSH隧道,我们确实可以按以下方式实现这一点。

在这种场景下,我们使用易失性重定向器,通过本节前面描述的规则示例,利用IPTables转发所有DNS流量。接下来,我们从内部C2服务器到主重定向器创建一个SSH反向端口转发隧道。这将把主重定向器在端口6667上接收到的任何流量转发到内部C2服务器的端口6667。然后,在我们的团队服务器上启动socat,将端口6667上收到的任何传入TCP流量分叉到UDP端口53,这正是我们的DNS C2需要监听的端口。最后,我们在主重定向器上类似地设置一个socat实例,将任何传入的UDP端口53流量重定向到端口6667上的SSH隧道中。
注意:使用C2重定向器时,应在你的后渗透框架上配置一个外部监听器,以通过重定向器域名发送暂存流量。这将使被入侵的主机像C2流量本身一样,通过重定向器进行暂存。
socat提供了一种“哑管道”重定向。socat在指定源接口/端口上接收到的任何请求都会被重定向到目标IP/端口。这里没有过滤或条件重定向。另一方面,Apache mod_rewrite提供了多种方法来增强你的钓鱼能力并提高测试基础设施的韧性。mod_rewrite能够基于请求属性(如URI、用户代理、查询字符串、操作系统和IP)执行条件重定向。Apache mod_rewrite使用htaccess文件来配置规则集,规定Apache应如何处理每个传入请求。例如,使用这些规则,你可以将带有默认wget用户代理的服务器请求重定向到目标网站上的合法页面。
简而言之,如果你的重定向器需要执行条件重定向或高级过滤,请使用Apache mod_rewrite。否则,使用带可选iptables过滤的socat重定向就足够了。
socat可用于将指定端口上接收到的任何传入TCP数据包重定向到我们的团队服务器。
将本地主机的TCP端口80重定向到另一台主机端口80的基本语法是:``` socat TCP4-LISTEN:80,fork TCP4::80
如果您的重定向器配置了多个网络接口,可以使用以下语法通过 IP 地址将 socat 绑定到特定接口:```
socat TCP4-LISTEN:80,bind=10.0.0.2,fork TCP4:1.2.3.4:80
在此示例中,10.0.0.2 是重定向器的一个本地 IP 地址,而 1.2.3.4 是远程团队服务器的 IP 地址。
除了 socat 之外,iptables 也可以通过 NAT 执行“哑管道”重定向。要将重定向器的本地端口 80 转发到远程主机,请使用以下语法:``` iptables -I INPUT -p tcp -m tcp --dport 80 -j ACCEPT iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination :80 iptables -t nat -A POSTROUTING -j MASQUERADE iptables -I FORWARD -j ACCEPT iptables -P FORWARD ACCEPT sysctl net.ipv4.ip_forward=1
### SSH 用于 HTTP
我们之前已经介绍了使用 SSH 进行 DNS 隧道。SSH 是一种可靠且稳健的方式,可以突破 NAT,并为植入体提供一条连接至重定向器并进入服务器环境的途径。在设置 SSH 重定向器之前,你必须在 `/etc/ssh/sshd_config` 中添加以下行:```text
# Allow the SSH client to specify which hosts may connect
GatewayPorts yes
# Allow both local and remote port forwards
AllowTcpForwarding yes
要将重定向器的本地端口 80 转发到你的内部服务器,请在内部服务器上使用以下语法:``` tmux new -S redir80 ssh -R *:80:localhost:80 Ctrl+B, D
你也可以同时转发多个端口,例如,如果你希望 443 和 80 同时开放:```
tmux new -S redir80443
ssh <redirector> -R *:80:localhost:80 -R *:443:localhost:443
Ctrl+B, D
在提供载荷和Web资源时,我们希望尽量减少事件响应人员审查文件的可能性,并提高成功执行载荷的几率,无论是为了建立C2还是收集情报。

Jeff Dimmock关于Apache Mod_Rewrite用法和示例的文章:
其他Apache mod_rewrite用法和示例:
要在重定向器服务器上自动设置Apache Mod_Rewrite,请查看Julain Catrambone(@n0pe_sled)的博客文章Mod_Rewrite自动设置以及配套工具。
重定向C2流量的意图有两个方面:隐藏后端团队服务器,以及在事件响应人员浏览时看起来像合法网站。通过使用Apache mod_rewrite和自定义C2配置文件或其他代理方式(如使用Flask),我们可以可靠地将真实的C2流量与调查流量区分开来。
在上述“C2重定向”的基础上,另一种方法是让你的重定向服务器使用Apache的SSL代理引擎来接受入站SSL请求,并将这些请求代理到反向HTTPS监听器。所有阶段都使用加密,你可以根据需要轮换重定向器上的SSL证书。
要使此功能与你的mod_rewrite规则配合使用,你需要将规则放在**“/etc/apache2/sites-available/000-default-le-ssl.conf”**中,前提是你已使用LetsEncrypt(即CertBot)安装了证书。此外,要启用SSL ProxyPass引擎,你需要在同一配置文件中添加以下行:```bash
SSLProxyEngine On
ProxyPass / https://DESTINATION_C2_URL:443/ ProxyPassReverse / https://DESTINATION_C2_URL:443/
SSLProxyCheckPeerCN off SSLProxyCheckPeerName off SSLProxyCheckPeerExpire off
### 其他 Apache mod_rewrite 资源
* [自动化 Apache mod_rewrite 与 Cobalt Strike 配置文件](https://posts.specterops.io/automating-apache-mod-rewrite-and-cobalt-strike-malleable-c2-profiles-d45266ca642)
* [mod-rewrite-cheatsheet.com](http://mod-rewrite-cheatsheet.com/)
* [Apache 2.4 mod_rewrite 官方文档](http://httpd.apache.org/docs/current/rewrite/)
* [Apache mod_rewrite 介绍](https://httpd.apache.org/docs/2.4/en/rewrite/intro.html)
* [Apache mod_rewrite 深入指南](http://code.tutsplus.com/tutorials/an-in-depth-guide-to-mod-rewrite-for-apache--net-6708)
* [Mod_Rewrite/.htaccess 语法检查器](http://www.htaccesscheck.com/)
# 修改 C2 流量
## Cobalt Strike
Cobalt Strike 通过 Malleable C2 配置文件修改其流量。配置文件提供了高度可定制的选项,用于修改服务器 C2 流量在网络上的表现形式。Malleable C2 配置文件可用于增强事件响应规避能力、模仿已知对手,或伪装成目标使用的合法内部应用程序。
* [官方 Malleable C2 配置文件 - GitHub](https://github.com/rsmudge/Malleable-C2-Profiles)
* [Malleable 命令与控制文档 - cobaltstrike.com](https://www.cobaltstrike.com/help-malleable-c2)
* [Cobalt Strike 2.0 - Malleable 命令与控制 - Raphael Mudge](http://blog.cobaltstrike.com/2014/07/16/malleable-command-and-control/)
* [Cobalt Strike 3.6 - 权限提升的路径 - Raphael Mudge](http://blog.cobaltstrike.com/2016/12/08/cobalt-strike-3-6-a-path-for-privilege-escalation/)
* [勇敢的新世界:Malleable C2 - Will Schroeder (@harmj0y)](http://www.harmj0y.net/blog/redteaming/a-brave-new-world-malleable-c2/)
* [如何为 Cobalt Strike 编写 Malleable C2 配置文件 - Jeff Dimmock](https://bluescreenofjeff.com/2017-01-24-how-to-write-malleable-c2-profiles-for-cobalt-strike/)
* [内存中规避(视频系列)- Raphael Mudge](https://www.youtube.com/watch?v=lz2ARbZ_5tE&list=PL9HO6M_MU2nc5Q31qd2CwpZ8J4KFMhgnK)
在开始创建或修改 Malleable C2 配置文件时,务必注意 Beacon 信息放置的数据大小限制。例如,将配置文件配置为在 URL 参数中发送大量数据将需要大量请求。有关更多信息,请参阅 Raphael Mudge 的博客文章 [警惕慢速下载](https://blog.cobaltstrike.com/2018/03/09/beware-of-slow-downloads/)。
如果遇到 Malleable C2 配置文件问题,并注意到 teamserver 控制台输出错误,请参阅 Raphael Mudge 的博客文章 [破碎的承诺与 Malleable C2 配置文件](https://blog.cobaltstrike.com/2018/06/04/broken-promises-and-malleable-c2-profiles/) 获取故障排除提示。
## Empire
Empire 使用通信配置文件,该文件为 GET 请求 URI、用户代理和标头提供自定义选项。配置文件由每个元素组成,元素之间用管道字符分隔,并通过 `listeners` 上下文菜单中的 `set DefaultProfile` 选项进行设置。
以下是一个示例默认配置文件:```bash
"/CWoNaJLBo/VTNeWw11212/|Mozilla/4.0 (compatible; MSIE 6.0;Windows NT 5.1)|Accept:image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*|Accept-Language:en-en"
或者,可以通过在 Empire 初始设置之前修改文件 /setup/setup_database.py 来设置 DefaultProfile 值。这将更改 Empire 将使用的默认通信配置文件。
除了通信配置文件之外,还可以考虑按照 Joe Vest(@joevest)的文章 Empire - Modifying Server C2 Indicators 中介绍的步骤,自定义 Empire 服务器的暂存 URI、服务器标头和默认网页内容。
利用可信赖的合法 Web 服务进行 C2,可以比使用你自己配置的域名和基础设施获得宝贵的优势。配置时间和复杂度因所使用的技术和服务的不同而有所差异。利用第三方服务进行 C2 重定向的一个流行示例是域名前置(Domain Fronting)。
域名前置是一种被审查规避服务和应用程序使用的技术,通过合法且高度受信任的域名来路由流量。支持域名前置的流行服务包括 Google App Engine、Amazon CloudFront 和 Microsoft Azure。需要注意的是,许多提供商(如 Google 和 Amazon)已经实施了针对域名前置的缓解措施,因此本 wiki 中提供的一些链接资源或信息在你尝试使用时可能已经过时。
简而言之,流量使用受信任服务提供商的 DNS 和 SNI 名称(下例中使用的是 Google)。当流量到达边缘服务器(例如位于 gmail.com)时,数据包会根据其 Host 标头中指定的源服务器(例如 phish.appspot.com)进行转发。根据服务提供商的不同,源服务器要么直接将流量转发到指定域名(我们将该域名指向我们的团队服务器),要么需要代理应用程序来执行最后一跳的转发。

有关域名前置工作原理的更详细信息,请参阅白皮书 Blocking-resistant communication through domain fronting 和 TOR 项目的 meek 文档
除了标准的可前置域名(例如任何 google.com 域名)之外,还可以利用其他合法域名进行前置。
有关寻找可前置域名的更多信息,请查看:
许多 PaaS 和 SaaS 提供商为预配的实例提供静态子域名或 URL。如果相关域名通常受到高度信任,那么这些实例可以为你的 C2 基础设施提供比购买的域名和 VPS 更多的信任度。
要设置重定向,你需要确定一个在实例创建时提供静态子域名或 URL 的服务。然后,该实例需要配置基于网络或应用程序的重定向。该实例将充当代理,类似于本 wiki 中讨论的其他重定向器。
另一个值得进一步研究的趣味技术是利用权限过于宽松的 Amazon S3 存储桶进行 C2。请查看 Andrew Luke (@Sw4mp_f0x) 撰写的文章 S3 Buckets for Good and Evil,了解如何将 S3 存储桶用于 C2 的更多细节。此技术可以与 Empire 的第三方 C2 功能结合使用,利用目标自身的合法 S3 存储桶来对付他们。
关于使用 PaaS 进行 C2 的另一个示例,请查看 Scott Sutherland(@_nullbind)撰写的 Databases and Clouds: SQL Server as a C2。
过去,其他第三方服务也曾被用于野外的 C2。利用允许快速发布或修改用户生成内容的第三方网站,可以帮助你规避基于信誉的控制措施,尤其是当该第三方网站普遍受到信任时。
请查看以下资源以了解其他第三方 C2 选项:
攻击基础设施通常很容易被识别,看起来像是合法服务器的外壳。我们需要对基础设施采取额外措施,以增加与目标组织或目标可能使用的服务中的真实服务器融为一体的可能性。
重定向器 可以通过重定向无效 URI、使钓鱼载荷链接过期或阻止常见的事件响应者技术来帮助融入环境;但是,也应关注底层主机及其指标。
例如,在文章 Fall of an Empire 中,John Menerick(@Lord_SQL)介绍了在互联网上检测 Empire 服务器的方法。
为了应对这些及类似的指标,最好修改 C2 流量模式、修改服务器登录页面、限制开放端口以及修改默认响应标头。
有关如何为多种攻击框架执行这些操作及其他策略的更多详细信息,请查看以下文章:
攻击基础设施与其他任何连接到互联网的主机一样可能受到攻击,并且由于其中使用的数据和与目标环境的连接,应被视为高度敏感。
2016 年,最常用的攻击工具中披露了远程代码执行漏洞:
应使用 iptables 过滤不需要的流量,并限制所需基础设施元素之间的流量。例如,如果 Cobalt Strike 团队服务器仅向 Apache 重定向器提供资源,则 iptables 规则应仅允许来自重定向器源 IP 的 80 端口流量。这对于任何管理接口(如 SSH 或 Cobalt Strike 的默认端口 50050)尤其重要。还应考虑阻止非目标国家的 IP。作为替代方案,可以考虑使用 VPS 提供商提供的虚拟机监控程序防火墙。例如,Digital Ocean 提供可以保护一个或多个 droplet 的 Cloud Firewalls。
chattr 可用于团队服务器,以防止 cron 目录被修改。使用 chattr,你可以限制任何用户(包括 root)修改文件,直到移除 chattr 属性。
SSH 应仅限于公钥认证,并配置为使用权限受限的用户进行初始登录。为了增加安全性,可以考虑为 SSH 添加多因素认证。
更新! 任何安全清单都不能缺少定期更新系统和根据需要应用热修复以修复漏洞的提醒。
当然,此列表并未穷尽保护团队服务器安全的所有措施。请在所有基础设施上遵循常见的加固实践:
网上有许多资源讨论基础设施的安全设置和设计。并非每种设计考虑都适用于每种攻击基础设施,但了解有哪些选项以及其他测试人员正在做什么是很有用的。
以下是一些此类资源:
本 wiki 中涵盖的主题可以强化攻击基础设施,但通常需要大量时间进行设计和实施。自动化可用于大幅缩短部署时间,让你在更短的时间内部署更复杂的设置。
请查看以下关于攻击基础设施自动化的资源:
记录所有内容 - 运行复杂的红队基础设施意味着许多移动部件。请务必记录每个资产的功能及其流量的发送位置。
在不同服务提供商和地区之间分散资产 - 基础设施资产应分布在多个服务提供商和地理区域。蓝队成员可能会针对被识别为正在积极执行攻击的提供商提高监控阈值,甚至可能直接阻止某个服务提供商。注意:如果跨境发送加密或敏感数据,请牢记国际隐私法律。
不要过度 - 很容易对高级技术感到兴奋,并想向目标倾泻所有手段。如果你正在模拟特定的对抗性威胁,请仅利用真实威胁行为者使用的技术或威胁行为者技能范围内的技术。如果你的红队测试将长期攻击同一目标,请考虑从“简单”开始,并在评估过程中逐步使用更高级的战术。红队技术随蓝队一起演进将不断推动组织前进,而一次性用所有技术打击蓝队可能会使蓝队不堪重负并减慢学习过程。
监控日志 - 在整个参与过程中应监控所有日志:SMTP 日志、Apache 日志、socat 重定向器上的 tcpdump、iptables 日志(特定于流量转发或定向过滤)、Web 日志、Cobalt Strike/Empire/MSF 日志。将日志转发到集中位置(例如使用 rsyslog),以便于监控。操作员终端数据保留可能有助于在操作期间回顾历史命令使用情况。@Killswitch_GUI 创建了一个名为 lTerm 的易于使用的程序,可以将所有 bash 终端命令记录到集中位置。使用 lTerm 记录所有终端输出。请查看 Vincent Yiu 的文章 CobaltSplunk,了解如何将 Cobalt Strike 日志发送到 Splunk 以进行高级基础设施监控和分析的示例。* 实现高价值事件告警 - 配置攻击基础设施,为高价值事件生成告警,例如新的 C2 会话或凭据捕获命中。实现告警的一种流行方式是通过聊天平台的 API,例如 Slack。查看以下关于 Slack 告警的文章:Slack Shell Bot - Russel Van Tuyl (@Ne0nd0g)、Slack Notifications for Cobalt Strike - Andrew Chiles (@AndrewChiles)、Slack Bots for Trolls and Work - Jeff Dimmock (@bluscreenfojeff)
对事件响应进行指纹识别 - 如果可能,尝试在评估开始前被动或主动地对 IR 操作进行指纹识别。例如,向目标发送一封平庸的网络钓鱼电子邮件(使用不相关的基础设施),并监控该基础设施收到的流量。IR 团队的调查可以披露大量关于该团队如何运作以及他们使用何种基础设施的信息。如果这能在评估前确定,就可以直接过滤或重定向。
衷心感谢以下所有人员(按字母顺序排列),他们为 wiki 贡献了工具、技巧或链接,同时也感谢任何编写了本 wiki 中引用的工具或文章的人!