Kerberos Token Bloat, Again
Am mai scris si o sa mai scriu probabil despre subiectul asta pentru ca pe masura ce trece timpul sunt sigur ca o sa vad tot mai multe astfel de cazuri (asta daca nu migreaza toata lumea pe Windows 10 si Windows 2012R2 sau mai mare).
Ca definitie, Kerberos Token Bloat se refera la scenariul cand token-ul Kerberos este prea mare, si de aici tot felul de probleme de autentificare. Pe vremuri primele simptome au fost legate de MTU si de faptul ca token-ul devenea fragmentat. Dar problema asta a fost depasita si s-a ajuns la o limitare numita MaxTokenSize ce defineste un buffer pentru tichetele Kerberos pe care le poate accepta un sistem Windows. Valoare initiala a pornit de la 8000 bytes (W2K) si a crescut la 12000 in Windows7/2008R2 iar incepand cu Windows 2012 este de 48000 bytes.
48000 este o valoare destul de mare, asa ca sistemele ce au MaxTokenSize setata asa nu vor suferi de Kerberos Token Bloat. In schimb daca inca esti pe 12000, ai sansa sa fii afectat de asa ceva. Dar hai sa vedem si cum.
Pai in ticketul ala Kerberos, o mare parte din informatie este reprezentata de acel PAC (Privilege Attribute Certificate) care ghiciti ce contine. Lista cu toate grupurile din care face parte userul (sub forma de SID bineinteles). Si nu numai grupurile ce apar in memberOf ci si “nested groups” (grupurile ce fac parte din grupurile din care face parte userul, etc), mai exact atributul tokenGroups (un atribut calculat atunci cand este accesat). Si cand sunt prea multe grupuri, automat si dimensiunea tichetului Kerberos o sa creasca.
Nota: exista o limita hardcoded de 1010 grupuri.
Iar daca se mai intampla ca obiectele din Active Directory sa mai contina si SIDHistory, automat informatia se dubleaza.
Cand banuiti o astfel de problema, puteti folosi scriptul de mai jos pentru a face o estimare a dimensiunii tokenului Kerberos pentru un anumit user:
https://gallery.technet.microsoft.com/scriptcenter/Check-for-MaxTokenSize-520e51e5
Si in functie de asta puteti sa reanalizati grupurile din care face parte userul (daca sunt nested, cateodata poate fi un chin) sau sa mariti dimensiunea MaxTokenSize.
Mai jos gasiti cateva articole foarte bune despre cum sa modificati MaxTokenSize pe diverse versiuni de Windows. Doar incepand cu Windows 2012 gasiti setarea by default in GPO:
https://support.microsoft.com/en-us/kb/938118
Nota: Setarile astea trebuie facute pe toate sistemele ce fac parte din conversatia Kerberos (adica vor trebui aplicate si pe DC-uri, servere si statii).
Chiar si cu NTDSUTIL puteti obtine informatii utile (gen toate SID-urile din token-ul unui user):
Iata si alte cateva resurse ce pot fi de folos in astfel de situatii:
https://support.microsoft.com/en-us/kb/328889
https://support.microsoft.com/en-us/kb/327825
https://www.sans.org/reading-room/whitepapers/authentication/kerberos-token-size-dos-33714
https://support.microsoft.com/en-us/kb/301916