Kerberos Veličina ulaznica i izazovi rasta

Prije neki dan naišao sam na prilično zanimljiv problem za neke korisnike, naime, nemogućnost autentifikacije s nizom domena zbog prekoračenja maksimalne veličine Kerberos karte (tokena). U ovom ćemo članku pokušati razmotriti značajke formiranja tokena Kerberos, metodologiju određivanja njegove veličine za određenog korisnika i povećanje međuspremnika za njegovo spremanje..

U našem se slučaju problem očitovao na sljedeći način. Neki korisnici nisu mogli pristupiti broju implementiranih usluga. Konkretno, došlo je do problema prilikom pokušaja povezivanja na farmu RDS (pogreška "pristup odbijen")

U zapisnicima poslužitelja udaljene radne površine zabilježena je greška ID-a 6 događaja:

Kerberos SSPI paket generirao je izlazni token veličine 22041 bajta, koji je bio prevelik da bi se mogao uklopiti u međuspremnik tokena veličine 12000 bajta, pod uvjetom id procesa 4.
Prevelik izlazni SSPI token je vjerojatno rezultat da je korisnik user @ domena član velikog broja grupa.
Preporučuje se minimizirati broj grupa kojima korisnik pripada. Ako se problem ne može ispraviti smanjenjem članstva u grupi ovog korisnika, molimo kontaktirajte svog administratora sustava za povećanje maksimalne veličine tokena, koja se u terminu podešava na stroju preko sljedeće vrijednosti registra: HKLM \ SYSTEM \ CurrentControlSet \ Control \ Lsa \ Kerberos \ Parameters \ MaxTokenSize.

Pri pokušaju povezivanja na SQL Server uočena je sljedeća pogreška:

Nepoznata pogreška u bazi podataka.

SQL stanje: HY000, SQL kôd pogreške: 0

Ne može se generirati SSPI kontekst. Obratite se administratoru sustava.

A u dnevniku je zabilježena pogreška Id događaja -40960

Sigurnosni sustav otkrio je pogrešku autentifikacije za poslužitelj XXXXXX. Kôd neuspjeha autentifikacijskog protokola Kerberos bio je "Buffer Too Small
Spremnik je premali da sadrži unos. U međuspremnik nisu napisane nikakve informacije. (0xc0000023).

Provjera prava pristupa resursima nije otkrila problem. Daljnja istraga incidenta otkrila je ovisnost - svi "problematični" korisnici bili su u velikom broju sigurnosnih grupa Active Directory (uzimajući u obzir ugniježđene skupine od više od 200). Stoga smo postupno došli do zaključka da je problem prekoračenje maksimalne duljine karte Kerberos koja se koristi za autorizaciju korisnika.

sadržaj:

  • Kerberos Veličina ulaznice
  • Kako saznati korisničku trenutnu veličinu karte Kerberos
  • Smanjenje veličine Kerberos tokena za korisnika
  • Kako povećati veličinu tokena Kerberos

Kerberos Veličina ulaznice

Veličina karte za Kerberos ovisi o sljedećim čimbenicima:

  • Broj sigurnosnih skupina Active Directory-a (uključujući i ugniježđene) kojima je korisnik član (grupe vrsta distribucije nisu uključene u token)
  • Primjene SIDHistory.primjedba. Problem s prekoračenjem maksimalne veličine ulaznica osobito je čest kod migracije korisnika između Active Directory domena i održavanja pristupa resursima stare domene putem mehanizma SIDHistory
  • Korišteni mehanizam provjere autentičnosti (uobičajena lozinka ili multifaktor, na primjer, pametne kartice)
  • Bez obzira na to je li račun delegiran na delegiranje ili ne

Kerberos koristi međuspremnik za pohranjivanje podataka o autorizaciji i prenosi njegovu veličinu na aplikacije koje koriste Kerberos. Parametar sustava MaxTokenSize - ona određuje veličinu međuspremnika. Veličina tampon je važna jer neki protokoli, poput RPC-a i HTTP-a, koriste ih pri dodjeli bloka memorije za autentifikaciju. Ako podaci za provjeru autentičnosti korisnika koji pokušava provjeriti identitet premašuju veličinu MaxTokenSize, pokušaj provjere autentifikacije smatra se neuspješnim. Ovo može objasniti pogreške u autentifikaciji prilikom pristupa IIS-u, a pristup datotekama mrežnim resursima je sačuvan..

