原文地址:Red-Team-Infrastructure-Wiki
译者:MyKings

一、设计注意事项

1.1 功能分离

在设计红队的网络基础设施架构时,要考虑到否能够提供长期(数周、数月、数年)和稳定的响应服务,这要根据功能来拆分每个资产服务,这一点非常重要。当网络对抗中的资产服务被(蓝队)发现时,将会造成对方的警觉。 而功能分离的好处是当红队的网络钓鱼电子邮件评估系统被识别出来时,红队只需要重新创建一个新的SMTP服务器和Payload主机即可,而不是重新搭建整套网络的基础设施。

在不同资产(服务器)上分离这些功能:

每次社工活动都可能需要这些功能,由于红队具有主动出击的特性,所以每一次活动都需要重新部署一套新的基础设施(功能资产模块化)。

1.2 使用转向器

为了进一步提高系统弹性和隐蔽性,每个后端资产(即团队服务器)都应该在其前面放置一个转向器(redirector)。 这样的目的是保证目标和我们的后端服务器之间间接的建立连接。 这种方式有两种好处:1.是能够解耦各个功能资产服务;2.是能够达到隐蔽效果。当某一个资产服务被蓝队发现时,无需部署整套后端服务,便可进行迁移会话、重连接后端的未焚毁的资产等。

常见的转向器(redirector)类型:

每个转向器(redirector)类型都有多个最适合不同场景的实现选项。 这些选项将在本文的转向器部分进一步详细讨论。 这里的转向器(redirector)可以是VPS主机、专用服务器、甚至是在 PaaS 上运行的应用程序。

1.3 设计举例

下面这个样例,使用了功能分离和转向器(redirector)的设计思路。其中LT DNS C2代表长期的 DNS C2 服务; ST DNS C2代表短期的 DNS C2 服务;ST HTTP C2 代表短期的 HTTP C2 服务。

1.4 更多资源

二、域名

根据目标所使用的产品及其构造,来选择具有迷惑性的域名至关重要。 由于,选择一个适用于你目标的域名是非常繁琐和“无规矩”可寻的。OSINT(开源情报收集)可以更好的帮助推测管理所需要的资源,这个很重要(开源情报的重要与便利性)。 庆幸的是域名商也需要知道域名的状态与资产信息,并且他们提供了一些查询接口,这也会我们创建了一些便利的条件。

expireddomains.net 是一个收集最近过期或已丢弃域名的引擎。 它提供了搜索和高级过滤,例如:到期时间、反向链接数量、archive.org快照数量、SimilarWeb 分数。 使用 SimilarWeb 网站,我们可以注册预先使用的域,这些域将与目标域名的年份相同,会使它看起来与我们的目标域类似,使他融入我们的目标网络来迷惑对手。

在为 C2 或数据回传选择域时,请优先考虑“财务”或“医疗保健”域的分类。由于法律或数据敏感性问题原因,许多组织不会在这些分类中执行 SSL 中间人。请确保你选择的域名与之前的任何恶意软件或网络钓鱼系列没有关联也很重要。

Charles Hamilton(@ MrUn1k0d3r)的工具CatMyFish会自动执行 expireddomains.net 的搜索,并且会使用bluecoat.com来检查网站的所属分类。你可以对过滤器进行修改,以便搜索更多内容,你还可以利用它来长期监控你的注册资产(域名资产)。

Joe Vest(@joevest) 和 Andrew Chiles(@andrewchiles)提供了另一个工具DomainHunter,它会返回一个表格,主要内容包括 BlueCoatIBM X-ForceCisco Talos中查询出的分类,域名年龄、可用的TLDs、Archive.org链接和HTML报告等信息。 此外,它使用malwaredomains.commxtoolbox.com来检查域名是否存在已知的恶意软件和网络钓鱼活动,该工具还包括了绕过BlueCoat/WebPulse验证码的OCR功能(查看该工具更多详细信息)。

(上图为译者提供)

Max Harle的另一个工具AIRMASTER使用 expireddomains.netBluecoat来查找域名的分类。该工具使用OCR绕过BlueCoat验证码来提高搜索速度。

如果以前注册的域名不可用(域名分类不正确或不理想),或者使用自己注册的域名(域名没有进行分类)时,你可以克隆或重定向到一个相似分类的域名上,然后在手动提交你的域名分类。你可以使用Dominic Chell开发的Chameleon工具。大多数产品在确认域名的分类时,都会忽略重定向或克隆的网站内容。 有关Chameleon使用的更多信息,请查看Dominic的帖子 Categorisation is not a security boundary

最后,确保你的DNS设置正确, 这里可以借助 DNS Propogation Checker 来检验。

2.1 分类和黑名单检查资源列表

三、网络钓鱼设置

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 添加唯一标记以进行点击跟踪。

有关更多详细信息,请查看以下资源:

3.3 网络钓鱼框架

除了搭建自己的网络钓鱼服务外,还有许多像Cobalt Strike这种专用于电子邮件钓鱼的工具和框架。这篇文章不会详细介绍每个框架,但下面提供了一些参考资料:

3.3.1 Gophish

3.3.2 Frenzy

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:<IPADDRESS>; 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 <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”。

DNS重定向也可以在NAT后面完成

