WhatsApp, что внутри?

Дочитайте статью и в конце вас ждет приз!

59db8e5f7bf14826135267.jpegВ продолжение направления публикаций исследований нашей компании о внутренних механизмах крупнейших в мире мессенджеров. Сегодня будем смотреть на WhatsApp в его актуальном состоянии. На самом деле внутренности не сильно изменились за последние три года, изменения там скорее косметические. В этой статье мы подробно посмотрим как можно изучать протокол работы мессенджера, ответим на вопрос «может ли WhatsApp читать нашу переписку?» и приложу весь необходимый код на языке PHP.

Общая информация

В качестве формата сообщений WhatsApp использует доработанную версию протокола XMPP. Все сообщения сжимаются посредством замены часто используемых слов на 1 или 2 байтные токены (например вместо «message» — записываем байт 0x5f), таким образом получается то, что названо FunXMPP. Некоторые пакеты могут быть дополнительно сжаты zlib. Полученный пакет шифруется AES GCM 256-бит и передаётся на сервер. Для получения ключей шифрования клиент выполняет хэндшейк noise protocol. Вот здесь хорошо описано. От воплощения в коде все разработчики открытых реализаций почему-то отказались и повесили плашку «end of support», мы это поправим. При первом подключении выполняется полный хэндшейк. После успешного подключения к серверу каждый раз выдаётся новый ключ для следующей сессии, при помощи которого в дальнейшем выполняется подключение без обмена ключами. WhatsApp поддерживает сквозное шифрование с использованием libaxolotl (Signal Protocol), в коде реализованы две версии — сначала они просто сделали шифрование, а потом добавили выравнивание и назвали это v2. Тут есть только одна проблема — т.к. это централизованная система, то и передача ключей идёт через сервера WhatsApp, так что чисто технически нет никаких препятствий для разработчиков мессенджера передать подставные ключи шифрования и полностью читать переписку. Но это не имеет обратной силы, — прочитать сообщения задним числом не получится. Кстати, при получении сообщения от не авторизованного контакта — в мессенджере отображается кнопка «пожаловаться на спам», нажав на неё мы не только заблокируем контакт, но и перешлём по защищенному каналу (уже в открытом виде!), текст сообщения. Без изучения кода приложения целиком нет возможности гарантировать, что этот функционал не используется в каких-либо других случаях. Для проверки аутентичности ключей шифрования в приложении WhatsApp можно зайти в карточку контакта, выбрать пункт «Шифрование», после чего приложение предложит просканировать QR-код на устройстве получателя. Таким образом, кстати, можно сделать кастомное приложение на базе протокола WhatsApp, которое будет постоянно следить за статусом ключей шифрования и выдавать красивые плашки «АНБ следит за вами» или «Вы в безопасности»: учитывая многообразие мессенджеров, — заменить один из них на такое приложение будет даже полезно. Алгоритм работы можно предположить следующий: устройство отображающее QR-код кодирует в него свой публичный ключ, устройство считывающее QR-код сверяет ключ с имеющемся в своей базе данных. Это безопасный способ верификации ключа, но только при отсутствии закладок в приложении. При отправке мультимедиа файлы загружаются на сервера WhatsApp, мы не проводили дополнительные исследования шифруются ли они там. Скорее всего не шифруются, т.к. разработчик приложения себе доверяет, а ссылка на файл передаётся по защищенному сквозным шифрованием каналу.

Регистрация учетной записи

Регистрация проходит в три https-запроса на домен v.whatsapp.net (их можно подсмотреть любым известным способом, например burp или mitmproxy, в приложении используется certificate pinning, который обходится при помощи ssl kill switch).v.whatsapp.net/v2/exists?cc=код_страны&in=телефон&id=id_устройства&lg=en&lc=zz не делает ничего полезного, раньше, скорее всего, служил для проверки не зарегистрирован ли уже этот номер (скорее всего до момента, пока кто-то не стал перебирать их базу)v.whatsapp.net/v2/code?method=sms&cc=код_страны&in=телефон&token=токен&sim_mcc=mcc&sim_mnc=mnc&id=id_устройства&lg=en&lc=zz&параметры_сквозного_шифрования Собственно запрашивает код sms активации. Так же может использоваться аналогичный запрос для получения звонка. Параметры сквозного шифрования не обязательны, — их можно настроить при дальнейшем подключении. Токен получается так:

md5("0a1mLfGUIBVrMKF1RdvLI5lkRBvof6vn0fD2QRSM" . md5("21752") . "телефон")

