红蓝对抗基础设施架构设计Wiki(上)

此Wiki的目的是为渗透测试人员提供用于设置弹性Red Team基础架构的资源。这是为了补充Steve Borosh(@424f424f)和Jeff Dimmock(@bluscreenofjeff) BSides NoVa 2017演讲“Doomsday Preppers:强化你的红队基础设施”的议题 (点此下载PPT)。
如果你有想要添加的内容,请提交Pull Request或在repo上提交问题。
感谢本维基中引用内容的所有作者以及所有人!
目录
设计注意事项
功能隔离
使用重定向器
样例设计
更多资源
域名
域名分类和黑名单检查资源
网络钓鱼
轻松的发起基于Web的网络钓鱼
Cobalt Strike 网络钓鱼
网络钓鱼框架
重定向器
SMTP
发送邮件
删除以前的服务器标头
配置一个 catch-all 地址
后缀
DNS
使用socat 转发DNS 流量
使用 iptables 转发 DNS 流量
HTTP(S)
socat 与mod_rewrite的比较
使用 socat 转发HTTP 流量
使用 iptables 转发HTTP 流量
使用 SSH 转发HTTP 流量
有效载荷和Web重定向
C2 重定向
使用 HTTPS 进行C2重定向
其他的 Apache mod_rewrite 资源
Modifying C2 Traffic
Cobalt Strike
Empire
第三方 C2  信道介绍
Domain Fronting
关于 Domain Fronting 的其他资源
PaaS 重定向器
其他第三方C2
隐藏基础设施
保护基础设施
自动部署
一般提示
感谢贡献者
设计注意事项
功能隔离
在设计需要经得起积极响应或持续长期参与(数周,数月,数年)的红色团队基础架构时,根据功能划分每个资产非常重要。当活动资产开始被检测到时,这就为蓝队提供了弹性和灵活性。例如,如果识别出评估的网络钓鱼电子邮件,则红队只需要创建新的SMTP服务器和有效载荷托管服务器,而不是整个团队服务器设置。
考虑将这些功能分离到不同的资产:
· SMTP网络钓鱼SMTP
· Phishing payloads
· 网络钓鱼有效载荷
· 长期指挥和控制(C2)服务器
· 短期C2 服务器
每个社会工程活动可能都需要这些功能。由于活动事件响应在红队评估中是典型的,因此应为每个活动实施一组新的基础设施。
使用重定向器
为了进一步恢复和隐藏,每个后端资产(即团队服务器)都应该在其前面放置一个重定向器。目标是始终在目标和后端服务器之间拥有主机。以这种方式设置基础架构可以更快,更轻松地变更新的基础架构 – 无需重新组建新的团队服务器,迁移会话以及重新连接未被发现的后端资产。
常见的重定向器类型:
· SMTP
· 有效载荷
· 网络流量
· Web Traffic
· C2服务器(HTTP(S),DNS等)
每个重定向器类型都有多个最适合不同场景的实现选项。这些选项将在Wiki的后续的重定向器章节中进一步详细讨论。重定向器可以是VPS主机,专用服务器,甚至是在Platform-as-a-Service实例上运行的应用程序。
样例设计
这是一个样例设计,在你的脑子里记住功能隔离和重定向器的使用:

更多资源
· 分布式运作红队渗透测试活动的愿景 – Raphael Mudge (@armitagehacker)
· 红队运作的基础设施现状 – Raphael Mudge
· 高级威胁战术 (2/9): 基础设施 – Raphael Mudge
· 基于云的分布式C2重定向器- Raphael Mudge
· 六个红队基础设施技巧- Alex Rymdeko-Harvey (@killswitch-gui)
· 如何使用数字海洋(Digital Ocean)构建C2基础设施 – Part 1 – Lee Kagan (@invokethreatguy)
· 使用 Terraform 自动化部署红队基础设施- Part 1 – Rasta Mouse      (@_RastaMouse)
域名
根据你的目标使用的产品及其配置,感知域名信誉会有很大差异。因此,选择适用于你的目标的域名并不是一门精确的科学。开源情报收集(OSINT)对于帮助对控制状态和检查域名的资源进行最佳猜测至关重要。幸运的是,在线广告客户面临着同样的问题,并创造了一些我们可以利用的解决方案。
expireddomains.net是一个用于搜索最近过期或删除的域名的搜索引擎。它提供搜索和高级过滤,例如到期时间,反向链接数量,Archive.org快照数量,SimilarWeb得分。使用该网站,我们可以注册预先使用的域名,这些域名将与域名的使用期限一致,看起来与我们的目标类似,或者只是可能融入我们的目标网络。

