Kerberos jegyméret és növekedési kihívások

Másnap néhány felhasználó számára elég érdekes problémát vettem fel, nevezetesen az, hogy számos domainszolgáltatással nem sikerült hitelesíteni a Kerberos jegy (token) maximális méretének túllépése miatt. Ebben a cikkben megpróbáljuk megvizsgálni a Kerberos token kialakításának jellemzőit, a módszert annak méretének meghatározására egy adott felhasználó számára és a tároló pufferének növelésére.

Esetünkben a probléma az alábbiak szerint jelentkezett. Egyes felhasználók nem tudtak hozzáférni számos telepített szolgáltatáshoz. Különösen probléma merült fel az RDS farmhoz való csatlakozáskor („Hozzáférés megtagadva” hiba)

A Távoli asztali kiszolgáló naplóiban Event Id 6 hiba került rögzítésre:

A kerberos SSPI csomag egy 22041 bájt méretű kimeneti tokent hozott létre, amely túl nagy volt ahhoz, hogy beleférjen az 12000 bájt méretű token pufferbe, amelyet a 4. folyamat azonosító biztosít..
A túl nagy kimeneti SSPI-token valószínűleg annak eredménye, hogy a user user @ domain számos csoport tagja.
Ajánlott minimálisra csökkenteni a felhasználóhoz tartozó csoportok számát. Ha a problémát a felhasználó csoporttagságának csökkentésével nem lehet megoldani, kérjük, vegye fel a kapcsolatot a rendszergazdával, hogy növelje a maximális jogkivonat méretét, amelyet kifejezetten gépi szinten konfigurálnak a következő nyilvántartási érték segítségével: HKLM \ SYSTEM \ CurrentControlSet \ Control \ Lsa \ Kerberos \ Paraméterek \ MaxTokenSize.

Az SQL Serverhez való csatlakozáskor a következő hibát észlelték:

Ismeretlen adatbázishiba.

SQL állapot: HY000, SQL hibakód: 0

Nem generálható az SSPI kontextus. Vegye fel a kapcsolatot a rendszergazdával.

És hiba történt a naplóban Rendezvény azonosítója -40960

A biztonsági rendszer hitelesítési hibát észlelt az XXXXXX szervernél. A Kerberos hitelesítési protokoll hibakódja: „Puffer túl kicsi
A puffer túl kicsi ahhoz, hogy a bejegyzést tartalmazza. Nincs információ a puffernek. (0xc0000023).

Az erőforrásokhoz való hozzáférési jogok ellenőrzése nem tárt fel problémát. Az esemény további vizsgálata függőséget tárt fel - az összes "problémás" felhasználó számos Active Directory biztonsági csoportban volt (figyelembe véve a több mint 200 beágyazott csoportot). Így fokozatosan arra a következtetésre jutottunk, hogy a probléma meghaladja a felhasználók engedélyezéséhez használt Kerberos jegy maximális hosszát.

Tartalom:

  • Kerberos jegyméret
  • Hogyan lehet megtudni a felhasználó jelenlegi Kerberos jegyméretet
  • A felhasználó számára a Kerberos token méretének csökkentése
  • Hogyan lehet növelni a Kerberos token méretét?

Kerberos jegyméret

A Kerberos jegymérete a következő tényezőktől függ:

  • Az Active Directory biztonsági csoportjainak száma (beleértve a beágyazott csoportokat is), amelyekhez a felhasználó tartozik (a terjesztési típusú csoportok nem szerepelnek a tokenben)
  • A SIDHistory felhasználásai.megjegyzés. A maximális jegyméret túllépésének problémája különösen akkor jelentkezik, amikor a felhasználókat az Active Directory tartományok közötti migrálják, és a régi tartomány erőforrásaihoz való hozzáférést fenntartják a SIDHistory mechanizmuson keresztül
  • A használt hitelesítési mechanizmus (normál jelszó vagy több tényező, például intelligens kártyák)
  • Függetlenül attól, hogy a fiók átruházásra került-e vagy sem

