Новый алгоритм для проверки надёжности паролей / Habr
Многие сайты пытаются помочь пользователям установить более сложные пароли. Для этого устанавливают базовые правила, которые требуют обычно указать хотя бы одну прописную букву, одну строчную букву, одну цифру и так далее. Правила обычно примитивные вроде таких:'password' => [
'required',
'confirmed',
'min:8',
'regex:/^(?=\S*[a-z])(?=\S*[A-Z])(?=\S*[\d])\S*$/',
];
К сожалению, такие простые правила означают, что пароль
Abcd1234
будет признан хорошим и качественным, так же как и Password1
. С другой стороны, пароль mu-icac-of-jaz-doad
не пройдёт валидацию.Некоторые специалисты говорят, что это не лучший вариант.
В реальности Abcd1234
и Password1
— плохие пароли, а mu-icac-of-jaz-doad
— хороший пароль. В этом несложно убедиться.
Вот первые два пароля.
А вот два пароля, которые не пройдут проверку на надёжность.
Что же делать? Может, не стоит принуждать к использованию спецсимволов и внедрять всё новые правила, вроде запрета на повтор нескольких символов подряд, использование не одного, а двух-трёх спецсимволов и цифр, увеличение минимальной длины пароля и т д.
Вместо всего этого достаточно сделать простую вещь — просто установить ограничение на минимальную энтропию пароля, и всё! Можно использовать для этого готовый оценщик zxcvbn.
Есть и другие решения, кроме zxcvbn. Буквально на прошлой неделе на конференции по безопасности ACM Computer and Communications Security была представлена научная работа (pdf) специалистов по безопасности из научно-исследовательского подразделения Symantec Research и французского исследовательского института Eurecom. Они разработали новую программу для проверки надёжности паролей, которая оценивает примерное количество необходимых попыток брутфорса, используя метод Монте-Карло. Предлагаемый способ отличается тем, что требует минимальное количество вычислительных ресурсов на сервере, подходит для большого количества вероятностных моделей и в то же время довольно точный. Метод проверили на паролях из базы 10 млн паролей Xato, которые лежат в открытом доступе (копия на Archive.org) — он показал хороший результат. Правда, это исследование Symantec Research и Eurecom носит скорее теоретический характер, по крайней мере, свою программу они не выложили в открытый доступ в каком-либо приемлемом виде. Тем не менее, смысл работы понятен: вместо эвристических правил проверки паролей веб-сайтам желательно внедрить проверку на энтропию.
habr.com
проверка, как создать, примеры паролей
Пароли — это ключи от ваших виртуальных хранилищ данных в интернете — от аккаунта почты, онлайн игры, личной странички в соцсети и т.д. Конечно же, он должен на 100% отвечать такому критерию, как надёжность. То есть он должен быть устойчив к взлому, или подбору. К сожалению, многие пользователи это простое, но обязательное требование к паролям игнорируют. И в итоге, как правило, становятся жертвами злоумышленников. У них пропадают деньги, конфиденциальные данные, геймплейные достижения и пр.
Известно, что 1% пользователей сети то ли из-за лени, то ли из-за халатности при регистрации предпочитают использовать примитивные комбинации, которые можно подобрать с 3-4 попыток. Примеры — «123456», «qwerty», «mypassword». Это, безусловно, является очень большой глупостью. «Лёгкий» ключ для пользователя является «лёгким» и для взломщика.
Эта статья расскажет вам о том, как составлять надёжные пароли и как проверить их на устойчивость к взлому.
Какой пароль можно назвать надёжным?
Хорошие ключи от учётной записи имеют следующие характеристики:
1. Длина не меньше 10-15 символов (самые устойчивые комбинации и того больше — 20-35 символов).
2. Символьный состав: большие и маленькие английские буквы, цифры, спецсимволы.
3. В комбинации отсутствуют словарные слова (parol, kod, vhod), личные данные (номер телефона, имя, e-mail и т.д.), логические последовательности букв и цифр (1234, 246810, abcdefg).
Чем сложнее, надёжнее комбинация, тем труднее сделать её подбор. Чтобы установить придуманную пользователем последовательность из 12 знаков, может понадобиться свыше 1,5 млн. лет.
Создание сложного ключа
Рядовые пользователи Сети и специалисты по безопасности уже нашли множество правильных ответов-решений на вопрос «Как создать надёжный пароль?». В рамках этой статьи мы познакомимся с тремя наиболее практичными способами.
Способ №1: подмена букв
Не на всех первых мобильных телефонах поддерживался русский язык, и их владельцы отправляли СМС-ки, используя транслитерацию. То есть писали латинскими буквами по-русски, а недостающие литеры заменяли символами. Например: «ч» — «4». Фраза «Что делаешь?», выглядела как «4to delaesh?». Этот же принцип лежит и в основе данного способа составления ключей.
Возьмите какое-нибудь слово или словосочетание, а затем запишите его с использованием «хитрых» обозначений. Вместо пробелов можно использовать в качестве разделителей любые спецсимволы «~», «/», «.» и др. Например, можно придумать такую комбинацию:
«Опасная зона» запишем как «onACHA9I#3OHA».
Как видите, слова мы записали латинскими буквами и вдобавок заменили кое-какие русские литеры. Вместо «п» — «n», «я» — «9I», «з» — «3» (цифра «три»). И поставили разделитель «#» между словами. Вот и получился достаточно сложный вариант. Чтобы разгадать такой тип символьного сочетания, компьютерным злодеям придётся как следует покорпеть.
В помощь таблица символьных обозначений русских букв:
Способ №2: создание «читаемого» ключа в генераторе
1. Откройте в браузере онлайн-сервис — http://genpas.peter23.com/.
2. В опции «Режим работы» клацните радиокнопку «Произносимый пароль… ».
3. Дополнительно включите/отключите символьные наборы для комбинаций ключа и установите его длину.
4. Нажмите кнопку «Генерировать».
5. Выберите наиболее оптимальный вариант из генерированных последовательностей.
6. Разбейте выбранный пароль на фрагменты из 2-3 символов и придайте каждому фрагменту определённый смысл. В такой «логической цепочке» очень легко запомнить самую сложную комбинацию. В качестве примера давайте разберём ключ, созданный в этом генераторе:
Xoh)ohfo1koh
- Xoh) — можно прочитать как «Хох» + «смайлик»;
- oh — «ох»;
- fo1 — пусть это будет какая-то загадочная аббревиатура;
- koh — кох — опять вариация начального слога.
Способ №3: добавка спецсимволов в простые слова
1. Возьмите за основу какое-либо хорошо знакомое вам слово:
space2017
2. Придумайте сочетание спецсимволов из 2 или 3 знаков.
«+_&»
3. Добавьте сочетание в начале и в конце слова в зеркальном отображении.
+_&space2017&_+
4. В итоге вы получите достаточно «крепкий» ключ. Безусловно, его нельзя назвать самым устойчивым, однако он легко запоминается и по своей структуре не является примитивным.
Внимание! Перед составлением пароля обязательно ознакомьтесь с требованиями сервиса, на котором регистрируетесь. К примеру, на портале Майл.ру нельзя использовать кириллицу (русские буквы).
Проверка ключа на надёжность
Проанализировать устойчивость выбранной комбинации можно на специальных сервисах.
passwordmeter.com
Предоставляет пользователю подробный анализ указанной комбинации (символьные наборы, длину), а также оценивает её сложность в процентах.
howsecureismypassword.net
Сообщает о том, сколько времени понадобится на подбор указанного ключа. Предупреждает о недопустимых (примитивных) символьных последовательностях.
Пользуйтесь только надёжными паролями! Они являются залогом вашей безопасности в Сети.
Возникли сложности? Напишите об этом в комментариях и мы постараемся вам помочь.
А если статья оказалась вам полезной, не забудьте поставить лайк!
webereg.ru
Создание и проверка пароля на надежность
Создание и проверка пароля на надежность
Известно, что 1% пользователей сети то ли из-за лени, то ли из-за халатности при регистрации предпочитают использовать примитивные комбинации, которые можно подобрать с 3-4 попыток. Примеры — «123456», «qwerty», «mypassword». Это, безусловно, является очень большой глупостью. «Лёгкий» ключ для пользователя является «лёгким» и для взломщика.
Эта статья расскажет вам о том, как составлять надёжные пароли и как проверить их на устойчивость к взлому.
Хорошие ключи от учётной записи имеют следующие характеристики:
1. Длина не меньше 10-15 символов (самые устойчивые комбинации и того больше — 20-35 символов).
2. Символьный состав: большие и маленькие английские буквы, цифры, спецсимволы.
3. В комбинации отсутствуют словарные слова (parol, kod, vhod), личные данные (номер телефона, имя, e-mail и т.д.), логические последовательности букв и цифр (1234, 246810, abcdefg).
Чем сложнее, надёжнее комбинация, тем труднее сделать её подбор. Чтобы установить придуманную пользователем последовательность из 12 знаков, может понадобиться свыше 1,5 млн. лет.
Рядовые пользователи Сети и специалисты по безопасности уже нашли множество правильных ответов-решений на вопрос «Как создать надёжный пароль?». В рамках этой статьи мы познакомимся с тремя наиболее практичными способами.
Не на всех первых мобильных телефонах поддерживался русский язык, и их владельцы отправляли СМС-ки, используя транслитерацию. То есть писали латинскими буквами по-русски, а недостающие литеры заменяли символами. Например: «ч» — «4». Фраза «Что делаешь?», выглядела как «4to delaesh?». Этот же принцип лежит и в основе данного способа составления ключей.
Возьмите какое-нибудь слово или словосочетание, а затем запишите его с использованием «хитрых» обозначений. Вместо пробелов можно использовать в качестве разделителей любые спецсимволы «~», «/», «.» и др. Например, можно придумать такую комбинацию:
«Опасная зона» запишем как «onACHA9I#3OHA».
Как видите, слова мы записали латинскими буквами и вдобавок заменили кое-какие русские литеры. Вместо «п» — «n», «я» — «9I», «з» — «3» (цифра «три»). И поставили разделитель «#» между словами. Вот и получился достаточно сложный вариант. Чтобы разгадать такой тип символьного сочетания, компьютерным злодеям придётся как следует покорпеть.
В помощь таблица символьных обозначений русских букв:
1. Откройте в браузере онлайн-сервис — http://genpas.peter23.com/.
2. В опции «Режим работы» клацните радиокнопку «Произносимый пароль… ».
3. Дополнительно включите/отключите символьные наборы для комбинаций ключа и установите его длину.
4. Нажмите кнопку «Генерировать».
5. Выберите наиболее оптимальный вариант из генерированных последовательностей.
6. Разбейте выбранный пароль на фрагменты из 2-3 символов и придайте каждому фрагменту определённый смысл. В такой «логической цепочке» очень легко запомнить самую сложную комбинацию. В качестве примера давайте разберём ключ, созданный в этом генераторе:
Xoh)ohfo1koh
- Xoh)
— можно прочитать как «Хох» + «смайлик»; - oh
— «ох»; - fo1
— пусть это будет какая-то загадочная аббревиатура; - koh
— кох — опять вариация начального слога.
1. Возьмите за основу какое-либо хорошо знакомое вам слово:
space2017
2. Придумайте сочетание спецсимволов из 2 или 3 знаков.
«+_&»
3. Добавьте сочетание в начале и в конце слова в зеркальном отображении.
+_&space2017&_+
4. В итоге вы получите достаточно «крепкий» ключ. Безусловно, его нельзя назвать самым устойчивым, однако он легко запоминается и по своей структуре не является примитивным.
Внимание!
Перед составлением пароля обязательно ознакомьтесь с требованиями сервиса, на котором регистрируетесь. К примеру, на портале Майл.ру нельзя использовать кириллицу (русские буквы).
Проанализировать устойчивость выбранной комбинации можно на специальных сервисах.
Предоставляет пользователю подробный анализ указанной комбинации (символьные наборы, длину), а также оценивает её сложность в процентах.
Сообщает о том, сколько времени понадобится на подбор указанного ключа. Предупреждает о недопустимых (примитивных) символьных последовательностях.
Пользуйтесь только надёжными паролями! Они являются залогом вашей безопасности в Сети.
Видео по теме:
Как можно придумать надежный пароль
proctoline.ru
Проверка паролей
Проверка паролей
Ваши учетные записи подвергаются большому риску, если у них одинаковые или слабые пароли (например, qwerty или 12345), а также, если эти пароли основаны на информации, которую легко угадать или получить (например, имена родственников или даты рождения).
С Kaspersky Password Manager вы можете быстро проверить, насколько сложные пароли вы используете и повторяется ли один пароль в нескольких учетных записях.
Когда вы вводите пароль в онлайн-форму для регистрации или изменения пароля, расширение Kaspersky Password Manager отображает рекомендации, как создать сложный пароль, на основании информации о сложности вводимого вами пароля.
Проверка на скомпрометированность
Для дополнительной безопасности Kaspersky Password Manager может проверить, были ли ваши пароли взломаны или подверглись утечке с онлайн ресурсов.
Программа использует алгоритм криптографического хеширования (SHA-256) для безопасной проверки паролей на скомпрометированность. Программа высчитывает по SHA-256 контрольную сумму для каждого пароля в вашем хранилище и сравнивает их с контрольными суммами по SHA-256 в базе скомпрометированных паролей. Если контрольные суммы совпадают, программа предупреждает вас, что пароль является скомпрометированным и вам лучше его сменить.
По умолчанию проверка паролей на скомпрометированность включена.
Kaspersky Password Manager проверяет на скомпрометированность только активные записи с паролями.
Проверка паролей в хранилище
- Откройте главное окно программы.
- В панели меню нажмите на значок .
Программа отобразит найденные ненадежные пароли.
Изменение слабых паролей в учетных записях
- Откройте главное окно программы.
- В панели меню нажмите на значок .
Программа отобразит найденные ненадежные пароли.
- Выберите учетную запись сайта, пароль от которой вы хотите изменить, и нажмите на кнопку Изменить пароль.
Kaspersky Password Manager откроет сайт в браузере, выбранном по умолчанию.
- Войдите в вашу учетную запись на сайте и измените пароль в настройках учетной записи.
Kaspersky Password Manager предложит вам обновить пароль в хранилище для этой учетной записи.
- Обновите пароль в своем хранилище.
Выключение проверки паролей на скомпрометированность
- Откройте главное окно программы.
- В панели меню нажмите на значок .
Откроются настройки программы.
- Выберите раздел Дополнительно.
- В блоке Проверка скомпрометированных паролей выключите переключатель.
Проверка паролей на скомпрометированность выключена.
В началоhelp.kaspersky.com
Ещё об оценке стойкости пароля / Sandbox / Habr
Недавние обзоры существующих инструментов оценки паролей (Оценка стойкости пароля от Google, Алгоритм оценки стойкости пароля от Microsoft (Часть 1) и Алгоритм оценки стойкости пароля от Microsoft (Часть 2)), сделанные Juggler, подтолкнули меня к мысли поделиться своими «находками». В данной статье приводится описание ещё некоторых подходов к оценке сложности паролей.Анализатор паролей SeaMonkey
Этот анализатор паролей разработан как часть проекта SeaMonkey – свободного набора программ для работы в Internet, созданного и поддерживаемого организацией Seamonkey Council, выделившейся из Mozilla Foundation. Сам механизм анализа пароля является частью JavaScript библиотеки по работе с паролями. Алгоритм его работы заключается в вычислении веса пароля, основывающемся на данных о символах, из которых этот пароль составлен. Вес пароля вычисляется по следующей формуле:pwstrength = ((pwlength * 10) - 20) + (numeric * 10) + (numsymbols * 15) + (upper * 10)
, где - pwlength равно 5, если количество символов в пароле больше 5, или равно длине пароля;
- numeric равно 3, если количество цифр в пароле больше 3, в противном случае — равно количеству цифр;
- numsymbols считается равным 3, если число символов в пароле, отличных от букв, цифр и знаков подчёркивания, больше 3, иначе — количеству таких символов;
- upper равно 3, если количество букв в верхнем регистре больше 3, или количеству заглавных букв в противном случае.
Как видно, описанный анализатор не использует никаких проверок с использованием словарей, что делает его оценки несколько однобокими, и, вероятно, менее точными по сравнению с программами от Google и Microsoft, рассмотренными выше.
Password Strength Meter (jQuery plugin)
Ещё одним вариантом оценщика пароля, работающего на клиентской стороне, является Password Strength Meter (архив с плагином) – плагин, разработанный для JavaScript фреймворка jQuery.Процедура оценки работает следующим образом. Известно множество качеств, обладая которыми пароль увеличивает или уменьшает свою стойкость к подбору. Каждое такое качество имеет свой строго определённый вес. Алгоритм заключается в поэтапной проверке наличия у пароля этих качеств и, в случае их присутствия происходит увеличения суммарного веса пароля, по величине которого после просмотра всех характеристик делается заключение об уровне стойкости пароля.
Рассмотрим полный алгоритм процедуры оценки пароля:
- Вес пароля устанавливается равным нулю.
- Если длина пароля менее 4 символов, то работа алгоритма заканчивается и возвращается результат “слишком короткий пароль”. Иначе переходим к шагу 3.
- Вес пароля увеличиваем на величину 4 * len, где len – длина пароля.
- Осуществляется попытка сжатия пароля по следующему алгоритму. Если в пароле встречается подстрока вида SS, где S – строка длины 1, то первая часть этой подстроки удаляется и сжатие продолжается с позиции начала второй части этой подстроки. Например, применяя этот алгоритм к строке aaabbcab, на выходе получим строку abcab. После выполнения операции сжатия вес пароля уменьшается на величину len — lenCompress, где len – длина пароля, а lenCompress – длина пароля после сжатия.
- Проводятся попытки сжатия пароля для случаев строк S длинной 2, 3 и 4 символов. Вес пароля уменьшается аналогично на величину len — lenCompress. Отметим, что сжатие каждый раз производится на проверяемом пароле, а не строках, полученных на предыдущих попытках.
- Если пароль содержит не меньше 3 цифр, то увеличить вес на 5.
- Если пароль содержит не менее 2 знаков, то увеличить вес на 5.
- Если пароль содержит буквы как в верхнем так и в нижнем регистрах, то увеличить вес пароля на 10.
- Если пароль содержит буквы и цифры, то увеличить вес пароля на 15.
- Если пароль содержит знаки и цифры, то увеличить вес на 15.
- Если пароль содержит буквы и знаки, то увеличить вес на 15.
- Если пароль состоит только из букв или только из цифр, то уменьшить вес пароля на 10.
- Если вес пароля меньше 0, то установить его равным 0. Если больше 100, то установить равным 100.
- Пароль, вес которого меньше 34, признаётся “слабым”. Если вес от 34 до 67, то пароль относится к категории “хороший”, а если более 67, то пароль считается “отличным”.
Доступна страница, демонстрирующая возможность данного плагина.
Cornell University — Password Strength Checker
Официальный on-line сервис, предоставляемый центром безопасности Корнелльского университета (Итака, США). С его помощью пользователи могут проверить свой пароль, заполнив web-форму и отправив его на проверку. Оценка пароля, как и в случае с сервисом Google, производится на стороне сервера.Реализация алгоритма не раскрыта для общего доступа, однако в описании сервиса указаны требования, которым должен удовлетворять пароль, чтобы проверка прошла успешно:
- пароль должен иметь длину не менее 8 символов;
- при составлении пароля используются символы по крайней мере трёх алфавитов из следующего списка:
- заглавные латинские буквы
- строчные латинские буквы
- цифры
- специальные знаки (такие как
! * ( ) : |
)
- пароль не должен содержать слов из словаря;
- пароль не должен содержать последовательностей повторяющихся букв (например, ААА) и последовательностей вида abc, qwerty, 123, 321.
К такому подходу можно сделать следующее критическое замечания. Так пароль произвольно большой длины, например, какое-то предложение на естественном языке, не будет удовлетворять условию №3, что автоматически обеспечит паролю низкую оценку, хотя это, может быть, и не совсем оправдано.
Password Strength Tester
JavaScript анализатор паролей, который разрабатывается и поддерживается в рамках проекта Rumkin.com.Алгоритм оценки, реализованный в данном анализаторе, основывается на общих положениях теории информации. В качестве основной оценки пароля используется его энтропия, вычисление которой производится с использование таблиц диграмм для английского языка.
Под энтропией (информационной ёмкостью) пароля понимается мера случайности выбора последовательности символов, составляющих пароль, оцененная методами теории информации.
Информационная ёмкость E измеряется в битах и характеризует стойкость к подбору пароля методом полного перебора при условии отсутствия априорной информации о характере пароля и применении злоумышленником оптимальной стратегии перебора, при которой среднее ожидаемое количество попыток до наступления удачной равняется 2E-1. По утверждению создателя этого оценщика с целью уменьшения загружаемого на клиентскую сторону объёма информации все небуквенные символы были объединены в одну группу. Эта группа выступает неким универсальным символом, который и используется в частотной таблице. Как отмечает разработчик, при данном допущении значение получаемой энтропии будет меньше, нежели в случае, когда в частотной таблице все символы представлены раздельно.
В зависимости от полученного значения энтропии паролю присваивается соответствующая характеристика его стойкости.
Энтропия | Уровень стойкости | Комментарий |
< 28 бит | Очень слабый | Допустимо защищать только не ценную информацию. |
28-35 бит | Слабый | Способен остановить большое число начинающих взломщиков, идеально подходит для использования в качестве desktop-пароля. |
36-59 бит | Средний | Вполне пригоден для использования для компьютеров в корпоративной сети. |
60-127 бит | Высокий | Может быть хорошим для того, чтобы охранять финансовую информацию. |
> 128 бит | Сверхнадёжный | Пароль обладает очень большой стойкостью к подбору. |
Резюме
В рассмотренных выше программах используются различные способы оценки паролей, причём в каждой из них акцент сделан на оценку лишь какого-то определённого свойства пароля. Так анализатор паролей для проекта SeaMonkey в качестве основы для оценки использует знания о длине пароля и количестве символах из того или иного алфавита, используемых при построении пароля. В плагине Password Strength Meter для jQuery при оценке осуществляется выявление паролей построенных путём повторения групп символов. Особо следует отметить проект Password Strength Tester, в котором используется математическая модель, построенная на основе положений теории информации.Необходимо сказать, что в рассмотренных программных решениях существуют ряд проблем, не позволяющих считать оценку уровня надёжности пароля полной. Так on-line анализаторы, реализованные посредствам сценариев JavaScript, выполняемых на клиентской стороне, ограничены в своих ресурсах, что исключает возможность осуществлять проверку по словарям больших объёмов. В тоже время вариант проверки пароля на стороне сервера хотя и решает проблему использования словарей, однако оставляет открытым вопрос о надёжности передачи и, главное, защищённости оцениваемого пароля от несанкционированного использования. В последнем случае пользователь может надеяться лишь на то, что обработку пароля проводит сервер, выполняющий лишь «чистые» операции, а не служащий поставщиком информации для злоумышленников.
Кроме этого, следует отметить, что все рассмотренные программные продукты не поддерживают оценку паролей, содержащих буквы кириллицы.
habr.com
Создание и проверка пароля на надежность. Новый алгоритм для проверки надёжности паролей
Надежные пароли на компьютер. Примеры от простого к сложному.
Думаю все понимают, что в наше время тяжело представить жизнь без компьютера. Именно он является одним из самых распространенных видов времяпрепровождения.
Пользуясь этим современным гаджетом мы не можем обойти системы безопасности, аутентификации.Регулярно сталкиваемся с потребностью создания надежного пароля для различных социальных сетей, приложений, интересных сайтах и т.д.
Содержание
- Какие пароли считаются надежными?
- Первые выводы о надежном пароле
- Как создать надежный пароль!
Какие пароли считаются надежными?
Начнем с того, что каждый человек всегда хочет создать такой пароль, чтобы он его потом легко запомнил, выучил или и вовсе знал всю свою жизнь. Это толкает нас на грубейшую ошибку в «мире интернета».
Ведь самым популярным способом «взлома» является подбор вашего пароля с помощью использования именно ваших же личных данных. Поверьте, злоумышленник имеющий перед собой цель, начнет просматривать ваши данные в интернете, скорее всего это будут страницы в одноклассниках, контакте, майле и прочих сторонних сервисах на которых можно узнать ваше имя, фамилию, дату рождения, имена ваших родителей ,сестер и братьев, любимых увлечений, животных и прочую информацию о вашей жизни.
После чего начнется подбор пароля методом брута — это обычный перебор всех возможных вариантов. Так называемый способ «грубой силы» или брутфорс (англ. bruteforce)
Самыми популярными паролями являются:
Как видите это логически подбираемые пароли, скажу больше это ну просто предел наивности. Я соглашусь со многими, кто использует такие пароли для разового входа на сайт чтобы скачать какой-то файл, информацию. Но когда речь идет о важных вам страницах в соц.сетях или доступах к онлайн банкам, кошелькам понадобится грамотный подход к выбору пароля.
Первые выводы о надежном пароле
- — нельзя составлять пароль из своих личных данных(имя, фамилия, дата и т.д.)
- — нельзя составлять пароль методом логического ввода.
- — Пароль «28061992» (дата рождения) будет подобран за 1-2 секунды;
- — Пароль «сергей» будет подобран за 4 секунды
Примеры: иванворонин; иваныч; 28061992; ванек1992; ваня280692;
Примеры: 12345; 987654321;йцукен; qwerty; фывапр; ячсмит; 123454321;000;111. (Обратите внимание, все эти пароли так или иначе упорядоченное нажатие клавиш друг за другом, поэтому подобрать их будет очень легко.)
А если данные пароли будут подбираться с помощью программ брута, которые обладают огромной пропускной способностью, ваши пароли будут подбираться примерно с такой скоростью:
Как видите это какие то мгновения и ваш пароль в «лапах» злоумышленника. Не смотря на все дальше нужно иметь понимание , что регистр при вводе паролей всегда учитывается, если совсем по простому то базы данных понимают когда вы вводите заглавную букву, а когда прописную.
Как создать надежный пароль!
Теперь к сути самой статьи, каким же нужно сделать пароль , чтобы его просто так не «увели»?
1;uRva3’ именно так должен выглядеть надежный пароль, который трудно подобрать брутом. Не забываем , что восемь символов это самое малое что нужно для защиты, чем длиннее будет ваш пароль тем тяжелее его будет подобрать во многих случаях подбор практически невозможен.
Попробуем сделать пароль из 10 символов ,но так чтобы вы смогли все таки его запомнить, итак что нам нужно будет придумать.
Начнем наглядно:
10 символов: 0000000000 (изначально начнем с нулей), дальше все во власти вашей фантазии, играйте символами знакомых вам комбинаций, но перебирайте их грамотно.
1 этап, (00000000) — ( мы заменили начало и конец пароля на спец символы — скобки , которые не сложно запомнить)
2 этап, (к0и0к0а0) – ( дальше я взял название деревни из моего детства «Кика» и написал его с интервалом в один символ)
3 этап, (К0и0К0а0) – ( на этом этапе я изменил две прописные буквы «к» на заглавные – это в разы усилило надежность пароля)
4 этап, (К1и9К6а1) – ( теперь я заменил нули на хорошо запоминающуюся мне дату 1961 )
Вроде бы нечего сложного, всего какие-то 4-ре последовательных действия и получился достаточно сложный пароль, который совсем не сложно запомнить, а подобрать методом брута очень тяжело.
Друзья, фантазируйте – грамотно.
Теперь вы знаете как сделать свои пароли надежными и не дать их подобрать взломщикам. Дальше рекомендую познакомится с антивирусами. Какой антивирус выбрать?
Если статья вам по душе, жду ваши комментарии, мысли и дополнения.
proctoline.ru
Проверка паролей пользователей домена Windows на стойкость к атаке по словарю без компрометации пароля
Добрый день, коллеги. Хочу рассказать о полученном мной интересном опыте. Может быть кому-то пригодится.В современном мире пароли используются повсеместно. На корпоративном компьютере, на личном телефоне и планшете, в почте и т.д. И казалось бы всем уже неоднократно объяснялось, что пароль должен быть стойким. Показывались рекомендации, что пароль не должен содержать личные данные, словарные слова, простые комбинации и т.д. Но тем не менее, еще множество людей продолжают использовать простые пароли. Что является не только нарушением требований безопасности, но представляет серьезную опасность как личным так и корпоративным данным.
Соответственно, возникает задача с помощью подручных средств, без установки сложного ПО, проверить пароли пользователей домена на стойкость к атаке по словарю. При этом, нужно сохранить конфиденциальность паролей. Т.е. чтобы проверяющий не видел пароли в открытом виде, но при этом мог однозначно сказать, что пароль является словарным словом.
В связи с тем, что у нас домен построен на базе Microsoft Windows, для решения этой задачи было решено сравнивать хеши паролей пользователей домена с хешами словаря. В целом такой подход можно применить к хешам из любых систем. Изменятся только методы получения хешей пользователей.
Хеши паролей пользователей в домене Windows можно получить из файла ntds.dit. Но в штатном режиме доступ к нему запрещен системой. С помощью Google была найдена возможность получить копию файла ntds.dit (содержащий в том числе и логины/хеши паролей пользователей домена) стандартными средствами контроллера домена.
Для получения копии ntds.dit используются возможности утилиты ntdsutil.exe. С ее помощью необходимо сделать снимок системы (Volume Shadow Service) и получить копию файла SYSTEM (в нем содержится ключ для извлечения хешей из базы ntds.dit).
Для создания копии выполняем следующие команды:
C:\>ntdsutil
ntdsutil: activate instance ntds
ntdsutil: ifm
ifm: create full c:\audit
ifm: quit
ntdsutil: quit
В результате работы появляется каталог С:\Audit. Внутри каталога присутствуют две папки: Active Directory и registry. Соответственно в первой лежит копия ntds.dit, а во второй копии веток реестра SYSTEM и SECURITY. Данные папки можно скопировать на другой компьютер или оставить на контроллере домена.
Далее необходимо извлечь из ntds.dit логины и пароли пользователей домена. Для этого воспользуемся маленькой утилитой ntds_decrypt. Взять ее можно по адресу ntds_decode.zip. Качаем архив, распаковываем. Получаем два файла. Собственно исполняемый файл и readme с описанием опций.
ntds_decode -s FILE -d FILE -m -i
-s <FILE> : SYSTEM registry hive
-d <FILE> : Active Directory database
-m : Machines (omitted by default)
-i : Inactive, Locked or Disabled accounts (omitted by default)
Для использования утилиты необходимо запустить командную строку с правами «Администратор». На файле cmd.exe кликаем правой кнопкой мыши и выбираем пункт «Запуск от имени Администратора». В командной строке запускаем утилиту:
ntds_decode -s C:\Audit\registry\SYSTEM -d "C:\Audit\Active Directory\ntds.dit"
Здесь мы запускаем утилиту с основными параметрами (пути до файлов ntds.dit и SYSTEM), т.к. нам не нужны заблокированные или отключенные учетные записи (опция -i), и учетные записи компьютеров (опция -m).
В результате, получаем файл hashes.txt. Формат файла аналогичен формату pwdump и принимается большинством программ брутфорсеров (типа L0phtCrack). Формат файла такой:
<username>:<rid>:<lm hash>:<ntlm hash>:<description>:<home directory>
Собственно в файле hashes.txt нам интересны в первую очередь поля «username» и «ntlm hash».
Хорошо, мы получили исходные данные. Теперь нам нужен словарь. Я взял один из словарей в Интернете на 9 миллионов слов размером 92 Мб. Однако хотелось бы немного его расширить типовыми шаблонами. Например, добавить в конце пару цифр, поменять регистр букв и т.д. Для этой операции замечательно подошел старый добрый John the Ripper. В его функционале есть возможность произвести мутацию словаря по определенным правилам. Я решил не ограничивать возможности JtR и запустил его в стандартном варианте со всеми возможными мутациями.
john --wordlist=9mil.txt --rules dict.txt
После некоторого времени у меня получился файл dict.txt содержащий примерно 131 миллион слов. Теперь для слов нужно получить NTLM хеши. Т.к. сравнивать мы хотели именно хеш с хешем. Для расчета NTLM хешей словаря воспользуемся набором утилит HashManager. Взять его можно по адресу HashManager. Кстати в его составе также есть утилиты для мутации словарей. Но нам понадобится замечательная утилита GenerateHashList. Она генерирует хэши для всех паролей в исходном файле.
В распакованном архиве переходим в папку Bonus — GenerateHashList. И запускаем в командной строке bat файл с параметрами:
generate.bat NTLM dict.txt
Через некоторое (продолжительное ) время получим файл dictionary.txt, содержащий хеши словаря. Объем файла примерно 4.3 Гб. Это очень большой файл. И в идеале нужно уже переходить к использованию SQL, но не хотелось, т.к. это не подходило под требования по возможности использовать подручные средства не требующие установки сложного ПО.
Тогда, для начала, решено было использовать возможности Windows. А именно, утилиту FINDSTR. Данная утилита позволяет искать строку в файле и является обновленной версией утилиты FIND. Воспользовавшись Google было найдено решение, которое считывало хеш из файла hashes.txt и искало его в файле dictioanry.txt. Собственно, вот команда:
(for /f "usebackq tokens=1,4 delims==:" %%i in ("hashes.txt") do FINDSTR /I /B "%%j" Dictionary_sort.txt && Echo %%i>>"audit.txt" && Echo %%i %%j>>"audit_full.txt")
Результатом работы утилиты будет два файла:
— audit.txt, содержащий только логины пользователей, чьи хеши паролей были найдены в словаре
— audit_full.txt содержащий кроме логина еще и сам хеш. Это на тот случай если у пользователя возникнут сомнения в том, что хеш был найден в словаре.
Имеющийся файл hashes.txt содержал примерно 20 000 строк. Запустив утилиту find я обнаружил, что поиск одного хеша в словаре занимает около 40 секунд на моем ноутбуке Lenovo X220. Прикинув количество имеющихся строк и среднее время поиска получилось, что на поиск всех хешей уйдет в районе 10 дней. Правда результат можно видеть и в процессе. Так как найденные хеши сразу попадают в файл audit.txt. На более мощном компьютере скорость будет повыше, но не на много. Линейный поиск достаточно трудоемкий. И время поиска напрямую зависит от объема словаря. В общем — это рабочий вариант, но неудобный.
Тогда было решено написать свой скрипт поиска. Я давно интересовался Python и совсем недавно, просматривая в Youtube лекции Гарварда CS50, вспомнил про алгоритм бинарного поиска и решил попробовать реализовать его для поиска хешей в словаре. Ну что, поехали!
Для начала нужно отсортировать словарь. Это необходимо для осуществления бинарного поиска и кроме этого позволит еще больше обеспечить сохранность пароля. Так как после сортировки нельзя будет однозначно сопоставить хеш словаря со словом. Исходя из поставленной цели, использовать подручные средства, воспользуемся утилитой SORT из состава Windows. В командной строке запускаем команду:
sort dictionary.txt > dictionary_sort.txt
Получили отсортированный словарь хешей. Теперь сам скрипт. Я не специалист в Python, я только учусь, поэтому с помощью Google и разных нецензурных слов собрал скрипт и заставил его работать. Естественно скрипт не оптимален и страшно выглядит, но работает. В качестве параметров ему передается путь к файлу hashes.txt, путь к файлу словаря, и путь для записи результата (audit.txt, audit_full.txt).
Формат запуска:
PassAudit.exe -i c:\audit\hashes.txt -d c:\audit\dictionary_sort.txt -o c:\audit\
Вот сам скрипт:
import argparse
#Создаем поля для парсера
parser = argparse.ArgumentParser(description='This script testing passwords against dictioanry attack. '
'It takes hashes from file and compares to hashes in dictionary.'
'Accounts with weak password outputs into the file audit.txt '
'and audit_full.txt. You can not get clear password from hash.'
'To get hashes from domain controller you should execute next commands'
'at command prompt on domain controller: '
'cd c:\\ -> ntdsutil "activate instance ntds" ifm "create full c:\\pentest" quit quit'
' -> cd c:\\password\\ -> ntds_decode -s c:\\pentest\\registry\\SYSTEM '
'-d \"c:\\pentest\\Active Directory\\ntds.dit\" '
'After that you will get file hashes.txt. ntds_decode.exe you can get here: '
'http://www.insecurety.net/downloads/pwdtools/ntds_decode.zip '
'Dictionary hashes file must be sorted and formated one hash per line. '
'You can make it from any dictionary with John the Ripper and Hash manager '
'or any other programs. Copyright Handy761. 2016')
parser.add_argument('-i', '--input', help='Full path to hashes file', required=True)
parser.add_argument('-d', '--dictionary', help='Full path to dictionary file', required=True)
parser.add_argument('-o', '--output', help='Path to output files', required=True)
args = parser.parse_args()
#Открываем файлы hashes.txt и словарь
f0 = open(args.input)
f = open(args.dictionary)
#Формируем пути для открытия файлов результатов
result_file_path0 = args.output + '\\' + 'Audit.txt'
#Открываем файл результата Audit
r0 = open(result_file_path0, "w")
result_file_path2 = args.output + '\\' + 'Audit_full.txt'
#Открываем файл результата Audit_full
r = open(result_file_path2, "w")
#Создаем переменную для хеша пользователя
pass_hash = ''
#Запускаем цикл поиска
while True:
#Устанавливаем указатель на конец файла
f.seek(0, 2)
#Задаем начальный указатель в словаре
begin = 0
#Задаем конечный указатель в словаре
end = f.tell()
#Т.к. указатели на байты, а у нас строки то будем конвертировать байты в строки. Задаем номер начальной строки
lines_begin = 0
#Задаем номер конечной строки. Т.к. длина строки 32 байта плюс перевод строки делим на 34
lines_end = end / 34
#Считываем из фала Hashes.txt строку и проверяем на конец файла
pass_line = f0.readline()
if ("" == pass_line):
print("file finished")
break
#Парсим строку на элементы. Разделитель :
pass_line_parse = pass_line.split(":")
#Выбираем поле ntlm_hash и прибавляем к нему символ перевода строки. Т.к. в словаре строки оканчиваются переводом строки.
pass_hash = pass_line_parse[3] + '\n'
#Создаем переменную для указателя на середину диапазона поиска
point1 = 100
#Пока указатель на середину диапазона больше 1, будем искать.
while (point1 > 1):
#Вычисляем середину диапазона
point1 = (lines_end - lines_begin) // 2
#Если у нас указатель на начало диапазона строк больше нуля, то полученное значение середины диапазона прибавляем к этому указателю и умножаем на 34 для получения смешения в байтах
if lines_begin > 0:
point = (lines_begin + point1) * 34
else:
point = point1 * 34
#Устанавливаем указатель в файле словаря на середину диапазона
f.seek(point, 0)
#Считываем строку из словаря
line_key = f.readline()
#Сравниваем значение из словаря со значением из файла hashes.txt и если совпало, то выводим в файлы и на экран. Иначе определяем, где искомое значение (выше или ниже), чтобы понять какую половину отбросить и соответственно сдвинуть указатели на начало и конец диапазона. После этого начинаем сначала.
if pass_hash == line_key:
print(pass_line_parse[0], line_key)
r.write(pass_line_parse[0])
r.write(' ')
r.write(line_key)
r0.write(pass_line_parse[0])
r0.write('\n')
break
elif pass_hash > line_key:
begin = f.tell()
lines_end = end / 34
lines_begin = begin / 34
else:
end = f.tell()
lines_end = end / 34
lines_begin = begin / 34
#По окончанию закрываем все файлы
f.close()
f0.close()
r.close()
r0.close()
Для удобства я скомпилировал скрипт в exe-файл. После запуска, на том же самом наборе данных, время перебора составило порядка 3 минут.
Все перечисленные здесь манипуляции по получению хешей паролей пользователей домена и проверке их по словарю достаточно неплохо автоматизируются в скрипт. Генерация хешей словаря операция разовая и производится по необходимости.
Таким образом, можно настроить скрипт, который на регулярной основе будет выгружать хеши паролей пользователей из контроллера домена, проверять их по словарю и отправлять результат в службу технической поддержки для оповещения пользователей о слабом пароле.
Возможно все это можно было сделать проще, быстрее и красивее, но в любом случае это был интересный опыт.
habr.com