Як забараніць стандартныя паролі і прымусіць усіх цябе ненавідзець
Чалавек, як вядома, істота лянівая.
А тым больш калі тычыцца пытання выбару ўстойлівага пароля.
Думаю, кожны з адміністратараў калі-небудзь сутыкаўся з праблемай выкарыстання лёгкіх і стандартных пароляў. Такая з'ява часта сустракаецца сярод верхніх эшалонаў кіраўніцтва кампаніі. Так-так, менавіта сярод тых, хто мае доступ да сакрэтнай ці камерцыйнай інфармацыі і вельмі непажадана было б ухіляць наступствы ўцечкі/узлому пароля і далейшых інцыдэнтаў.
У маёй практыцы быў выпадак, калі ў дамене Active Directory з уключанай парольнай палітыкай людзі бухгалтары самастойна дайшлі да ідэі таго, што пароль выгляду "Pas$w0rd1234" выдатна пракатвае пад патрабаванні палітыкі. Следствам стала паўсюднае выкарыстанне дадзенага пароля ўсюды і ўсюды. Адрозніваўся ён часам толькі наборам лічбаў.
Вельмі захацелася мець магчымасць не толькі ўключаць парольную палітыку і вызначаць набор сімвалаў, а яшчэ і фільтраваць па слоўніку. Каб выключыць магчымасць выкарыстання падобнага роду пароляў.
Кампанія Microsoft ласкава паведамляе нам па спасылцы, што кожны, хто ўмее трымаць правільна ў руках кампілятар, IDE і ўмее правільна прамаўляць C++, здольны сам сабе бібліятэку патрэбную скампіляваць і выкарыстаць па сваім разуменні. Ваш пакорны слуга на такое не здольны, вось і прыйшлося шукаць гатовае рашэнне.
Пасля доўгай гадзіны пошуку погляду былі з'яўлены два варыянты рашэння праблемы. Я, вядома, кажу пра OpenSource рашэнні. Бо платных варыянтаў - ад і да.
Коммітаў няма ўжо як гады 2. Родны ўсталёўнік працуе праз раз, прыходзіцца падпраўляць рукамі. Стварае сваю асобную службу. Пры абнаўленні файла пароляў DLL-ка аўтаматычна не падхапляе змененае змесціва, трэба спыняць службу, чакаць таймаўт, рэдагаваць файл, запускаць службу.
Праект актыўны, жывы і нават не трэба штурхаць халоднае цела.
Ўстаноўка фільтра заключаецца ў капіяванні двух файлаў і стварэнні некалькіх запісаў рэестра. Файл пароляў не ў локу, гэта значыць – даступны для рэдагавання і, паводле задумы аўтара праекту, ён проста вычытваецца раз у хвіліну. Таксама пры дапамозе дадатковых запісаў рэестра можна зрабіць дадатковую настройку як самога фільтра, так і нават нюансаў парольнай палітыкі.
Такім чынам.
Дадзена: дамен 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«.
Перазагружаем кантролер дамена.
Паўтараем вышэйпаказаную працэдуру для ўсіх кантролераў дамена.
Таксама можна дадаць наступныя запісы рэестра, што дае вялікую гнуткасць у выкарыстанні дадзенага фільтра:
BlacklistFileName - дазваляе паказаць кастамны шлях да файла з шаблонамі пароляў. Калі ў гэтым запісе рэестра пустое значэнне або яна не існуе, то выкарыстоўваецца шлях па змаўчанні, а менавіта - %SystemRoot%System32. Можна паказаць нават сеткавы шлях, АЛЕ трэба памятаць, што ў файла шаблонаў павінны быць выстаўленыя выразныя дазволы на чытанне, запіс, выдаленне, змена.
TokenPercentageOfPassword - дазваляе паказаць працэнтнае ўваходжанне маскі ў новы пароль. Па змаўчанні значэнне роўна 60%. Напрыклад, калі пазначана працэнтнае ўваходжанне 60 і ў файле шаблонаў ёсць радок starwars, тады пароль Starwars1! будзе адхілены, у той час, як пароль starwars1!DarthVader88 будзе прыняты, паколькі працэнтнае ўваходжанне радка ў пароль менш за 60%
RequireCharClasses - дазваляе пашырыць патрабаванні да пароляў у параўнанні са стандартнымі патрабаваннямі складанасці пароляў ActiveDirectory. Убудаваныя патрабаванні складанасці патрабуюць 3 з 5 магчымых розных відаў сімвалаў: Верхні рэгістр, Ніжні рэгістр, Лічба, Спецыяльны і Unicode. Пры дапамозе дадзенага запісу рэестра можна ўсталяваць свае патрабаванні да складанасці пароляў. Значэнне, якое можна паказаць, - гэта набор бітаў, кожны з якіх - адпаведная ступень двойкі.
Гэта значыць - 1 = ніжні рэгістр, 2 = верхні рэгістр, 4 = лічба, 8 = спец сімвал, and 16 = сімвал Unicode.
Такім чынам, пры значэнні 7 патрабаванні будуць “Верхні рэгістр І ніжні рэгістра І лічба ”, а пры значэнні 31 – “Верхні рэгістр І ніжні рэгістр І лічба І спец сімвал І сімвал Unicode”.
Можна нават камбінаваць – 19 = “Верхні рэгістр І ніжні рэгістр І сімвал Unicode”.
Шэраг правілаў пры складанні файла шаблонаў:
Шаблоны рэгістранезалежныя. Такім чынам, запіс у файле зорныя войны и StarWarS будзе вызначацца як аднолькавае значэнне.
Файл блякліста перачытваецца кожныя 60 секунд, такім чынам можна спакойна яго рэдагаваць, праз хвіліну новыя дадзеныя ўжо будуць выкарыстоўвацца фільтрам.
На дадзены момант няма падтрымкі Unicode для праверкі па шаблоне. Гэта значыць, выкарыстоўваць Unicode знакі ў паролях можна, але фільтр не спрацуе. Гэта не ёсць крытычна, таму што не бачыў я карыстальнікаў, якія паролі ў юнікадзе выкарыстоўваюць.
Пажадана не дапушчаць пустых радкоў у файле шаблонаў. У дэбазе потым відаць памылку, калі адбываецца падгрузка дадзеных з файла. Фільтр працуе, але навошта лішнія эксэпшэны?
Для дэбагу ў архіве ідуць батнікі, якія дазваляюць стварыць лог і потым яго разабраць пры дапамозе, напрыклад, Microsoft Message Analyzer.
Гэты фільтр пароляў выкарыстоўвае Event Tracing for Windows.
ETW правайдэр для гэтага фільтра пароляў 07d83223-7594-4852-babc-784803fdf6c5. Так, напрыклад, можна наладзіць трасіроўку падзей пасля наступнай перазгрузкі: logman create trace autosessionPassFiltEx -o %SystemRoot%DebugPassFiltEx.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 рэкамендуецца выкарыстоўваць наступныя наладкі:
Пры прыпынку лога і разбору ў Аналізатар паведамленняў Microsoft выглядае ўсё прыкладна вось такім чынам:
Тут відаць, што была спроба ўсталяваць пароль для карыстальніка - пра гэта нам кажа чароўнае слова SET у дэбазе. І пароль быў адхілены з прычыны наяўнасці яго ў файле шаблонаў і больш за 30% адпаведнасці ва ўводзімым тэксце.
Пры ўдалай спробе змены пароля бачым наступнае:
Ёсць некаторая нязручнасць для канчатковага карыстальніка. Пры спробе змены пароля, які пападае ў спіс файла шаблонаў, паведамленне на экране не адрозніваецца розумам і кемлівасцю ад стандартнага паведамленне пры непраходжанні парольнай палітыкі.
Таму будзьце гатовыя да званкоў і крыкаў: "Я ўвяла пароль як трэба, а яно не працуе."
Вынік.
Дадзеная бібліятэка дазваляе забараніць выкарыстанне простых ці стандартных пароляў у дамене Active Directory. Скажам "Не!" паролям выгляду: "P@ssw0rd", "Qwerty123", "ADm1n098".
Так, безумоўна, карыстачы пакахаюць вас яшчэ больш за такі клопат аб іх бяспецы і неабходнасці прыдумляць зубаскрышальныя паролі. І, магчыма, колькасць званкоў і просьбаў дапамагчы з паролем у Вас дадасца. Але за бяспеку даводзіцца плаціць.