Первая строка — это зашифрованная строка landscape, что бы это не значило. Версию приложения (21752) можно подставить любую (самые любопытные могут попробовать зарегистрироваться ещё не вышедшей версией), в самом коде приложения хэш от версии зашит готовый, но что-то похожее на md5-хэш довольно быстро подбирается.v.whatsapp.net/v2/register?cc=код_страны&in=телефон&code=код_из_смс&id=id_устройства&lg=en&lc=zz Этот запрос, соответственно, подтверждает регистрацию с кодом полученным по смс или звонку. В запросах используется User-Agent: WhatsApp/2.17.52 iPhone_OS/7.1.2 Device/iPhone_4. Правильный агент скорее всего обязателен, для корректной верификации токена.

MITM

Всё это известно не первый день, — есть несколько реализаций протокола WA16 (Chat-API, Yowsup), от текущего WA20 отличие заключается по-сути только в Noise Protocol. Обладая этой информацией мы можем разработать локальный MITM для просмотра расшифрованного трафика приложения. Т.к. изначально протокол приложения XMPP — то всё что там происходит будет вполне понятно сразу из расшифрованного трафика, поэтому погружаться в дебри дизассемблера особой нужды нет. Для запуска MITM — мы представимся настоящим сервером WhatsApp, выполним полный хэндшейк, после чего наше приложение будет прослушивать трафик перенаправляя его на оригинальный сервер whatsapp и обратно. Для этого нам понадобится изменить оригинальное приложение: Все операции проводятся в следующей конфигурации: iPhone 4, iOS 7.1.2, IDA 7, WhatsApp 2.17.52.

Патчим приложение

1. Мы будем выполнять полный хэндшейк при каждом подключении, это существенно упростит нам жизнь. В методе -[NoiseHandshakeManager initWithLoginPayload:clientStaticKeyPair:serverStaticPublicKey:] при наличии serverStaticPublicKey выполняется ResumeHandshake, а при отсутствии FullHandshake.

В регистре R0 как раз хранится serverStaticPublicKey и при его отсутствии выполняется переход к FullHandshake. А мы сделаем этот переход безусловным. Для этого заменим два байта 59d7922fe7d88945532769.png на Результат В декомпиляторе видим, что одна из веток условия стала недостижимой и не отображается. 2. Мы отключим проверку подписи сервера, т.к. у нас нет закрытых ключей оригинального сервера. Без этого изменения прослушать трафик будет невозможно. Для этого внесём изменения в метод (bool)-[NoiseHandshakeManager validateNoiseCertificate:serverHandshakeStaticPublicKey:]. Нам необходимо чтобы функция всегда возвращала единицу. Сейчас результат проверки сертификата из регистра R6 кладется в R0. Сделаем так чтобы в R0 записывалась единица В результате получаем Приложение собрано со всей отладочной информацией, поэтому дополнительно выполнять переименования, описывать структуры и вообще выполнять процесс реверсинга — при создании патча фактически не требуется. Изображения приведены сразу после запуска декомпилятора, без дополнительной обработки. iOS 7.1.2 не проверяет аутентичность бинарных файлов приложений, поэтому все изменения можно сделать прямо в файле приложения. В более поздних версиях iOS можно сделать эти же изменения в памяти запущенного приложения.

Пишем код…

Далее при помощи IDA и долгих кропотливых усилий подготавливаем код успешно выполняющий NoiseHandshake на серверах WhatsApp. Затем реализуем фейковый сервер — делаем все те же операции шифрования, но в обратном порядке (звучит просто, но если не занимаешься этим каждый день — та ещё головная боль). Готовый код лежит здесь. Скачиваем на компьютер приложение MITM полученное по ссылке выше. Устанавливаем PHP 5.6 (подойдёт и другая версия, в моей конфигурации использовалась именно эта версия). Так же понадобится ещё две библиотеки: — первая — вторая

Перехватываем соединение

Остаётся только заставить приложение подключаться к нашему серверу, вместо настоящего. Приложение выполняет подключение к одному из серверов e%d.whatsapp.net (где %d — число от 1 до 16, например e5.whatsapp.net), каждый из которых резолвится на несколько IP-адресов, каждый раз — разных, в сумме больше 300 серверов. Проще всего будет подменить DNS-ответ сервера и направить его на наш компьютер с MITM. Для этого помещаем телефон и компьютер в одну сеть (буквально любой маршрутизатор wifi подойдёт), на телефоне выставляем DNS на наш компьютер на котором устанавливаем bind9 со следующим хостом:

$TTL86400 @INSOAns.whatsapp.net.admin.whatsapp.net. ( 2017100500 28800 7200 1209600 86400) @INNS@ @INAВАШ_АЙПИ vINA184.173.136.86 vINA174.37.243.85 *INCNAME@ 

Смотрим трафик

