Човекът, както е известно, е ленивo същество.
И особено, когато става въпрос за избор на сигурна парола.
Мисля, че всеки администратор някога е срещал проблема с използването на лесни и стандартни пароли. Такова явление често се среща сред висшите ръководни етажи на компанията. Да-да, точно сред тези, които имат достъп до секретна или търговска информация и би било крайно нежелателно да се премахват последиците от изтичането/хакването на парола и последващи инциденти.
В моята практика имаше случай, когато в домейн Active Directory с активна паролна политика, хората от счетоводството сами стигнаха до идеята, че паролата тип „Pas$w0rd1234“ отлично отговаря на изискванията на политиката. Последствието беше широко разпространеното използване на тази парола навсякъде. Тя понякога се различаваше само по набор от цифри.
Силно ми се искаше да имам възможност не само да активирам паролната политика и да определям набор от символи, а да филтрирам и по речник. За да се изключи възможността за използване на подобен тип пароли.
Компанията Microsoft любезно ни информира чрез връзка, че всеки, който умее да държи правилно компилатор, IDE и може правилно да произнася C++, е способен сам да компилира и използва библиотека, необходима на него. Вашият покорен слуга не е способен на това, затова се наложи да търся готово решение.
След дълъг час търсене ми се появиха два варианта за решение на проблема. Разбира се, говоря за OpenSource решение. Тъй като платените варианти — колкото и да са налични.
Вариант №1.
Няма комити от почти две години. Родният инсталатор работи на всеки втори опит, налага се да коригираме на ръка. Създава своя отделна услуга. При актуализиране на файла с пароли, DLL няма автоматично да прихваща промененото съдържание, нужно е да се спре службата, да изчакаме времето да изтече, да редактираме файла, да стартираме службата.
Не е ок!
Вариант №2.
Проектът е активен, жив и дори не трябва да се бута мъртвото тяло.
Инсталирането на филтъра включва копиране на два файлове и създаване на няколко записа в регистъра. Файлът с паролите не е в локализация, тоест — наличен е за редактиране и, според замисъла на автора на проекта, се прочита всяка минута. Освен това, чрез допълнителни записи в регистъра може да се направи допълнителна настройка както на самия филтър, така и на нюансите на политиката за паролите.
И така.
Дадено: домейн Active Directory test.local
тестова работна станция Windows 8.1 (за условията на задачата — незначително)
филтър за пароли PassFiltEx
- Изтеглете последната версия по линка
- Копирайте PassFiltEx.dll в C:WindowsSystem32 (или %SystemRoot%System32).
Копирайте PassFiltExBlacklist.txt в C:WindowsSystem32 (или %SystemRoot%System32). При необходимост добавяме собствените си шаблони
- Редактираме ключа в регистъра: HKLMSYSTEMCurrentControlSetControlLsa => Notification Packages
Добавяме PassFiltEx в края на списъка. (Разширението не е нужно да се посочва.) Пълният списък с пакети, използвани за проверка, ще изглежда така «rassfm scecli PassFiltEx«.
- Рестартирайте контролера на домейна.
- Повторете горепосочената процедура за всички контролери на домейна.
Може също да добавите следните записи в регистъра, което предоставя по-голяма гъвкавост при използването на този филтър:
Раздел: HKLMSOFTWAREPassFiltEx — създава се автоматично.
- HKLMSOFTWAREPassFiltExBlacklistFileName, REG_SZ, По подразбиране: PassFiltExBlacklist.txt
BlacklistFileName — позволява да се укаже персонализиран път до файла с шаблони за паролите. Ако този запис в регистъра има празна стойност или не съществува, се използва пътят по подразбиране, а именно — %SystemRoot%System32. Може да се посочи дори мрежов път, НО трябва да се помни, че файлът с шаблоните трябва да има ясни разрешения за четене, запис, изтриване и промяна.
- HKLMSOFTWAREPassFiltExTokenPercentageOfPassword, REG_DWORD, По подразбиране: 60
TokenPercentageOfPassword — позволява да се укаже процентното присъствие на маската в новата парола. По подразбиране стойността е 60%. Например, ако е посочено процентно присъствие от 60 и в файла с шаблони има ред starwars, тогава паролата Starwars1! ще бъде отхвърлена, докато паролата starwars1!DarthVader88 ще бъде приета, тъй като процентното присъствие на реда в паролата е по-малко от 60%
- HKLMSOFTWAREPassFiltExRequireCharClasses, REG_DWORD, По подразбиране: 0
RequireCharClasses — позволява да разширите изискванията за пароли в сравнение със стандартните изисквания за сложност на паролите на ActiveDirectory. Вградените изисквания за сложност изискват 3 от 5 възможни различни вида символи: главни букви, малки букви, цифри, специални и Unicode. С помощта на този регистров запис можете да зададете свои изисквания за сложност на паролите. Стойността, която можете да зададете, е набор от битове, като всеки от тях е съответната степен на 2.
Тоест — 1 = малки букви, 2 = главни букви, 4 = цифра, 8 = специален символ и 16 = Unicode символ.
Съответно, при стойност 7 изискванията ще бъдат “Главни букви И малки букви И цифра”, а при стойност 31 — “Главни букви И малки букви И цифра И специален символ И Unicode символ”.
Можете дори да комбинирате — 19 = “Главни букви И малки букви И Unicode символ”.
Ред правила при съставянето на файл с шаблони:
- Шаблоните са без разлика в регистра. Следователно, записа в файла starwars и StarWarS ще се определя като еднаква стойност.
- Файлът с черен списък се чете на всеки 60 секунди, така че можете спокойно да го редактирате, след минута новите данни вече ще се използват от филтъра.
- В момента няма поддръжка за Unicode за проверка по шаблон. Тоест, можете да използвате Unicode символи в паролите, но филтърът няма да сработи. Това не е критично, защото не съм виждал потребители, които използват пароли в Unicode.
- За предпочитане е да не допускаме празни редове във файла с шаблони. В дебъг режима по-късно ще се види грешка, когато се зареждат данни от файла. Филтърът работи, но защо да имаме ненужни изключения?
За дебъгване в архива има BAT файлове, които позволяват да създадете лог и след това да го анализирате с, например,
Този филтър за пароли използва Event Tracing for Windows.
ETW доставчик за този филтър за пароли — 07d83223-7594-4852-babc-784803fdf6c5. Например, можете да настроите трасировката на събития след следващото рестартиране:
logman create trace autosessionPassFiltEx -o %SystemRootbugPassFiltEx.etl -p "{07d83223-7594-4852-babc-784803fdf6c5}" 0xFFFFFFFF -ets
Трасировката ще бъде стартирана след следващото рестартиране на системата. За да я спрете:
logman stop PassFiltEx -ets && logman delete autosessionPassFiltEx -ets
Всички тези команди са посочени в скриптовете StartTracingAtBoot.cmd и StopTracingAtBoot.cmd.
За еднократно проверяване на работата на филтъра можете да използвате StartTracing.cmd и StopTracing.cmd.
За да четете удобно изхода на дебъга на този филтър в Microsoft Message Analyzer се препоръчва да използвате следните настройки:


При спиране на логовете и анализа в Microsoft Message Analyzer всичко изглежда приблизително по следния начин:

Тук се вижда, че е имало опит за задаване на парола за потребител — за това ни говори магическото слово SET в дебъга. И паролата беше отхвърлена поради наличието ѝ в шаблонния файл и повече от 30% съответствие в въвеждания текст.
При успешен опит за смяна на парола виждаме следното:

Има известно неудобство за крайния потребител. При опит за смяна на парола, която попада в списъка на шаблонния файл, съобщението на екрана не е по-разумно и находчиво от стандартното съобщение при неспазване на политика за пароли.

Така че бъдете готови за обаждания и викове: «Въведох паролата както трябва, но тя не работи.»
Резюме.
Тази библиотека позволява да се забрани използването на прости или стандартни пароли в домена Active Directory. Нека кажем "Не!" на пароли като: "P@ssw0rd", "Qwerty123", "ADm1n098".
Да, без съмнение, потребителите ще ви обичат още повече за такава грижа за тяхната безопасност и необходимостта да измислят сложни пароли. И е възможно броят на обажданията и исканията за помощ с паролата да се увеличи. Но за безопасността трябва да се плаща.
Връзки към използваните ресурси:
Статия на Microsoft относно персонализираната библиотека на филтри за пароли:
PassFiltEx:
Връзка към изданието:
Списъци с пароли:
DanielMiessler списъци:
Списък с пароли от weakpass.com:
Списък с пароли от репо на berzerk0:
Microsoft Message Analyzer:
Източник: habr.com
