Як заборонити стандартні паролі та змусити всіх тебе ненавидіти

Людина, як відомо, істота лінива.
А тим більше коли стосується питання вибору стійкого пароля.

Думаю, кожен з адміністраторів будь-коли стикався з проблемою використання легких та стандартних паролів. Таке явище часто трапляється серед верхніх ешелонів керівництва компанії. Так-так, саме серед тих, хто має доступ до секретної чи комерційної інформації і вкрай небажано було б усувати наслідки витоку/зламування пароля та подальших інцидентів.

У моїй практиці був випадок, коли в домені Active Directory з включеною парольною політикою люди бухгалтери самостійно дійшли ідеї того, що пароль виду «Pas$w0rd1234» відмінно прокочує під вимоги політики. Наслідком стало повсюдне використання цього пароля скрізь. Відрізнявся він іноді лише набором цифр.

Дуже захотілося мати можливість не лише включати парольну політику та визначати набір символів, а й фільтрувати за словником. Щоб виключити можливість використання таких паролів.

Компанія Microsoft люб'язно повідомляє нам, що кожен, хто вміє тримати правильно в руках компілятор, IDE і вміє правильно вимовляти C++, здатний сам собі бібліотеку потрібну скомпілювати і використовувати за своїм розумінням. Ваш покірний слуга на таке не здатний, от і довелося шукати готове рішення.

Після тривалого пошуку погляду було виявлено два варіанти вирішення проблеми. Я, звичайно, говорю про OpenSource рішення. Адже платних варіантів – від і до.

Варіант №1. OpenPasswordFilter

Коммітів немає вже як 2 роки. Рідний інсталятор працює через раз, доводиться підправляти руками. Створює окрему службу. При оновленні файлу паролів DLL автоматично не підхоплює змінений вміст, потрібно зупиняти службу, вичікувати тайм, редагувати файл, запускати службу.

Чи не айс!

Варіант №2. PassFiltEx

Проект активний, живий і навіть не треба штовхати холодне тіло.
Установка фільтра полягає у копіюванні двох файлів та створенні декількох записів реєстру. Файл паролів не в лоці, тобто доступний для редагування і, за задумом автора проекту, він просто вичитується раз на хвилину. Також за допомогою додаткових записів реєстру можна зробити додаткове налаштування як фільтра, так і навіть нюансів парольної політики.

Отже...
Дано: домен Active Directory test.local
тестова робоча станція Windows 8.1 (для умови завдання – несуттєво)
фільтр паролів PassFiltEx

  • Завантажуємо останній реліз PassFiltEx
  • Копіюємо PassFiltEx.dll в C: WindowsSystem32 (або % SystemRoot% System32).
    Копіюємо PassFiltExBlacklist.txt в C: WindowsSystem32 (або % SystemRoot% System32). За потреби доповнюємо його своїми шаблонами
    Як заборонити стандартні паролі та змусити всіх тебе ненавидіти
  • Редагуємо гілку реєстру: HKLMSYSTEMCurrentControlSetControlLsa => Notification Packages
    додаємо PassFiltEx у кінець списку. (Розширення вказувати не потрібно.) Повний список пакетів, що використовуються для перевірки, буде виглядати ось так «rassfm scecli PassFiltEx".
    Як заборонити стандартні паролі та змусити всіх тебе ненавидіти
  • Перезавантажуємо контролер домену.
  • Повторюємо вищезгадану процедуру для всіх контролерів домену.

Також можна додати такі записи реєстру, що дає більшу гнучкість у використанні даного фільтра:

