Kerberos Wireshark
In Verbindung mit der Arbeit an der Seite Kerberos Encryption habe ich einige Pakete mit Wireshark mitgeschnitten.
Anmeldung
Zuerst schaue ich mir aber eine einfache Anmeldung eines Clients (Windows 2016) an einem Domain Controller (Windows 2016) an. Sie sehen zuerst der AS-REQ, der mit einem "PREAUTH_REQUIRED" abgelehnt wird. Der zweite AS-REQ enthält dann genug Informationen, damit der KDC ein Ticket ausstellt.
Der erste Request liefert neben dem Benutzernamen und dem REALM (=Domain) auch die möglichen Encryption-Verfahren:
Der Client komplett gepatched und daher steht AES erst einmal oben. Es ist aber weiterhin auch das unsichere DES-CBC-MD5 möglich. Hoffen wir, dass es niemand nutzt.
Wenn Sie theoretisch mögliches "Downgrade" durch eine Malware verhindern wollen, sollten Sie per Richtlinie die schwachen Crypto-Verfahren unterbinden.
Die Antwort enthält u.a. einen SALT aber auch die möglichen Verfahren, mit dem ich im nächsten Schritt die Anmeldung anpassen
Es überrascht mich hier natürlich schon, das neben AES256-CTS-HMAC-SHA1-96 zusätzlich auch noch ARCFOUR-HMAC-MD5 angeboten wird. Das schwache Verfahren ignoriert mein Client und meldet sie per AES265 an.
Wenn Sie "Sicher"" sein wollen, dann verbieten Sie auf dem Client die Nutzung der schwachen Verfahren
Sie sehen hier aber auch, dass er PAC Signing mit Kerberos anfordert. Die Antwort enthält dann das geforderte "Ticket Granting Ticket" (TGT)
Damit habe wir nun ein TGT, mit dem wir weitere Tickets bei Bedarf anfordern können.
SMB 2 Service Zugriff
Bei einem Zugriff auf einen Domain Controller per LDAP oder SMB brauche ich natürlich ein Service Ticket für den entsprechenden Dienst. Hier habe ich einen Mitschnitt mit einer Anmeldung und Zugriff auf den NETLOGON-Share
Die Pakete im einzelnen mit Auszügen aus dem Paket
Paket | Beschreibung |
---|---|
34,35,42,43 |
Anmeldung des Client per Kerberos und Ausstellung eines TGT |
182,183 |
SMB Aushandlung der Möglichkeiten |
188 |
Anforderung eines
Service Tickets |
189 |
Antwort mit dem Service
Ticket |
208,210,211,212 |
SMB Zugriff mit Kerberos |
Die generelle Funktion von Kerberos bei der Anmeldung und dem Zugriff auf Dienste sollte damit verständlich sein. SMB ist dahingehend dankbar, da die Verbindung nicht verschlüsselt ist.
LDAP Service Zugriff
Auch bei einem Zugriff per LDAP sehen Sie folgendes:
Die Pakete bedeuten
Paket | Beschreibung |
---|---|
113 |
Anonyme Suche auf <ROOT> |
114 |
Antwort des LDAP-Servers
mit der Anzeige zu den
Namenkontexten aber
insbesondere der verfügbaren
Anmeldeverfahren: |
117 |
Nachdem der Client sich
dann ein Kerberos-Ticket
besorgt hat, kann er sich
damit direkt anmelden |
118 |
Die Anmeldung war erfolgreich und die Antwort wird geliefert |
Sollte der LDAP-Client allerdings LDAPS, d.h. LDAP über TLS nutzten, dann können Sie hier nichts mehr mitlesen. Dann bleibt ihnen nur eine Diagnose-Funktion auf dem Client, einen Trace auf dem LDAP-Server oder sie extrahieren das Zertifikat samt privatem Schlüssel, um mit Wireshark die TLS-Verbindung zu decodieren.
Sonderfall UDP oder TCP
Bei einem Kunden ist mit in Verbindung mit Linux eine Konversation aufgefallen, die sie nicht verwirren sollte. Kerberos nutzt nicht immer den TCP-Port 88, sondern kann auch über UDP kommunizieren. In dem fall war es ein Linux-System welches sich zuerst per UDP mit dem Windows DC verbunden hat. Sie sehen Am Anfang auch ein paar PREAUTH_FAILED, auf die ich nicht weiter eingehe bis dann ein "KRB5KRB_ERR_RESPONSE_TOO_BIG" kommt. Die Authentifizierung hat in dem Fall also geklappt, aber der KDC kann die Antwort nicht in einem einzigen UDP-Paket zurücksenden. Das kann schon mal passieren, wenn in dem Ticket z.B. die Gruppenmitgliedschaften enthalten sind.
Es obliegt dann dem Client auf diese Fehlermeldung zu reagieren und auf "Kerberos over TCP" umzuschalten, was hier auch passiert. Windows selbst solle auch erst einmal UDP verwenden.
By default, the maximum size of datagram packets for which Windows Server 2003
uses UDP is 1,465 bytes. For Windows XP and for Windows 2000, this maximum is
2,000 bytes. Transmission Control Protocol (TCP) is used for any datagrampacket
that is larger than this maximum.
Quelle: How to force Kerberos to use TCP instead of UDP in Windows
https://learn.microsoft.com/en-us/troubleshoot/windows-server/windows-security/force-kerberos-use-tcp-instead-udp
Allerdings hat UDP auch seine Probleme, wenn Pakete fragmentiert werden, sie Microsoft im gleichen Artikel schreibt:
By default, Kerberos uses connectionless UDP datagram packets. Depending on a
variety of factors including security identifier (SID) history and group
membership, some accounts will have larger Kerberos authentication packet sizes.
Depending on the virtual private network (VPN) hardware configuration, these
larger packets have to be fragmented when going through a VPN. The problem is
caused by fragmentation of these large UDP Kerberos packets. Because UDP is a
connectionless protocol, fragmented UDP packets will be dropped if they arrive
at the destination out of order.
Quelle: How to force Kerberos to use TCP instead of UDP in Windows
https://learn.microsoft.com/en-us/troubleshoot/windows-server/windows-security/force-kerberos-use-tcp-instead-udp
Die UDP-Probleme kenne ich auch schon bei VoIP mit IP und Loadbalancer. Siehe dazu auch Azure und Fragmentation.
Interessanterweise habe ich bei der ganzen Analyse mit Wireshark in einer Windows Umgebung keine Kerberos/UDP-Pakete gesehen. Als wenn Windows mittlerweile immer TPC nutzt.
- How to force Kerberos to use TCP instead of UDP in Windows
https://learn.microsoft.com/en-us/troubleshoot/windows-server/windows-security/force-kerberos-use-tcp-instead-udp
Wireshark Offloading
Bei der Analyse habe ich speziell mit IPv6 auf ein "TGS-REQ" (Paket 285) eine Antwort in Paket 287 nicht analysieren können, da Wireshark das Paket nicht decodiert hat. Er lässt sich wohl von der "IPv6 Payload Length = 0" irritieren und versucht gar nicht erst die Nutzdaten zu decodieren, die aber im Hex-Auszug als Kerberos-Paket zu erkennen sind.
In dem Fall hilft es, die Offload-Funktion der Netzwerkkarte zu deaktivieren.
- Wireshark: Offloading - Windows
https://wiki.Wireshark.org/CaptureSetup/Offloading#windows
Blackhat
Man muss kein Hacker sein, aber Vorträge auf der Blackhat liefert oft viele Hintergrundinformationen. Sie zeigen aber auch, dass gefährlich ist, schwache Verschlüsselungsverfahren oder unsichere Clients zuzulassen. Programme wie Mimikatz u.a. versuchen z.B. das TGT abzugreifen, um damit weitere Tickets ohne Beisein des Benutzers zu erstellen. Angreifer können aber auch PAC umgehen, wenn der DC PAC nicht erzwingt.
WATCHING THE WATCHDOG: PROTECTING KERBEROS
AUTHENTICATION WITH NETWORK MONITORING
https://www.blackhat.com/docs/eu-15/materials/eu-15-Beery-Watching-The-Watchdog-Protecting-Kerberos-Authentication-With-Network-Monitoring-wp.pdf
Watching The Watchdog: Protecting
Kerberos Authentication With Network Monitoring
https://www.youtube.com/watch?v=7qbSFYVQJ7A&ab_channel=BlackHat