Далее отредактируем mitm.php — нужно подставить свой номер телефона в поле username и содержимое файла cck.dat (находится в директории с приложением) в поле password. Запускаем php mitm.php. Запускаем приложение WhatsApp и видим следующую картинку: На скриншоте видно два пакета от сервера — сообщение об успешной авторизации и какие-то настройки. Таким образом выглядит абсолютно весь трафик приложения, — всё читабельно и дополнительно разбирать приложение, в большинстве случаев, не требуется. Алгоритм превращения FunXMPP в читаемый текст есть во всех библиотеках работы с WhatsApp. Внутри простейшая машина состояний, дополнительно расписывать его здесь не буду.

Выводы

Приложение сделано качественно, использует современные протоколы шифрования, однако глубоко внутри лежит XMPP оставшийся от изначально используемого ejabberd. Использовать protobuf, судя по текущему вектору развития приложения, — было бы логичнее, однако историческое наследие слишком дорого. Сервис долгое время сильно страдал от массовых рассылок, — код открытых проектов широко этому способствовал. На данный момент уже давно не приходило никаких рассылок, — разработчики ввели ограничение на количество отправляемых сообщений не авторизованным контактам. Именно это дополнение (технически реализуемое полностью на стороне сервера), на мой взгляд, решительно поставило точку в противостоянии любителей рассылок и работников отдела по борьбе с рассылками (если у них такой есть). Чисто технически нет ничего сложного в таком алгоритме, разработчикам других мессенджеров (привет, Viber, — получаю спам не реже раза в месяц), — стоит взять этот приём на заметку. Спасибо за прочтение, надеюсь читать про это было так же весело и интересно, как и проводить исследование.

WhatsApp – мессенджер для смартфонов, позволяющий передавать текстовые сообщения, изображения, видео и аудио. Клиент работает на платформах Android, BlackBerry OS, BlackBerry 10, iOS, Series 40, Symbian (S60) и Windows Phone.

Создан компанией, основанной в 2009 году в городке Санта-Клара, Калифорния. Первый год использования бесплатен, затем взимается плата в размере около 1 доллара США в год.

По мнению, опубликованному в Financial Times, приложение WhatsApp сделает с SMS то же, что сделала программа Skype с международными телефонными звонками.

WhatsApp использует модифицированный протокол Extensible Messaging and Presence Protocol (XMPP, ранее известный как Jabber).

При установке создается аккаунт на сервере s.whatsapp.net, использующий номер телефона в качестве имени пользователя.

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

Версии WhatsApp для персональных компьютеров не существует.

WA — Трэкер™ — спецификация программного обеспечения

Эксплуатация уязвимости протокола SS7 (ОКС-7) для взлома WhatsApp.

1 :Введение.

Трудно сейчас представить жизнь без гаджетов. В современном мире они являются неотъемлемыми атрибутами цивилизованного человека. Мобильные телефоны появились в конце прошлого века, но из-за дороговизны и большой стоимости эксплуатации, они были доступны только определённым группам граждан. Лет 10 назад ситуация изменилась – выход на рынок бюджетных моделей позволил обзавестись мобильным телефоном практически каждой семье. Оставалась еще одна проблема – высокая стоимость тарифов, но и она со временем была решена.

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

WhatsApp — наиболее успешный продукт среди мессенджеров. Это мобильное приложение, адаптированное под все распространённые ОС (Windows, Android, iOS, MacOS), позволяет ежедневно миллионам пользователей со всего мира отправлять мгновенные сообщения и совершать голосовые, а также видеозвонки. В январе 2016 года мессенджер стал абсолютно бесплатным.

2 : Основные функции и возможности WhatsApp

Частые нападки критиков вынудили разработчиков обратить особое внимание на технические характеристики и систему безопасности приложения. Внедрённые новшества сделали мессенджер более удобным в использовании и повысили уровень защиты персональных сведений. Вся пересылаемая через мессенджер информация проходит этап сквозного шифрования, что делает её недоступной для злоумышленников.

WhatsApp открывает перед пользователями следующие возможности:

  1. Отправка текстовых и голосовых сообщений.
  2. Передача информации о текущем местоположении
  3. Хранение и передача медиафайлов и данных
  4. Аудио и видеозвонки в любую точку мира
  5. Поддержка каналов и групповых диалогов

Бесплатный доступ к большому количеству полезных функций превратил WhatsApp в весьма эффективный бизнес-инструмент. При помощи мессенджера можно заниматься продвижением продукта, поиском клиентов и популяризацией бренда. Учитывая большую ценность данного приложения, не странно, что всё более актуальным становится вопрос – как взломать Ватсап?

3 : Эффективность способов взлома WhatsApp

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

Не станем перечислять все возможные методы взлома WhatsApp, так как большинство из них сегодня уже не актуальны. Разработчики быстро реагируют на попытки хакеров взломать приложение и в оперативном порядке совершенствуют программное обеспечение. Поэтому специалисты рекомендуют обращать внимание на стабильные инструменты проверенные временем.

