Saltar a contenido

Enumerating Security Controls

Después de obtener un punto de apoyo, podríamos usar este acceso para tener una idea del estado defensivo de los hosts, enumerar el dominio más a fondo ahora que nuestra visibilidad no está tan restringida y, si es necesario, trabajar "living off the land" utilizando herramientas que existen de manera nativa en los hosts. Es importante entender los controles de seguridad en una organización, ya que los productos en uso pueden afectar las herramientas que utilizamos para nuestra enumeración de AD, así como la explotación y post-explotación. Comprender las protecciones a las que nos enfrentamos ayudará a informar nuestras decisiones sobre el uso de herramientas y nos asistirá en la planificación de nuestro curso de acción, evitando o modificando ciertas herramientas. Algunas organizaciones tienen protecciones más estrictas que otras, y algunas no aplican los controles de seguridad de manera uniforme en todas partes. Puede haber políticas aplicadas a ciertas máquinas que pueden hacer nuestra enumeración más difícil y que no se aplican en otras máquinas.

Nota: Esta sección está destinada a mostrar posibles controles de seguridad en un dominio, pero no tiene un componente interactivo. Enumerar y eludir los controles de seguridad están fuera del alcance de este módulo, pero queríamos dar una visión general de las posibles tecnologías que podemos encontrar durante una evaluación.


Windows Defender

Windows Defender (o Microsoft Defender después de la actualización de mayo de 2020 de Windows 10) ha mejorado mucho a lo largo de los años y, por defecto, bloqueará herramientas como PowerView. Hay formas de eludir estas protecciones. Estas formas se cubrirán en otros módulos. Podemos usar el cmdlet de PowerShell incorporado Get-MpComputerStatus para obtener el estado actual de Defender. Aquí, podemos ver que el parámetro RealTimeProtectionEnabled está configurado en True, lo que significa que Defender está habilitado en el sistema.

Checking the Status of Defender with Get-MpComputerStatus

PS C:\htb> Get-MpComputerStatus

AMEngineVersion                 : 1.1.17400.5
AMProductVersion                : 4.10.14393.0
AMServiceEnabled                : True
AMServiceVersion                : 4.10.14393.0
AntispywareEnabled              : True
AntispywareSignatureAge         : 1
AntispywareSignatureLastUpdated : 9/2/2020 11:31:50 AM
AntispywareSignatureVersion     : 1.323.392.0
AntivirusEnabled                : True
AntivirusSignatureAge           : 1
AntivirusSignatureLastUpdated   : 9/2/2020 11:31:51 AM
AntivirusSignatureVersion       : 1.323.392.0
BehaviorMonitorEnabled          : False
ComputerID                      : 07D23A51-F83F-4651-B9ED-110FF2B83A9C
ComputerState                   : 0
FullScanAge                     : 4294967295
FullScanEndTime                 :
FullScanStartTime               :
IoavProtectionEnabled           : False
LastFullScanSource              : 0
LastQuickScanSource             : 2
NISEnabled                      : False
NISEngineVersion                : 0.0.0.0
NISSignatureAge                 : 4294967295
NISSignatureLastUpdated         :
NISSignatureVersion             : 0.0.0.0
OnAccessProtectionEnabled       : False
QuickScanAge                    : 0
QuickScanEndTime                : 9/3/2020 12:50:45 AM
QuickScanStartTime              : 9/3/2020 12:49:49 AM
RealTimeProtectionEnabled       : True
RealTimeScanDirection           : 0
PSComputerName                  :

AppLocker

Una lista blanca de aplicaciones es una lista de aplicaciones o ejecutables aprobados que están permitidos en un sistema. El objetivo es proteger el entorno de malware dañino y software no aprobado que no se alinea con las necesidades específicas de negocio de una organización. AppLocker es la solución de lista blanca de aplicaciones de Microsoft y brinda a los administradores de sistemas control sobre qué aplicaciones y archivos pueden ejecutar los usuarios. Proporciona control granular sobre ejecutables, scripts, archivos de instalación de Windows, DLLs, aplicaciones empaquetadas y 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 se puede eludir. Las organizaciones también suelen centrarse en bloquear el ejecutable 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. Podemos ver que este es el caso en las reglas de AppLocker mostradas a continuación. Se impide a todos los Domain Users ejecutar el ejecutable de PowerShell de 64 bits ubicado en:

%SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe

Entonces, simplemente podemos llamarlo desde otras ubicaciones. A veces, nos encontramos con políticas de AppLocker más estrictas que requieren más creatividad para eludirlas. Estas formas se cubrirán en otros módulos.

Using Get-AppLockerPolicy cmdlet

PS C:\htb> Get-AppLockerPolicy -Effective | select -ExpandProperty RuleCollections

PathConditions      : {%SYSTEM32%\WINDOWSPOWERSHELL\V1.0\POWERSHELL.EXE}
PathExceptions      : {}
PublisherExceptions : {}
HashExceptions      : {}
Id                  : 3d57af4a-6cf8-4e5b-acfc-c2c2956061fa
Name                : Block PowerShell
Description         : Blocks Domain Users from using PowerShell on workstations
UserOrGroupSid      : S-1-5-21-2974783224-3764228556-2640795941-513
Action              : Deny

PathConditions      : {%PROGRAMFILES%\*}
PathExceptions      : {}
PublisherExceptions : {}
HashExceptions      : {}
Id                  : 921cc481-6e17-4653-8f75-050b80acca20
Name                : (Default Rule) All files located in the Program Files folder
Description         : Allows members of the Everyone group to run applications that are located in the Program Files folder.
UserOrGroupSid      : S-1-1-0
Action              : Allow

PathConditions      : {%WINDIR%\*}
PathExceptions      : {}
PublisherExceptions : {}
HashExceptions      : {}
Id                  : a61c8b2c-a319-4cd0-9690-d2177cad7b51
Name                : (Default Rule) All files located in the Windows folder
Description         : Allows members of the Everyone group to run applications that are located in the Windows folder.
UserOrGroupSid      : S-1-1-0
Action              : Allow

PathConditions      : {*}
PathExceptions      : {}
PublisherExceptions : {}
HashExceptions      : {}
Id                  : fd686d83-a829-4351-8ff4-27c7de5755d2
Name                : (Default Rule) All files
Description         : Allows members of the local Administrators group to run all applications.
UserOrGroupSid      : S-1-5-32-544
Action              : Allow

PowerShell Constrained Language Mode

PowerShell Constrained Language Mode bloquea muchas de las características necesarias para usar PowerShell de manera efectiva, como bloquear objetos COM, solo permitir tipos .NET aprobados, flujos de trabajo basados en XAML, clases de PowerShell y más. Podemos enumerar rápidamente si estamos en Full Language Mode o Constrained Language Mode.

Enumerating Language Mode

PS C:\htb> $ExecutionContext.SessionState.LanguageMode

ConstrainedLanguage

LAPS

La Local Administrator Password Solution (LAPS) de Microsoft se usa para randomizar y rotar las contraseñas del administrador local en hosts Windows y prevenir el movimiento lateral. Podemos enumerar qué usuarios del dominio pueden leer la contraseña LAPS establecida para máquinas con LAPS instalado y qué máquinas no tienen LAPS instalado. El LAPSToolkit facilita enormemente esto con varias funciones. Una de ellas es analizar ExtendedRights para todas las computadoras con LAPS habilitado. Esto mostrará los grupos específicamente delegados para leer contraseñas LAPS, que a menudo son usuarios en grupos protegidos. Una cuenta que ha unido una computadora a un dominio recibe All Extended Rights sobre ese host, y este derecho le da la capacidad de leer contraseñas. La enumeración puede mostrar una cuenta de usuario que puede leer la contraseña LAPS en un host. Esto puede ayudarnos a apuntar a usuarios específicos de AD que pueden leer contraseñas LAPS.

Using Find-LAPSDelegatedGroups

PS C:\htb> Find-LAPSDelegatedGroups

