Часто выбираемые пароли
В данной статье описываются результаты анализа паролей, которые используют пользователи для доступа к форумам, сайтам, электронной почте. Эти пароли не генерировались системой или назначались администратором, а их задавал сам пользователь при регистрации.
По моей просьбе, люди, знакомые по интернету, собрали базу данных для этого исследования. Во время стадии сбора информации в основном использовались уязвимости типа SQL-injection (позволяющие пользователю выполнять любые запросы к базе данных, установленной на сервере), XSS (cross-site-scripting, позволяет взломщику внедрить в страницу свой html-код, что дает возможность украсть cookies администратора и затем подделать сессию), а также простые оплошности системных администраторов, когда из-за неправильной конфигурации сервера базу данных мог просматривать любой человек.
В результате этой работы была собрана база данных вида «логин:пароль», содержащая 52125 записей. Большую часть (42920, 82,3%) из них представляли md5-хэши, остальные (9205, 17,7%) — пароли в виде plain-text (незашифрованные) или пароли, зашифрованные алгоритмами, допускающими построение обратной функции — то есть расшифровку (например base64). Использование в интернет-проекте публичных алгоритмов, позволяющих декриптовать пароль, не дает никакой защиты и, по сути, ничем не лучше хранения паролей в открытом виде.
В собранный базе данных есть пароли, заданные пользователями разных наций, но подавляющее большинство приходится на русских (около 40%) и американцев (почти 20%), остальные — в основном европейцы (немцы, поляки, чехи, англичане). Азиатов — единицы.
Атака на MD5
После сбора информации для проведения анализа необходимо было взломать хотя бы некоторую часть полученных md5-хэшей. Для тех, кто не сведущ в криптографии или программировании, попытаюсь объяснить суть этого алгоритма. Приведем общее определение хэш-функции — это преобразование, которое позволяет из данных произвольной длины получить некое значение фиксированной длины. Известный пример такой функции — crc32, контрольная сумма файла. Хэш-функции также бывают криптографическими и программистскими. Нас интересует первый вариант. Основными свойствами хэш-функций, применяемых в криптографии, являются необратимость и свободность от коллизий. Необратимость означает, что нельзя разработать алгоритм, который на основе известного хэша позволяет получить исходные данные (грубо говоря, зная хэш пароля, получить сам пароль). Свободность от коллизий — практическую невозможность подобрать два разных исходных аргумента, значение хэш-функции для которых будет одинаковым. MD5 — публичный алгоритм, являющийся криптографической хэш-функцией, поэтому единственный возможный тип атаки на него — зашифровка всех возможных значений пароля и сравнение полученного результата с известным хэшем. .
Для взлома md5-хэшей я использовал программу Passwords Pro v1.2.0.1 . С ее помощью удалось взломать 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*106, 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 пользователей
. Исходя из этих данных, можно сказать, что в целом за последние время наблюдается упрощение паролей, используемых пользователями. Так, по данным, собранным 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); запись всего логина или его части в обратном порядке (chap118: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 компьютеров, это еще раз показывает, что наиболее употребляемые пароли изменяются с течением времени.
Статистика по длине и составу паролей. В результате анализа пароля по их длине и составу была создана таблица, в которой можно наглядно увидеть наиболее популярные типы паролей. Во второй колонке указывается количество символов в наборе, из которого составлен пароль, что удобно для некоторых расчетов. Так, чтобы вычислить количество паролей определенного типа, необходимо рассчитать число размещений с повторениями, что делается по следующей формуле:
P=nr
где P — количество размещений (паролей), n — количество элементов множества, из которого осуществляется выборка (символов в наборе), r — число элементов (максимальная длина пароля).
длина пароля
состав пароля символов
в наборе<=3 4 5 6 7 8 >8 сумма %
мал. 26 616 1371 2063 4180 2664 2663 768 14325 47,09
цифры 10 1003 1747 1309 4712 1441 2289 119 12620 41,48
мал.+цифры 36 24 134 314 572 392 623 305 2364 7,77
малые+бол. 52 18 59 80 117 67 88 37 466 1,53
бол. 26 34 58 37 42 21 17 1 210 0,69
мал.+бол.+цифры 62 2 2 4 21 21 43 27 120 0,39
мал+спец 58 1 18 21 13 27 18 11 109 0,36
кириллица 66 5 8 30 12 12 8 7 82 0,27
бол.+цифры 36 1 10 14 15 6 11 10 67 0,22
спец.символы 32 13 4 0 2 1 0 0 20 0,07
мал+бол+спец 84 0 0 6 3 2 3 1 15 0,05
мал+спец+цифры 68 0 3 0 0 1 2 4 10 0,03
цифры+спец 42 5 1 0 0 0 2 0 8 0,03
мал+бол+сп+циф 94 0 0 0 0 1 0 3 4 0,01
бол+спец 58 0 1 0 0 0 0 1 2 0,01
сумма 1722 3416 3878 9689 4656 5767 1294 30422
% 5,66 11,23 12,75 31,85 15,30 18,96 4,25
Некоторые пояснения — через «мал.» и «бол.» обозначены строчные и прописные латинские буквы соответственно. «Спец.» — спецсимволы (например !@#). В строку кириллица вошли пароли, содержащие в себе символы русского или других национальных алфавитов, но не обязательно полностью состоящие из них (то есть пароль «паroL12» также подпадает под эту графу). В сводную таблицу не вошли 28 паролей, содержащих символы, единственный способ ввода которых — использование дополнительной клавиатуры, для введения символа через его код, например ®.
Из приведенной таблицы несложно сделать выводы — самая популярная длинна пароля — 6 символов, состав — малые латинские символы или цифры. Более того, длина 85,6 процентов всех паролей менее 8 символов, а состоят они из малых букв или цифр (в таблице выделены оранжевым). Подсчитаем время, которое необходимо для взлома md5-хэшей таких паролей на локальном компьютере. За среднюю скорость возьмем 3 миллиона вариантов в секунду, тогда по уже известной формуле получим:
Для малых букв: 20,109 (часов)
Для цифр: 0,01 (часов)
То есть, грубо говоря, вероятность того, что вы менее чем за сутки взломаете среднестатистический пароль, зная его 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-адреса после определенного числа попыток войти в систему с неверным паролем защитит вас — посмотрите список прокси-серверов на http://samair.ru/proxy/ и убедитесь, что это лишь ширма, а не защита.
Если ваш пароль ненадежен — смените его сейчас, не ждите, пока кто-нибудь получит доступ к вашей конфиденциальной информации. Вполне возможно, что уже сейчас почта с вашего почтового ящика перенаправляется конкурентам, а вы даже не подозреваете об этом. Очень рекомендуется менять пароли для доступа к важным для вас сервисам хотя бы раз в месяц.
Еще один важный аспект защиты — системы восстановления забытых паролей. Многие выбирают вполне достойные пароли, которые не по зубам взломщикам, но оказываются уязвимыми через эти системы.
Во-первых, никогда не указывайте несуществующий ящик в качестве альтернативного почтового адреса, на который будет высылаться пароль, — взломщик может воспользоваться этим. Зарегистрировав этот аккаунт на себя, получение вашего пароля будет делом нескольких минут. Во-вторых, очень важным является контрольный вопрос, который позволяет восстановить забытый пароль. Никогда не указывайте в ответе на него свои личные данные (год рождения, кличку собаки, девичью фамилию матери) — взломщик может с легкостью получить эту информацию, используя либо поиск в интернете, либо социальную инженерию. Во втором случае вы или ваши близкие (сослуживцы, родственники) сами с удовольствием раскроете взломщику эту информацию. Идеальным вариантом будет указать в ответе на контрольный вопрос случайный набор символов.
Еще несколько банальных советов. Регулярно обновляйте антивирусный софт, установите на ваш компьютер файрвол. Используйте альтернативный браузер (Opera) и почтовый клиент (The Bat!). Львиная доля уязвимостей в ПО, используемых взломщиками, приходится на продукты компании Microsoft.
Советы администратору. Введите систему контроля над паролями, которые выбирают пользователи. Лучше всего требовать наличия в нем букв и цифр, причем цифр не в начале или конце пароля, а в середине (хотя это и не убережет от паролей типа pass123pass, но множество глупых паролей будет отсеяно). Ограничивайте минимальную длину пароля хотя бы шестью символами. Не ограничивайте максимальную длину пароля (на мой взгляд, все разумные причины для этого не актуальны на текущей стадии развития аппаратного обеспечения).
Продумайте систему восстановления забытых паролей. Я считаю, что восстановление путем ответа на контрольный вопрос — недостаточно надежная схема. Множество паролей взламывается именно через контрольный вопрос. Если вы не хотите потом разбираться, кому на самом деле принадлежит учетная запись, не используйте такую систему. На мой взгляд, хороший метод восстановления пароля — это высылка на указанный при регистрации почтовый ящик. Желательно высылать не старый пароль, а заново сгенерированный. Это поможет избежать шпионажа или действий от лица другого человека, а также взлома аккаунтов пользователя на других системах.
В большинстве сетевых приложений сейчас используется аутентификация на базе алгоритма md5, который, хоть и надежен, довольно неустойчив при использовании слабых паролей. Существует разные системы для защиты хэшей, хранящихся в базе данных, от взлома методом грубой силы. Например я встречал такой совет: «храните не весь хэш, а лишь его первые 16 символов, что затруднит атакующему ввод таких «огрызков» в программу для взлома, а вероятность совпадения первых 16 байт для разных паролей довольно мала.» Более того, я встречал такой метод реализованным на практике. Это не самый лучший выход, так как допускает коллизионность паролей, а реальных препятствий взломщику не создает никаких.
Самым простым в реализации и дающим защиту от большинства взломщиков мне кажется следующий метод. Храните в базе данных не хэш пароля, а хэш хэша, то есть значение функции md5(md5(password)). При логине пароль просто хэшируется два раза и полученное значение сверяется с хранящимся на сервере. Взломщик же сталкивается с несколькими трудностями. Во-первых ему надо еще определить что это не хэш самого пароля (а с первого взгляда это сделать невозможно — сказывается свойство, по которому результатом работы функции является значение фиксированной длинны). Во-вторых — публичных программ для взлома такого типа не существует. Придется или разрабатывать свою программу или идти на какие-либо ухищрения. Это даст защиту от взломщиков-киддисов (а их сейчас большинство), которые используют программы, разработанные другими, и уязвимости, найденные не ими. Можно пойти дальше и хранить пароль, хэшированный не два, а три или более раза. В этом случае еще и существенно замедляется скорость локального перебора паролей.
P.S. Все примеры паролей, приведенные в статье — реальные.