"12345 — его проще набирать", или пароли, которые мы выбираем
Стоит чукча на посту, мимо кто-то проходит. Чукча:
— Пароль?
— 123456.
— Проходи.
Современная версия известного анекдота
Intro
В данной статье описываются результаты анализа паролей, которые используются для доступа к форумам, сайтам, электронной почте. Эти пароли не генерировались системой или назначались администратором — их задавал сам пользователь при регистрации.
По моей просьбе люди, знакомые мне по Интернету, собрали базу данных для этого исследования. Во время сбора информации в основном использовались уязвимости типа SQL-injection (позволяющие пользователю выполнять любые запросы к базе данных, установленной на сервере), XSS (cross-site-scripting — позволяет взломщику внедрить в страницу свой html-код, что дает возможность украсть cookies администратора и затем подделать сессию), а также простые оплошности системных администраторов, когда из-за неправильной конфигурации сервера базу данных мог просматривать любой человек. В результате этой работы была собрана база данных вида "логин:пароль", содержащая 52125 записей. Большую часть (42920, 82,3%) из них представляли md5-хэши, остальные (9205, 17,7%) — пароли в виде plain-text (незашифрованные) или пароли, зашифрованные алгоритмами, допускающими построение обратной функции — то есть расшифровку (например, base64). Использование в интернет-проекте публичных алгоритмов, позволяющих декриптовать пароль, не дает никакой защиты и, по сути, ничем не лучше хранения паролей в открытом виде. В собранный базе данных есть пароли, заданные пользователями разных наций, но большинство из них приходится на русских (около 40%) и американцев (почти 20%), остальные — в основном европейцы (немцы, поляки, чехи, англичане). Азиатов — единицы.
Атака на 45MD5
После сбора информации для проведения анализа необходимо было взломать хотя бы некоторую часть полученных md5-хэшей. Для тех, кто несведущ в криптографии или программировании, попытаюсь объяснить суть этого алгоритма. Приведем общее определение хэш-функции — это преобразование, которое позволяет из данных произвольной длины получить некое значение фиксированной длины. Известный пример такой функции — crc32 — контрольная сумма файла. Хэш-функции также бывают криптографическими и программистскими. Нас интересует первый вариант. Основными свойствами хэш-функций, применяемых в криптографии, являются необратимость и свободность от коллизий. Необратимость означает, что нельзя разработать алгоритм, который на основе известного хэша позволяет получить исходные данные (грубо говоря, зная хэш пароля, получить сам пароль). Свободность от коллизий — практическую невозможность подобрать два разных исходных аргумента, для которых значение хэш-функции будет одинаковым. MD5 — публичный алгоритм, являющийся криптографической хэш-функцией, поэтому единственный возможный тип атаки на него — зашифровка всех возможных значений пароля и сравнение полученного результата с известным хэшем. Более подробно об алгоритме md5 можно почитать в RFC1321 (www.faqs.org/rfcs/rfc1321.html). Для взлома md5-хэшей я использовал программу Passwords Pro v1.2.0.1 (InsidePro.com). С ее помощью удалось взломать 21249 паролей из 42920 (49,5%). Уже исходя из этих данных можно утверждать, что почти половина всех используемых сейчас паролей — ненадежные. Были подобраны все пароли, длина которых менее 5 символов, и все численные пароли, длина которых менее 10 символов. Заявленная разработчиком скорость для разных процессоров:
Intel Pentium-III 1000 MHz ~2,2 млн паролей/секунду
AMD AthlonXP 1700+ (1466 MHz) ~3,6 млн паролей/секунду
Intel Pentium-4 2400 MHz ~4,0 млн паролей/секунду
Реальная скорость перебора для моего компьютера (AMD AthlonXP 1600+) составляла около 3,2 миллионов паролей в секунду для взлома одного пароля и падала приблизительно до 200 тысяч паролей в секунду при одновременном взломе 8000 паролей (это происходит из-за того, что программе необходимо сравнить значение хэш-функции, полученное для проверяемого пароля, со всеми известными хэшами, загруженными в нее). Максимальное время, требующееся для подбора пароля, рассчитывается по следующей формуле:
где N — количество символов в наборе, из которого составляется пароль, L — предельная длина пароля, S — число проверок в секунду. Например, если рассчитать по этой формуле время, которое потребуется для перебора всех численных паролей длиной до 9 символов (S=3*10 6, N=10 (цифры), i=8), то получим всего лишь 37 секунд.
Однако метод полного перебора всех возможных комбинаций хорош либо для малого числа символов в наборе, либо для паролей небольшой длины (4-5 символов). Так, для перебора на обычном компьютере всех возможных паролей (могут включать 224 печатных символа) максимальной длиной 6 символов уже требуется 490 суток. Кроме атаки полным перебором, использовалась атака по словарю, когда возможные пароли не генерируются программой, а берутся из файла-словаря, заранее составленного пользователем.
Анализ
Из полученной базы были удалены записи с одинаковыми логинами и паролями. Вероятность того, что эти учетные записи были созданы одним и тем же человеком, довольно мала, но я решил все-таки учесть и ее. В результате в общей сложности было проанализировано 30.450 паролей разных пользователей. Для сбора статистики была написана специальная программа, так как обработать вручную такой массив данных не представляется возможным.
Ниже приведено 15 самых популярных паролей и количество пользователей, избравших их:
123456 — 449 пользователей
123 — 303 пользователя
12345 — 288 пользователей
qwerty — 206 пользователей
12345678 — 148 пользователей
111 — 113 пользователей
1234 — 103 пользователя
666 — 85 пользователей
123321 — 77 пользователей
1111 — 77 пользователей
111111 — 76 пользователей
gfhjkm — 76 пользователей
password — 71 пользователь
1234567 — 69 пользователей
777 — 65 пользователей
Более полный список (50 самых популярных паролей) можно найти в Интернете на x-hack.ru/Antalos/ popular.html. Исходя из этих данных, можно сказать, что в целом за последнее время наблюдается упрощение паролей, применяемых пользователями. Так, по данным, собранным Solar Designer, в начале 90-х самыми популярными паролями являлись:
12345
abc123
password
passwd
123456
newpass
notused
Hockey
Internet
Конечно, приведенные пароли также ненадежны, но среди них нет ни одного длиной менее 4 символов или состоящего из одинаковых цифр (111).
Логин в пароле
Целых 729 (2%) паролей оказались абсолютно идентичными имени пользователя — не изменялся даже регистр букв (m2t4:m2t4, salavat:salavat). Еще 314 представляли собой различные модификации логина — добавление одной/нескольких цифр в начале или конце (jotum:1jotum, skiz:skiz57); запись всего логина или его части в обратном порядке (chap 118:811pahc, zoran58:naroz85); добавление фамилии к имени (korey:koreyblake); запись в другом регистре (dorofey: DOROFEY). При желании взломщик может собрать дополнительную информацию о пользователе (благо сделать это не так уж сложно) и перебрать возможные варианты. Если учесть, что в большинстве случаев добавляют сочетания вроде 1, 123 или год рождения, а процесс генерации подобных комбинаций можно автоматизировать, то такие пароли являются небезопасными и могут быть подобраны довольно быстро.
Атака по словарю
Большинство пользователей выбирают пароль, который несет какую-то смысловую нагрузку, что позволяет взломщику использовать атаку по словарю — перебор паролей из заранее составленного списка. В качестве основы для составления такого списка зачастую используют толковые словари языка, также распространена практика составления словарей по художественной литературе. Во втором случае из книги в электронном формате с помощью специальной программы выбираются все использованные в ней слова за исключением форм слова в разном числе или падеже. Второй подход считается более продуктивным, так как он позволяет собрать активно используемый лексикон языка, а списки на основе различных словарей получаются большими, но большая часть времени уйдет на проверку вариантов, которые фактически не используются в качестве паролей (специальные термины и т.п.). Также составляют списки наиболее употребляемых паролей, в которые могут входить и числа.
Модификация слова (запись в обратном порядке, удвоение, добавление цифр и т.п.) не спасает, так как с помощью написанной за 10 минут программы или готового софта на основе базового словаря можно быстро сгенерировать все эти варианты и проверить. Существуют даже программы, которые заменяют буквы схожими по начертанию цифрами (coolpass станет c00lpa55). Так что такие, казалось бы, надежные уловки не приводят к повышению устойчивости используемого пароля. Не думайте, что вы окажетесь умнее взломщика. Если хотите сделать свой пароль неуязвимым к словарной атаке — выбирайте бессмысленные комбинации символов.
В моем случае по словарям удалось подобрать 14176 (46,5%) паролей. Как видим, почти половина пользователей выбирает осмысленный пароль. Из этих паролей 6938 (22,8% от всех паролей) были подобраны всего лишь по двум маленьким словарям, в которые входят самые популярные пароли. Приведу краткую статистику по словарям, которые оказались наиболее эффективными (через запятую указано количество слов в словаре, затем — число подобранных паролей):
популярные пароли, 2153 — 5068
более полный словарь популярных паролей, 13958 — 6924
названия рок-групп и имена музыкантов, 12340 — 890
имена разных народов, 39132 — 1357
русские слова, набранные в английской раскладке, 138204 — 1406
русские слова, набранные транслитом, 138204 — 1958
слова разных народов, 3.162.009 — 10685
слова разных народов, записанные в обратном порядке, 3.162.009 — 9223
Стоит упомянуть, что по словарю, который использовался червем Морриса (419 слов), было подобрано всего 389 паролей. А в 1988 году этот вирус смог поразить 6200 компьютеров, что еще раз показывает, что наиболее употребляемые пароли изменяются с течением времени. Более полную статистику по использованным словарям можно посмотреть в Интернете на x-hack.ru/Antalos/dics.html.
Статистика по длине и составу паролей
В результате анализа пароля по их длине и составу была создана таблица, в которой можно наглядно увидеть наиболее популярные типы паролей. Во второй колонке указывается количество символов в наборе, из которого составлен пароль, что удобно для некоторых расчетов. Так, чтобы вычислить количество паролей определенного типа, необходимо рассчитать число размещений с повторениями, что делается по следующей формуле:
P=n r,
где P — количество размещений (паролей), n — количество элементов множества, из которого осуществляется выборка (символов в наборе), r — число элементов (максимальная длина пароля).
Некоторые пояснения. Через "мал." и "бол." обозначены строчные и прописные латинские буквы соответственно. "Спец." — спецсимволы (например, !@#). В строку "кириллица" вошли пароли, содержащие в себе символы русского или других национальных алфавитов, но не обязательно полностью состоящие из них (то есть пароль "паroL12" также подпадает под эту графу). В сводную таблицу не вошли 28 паролей, содержащих символы, единственный способ ввода которых — использование дополнительной клавиатуры для введения символа через его код — например, .
Из приведенной таблицы несложно сделать выводы: самая популярная длина пароля — 6 символов, состав — малые латинские символы или цифры. Более того, длина 85,6% всех паролей менее 8 символов, а состоят они из малых букв или цифр (в таблице выделены фоном). Подсчитаем время, которое необходимо для взлома md5-хэшей таких паролей на локальном компьютере. За среднюю скорость возьмем 3 миллиона вариантов в секунду, тогда по уже известной формуле получим:
Для малых букв:
(часов)
Для цифр:
(часов)
То есть, грубо говоря, вероятность того, что вы менее чем за сутки взломаете среднестатистический пароль, зная его md5-хэш, — 85%!
Еще несколько фактов
Среди собранных паролей оказалось 53 пароля системных администраторов (логины admin, administrator, webmaster). На общем фоне их пароли кажутся более надежными, но большая часть уязвима для атаки по словарю.
Основные правила, применяемые пользователями для генерации пароля путем изменения словарного слова или логина:
— добавление цифры в начале и/или конце пароля (в большинстве случаев — 0,1,…,9; 1,12,123,…; 00,11,…,99; 10,20,…,90; зачастую — год рождения);
— зеркалирование (matrix= xirtam);
— умножение слова, возможны разделители (moneymoney; zero-zero);
— умножение с зеркалированием (pepperreppep);
— запись в другой раскладке (валера =dfkthf);
— эксперименты с регистром букв (eXcesS);
— замена букв на цифры, схожие но начертанию (1slam);
— запись прямым/обратным транслитом (морж = morzh; billgates = биллгейтс).
Возможно применение нескольких правил одновременно, но даже это не дает надежной защиты от атаки по словарю, так как взломщик может модифицировать исходный пароль тем же путем. Мне показалось интересным, что популярные пароли могут изменяться с течением времени. Связано это с несколькими причинами.
Популярное в реальной жизни становится распространенным и в виртуальной. Так, пароль matrix, который в конце 80-х — начале 90-х использовали разве что математики, с выходом одноименного фильма занимает 29-е место в списке популярных паролей.
Точно так же влияют на выбор пароля и известные музыкальные группы (tatu), книги (Pelevin), программы (windows). Еще одним важным фактором является популяризация Интернета в целом — в Сеть приходит множество новых людей, которые могут не иметь понятия о компьютерной безопасности.
Это приводит к широкому использованию простейших паролей, а следовательно, и увеличению числа взломов.
Coda
Проанализировав довольно большое количество паролей, я хотел бы дать несколько советов, которые, как мне кажется, помогут вам избежать утечки информации. Многие из них банальны, но, как показала практика, не соблюдаются в большинстве случаев, поэтому напомнить их будет не лишним.
Советы пользователям
Самый важный совет: никогда не используйте одинаковые пароли для доступа к разным системам! Даже если он кажется абсолютно устойчивым и надежным — например, V1!2cEqP,@#19r.
Взломщик может получить ваш пароль для доступа к одной системе, используя какую-либо уязвимость в ней. И это будет не ваша вина, а вина программистов. Но если он, получив один пароль, сможет получить контроль над всей вашей деятельностью в Сети — это будет целиком на вашей совести.
Теперь поговорим о выборе пароля. Никогда не используйте пароли, состоящие только из цифр. Количество возможных комбинаций цифр невелико (при желании рассчитайте его по формуле), и такой пароль может быть подобран относительно быстро даже при удаленной атаке. Проверьте используемый вами пароль: если в таблице он попадает в выделенные ячейки, то можно утверждать, что он ненадежен. Ваша цель при создании пароля — достичь максимально разумного числа символов в исходном наборе (используйте разный регистр и специальные символы).
Не используйте осмысленные пароли и их модификации. Взломщику не составит большого труда подобрать его. Не думайте, что система блокирования IP-адреса после определенного числа попыток войти в систему с неверным паролем защитит вас — просмотрите список прокси-серверов на samair.ru/proxy/ и убедитесь, что это лишь ширма, а не защита.
Если ваш пароль ненадежен — смените его сейчас, не ждите, пока кто-нибудь получит доступ к вашей конфиденциальной информации. Вполне возможно, что уже сейчас почта с вашего почтового ящика перенаправляется конкурентам, а вы даже не подозреваете об этом. Очень рекомендуется менять пароли для доступа к важным для вас сервисам хотя бы раз в месяц.
Еще один важный аспект защиты — системы восстановления забытых паролей. Многие выбирают вполне достойные пароли, которые не по зубам взломщикам, но оказываются уязвимыми через эти системы.
Во-первых, никогда не указывайте несуществующий ящик в качестве альтернативного почтового адреса, на который будет высылаться пароль: этим может воспользоваться взломщик.
После того, как он зарегистрирует этот аккаунт на себя, получение вашего пароля будет для него делом нескольких минут.
Во-вторых, очень важным является контрольный вопрос, который позволяет восстановить забытый пароль.
Никогда не указывайте в ответе на него свои личные данные (год рождения, кличку собаки, девичью фамилию матери) — взломщик может с легкостью получить эту информацию, используя либо поиск в Интернете, либо социальную инженерию.
Во втором случае вы или ваши близкие (сослуживцы, родственники) сами с удовольствием раскроете взломщику эту информацию. Идеальным вариантом будет указать в ответе на контрольный вопрос случайный набор символов.
Еще несколько банальных советов. Регулярно обновляйте антивирусный софт, установите на ваш компьютер файрволл. Используйте альтернативный браузер (Opera) и почтовый клиент (The Bat!). Львиная доля уязвимостей в ПО, используемых взломщиками, приходится на продукты компании Microsoft.
Советы администратору
Введите систему контроля над паролями, которые выбирают пользователи. Лучше всего требовать наличия в нем букв и цифр, причем цифр не в начале или конце пароля, а в середине (хотя это и не убережет от паролей типа pass123pass, но множество глупых паролей будет отсеяно). Ограничивайте минимальную длину пароля хотя бы шестью символами. Не ограничивайте максимальную длину пароля (на мой взгляд, все разумные причины для этого на текущей стадии развития аппаратного обеспечения неактуальны).
Продумайте систему восстановления забытых паролей. Я считаю, что восстановление путем ответа на контрольный вопрос — недостаточно надежная схема.
Множество паролей взламывается именно через контрольный вопрос. Если вы не хотите потом разбираться, кому на самом деле принадлежит учетная запись, не используйте такую систему. На мой взгляд, хороший метод восстановления пароля — высылка на указанный при регистрации почтовый ящик.
Желательно высылать не старый пароль, а заново сгенерированный. Это поможет избежать шпионажа или действий от лица другого человека,
а также взлома аккаунтов пользователя на других системах.
В большинстве сетевых приложений сейчас используется аутентификация на базе алгоритма md5, который, хоть и надежен, довольно неустойчив при использовании слабых паролей.
Существуют разные системы для защиты хэшей, хранящихся в базе данных, от взлома методом грубой силы. Например, я встречал такой совет: "храните не весь хэш, а лишь его первые 16 символов, что затруднит атакующему ввод таких "огрызков" в программу для взлома, а вероятность совпадения первых 16 байт для разных паролей довольно мала".
Более того, я встречал такой метод реализованным на практике. Это не самый лучший выход, так как допускает коллизионность паролей, а реальных препятствий взломщику не создает никаких.
Самым простым в реализации и дающим защиту от большинства взломщиков мне кажется следующий метод. Храните в базе данных не хэш пароля, а хэш хэша, то есть значение функции md5(md5(password)).
При логине пароль просто хэшируется два раза и полученное значение сверяется с хранящимся на сервере. Взломщик же сталкивается с несколькими трудностями. Во-первых, ему надо еще определить, что это не хэш самого пароля (а с первого взгляда это сделать невозможно: сказывается свойство, по которому результатом работы функции является значение фиксированной длины).
Во-вторых — публичных программ для взлома такого типа не существует. Придется или разрабатывать свою программу, или идти на какие-либо ухищрения. Это даст защиту от взломщиков-киддисов (а их сейчас большинство), которые используют программы, разработанные другими, и уязвимости, найденные не ими.
Можно пойти дальше и хранить пароль, хэшированный не два, а три или более раз. В этом случае еще и существенно замедляется скорость локального перебора паролей.
Комментарии
Все приведенные в статье примеры паролей реальные.
Ни один пароль не был использован для доступа к учетной записи или системе.
Александр Савченков, savabest@tut.by
Компьютерная газета. Статья была опубликована в номере 05 за 2005 год в рубрике