Prema zadanim postavkama, veličina međuspremnika Kerberos (MaxTokenSize)

  • U sustavu Windows 7 i Windows Server 2008R2 - 12 Kb.
  • Za Windows 8 i Windows Server 2012 veličina se povećava na 48KB.

Dakle, ako je korisnik u velikom broju grupa, svi opisi grupa jednostavno ne odgovaraju 12 KB, a kada pristupite nekim resursima provjera autentičnosti.

vijeće. Postoji teško ograničenje broja grupa kojima korisnik može pripadati. Granica je 1015 grupa. Kada se premaši broj grupa, korisnik prima pogrešku "Sustav vas ne može prijaviti zbog sljedeće pogreške: Tijekom pokušaja prijave, sigurnosni kontekst korisnika akumulirao je previše sigurnosnih ID-ova. Pokušajte ponovno ili se posavjetujte s administratorom sustava."

Kako saznati korisničku trenutnu veličinu karte Kerberos

Windowsu nedostaju prikladni ugrađeni alati za otkrivanje veličine Kerberos tokena za određenog korisnika.

Da bismo dobili trenutnu veličinu ulaznica, koristimo skriptu Powershell treće strane CheckMaxTokenSize.ps1 (od Tima Springstona - Microsoft). Skripta vam omogućuje da dobijete trenutnu veličinu tokena navedenog korisnika, broj sigurnosnih skupina u koje je uključen, broj SID-ova pohranjenih u SIDHistory korisnika, kao i da li je račun za delegiranje pouzdan ili ne

Da biste koristili skriptu, preuzmite je s gornje veze i spremite je s imenom CheckMaxTokenSize.ps1

Onemogući provjeru skripte:

Set-ExecutionPolicy RemoteSigned
Idite u direktorij sa skriptu

CD c: \ instaliraj \ ps
I saznajte veličinu karte za Kerberos za korisničko ime:

.\ CheckMaxTokenSize.ps1 -Principals 'user_name' -OSEmulation $ true -Details $ true

Skripta traži da odredite za koje okruženje treba izračunati veličinu korisničke karte. Postoje dvije mogućnosti.

1 - Na Windows 7 / Windows Server 2008 R2 i novijim (veličina tokena 12K)

4 - U sustavu Windows 8 / Windows Server 2012 i novijim OS-ovima (veličina tokena 48K)

Pritisnite 1 i Enter. Nakon nekog vremena (3-4 minute) skripta će vratiti sljedeće podatke:

Pojedinosti tokena za korisničko ime korisnika
**********************************
Korisnička domena je CORP.
Ukupna procijenjena veličina tokena je 22648.
Za pristup DC-ima i delegiranim resursima ukupna procijenjena veličina delegacije tokena iznosi 45296.
Efektivna vrijednost MaxTokenSize je: 12000
Otkriven je problem. Žeton je bio prevelik za dosljedno autoriziranje. Izmijenite maksimalnu veličinu po KB-u http://support.microsoft.com/kb/327825 i razmislite o smanjenju izravnog i prijelaznog članstva u grupi.
* Detalji tokena za korisničko ime *
U tokenu je 957 skupina.
U SIDHistory korisnika postoje SID-ovi.
U grupama korisnika postoji 248 SID atributa SIDHistory.
Postoji 248 ukupnih SID povijesti za korisnika i grupe čiji je korisnik član.
1188 su sigurnosne skupine domena globalnog opsega.
37 su lokalne sigurnosne skupine.
68 su univerzalne sigurnosne skupine unutar korisničke domene.
0 su univerzalne sigurnosne skupine izvan domene korisnika.
Pojedinosti o grupi uključuju se u izlaznu datoteku na C: \ Windows \ temp \ TokenSizeDetails.txt
Pojedinosti o SID povijesti uključene su u izlaznu datoteku na C: \ Windows \ temp \ TokenSizeDetails.txt

