Reconocimiento Interno

El reconocimiento interno es una fase crucial en el proceso de comprometer un entorno de Active Directory (AD). Esta etapa implica la recopilación de información detallada sobre la infraestructura interna del AD, incluyendo usuarios, grupos, políticas y configuraciones. A continuación, se detallan las técnicas y herramientas utilizadas para llevar a cabo el reconocimiento interno, junto con ejemplos prácticos de explotación.

1. Enumeración utilizando capacidades integradas

PowerShell

PowerShell es una herramienta poderosa para la enumeración en entornos de AD. Utilizando cmdlets específicos, se puede obtener información detallada sobre el dominio.

Ejemplo de enumeración de usuarios:

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:

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.

WMI (Windows Management Instrumentation)

WMI es otra herramienta integrada que permite la enumeración de objetos en AD.

Ejemplo de enumeración del dominio:

Get-WmiObject -Namespace root\directory\ldap -Class ds_domain | select ds_dc, ds_distinguishedname, pscomputername

Este comando obtiene información sobre el dominio actual.

Comandos net.exe

Los comandos nativos de Windows como "net" también pueden ser utilizados para la enumeración.

Ejemplo de enumeración de usuarios:

net user /domain

Este comando lista todos los usuarios del dominio actual.

2. Herramientas comunes de enumeración

PowerView

PowerView es una herramienta de enumeración avanzada que forma parte del framework PowerSploit.

Ejemplo de enumeración de usuarios con sesiones activas:

Find-DomainUserLocation

Este comando identifica usuarios con sesiones activas en equipos del dominio.

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.

BloodHound

BloodHound utiliza la teoría de grafos para encontrar relaciones entre objetos en AD que pueden ser explotadas.

Ejemplo de colección de datos con SharpHound:

SharpHound.exe -c All

Este comando recopila información completa sobre el dominio y la estructura de AD.

3. Enumeración de Unidades Organizativas (OUs)

Las Unidades Organizativas (OUs) 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.

4. 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.

Conclusión

El reconocimiento interno es una etapa esencial para comprender la estructura y las vulnerabilidades de un entorno de Active Directory. Utilizando herramientas integradas y especializadas, los atacantes pueden recopilar información detallada que les permitirá planificar y ejecutar ataques más sofisticados. Es crucial que los defensores implementen medidas de monitoreo y detección para identificar y mitigar estas actividades de reconocimiento.