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

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

Тут такое!

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

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

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

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

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

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

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

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

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

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

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

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

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

  1. Сложные пароли.
  2. Разные почты.
  3. Разные пароли в разных аккаунтах.
  4. Менеджеры паролей.
Ещё по теме