Kerberos velikost vozovnic in izzivi rasti

Drugi dan sem naletela na precej zanimivo težavo za nekatere uporabnike, in sicer nezmožnost avtentikacije s številnimi domenskimi storitvami zaradi preseganja največje velikosti vozovnice Kerberos (žetona). V tem članku bomo poskušali upoštevati značilnosti oblikovanja žetona Kerberos, metodologijo za določitev njegove velikosti za določenega uporabnika in povečanje medpomnilnika za njegovo shranjevanje.

V našem primeru se je težava manifestirala na naslednji način. Nekateri uporabniki niso mogli dostopati do številnih razporejenih storitev. Zlasti je prišlo do težave pri poskusu povezave s kmetijo RDS (napaka »Dostop zavrnjen«)

V dnevnike strežnika Remote Desktop je bila zabeležena napaka Id ID 6 dogodka:

Paket kerberos SSPI je ustvaril izhodni žeton velikosti 22041 bajtov, ki je bil prevelik, da bi se lahko prilegel v pufer žetona velikosti 12000 bajtov, ki ga je posredoval id 4.
Prevelik izhodni žeton SSPI je verjetno rezultat, da je uporabnik uporabnik @ domena član velikega števila skupin.
Priporočljivo je zmanjšati število skupin, ki jim pripada uporabnik. Če težave ni mogoče odpraviti z zmanjšanjem članstva v skupini tega uporabnika, se obrnite na svojega sistemskega administratorja, da povečate največjo velikost žetona, ki je v istem roku konfigurirana strojno po naslednji vrednosti registra: HKLM \ SYSTEM \ CurrentControlSet \ Control \ Lsa \ Kerberos \ Parametri \ MaxTokenSize.

Pri poskusu povezave s strežnikom SQL je bila opažena naslednja napaka:

Neznana napaka baze podatkov.

Stanje SQL: HY000, koda napake SQL: 0

Ne morem ustvariti konteksta SSPI. Obrnite se na svojega sistemskega administratorja.

In v dnevniku je bila zabeležena napaka ID dogodka -40960

Varnostni sistem je zaznal napako pri preverjanju pristnosti za strežnik XXXXXX. Koda napake v protokolu za preverjanje pristnosti Kerberos je bila "Buffer Too Small
Medpomnilnik je premajhen, da bi vseboval vnos. V medpomnilnik ni bilo napisanih nobenih informacij (0xc0000023).

Preverjanje pravic dostopa do virov ni odkrilo težave. Nadaljnja preiskava incidenta je odkrila odvisnost - vsi "problematični" uporabniki so bili v velikem številu varnostnih skupin Active Directory (upoštevajoč več kot 200 ugnezdenih skupin). Tako smo postopoma prišli do zaključka, da težava presega največjo dolžino vozovnice Kerberos, ki se uporablja za avtorizacijo uporabnikov.

Vsebina:

  • Kerberos Velikost vozovnice
  • Kako ugotoviti trenutno uporabniško velikost Kerberosove vozovnice
  • Zmanjšanje velikosti žetona Kerberos za uporabnika
  • Kako povečati velikost žetona Kerberos

Kerberos Velikost vozovnice

Velikost vozovnice Kerberos je odvisna od naslednjih dejavnikov:

  • Število varnostnih skupin Active Directory (vključno z ugnezdenimi), katerih uporabnik je član (skupine distribucij niso vključene v žeton)
  • Uporaba SIDHistory.Opomba. Težava pri preseganju največje velikosti vozovnic je še posebej pogosta pri selitvi uporabnikov med domene Active Directory in ohranjanju dostopa do virov stare domene prek mehanizma SIDHistory
  • Uporabljeni mehanizem za preverjanje pristnosti (običajno geslo ali več-faktor, na primer pametne kartice)
  • Ne glede na to, ali je račun delegiran ali ne

