Начало
У меня есть увлечение – коллекционировать слитые в интернет базы и прочий «хлам». Как-то раз решил я пошарить на RGhost в поисках «вкусненького». Часто на файлообменниках обнаруживаю инструкции по подключению к чему угодно с вложенными туда логинами и паролями. В этот раз совершенно случайно наткнулся на 700 MB текстовый файл «dump.txt», в котором красиво лежали пары логин-пароль. Сначала огорчился: «Наверное, это всем доступные, собранные вместе, совсем недавно слитые учетные записи Яндекса, Мейла, Google», — подумал я. Но нет… Немного изучив находку, я обомлел.
Для тех, кто на диалапе: накануне ИБ-сообщество взорвалось от новостей о слитых 5 сентября 1 260 614 адресов от Яндекса, 8 сентября 4 425 522 адресов от Mail.ru и 10 сентября 4 661 763 адресов от Gmail.com. Всего 10 347 899 адресов от 3 сервисов. Все они, по всей видимости, были получены из бот сети и произвели фурор — разве что ленивый не написал тогда об этом статью.
И вот, передо мной лежал файл с 25 929 527 парами логин-пароль от одного российского мейл-сервиса… с рабочими парами! Меня тогда это повергло в шок. 25 млн учетных записей, некоторые с весьма сложными паролями. Это означает, что все они лежали в открытом (или плохо обфусцированном) виде в базе весьма крупного e-mail провайдера. Ведь не сбрутили же хеши, например, от паролей «18101547481590210» или «y4_F3Р7TRf-2U-k». Друзья, пожалуйста, не используйте одинаковые пароли для разных сервисов. Как показывает практика, очень часто владельцы даже крупных сайтов недостаточно заботятся о своих пользователях и хранят пароли в базах в открытом виде.
Вы спросите, как я узнал, что креды именно от этого мейл провайдера? Конечно, проведя небольшой анализ, но обо всем по-порядку.
Откуда слив?
Думаю, любой специалист по ИБ, который занимался составлением своих словарей для брута, ответит на этот вопрос довольно быстро. Конечно же, составив частотный список паролей в Топ 100 обязательно найдется название сервиса. Да, как это ни печально, но люди до сих пор в качестве пароля ставят название сервиса. Например, в Топ 100 слитых паролей от Adobe присутствуют следующие экземпляры: «adobe123», «adobe1» и «adobeadobe». Последний, что называется, «психанул», видимо, система регистрации не принимала в качестве пароля просто «adobe». Вот и в нашем случае на 59 месте из Топ 100 паролей я нашел искомый @SERVICENAME@.
ТОП Паролей
Имея такую базу, решил составить свой список самых часто употребляемых паролей для дальнейшего эффективного брута. Понятно, что данный список будет оптимальным при прочих равных условиях — для русскоязычных сервисов электронной почты. Тем не менее, все равно будет полезным. Составил частотный список и встал вопрос, топ сколько паролей будет оптимальным для наиболее эффективного брута? Для ответа на данный вопрос составил гистограмму. Замахнулся на Топ 1000 паролей:
Видим, что после топ 200 паролей количество их использований несущественно.
Гистограмма для топ 200 паролей:
Опять, же после Топ 50 частота использования паролей остается на низком уровне. Гистограмма для Топ 50 паролей:
Далее я сравнил эффективность использования Топ 50 паролей по отношению к Топ 100 паролей. При использовании списка в Топ 50 паролей мы угадаем пароль с вероятностью в 6,98%, а при использовании Топ 100 паролей вероятность будет 8,72%. При увеличении времени брута в 2 раза эффективность возрастет всего на 1,74%. Субъективно, но список из Топ 50 паролей мне показался достаточным.
Года
Далее мне стало интересно, а насколько актуальна эта база? Когда ее начали заполнять и когда слили? Предлагаю свой вариант ответа на данный вопрос. Я предположил, что смогу получить эту информацию из тех же логин-паролей. Я выделил регулярным выражением (19** ИЛИ 20**) пароли и логины и построил гистограмму:
Что можно сказать, взглянув на график? Очевидно, что 1987 год – самый частый год рождения среди пользователей сервиса. Также можно обнаружить корреляцию с демографической статистикой:
Взглянем на период с 1999 по 2020 год:
Из предположения, что в логине пользователи часто указывают дату регистрации, видим, что логинов с датой 2007 — наибольшее количество, с датой 2008 — чуть меньше, а с датой 2009 — намного меньше. Учитывая ежегодный рост публики, можно сделать вывод, что база перестала заполняться (т.е. была слита) в середине 2008 года. Также можно предположить, что база начала заполняться примерно в 1999 году.
Окончания
Известно, что пользователи любят окончания вроде «123» или «1» для «усиления» своих паролей. Решил окончательно убедится в этом.
Гистограмма по Топ 50 окончаний из паролей:
Эмпирически понятно (да и на гистограмме видно), что имеет смысл проверять только окончания «1» и «123», и то при особых условиях. Например, когда с большой долей вероятности можно сказать, что у пользователя пароль с окончанием. Или когда вы неуспешно попробовали, например, Топ 10000 паролей, тогда можно проверить Топ 100 паролей с окончанием «1» и «123». Также при составлении словаря паролей с окончаниями следует учитывать, что окончания чаще всего добавляют к словарным паролям, например «password123», «qwerty1», но редко «19411945123». В последнем случае не всегда даже будет понятно, что это «окончание», а не «корень» пароля.
Чтобы было понятней — 1% человек использует пароли с окончаниями «123» и «1», всего 5% человек использует в своих паролях окончания из списка Топ 50 окончаний. В общем, дополнительно проверить пароль с окончаниями почти всегда не так эффективно, как просто проверить следующий по частоте пароль.
Интересные факты
1. Эффективность частотного словаря. Интересно, что всего 0,00054% паролей (50 штук) могут взломать 6,98% аккаунтов! Сильно, не правда ли?
2. Имена. Очень удивился, что в Топ 100 паролей входили имена marina (60-й), nikita (86-й) и natasha (98-й). Почему именно эти имена?! То-ли Марины, Никиты и Наташи менее других заботятся о своей ИБ, то-ли все любят Марин, Никит и Наташ. В общем, это для меня осталось загадкой.
3. Слабые пароли. В Топ 50 паролей нашлись пароли «1» и «123», видимо, тогда разрешалась любая длина пароля при регистрации. Их, естественно, не стоит добавлять в список для брута современных сервисов, такие пароли сейчас запрещены почти везде.
4. 1941-1945. В гистограмме паролей с датами присутствует 3 пика 1937, 1941, 1945 года.
Для россиян эти даты Великой Победы весьма близки сердцу, поэтому и указывают их в своих паролях. Порадовался за страну и за патриотизм российских пользователей. Молодцы!
5. Что было в 1937 году? Известная дата? И мне нет. Голову сломал выискивая, что же за событие произошло в этом году, да такое важное, что для россиянина стоит наряду с годами Великой Отечественной Войны. Гугл тоже не помог. Что-же произошло? Решил, просто удобная комбинация для набора на NumPad-e, т.к. аналогичный пик найден в 8246, 2846 году и подобных. Но в комментариях Anton-K и bobermaniac напомнили — конечно произошел Большой террор. Солженицын в «Архипелаг ГУЛАГ» об этом весьма подробно написал. Советую прочитать. Террор не ограничивался 1937-1938 годами, однако в этот период носил исключительный характер.
6. Про Марин. По просьбе StopDesign и ilrandir добавляю подробную статистику по аккаунтам с именем «marina»:
25929527 аккаунтов всего
93547 аккаунтов с логином содержащим "marin" в различном Casing-е
Из них (процент от 93547):
1593 (1.7 %) с паролем "marina"
95 (0.1 %) с паролем "Marina"
42 (0.04 %) c паролем "MARINA"
7 (0.007%) с паролем "marina" в Suffle-Casing-е ("mArINA", "MaRiNa", "MARINa")
658 (0.7 %) с паролем формата /marina\d+/ ("marina43")
43 (0.05 %) с паролем формата /Marina\d+/ ("Marina51236")
18 (0.02 %) с паролем формата /MARINA\d+/ ("MARINA8734")
651 (0.7 %) с паролем с содержанием "marina" ("marinaiii", "17marina77", "Hrayr & Marina")
9314 аккаунтов с логином НЕ содержащим "marin", но с паролем "marina"
Заключение
После этого случая для меня стало очевидным, что та информация, которая вытекает в паблик — это лишь малая часть всего интересного. Намного более интересные и глобальные вещи происходят вне поля зрения публики. Возможно, прямо сейчас данные ваших учетных записей сливаются пузатым парнем из Оренбурга, сидящим в трусах за монитором и пятью VPN-ми, а вы об этом заподозрите только когда вам навязчиво предложат изменить пароль на почте. И хорошо, если так.
Бонус
Ну и напоследок выкладываю Топ 100 паролей от русского мейл-сервиса актуальностью, как выяснилось, на 2008-й год ( @SERVICENAME@ — название того самого сервиса):
666666
654321
000000
555555
7777777
123321
123123
12345678
1234567890
777777
123
111111
121212
12345
112233
123456789
159753
987654321
123654
999999
222222
gfhjkm
1234567
qazwsx
qwerty
987654
333333
1234
1111111
asdasd
131313
zxcvbn
789456
159357
1
888888
147258
asdasd123
111
asdfgh
11111111
111222
777
zxcvbnm
qwertyuiop
098765
1111
1q2w3e
0987654321
88888888
7654321
147852
123789
444444
ghbdtn
123qwe
12344321
@SERVICENAME@
marina
010203
qwertyu
5555555
1111111111
666
147258369
123123123
101010
135790
252525
789456123
password
samsung
55555
1q2w3e4r
232323
qqqqqq
555
1986
1985
1984
1234554321
1987
qweasd
666999
nikita
159951
qazwsxedc
1983
456123
87654321
134679
999999999
142536
212121
11111
1982
natasha
11223344
124578
Комментарии (44)
Anton-K
13.05.2015 22:22+6Что было в 1937 году? Известная дата? И мне нет. Голову сломал выискивая, что же за событие произошло в этом году, да такое важное, что для россиянина стоит наряду с годами Великой Отечественной Войны. Гугл тоже не помог. Что-же произошло?
Можно было просто зайти на Википедию и узнать, что такого случилось в СССР в 1937: Большой террор, вполне сравнимо по важности с ВОВ.Nik1t03 Автор
13.05.2015 22:57+3Ах ну да, что ж я, почти каждый знает об этом, такая близкая сердцу дата. В 2017 будем всей страной отмечать.
Nik1t03 Автор
13.05.2015 23:04+6Прошу прощения, некорректно выразился. Конечно дата важная, но не думаю, что это именно та причина по которой мы видим на гистограмме пик.
Regis
14.05.2015 02:06+2Да нет. Среди поколения постарше, кто еще хоть как-то застал СССР — это весьма и весьма известный год.
AlexHa
14.05.2015 06:02+2Что верно, то верно, все уши прожужжали с середины 80-х. В конце 80-х в магазинах обоев было не найти, так мы в общаге антисталинскими плакатами стены оклеили. И на каждом втором — 1937.
milar
14.05.2015 10:41+1На цифровой части клавиатуры любят составлять последовательности, не задумаясь о смысле. В данном случае последовательность в виде Х.
upd.: почему-то ответ на подобный вопрос был в ветках ниже
bobermaniac
13.05.2015 22:55+5Nik1t03 Автор
14.05.2015 07:13+1Стыдно, конечно… Вроде и Архипелаг ГУЛАГ читал, но никак не связал дату. Сейчас о тех событиях не часто вспоминают, хотя погибло с миллион человек. А сгноили сколько в лагерях. Бабушка моя тоже пострадала, после тюрем с ума сошла последние 20 лет в дурдоме провела. Видимо, действительно на мое поколение не оказывали информационного давления по этому поводу, вот и не отложилось. Значит не Numpad…
Diadlo
14.05.2015 10:59+1Я думаю, что все таки это NumPad т.к. лично знаю людей с паролями 1937, 193728 и подобными. Но не отрицаю, что были и те, кто руководствовался историческими причтнами
lexore
14.05.2015 00:32+5Интересно, много ли в рунете почтовых сервисов с 25 929 527 юзерами?
Я бы порекомендовал автору все-таки уведомить @SERVICENAME@.
Я понимаю, что guard@servicename@ — нехорошо.
Но обычные пользователи тут ни при чем.Nik1t03 Автор
14.05.2015 06:48+3Уважающие пользователей e-mail провайдеры не хранят пароли в открытом виде и уже связались со мной и готовы получить всю необходимую информацию. Что же касается именно этого @SERVICENAME@ я им сообщил, думаю они в курсе какие пользователи не меняли пароль с 2009 года и заблокируют учетки. Кстати при попытке входа по рабочим кредам пользователям ненавязчиво напоминают о смене пароля. Даже смешно, предложить пользователю сменить его 10-летний пароль «1» с возможностью любезно отказаться.
Anisotropic
14.05.2015 11:50+2У меня там 15-летний пароль стоит. И что-то не предлагают сменить.
Nik1t03 Автор
14.05.2015 12:27Если мы говорим об одном и том же сервисе, то значит они знали об утечке и все что сделали это предложили пользователю сменить пароль.
valievkarim
14.05.2015 16:25+3Речь идет не о Почте Mail.Ru. Мы уже связались с автором и проверяем эту базу на предмет наличия валидных паролей наших пользователей
megaweber
14.05.2015 00:44Интересно, почти все пароли состоят из цифр, а на западе такая же любовь к цифрам или нет?
Nik1t03 Автор
14.05.2015 06:24+1Приведу сравнительную табличку Top20:
Заголовок спойлераAdobe | rockyou | SERVICENAME ----------------------------------- 123456 | 123456 | 123456 123456789 | 12345 | 666666 password | 123456789 | 654321 adobe123 | password | 000000 12345678 | iloveyou | 555555 qwerty | princess | 7777777 1234567 | 1234567 | 123321 111111 | rockyou | 123123 photoshop | 12345678 | 12345678 123123 | abc123 | 1234567890 1234567890 | nicole | 777777 000000 | daniel | 123 abc123 | babygirl | 111111 1234 | monkey | 121212 adobe1 | lovely | 12345 macromedia | jessica | 112233 azerty | 654321 | 123456789 iloveyou | michael | 159753 aaaaaa | ashley | 987654321 654321 | qwerty | 123654
Haoose
14.05.2015 02:54+4Что было в 1937 году?… Аналогичный пик найден в 8246, 2846 году и подобных.
Да просто эти цифры расположены по углам NumPad'а. Легко запомнить и быстро набрать.Nik1t03 Автор
14.05.2015 04:21+2Читаю Ваш пост и думаю: «Неужели забыл добавить эту инфу?!» Да нет предложением ранее все есть…
bakhirev
14.05.2015 08:56Интересно ещё узнать TOP фраз в логине, по принципу:
marina_1 marina_2 marina_3 nikita ---- marina - 75% nikita - 25%
Nik1t03 Автор
14.05.2015 09:25Выберем всех Наташ, Марин и Никит:
grep 'marina' logins.txt > marina.txt grep 'natasha' logins.txt > natasha.txt grep 'nikita' logins.txt > nikita.txt
Подсчитаем количество строк:
wc -l marina.txt 74501 marina.txt wc -l natasha.txt 45156 natasha.txt wc -l nikita.txt 23300 nikita.txt
Итого:
marina - 52.1$ natasha - 31.6% nikita - 16.3%
bakhirev
14.05.2015 10:03Не совсем то. Итого тут получится:
52.1 + 31.6 + 16.3 = 100%
а я имел ввиду вообще все логины. Понятно что фразы: «marina», «natasha», «nikita» будут в TOP50, но интересно, какие ещё фразы в логине популярны у пользователей.Nik1t03 Автор
14.05.2015 10:17+1Понял, Вы наверное имеете в виду процент Наташ относительно всего числа пользователей?
Nik1t03 Автор
14.05.2015 10:19По какому словарю предлагаете выбирать популярные фразы в 25млн строк?
bakhirev
14.05.2015 10:38Понял, Вы наверное имеете в виду процент Наташ относительно всего числа пользователей?
Верно
По какому словарю предлагаете выбирать популярные фразы в 25млн строк?
А вот на этот вопрос ответить не могу, но алгоритм выборки примерно следующий:
nik = { n: 1, ni: 1, nik: 1 ik: 1, k: 1 } tik: = { t: 1, n: 1, ni: 1, nik: 1, tik: 1, ik: 2, k: 2 }
и т.д. Для последнего логина у нас будут лидеры: «подстроки которые содержатся в максимальном количестве логинов»Nik1t03 Автор
14.05.2015 11:01+2То есть если положим на каждый логин в среднем 10 вариантов мы должны будем выполнить grep 250 000 000 раз… «Отличный алгоритм».
ahmpro
14.05.2015 10:05+1для таких целей можно использовать ключик -c у grep
grep -c 'marina' logins.txt grep -c 'natasha' logins.txt grep -c 'nikita' logins.txt
bask
14.05.2015 10:47а если убрать окончание у всех имён?
Чтобы в выборку попадали «nikitka», «nikitos», «nikitozzzz»,…Nik1t03 Автор
14.05.2015 10:52А зачем, мы же искали процентное соотношение, а при равных условиях к трём кандидатам погрешность будет невысока.
Если считать относительного общего количества пользователей там лучше считать без окончания.
ilrandir
14.05.2015 14:23+1А почему нет сравнения связи логина и пароля? По моему очень интересно тоже. Не говоря уже о простом админ/админ, логинов-паролей по типу masha/masha123 мне кажется было бы тоже не мало.
Nik1t03 Автор
14.05.2015 18:46+1Взял за пример «marina»:
25929527 аккаунтов 93547 аккаунтов с логином содержащим "marin" в различном Casing-е Из них (процент от 93547): 1593 (1.7 %) с паролем "marina" 95 (0.1 %) с паролем "Marina" 42 (0.04 %) c паролем "MARINA" 7 (0.007%) с паролем "marina" в Suffle-Casing-е ("mArINA", "MaRiNa", "MARINa") 658 (0.7 %) с паролем формата /marina\d+/ ("marina43") 43 (0.05 %) с паролем формата /Marina\d+/ ("Marina51236") 18 (0.02 %) с паролем формата /MARINA\d+/ ("MARINA8734") 651 (0.7 %) с паролем с содержанием "marina" ("marinaiii", "17marina77", "Hrayr & Marina") 9314 аккаунтов с логином НЕ содержащим "marin", но с паролем "marina"
ilrandir
14.05.2015 19:32Спасибо, интересно. В данном конкретном случае получается около 3%. Для полного представления было бы еще интереснее узнать какую-то более полную статистику, хотя бы топ 50 логинов-паролей которые содержат друг друга. В наиболее универсальном формате, типа
/(\w+)\d* \1/i
(если логины-пароли пробелами разделены), а не просто про Марину. Чтобы, например, попала пара «marina1 Marina999».ilrandir
14.05.2015 19:48+1И вставить это в общий топ 100 паролей, если получится. Типа
1. 123456
2. 666666
3. 654321
…
a. @@login@
…
n. /@@login@/i
…
m. /@@login@/i@50наиболее_частых_окончаний@
…
x. что-то еще с логиномilrandir
14.05.2015 20:00Сорри, намутил там со знаками @, а исправить пока не могу, но, думаю, смысл понятен.
Cynic_spb
Марина (Никита, Наташа) это реально загадка
Интересно было бы узнать сколько процентов учеток Марин взламывается паролем marina
Nik1t03 Автор
10936 из 25 929 527 пользователей использовали пароль marina = 0.042%
StopDesign
А сколько из них — Марины?