Независимый исследователь из Калифорнии, Гуркират Синх (Gurkirat Singh), в своем блоге дал ответ на животрепещущий для многих вопрос: как взломать аккаунт Facebook? Синх описал метод, который позволял ломать аккаунты массово, вне зависимости от сложности и длины пароля, а также двухфакторной аутентификации.
Синх нашел проблему в механизме, при помощи которого социальная сеть обнуляет забытые пароли пользователей. Как только кто-то запрашивает смену пароля, Facebook осуществляет эту операцию через генерацию случайного шестизначного кода, то есть комбинаций для таких кодов может быть всего 10⁶ = 1 000 000.
Исследователь обнаружил, что если запросить смену пароля через mbasic.facebook.com, шестизначный код сменится и придет в негодность лишь после его использования, то есть, фактически у него нет «срока годности». Синх понял, что если миллион человек запросит смену пароля примерно одновременно, то код, который социальная сеть создаст для миллион первого, будет дублировать чей-то еще.
Для проверки своей теории исследователь собрал базу Facebook ID, забрасывая запросами API Facebook Graph API. Синх методично перебирал ID, начиная с 100 000 000 000 000. Дело в том, что ID — это уникальный идентификатор, обычно состоящий из 15 символов. С ID разрешено работать только авторизованным приложениям, но если попытаться воспользоваться адресом www.facebook.com/[ID], произойдет редирект, ID будет автоматически заменен на имя пользователя. Что подтвердит верность ID. Также исследователь смог присовокупить к своей базе фотографии профилей и полные имена пользователей, так как социальная сеть никак не ограничивала распространение этой свободной информации. Суммарно Синх собрал информацию о двух миллионах учетных записей.
«Я сообщил им о проблеме еще 3 мая 2016 года, но в Facebook не поверили, что такая масштабная операция возможна. Они хотели доказательств. В итоге я провел почти месяц изучая вопрос и подготавливая инфраструктуру для атаки на 2 млн пользователей Facebook. Когда я добавил информацию о баге снова, они огласились, что это определенно проблема».
Имея на руках базу, состоящую из двух миллионов пользователей, Синх написал скрипт, который использовал сотни прокси и рендомных user-agent. Скрипт запрашивал сброс паролей для всех двух миллионов пользователей, быстро исчерпывая пул «одноразовых» шестизначных кодов. Затем исследователь выбрал случайное число (к примеру, 33825) и начал процедуру смены пароля, брутфорсом перебирая весь имеющийся двухмиллионный список. Надежды Синха полностью оправдались, так как в итоге в списке действительно удалось обнаружить пользователей, которым шестизначный код подходил, то есть алгоритм Facebook действительно начал повторяться, как и предполагалось.
Хотя компания уже выпустила патч, призванный устранить обнаруженную Синхом проблему, исследователь не уверен, что проблема полностью решена.
«Я знаю, что Facebook выпустила патч, и они теперь агрессивно фильтруют IP-адреса. Но я по-прежнему сомневаюсь, что их патч достаточно эффективен против этой уязвимости, так как можно использовать больший пул IP-адресов, симулировать глобальный трафик и применить социальную инженерию», — говорит исследователь.