Skip to main content

安全控制枚举

虽然如何绕过常见的安全控制不是本章的内容,但是作为攻击者,我们必须知道企业都部署了哪些安全控制措施,知己知彼。以下的一些命令,我们会在后续的章节做详细解释,如果学员们现在感到有些困惑是没有问题的。需要注意的是,以下的安全控制措施基本都可以使用工具SeatBelt (https://github.com/GhostPack/Seatbelt) 来进行枚举,但是考虑到无论是让工具落地还是执行过程中都会有OPSEC的问题,因此手动枚举也很重要。以下是一些常见安全控制措施的枚举方法,这不是一个穷尽的列表

 

AV/EDR 以及AMSI

在如今企业环境里,基本都配备了EDR/XDR/MDR,连AV都很少见了。与其说去枚举,不如默认它们已经存在。而且AV/EDR厂商众多,枚举方法也各不一样。但总的来说,我们可以通过查看进程名、文件以及文件夹等方法来确认特定AV/EDR产品的存在。而AMSI,是用于扫描内存的接口,目前只有少数厂商的产品支持AMSI,我们可以通过powershell代码 'amsiutils'来确认其存在。

 

UAC

UAC的定义在之前已经说过了,并且UAC在多数时候都是默认启用的,我们可以通过powershell命令 (Get-ItemProperty HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System).EnableLUA 来确认。

image.png

 

AppLocker

AppLocker,即WDAC,可以对可执行文件、安装包文件、脚本文件、包裹文件、甚至DLL文件加以限制,在非白名单的情况下我们无法执行对应的可执行文件、脚本等。我们可以通过Powershell命令 Get-ChildItem -Path HKLM:\SOFTWARE\Policies\Microsoft\Windows\SrpV2\Exe 来查询启用状态。

 

约束语言模式 CLM

CLM,即约束语言模式,实际上属于AppLocker,只是针对一些脚本语言的。如果CLM启用的话,一些脚本语言例如Powershell的使用会被限制,只有白名单里的脚本才不会被影响。CLM带来最直接的影响就是限制了对 .NET框架的调用、执行C#代码以及反射。我们可以通过Powershell代码 $ExecutionContext.SessionState.LanguageMode 来检查语言状态。

image.png

 

LAPS

LAPS是微软推出的对主机本地管理员密码的管理方案,它可以使得本地管理员的密码随机、不同、且自动轮换。除了使用工具来枚举,文件夹LAPS或者文件AdmPwd的存在可以说明LAPS的启用。

 

RunAsPPL

RunAsPPL提供了对凭证的驱动级保护。如果PPL被启用的话,默认情况下mimikatz无法提取凭证了。对于系统管理员来说,启用PPL可以花费很小的力气就达成不错的凭证防盗效果。我们可以通过powershell 命令 Get-ItemProperty -Path
HKLM:\SYSTEM\CurrentControlSet\Control\Lsa -Name "RunAsPPL" 来查询PPL的启用状态。