Специалист по безопасности компании HeadLight Security Михаил Фирстов опубликовал код скрипта, позволяющего обрабатывать перехваченную переписку пользователей приложения «ВКонтакте» для Android и iOS, находящихся в одной локальной сети с хакером. Об этом он сообщил в своём микроблоге.
Код утилиты под названием vkmitm (от MITM — «man in the middle», тип атаки) Фирстов опубликовал на GitHub. Её исполняемая часть является скриптом на Python, который ищет в локальной сети запросы приложений «ВКонтакте» для Android или iOS на обновление списка сообщений.
В описании работы утилиты сказано, что запросы имеют одинаковый вид. В них различается только параметр key, который обновляется не чаще раза в два часа и не реже раза в сутки, поэтому использовать его можно продолжительное время. По мнению Фирстова, таким образом можно узнавать не только текст отправляемых и получаемых сообщений конкретным пользователем, но и служебные уведомления вроде «Набирает текст» и «Прочитано».
Чтобы иметь возможность прослушивать трафик, устройству злоумышленника достаточно находиться в одной локальной сети с жертвой — например, открытом Wi-Fi в кафе. «Слушать» сообщения в режиме реального времени необязательно: можно создавать дампы трафика через PCAP и разбирать их по заданной маске позднее.
Как рассказал Фирстов TJ, возможность получать сообщения в незашифрованном виде заложена в мобильных приложениях «ВКонтакте». По какой-то причине они передают их через протокол HTTP, даже если в настройках аккаунта стоит галочка «Всегда использовать защищённое соединение (HTTPS)».
По мнению исследователя, HTTPS был отключён специально, так как в мобильных приложениях принято экономить трафик, поэтому представителям «ВКонтакте» он об обнаруженном способе сниффинга не сообщал: «Это не уязвимость, а “фича”, которая изначально была заложена разработчиками».
Даже при включённой галочке «HTTPS» в настройках приложения данные о сообщениях (входящие/полученные/различные ивенты) передаются всё равно по HTTP. Я потестировал и написал небольшой скрипт, который получает эти данные из проходящего трафика и расшифровывает их — даже, скорее, расставляет по местам, так как в «сыром» виде сообщения малочитабельны.
Чтобы пропустить через себя чужой трафик, достаточно применить даже самую простую атаку — ARP-спуфинг. Находясь в одной сети, мы сможем видеть весь трафик, проходящий от чужого устройства к роутеру, а от роутера в интернет, ну и как следствие сможем видеть данные от «ВКонтакте», проходящие по незашифрованному HTTP и выводить их в удобоваримом виде.
Михаил Фирстов, специалист по безопасности HeadLight Security
Параметр key берётся из сниффинга всего объёма трафика по определённой маске. Определять личность пользователя по этому параметру Фирстов пока не научился, однако считает, что это можно сделать по косвенным признакам — например, по IP-адресу или по тексту самой переписки.
TJ уведомил представителей «ВКонтакте» о способе чтения чужой переписки. Пока неизвестно, что стало причиной неиспользования HTTPS при передаче личных сообщений.
Обновлено в 15:52: Как уточнил Фирстов, в последнем обновлении приложения VK App для iOS передача сообщений по HTTP была исправлена, но только в том случае, если пользователь указал на сайте «Всегда использовать защищённое соединение (HTTPS)».
Обновлено в 19:05: Пресс-секретарь «ВКонтакте» Георгий Лобушкин заявил TJ, что клиент для iOS использует HTTPS уже больше года (в нём нет возможности выключить защищённое соединение), а в случае Android трафик шифруется при включённой опции на сайте или в приложении. Когда именно соцсеть полностью собирается перейти на HTTPS, он не уточнил.
Результаты проверки наших специалистов по безопасности полностью опровергли доводы, приведённые в статье. Защищённое соединение HTTPS всегда используется в нашем приложении на iOS (его нельзя отключить). Также оно может быть включено пользователем в настройках в приложении на платформе Android. В таком случае получить доступ к переписке пользователя перехватом Wi-Fi-трафика невозможно. В ближайшем будущем мы планируем полностью отказаться от использования HTTP.
Георгий Лобушкин, пресс-секретарь «ВКонтакте»
По словам Фирстова, пользователи «ВКонтакте» зачастую не используют HTTPS, и сообщения передаются в незашифрованном виде: «С Android точно известно, что если в настройках аккаунта не стоит галочка рядом с HTTPS, то в приложении всё передаётся в открытом виде — как у большинства, если судить по трафику в публичных сетях».