WA-Трэкер™ — эффективный инструмент взлома WhatsApp, использующий уязвимость SS7-протокола. Пользователь сервиса имеет возможность перехватить SMS с кодом верификации и полностью взять под контроль целевой аккаунт. Весь процесс проходит в автоматическом режиме и никак не влияет на работу устройства «жертвы».

4 : Двухфакторной аутентификации — основная уязвимость WhatsApp

Каждый аккаунт Ватсап привязан к номеру телефона, указанному во время регистрации. Это обязательная мера, позволяющая восстановить право доступа, в случае возникновения такой необходимости. На этот номер будет отправлено SMS-сообщение с кодом, который нужно ввести в соответствующей форме. Подтверждение правомерности действий на новом устройстве, позволит восстановить полную историю аккаунта.

Как бы это парадоксально не звучало, но именно эта защитная мера и является наиболее уязвимым местом системы безопасности, так как она делает возможным несанкционированный доступ к профилю Ватсап. Интересно, что разработчики приложения не могут «заткнуть дыру», ведь это зона ответственности мобильных провайдеров.

Архитектура WA-Трэкер™ позволяет перехватить код верификации, и открыть пользователю полноценный доступ к целевому аккаунту. Процесс полностью автоматизирован, проходит в фоновом режиме и не требует согласия со стороны владельца профиля. Всё это благодаря уязвимости SS7-протокола.

5 : Протокол SS7 (ОКС-7) — основная уязвимость сотовых сетей

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

Главная проблема SS7-протокола в том, что он был разработан в 1975 году и не предусматривает механизмы защиты от хакерских атак. До определённого момента считалось, что данная система защищена от подключения извне, но на практике оказалось, что это не так. Для подключения к протоколу нужно специальное оборудование и информационная база. По последним данным, эффективность атак составляет 95%.

Пользователю WA-Трэкер™ нужно указать номер телефона «жертвы», чтобы отправить команду веб приложению на перехват входящего SMS с кодом верификации. После завершения операции, взломанный аккаунт отобразиться в эмуляторе приложения WhatsApp и пользователь получит доступ ко всем интересующим данным.

6 : Перенос аккаунта в эмулятор приложения

Эмулятор WhatsApp разработан теми же специалистами, что и сервис WA-Трэкер™. Он выполняет функции временного хранилища данных, полученных в результате взлома. Другими словами, целевой аккаунт открывается в эмуляторе Ватсап, после чего формируется архив пользовательских данных, доступный для скачивания.

Информация, содержащаяся в предоставляемом архиве:

  1. Журнал входящих/исходящих звонков и их продолжительность
  2. Полученные и отправленные сообщения в ходе переписки
  3. Местоположение на карте с последними зафиксированными точками
  4. Файлы, сохранившиеся в истории аккаунта WhatsApp
  5. Данные, которые передавались через закрытые каналы и группы
  6. Актуальные настройки приложения, установленные пользователем

7 : Системные требования и преимущества

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

Системные требования:

  • Бесперебойный доступ к Интернету, позволяющий загружать большие файлы (до 2 Гб)
  • Обновлённая версия браузера (специалисты рекомендуют Google Chrome, Opera, Safari)
  • Программа для работы с zip-архивом (MacOS имеет встроенный архиватор)

Преимущества работы с WA-Трэкер™:

  • Совместимость практически со всеми мобильными операторами.
  • Не нарушает стабильность работы целевого устройства.
  • Работа сервиса незаметна для настоящего владельца аккаунта.

8 : Заключение

WA-Трэкер™ еще долгое время будет считаться наиболее эффективным методом взлома аккаунтов Ватсап. На это есть две причины: разработчикам приложения не хватает полномочий для устранения всех уязвимостей; сотовые операторы не будут проводить модернизацию системы из-за очень высокой стоимости оборудования. Кроме того, проблема конфиденциальности данных носит локальный характер и известна относительно небольшому числу пользователей.

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

Используемые источники:

  • https://habr.com/ru/company/bringo/blog/339224/
  • https://www.securitylab.ru/news/tags/whatsapp/
  • https://www.watracker.net/docs/specs

Оцените статью
Рейтинг автора
5
Материал подготовил
Илья Коршунов
Наш эксперт
Написано статей
134
Для этой статьи работает наш еженедельный конкурс комментаторов.
Оставьте ваш комментарий в форме ниже и автору лучшего комментария за неделю (самого полезного по нашему мнению) мы подарим приз - iPhone XR 128Gb.
Чтобы мы могли связаться с вами обязательно при отправке комментария укажите ваш e-mail.
Результаты вы сможете узнать на этой странице через неделю.
Добавить комментарий