Один из вице-президентов Facebook по безопасности доложил, что некоторые пароли Facebook и Instagram могли храниться внутри Facebook в открытом виде, то есть в виде простого текста. Об этом сказано в официальном заявлении (на английском).
Разбираемся, в чём проблема и что делать.
Главное: смените пароль прямо сейчас
Даже если ваш пароль не засветился, сегодня отличный день, чтобы сменить свой пароль: так ваш аккаунт в Facebook будет лучше защищён. Также не забудьте включить двухфакторную авторизацию. Хотя, строго говоря, при желании её тоже можно сломать. Но всё равно смените пароль.
Сменили? Читайте дальше.
Что значит «хранить пароли в виде текста»? Разве они и так не хранятся в виде текста?
Когда говорят «пароли хранились в виде текста», имеют в виду, что пароли хранятся в читаемом для человека формате. Если у меня пароль murlyka3000, то в базе данных будет храниться ровно этот пароль. И тогда, если хакер получит доступ к базе данных, он запросто прочитает мой пароль.
Понимая эту потенциальную уязвимость, сайты пытаются защитить данные. Они применяют шифрование: пароли обычно хранятся не в открытом виде, а в виде шифра, который невозможно расшифровать. Грубо говоря, даже владелец сайта не может посмотреть, какой у вас пароль — только какая у вашего пароля шифровка.
Главное в этой схеме безопасности — хеширование. За подробностями — в кат:
Что такое хеш
Чтобы понять хеши, нужно сначала понять обычное шифрование. Как оно работает: вы берёте строку текста и какой-то известный вам алгоритм и трансформируете эту строку буква за буквой. Например, ваш алгоритм — добавлять после каждой буквы латинскую a:
password → paasasawaoarada
Или ваш алгоритм — заменить все буквы на следующие за ними по алфавиту. A на B, D на E и так далее:
password → qbttxpse
Если один человек придумал алгоритм, другой человек сможет его разгадать. Особенно если знает, что было на входе вашего алгоритма и что получилось на выходе. Поэтому любые традиционные алгоритмы шифрования не годятся для современного хранения паролей.
Хеш работает несколько иначе. Хеш берёт любой произвольный текст на входе и совершает с ним некоторые математические действия, в результате которых получается новая зашифрованная строка. Хитрость в том, что вне зависимости от длины входящего текста строка получается всегда одной и той же длины, а восстановить исходный текст из этой строки невозможно.
Это можно сравнить с отпечатком пальца: по отпечатку невозможно понять, кто перед нами, — мужчина или женщина, бизнесмен или программист, взрослый или ребенок. Но у каждого из них свой уникальный отпечаток пальца и по нему можно этого человека найти, если он есть в базе данных.
Похожая история с хешем: алгоритм устроен так, что невозможно определить, какой текст был зашифрован изначально. Так же, как по отпечатку невозможно понять, это брюнет или блондин. Текст может быть разной длины, а хеш всегда одной длины и на каждый уникальный текст он разный:
password |
→ |
5F4DCC3B5AA765D61D8327DEB882CF99 |
Password |
→ |
DC647EB65E6711E155375218212B3964 |
passwordpassword |
→ |
9DBB300E28BC21C8DAB41B01883918EB |
kod |
→ |
7A9E2FBA2F949C98C0DADBBAD7AE09A1 |
Вот эти длинные строки хеша как раз и хранятся на сайтах вместо наших паролей. Когда вы логинитесь и отправляете сайту свой пароль, он хешируется и сличается с хешем в базе данных.
Получается, хеши — это защита на все случаи жизни?
Не совсем. Дело в том, что, имея доступ к большой базе данных с хешированными паролями, можно довольно шустро взломать существенную их часть. Метод взлома основан на том, что хеширование одной и той же строки даёт всегда один и тот же хеш. То есть, если на двух разных компьютерах захешировать одно и то же слово, вы получите два идентичных хеша.
Это значит, что если иметь достаточно большой набор заранее прохешированных строк, можно попробовать подобрать пароли, которые будут этим хешам соответствовать. Метод не стопроцентный, но если пароли простые — действенный.
Например, некий хакер выкрал базу данных из десяти миллионов захешированных паролей, связанных с логинами. В основном эти пароли создавали люди от 40 до 60 лет. У хакера есть гипотеза, что среди этих паролей будет довольно много паролей вроде qwerty, 12345, parol и дат рождения, например, 01121967.
Хакер знает, что он не может восстановить пароль, зная хеш. Но ещё он знает, что каждый уникальный пароль будет иметь свой постоянный хеш. И если два разных пользователя использовали один и тот же пароль, у них будут одинаковые хеши.
Хакер смотрит в базу данных и видит примерно миллион одинаковых хешей:
D8578EDF8458CE06FBC5BB76A58C5CA4
По хешу он не может сказать, что это за пароль. Но он может захешировать какие-нибудь распространённые пароли, которые могут использовать люди на этом сайте:
passwordv |
5F4DCC3B5AA765D61D8327DEB882CF99 |
не совпало |
qwerty123 |
3FC0A7ACF087F549AC2B266BAF94B8B1 |
не совпало |
qwerty |
D8578EDF8458CE06FBC5BB76A58C5CA4 |
совпало! |
То есть хакер предположил, что люди используют пароль qwerty
, он этот пароль захешировал, сличил с хешем в базе данных, и всё совпало!
Можно пойти дальше и составить словарь всех популярных паролей в России. Получится что-то такое:
parol |
EE95A16D763AB0D26EE62C53056DF928 |
parol123 |
E9ABA73DE1A9715FD100FE111585CEBC |
qwerty |
D8578EDF8458CE06FBC5BB76A58C5CA4 |
barsik |
BA2228A00D21E19C23E4F210A5B8A300 |
murzik |
A06E6AEFE1429F1DB6AAB26C573143C8 |
qwerty123 |
3FC0A7ACF087F549AC2B266BAF94B8B1 |
qwertyqwerty |
12478E7AD0E39AA9C35BE4B9A694BA9B |
12345 |
827CCB0EEA8A706C4C34A16891F84E7B |
123456 |
E10ADC3949BA59ABBE56E057F20F883E |
1234567 |
FCEA920F7412B5DA7BE0CF42B8C93759 |
123456789 |
25F9E794323B453885F5181F1B624D0B |
Теперь добавим в этот словарь все даты рождения с 1 января 1948 года до 31 декабря 1978 года:
01011948 |
2202954E3ED7E98E4B4843DF26B2B7DB |
02011948 |
87FECC21989F151A553AA8F1F6236697 |
... |
|
31121978 |
CAFA45E47EA64F36B88030019A00F414 |
Допустим, всего в нашем словаре наберётся 10 тысяч паролей. Такие таблицы уже даже не нужно составлять вручную — можно написать программу, которая эту таблицу составит, а то и скачать готовую таблицу на хакерских форумах.
Угадайте, у какого числа людей в России пароль — это дата рождения?
Да, хакер вряд ли сможет подобрать пароль к какому-то конкретному аккаунту. Но владея большим словарём готовых паролей, он без труда взломает сотни тысяч аккаунтов.
Поэтому хеш в чистом виде — ещё не полная защита от всего. У разработчиков есть много приёмов для защиты хешей, но это тема более глубокого разговора.
Facebook хранил все пароли без хешей?
Нет. Facebook как раз хранит все пароли как надо. Но помимо хранения есть ещё много других функций: например, журнал событий, журнал восстановления пароля, журнал входов и выходов. Допустим, человек залогинился, но в процессе произошла ошибка, которую нужно записать. В таком случае Facebook мог записать пароль в открытом виде куда-то в свои логи.
В этом и проблема: во время внутреннего аудита Facebook выяснил, что в некоторых случаях часть паролей могли попасть в логи и системные базы данных без хеширования, то есть в открытом виде. Если бы кто-то из сотрудников имел доступ к этим файлам, то мог бы просто скопировать-вставить этот пароль, и не было бы нужно никакого перебора.
То есть кто-то внутри компании Facebook мог увидеть мой пароль?
В пресс-релизе Facebook ясно сказано, что это исключено. Но чисто технически — да, кто-то мог.
Безобразие! Как же защищаться в этом мире?
Довольно легко:
- Используйте сложные пароли.
- Используйте разные почтовые аккаунты для входа на разные сервисы.
- Не используйте один и тот же пароль на разных сервисах.
- Используйте лучше менеджеры паролей.
А почему нельзя использовать один и тот же пароль на разных сервисах? Он же всё равно захеширован!
А представьте, что какой-нибудь нерадивый программист на форуме с бесплатными фильмами хранит ваш пароль в незашифрованном виде. Хакер получает доступ к базе данных незашифрованных паролей, а потом перебирает все остальные сервисы, пытаясь найти те, где ваш пароль подойдёт.
Это выглядит сложно, потому что людей миллионы и сервисов тоже миллионы. Но представьте, что хакер написал программу, которая обходит эти миллионы за считанные минуты.
Ой, да кому я нужен! Я ж не миллионер, чтобы у меня воровать миллионы, да и кому нужна моя почта...
Дело вот в чём. Хакеры, которые работают с паролями, очень редко хотят взломать конкретно вас. Они перебирают имеющиеся у них данные, чтобы найти какие-нибудь совпадающие пароли и логины, и смотрят, что можно из этого получить.
Например, как можно случайно попасть под горячую хакерскую руку:
- Вы зарегистрировались на игровом сайте, используя почту как логин и пароль от почты.
- Сайт случайно записал ваш пароль в открытом виде.
- Данные утекли с сайта из-за хакерской атаки. Хакеры получили миллион паролей.
- Хакеры включили программу перебора, которая пытается зайти в почты людей по тем паролям, которые указаны на игровом сайте.
- Хакеры составляют список людей, у которых подошли пароли к почте.
- Хакеры проверяют соцсети: вдруг те же пароли используются там. Составляют новый список.
- Наконец, хакеры проверяют интернет-банки. Если где-то пароль не подходит, они отправляют код для сброса пароля на почту. А к почте у них доступ есть.
Хакеры даже не узнают, что это именно вы и именно ваша почта. Они просто перебирают эти аккаунты тысячами в поисках хоть чего-то.
Отсюда правило:
- Сложные пароли.
- Разные почты.
- Разные пароли в разных аккаунтах.
- Менеджеры паролей.