安全控制枚举
如何绕过常见的安全控制不是本章的内容,但是作为进攻方,我们必须知道企业都部署了哪些安全控制措施,知己知彼,做足准备。如今,我们可以使用 SeatBelt、WinPEAS、SharpUp 等工具协助我们枚举主机部署的安全控制,但是我们要知道这些工具又是怎么样帮助我们枚举出这些安全控制措施的存在的
杀毒软件以及 EDR/XDR/MDR
在如今企业里,主机基本都配备了 EDR/XDR/MDR 产品,这类产品的检测能力远比杀毒软件强大。即便是没有额外安装杀毒软件的主机,也自带防护效果良好的 Windows Defender。考虑到 AV/EDR 厂商众多,总的来说,我们可以通过查看进程名、文件\文件夹等方法来确认特定 AV/EDR 产品的存在。
AMSI,是用于扫描内存中恶意代码的接口,并不是所有杀毒软件都支持 AMSI 借口,我们可以通过 PowerShell字符串 'Invoke-Mimikatz' 来确认其存在。
UAC
我们在之前的小节里讨论过 UAC 以及绕过手段,UAC 在多数时候都是默认启用的,我们可以通过 PowerShell命令 (Get-ItemProperty HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System).EnableLUA 来确认。
(Get-ItemProperty HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System).EnableLUA
AppLocker
AppLocker,可以对可执行文件、安装包文件、脚本文件、包裹文件、甚至 DLL 文件加以限制,在非白名单的情况下我们无法执行对应类型的文件。我们可以通过 Powershell 命令 Get-ChildItem -Path HKLM:\SOFTWARE\Policies\Microsoft\Windows\SrpV2\Exe\ 来查询启用状态。
Get-ChildItem -Path HKLM:\SOFTWARE\Policies\Microsoft\Windows\SrpV2\Exe\
约束语言模式 CLM
CLM,即约束语言模式,实际上属于 AppLocker,只是针对一些脚本语言的。如果 CLM 启用的话,一些脚本语言例如 Powershell 的使用会被限制,只有白名单里的脚本才不会被影响。CLM 带来最直接的影响就是限制了对 .NET框架的调用、执行 C# 代码以及反射。我们可以通过 Powershell 命令 $ExecutionContext.SessionState.LanguageMode 来检查语言状态。
$ExecutionContext.SessionState.LanguageMode
LAPS
LAPS是微软推出的对主机本地管理员密码的管理方案,它可以使得本地管理员的密码随机、不同、且自动轮换。除了使用工具来枚举,文件夹 LAPS 或者文件 AdmPwd 的存在可以说明 LAPS 的启用。
RunAsPPL
RunAsPPL 提供了对进程的驱动级保护,即便是 SYSTEM 权限下,也无法获得目标进程的句柄。如果进程 lsass.exe 以 PPL 启用的话,默认情况下 mimikatz 无法提取凭证了。对于系统管理员来说,启用PPL可以花费很小的力气就达成不错的凭证防盗效果。我们可以通过 PowerShell 命令 Get-ItemProperty -Path
HKLM:\SYSTEM\CurrentControlSet\Control\Lsa -Name "RunAsPPL" 来查询PPL的启用状态。
Get-ItemProperty -Path
HKLM:\SYSTEM\CurrentControlSet\Control\Lsa -Name "RunAsPPL"