A Kerberos puffert használ az engedélyezési információk tárolására, és átadja méretét az alkalmazásokhoz a Kerberos segítségével. Rendszerparaméter MaxTokenSize - meghatározza a puffer méretét. A puffer mérete azért fontos, mert Néhány protokoll, például az RPC és a HTTP, használja azt, amikor a memória blokkját kiosztja a hitelesítéshez. Ha a hitelesíteni próbáló felhasználó hitelesítési adatai meghaladják a MaxTokenSize méretét, akkor a hitelesítési kísérlet sikertelennek minősül. Ez megmagyarázhatja a hitelesítési hibákat az IIS elérésekor, miközben megőrzi a hálózati erőforrásokhoz való fájlhozzáférést..

Alapértelmezés szerint a Kerberos pufferméret (MaxTokenSize)

  • Windows 7 és Windows Server 2008R2 rendszereken - 12 Kb.
  • Windows 8 és Windows Server 2012 operációs rendszereknél a méret a következőre növekszik: 48Kb.

Így ha a felhasználó nagyszámú csoportba tartozik, akkor az összes csoportleírás egyszerűen nem felel meg a 12 KB méretűnek, és ha egyes erőforrásokhoz való hozzáférés sikertelen.

tanács. Szigorúan korlátozott az a csoportok száma, amelyhez a felhasználó tartozhat. A határ 1015 csoport. Ha túllépi a csoportok számát, a felhasználó bejelentkezik a rendszerbe. "A rendszer nem tud bejelentkezni a következő hiba miatt: Bejelentkezéskor a felhasználó biztonsági környezetében túl sok biztonsági azonosító gyűlt össze. Kérjük, próbálja meg újra, vagy forduljon a rendszergazdához."

Hogyan lehet megtudni a felhasználó jelenlegi Kerberos jegyméretet

A Windowshoz nincs kényelmes beépített eszköz, amely megtudja, egy adott felhasználó számára a Kerberos token mérete megtörténik.

A jelenlegi jegyméret megszerzéséhez harmadik fél Powershell szkriptét, a CheckMaxTokenSize.ps1 (Tim Springston - Microsoft) használjuk. A szkript lehetővé teszi, hogy megkapja a megadott felhasználó aktuális tokenméretet, azon biztonsági csoportok számát, amelyekbe beletartozik, a felhasználó SIDHistoryjában tárolt SID-ek számát, valamint azt is, hogy megbízható-e az átruházáshoz szükséges fiók.

A szkript használatához töltse le a fenti linkből, és mentse el CheckMaxTokenSize.ps1 névvel.

Letiltja a szkript ellenőrzését:

Set-ExecutionPolicy RemoteSigned
Nyissa meg a könyvtárat a szkripttel

Cd c: \ install \ ps
És megtudhatja a felhasználónév Kerberos jegyének méretét:

.\ CheckMaxTokenSize.ps1 -Principals 'felhasználónév' -OSEmulation $ true -Details $ true

A szkript megkéri, hogy adja meg, mely környezetben kell kiszámítani a felhasználói jegy méretét. Két lehetőség van.

1 - Windows 7 / Windows Server 2008 R2 vagy annál korábbi (tokenméret 12K)

4 - Windows 8 / Windows Server 2012 és az azt követő operációs rendszerekben (token mérete 48K)

Nyomja meg az 1-t és az Enter-t. Egy idő után (3-4 perc) a szkript a következő információkat adja vissza:

A felhasználói felhasználónév token részletei
**********************************
A felhasználó domainje CORP.
A token becsült teljes mérete 22648.
A DC-khez való hozzáféréshez és a delegálható erőforrásokhoz a token átruházásának teljes becsült mérete 45296.
A tényleges MaxTokenSize érték: 12000
Probléma észlelve. A token túl nagy volt a következetes engedélyhez. Módosítsa a KB-nkénti maximális méretet http://support.microsoft.com/kb/327825, és fontolja meg a közvetlen és tranzitív csoporttagságok csökkentését.
* A felhasználónév tokenjének részletei *
957 csoport van a tokenben.
Vannak SID-ek a SIDHistory felhasználókban.
A SIDHistory attribútumok felhasználói csoportjai között 248 SID található.
Összesen 248 SID-előzmény található a felhasználó számára, és a felhasználók csoportjai a felhasználó tagjai.
Az 1188 domain globális biztonsági csoportok.
37 domain tartományi biztonsági csoport.
A 68 elem a felhasználói tartományon belüli univerzális biztonsági csoport.
0 a felhasználói tartományon kívüli univerzális biztonsági csoportok.
A C: \ Windows \ temp \ TokenSizeDetails.txt kimeneti fájlban található csoport részletei
A SID előzmények részletei a kimeneti fájlban a C: \ Windows \ temp \ TokenSizeDetails.txt oldalon

