La enumeración de usuarios y grupos es una etapa crítica en el proceso de reconocimiento de un dominio de Active Directory. Esta actividad permite al atacante obtener información valiosa sobre la estructura y composición del directorio, lo que puede ser utilizado posteriormente para identificar objetivos de alto valor y planificar ataques más sofisticados.

Existen diversas técnicas y herramientas que se pueden emplear para enumerar usuarios y grupos en Active Directory. A continuación se detallan algunas de las más comunes, junto con ejemplos prácticos de su aplicación:

  1. Uso de comandos nativos de Windows

Los comandos nativos de Windows como "net" y "dsquery" pueden proporcionar información básica sobre usuarios y grupos sin necesidad de herramientas adicionales.

Ejemplo de enumeración de usuarios con net:

net user /domain

Este comando listará todos los usuarios del dominio actual.

Ejemplo de enumeración de grupos con dsquery:

dsquery group -limit 0

Este comando mostrará todos los grupos del dominio sin límite de resultados.

  1. PowerShell y el módulo ActiveDirectory

PowerShell, junto con el módulo ActiveDirectory, ofrece capacidades más avanzadas de enumeración.

Ejemplo de enumeración de usuarios con propiedades específicas:

Get-ADUser -Filter * -Properties Name, EmailAddress, Department | 
Select-Object Name, EmailAddress, Department

Este comando obtiene el nombre, correo electrónico y departamento de todos los usuarios del dominio.

Ejemplo de enumeración de grupos y sus miembros:

Get-ADGroup -Filter * | ForEach-Object {
    $group = $_
    Get-ADGroupMember -Identity $group | ForEach-Object {
        [PSCustomObject]@{
            GroupName = $group.Name
            MemberName = $_.Name
            MemberType = $_.objectClass
        }
    }
}

Este script enumera todos los grupos y lista sus miembros, indicando si son usuarios o grupos anidados.

  1. Uso de herramientas especializadas: PowerView

PowerView es una poderosa herramienta de enumeración que forma parte del framework PowerSploit. Ofrece funcionalidades avanzadas y es ampliamente utilizada en pruebas de penetración.

Ejemplo de enumeración de usuarios con sesiones activas:

Find-DomainUserLocation

Este comando identifica usuarios con sesiones activas en equipos del dominio, lo que puede ser útil para identificar objetivos potenciales.

Ejemplo de búsqueda de usuarios con privilegios elevados:

Get-DomainUser -AdminCount | Select-Object samaccountname, memberof

Este comando lista usuarios que tienen o han tenido privilegios administrativos, mostrando sus nombres de cuenta y grupos a los que pertenecen.

  1. Enumeración de Unidades Organizativas (OUs)

Las Unidades Organizativas pueden proporcionar información valiosa sobre la estructura jerárquica de la organización.

Ejemplo de enumeración de OUs y usuarios dentro de ellas:

Get-ADOrganizationalUnit -Filter * | ForEach-Object {
    $ou = $_
    Get-ADUser -Filter * -SearchBase $ou.DistinguishedName | ForEach-Object {
        [PSCustomObject]@{
            OUName = $ou.Name
            UserName = $_.Name
        }
    }
}

Este script enumera todas las OUs y lista los usuarios contenidos en cada una de ellas.

  1. Enumeración de grupos anidados

Los grupos anidados pueden ocultar relaciones de privilegios importantes.

Ejemplo de enumeración de grupos anidados:

function Get-NestedGroupMembership {
    param (
        [string]$GroupName
    )

    $members = Get-ADGroupMember -Identity $GroupName
    foreach ($member in $members) {
        if ($member.objectClass -eq "group") {
            Write-Output "Group: $($member.name)"
            Get-NestedGroupMembership -GroupName $member.name
        } else {
            Write-Output "User: $($member.name)"
        }
    }
}

Get-NestedGroupMembership -GroupName "Domain Admins"

Esta función recursiva enumera todos los miembros de un grupo, incluyendo los miembros de grupos anidados, mostrando la estructura jerárquica completa.

Es importante destacar que estas técnicas de enumeración pueden generar un volumen significativo de tráfico de red y eventos de seguridad. Un atacante cuidadoso deberá considerar el uso de técnicas de evasión y limitación de velocidad para evitar la detección. Además, algunas de estas técnicas pueden requerir privilegios elevados, por lo que su efectividad dependerá del nivel de acceso inicial obtenido en el dominio.

La enumeración de usuarios y grupos es solo el primer paso en el proceso de reconocimiento de Active Directory. La información obtenida debe ser analizada cuidadosamente para identificar vectores de ataque potenciales, como cuentas inactivas, configuraciones débiles de grupos o relaciones de confianza que puedan ser explotadas en etapas posteriores del ataque.