Kerberos uporablja medpomnilnik za shranjevanje podatkov o avtorizaciji in njegovo velikost prenese na aplikacije, ki uporabljajo Kerberos. Sistemski parameter MaxTokenSize - določa velikost medpomnilnika. Velikost medpomnilnika je pomembna, ker nekateri protokoli, kot sta RPC in HTTP, ga uporabljajo pri dodeljevanju bloka pomnilnika za preverjanje pristnosti. Če podatki za preverjanje pristnosti uporabnika, ki poskuša overiti, presegajo velikost MaxTokenSize, se poskus overjanja šteje za neuspešen. To lahko pojasni napake pri preverjanju pristnosti pri dostopu do IIS, medtem ko je dostop do datotek do omrežnih virov ohranjen..

Privzeto je velikost medpomnilnika Kerberos (MaxTokenSize)

  • V sistemih Windows 7 in Windows Server 2008R2 - 12 Kb.
  • V sistemih Windows 8 in Windows Server 2012 je velikost povečana na 48Kb.

Če je uporabnik v večjem številu skupin, vsi opisi skupin preprosto ne ustrezajo 12 KB, pri dostopu do nekaterih virov pa preverjanje pristnosti ne uspe..

Namig. Število skupin, ki jim uporabnik lahko pripada, je stroga omejitev. Omejitev je 1015 skupin. Če je število skupin preseženo, se uporabnik prijavi v sistem. "Sistem vas ne more prijaviti zaradi naslednje napake: Med poskusom prijave se je v varnostnem kontekstu uporabnika nabralo preveč varnostnih identifikacijskih številk. Poskusite znova ali se posvetujte s svojim sistemskim administratorjem."

Kako ugotoviti trenutno uporabniško velikost Kerberosove vozovnice

Windows nima priročnih vgrajenih orodij, da bi ugotovil velikost žetona Kerberos za določenega uporabnika.

Da bi dobili trenutno velikost vozovnice, uporabljamo skript Powershell drugega proizvajalca CheckMaxTokenSize.ps1 (od Tima Springstona - Microsoft). Skript vam omogoča, da pridobite trenutno velikost žetona določenega uporabnika, število varnostnih skupin, v katere je vključen, število SID-jev, shranjenih v SIDHistory uporabnika, in tudi, ali račun za prenašanje zaupate ali ne

Če želite uporabiti skript, jo prenesite s zgornje povezave in jo shranite z imenom CheckMaxTokenSize.ps1

Onemogoči preverjanje skripta:

Set-ExecutionPolicy RemoteSigned
Pojdite v imenik s skriptom

Cd c: \ namestite \ ps
In ugotovite velikost vozovnice Kerberos za uporabniško ime:

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

Skript vas prosi, da določite, za katero okolje naj bo izračunana velikost uporabniške vozovnice. Obstajata dve možnosti.

1 - V sistemih Windows 7 / Windows Server 2008 R2 in starejših (velikost žetona 12K)

4 - V sistemu Windows 8 / Windows Server 2012 in naslednjih OS (velikost žetona 48K)

Pritisnite 1 in Enter. Čez nekaj časa (3-4 minute) bo skript vrnil naslednje podatke:

Podrobnosti o žetonu za uporabniško ime uporabnika
************************************
Uporabnikova domena je CORP.
Skupna ocenjena velikost žetona je 22648.
Za dostop do DC-jev in prenosnih virov je skupna ocenjena velikost deleža žetona 45296.
Učinkovita vrednost MaxTokenSize je: 12000
Zaznana je težava. Žeton je bil prevelik za dosledno odobritev. Spremenite največjo velikost na KB http://support.microsoft.com/kb/327825 in razmislite o zmanjšanju neposrednega in prehodnega članstva v skupini.
* Podrobnosti o žetonu za uporabniško ime *
V žetonu je 957 skupin.
V SIDHistory uporabnikov so SID-ji.
V skupinah uporabnikov je atributov SIDHistory 248 SID.
Uporabnikov in skupin, v katerih je član, je 248 skupnih zgodovin SID.
1188 so varnostne skupine za področje globalnega obsega.
37 so lokalne varnostne skupine.
68 so univerzalne varnostne skupine znotraj uporabniške domene.
0 so univerzalne varnostne skupine zunaj domene uporabnikov.
Podrobnosti o skupini, vključene v izhodno datoteko na C: \ Windows \ temp \ TokenSizeDetails.txt
Podrobnosti o zgodovini SID, vključene v izhodno datoteko na C: \ Windows \ temp \ TokenSizeDetails.txt