在为C2或数据泄露选择域名时,请考虑选择归类为财务或医疗保健的域名。由于存在法律或数据敏感性问题,许多组织不会对这些类别执行SSL middling。确保你选择的域名与之前的任何恶意软件或网络钓鱼活动无关,这一点也很重要。
Charles Hamilton((@MrUn1k0d3r)编写的工具CatMyFish使用expireddomains.net和BlueCoat自动执行搜索和Web分类检查。可以对其进行修改,以便对搜索应用更多过滤器,甚至可以对你注册的资产进行长期监控。
Joe Vest(@joevest)和Andrew Chiles(@andrewchiles)的另一个工具DomainHunter可以返回BlueCoat / WebPulse,IBM X-Force和Cisco Talos分类,域名使用时长,备用可用TLD,Archive.org链接和HTML报告。此外,它还使用Malwaredomains.com和MXToolBox执行已知恶意软件和网络钓鱼活动的检查。该工具还包括绕过BlueCoat / WebPulse验证码的OCR支持。有关详细信息,请查看有关该工具的初始版本。
还有另一个由Max Harley (@Max_68)编写的工具AIRMASTER,通过使用expireddomains.net和Bluecoat来查找分类域名。该工具使用OCR绕过BlueCoat验证码,提高了搜索速度。
如果以前注册的域名不可用或你更喜欢自己注册的域名,则可以自行对域名进行分类。使用下面的链接或Dominic Chell(@domchell)编写的Chameleon之类的工具。在确定域名的分类时,大多数分类产品将忽略重定向或克隆的内容。有关变色龙(Chameleon )使用的更多信息,请查看Dominic的文章——域名分类不再是安全边界。

最后,确保你的DNS设置已正确传播。
· DNS Propogation      Checker
域名分类和黑名单检查资源
· McAfee(麦咖啡)
· Fortiguard
· Symantec + BlueCoat
· Checkpoint (需要免费帐户)
· Palo Alto
· Sophos (仅提交;不检查) – 单击提交样本 -> Web 地址
· TrendMicro(趋势)
· Brightcloud
· Websense  (Forcepoint)
· Lightspeed Systems
· Chameleon
· SenderBase
· MultiBL
· MXToolBox – 黑名单
网络钓鱼设置
轻松的发起基于Web的网络钓鱼
轻松和网络钓鱼这两个词似乎从未真正融合在一起。建立适当的网络钓鱼基础设施可能是一个真正痛苦的事情。以下教程将为你提供快速设置网络钓鱼服务器的知识和工具,该服务器将“大多数”垃圾邮件过滤器传递至今,并为你提供RoundCube界面,以实现轻松的网络钓鱼体验,包括与目标进行双向通信。关于网络钓鱼有很多设置的方法和文章。这只是一种方法。
一旦你拥有通过上一节中列出的正确检查的域并让你的网络钓鱼服务器启动,你就需要为你的域名创建一对“A”记录,如图所示。

接下来,ssh到你的网络钓鱼服务器,并确保你的/etc/hosts中列出了正确的FQDN主机名。例如:
“127.0.0.1 email.yourphishingserver.com email localhost”
现在,你只需几个简单的步骤即可安装网络前端进行网络钓鱼。首先将最新的 iRedMail  “BETA”版本下载到你的网络钓鱼服务器上。一个简单的方法是右键单击下载按钮,复制链接地址,使用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,列出你的DKIM密钥的新命令应该是 “amavisd-new showkeys”。
对于DMARC,我们可以使用(https://www.unlocktheinbox.com/dmarcwizard/)来生成我们的dmarc条目。

现在,创建一个用户进行网络钓鱼的用户。

与你的新用户一起登录RoundCube界面并负责任地进行网络钓鱼!


Cobalt Strike网络钓鱼
Cobalt Strike提供可定制的鱼叉式网络钓鱼功能,以支持外部渗透测试人员或红队电子邮件网络钓鱼。它支持HTML和/或纯文本格式的模板,附件,回弹地址,URL嵌入,远程SMTP服务器使用和单消息发送延迟。另一个有趣的功能是能够为每个用户的嵌入式URL添加唯一标记以进行点击跟踪。

有关更多详细信息,请查看以下资源:
· Cobalt Strike – 鱼叉式网络钓鱼说明文档
· Cobalt Strike 官方博客 – 什么是网络钓鱼技术以及如何利用?
· 使用 Cobalt Strike 发起鱼叉网络钓鱼攻击-  Raphael Mudge
· 高级威胁战术(3 / 9) – 有针对性的攻击 – Raphael Mudge
网络钓鱼框架
除了使用你自己的网络钓鱼设置或使用像Cobalt Strike这样的渗透测试或红色团队框架之外,还有许多专门用于电子邮件网络钓鱼的工具和框架。虽然这个wiki不会详细介绍每个框架,但下面收集了一些资源或许对你有用:
Gophish
· Gophish 官当网站
· Gophish GitHub 存储库
· Gophish 用户指南
 Frenzy网络钓鱼
· Phishing Frenzy 官方网站
· Phishing Frenzy  GitHub 存储库
· 网络钓鱼简介 Frenzy – Brandon McCann (@zeknox)
社会工程学工程师工具包
· 社会工程学工程师工具包 GitHub 存储库
· 社会工程学工程师工具包用户手册
FiercePhish(原FirePhish)
· FiercePhish GitHub  存储库
· FiercePhish Wiki
转向器或重定向器
SMTP
“重定向器”可能不是描述我们将要实现的目标的最佳词汇,但其目标与我们的其他重定向相同。我们希望从最终的电子邮件标头中删除我们的网络钓鱼源的任何痕迹,并在受害者和我们的后端服务器之间提供缓冲区。理想情况下,SMTP重定向器将需要快速设置并易于停用。
我们要将两个关键操作配置为要执行的SMTP重定向器:
发邮件
删除以前的服务器标头
将以下行添加到/etc/mail/sendmail.mc的末尾:
define(`confRECEIVED_HEADER',`by $j ($v/$Z)$?r with $r$. id $i; $b')dnl
添加到/ etc / mail / access的末尾:

IP-to-Team-Server *TAB* RELAY
Phish-Domain *TAB* RELAY
如何从收到的邮件头中删除发件人的IP地址
如何从邮箱后缀设置中移除标头
配置一个catch-all地址
这会将*@phishdomain.com收到的任何电子邮件转发至所选的电子邮件地址。这对于接收针对网络钓鱼电子邮件的任何回复或邮件退回非常有用。
echo PHISH-DOMAIN >> /etc/mail/local-host-names
在/etc/mail/sendmail.mc的 //Mailer Definitions//(到最后)之前添加以下行:
FEATURE(`virtusertable', `hash -o /etc/mail/virtusertable.db')dnl
将以下行添加到/ etc / mail / virtusertable的末尾:
@phishdomain.com  external-relay-address
注意:这两个字段应以制表符分隔
邮箱后缀
Postfix为sendmail提供了一种更容易的替代方案,具有更广泛的兼容性。 Postfix还为Dovecot提供了完整的IMAP支持。这允许渗透测试人员能够实时的与网络钓鱼目标对原始消息做出响应进行通信而不是依赖于catch-all地址并且必须使用你的网络钓鱼工具创建新消息。
有关设置Postfix邮件服务器进行网络钓鱼的完整指南,请参阅Julian Catrambone(@n0pe_sled)的文章——如何让邮件服务器变得简单?。
DNS

注意:使用C2重定向器时,应在后漏洞利用框架上配置外部监听器,以通过重定向器域名发送分段流量。这将导致受感染的主机像C2流量本身一样通过重定向器进行分级。
使用socat 转发DNS 流量
socat可用于将端口53上传入的DNS数据包重定向到我们的团队服务器。虽然这种方法有效,但是有些用户报告了Cobalt Strike的暂存问题以及使用此方法的延迟问题。编辑4/21/2017:由于来自@xorrior的测试,以下socat命令似乎运行良好:
socat udp4-recvfrom:53,reuseaddr,fork udp4-sendto:; echo -ne
重定向 Cobalt Strike DNS Beacons – Steve Borosh
使用 iptables 转发 DNS 流量
iptables DNS转发规则可以与Cobalt Strike一起使用。似乎socat处理此类流量没有任何的问题。
下面是DNS重定向器规则集的示例。
iptables -I INPUT -p udp -m udp --dport 53 -j ACCEPT
iptables -t nat -A PREROUTING -p udp --dport 53 -j DNAT --to-destination :53
iptables -t nat -A POSTROUTING -j MASQUERADE
iptables -I FORWARD -j ACCEPT
iptables -P FORWARD ACCEPT
sysctl net.ipv4.ip_forward=1
此外,将“FORWARD”链条策略更改为“接受”
DNS重定向也可以在NAT后面完成
有些人可能需要或需要在内部网络上托管c2服务器。例如,使用IPTABLES,SOCAT和反向ssh隧道的组合,我们当然可以通过以下方式实现此目的。

在这种情况下,我们使用IPTables的volitile重定向器使用本节前面介绍的规则示例转发所有的DNS流量。接下来,我们从内部c2服务器到主重定向器创建SSH反向端口转发隧道。这会将主重定向器在端口6667上接收的任何流量转发到内部c2服务器的6667端口上。现在,在我们的团队服务器上启动socat,将端口6667上的任何传入的TCP流量分配到UDP的 53端口上,这就是我们需要监听的DNS c2。最后,我们类似地在主重定向器上设置一个socat实例,将任何传入的UDP的 53端口上的流量重定向到端口6667上的SSH隧道。
HTTP(S)
注意:使用C2重定向器时,应在后漏洞利用框架上配置外部监听器,以通过重定向器域名发送分段流量。这将导致受感染的主机像C2流量本身一样通过重定向器进行分级。
socat与mod_rewrite的比较
socat提供了“dumb pip”(哑管)重定向。 socat在指定的源接口或端口上接收的任何请求都将重定向到目标IP 或端口。没有过滤或条件重定向。另一方面,Apache mod_rewrite提供了许多方法来加强你的网络钓鱼并提高测试基础架构的弹性。 mod_rewrite能够根据请求属性执行条件重定向,例如URI,用户代理,查询字符串,操作系统和IP。 Apache mod_rewrite使用htaccess文件来配置Apache应如何处理每个传入请求的规则集。例如,使用这些规则,你可以使用默认的wget用户代理将发送到你的服务器的请求重定向到目标网站上的合法页面。
简而言之,如果你的重定向器需要执行条件重定向或高级过滤,请使用Apache mod_rewrite。否则,使用带有可选的iptables过滤规则的socat重定向就足够了。
使用socat转发HTTP流量
socat可用于将指定端口上的任何传入的TCP数据包重定向到我们的团队服务器。
将localhost上的TCP 80端口重定向到另一台主机上的80端口的基本语法是:
socat TCP4-LISTEN:80,fork TCP4::80
如果你的重定向器配置了多个网络接口,则可以使用以下语法将socat绑定到特定接口(按IP地址):
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地址。
使用 iptables 转发HTTP 流量
除了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:

# Allow the SSH client to specify which hosts may connect #允许SSH客户端指定可以连接的主机
GatewayPorts yes
# Allow both local and remote port forwards#允许本地和远程端口转发
AllowTcpForwarding yes
要将重定向器的本地80端口转发到内部的teamrver(团队服务器),请在内部服务器上使用以下语法:
tmux new -S redir80
ssh  -R *:80:localhost:80
Ctrl+B, D
你还可以转发多个端口,例如,如果你希望一次性打开443和80端口:
tmux new -S redir80443
ssh  -R *:80:localhost:80 -R *:443:localhost:443
Ctrl+B, D