Resource-based Constrained Delegation
Grundlagen der ressourcenbasierten eingeschränkten Delegierung
Dies ähnelt der grundlegenden Eingeschränkten Delegierung, aber anstatt Berechtigungen an ein Objekt zu geben, um sich als beliebiger Benutzer gegenüber einem Dienst auszugeben. Die ressourcenbasierte eingeschränkte Delegierung legt im Objekt fest, wer sich als beliebiger Benutzer gegenüber ihm ausgeben kann.
In diesem Fall wird das eingeschränkte Objekt ein Attribut namens msDS-AllowedToActOnBehalfOfOtherIdentity mit dem Namen des Benutzers haben, der sich als jeden anderen Benutzer gegenüber ihm ausgeben kann.
Ein weiterer wichtiger Unterschied zu dieser eingeschränkten Delegierung gegenüber den anderen Delegierungen besteht darin, dass jeder Benutzer mit Schreibberechtigungen über ein Maschinenkonto (GenericAll/GenericWrite/WriteDacl/WriteProperty/etc) das msDS-AllowedToActOnBehalfOfOtherIdentity setzen kann (Bei den anderen Formen der Delegierung benötigten Sie Domänenadministratorrechte).
Neue Konzepte
Früher wurde bei der Eingeschränkten Delegierung gesagt, dass die TrustedToAuthForDelegation
-Flagge im userAccountControl-Wert des Benutzers benötigt wird, um ein S4U2Self durchzuführen. Aber das ist nicht ganz richtig.
Die Realität ist, dass Sie auch ohne diesen Wert ein S4U2Self gegen jeden Benutzer durchführen können, wenn Sie ein Dienst sind (eine SPN haben). Wenn Sie jedoch TrustedToAuthForDelegation
haben, wird das zurückgegebene TGS Forwardable sein, und wenn Sie diese Flagge nicht haben, wird das zurückgegebene TGS nicht Forwardable sein.
Wenn das in S4U2Proxy verwendete TGS NICHT Forwardable ist und Sie versuchen, eine grundlegende eingeschränkte Delegierung auszunutzen, wird es nicht funktionieren. Wenn Sie jedoch versuchen, eine ressourcenbasierte eingeschränkte Delegierung zu nutzen, wird es funktionieren (das ist keine Schwachstelle, sondern anscheinend ein Feature).
Angriffsstruktur
Wenn Sie Schreibäquivalente Berechtigungen über ein Computer-Konto haben, können Sie privilegierten Zugriff auf diese Maschine erhalten.
Angenommen, der Angreifer hat bereits Schreibäquivalente Berechtigungen über das Opfer-Computerkonto.
Der Angreifer kompromittiert ein Konto, das eine SPN hat oder erstellt eine ("Dienst A"). Beachten Sie, dass jeder Admin-Benutzer ohne besondere Privilegien bis zu 10 Computerobjekte (MachineAccountQuota) erstellen und diesen eine SPN setzen kann. Der Angreifer kann also einfach ein Computerobjekt erstellen und eine SPN setzen.
Der Angreifer missbraucht seine SCHREIB-Berechtigung über das Opfer-Computerkonto (Dienst B), um eine ressourcenbasierte eingeschränkte Delegierung zu konfigurieren, die es Dienst A ermöglicht, sich als beliebiger Benutzer gegenüber diesem Opfer-Computer (Dienst B) auszugeben.
Der Angreifer verwendet Rubeus, um einen vollständigen S4U-Angriff (S4U2Self und S4U2Proxy) von Dienst A auf Dienst B für einen Benutzer mit privilegiertem Zugriff auf Dienst B durchzuführen.
S4U2Self (vom kompromittierten/erstellten Konto mit SPN): Fordern Sie ein TGS des Administrators für mich an (Nicht Forwardable).
S4U2Proxy: Verwenden Sie das nicht Forwardable TGS des vorherigen Schritts, um ein TGS vom Administrator zum Opferhost anzufordern.
Selbst wenn Sie ein nicht Forwardable TGS verwenden, da Sie eine ressourcenbasierte eingeschränkte Delegierung ausnutzen, wird es funktionieren.
Der Angreifer kann das Ticket weitergeben und den Benutzer imitieren, um Zugriff auf den Opferdienst B zu erhalten.
Um das MachineAccountQuota der Domäne zu überprüfen, können Sie verwenden:
Angriff
Erstellen eines Computerobjekts
Sie können ein Computerobjekt innerhalb der Domäne mithilfe von powermad:
Konfigurieren der Ressourcenbasierten Eingeschränkten Delegierung
Verwendung des Active Directory PowerShell-Moduls
Verwendung von Powerview
Durchführung eines vollständigen S4U-Angriffs
Zunächst haben wir das neue Computerobjekt mit dem Passwort 123456
erstellt, daher benötigen wir den Hash dieses Passworts:
Das wird die RC4- und AES-Hashes für dieses Konto ausgeben. Nun kann der Angriff durchgeführt werden:
Sie können mehr Tickets generieren, indem Sie einmal den /altservice
-Parameter von Rubeus verwenden:
Beachten Sie, dass Benutzer ein Attribut namens "Kann nicht delegiert werden" haben. Wenn ein Benutzer dieses Attribut auf True hat, können Sie ihn nicht übernehmen. Diese Eigenschaft kann in Bloodhound eingesehen werden.
Zugriff
Der letzte Befehl wird den kompletten S4U-Angriff durchführen und das TGS von Administrator zum Opferhost im Speicher injizieren. In diesem Beispiel wurde ein TGS für den CIFS-Dienst von Administrator angefordert, sodass Sie auf C$ zugreifen können:
Missbrauch verschiedener Diensttickets
Erfahren Sie mehr über die verfügbaren Diensttickets hier.
Kerberos-Fehler
KDC_ERR_ETYPE_NOTSUPP
: Dies bedeutet, dass Kerberos so konfiguriert ist, dass DES oder RC4 nicht verwendet wird und Sie nur den RC4-Hash bereitstellen. Liefern Sie Rubeus mindestens den AES256-Hash (oder liefern Sie ihm einfach die RC4-, AES128- und AES256-Hashes). Beispiel:[Rubeus.Program]::MainString("s4u /user:FAKECOMPUTER /aes256:CC648CF0F809EE1AA25C52E963AC0487E87AC32B1F71ACC5304C73BF566268DA /aes128:5FC3D06ED6E8EA2C9BB9CC301EA37AD4 /rc4:EF266C6B963C0BB683941032008AD47F /impersonateuser:Administrator /msdsspn:CIFS/M3DC.M3C.LOCAL /ptt".split())
KRB_AP_ERR_SKEW
: Dies bedeutet, dass die Zeit des aktuellen Computers von der des DC abweicht und Kerberos nicht ordnungsgemäß funktioniert.preauth_failed
: Dies bedeutet, dass der angegebene Benutzername + Hashes nicht funktionieren, um sich anzumelden. Möglicherweise haben Sie vergessen, das "$" im Benutzernamen zu setzen, wenn Sie die Hashes generieren (.\Rubeus.exe hash /password:123456 /user:FAKECOMPUTER$ /domain:domain.local
)KDC_ERR_BADOPTION
: Dies kann bedeuten:Der Benutzer, den Sie zu imitieren versuchen, kann nicht auf den gewünschten Dienst zugreifen (weil Sie ihn nicht imitieren können oder weil er nicht genügend Berechtigungen hat)
Der angeforderte Dienst existiert nicht (wenn Sie ein Ticket für WinRM anfordern, aber WinRM nicht ausgeführt wird)
Der erstellte Fakecomputer hat seine Berechtigungen über dem verwundbaren Server verloren und Sie müssen sie zurückgeben.
Referenzen
Last updated