Розділ: HKLMSOFTWAREPassFiltEx - Створюється автоматично.

  • HKLMSOFTWAREPassFiltExBlacklistFileName, REG_SZ, Default: PassFiltExBlacklist.txt

    BlacklistFileName — дозволяє вказати кастомний шлях до файлу із шаблонами паролів. Якщо цей запис реєстру порожнє значення або він не існує, то використовується шлях за замовчуванням, а саме — % SystemRoot% System32. Можна вказати навіть мережевий шлях, АЛЕ потрібно пам'ятати, що файл шаблонів повинні бути виставлені чіткі дозволи на читання, запис, видалення, зміна.

  • HKLMSOFTWAREPassFiltExTokenPercentageOfPassword, REG_DWORD, Default: 60

    TokenPercentageOfPassword - дозволяє вказати відсоткове входження маски у новий пароль. За замовчуванням значення дорівнює 60%. Наприклад, якщо вказано процентне входження 60 і файл шаблонів є рядок starwars, тоді пароль Starwars1! буде відхилено, в той час як пароль starwars1!DarthVader88 буде прийнято, оскільки відсоткове входження рядка в пароль менше 60%

  • HKLMSOFTWAREPassFiltExRequireCharClasses, REG_DWORD, Default: 0

    RequireCharClasses — дозволяє розширити вимоги до паролів порівняно із стандартними вимогами складності паролів ActiveDirectory. Вбудовані вимоги складності вимагають 3 із 5 можливих різних видів символів: Верхній регістр, Нижній регістр, Цифра, Спеціальний та Unicode. За допомогою цього запису реєстру можна встановити вимоги до складності паролів. Значення, яке можна вказати – це набір бітів, кожен з яких – відповідний ступінь двійки.
    Тобто - 1 = нижній регістр, 2 = верхній регістр, 4 = цифра, 8 = спеціальний символ, and 16 = символ Unicode.
    Таким чином, за значення 7 вимоги будуть “Верхній регістр І нижній регістр І цифра ”, а за значення 31 — “Верхній регістр І нижній регістр І цифра І спеціальний символ І символ Unicode”.
    Можна навіть комбінувати – 19 = “Верхній регістр І нижній регістр І символ Unicode”.

  • Як заборонити стандартні паролі та змусити всіх тебе ненавидіти

Ряд правил при складанні файлу шаблонів:

  • Шаблони реєстронезалежні. Отже, запис у файлі starwars и 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 Message Analyzer рекомендується використовувати такі налаштування:

Як заборонити стандартні паролі та змусити всіх тебе ненавидіти

Як заборонити стандартні паролі та змусити всіх тебе ненавидіти

При зупинці лога та розбору в Microsoft Message Analyzer виглядає все приблизно таким чином:

Як заборонити стандартні паролі та змусити всіх тебе ненавидіти

Тут видно, що була спроба встановити пароль для користувача – про це нам каже чарівне слово УСТАНОВКА у дебазі. І пароль був відхилений через наявність його у файлі шаблонів і більш ніж 30% відповідності у тексті, що вводиться.

При успішній спробі зміни пароля бачимо таке:

Як заборонити стандартні паролі та змусити всіх тебе ненавидіти

Є певна незручність для кінцевого користувача. При спробі змінити пароль, який потрапляє до списку файлу шаблонів, повідомлення на екрані не відрізняється розумом і кмітливістю від стандартного повідомлення при непроходженні парольної політики.

Як заборонити стандартні паролі та змусити всіх тебе ненавидіти

Тому будьте готові до дзвінків та криків: "Я ввела пароль як треба, а воно не працює."

Підсумок.

Ця бібліотека дозволяє заборонити використання простих або стандартних паролів у домені Active Directory. Скажімо "Ні!" паролям виду: "P@ssw0rd", "Qwerty123", "ADm1n098".
Так, безумовно, користувачі полюблять вас ще більше за таку турботу про їхню безпеку та необхідність придумувати зубозроблювальні паролі. І, можливо, кількість дзвінків та прохань допомогти з паролем у Вас додасться. Але за безпеку доводиться платити.

Посилання на використані ресурси:
Стаття на Microsoft щодо кастомної бібліотеки фільтру паролів: Password Filters
PassFiltEx: PassFiltEx
Посилання на реліз: Останній реліз
Списки паролів:
DanielMiessler lists: Посилання.
Wordlist від weakpass.com: Посилання.
Wordlist від berzerk0 repo: Посилання.
Аналізатор повідомлень Microsoft: Microsoft Message Analyzer.

Джерело: habr.com

Додати коментар або відгук