- 设计注意事项 (Design Considerations)
- 功能分离 (Functional Segregation)
- 使用转向器 (Using Redirectors)
- 设计举例 (Sample Design)
- 更多资源 (Further Resources)
- 域名 (Domains)
- 分类和黑名单检查资源列表 (Categorization and Blacklist Checking Resources)
- 钓鱼 (Phishing)
- 基于 Web 的钓鱼 (Easy Web-Based Phishing)
- Cobalt Strike 钓鱼 (Cobalt Strike Phishing)
- 网络钓鱼框架 (Phishing Frameworks)
- 转向器 (Redirectors)
- SMTP 协议 (SMTP)
- Sendmail 软件 (Sendmail)
- 移除之前的服务器头 (Remove previous server headers)
- 配置一个通用地址 (Configure a catch-all address)
- Postfix 软件 (Postfix)
- Sendmail 软件 (Sendmail)
- DNS 协议 (DNS)
- socat 之 DNS (socat for DNS)
- iptables 之 DNS (iptables for DNS)
- HTTP[S] 协议 (HTTP[S])
- socat 与 mod_rewrite (socat vs mod_rewrite)
- socat 之 HTTP (socat for HTTP)
- iptables 之 HTTP (iptables for HTTP)
- ssh 之 HTTP (ssh for HTTP)
- Payloads 和 Web 重定向 (Payloads and Web Redirection)
- C2 重定向 (C2 Redirection)
- C2 使用 HTTPS 重定向 (C2 with HTTPS)
- 其他 Apache mod_rewrite 资源 (Other Apache mod_rewrite Resources)
- SMTP 协议 (SMTP)
- 修改 C2 流量 (Modifying C2 Traffic)
- Cobalt Strike
- Empire
- 第三方 C2 频道 ([Third-Party C2 Channels)
- Domain Fronting 技术 (Domain Fronting)
- Domain Fronting 更多参考 (Further Resources on Domain Fronting)
- PaaS 重定向 (PaaS Redirectors)
- 其他第三方 C2 (Other Third-Party C2)
- Domain Fronting 技术 (Domain Fronting)
- 隐蔽基础设施 (Obscuring Infrastructure)
- 保护基础设施 (Securing Infrastructure)
- 自动部署 (Automating Deployments)
- 提示&建议 (General Tips)
- 感谢列表 (Thanks to Contributors)
一、设计注意事项
1.1 功能分离
在设计红队的网络基础设施架构时,要考虑到否能够提供长期(数周、数月、数年)和稳定的响应服务,这要根据功能来拆分每个资产服务,这一点非常重要。当网络对抗中的资产服务被(蓝队)发现时,将会造成对方的警觉。 而功能分离的好处是当红队的网络钓鱼电子邮件评估系统被识别出来时,红队只需要重新创建一个新的SMTP
服务器和Payload
主机即可,而不是重新搭建整套网络的基础设施。
在不同资产(服务器)上分离这些功能:
- SMTP 钓鱼
- 钓鱼使用的 Payloads
- 长期的 C2(Command and Control)
- 短期的 C2(Command and Control)
每次社工活动都可能需要这些功能,由于红队具有主动出击的特性,所以每一次活动都需要重新部署一套新的基础设施(功能资产模块化)。
1.2 使用转向器
为了进一步提高系统弹性和隐蔽性,每个后端资产(即团队服务器)都应该在其前面放置一个转向器(redirector)。 这样的目的是保证目标和我们的后端服务器之间间接的建立连接。 这种方式有两种好处:1.是能够解耦各个功能资产服务;2.是能够达到隐蔽效果。当某一个资产服务被蓝队发现时,无需部署整套后端服务,便可进行迁移会话、重连接后端的未焚毁的资产等。
常见的转向器(redirector)类型:
- SMTP
- Payloads
- Web 流量
- C2 (HTTP[S]、DNS、等)
每个转向器(redirector)类型都有多个最适合不同场景的实现选项。 这些选项将在本文的”转向器”部分进一步详细讨论。 这里的转向器(redirector)可以是VPS
主机、专用服务器、甚至是在 PaaS
上运行的应用程序。
1.3 设计举例
下面这个样例,使用了功能分离和转向器(redirector)的设计思路。其中LT DNS C2
代表长期的 DNS C2 服务; ST DNS C2
代表短期的 DNS C2 服务;ST HTTP C2
代表短期的 HTTP C2 服务。
1.4 更多资源
A Vision for Distributed Red Team Operations - Raphael Mudge (@armitagehacker)
Infrastructure for Ongoing Red Team Operations - Raphael Mudge
Advanced Threat Tactics (2 of 9): Infrastructure - Raphael Mudge
Cloud-based Redirectors for Distributed Hacking - Raphael Mudge
6 Red Team Infrastructure Tips - Alex Rymdeko-Harvey (@killswitch-gui)
How to Build a C2 Infrastructure with Digital Ocean – Part 1 - Lee Kagan (@invokethreatguy)
Automated Red Team Infrastructure Deployment with Terraform - Part 1 - Rasta Mouse (@_RastaMouse)
二、域名
根据目标所使用的产品及其构造,来选择具有迷惑性的域名至关重要。 由于,选择一个适用于你目标的域名是非常繁琐和“无规矩”可寻的。OSINT(开源情报收集)可以更好的帮助推测管理所需要的资源,这个很重要(开源情报的重要与便利性)。 庆幸的是域名商也需要知道域名的状态与资产信息,并且他们提供了一些查询接口,这也会我们创建了一些便利的条件。
expireddomains.net 是一个收集最近过期或已丢弃域名的引擎。 它提供了搜索和高级过滤,例如:到期时间、反向链接数量、archive.org快照数量、SimilarWeb 分数。 使用 SimilarWeb 网站,我们可以注册预先使用的域,这些域将与目标域名的年份相同,会使它看起来与我们的目标域类似,使他融入我们的目标网络来迷惑对手。
在为 C2 或数据回传选择域时,请优先考虑“财务”或“医疗保健”域的分类。由于法律或数据敏感性问题原因,许多组织不会在这些分类中执行 SSL 中间人。请确保你选择的域名与之前的任何恶意软件或网络钓鱼系列没有关联也很重要。
Charles Hamilton(@ MrUn1k0d3r)的工具CatMyFish会自动执行 expireddomains.net
的搜索,并且会使用bluecoat.com
来检查网站的所属分类。你可以对过滤器进行修改,以便搜索更多内容,你还可以利用它来长期监控你的注册资产(域名资产)。
Joe Vest(@joevest) 和 Andrew Chiles(@andrewchiles)提供了另一个工具DomainHunter,它会返回一个表格,主要内容包括 BlueCoat
、IBM X-Force
和Cisco Talos
中查询出的分类,域名年龄、可用的TLDs、Archive.org链接和HTML报告等信息。 此外,它使用malwaredomains.com
和mxtoolbox.com
来检查域名是否存在已知的恶意软件和网络钓鱼活动,该工具还包括了绕过BlueCoat/WebPulse
验证码的OCR
功能(查看该工具更多详细信息)。
(上图为译者提供)
Max Harle的另一个工具AIRMASTER使用 expireddomains.net
和Bluecoat
来查找域名的分类。该工具使用OCR
绕过BlueCoat
验证码来提高搜索速度。
如果以前注册的域名不可用(域名分类不正确或不理想),或者使用自己注册的域名(域名没有进行分类)时,你可以克隆或重定向到一个相似分类的域名上,然后在手动提交你的域名分类。你可以使用Dominic Chell开发的Chameleon工具。大多数产品在确认域名的分类时,都会忽略重定向或克隆的网站内容。 有关Chameleon使用的更多信息,请查看Dominic的帖子 Categorisation is not a security boundary。
最后,确保你的DNS
设置正确, 这里可以借助 DNS Propogation Checker 来检验。
2.1 分类和黑名单检查资源列表
- McAfee
- Fortiguard
- Symantec + BlueCoat
- Checkpoint (requires free account)
- Palo Alto
- Sophos (submission only; no checking) - Click Submit a Sample -> Web Address
- TrendMicro
- Brightcloud
- Websense (Forcepoint)
- Lightspeed Systems
- Chameleon
- SenderBase
- MultiBL
- MXToolBox - Blacklists
三、网络钓鱼设置
3.1 基于 Web 的钓鱼
简单操作和网络钓鱼似乎不可同时兼得,建立一个适当的网络钓鱼基础设施可能是一个非常痛苦的事。 这里将为你提供快速设置一个钓鱼服务器的知识和工具,该服务器可以绕过大多数垃圾邮件过滤器,并为你提供一个简单的网络钓鱼体验,包括与你的目标进行双向通信的RoundCube
界面。 网上有很多设置网络钓鱼的方法,这里只是其中的一种。
一旦你的域名通过了上面的设置与检查,并且你的钓鱼服务器已启动,那么首先你需要为你的域名创建一条“A”记录,如图所示。
接下来,进入你的钓鱼服务器并确保你的/etc/hosts
中列出了正确的FQDN
主机名。
示例: 127.0.0.1 mail.yourphishingserver.com mail localhost
现在,你只需几个简单的步骤即可安装网络前端来进行网络钓鱼。首先下载iRedMail的最新版本到你的钓鱼服务器上,并解压tar -xvf iRedMail-0.9.8.tar.bz2
。进入到解压后的文件夹,并为iRedMail.sh
脚本添加可执行权限(chmod +x iRedMail.sh
)以root
用户身份执行脚本,按照提示操作,然后重新启动服务器。
你需要确保你的邮件服务器拥有所有正确的DNS
记录(相关记录设置请参考https://docs.iredmail.org/setup.dns.html)。对于 DKIM(DomainKeys Identified Mail,域名密钥识别邮件)使用命令amavisd-new showkeys
来列出你的DKIM
密钥。
(上图为译者提供)
对于DMARC
(Domain-based Message Authentication Reporting and Conformance, 基于域的消息认证报告一致性)我们可以使用https://www.unlocktheinbox.com/dmarcwizard/在线生成我们的DMARC
条目。
现在,创建一个用户进行钓鱼。
登录到RoundCube
界面, 使用新用户开始钓鱼吧!
3.2 Cobalt Strike 钓鱼
Cobalt Strike
提供可自定义的钓鱼功能来帮助Pentest(渗透测试)
和红队。它支持 HTML 和纯文本(plaintext)格式的模板、附件、反弹地址、URL 嵌入、使用远程 SMTP 服务器以及每条消息延迟发送。你还可以为每个用户嵌入的 URL 添加唯一标记以进行点击跟踪。
有关更多详细信息,请查看以下资源:
- Cobalt Strike - Spear Phishing documentation
- Cobalt Strike Blog - What’s the go-to phishing technique or exploit?
- Spear phishing with Cobalt Strike - Raphael Mudge
- Advanced Threat Tactics (3 of 9) - Targeted Attacks - Raphael Mudge
3.3 网络钓鱼框架
除了搭建自己的网络钓鱼服务外,还有许多像Cobalt Strike
这种专用于电子邮件钓鱼的工具和框架。这篇文章不会详细介绍每个框架,但下面提供了一些参考资料:
3.3.1 Gophish
3.3.2 Frenzy
- Phishing Frenzy Official Site
- Phishing Frenzy GitHub Repo
- Introducing Phishing Frenzy - Brandon McCann (@zeknox)
3.3.3 Social-Engineer 工具包
3.3.4 FiercePhish (formerly FirePhish)
四、转向器
4.1 SMTP 协议
“转向器(Redirector)”可能不是描述我们要实现此功能的最佳词语,但其目的与我们使用的其他重定向功能相同。 我们希望从最终的电子邮件头中删除钓鱼邮件的所有痕迹,并在受害者与我们的后端服务器之间提供缓冲区。 理想情况下SMTP
转向器安装快速并易于停止。
我们想要配置SMTP
转向器来执行两个关键操作:
4.1.1 Sendmail 软件
移除之前的服务器头
将以下行添加到结尾 /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
Removing Sender’s IP Address From Email’s Received From Header
Removing Headers from Postfix setup
配置一个通用地址
这会将会把收到的任何电子邮件转发到*@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
注意:这两个字段应该以制表符(\t)分隔
4.1.2 Postfix 软件
Postfix
提供了一个更容易替代Sendmail
而且提供了更好的兼容性。 Postfix
还为Dovecot
提供全面的IMAP
支持。这使得测试人员能够实时地与对原始消息做出响应的钓鱼攻击目标相对应,而不是依靠全部通讯地址,并且必须使用钓鱼工具创建新消息。
Julian Catrambone’s(@n0pe_sled)提供了一个设置Postfix
邮件服务器进行网络钓鱼的完整指南Mail Servers Made Easy。
4.2 DNS 协议
注意:使用 C2 转向器时,应在你的后渗透框架中配置外部侦听器,以通过转向器域发送分段流量。 这会使受感染的主机像 C2 流量本身一样分段通过转向器。
4.2.1 socat 之 DNS
socat
可用于将端口 53 上的传入DNS
数据包重定向到我们的团队服务器, 此方法很有效。目前,某些用户已为 Cobalt Strike
提出了这个功能issues需求。
由于来自 @xorrior 的测试,以下 socat 命令似乎很好用:
socat udp4-recvfrom:53,reuseaddr,fork udp4-sendto:; echo -ne
Redirecting Cobalt Strike DNS Beacons - Steve Borosh
4.2.2 iptables 之 DNS
iptables
转发DNS
规则已被发现可与Cobalt Strike
配合使用。 貌似socat
暂时还处理不了这类流量的问题(NAT穿透)。
下面是一个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”链策略更改为“ACCEPT”。
DNS重定向也可以在NAT后面完成
有时候可能需要在内部网络上托管C2
服务器。 使用iptables
、socat
和反向SSH
隧道的组合,我们可以通过以下方式实现这一点。
在这种情况下,我们使用iptables
转发所有DNS
流量。 接下来,我们创建一个从我们的内部C2
服务器到我们的主转向器的SSH
反向端口转发隧道。 这会将主转向器在端口 6667 上接收的任何流量转发到端口 6667 上的内部C2
服务器。现在,启动服务器上的socat
将端口 6667 上的任何传入TCP流量分流到 UDP 端口 53 ,这就是我们的 DNS C2 需要监听。 最后,我们在主转向器上同样设置一个socat
实例,将任何传入的 UDP 端口 53 流量重定向到端口 6667 上的SSH隧道。
4.3 HTTP(S) 协议
4.3.1 socat 与 mod_rewrite
socat
提供了dumb pipe
重定向,在指定的源接口/port上接收到的任何请求都会被重定向到目标IP/port,但socat
没有过滤或设置条件的功能。 Apache
的mod_rewrite
模块提供了许多方法来加强钓鱼攻击并增强测试基础架构的弹性。 mod_rewrite
能够根据请求属性(如URI、User-Agent、请求参数、操作系统和IP)执行条件重定向。Apache
的mod_rewrite
使用htaccess
文件来配置Apache
应该如何处理每个传入请求的规则集。 例如:使用这些规则,你可以使用默认wget
的User-Agent
请求重定向到你的服务器,从而将其转到目标网站上的合法页面。
简而言之,如果你的转向器(redirector)需要执行条件重定向或高级过滤,请使用Apache
的mod_rewrite
。 也可使用socat
重定向并iptables
过滤。
4.3.2 socat 之 HTTP
socat
可用于将指定端口上的任何传入 TCP 数据包重定向到你的服务器。将localhost
上的 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 地址。
4.3.3 iptables 之 HTTP
除了socat
, iptables
可以通过 NAT 执行dumb pipe
重定向。 要将转向器的本地端口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
4.3.4 SSH 之 HTTP
我们之前已经介绍过使用SSH
进行DNS
隧道。 SSH
作为一种坚实可靠的方式来突破NAT
并获得种植体连接转向器和服务器环境的方式。 首先,你必须设置GatewayPorts
转发,否则将无法正常使用:
nano /etc/ssh/sshd_config
add GatewayPorts yes
要将转向器的本地端口 80 转发到你的内部服务器,命令如下:
tmux new -S redir80
ssh -R *:80:localhost:80
Ctrl+B, D
译者注:上面的命令第一和第三条非必须,这里作者使用tmux
进行 Session 保持,tmux new -S redir80
使用tmux
开启一个 shell,Ctrl+B, D
隐藏tmux
操作界面, 使用tmux ls
显示 Seesion。
你也可以转发多个端口,例如:如果希望 443 和 80 一次全部打开:
tmux new -S redir80443
ssh -R *:80:localhost:80 -R *:443:localhost:443
Ctrl+B, D
4.3.5 Payloads 与 Web 重定向
当我们的Payloads
(服务)和网络资源开启时,我们希望降低被检测到的风险,同时希望无论是建立C2
还是收集信息payload
都能被高效的执行。
下面是 Jeff Dimmock 关于Apache
的mod_rewrite
的用法和示例:
- Strengthen Your Phishing with Apache mod_rewrite
- Invalid URI Redirection with Apache mod_rewrite
- Operating System Based Redirection with Apache mod_rewrite
- Combatting Incident Responders with Apache mod_rewrite
- Expire Phishing Links with Apache RewriteMap
- Apache mod_rewrite Grab Bag
- Serving Random Payloads with Apache mod_rewrite
其他Apache
的mod_rewrite
的用法和示例:
要在服务器上自动设置Apache
的mod_rewrite
重定向器,请查看 Julain Catrambone’s(@ n0pe_sled) 博客文章Mod_Rewrite Automatic Setup 和 accompanying tool。
4.3.6 C2 重定向
重定向 C2 流量的意图有两方面:隐藏后端服务器;蒙蔽相关的调查者,让他们以为这是个合法网站。 通过使用Apache
的mod_rewrite
和自定义C2配置文件或其他代理(比如使用Flask),我们可以高效的过滤出来自调查 C2 的真实流量。
- Cobalt Strike HTTP C2 Redirectors with Apache mod_rewrite - Jeff Dimmock
- Securing your Empire C2 with Apache mod_rewrite - Gabriel Mathenge (@_theVIVI)
- Expand Your Horizon Red Team – Modern SAAS C2 - Alex Rymdeko-Harvey (@killswitch-gui)
- Hybrid Cobalt Strike Redirectors - Zach Grace (@ztgrace) and @m0ther_
C2 使用 HTTPS 重定向
基于上述 “C2重定向”,另一种方法是可以在重定向服务器使用Apache
的SSL
代理引擎来接受入站SSL
请求,并将这些请求代理到HTTPS
反向侦听器上。 整个阶段使用加密,你可以根据需要在转向器上转发SSL
证书。
假如你已经使用了LetsEncrypt(aka CertBot),为了使你的mod_rewrite
规则能够工作,你需要在“/etc/apache2/sites-available/000-default-le-ssl.conf” 安装配置你的证书。 另外,要启用SSL ProxyPass
引擎,相关配置如下:
# Enable the Proxy Engine
SSLProxyEngine On
# Tell the Proxy Engine where to forward your requests
ProxyPass / https://DESTINATION_C2_URL:443/
ProxyPassReverse / https://DESTINATION_C2_URL:443/
# Disable Cert checking, useful if you're using a self-signed cert
SSLProxyCheckPeerCN off
SSLProxyCheckPeerName off
SSLProxyCheckPeerExpire off
4.3.7 其他 Apache mod_rewrite 资源
- Automating Apache mod_rewrite and Cobalt Strike Profiles
- mod-rewrite-cheatsheet.com
- Official Apache 2.4 mod_rewrite Documentation
- Apache mod_rewrite Introduction
- An In-Depth Guide to mod_rewrite for Apache
- Mod_Rewrite/.htaccess Syntax Checker
五、修改 C2 流量
5.1 Cobalt Strike
Cobalt Strike
通过Malleable C2
配置文件修改其流量。 配置文件提供了高度可定制的选项,用于修改服务器的C2
流量在线路上的形式。 Malleable C2
配置文件可增加强事件响应的规避,使用的合法内部应用程序冒充已知对手或伪装目标。
- Malleable C2 Profiles - GitHub
- Malleable Command and Control Documentation - cobaltstrike.com
- Cobalt Strike 2.0 - Malleable Command and Control - Raphael Mudge
- Cobalt Strike 3.6 - A Path for Privilege Escalation - Raphael Mudge
- A Brave New World: Malleable C2 - Will Schroeder (@harmj0y)
- How to Write Malleable C2 Profiles for Cobalt Strike - Jeff Dimmock
5.2 Empire
Empire
可以用使用Communication Profile
定制配置,它可以提供对 URI、User-Agent、Header定制选项。 profile 文件由每个由管道符(|)分隔元素,并使用listeners
上下文菜单中的set DefaultProfile
进行设置。
以下是一个示例 Profile:
"/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"
DefaultProfile
的值可以通过Empire
的初始化之前修改/setup/setup_database.py
来设置。除通过Communication Profile
之外,你可以考虑按照Joe Vest’s(@joevest)发布的步骤定制Empire
服务器的 URI、服务器头和默认网页内容Empire - Modifying Server C2 Indicators。
- Default Empire Communication Profiles (in Empire GitHub repo)
- How to Make Communication Profiles for Empire - Jeff Dimmock
六、第三方 C2 频道
自己创建一个可信的合法化的 Web 服务用于C2
,这需要你有足够的相关知识储备,而且使用的技术越来越复杂,运维管理的时间也越来越高。这里介绍一种利用第三方服务Domain Fronting
进行C2
重定向。
6.1 Domain Fronting
Domain Fronting
是一种被审查制度规避服务和应用程序用于通过合法和高度信任的域进行流量传输的技术。 支持Domain Fronting
的热门服务包括Google App Engine、Amazon CloudFront和Microsoft Azure。 简而言之,流量使用受信任的服务提供商的DNS
和SNI
名称。拿 Google 举一个例子,当边缘服务器接收到流量时(例如:位于gmail.com)数据将被转发到数据包的主机头中指定的原始服务器(例如:phish.appspot.com),根据服务提供商的不同,原始服务器会直接将流量转发到指定的域,这里可以是我们的(C2)服务器或者使用代理应用来执行最终跳转。
有关Domain Fronting
工作原理的更多详细信息,请参阅白皮书Blocking-resistant communication through domain fronting和TOR项目meek documentation。除了标准的 frontable 域名(如任何google.com域名)之外,还可以利用其他合法域名作为前端。
有关前沿领域的更多信息,请查看:
- Domain Fronting via Cloudfront Alternate Domains - Vincent Yiu (@vysecurity)
- Finding Domain frontable Azure domains - thoth / Fionnbharr (@a_profligate)
- Google Groups: Blog post on finding 2000+ Azure domains using Censys
- FindFrontableDomains tool - Steve Borosh (@rvrsh3ll)
关于 Domain Fronting 更多资讯
- Simplifying Domain Fronting - Tim Malcomvetter (@malcomvetter)
- High-reputation Redirectors and Domain Fronting - Raphael Mudge
- Empire Domain Fronting - Chris Ross (@xorrior)
- Escape and Evasion Egressing Restricted Networks - Tom Steele (@_tomsteele) and Chris Patten
- Red Team Insights on HTTPS Domain Fronting Google Hosts Using Cobalt Strike - Will Vandevanter and Shay Nahari of CyberArk
- SSL Domain Fronting 101 - Steve Borosh (@424f424f)
- How I Identified 93k Domain-Frontable CloudFront Domains - Chris Myers (@SWIZZLEZ_) and Barrett Adams (@PEEWPW)
- Domain Fronting: Who Am I? - Vincent Yiu (@vysecurity)
- Validated CloudFront SSL Domains - Vincent Yiu (@vysecurity)
- CloudFront Hijacking - Matt Westfall (@disloops)
- CloudFrunt GitHub Repo - MindPointGroup
- Metasploit Domain Fronting With Microsoft Azure (@ch1gg1ns)
6.2 PaaS 转向器
许多PaaS
和SaaS
提供商为应用实例提供了一个静态子域或 URL 的功能。 如果此服务商的域是高度可信的,则可购买的此域的VPS
为您的C2
基础架构提供服务。
要设置重定向,您需要确定将静态子域或URL作为实例的服务一部分发布。 然后,实例将需要使用网络或基于应用程序的重定向进行配置。 该实例将充当代理,之后与此文与上讨论的其他转向器类似。
根据服务的具体实施可能会有很大差异; 然而,对于使用Heroku的示例,请查看Alex Rymdeko-Harvey (@Killswitch_GUI)博客文章Expand Your Horizon Red Team – Modern SaaS C2。
另一个值得进一步研究的有趣技术是使用Amazon S3
的 buckets 存储用于C2
。 可查看Andrew Luke (@Sw4mp_f0x))的帖子 S3 Buckets for Good and Evil)。 这种技术可以与Empire
的第三方C2
功能结合使用。
6.3 其他第三方 C2
过去,一些第三方服务已经被利用于C2
(译者注:如dropbox.com、pastebin.com)。 这种方式是利用允许用户快速发布或修改内容来帮助你逃避基于信用检测的监控系统,尤其是在第三方网站普遍受到信任的情况下。
查看其他第三方C2选项的资源:
- A stealthy Python based Windows backdoor that uses Github as a C&C server - maldevel at securityblog.gr
- External C2 (Third-Party Command and Control) - Cobalt Strike Documentation
- Cobalt Strike over external C2 – beacon home in the most obscure ways - Mark Bergman at outflank.nl
- “Tasking” Office 365 for Cobalt Strike C2 - William Knowles (@william_knows)
- External C2 for Cobalt Strike - Ryan Hanson (@ryhanson)
- External C2 framework for Cobalt Strike - Jonathan Echavarria (@Und3rf10w)
- External C2 framework (GitHub Repo) - Jonathan Echavarria (@Und3rf10w)
- Hiding in the Cloud:
Cobalt Strike Beacon C2 using Amazon APIs - Rhino Security Labs - Exploring Cobalt Strike’s ExternalC2 framework - Adam (@xpn)
七、隐蔽基础设施
用来攻击的基础架构通常易于识别,要让它看起来想一个合法的服务器,我们需要采取一些措施来增强与目标组织或目标可能使用的服务之间的迷惑性。
转向器(Redirectors)可以通过redirecting invalid URIs、expiring phishing payload links或blocking common incident responder techniques; 但是,还应该注意潜在的主机及其指标。
例如,在Fall of an Empire文章中 John Menerick(@Lord_SQL)罗列了在互联网上检测Empire
服务器的方法。为了对抗这些容易被识别的指标,最好的办法就是采用修改C2
流量模式(见本文“修改 C2 流量”部分),修改服务器入口页面、限制打开的端口并修改默认的响应头。
有关如何为多种攻击框架执行这些和其他策略的更多详细信息,请查看这些帖子:
- Empire – Modifying Server C2 Indicators - Andrew Chiles
- Hunting Red Team Empire C2 Infrastructure - chokepoint.net
- Hunting Red Team Meterpreter C2 Infrastructure - chokepoint.net
- Identifying Empire HTTP Listeners (Tenable Blog) - Jacob Baines
八、保护基础设施
攻击基础架构也可能会受到与任何其他联网主机相同的攻击,并且由于正在使用的数据和连接到目标环境中,这些都被视为高度敏感的。
在2016年,远程代码执行漏洞被披露在最常见的攻击工具上:
- 2016 Metasploit RCE Static Key Deserialization
- 2017 Metasploit Meterpreter Dir Traversal Bugs
- Empire Fails - Will Schroeder
- Cobalt Strike 3.5.1 Important Security Update - Raphael Mudge
iptables
应该用于过滤不需要的流量并限制所需基础架构模块之间的流量。 例如,如果Cobalt Strike
服务器仅将资产提供给Apache
转向器,那么iptables
规则应该只允许来自转向器源IP
的 80 端口。 这对于任何运维管理都尤为重要,如SSH
或Cobalt Strike
的默认端口50050 还要考虑阻止非目标国家 IP。 作为替代,请考虑使用由 VPS 提供商提供的管理程序防火墙。 如:Digital Ocean提供可以保护一个或多个资产的 Cloud Firewalls云防护。
chattr
可以在团队服务器上使用,以防止修改cron
目录。 使用chattr
你可以限制任何用户(包括root)在修改文件之前删除chattr
属性。
SSH
应仅限于公钥认证,并配置为使用受限权限的用户进行初始登录。 为了增加安全性,请考虑将双因子验证添加到 SSH。
更新升级
定期更新系统升级漏洞补丁也是非常重要的。
当然,这份清单并不详尽,你可以做什么来保护团队服务器。 可参考下面的常见强化实践:
- Red Hat Enterprise Linux 6 Security Guide
- Debian Documentation on Hardening
- Securing Debian Manual
- 20 Linux Server Hardening Security Tips - nixCraft
- SANS Linux Security Checklists
- Docker Your Command & Control (C2) - Alex Rymdeko-Harvey (@killswitch_gui)
特定的加固资源
网上有许多可用的资源来讨论基础设施的安全配置和设计。 并非每种设计考虑都适合每种攻击基础架构,但了解可用选项和其他测试人员正在做什么很有用。
以下是其中一些资源:
- Responsible Red Teams - Tim MalcomVetter (@malcomvetter)
- Safe Red Team Infrastructure - Tim MalcomVetter (@malcomvetter)
- Red Team Infrastructure - AWS Encrypted EBS - @_rastamouse
九、自动部署
本文所讲的红队基础设施建设,真正建设时这需要耗费大量的时间来设计和实施。 而自动化可用于大大缩短部署时间,使你能够在更短的时间内部署更复杂的设置。
查看有关攻击基础架构自动化的这些资源:
- Automated Red Team Infrastructure Deployment with Terraform - Part 1 - @_RastaMouse
- Automated Red Team Infrastructure Deployment with Terraform - Part 2 - @_RastaMouse
- Mod_Rewrite Automatic Setup - Julian Catrambone (@n0pe_sled)
- Automated Empire Infrastructure - Jeremy Johnson (@beyondnegative)
- RTOps: Automating Redirector Deployment With Ansible - Kevin Dick
- Automating Gophish Releases With Ansible and Docker - Jordan Wright (@jw_sec)
- Red Baron GitHub Repo - Marcello (@byt3bl33d3r)
- Automating Apache mod_rewrite and Cobalt Strike Malleable C2 for Intelligent Redirection - Joe Vest (@joevest)
十、提示&建议
记录一切 - 运行复杂的红色团队基础设施意味着许多移动部件, 务必记录每项资产的功能以及其流量的发送位置。
在不同服务提供商和地区之间分割资产 -
基础设施资产应分布在多个服务提供商和地理区域。 蓝队成员可能会针对被确认为主动攻击的提供商提高监控门槛,甚至可能彻底阻止给定的服务提供商。 注意:如果跨边界发送加密或敏感数据,请记住国际隐私法。不要过度设计 - 人们很容易对先进技术感到兴奋,并想把一切都应用到目标上。 如果你正在模拟特定的敌对威胁,只能假扮利用真正的威胁使用的技术或技能。 如果你的红队会长期攻击同一目标,在你的评估中应该考虑“简单”的通过更先进的谍报工作。 红队应该循序渐进的推动蓝队向前发展,而不是将所有火力开到最大来攻击蓝队,这可能会打垮蓝队并延缓蓝队学习与向前发展的进程。
监控日志 - 在整个参与过程中应监视所有日志:SMTP日志、Apache日志、socat转向器上的tcpdump、iptables日志(特定于流量转发或目标过滤)、weblogs、Cobalt Strike/Empire/MSF日志。 将日志转发到日志服务器,例如rsyslog,以便于监控。 操作员终端数据保留可能会在操作过程中用于检查历史命令的使用情况。 @Killswitch_GUI 创建了一个名为 lTerm 的易于使用的程序,它将所有 bash 终端命令记录到一个中心位置。 Log all terminal output with lTerm
设置高价值事件告警 - 配置攻击基础架构以生成高价值事件的警报,例如新的 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 团队调查可以披露关于团队如何运作以及他们使用何种基础架构的大量信息。 如果这可以在评估之前确定,则可以对其进行过滤或直接重定向。
感谢列表
感谢所有以下人员(按字母顺序排列),他们贡献了包括此文中的工具、提示或链接,还有人感谢任何编写本维基引用的工具或帖子的人!
- @andrewchiles - Andrew Chiles
- @armitagehacker - Raphael Mudge
- @beyondnegative - Jeremy Johnson
- @bspence7337
- @domchell - Dominic Chell
- @jivoi - EK
- @joevest - Joe Vest
- @killswitch_gui - Alex Rymdeko-Harvey
- @ne0nd0g - Russel Van Tuyl
- @n0pe_sled - Julian Catrambone
- @_RastaMouse
- @tifkin_ - Lee Christensen
- @Und3rf10w - Jonathan Echavarria
- @vysecurity - Vincent Yiu
- @xorrior - Chris Ross