Есть темы, по которым очень мало статей по специальности data science, но которые представляют интерес для специалистов по безопасности. Это статистические исследования логинов и паролей пользователей – данные, добытые «черными археологами» дата майнинга.
Мне было интересно посмотреть некоторые закономерности и для этой цели я взял базу данных паролей, утёкших в 2014 году – от Яндекса, Гугла и Мейлру, объемом 6 миллионов записей.
Добытые данные представляли собой три текстовых файла, в которых в стандартной форме login@domain.ru:passwd содержались логины и пароли от различных почтовых служб. Общее число записей около 6 миллионов.
Обработка такого огромного массива данных представляла нетривиальную задачу: к примеру, любой символ, который я думал сделать разделителем в текстовом файле, встречался среди логинов или паролей. Да, там встречались все виды кавычек, спецсимволы, не имеющиеся на клавиатуре (например такой: §), и даже символы табуляции.
Вообще, так как и в логинах и в паролях встречаются знаки @ и «:», точный парсинг файлов для разделения на поля «логин», «домен» и «пароль» мне придумать не удалось. К примеру, как автоматически распарсить строки такого типа:
user@mail.ru@gmail.com:123123 (здесь первый @ относится к логину, второй к домену)
user:123@mail.ru:@123123 (а здесь первый @ относится к домену, второй к паролю)
Данные были сгруппированы по доменам. Всего у меня оказалось 7423 домена. Более миллиона раз встречаются gmail.com, mail.ru, yandex.ru
Из интересного: домен gmail.com777 встречается 295 раз. Много раз встречаются домены gmail.com и несколько семёрок. Причина этого остается для меня загадкой. Почему именно цифра 7 – непонятно.
Далее все домены были сгруппированы в четыре группы: GMAIL MAILRU YANDEX OTHER. В одну группу попали домены, которые принадлежат или принадлежали раньше этой почтовой службе (к примеру, в мейлру попали домены mail.ru, bk.ru, list.ru, inbox.ru и др.) При этом распределение записей стало следующим:
domain count
GMAIL 2308234
MAILRU 1978822
YANDEX 1640733
OTHER 158896
После этого я решил, что данные готовы к анализу.
Проверим гипотезу, что большинство утекших в сеть аккаунтов было создано ботами.
Первый критерий, который я придумал – это случайная последовательность символов в логине. Для проверки я взял случайную выборку из 6000 логинов, и просто просмотрел её глазами. По скорости работы – это наиболее оптимальный вариант, написание любого скрипта заняло бы больше времени. Критерий не подтверждается – случайных логинов крайне мало. На выборку из 6000 логинов случайно сгенерированных не более двадцати.
Следующий критерий – распределение длин паролей. Посмотрим на рапределение длины логина – это равномерное распределение, чего не скажешь про пароли.
Явно видны выбивающиеся значения в районе длины 6, 8, и 10 символов. Вероятно, это и есть те самые сгенерированные автоматически пароли, которые могут принадлежать ботам.
Теперь подсчитаем количество таких «выбивающихся» из равномерного распределения величин. Для этого я вычислил ожидаемые значения столбцов 6, 8, 10, просто построив сглаженную кривую – а затем найшел разницу с реальными величинами.
Итог: примерно 2 миллиона (то есть, третья часть) паролей сгенерирована искусственно.
Теперь то, ради чего вообще затевалось это исследование: я хотел проверить, насколько часто люди ставят один и тот же пароль для различных почтовых сервисов – и насколько это безопасно.
Разбиваем данные на четыре подгруппы по доменам, и ищем пересечения: по логину, и по паре логин-пароль. Результаты:
Мы видим, что пересечений между gmail и русскоязычными доменами намного меньше, чем между мейл.ру и яндексом. Также видно, что если для gmail более 90 процентов людей придумывают новый пароль, то для пары яндекс-мейлру наоборот – 80% паролей совпадают!
А теперь посмотрим, что это за совпадающие пароли, насколько они безопасны. Для этого сначала построим топ паролей. Из 6 млн. паролей 3.2 млн. уникальны, остальные хоть раз дублируются. Выберем величину топа: сколько у человека может быть почтовых ящиков? Вряд ли больше 40. Тогда возьмём топ-5000 паролей, нижняя частота как раз 40. Это значит, если ваш пароль попал в топ-5000, то он встречается в слитых данных более 40 раз – и скорее всего, используется ещё кем-то другим. Теперь посмотрим, сколько паролей из пересечений попадают в такой топ.
Для пересечений mailru – yandex (всего 33313 пересечения):
топ-5000: 2485 пароля ( 7.4% )
топ-100: 575 паролей ( 1.7% )
Из интересного: На первом месте из этой выборки пароль 123456. А на втором месте, что странно, пароль natasha. Вообще, женские имена в топе встречаются достаточно часто.
Для пересечений gmail – mailru (всего 121 пересечение)
топ-5000: 12 паролей
топ-100: 7 паролей
Вывод: хотя для одинаковых логинов 80 процентов паролей совпадают, из этих паролей 93 процента являются вполне безопасными.
И на закуску – те пароли из пересечений gmail-mailru, которые входят в топ-5000:
В следующем посте о черной археологии дата майнинга: проверка совпадений логина и пароля (полного и частичного), а также другие исследования правды и мифов про пароли.
Мне было интересно посмотреть некоторые закономерности и для этой цели я взял базу данных паролей, утёкших в 2014 году – от Яндекса, Гугла и Мейлру, объемом 6 миллионов записей.
Обработка данных
Добытые данные представляли собой три текстовых файла, в которых в стандартной форме login@domain.ru:passwd содержались логины и пароли от различных почтовых служб. Общее число записей около 6 миллионов.
Обработка такого огромного массива данных представляла нетривиальную задачу: к примеру, любой символ, который я думал сделать разделителем в текстовом файле, встречался среди логинов или паролей. Да, там встречались все виды кавычек, спецсимволы, не имеющиеся на клавиатуре (например такой: §), и даже символы табуляции.
Вообще, так как и в логинах и в паролях встречаются знаки @ и «:», точный парсинг файлов для разделения на поля «логин», «домен» и «пароль» мне придумать не удалось. К примеру, как автоматически распарсить строки такого типа:
user@mail.ru@gmail.com:123123 (здесь первый @ относится к логину, второй к домену)
user:123@mail.ru:@123123 (а здесь первый @ относится к домену, второй к паролю)
Данные были сгруппированы по доменам. Всего у меня оказалось 7423 домена. Более миллиона раз встречаются gmail.com, mail.ru, yandex.ru
Из интересного: домен gmail.com777 встречается 295 раз. Много раз встречаются домены gmail.com и несколько семёрок. Причина этого остается для меня загадкой. Почему именно цифра 7 – непонятно.
Далее все домены были сгруппированы в четыре группы: GMAIL MAILRU YANDEX OTHER. В одну группу попали домены, которые принадлежат или принадлежали раньше этой почтовой службе (к примеру, в мейлру попали домены mail.ru, bk.ru, list.ru, inbox.ru и др.) При этом распределение записей стало следующим:
domain count
GMAIL 2308234
MAILRU 1978822
YANDEX 1640733
OTHER 158896
После этого я решил, что данные готовы к анализу.
Анализ данных: гипотеза о ботах
Проверим гипотезу, что большинство утекших в сеть аккаунтов было создано ботами.
Первый критерий, который я придумал – это случайная последовательность символов в логине. Для проверки я взял случайную выборку из 6000 логинов, и просто просмотрел её глазами. По скорости работы – это наиболее оптимальный вариант, написание любого скрипта заняло бы больше времени. Критерий не подтверждается – случайных логинов крайне мало. На выборку из 6000 логинов случайно сгенерированных не более двадцати.
Следующий критерий – распределение длин паролей. Посмотрим на рапределение длины логина – это равномерное распределение, чего не скажешь про пароли.
Явно видны выбивающиеся значения в районе длины 6, 8, и 10 символов. Вероятно, это и есть те самые сгенерированные автоматически пароли, которые могут принадлежать ботам.
Теперь подсчитаем количество таких «выбивающихся» из равномерного распределения величин. Для этого я вычислил ожидаемые значения столбцов 6, 8, 10, просто построив сглаженную кривую – а затем найшел разницу с реальными величинами.
Результат
Длина 6: 1010907
Длина 8: 763313
Длина 10: 246115
Всего: 2020335
Длина 8: 763313
Длина 10: 246115
Всего: 2020335
Итог: примерно 2 миллиона (то есть, третья часть) паролей сгенерирована искусственно.
Проверка совпадений пары логин-пароль для различных доменов
Теперь то, ради чего вообще затевалось это исследование: я хотел проверить, насколько часто люди ставят один и тот же пароль для различных почтовых сервисов – и насколько это безопасно.
Разбиваем данные на четыре подгруппы по доменам, и ищем пересечения: по логину, и по паре логин-пароль. Результаты:
Пары доменов | Совпадающие логины | Совпадающие пары логин-пароль |
GMAIL — MAILRU | 2362 | 121 |
GMAIL — YANDEX | 2421 | 215 |
MAILRU — YANDEX | 42005 | 33313 |
GMAIL — OTHER | 924 | 63 |
YANDEX — OTHER | 7075 | 6732 |
MAILRU — OTHER | 4085 | 3339 |
Мы видим, что пересечений между gmail и русскоязычными доменами намного меньше, чем между мейл.ру и яндексом. Также видно, что если для gmail более 90 процентов людей придумывают новый пароль, то для пары яндекс-мейлру наоборот – 80% паролей совпадают!
Проверка безопасности пересекающихся паролей
А теперь посмотрим, что это за совпадающие пароли, насколько они безопасны. Для этого сначала построим топ паролей. Из 6 млн. паролей 3.2 млн. уникальны, остальные хоть раз дублируются. Выберем величину топа: сколько у человека может быть почтовых ящиков? Вряд ли больше 40. Тогда возьмём топ-5000 паролей, нижняя частота как раз 40. Это значит, если ваш пароль попал в топ-5000, то он встречается в слитых данных более 40 раз – и скорее всего, используется ещё кем-то другим. Теперь посмотрим, сколько паролей из пересечений попадают в такой топ.
Для пересечений mailru – yandex (всего 33313 пересечения):
топ-5000: 2485 пароля ( 7.4% )
топ-100: 575 паролей ( 1.7% )
Из интересного: На первом месте из этой выборки пароль 123456. А на втором месте, что странно, пароль natasha. Вообще, женские имена в топе встречаются достаточно часто.
Для пересечений gmail – mailru (всего 121 пересечение)
топ-5000: 12 паролей
топ-100: 7 паролей
Вывод: хотя для одинаковых логинов 80 процентов паролей совпадают, из этих паролей 93 процента являются вполне безопасными.
И на закуску – те пароли из пересечений gmail-mailru, которые входят в топ-5000:
пароли
123456
262626
12345
lopata
prodigy
qwerty
qwe123
udacha
1234
svetlana
1q2w3e4r
azsxdcfv
262626
12345
lopata
prodigy
qwerty
qwe123
udacha
1234
svetlana
1q2w3e4r
azsxdcfv
В следующем посте о черной археологии дата майнинга: проверка совпадений логина и пароля (полного и частичного), а также другие исследования правды и мифов про пароли.