Найти тему
Журнал «Код»

Facebook хранил наши пароли в виде текста. Что это значит?

Оглавление

Тут такое!

Один из вице-президентов Facebook по безопасности доложил, что некоторые пароли Facebook и Instagram могли храниться внутри Facebook в открытом виде, то есть в виде простого текста. Об этом сказано в официальном заявлении (на английском).

Разбираемся, в чём проблема и что делать.

Главное: смените пароль прямо сейчас

Даже если ваш пароль не засветился, сегодня отличный день, чтобы сменить свой пароль: так ваш аккаунт в Facebook будет лучше защищён. Также не забудьте включить двухфакторную авторизацию. Хотя, строго говоря, при желании её тоже можно сломать. Но всё равно смените пароль.

Сменили? Читайте дальше.

Что значит «хранить пароли в виде текста»? Разве они и так не хранятся в виде текста?

Да, пароли хранятся в виде текста, но не простого. Объясняем.

Если вы входите на какой-либо сайт по паролю, сайт должен этот пароль помнить и хранить. Так как все сайты и их данные хранятся на серверах, а сервера — по сути компьютеры, принципиально нет ничего невозможного в том, чтобы получить к ним доступ. Чисто теоретически, имея нужные права и зная пароль администратора, можно залезть на любой сайт и забрать с него любую информацию.

Понимая свои потенциальные уязвимости, сайты пытаются как-то защитить свои данные. И в случае с паролями применяют шифрование. Как это по идее должно работать:

  • Вы хотите зарегистрироваться на сайте. Вы вводите пароль.
  • Сайт получает пароль и зашифровывает его особым способом — хешем. Получается строка зашифрованного текста.
  • Сайт записывает в базу данных зашифрованный пароль (хеш) и не записывает сам пароль. Вообще записывать сам пароль в открытом виде у программистов считается верхом некомпетентности.
  • Когда вы заходите на сайт в следующий раз, вы отправляете ему пароль, он снова его шифрует с помощью хеша. Потом он достаёт уже зашифрованный пароль из базы данных и сверяет: совпали шифровки или нет. Если совпали — он вас пускает. Не совпали — не пускает.

Какой из этого вывод: сайты, по идее, должны хранить только зашифрованные версии вашего пароля, а никак не сами пароли. Зашифрованная версия чисто технически является текстом, но по ней совершенно невозможно выяснить, какой именно у вас пароль. Это обеспечивается алгоритмом хеша.

Так, объясните про хеш. В чём смысл?

Хеш — это ключ к вашей безопасности во всей этой схеме. Это как шифрование, но гораздо сложнее и интереснее. Объясняем.

Как работает обычное шифрование: вы берёте строку текста и какой-то известный вам алгоритм и трансформируете эту строку буква за буквой. Например, ваш алгоритм — добавлять после каждой буквы латинскую a:

password → paasasawaoarada

Или ваш алгоритм — заменить все буквы на следующие за ними по алфавиту. A на B, D на E и так далее:

password → qbttxpse

Если один человек придумал алгоритм, другой человек сможет его разгадать. Особенно если знает, что было на входе вашего алгоритма и что получилось на выходе. Поэтому любые традиционные алгоритмы шифрования не годятся для современного хранения паролей.

Хеш работает несколько иначе. Хеш берёт любой произвольный текст на входе и совершает с ним некоторые математические действия, в результате которых получается новая зашифрованная строка. Хитрость в том, что вне зависимости от длины входящего текста строка получается всегда одной и той же длины, а восстановить исходный текст из этой строки невозможно. Даже зная алгоритм хеширования (а они как раз всем известны) невозможно определить, какой текст был зашифрован изначально. По крайней мере, смотря на сам хеш, это выяснить нельзя.

password → 5F4DCC3B5AA765D61D8327DEB882CF99
Password → DC647EB65E6711E155375218212B3964
passwordpassword → 9DBB300E28BC21C8DAB41B01883918EB
kod → 7A9E2FBA2F949C98C0DADBBAD7AE09A1

Эти длинные строки как раз и хранятся на сайтах вместо наших паролей. Когда вы логинитесь и отправляете сайту свой пароль, последний хешируется и сличается с хешем в базе данных.

Получается, хеши — это защита на все случаи жизни?