有时候可能需要在内部网络上托管C2服务器。 使用iptablessocat和反向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没有过滤或设置条件的功能。 Apachemod_rewrite模块提供了许多方法来加强钓鱼攻击并增强测试基础架构的弹性。 mod_rewrite能够根据请求属性(如URI、User-Agent、请求参数、操作系统和IP)执行条件重定向。Apachemod_rewrite使用htaccess文件来配置Apache应该如何处理每个传入请求的规则集。 例如:使用这些规则,你可以使用默认wgetUser-Agent请求重定向到你的服务器,从而将其转到目标网站上的合法页面。

简而言之,如果你的转向器(redirector)需要执行条件重定向或高级过滤,请使用Apachemod_rewrite。 也可使用socat重定向并iptables过滤。

4.3.2 socat 之 HTTP

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 地址。

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 <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

4.3.4 SSH 之 HTTP

我们之前已经介绍过使用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

4.3.5 Payloads 与 Web 重定向

当我们的Payloads(服务)和网络资源开启时,我们希望降低被检测到的风险,同时希望无论是建立C2还是收集信息payload都能被高效的执行。

下面是 Jeff Dimmock 关于Apachemod_rewrite的用法和示例:

其他Apachemod_rewrite的用法和示例:

要在服务器上自动设置Apachemod_rewrite重定向器,请查看 Julain Catrambone's(@ n0pe_sled) 博客文章Mod_Rewrite Automatic Setupaccompanying tool

4.3.6 C2 重定向

重定向 C2 流量的意图有两方面:隐藏后端服务器;蒙蔽相关的调查者,让他们以为这是个合法网站。 通过使用Apachemod_rewrite自定义C2配置文件或其他代理(比如使用Flask),我们可以高效的过滤出来自调查 C2 的真实流量。

C2 使用 HTTPS 重定向

基于上述 “C2重定向”,另一种方法是可以在重定向服务器使用ApacheSSL代理引擎来接受入站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 资源

五、修改 C2 流量

5.1 Cobalt Strike

Cobalt Strike通过Malleable C2配置文件修改其流量。 配置文件提供了高度可定制的选项,用于修改服务器的C2流量在线路上的形式。 Malleable C2配置文件可增加强事件响应的规避,使用的合法内部应用程序冒充已知对手或伪装目标。

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

六、第三方 C2 频道

自己创建一个可信的合法化的 Web 服务用于C2,这需要你有足够的相关知识储备,而且使用的技术越来越复杂,运维管理的时间也越来越高。这里介绍一种利用第三方服务Domain Fronting进行C2重定向。

6.1 Domain Fronting

Domain Fronting是一种被审查制度规避服务和应用程序用于通过合法和高度信任的域进行流量传输的技术。 支持Domain Fronting的热门服务包括Google App EngineAmazon CloudFrontMicrosoft Azure。 简而言之,流量使用受信任的服务提供商的DNSSNI名称。拿 Google 举一个例子,当边缘服务器接收到流量时(例如:位于gmail.com)数据将被转发到数据包的主机头中指定的原始服务器(例如:phish.appspot.com),根据服务提供商的不同,原始服务器会直接将流量转发到指定的域,这里可以是我们的(C2)服务器或者使用代理应用来执行最终跳转。

有关Domain Fronting工作原理的更多详细信息,请参阅白皮书Blocking-resistant communication through domain fronting和TOR项目meek documentation。除了标准的 frontable 域名(如任何google.com域名)之外,还可以利用其他合法域名作为前端。

有关前沿领域的更多信息,请查看:

关于 Domain Fronting 更多资讯

6.2 PaaS 转向器

许多PaaSSaaS提供商为应用实例提供了一个静态子域或 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选项的资源:

七、隐蔽基础设施

用来攻击的基础架构通常易于识别,要让它看起来想一个合法的服务器,我们需要采取一些措施来增强与目标组织或目标可能使用的服务之间的迷惑性。

转向器(Redirectors)可以通过redirecting invalid URIsexpiring phishing payload linksblocking 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 端口。 这对于任何运维管理都尤为重要,如SSHCobalt Strike的默认端口50050 还要考虑阻止非目标国家 IP。 作为替代,请考虑使用由 VPS 提供商提供的管理程序防火墙。 如:Digital Ocean提供可以保护一个或多个资产的 Cloud Firewalls云防护。

chattr

可以在团队服务器上使用,以防止修改cron目录。 使用chattr你可以限制任何用户(包括root)在修改文件之前删除chattr属性。

SSH

应仅限于公钥认证,并配置为使用受限权限的用户进行初始登录。 为了增加安全性,请考虑将双因子验证添加到 SSH。

更新升级

定期更新系统升级漏洞补丁也是非常重要的。

当然,这份清单并不详尽,你可以做什么来保护团队服务器。 可参考下面的常见强化实践:

特定的加固资源

网上有许多可用的资源来讨论基础设施的安全配置和设计。 并非每种设计考虑都适合每种攻击基础架构,但了解可用选项和其他测试人员正在做什么很有用。

以下是其中一些资源:

九、自动部署

本文所讲的红队基础设施建设,真正建设时这需要耗费大量的时间来设计和实施。 而自动化可用于大大缩短部署时间,使你能够在更短的时间内部署更复杂的设置。

查看有关攻击基础架构自动化的这些资源:

十、提示&建议

感谢列表

感谢所有以下人员(按字母顺序排列),他们贡献了包括此文中的工具、提示或链接,还有人感谢任何编写本维基引用的工具或帖子的人!


源链接

Hacking more

...