OrgUnit                                             Delegated Groups
-------                                             ----------------
OU=Servers,DC=INLANEFREIGHT,DC=LOCAL                INLANEFREIGHT\Domain Admins
OU=Servers,DC=INLANEFREIGHT,DC=LOCAL                INLANEFREIGHT\LAPS Admins
OU=Workstations,DC=INLANEFREIGHT,DC=LOCAL           INLANEFREIGHT\Domain Admins
OU=Workstations,DC=INLANEFREIGHT,DC=LOCAL           INLANEFREIGHT\LAPS Admins
OU=Web Servers,OU=Servers,DC=INLANEFREIGHT,DC=LOCAL INLANEFREIGHT\Domain Admins
OU=Web Servers,OU=Servers,DC=INLANEFREIGHT,DC=LOCAL INLANEFREIGHT\LAPS Admins
OU=SQL Servers,OU=Servers,DC=INLANEFREIGHT,DC=LOCAL INLANEFREIGHT\Domain Admins
OU=SQL Servers,OU=Servers,DC=INLANEFREIGHT,DC=LOCAL INLANEFREIGHT\LAPS Admins
OU=File Servers,OU=Servers,DC=INLANEFREIGHT,DC=L... INLANEFREIGHT\Domain Admins
OU=File Servers,OU=Servers,DC=INLANEFREIGHT,DC=L... INLANEFREIGHT\LAPS Admins
OU=Contractor Laptops,OU=Workstations,DC=INLANEF... INLANEFREIGHT\Domain Admins
OU=Contractor Laptops,OU=Workstations,DC=INLANEF... INLANEFREIGHT\LAPS Admins
OU=Staff Workstations,OU=Workstations,DC=INLANEF... INLANEFREIGHT\Domain Admins
OU=Staff Workstations,OU=Workstations,DC=INLANEF... INLANEFREIGHT\LAPS Admins
OU=Executive Workstations,OU=Workstations,DC=INL... INLANEFREIGHT\Domain Admins
OU=Executive Workstations,OU=Workstations,DC=INL... INLANEFREIGHT\LAPS Admins
OU=Mail Servers,OU=Servers,DC=INLANEFREIGHT,DC=L... INLANEFREIGHT\Domain Admins
OU=Mail Servers,OU=Servers,DC=INLANEFREIGHT,DC=L... INLANEFREIGHT\LAPS Admins

El Find-AdmPwdExtendedRights verifica los derechos en cada computadora con LAPS habilitado para cualquier grupo con acceso de lectura y usuarios con "All Extended Rights". Los usuarios con "All Extended Rights" pueden leer contraseñas LAPS y pueden estar menos protegidos que los usuarios en grupos delegados, por lo que vale la pena verificarlos.

Using Find-AdmPwdExtendedRights

PS C:\htb> Find-AdmPwdExtendedRights

ComputerName                Identity                    Reason
------------                --------                    ------
EXCHG01.INLANEFREIGHT.LOCAL INLANEFREIGHT\Domain Admins Delegated
EXCHG01.INLANEFREIGHT.LOCAL INLANEFREIGHT\LAPS Admins   Delegated
SQL01.INLANEFREIGHT.LOCAL   INLANEFREIGHT\Domain Admins Delegated
SQL01.INLANEFREIGHT.LOCAL   INLANEFREIGHT\LAPS Admins   Delegated
WS01.INLANEFREIGHT.LOCAL    INLANEFREIGHT\Domain Admins Delegated
WS01.INLANEFREIGHT.LOCAL    INLANEFREIGHT\LAPS Admins   Delegated

Podemos usar la función Get-LAPSComputers para buscar computadoras que tengan LAPS habilitado cuando expiran las contraseñas, e incluso las contraseñas aleatorias en texto claro si nuestro usuario tiene acceso.

Using Get-LAPSComputers

PS C:\htb> Get-LAPSComputers

ComputerName                Password       Expiration
------------                --------       ----------
DC01.INLANEFREIGHT.LOCAL    6DZ[+A/[]19d$F 08/26/2020 23:29:45
EXCHG01.INLANEFREIGHT.LOCAL oj+2A+[hHMMtj, 09/26/2020 00:51:30
SQL01.INLANEFREIGHT.LOCAL   9G#f;p41dcAe,s 09/26/2020 00:30:09
WS01.INLANEFREIGHT.LOCAL    TCaG-F)3No;l8C 09/26/2020 00:46:04

Conclusion

Como hemos visto en esta sección, hay varias otras técnicas útiles de enumeración de AD disponibles para determinar qué protecciones están en su lugar. Vale la pena familiarizarse con todas estas herramientas y técnicas, y agregarlas a tu arsenal de opciones. Ahora, continuemos nuestra enumeración del dominio INLANEFREIGHT.LOCAL desde un punto de vista con credenciales.