原文地址:Red-Team-Infrastructure-Wiki
译者:MyKings
在设计红队的网络基础设施架构时,要考虑到否能够提供长期(数周、数月、数年)和稳定的响应服务,这要根据功能来拆分每个资产服务,这一点非常重要。当网络对抗中的资产服务被(蓝队)发现时,将会造成对方的警觉。 而功能分离的好处是当红队的网络钓鱼电子邮件评估系统被识别出来时,红队只需要重新创建一个新的SMTP服务器和Payload主机即可,而不是重新搭建整套网络的基础设施。
在不同资产(服务器)上分离这些功能:
每次社工活动都可能需要这些功能,由于红队具有主动出击的特性,所以每一次活动都需要重新部署一套新的基础设施(功能资产模块化)。
为了进一步提高系统弹性和隐蔽性,每个后端资产(即团队服务器)都应该在其前面放置一个转向器(redirector)。 这样的目的是保证目标和我们的后端服务器之间间接的建立连接。 这种方式有两种好处:1.是能够解耦各个功能资产服务;2.是能够达到隐蔽效果。当某一个资产服务被蓝队发现时,无需部署整套后端服务,便可进行迁移会话、重连接后端的未焚毁的资产等。
常见的转向器(redirector)类型:
每个转向器(redirector)类型都有多个最适合不同场景的实现选项。 这些选项将在本文的转向器部分进一步详细讨论。 这里的转向器(redirector)可以是VPS主机、专用服务器、甚至是在 PaaS 上运行的应用程序。
下面这个样例,使用了功能分离和转向器(redirector)的设计思路。其中LT DNS C2代表长期的 DNS C2 服务; ST DNS C2代表短期的 DNS C2 服务;ST HTTP C2 代表短期的 HTTP C2 服务。
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 来检验。
简单操作和网络钓鱼似乎不可同时兼得,建立一个适当的网络钓鱼基础设施可能是一个非常痛苦的事。 这里将为你提供快速设置一个钓鱼服务器的知识和工具,该服务器可以绕过大多数垃圾邮件过滤器,并为你提供一个简单的网络钓鱼体验,包括与你的目标进行双向通信的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界面, 使用新用户开始钓鱼吧!
Cobalt Strike提供可自定义的钓鱼功能来帮助Pentest(渗透测试)和红队。它支持 HTML 和纯文本(plaintext)格式的模板、附件、反弹地址、URL 嵌入、使用远程 SMTP 服务器以及每条消息延迟发送。你还可以为每个用户嵌入的 URL 添加唯一标记以进行点击跟踪。
有关更多详细信息,请查看以下资源:
除了搭建自己的网络钓鱼服务外,还有许多像Cobalt Strike这种专用于电子邮件钓鱼的工具和框架。这篇文章不会详细介绍每个框架,但下面提供了一些参考资料:
“转向器(Redirector)”可能不是描述我们要实现此功能的最佳词语,但其目的与我们使用的其他重定向功能相同。 我们希望从最终的电子邮件头中删除钓鱼邮件的所有痕迹,并在受害者与我们的后端服务器之间提供缓冲区。 理想情况下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
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)分隔
Postfix提供了一个更容易替代Sendmail而且提供了更好的兼容性。 Postfix还为Dovecot提供全面的IMAP支持。这使得测试人员能够实时地与对原始消息做出响应的钓鱼攻击目标相对应,而不是依靠全部通讯地址,并且必须使用钓鱼工具创建新消息。
Julian Catrambone's(@n0pe_sled)提供了一个设置Postfix邮件服务器进行网络钓鱼的完整指南Mail Servers Made Easy。
注意:使用 C2 转向器时,应在你的后渗透框架中配置外部侦听器,以通过转向器域发送分段流量。 这会使受感染的主机像 C2 流量本身一样分段通过转向器。
socat可用于将端口 53 上的传入DNS数据包重定向到我们的团队服务器, 此方法很有效。目前,某些用户已为 Cobalt Strike 提出了这个功能issues需求。
由于来自 @xorrior 的测试,以下 socat 命令似乎很好用:
socat udp4-recvfrom:53,reuseaddr,fork udp4-sendto:<IPADDRESS>; echo -ne
Redirecting Cobalt Strike DNS Beacons - Steve Borosh
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 <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 上接收的任何流量转发到端口 6667 上的内部C2服务器。现在,启动服务器上的socat将端口 6667 上的任何传入TCP流量分流到 UDP 端口 53 ,这就是我们的 DNS C2 需要监听。 最后,我们在主转向器上同样设置一个socat实例,将任何传入的 UDP 端口 53 流量重定向到端口 6667 上的SSH隧道。
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过滤。
socat可用于将指定端口上的任何传入 TCP 数据包重定向到你的服务器。将localhost上的 TCP 端口 80 重定向到另一台主机上的端口 80 的基本语法是:
socat TCP4-LISTEN:80,fork TCP4:<REMOTE-HOST-IP-ADDRESS>: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 执行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 <REMOTE-HOST-IP-ADDRESS>:80
iptables -t nat -A POSTROUTING -j MASQUERADE
iptables -I FORWARD -j ACCEPT
iptables -P FORWARD ACCEPT
sysctl net.ipv4.ip_forward=1
我们之前已经介绍过使用SSH进行DNS隧道。 SSH作为一种坚实可靠的方式来突破NAT并获得种植体连接转向器和服务器环境的方式。 首先,你必须设置GatewayPorts转发,否则将无法正常使用:
nano /etc/ssh/sshd_config
add
GatewayPorts yes
要将转向器的本地端口 80 转发到你的内部服务器,命令如下:
tmux new -S redir80
ssh <redirector> -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 <redirector> -R *:80:localhost:80 -R *:443:localhost:443
Ctrl+B, D
当我们的Payloads(服务)和网络资源开启时,我们希望降低被检测到的风险,同时希望无论是建立C2还是收集信息payload都能被高效的执行。
下面是 Jeff Dimmock 关于Apache的mod_rewrite的用法和示例:
其他Apache的mod_rewrite的用法和示例:
要在服务器上自动设置Apache的mod_rewrite重定向器,请查看 Julain Catrambone's(@ n0pe_sled) 博客文章Mod_Rewrite Automatic Setup 和 accompanying tool。
重定向 C2 流量的意图有两方面:隐藏后端服务器;蒙蔽相关的调查者,让他们以为这是个合法网站。 通过使用Apache的mod_rewrite和自定义C2配置文件或其他代理(比如使用Flask),我们可以高效的过滤出来自调查 C2 的真实流量。
基于上述 “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
Cobalt Strike通过Malleable C2配置文件修改其流量。 配置文件提供了高度可定制的选项,用于修改服务器的C2流量在线路上的形式。 Malleable C2配置文件可增加强事件响应的规避,使用的合法内部应用程序冒充已知对手或伪装目标。
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。
自己创建一个可信的合法化的 Web 服务用于C2,这需要你有足够的相关知识储备,而且使用的技术越来越复杂,运维管理的时间也越来越高。这里介绍一种利用第三方服务Domain Fronting进行C2重定向。
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域名)之外,还可以利用其他合法域名作为前端。
有关前沿领域的更多信息,请查看:
许多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功能结合使用。
过去,一些第三方服务已经被利用于C2(译者注:如dropbox.com、pastebin.com)。 这种方式是利用允许用户快速发布或修改内容来帮助你逃避基于信用检测的监控系统,尤其是在第三方网站普遍受到信任的情况下。
查看其他第三方C2选项的资源:
用来攻击的基础架构通常易于识别,要让它看起来想一个合法的服务器,我们需要采取一些措施来增强与目标组织或目标可能使用的服务之间的迷惑性。
转向器(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年,远程代码执行漏洞被披露在最常见的攻击工具上:
iptables
应该用于过滤不需要的流量并限制所需基础架构模块之间的流量。 例如,如果Cobalt Strike服务器仅将资产提供给Apache转向器,那么iptables规则应该只允许来自转向器源IP的 80 端口。 这对于任何运维管理都尤为重要,如SSH或Cobalt Strike的默认端口50050 还要考虑阻止非目标国家 IP。 作为替代,请考虑使用由 VPS 提供商提供的管理程序防火墙。 如:Digital Ocean提供可以保护一个或多个资产的 Cloud Firewalls云防护。
chattr
可以在团队服务器上使用,以防止修改cron目录。 使用chattr你可以限制任何用户(包括root)在修改文件之前删除chattr属性。
SSH
应仅限于公钥认证,并配置为使用受限权限的用户进行初始登录。 为了增加安全性,请考虑将双因子验证添加到 SSH。
更新升级
定期更新系统升级漏洞补丁也是非常重要的。
当然,这份清单并不详尽,你可以做什么来保护团队服务器。 可参考下面的常见强化实践:
网上有许多可用的资源来讨论基础设施的安全配置和设计。 并非每种设计考虑都适合每种攻击基础架构,但了解可用选项和其他测试人员正在做什么很有用。
以下是其中一些资源:
本文所讲的红队基础设施建设,真正建设时这需要耗费大量的时间来设计和实施。 而自动化可用于大大缩短部署时间,使你能够在更短的时间内部署更复杂的设置。
查看有关攻击基础架构自动化的这些资源:
记录一切 - 运行复杂的红色团队基础设施意味着许多移动部件, 务必记录每项资产的功能以及其流量的发送位置。
在不同服务提供商和地区之间分割资产 - 基础设施资产应分布在多个服务提供商和地理区域。 蓝队成员可能会针对被确认为主动攻击的提供商提高监控门槛,甚至可能彻底阻止给定的服务提供商。 注意:如果跨边界发送加密或敏感数据,请记住国际隐私法。
不要过度设计 - 人们很容易对先进技术感到兴奋,并想把一切都应用到目标上。 如果你正在模拟特定的敌对威胁,只能假扮利用真正的威胁使用的技术或技能。 如果你的红队会长期攻击同一目标,在你的评估中应该考虑“简单”的通过更先进的谍报工作。 红队应该循序渐进的推动蓝队向前发展,而不是将所有火力开到最大来攻击蓝队,这可能会打垮蓝队并延缓蓝队学习与向前发展的进程。
监控日志 - 在整个参与过程中应监视所有日志: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 团队调查可以披露关于团队如何运作以及他们使用何种基础架构的大量信息。 如果这可以在评估之前确定,则可以对其进行过滤或直接重定向。
感谢所有以下人员(按字母顺序排列),他们贡献了包括此文中的工具、提示或链接,还有人感谢任何编写本维基引用的工具或帖子的人!