红 + 蓝 = 紫 - Black Hills信息安全公司
作者:David Fletcher & Sally Vandeven
咨询提示: 本文引用的技术和工具可能已过时,不适用于当前环境。但本文仍可作为学习机会,可能用于更新或集成到现代工具和技术中。
我们在2016年10月6日于密歇根州大急流城举办的GrrCon黑客会议上进行了演示。该演示通过对话形式,展示了蓝队保护网络与红队攻击网络之间的友好交锋。讨论的主题包括BHIS发现的在企业环境中获取访问权限、提升权限和控制网络的常见方法。我们还讨论了蓝队如何为渗透测试做准备,使测试人员的工作更加困难。以下是演示内容及支持材料,包括命令行示例和相关主题的参考资料。
密码喷洒
这是针对企业的密码猜测攻击。渗透测试人员使用命令行查询Active Directory或通过开源情报收集用户名列表。然后使用常见密码(如“Autumn2016”)尝试对列表中的每个用户名进行登录。由于账户锁定策略,必须小心操作,以免锁定组织用户的账户。在每个观察窗口内为每个用户猜测一个密码,以避免锁定账户。
如何从命令行对域发起密码喷洒攻击
首先检查密码策略,包括锁定设置:
|
|
以下示例显示域密码策略。对于此网络的密码喷洒,我们会选择简单的8字符密码,如Fall2016或Summer16(用户倾向于使用最小长度),并每十分钟喷洒一个密码。“锁定观察窗口”定义了最后一次错误密码后多久坏密码计数器重置为零。因此,一次错误密码后坏密码计数为1,但如果我们等待十分钟,计数将重置为零,可以再次猜测。这大大降低了锁定账户的机会。但服务账户可能不受相同锁定规则约束,此外坏密码计数在冗余DC之间不会复制,因此如果每次登录时账户认证到不同的DC,可能会产生冲突。因此我们的经验法则是每个观察窗口猜测一次。
了解密码策略后,可以使用wmic实用程序(去掉文件中给出列标题的第一行)或PowerShell创建用户列表。根据我们的经验,PowerShell命令更快,但可能并不总是有PowerShell访问权限,因此两种方法如下所示:
|
|
|
|
注意:以上是一行PowerShell命令,“ForEach”和“{$”之间有空格。
然后使用以下FOR循环测试每个凭据,该循环使用userlist.txt中的每个用户名和放置在“pass1.txt”文件中的密码挂载共享\’%LOGONSERVER%’\IPC$:
|
|
脚本化!
你也可以使用Beau Bullock的PowerShell脚本Invoke-DomainPasswordSpray.ps1。这个脚本会为你完成所有工作!你只需要指向用户列表并提供一个密码——例如“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执行。
|
|
|
|
或
|
|
另一种AppLocker绕过是使用InstallUtil.EXE直接访问.NET函数,避开AppLocker的检测。请参考下面引用的“PowerShell w/o PowerShell” BHIS博客文章。
第三方命令外壳
作为渗透测试人员,你可能被阻止运行cmd.exe,但你还有其他选择。你可以尝试运行第三方命令外壳。有几个可用,但我们只测试了一个,效果完美。它是开源类Windows操作系统ReactOS附带的命令外壳。如果AppLocker规则阻止执行第三方外壳,将可执行文件转换为DLL,并使用上述RunDLL32.exe方法。你也可以使用参考资料中Didier Stevens文章的链接下载已转换的cmd.dll。
参考资料
- 无PowerShell的PowerShell – http://www.blackhillsinfosec.com/?p=5257
- 应用程序白名单绕过 – http://subt0x10.blogspot.com/2016/04/bypass-application-whitelisting-script.html
- 开源类Windows操作系统 – https://www.reactos.org/
- 开源类Windows操作系统 – https://en.wikipedia.org/wiki/ReactOS
- 如何将EXE转换为DLL – https://blog.didierstevens.com/2010/02/04/cmd-dll/
权限提升
我们经常使用许多优秀工具来帮助在Windows域内提升权限。
GPP(组策略首选项)由微软在2008年引入。GPP首选项文件中经常包含加密的特权凭据,以便脚本化管理任务。这成为了一个问题,因为用于密码的静态对称AES加密密钥已发布,因此文件中的凭据可以轻松解密。这些凭据绝对是我们认为的低 hanging fruit,是我们在渗透测试中首先检查的内容之一。方法非常简单:
打开命令外壳并运行以下命令:
|
|
如果你在cpassword属性项中找到任何包含加密值的命中,只需解密以显示明文密码,并尝试使用凭据。使用gpp-decrypt.rb解密。你也可以使用PowerSploit模块Get-GPPPassword或Metasploit模块gpp一次性查找和解密。
参考资料
- https://blogs.technet.microsoft.com/grouppolicy/2009/04/22/passwords-in-group-policy-preferences-updated/
- http://tools.kali.org/password-attacks/gpp-decrypt
- https://github.com/PowerShellMafia/PowerSploit/blob/master/Exfiltration/Get-GPPPassword.ps1
- https://www.rapid7.com/db/modules/post/windows/gather/credentials/gpp
PowerUp将查找可能允许权限提升的常见错误配置。此PowerShell脚本将检查错误配置,如弱服务权限、未引用的服务路径、可劫持的DLL等。我们在此展示如何在PowerShell中运行PowerUp模块,但PowerShell Empire也内置了该模块,因此当你使用Empire建立代理时,可以远程调用它。
|
|
|
|
使用PowerUp中的内置模块利用任何发现的漏洞。
使用PowerSploit的PowerView模块中的ShareFinder和FileFinder模块扫描域,查找你有权访问的有价值文件。默认情况下,FileFinder会标记名称中包含“pass”、“sensitive”、“secret”、“admin”、“login”或“unattend*.xml”的文件,但搜索条件可配置。
|
|
|
|
Bloodhound是一种自动化查找提升AD账户路径的工具。它使用PowerShell查询Active Directory,然后创建图表,显示攻击者可以访问的可用账户/计算机,以便从内存中转储凭据(例如使用Mimikatz)。转储的凭据可能提供权限提升,直至域管理员。
限制客户端到客户端流量——我们只与少数实施此级别控制的组织合作过,它在限制我们横向移动能力方面非常有效。不幸的是,我们没有太多关于如何实施此级别安全性的参考资料,但可以合理假设细粒度NTFS权限和基于主机的防火墙规则是其中的一部分。
W^X——指只允许用户在没有执行权限的位置写入,只允许在没有写入权限的位置执行应用程序。后者可以通过AppLocker强制执行。实际上,默认AppLocker规则只允许从Program Files目录和Windows目录执行,用户默认没有写入权限。在实施AppLocker时,值得审计这些位置的任何权限更改。
参考资料
- PowerUp – https://github.com/PowerShellMafia/PowerSploit/tree/master/Privesc
- PowerView – https://github.com/PowerShellMafia/PowerSploit/tree/master/Recon
- Empire – https://github.com/adaptivethreat/Empire
- Bloodhound – https://www.youtube.com/watch?v=MYxk73DsGQI
- Bloodhound – https://wald0.com/?p=68
- Mimikatz – http://www.blackhillsinfosec.com/?p=4667
- LAPS – https://technet.microsoft.com/en-us/mt227395.aspx
主动防御
这指的是使攻击者的工作更加困难和混乱。它不指“反击黑客”。(根据大多数定义,反击黑客是非法的)注入一点混乱和不可预测性可以大大迷惑和减缓攻击者。大多数人都听说过蜜罐,但蜜文件、蜜账户、蜜令牌和其他可爱的好东西呢?ADHD是BHIS整理的主动防御发行版,可在此免费获取。
Web Bugs是网页中的隐藏元素,如从web bug服务器加载的1X1像素图像。服务器收集识别信息,如IP地址、用户代理和时间戳。web bug可以嵌入到名称诱人的.DOC文件中,如ProjectedSalaries-2017.doc或Passwords.doc。当攻击者上钩时,识别信息被记录。
Weblabyrinth创建虚假网页迷宫,旨在混淆自动化网页扫描器。
使用Honeyports在攻击者尝试连接到网络上监听的虚假服务时捕获并黑洞他们,使用TrustedSec的工具Artillery。
使用Kippo监控暴力SSH攻击,并通过使攻击者看起来真正连接到SSH服务器来混淆他们。
ADHD中还有更多。
参考资料
- ADHD中的工具列表 – https://github.com/adhdproject/adhdproject.github.io/blob/master/index.md
- 关于ADHD – http://www.blackhillsinfosec.com/?page_id=4419
- ADHD安装说明 – http://www.blackhillsinfosec.com/?p=5234
- Artillery – https://www.trustedsec.com/artillery/
- Web Bugs – https://github.com/adhdproject/adhdproject.github.io/blob/master/Tools/WebBugServer.md
- Weblabyrinth – https://github.com/adhdproject/adhdproject.github.io/blob/master/Tools/Weblabyrinth.md
- Honeyports – https://github.com/adhdproject/adhdproject.github.io/blob/master/Tools/HoneyPorts.md
- Kippo – https://github.com/adhdproject/adhdproject.github.io/blob/master/Tools/Kippo.md