Így megállapítottuk, hogy a felhasználónév 957 biztonsági tartományi csoport tagja, és Kerberos jegyének mérete - 22648, ami majdnem kétszer nagyobb a Windows 7 / Windows Server 2008 R szabványos Kerberos tokenméreténél.

Így a hitelesítési probléma megoldásához vagy csökkentenie kell a felhasználói jogkivonat méretét, vagy meg kell növelnie a puffer méretét minden olyan kiszolgáló rendszeren, amelyeken a Kerberos engedélyezése megfigyelésre kerül.

A felhasználó számára a Kerberos token méretének csökkentése

Ha lehetséges, próbálja meg csökkenteni a felhasználó Kerberos jegyét:

  • A felhasználói csoportok számának csökkentése.tanács. Ezt megkönnyítheti a fájl-erőforrásokhoz való hozzáférés ellenőrzésére szolgáló új mechanizmus bevezetése, amely a Windows Server 2012-ben jelent meg - Dinamikus hozzáférés-vezérlés
  • SID előzmények megtisztítása
  • A bizalom megtagadása a számlák átruházásakor (jelentősen csökkenti a token méretét)

Hogyan lehet növelni a Kerberos token méretét?

Abban az esetben, ha a felhasználók számára nem lehet csökkenteni a Kerberos jegy méretét, növelheti a puffer méretét. Ehhez a nyilvántartásnak van egy speciális paramétere MaxTokenSize.

A Microsoft nem javasolja, hogy a MaxTokenSize méretét meghaladja a 64K-ot, általában azt javasoljuk, hogy először növelje a korlátot 48K-ra (a Windows 8/2012 korlátozása). A pufferméret növelése:

  1. Nyissa meg a regisztrációs szerkesztőt, és lépjen a szakaszba HKEY_LOCAL_MACHINE \ System \ CurrentControlSet \ Control \ Lsa \ Kerberos \ Paraméterek.
  2. Hozzon létre egy új típusú paramétert DWORD (32 bites) érték a névvel MaxTokenSize
  3. Adja meg a maximális pufferméret kívánt értékét (48000-et adtunk meg, mert a felhasználói token mérete nem haladja meg ezt az értéket)
  4. Indítsa újra a rendszert

Ezt a műveletet minden olyan szerver rendszeren végre kell hajtani, amelyek hitelesítési problémákat tapasztalnak..

Ha hitelesítési problémák merülnek fel az IIS webhelyeken, akkor a HTTP fejléc méretét 64 KB-ra (0000ffff) is meg kell növelnie. Alapértelmezés szerint a fejléc maximális mérete 16 KB. Ehhez az IIS-kiszolgálókon a következő módosításokat kell végrehajtani a rendszerleíró adatbázisban (újraindításra is szükség lesz):

HKEY_LOCAL_MACHINE \ System \ CurrentControlSet \ Services \ HTTP \ Parameters \ MaxFieldLength
DWORD: 0000ffff

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

A Windows 8 és a Windows Server 2012 új irányelvvel rendelkezik, amely lehetővé teszi a MaxTokenSize maximális méretének beállítását - készlet maximális Kerberos SSPI kontextus jelképes ütköző méret. A Számítógép konfigurálása -> Házirendek -> Felügyeleti sablonok -> Rendszer -> Kerberos alatt található.

Ezen felül van még egy érdekes politika. Figyelem a nagy Kerberos jegyekre , lehetővé teszi a kimeneti konfigurálását a jegynaplókra vonatkozó figyelmeztetések rendszernaplójában.

A házirend engedélyezése után, amikor a jegy küszöbértékét túllépik, az eseményeket rögzítik a naplóban 31. esemény szöveggel:

Az "ldap" / "DC név" / "DomainName" szolgáltatási jegy a "AccountName" @ "DomainName" számla számára kerül kiállításra. Ennek a jegynek a titkosított része mérete 17421 byte, amely közel vagy nagyobb, mint a beállított jegyméret-küszöb (12000 byte). Ez a jegy vagy a jegyből kiállított további jegyek hitelesítési hibákat eredményezhetnek, ha az ügyfél vagy a kiszolgálóalkalmazás az SSPI token-puffereket kioszt egy küszöbértékhez közeli értékkel határolva..

.