Jak vyřešit zablokování účtu Active Directory pomocí prostředí PowerShell

Jak sledovat a vyřešit zablokovaný účet Active Directory? Zjistěte, k čemu dochází, jak najít konkrétní události a jak události analyzovat.

Active Directory (AD) je úžasná služba. Pomocí stejného uživatelského jména a hesla se můžete přihlásit odkudkoli v síti. Nemůže to být jednodušší – tedy dokud nezapomenete ukončit relaci vzdálené plochy, dokud se po síti nerozšíří červ nebo dokud nezapomenete, že spouštíte naplánovanou úlohu jako svůj uživatelský účet, nebo dokud… No, chápete to. Služba AD je nesmírně užitečný produkt; proto je míra jejího přijetí tak vysoká. Problém nastává, když se účet začne bezdůvodně blokovat. Nebo si to alespoň myslíte.

Zásady blokování účtů AD

Mnoho organizací má (nebo by mělo mít) zásady blokování účtů. Tato politika je bezpečnostním opatřením, které má zabránit tomu, aby se neoprávněné osoby pokoušely nepřetržitě hádat heslo nebo heslo získávat hrubou silou. Zásady blokování účtů jsou v Active Directory běžné a spočívají v jednoduchém přístupu k boji proti závažnému bezpečnostnímu problému. Při určitém počtu pokusů o zadání nesprávného hesla je účet nepoužitelný, dokud jej správce ručně znovu nezakáže. Záměr je pravdivý, ale v některých případech implementace není.

V některých situacích, zejména při změně hesla, se může účet náhle začít bez zjevného důvodu trvale zamykat. Uživatel zavolá na helpdesk, ten účet znovu povolí a o něco později je účet opět uzamčen. Je to frustrující zkušenost jak pro uživatele, tak pro helpdesk. Někdy problém ještě zhoršuje neznámý původ zablokování. Někde, nějakým způsobem existuje člověk, skript nebo proces, který neustále zkouší stejné špatné heslo znovu a znovu, ale nikdo neví kde.

Jak tedy tyto nepříjemné blokace vystopovat? Jedním ze způsobů je použití skriptu prostředí PowerShell. Nejprve si ale projděme, co se stane, když je účet uzamčen.

Řešení uzamčeného účtu AD

V prostředí systému Windows Server 2008 nebo novějším probíhá krátká cesta tam a zpět mezi klientským systémem, řadičem domény klientského systému a řadičem domény, který drží roli emulátoru primárního řadiče domény (PDC). K tomu dochází následujícím způsobem:

  1. Při každém pokusu o ověření uživatelského účtu jsou pověření odeslána až na příslušný řadič domény pro podsíť klientského systému.
  2. Pokud je heslo chybné, předá řadič domény klientského systému požadavek řadiči domény, který drží roli emulátoru PDC. Je to proto, že řadič domény klientského systému nemusí mít nejaktuálnější heslo a podle konstrukční vlastnosti služby Active Directory ho vždy bude mít řadič domény držící roli emulátoru PDC.
  3. Emulátor PDC zkusí heslo zadat znovu, a pokud je stále shledáno jako nesprávné, zvýší emulátor PDC u uživatelského účtu atribut badPwdCount.
  4. V emulátoru PDC je vytvořena událost ID 4740 s IP adresou klientského systému, který inicioval původní požadavek, a s uživatelským účtem.
  5. Emulátor PDC poté informuje řadič domény klientského systému, že heslo je ve skutečnosti chybné.
  6. Řadič domény klientského systému poté oznámí klientskému systému, že heslo bylo chybné.

Kde by bylo nejlepší najít zdroj? Odpověď je v emulátoru PDC. Důvodem je to, že každé zablokování účtu je tam zaznamenáno v protokolu událostí zabezpečení. Emulátor PDC je centrálním místem, kde lze vyhledat všechny události zablokování účtů.

Pomocí prostředí PowerShell lze dohledat zdroj zablokování účtů AD

Pro dotaz do emulátoru PDC použijeme rutinu Get-WinEvent prostředí PowerShell. Jedná se o mimořádně užitečnou rutinu pro rychlé procházení jednoho nebo více protokolů událostí na serveru. Hledáme ID události 4740. Nejprve musíme najít řadič domény, který má roli emulátoru PDC. Jedním ze způsobů, jak to provést, je použít rutinu Get-AdDomain.

Jakmile známe emulátor PDC, stačí se zeptat jeho protokolu událostí zabezpečení na ID události 4740.

Mám účet s názvem abertram, který je uzamčen. Podívejme se, jak vypátrat viníka.

Máme nyní emulátor PDC, takže se zeptáme na jeho protokol událostí zabezpečení pomocí skriptu prostředí PowerShell.

## Definujte uživatelské jméno, které je zablokované
$Username = ‚abertram‘
## Najděte roli řadiče domény PDCe
$Pdce = (Get-AdDomain).PDCEmulator
## Sestavte parametry, které předáte příkazu Get-WinEvent
$GweParams = @{
‚Computername‘ = $Pdce
‚LogName‘ = ‚Security‘
‚FilterXPath‘ = „* and EventData=’$Username‘]]“
}
## Dotaz na protokol událostí zabezpečení
$Events = Get-WinEvent @GweParams

Tímto získáme událost uzamčení.

Ale zatím nemáme k dispozici systém klienta, ze kterého událost pochází. Abychom ho získali, budeme muset zapátrat trochu hlouběji. Skutečné uživatelské jméno je ukryto v hodnotě Vlastnosti každé události. Abychom našli uživatelské jméno v každé události, můžeme jednoduše použít tento řádek:

$Events.Properties.Value

Tím najdeme uživatelské jméno v první události a v první instanci hodnoty Properties. Naštěstí se klientský systém nachází právě ve druhé instanci hodnoty Properties.

$Events.Properties.Value

Jakmile víte, kde se jméno klientského systému nachází, stačí ho vložit do smyčky a viníka jsme našli.

Teď jste vyzbrojeni a připraveni vyrazit, až na vás příště zavolá asistenční služba s tím neustálým blokováním uživatelského účtu AD.

.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.