Stoga smo utvrdili da je user_name član 957 skupina sigurnosnih domena i veličinu njegove Kerberos karte - 22.648, koja je gotovo 2 puta veća od standardne veličine Kerberos tokena u sustavu Windows 7 / Windows Server 2008 R.

Dakle, da biste riješili problem s autentifikacijom, morate ili smanjiti veličinu korisničkog tokena ili povećati veličinu međuspremnika na svim sustavima poslužitelja na kojima se promatra Kerberos autorizacija..

Smanjenje veličine Kerberos tokena za korisnika

Ako je moguće, pokušajte smanjiti korisničku kartu Kerberos za:

  • Smanjenje broja korisničkih grupa.vijeće. To se može olakšati uvođenjem novog mehanizma za kontrolu pristupa datotečnim resursima koji se pojavio u sustavu Windows Server 2012 - dinamička kontrola pristupa
  • Čišćenje povijesti SID-a
  • Odbijanje povjerenja za delegiranje računa (značajno smanjuje veličinu tokena)

Kako povećati veličinu tokena Kerberos

U slučaju da nije moguće smanjiti veličinu Kerberos karte za korisnike, možete povećati veličinu međuspremnika za nju. Za to registar ima poseban parametar MaxTokenSize.

Microsoft ne preporučuje postavljanje veličine MaxTokenSize na više od 64K, općenito, preporučuje se prvo ograničenje ograničenja na 48K (ograničenje za Windows 8/2012). Da biste povećali veličinu međuspremnika:

  1. Otvorite uređivač registra i idite na odjeljak HKEY_LOCAL_MACHINE \ Sustav \ CurrentControlSet \ Control \ Lsa \ Kerberos \ Parametri.
  2. Izradite novi parametar tipa DWORD (32-bitna) vrijednost s imenom MaxTokenSize
  3. Navedite željenu vrijednost za maksimalnu veličinu međuspremnika (odredili smo 48000, jer veličina korisničkog tokena ne prelazi ovu vrijednost)
  4. Ponovno pokrenite sustav

Ova se operacija mora izvesti na svim sustavima poslužitelja koji imaju problema s autentifikacijom..

Ako se na IIS web lokacijama pojave problemi s autentifikacijom, morat ćete povećati i veličinu HTTP zaglavlja na 64 KB (0000ffff). Prema zadanim postavkama maksimalna veličina zaglavlja iznosi 16 KB. Da biste to učinili, na IIS poslužiteljima moraju se izvršiti sljedeće promjene registra (također će biti potrebno ponovno pokretanje):

HKEY_LOCAL_MACHINE \ Sustav \ CurrentControlSet \ Usluge \ HTTP \ Parametri \ MaxFieldLength
DWORD: 0000ffff

HKEY_LOCAL_MACHINE \ System \ CurrentControlSet \ Services \ HTTP \ Parametri \ MaxRequestBytes
DWORD: 0000ffff

Windows 8 i Windows Server 2012 imaju novo pravilo koje vam omogućuje postavljanje maksimalne veličine MaxTokenSize - set maksimum Kerberos SSPI kontekst žeton pufer veličina. Nalazi se u odjeljku Konfiguracija računala -> Pravila -> Administrativni predlošci -> Sustav -> Kerberos.

Pored toga, postoji još jedna zanimljiva politika. Upozorenje za velike karte Kerberos , omogućujući vam konfiguriranje izlaza u sistemskom dnevniku upozorenja o viškovima karata.

Nakon omogućavanja pravila, kada se premaši veličina praga ulaznice, događaji će se bilježiti u zapisnik Događaj 31 s tekstom:

Za račun "AccountName" @ "DomainName" izdaje se karta za uslugu ldap / "DC Name" / "DomainName". Veličina šifriranog dijela ove karte je 17421 bajta, što je bliže ili veće od konfiguriranog praga veličine ulaznice (12000 bajta). Ova ulaznica ili bilo koje dodatne karte izdate s ove ulaznice mogu rezultirati neuspjehom autentifikacije ako klijent ili poslužitelj primjeni SSPI tokere međuspremnike ograničene vrijednošću koja je blizu pragu vrijednosti.

.