Не совсем. Дело в том, что, имея доступ к большой базе данных с хешированными паролями, можно довольно шустро взломать существенную их часть. Метод взлома основан на том, что хеширование одной и той же строки даёт всегда один и тот же хеш. И если иметь достаточно большой набор хешированных строк, можно попробовать подобрать пароли, которые будут этим хешам соответствовать. Короче говоря, метод не стопроцентный, но если пароли простые — действенный.

Как взламывают хешированные пароли

Например, некий хакер выкрал базу данных из десяти миллионов захешированных паролей, связанных с логинами. В основном эти пароли создавали люди от 40 до 60 лет. У хакера есть гипотеза, что среди этих паролей будет довольно много паролей вроде qwerty, 12345, parol и дат рождения, например, 01121967.

Хакер знает, что он не может восстановить пароль, зная хеш. Но ещё он знает, что каждый уникальный пароль будет иметь свой постоянный хеш. И если два разных пользователя использовали один и тот же пароль, у них будут одинаковые хеши. В частности, смотря в базу данных, хакер увидит примерно миллион таких хешей:

D8578EDF8458CE06FBC5BB76A58C5CA4

Он пробует захешировать какие-нибудь распространённые пароли

password 5F4DCC3B5AA765D61D8327DEB882CF99 — не совпало
qwerty123 3FC0A7ACF087F549AC2B266BAF94B8B1 — не совпало
qwerty D8578EDF8458CE06FBC5BB76A58C5CA4 — совпало!

То есть он не может восстановить пароль из хеша, но может придумать любое количество новых паролей, захешировать их и сравнить с хешами из базы данных. И вот он уже знает пароли к миллиону аккаунтов на этом сайте!

Можно пойти дальше и составить словарь всех популярных паролей в России. Получится что-то такое:

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 ясно сказано, что это исключено. Но чисто технически — да, кто-то мог.

Безобразие! Как же защищаться в этом мире?

Довольно легко:

  • Используйте сложные пароли.
  • Используйте разные почтовые аккаунты для входа на разные сервисы.
  • Не используйте один и тот же пароль на разных сервисах.
  • Используйте лучше менеджеры паролей.

А почему нельзя использовать один и тот же пароль на разных сервисах? Он же всё равно захеширован!

А представьте, что какой-нибудь нерадивый программист на форуме с бесплатными фильмами хранит ваш пароль в незашифрованном виде. Хакер получает доступ к базе данных незашифрованных паролей, а потом перебирает все остальные сервисы, пытаясь найти те, где ваш пароль подойдёт.

Это выглядит сложно, потому что людей миллионы и сервисов тоже миллионы. Но представьте, что хакер написал программу, которая обходит эти миллионы за считанные минуты.

Ой, да кому я нужен! Я ж не миллионер, чтобы у меня воровать миллионы, да и кому нужна моя почта…

Дело вот в чём. Хакеры, которые работают с паролями, очень редко хотят взломать конкретно вас. Они перебирают имеющиеся у них данные, чтобы найти какие-нибудь совпадающие пароли и логины, и смотрят, что можно из этого получить.

Например, как можно случайно попасть под горячую хакерскую руку:

  • Вы зарегистрировались на игровом сайте, используя почту как логин и пароль от почты.
  • Сайт случайно записал ваш пароль в открытом виде.
  • Данные утекли с сайта из-за хакерской атаки. Хакеры получили миллион паролей.
  • Хакеры включили программу перебора, которая пытается зайти в почты людей по тем паролям, которые указаны на игровом сайте.
  • Хакеры составляют список людей, у которых подошли пароли к почте.
  • Хакеры проверяют соцсети: вдруг те же пароли используются там. Составляют новый список.
  • Наконец, хакеры проверяют интернет-банки. Если где-то пароль не подходит, они отправляют код для сброса пароля на почту. А к почте у них доступ есть.

Хакеры даже не узнают, что это именно вы и именно ваша почта. Они просто перебирают эти аккаунты тысячами в поисках хоть чего-то.

Отсюда правило:

  • Сложные пароли.
  • Разные почты.
  • Разные пароли в разных аккаунтах.
  • Менеджеры паролей.

Подписывайтесь на наш канал, чтобы никто не украл ваши пароли!