Mennesket er, som bekendt, et dovent væsen.
Og især når det kommer til spørgsmålet om valg af en sikker adgangskode.
Jeg tror, hver administrator på et tidspunkt har stået over for problemet med at bruge lette og standard adgangskoder. Dette fænomen ses ofte blandt direktionen i virksomheder. Ja, netop dem der har adgang til hemmelig eller kommerciel information, og det ville være yderst uønsket at rydde op efter konsekvenserne af en lækage/hacking af adgangskoden og efterfølgende hændelser.
I min praksis har jeg haft en situation, hvor folk i bogholderiet i et Active Directory-domæne med en aktiveret adgangskodepolitik selv var nået frem til, at en adgangskode som "Pas$w0rd1234" stort set levede op til politikens krav. Denne adgangskode blev derefter brugt overalt. Den adskilte sig nogle gange kun ved en forskellig kombination af tal.
Jeg har meget gerne villet have muligheden for ikke kun at aktivere adgangskodepolitikken og bestemme kombinationen af tegn, men også at filtrere i henhold til en ordliste. For at udelukke muligheden for at bruge denne type adgangskoder.
Microsoft meddeler venligt, via et link, at enhver der ved, hvordan man korrekt bruger en compiler, IDE og kan udtale C++, kan kompilere en nødvendig biblioteker selv og bruge dem efter eget skøn. Jeg er ikke i stand til dette, så jeg måtte lede efter en færdig løsning.
Efter en lang time med søgen blev to løsningsmuligheder præsenteret for mig. Jeg taler selvfølgelig om en OpenSource-løsning. For der er betalte løsninger — fra det ene til det andet.
Mulighed nr. 1.
Der har ikke været nogen commits i to år. Den originale installer fungerer sporadisk, og jeg må justere det manuelt. Det opretter sin egen tjeneste. Når adgangskodefilen opdateres, opfanger DLL'en automatisk ikke det ændrede indhold, man skal stoppe tjenesten, vente på timeout, redigere filen og starte tjenesten.
Ikke godt!
Mulighed nr. 2.
Projektet er aktivt, lever og kræver ikke engang at blive puffet.
Installation af filtrering indebærer at kopiere to filer og oprette flere registreringsposter. Password-filen er ikke låst, hvilket betyder, at den er tilgængelig for redigering og, ifølge projektets skaber, blot læses hvert minut. Derudover kan yderligere registreringsposter anvendes til at foretage yderligere indstillinger af både selve filteret og nuancerne i passwordpolitikken.
Så.
Givet: Active Directory-domæne test.local
testarbejdsstation Windows 8.1 (for opgavens skyld — ubetydelig)
passwordfilter PassFiltEx
- Download den seneste version via linket
- Kopier PassFiltEx.dll i C:WindowsSystem32 (eller %SystemRoot%System32).
Kopier PassFiltExBlacklist.txt i C:WindowsSystem32 (eller %SystemRoot%System32). Hvis nødvendigt, tilføj dine egne skabeloner.
- Rediger registreringsområdet: HKLMSYSTEMCurrentControlSetControlLsa => Notification Packages
Tilføjer PassFiltEx til slutningen af listen. (Udvidelsen skal ikke angives.) Den fulde liste over pakker brugt til validering vil se således ud «rassfm scecli PassFiltEx«.
- Genstart domænekontrolleren.
- Gentag ovenstående procedure for alle domænekontrollere.
Yderligere kan følgende registreringsposter tilføjes, hvilket giver større fleksibilitet i brugen af dette filter:
Sektion: HKLMSOFTWAREPassFiltEx — oprettes automatisk.
- HKLMSOFTWAREPassFiltExBlacklistFileName, REG_SZ, Standard: PassFiltExBlacklist.txt
BlacklistFileName — gør det muligt at angive en brugerdefineret sti til filen med passwordskabeloner. Hvis denne registreringspost har en tom værdi eller ikke eksisterer, anvendes standardstien, som er — %SystemRoot%System32. Endda netværksstier kan angives, MEN det er nødvendigt at huske, at filen med skabeloner skal have klart definerede tilladelser til læsning, skrivning, sletning og ændring.
- HKLMSOFTWAREPassFiltExTokenPercentageOfPassword, REG_DWORD, Standard: 60
TokenPercentageOfPassword — tillader at angive procentdelen af masken i den nye adgangskode. Standardværdien er 60%. For eksempel, hvis procentandelen er angivet til 60 og der er en række i skabelonfilen starwars, vil adgangskoden Starwars1! blive afvist, mens adgangskoden starwars1!DarthVader88 vil blive accepteret, da procentdelen af strengen i adgangskoden er mindre end 60%.
- HKLMSOFTWAREPassFiltExRequireCharClasses, REG_DWORD, Standard: 0
RequireCharClasses — giver mulighed for at udvide kravene til adgangskoder i forhold til de standardkrav for kompleksitet, som Active Directory stiller. De indbyggede krav til kompleksitet kræver 3 ud af 5 mulige forskellige typer tegn: Store bogstaver, Små bogstaver, Tal, Specialtegn og Unicode. Ved hjælp af denne registerpost kan dine egne krav til adgangskodekompleksitet fastsættes. Værdien, der kan angives, er et bitmønster, hvor hver enkelt svarer til en potens af to.
Det vil sige — 1 = små bogstaver, 2 = store bogstaver, 4 = tal, 8 = specialtegn og 16 = Unicode-tegn.
Således, ved en værdi på 7 vil kravene være “Store bogstaver OG små bogstaver OG tal”, mens værdien 31 vil give kravene “Store bogstaver OG små bogstaver OG tal OG specialtegn OG Unicode-tegn”.
Man kan endda kombinere — 19 = “Store bogstaver OG små bogstaver OG Unicode-tegn”.
En række regler for oprettelse af skabelonfiler:
- Skabeloner er størrelsesfølsomme. Derfor vil en post i filen starwars og StarWarS blive betragtet som samme værdi.
- Blacklist-filen genlæses hvert 60. sekund, så den kan redigeres uden problemer; efter et minut vil de nye data blive anvendt af filteret.
- I øjeblikket er der ingen støtte for Unicode til mønstergenkendelse. Det vil sige, at Unicode-tegn kan bruges i adgangskoder, men filteret vil ikke fungere. Dette er ikke kritisk, da jeg ikke har set brugere, der anvender adgangskoder i Unicode.
- Det er ønskeligt at undgå tomme linjer i skabelonfilen. I debuggen vil en fejl kunne ses, når data indlæses fra filen. Filteret fungerer, men hvorfor unødvendige undtagelser?
Til debugging medfølger batchfiler, som gør det muligt at oprette et log og derefter analysere det ved hjælp af for eksempel
Dette adgangskodefilter bruger Event Tracing for Windows.
ETW-udbyderen for dette adgangskodefilter er 07d83223-7594-4852-babc-784803fdf6c5. For eksempel kan sporingen indstilles til at starte efter den næste genstart:
logman create trace autosessionPassFiltEx -o %SystemRootbugPassFiltEx.etl -p "{07d83223-7594-4852-babc-784803fdf6c5}" 0xFFFFFFFF -ets
Sporingen vil blive startet efter den næste systemgenstart. For at stoppe den:
logman stop PassFiltEx -ets && logman delete autosessionPassFiltEx -ets
Alle disse kommandoer er angivet i scripts StartTracingAtBoot.cmd og StopTracingAtBoot.cmd.
For en engangs kontrol af filterets funktion kan der benyttes StartTracing.cmd og StopTracing.cmd.
For easy reading of the debug output of this filter in Microsoft Message Analyzer it is recommended to use the following settings:


When stopping the log and parsing in Microsoft Message Analyzer it all looks something like this:

Here it is clear that there was an attempt to set a password for the user — the magical word tells us SET in the debug. And the password was rejected due to its presence in the template file and more than 30% similarity in the entered text.
With a successful password change attempt, we see the following:

There is some inconvenience for the end user. When attempting to change a password that appears in the template file, the message on the screen is no more thoughtful and clever than the standard message for not passing the password policy.

So be prepared for calls and screams: 'I entered the password correctly, but it doesn’t work.'
Konklusion.
This library allows you to prohibit the use of simple or standard passwords in the Active Directory domain. Say 'No!' to passwords like: 'P@ssw0rd', 'Qwerty123', 'ADm1n098'.
Yes, undoubtedly, users will love you even more for such care about their security and the need to come up with difficult passwords. And perhaps the number of calls and requests for help with passwords will increase for you. But security comes at a cost.
References to the resources used:
Article on Microsoft regarding custom password filter library:
PassFiltEx:
Link to the release:
Password lists:
DanielMiessler lists:
Wordlist from weakpass.com:
Wordlist from berzerk0 repo:
Microsoft Message Analyzer:
Kilde: habr.com