Tako smo ugotovili, da je uporabniško ime član 957 skupin varnostnih domen in velikost njegove vozovnice Kerberos - 22648, ki je skoraj 2-krat večja od standardne velikosti žetona Kerberos v sistemu Windows 7 / Windows Server 2008 R.

Če želite rešiti težavo s preverjanjem pristnosti, morate bodisi zmanjšati velikost uporabniškega žetona bodisi povečati velikost medpomnilnika v vseh sistemskih sistemih, na katerih je opaziti dovoljenje Kerberos.

Zmanjšanje velikosti žetona Kerberos za uporabnika

Če je mogoče, poskusite uporabniško kartico Kerberos zmanjšati za:

  • Zmanjšanje števila uporabniških skupin.Namig. To je mogoče olajšati z uvedbo novega mehanizma za nadzor dostopa do datotek, ki se je pojavil v sistemu Windows Server 2012 - Dynamic Access Control
  • Čiščenje zgodovine SID
  • Zavrnitev zaupanja pri prenosu računov (znatno zmanjša velikost žetona)

Kako povečati velikost žetona Kerberos

V primeru, da ni mogoče zmanjšati velikosti vozovnice Kerberos za uporabnike, lahko povečate velikost medpomnilnika zanjo. Za to ima register poseben parameter MaxTokenSize.

Microsoft ne priporoča nastavitve velikosti MaxTokenSize na več kot 64 K, na splošno je priporočljivo, da najprej povečate omejitev na 48 K (omejitev za Windows 8/2012). Če želite povečati velikost medpomnilnika:

  1. Odprite urejevalnik registra in pojdite na razdelek HKEY_LOCAL_MACHINE \ Sistem \ CurrentControlSet \ Control \ Lsa \ Kerberos \ Parametri.
  2. Ustvari nov parameter tipa DWORD (32-bitna) vrednost z imenom MaxTokenSize
  3. Navedite želeno vrednost za največjo velikost medpomnilnika (določili smo 48000, ker velikost uporabniškega žetona ne presega te vrednosti)
  4. Ponovni zagon sistema

To operacijo je treba izvesti v vseh sistemskih strežnikih, ki imajo težave s preverjanjem pristnosti..

Če se na spletnih mestih IIS pojavijo težave s preverjanjem pristnosti, boste morali tudi povečati velikost glave HTTP na 64 KB (0000ffff). Privzeto je največja velikost glave 16 KB. Če želite to narediti, je treba na strežnikih IIS opraviti naslednje spremembe registra (potreben bo tudi ponovni zagon):

HKEY_LOCAL_MACHINE \ Sistem \ CurrentControlSet \ Services \ HTTP \ Parametri \ MaxFieldLength
DWORD: 0000ffff

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

Windows 8 in Windows Server 2012 imata novo politiko, ki omogoča nastavitev največje velikosti MaxTokenSize - Set največ Kerberos SSPI kontekst žeton blažilnik velikost. Nahaja se pod Konfiguracija računalnika -> Politike -> Upravne predloge -> Sistem -> Kerberos.

Poleg tega obstaja še ena zanimiva politika. Opozorilo za velike karte Kerberos , omogoča konfiguriranje izhoda v sistemskem dnevniku opozoril o presežkih vozovnic.

Po omogočitvi pravilnika se ob preseganju mejne vrednosti vozovnice dogodki beležijo Dogodek 31 z besedilom:

Za račun "AccountName" @ "DomainName" se izda vozovnica za storitev ldap / "DC Name" / "DomainName". Velikost šifriranega dela te vozovnice je 17421 bajtov, kar je blizu ali večje od nastavljenega praga velikosti vozovnice (12000 bajtov). Ta vozovnica ali morebitne dodatne vozovnice, izdane na tej vozovnici, lahko povzročijo napake pri preverjanju pristnosti, če odjemalec ali strežniška aplikacija dodeli odbojnike za tokene SSPI, omejene z vrednostjo, ki je blizu pragovne vrednosti.

.