Rychlé odkazy:
O co jde
Kvalita hesel uživatelů Active Directory (AD) je dlouhodobě na relativně špatné úrovni. Jako každá hesla :-) Běžně se používají hesla typu SlovoČíslo, například Cervenec2016, což je krásný příklad hesla, které je imunní i proti časté změně :-) Obecně osmdesát procent hesel na světě je pouze alfanumerických.
Máme k dispozici zásady hesel, které by to mohly vylepšit. AD umožňuje vynutit minimální délku hesla. Délka hesla větší než 10 znaků pěkně odstaví krátká slova a krátká čísla. Co se týče možných znaků (komplexnost), AD umí vynutit pouze politiku tři ze čtyř (3of4). To znamená, že ze čtyř skupin znaků malá/velká/čísla/ostatní je potřeba mít v hesle alespoň tři skupiny.
Udělal jsem si tedy vlastní password filter, který vynutí v hesle zásadu 4of4. Heslo musí obsahovat jak alespoň jedno velké a jedno malé písmeno z US-ASCII, tak i jednu cifru a jeden speciální znak z US-ASCII. Ostatní znaky mohou být libovolné, klidně národní unicode.
Speciálních znaků je řekněme plus/mínus dvacet. Pokud musí být heslo dlouhé 8 znaků, zvýší to počet hesel 20^8 krát, což je 25 600 000 000 krát. I pokud bychom uvažovali pouze speciální znaky z numerické klávesnice, kterých je jen 5, bude to i tak lepší alespoň 390 000 krát. U hesla desetiznakového je vylepšení dokonce 9 765 625 krát.
Fungování password filter obecně
Password filter je DLL knihovna, která se zapíše do registrů a kterou si systémový proces LSASS načte při svém startu, tedy při startu počítače. LSA (local security authority) je známá součástka, ve které běží celé AD, nebo SAM (lokální security accounts manager). Password filter obsahuje dvě rutiny, které LSA zavolá v okamžiku, kdy přijímá změnu (change password) nebo i nastavení (reset password) hesla.
Úkolem této DLL knihovny je heslo zkontrolovat a říct, jestli je ok, nebo jeho podmínky nesplňuje. Password filter dostává pouze nové heslo a dostává ho v plné formě, tedy ne ve formě hash. Hash se spočítá a v okamžiku následného uložení do AD, nebo SAM databáze. Password filter se používá také pro identity integration, jako součástka, která kvalitu hesla v podstatě nemusí kontrolovat, ale odesílá heslo do nějakých integrovaných systémů, aby se zajistil alespoň reduced-sign-on (RSO), když už nelze použít rovnou single-sign-on (SSO).
Můj filter pouze kontroluje heslo na politiku 4of4 a nikam ho neodesílá :-)
Knihovnu filteru je nutno nakopírovat do adresáře System32 a zapsat do registrové hodnoty:
HKLM\System\CurrentControlSet\Control\LSA
Notification Packages = MULTI_SZ
Pokud to chcete pro Active Directory, tak tuto operaci musíte provést na každém DC (domain controller) řadiči domény. Každý klient využívá pro změnu hesla jen svoje nejbližší DC a politika by se tedy neuplatňovala rovnoměrně. Filtr je potřeba umístit ideálně hned jako první hodnotu. Kdyby byly v seznamu nějaké další filtry právě kvůli IdM, tak by mohly odeslat heslo k integraci ještě dříve, než by následně bylo odmítnuto kvůli nedostatečné složitosti.
Instalace mého SAPHA password filteru
Instalační ZIP soubor filtru pro 64bitové systémy je ke stažení zde. Obsahuje to jak jeho DLL, tak i install.bat a uninstall.bat. Někam si to vybalte, můžete i do síťového sdíleného adresáře a jenom spusťte INSTALL.BAT. Ono se to samo nainstaluje. UNINSTALL.BAT slouží celkem logicky k odinstalaci. Snažil jsem se to udělat extrémně odolné, takže pokud se objeví při instalaci jakákoliv nesrovnalost, instalace nedoběhne a zahlásí chybu.
Po instalaci musíte počítač restartovat, což vám prográmek sám nabídne.
Pro zavedení do AD musíte instalaci provést na všech řadičích domény a musíte je restartovat. Nemusíte to udělat všude naráz, ani nemusíte všechny naráz restartovat (to ani nedělejte). Jenom dokud nebude na všech DLL zavedena, tak některá DC budou vyžadovat 4of4, zatímco jiná ne a pojedou při starém 3of4.
Můžete to taky nasadit i na workgroupové počítače. Tam to funguje stejně, ale přirozeně jen pro lokální SAM účty. Takže to na ostatních doménových počítačích instalovat nemusíte, pokud vám ta politika stačí pro účty v Active Directory.
Dávka INSTALL.BAT má ještě parametr -silent, kdybyste si to náhodou chtěli instalovat nějak automaticky, například pomocí Group Policy Preferences, nebo System Center.
Upozorňuji, že to je jenom 64bitová verze, takže pokud máte ještě nějaká 32bitová DC, tak mi napiště, pošlu vám 32bitovou verzi.
Support je mailem, je zdarma. Pokud chcete nějaké úpravy nebo vylepšení, ozvěte se, domluvíme se na ceně. Nebojte se, je to docela robustní, pády LSA jsem nezaznamenal. Pokud se knihovna nezavede, ani to nepoznáte, LSASS jede prostě dál. Snažil jsem se použít co nejrychlejší algoritmus, takže by to nemělo nijak omezovat výkon.
Zvýšená ochrana LSA knihoven
Existuje ještě jeden problém při instalaci password filteru. Jmenuje se to Additional LSA Protection (https://technet.microsoft.com/en-us/library/dn408187(v=ws.11).aspx) - neboli LSASS running as a protected process. Pokud to máte v registrech zapnuté (což nejspíš nemáte), LSASS vyžaduje, aby byl password filter správně digitálně podepsaný.
Jestli máte ochranu zapnutou poznáte podle následující registrové hodnoty - pokud je tam hodnota 1 tak je LSASS chráněn:
HKLM\System\CurrentControlSet\Control\LSA
RunAsPPL = DWORD = 1
Můj filter prozatím s touto ochranou nefunguje, protože není digitálně podepsán. Levné code signing certifikáty od StartSSL prozatím zmizely a protože tuto ochranu nikdo moc nepoužívá, nechce se mi platit 180 EUR ročně a certifikát od jiné CA.
Ptal jsem se a StartSSL support tvrdí, že do 14 dnů by měli zase začít pracovat, tak uvidíme.