Уязвимости WhatsApp, которые позволяют изменять чужие сообщения
WhatsApp — один из самых популярных мессенджеров, но при этом он полон уязвимостей. Рассказываем, как мошенники могут выдать себя за любого человека в чате.
33К открытий34К показов
Более 1,5 миллиардов человек в более чем 180 странах используют WhatsApp, приложение для обмена сообщениями, принадлежащее Facebook. Средний пользователь проверяет WhatsApp более 23 раз в день. А число пользователей приложения в США по прогнозам возрастёт до 25,6 миллионов к 2021 году.
Учитывая, сколько там все болтают, потенциал для онлайн-мошенничества, слухов и фальшивых новостей огромен. У злоумышленников в арсенале есть дополнительное оружие, позволяющее использовать платформу обмена сообщениями для своих злых планов.
В конце 2018 года Check Point Research уведомила WhatsApp о новых уязвимостях в приложении, которые позволят злоумышленникам перехватывать и обрабатывать сообщения, отправленные как в личных, так и в групповых беседах, давая возможность создавать и распространять дезинформацию от казалось бы доверенных источников.
Исследовательская группа Check Point Research обнаружила три возможных атаки, использующих эту уязвимость, каждая из которых включает в себя тактику социальной инженерии, чтобы обмануть конечных пользователей. Злоумышленник может:
- Использовать функцию «цитата» в групповом разговоре, чтобы изменить личность отправителя, даже если этот человек не является членом группы.
- Изменить текст чьего-либо ответа, по сути, говоря за другого человека.
- Отправить личное сообщение, замаскированное под сообщение для всех участников чата, конкретному участнику группы, поэтому, когда эта «жертва» отвечает, её ответ становится видимым для всех в беседе.
WhatsApp исправил 3-ю уязвимость. Но группа Check Point Research обнаружила, что всё ещё возможно манипулировать цитируемыми сообщениями и распространять дезинформацию от, казалось бы, надёжных источников.
Следуя правилам Ответственного раскрытия информации, Check Point Research проинформировала WhatsApp о своих выводах. С точки зрения Check Point Research эти уязвимости имеют огромное значение и требуют внимания.
Чтобы продемонстрировать серьёзность этой уязвимости в WhatsApp, был создан инструмент, который позволяет расшифровывать связь WhatsApp и подделывать сообщения.
Как известно, мессенджер шифрует каждое отправляемое вами сообщение, изображение, вызов, видео или любой другой тип контента, чтобы его мог видеть только получатель. WhatsApp не имеет возможности просматривать эти сообщения.
Эти процессы шифрования привлекли внимание, и Check Point Research решили попробовать изменить алгоритм WhatsApp для расшифровки данных. Действительно, после расшифровки связи WhatsApp было обнаружено, что WhatsApp использует для этого «протокол protobuf2».
Преобразовав данные protobuf2 в Json, Check Point Research смогли увидеть фактические отправленные параметры и манипулировать ими, чтобы проверить безопасность WhatsApp.
Результатом исследования группы Check Point Research является расширение Burp Suite и три метода атаки (третья уязвимость была исправлена, поэтому в статье будет описано две атаки).
Однако, чтобы начать атаку, сначала нужно получить закрытый и открытый ключ сеанса и заполнить соответствующие поля в расширении burpsuit.
Получение ключей
Ключи можно получить на этапе генерации ключей в WhatsApp Web до создания QR-кода:
После того, как были взяты эти ключи, нужно выбрать «секретный» параметр, который отправляется мобильным телефоном в WhatsApp Web, пока пользователь сканирует QR-код:
В результате чего расширение будет выглядеть так:
После нажатия «Connect» расширение подключается к локальному серверу расширения, который выполняет все необходимые задачи.
Манипулирование WhatsApp
Расшифровав связь WhatsApp, Check Point Research смогли увидеть все параметры, которые фактически передаются между мобильной версией WhatsApp и веб-версией. Это позволило манипулировать ими и начать искать проблемы безопасности.
Это привело к тому, что было осуществлено множество типов атак, описанных ниже.
Атака 1. Изменение личности отправителя в групповом чате, даже если он не является членом группы
В этой атаке возможно подделать ответное сообщение, чтобы выдать себя за другого члена группы и даже несуществующего члена группы, например, «Mickey Mouse».
Чтобы выдать себя за кого-то из группы, злоумышленнику нужно только перехватить зашифрованный трафик:
После захвата трафика он может просто отправить его на расширение, которое затем расшифрует трафик:
Ключевые параметры:
- conversation — контент, который отправляется;
- participant — участник, который послал контент;
- fromMe — этот параметр указывает, отправил ли я данные или кто-то другой в группе;
- remoteJid — этот параметр указывает, в какую группу или контакт отправляются данные;
- id — идентификатор данных. Тот же идентификатор появится в телефонных базах данных.
И в этот момент начинают происходить интересные вещи…
Например, появляется возможность изменить сообщение на что-то другое. Например, сообщение с содержанием «Great!», отправленное членом группы, можно изменить на что-то ещё, например: «I’m going to die, in a hospital right now!», — а параметр участника также можно изменить на кто-то ещё из группы:
Обратите внимание, что идентификатор нужно изменить на что-то другое, потому что он появился в базе данных, так как сообщение было отправлено.
Чтобы все увидели новое поддельное сообщение, злоумышленнику необходимо ответить на сообщение, которое он подделал, процитировав и изменив это сообщение («Great»), чтобы оно было отправлено всем в группе.
Как вы можете видеть на скриншоте ниже, была создана новая группа, где ещё никто не писал сообщений, и с помощью способа, описанного выше, был создан фальшивый ответ.
Параметр participant может быть текстом или номером телефона человека, которого нет в группе, что заставит всех в группе поверить, что оно действительно отправлено этим участником.
Например:
Результат будет следующим:
Это снова будет отправлено всем в группе, как и раньше.
Атака 2. Изменение текста чьего-либо ответа
В этой атаке злоумышленник может манипулировать чатом, отправляя сообщения самому себе от имени другого человека, как если бы оно пришло от него. Таким образом, можно было бы обвинить человека или заключить мошенническую сделку.
Чтобы подделать сообщение, нужно изменить в нём параметр «fromMe», который указывает, кто отправил сообщение в личном чате.
На этот раз исходящее сообщение было получено из WhatsApp Web ещё до того, как было отправлено в Burp Suite. Для этого нужно поставить точку останова на функцию aesCbcEncrypt и получить данные из параметра «a»:
Затем эти данные были скопированы в Burp Suite и выбрано исходящее направление. При нажатии на «Расшифровать», расширение расшифрует данные:
После изменения его на false и обратного шифрования был получен следующий результат:
Затем нужно изменить параметр «а» в браузере, и результатом будет push-уведомление с содержимым. Таким образом, можно подменить даже весь чат.
И тогда диалог будет выглядеть следующим образом:
Вывод
Ещё одна ситуация, которая демонстрирует, что стоит внимательнее относиться к казалось бы даже самым проверенным источникам информации в интернете. Ведь WhatsApp так и не поправили последние две уязвимости, которые достаточно просты в реализации.
33К открытий34К показов