Превью ссылок в мессенджерах ставит под угрозу успех секретных операций в Интернете

Функция предварительного просмотра ссылок работает в большинстве мессенджеров. Она крайне удобна и позволяет, скопировав ссылку в окно сообщения, увидеть миниатюру сайта, на который она ведет.

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

В принципе, любой переход на сайт делает ваш IP-адрес видимым — так работает Интернет (если только вы не пользуетесь Tor или VPN, позволяющими скрывать настоящий IP-адрес).

Со ссылками в мессенджерах история немного другая: вы сообщаете владельцу сайта, что вы не просто просматриваете сайт, вы его обсуждаете.

Эта, казалось бы, маленькая, незначительная деталь в определенных ситуациях может стать настоящей проблемой. И сейчас вы поймете почему…

Предыстория

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

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

В течение нескольких часов активности практически не наблюдалось, как вдруг сервер зарегистрировал подключение с IP-адреса, исходящее от Skype. Тут я подумал: «Какого черта?!» Это был совершенно новый фишинговый сервер, и я не мог понять, почему сервер Skype обращается к нему.

Через пару минут я зарегистрировал еще одно обращение от другого сервера Skype. Теперь я уже не на шутку задумался.

И тут меня осенило! Кто-то обсуждает мою C&C-систему в чате Skype, и Skype генерирует миниатюры предварительного просмотра для созданного мной фишингового сайта.

Я зашел в Skype и провел несколько быстрых тестов. Так оно и было! История повторилась. Теперь я знал, что команда реагирования меня вычислила и пора менять тактику.

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

Как это связано с интернет-расследованиями?

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

С точки зрения расследования, если вы обмениваетесь ссылками с коллегой, вы выдаете объекту обсуждения, что вы о нем говорите. Именно так во время тестирования системы безопасности я выяснил, что команда реагирования меня вычислила. Вряд ли вы хотите, чтобы то же самое случилось с вами.

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

В любом случае, вы безошибочно отличите этот вид активности от обычного просмотра сайта через браузер.

Результаты тестирования разных платформ

Я протестировал несколько мессенджеров и сервисов обмена сообщениями. Для этого в облаке Digital Ocean (мне хватило подписки стоимостью 5 долларов в месяц) я написал простой веб-сервер на Python. Его задачей было регистрировать в логах IP-адреса и имена подключающихся клиентов.

А еще для тестирования я настроил специальную DNS-запись, которая подменяет домены IP-адресами. Из всех протестированных сервисов только WhatsApp нестандартно среагировал на подмену. Все остальные службы запросто генерировали превью для IP-адреса. Разницы между использованием протоколов HTTP и HTTPS также не было.

Итак, вот какие результаты я получил:

Slack

Как и многие другие компании, мы используем Slack, поэтому за него я взялся в первую очередь. Slack без труда генерирует предпросмотр ссылок и сообщает следующую информацию о клиенте:

User-Agent: Slackbot-LinkExpanding 1.0 (+https://api.slack.com/robots)Как в мобильном приложении, так и в клиенте Slack для ПК видно, что запрос отправлен с моего публично отображаемого IP-адреса через мое офисное подключение.

Apple Messages

Тестирование Messages было интересным и показало своеобразное поведение. При отправке ссылки через Messages с компьютера/ноутбука превью, как и ожидалось, генерируется непосредственно с вашего публичного IP-адреса.

Сайт получает следующую информацию о клиенте:

User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_1) AppleWebKit/601.2.4 (KHTML, like Gecko) Version/9.0.1 Safari/601.2.4 facebookexternalhit/1.1 Facebot Twitterbot/1.0Интересная особенность заключается в том, что в описании появляются Facebot и Twitterbot. Эту особенность уже отмечал один из пользователей на Reddit.

Дальше становится еще интереснее! Можно сделать сообщение со ссылкой на фишинговый сайт даже эффективнее, если добавить файл с названием:

apple-touch-icon-precomposed.pngПриложение Messages попытается извлечь файл, как только определит, что он ссылается на нужный сайт. Этот файл будет использоваться в генерируемой миниатюре и поможет убедить целевого пользователя пройти по ссылке. Но не стоит забывать, что Messages было первым мессенджером, в котором вообще появилась функция предварительного просмотра URL.

Wire

Wire показал достаточно интересные результаты. При отправке ссылки через приложение с компьютера или мобильного телефона в логах появляется публичный IP-адрес пользователя. Однако название клиентского приложения не высвечивается. Единственное, что отправляет Wire:

Connection: closeЭто уже само по себе интересно, потому что большинство HTTP-клиентов (браузеры, веб-роботы, боты и пр.) обычно отправляют дополнительные сведения. Тот факт, что Wire блокирует всю информацию, также может намекнуть владельцу сайта, что кто-то обсуждает его целевую страницу в приложении Wire. Чтобы получить статистически значимые данные, моего единичного наблюдения недостаточно. Нужно провести дополнительные тесты, чтобы понять, как часто встречается такой ограниченный набор сведений о клиенте.

Кстати, в настройках Wire есть возможность отключить функцию предварительного просмотра отправляемых ссылок (Preferences > Options > Create previews for links you send). Рекомендую это сделать, и тогда Wire не будет генерировать миниатюры сайтов. За эту наводку выражаю благодарность Майклу Баззеллу.

Facebook

Facebook также отправляет данные о себе, однако, обращаясь к сайту, чтобы сгенерировать превью, он использует собственную инфраструктуру. В сведениях о клиенте вы увидите следующее:

User-Agent: facebookexternalhit/1.1 (+http://www.facebook.com/externalhit_uatext.php)Сервис не использует ваш публичный IP-адрес, но тем не менее сообщает, что кто-то поделился ссылкой на целевой сайт в профиле Facebook или отправил ее через мессенджер. Высветившийся IP-адрес принадлежит Facebook, и чтобы получить о нем больше сведений, можно воспользоваться ресурсом типа ipintel.io.

WhatsApp

WhatsApp ведет себя не так, как другие сервисы. Он не обрабатывает IP-адреса напрямую, но если добавить домен (и порт), он попытается сгенерировать предпросмотр. Кроме того, он постоянно отправляет запросы по мере ввода URI целевой страницы, из-за чего идет большой объем трафика.

Клиентское приложение определяется следующим образом:

User-Agent: WhatsApp/0.3.1649 NЗапрос поступает с вашего публичного IP-адреса.

Skype [обновление от 5 января 2019 г.]

В первом раунде тестирования Skype не создавал превью ссылок. Однако в дальнейшем выяснилось, что во время тестирования использовался нестандартный порт сервера, и в этом крылась причина такого поведения. Полученные результаты подтвердили, что Skype по умолчанию тоже генерирует миниатюры предпросмотра, при условии что сайт имеет нормальный домен и «слушает» стандартные порты 80/443.

Клиентское приложение определяется следующим образом:

User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) SkypeUriPreview Preview/0.5

Запрос поступает с IP-адреса, принадлежащего Microsoft.

Эту функцию можно отключить, перейдя в настройки приложения (Preferences > Messages > Web link previews).

(Были проведены дополнительные тесты для Skype, выявившие, что предпросмотр ссылок все равно работает. Из-за выбранной методологии мне первоначально не удалось создать необходимые условия, при которых сервис генерирует превью. Выражаю благодарность Ахмеду Эйсса за подсказку)

Сервисы, не генерировавшие превью

Однако не все сервисы при копировании или вводе ссылок генерировали предпросмотр или трафик. Вы сами можете провести тест, чтобы проверить мои результаты.

Signal (ПК/мобильная версия)
Skype (ПК/мобильная версия)
Sudo (мобильная версия)
Threema (мобильная версия)
Twitter DM (мобильная версия/веб)
Wickr (ПК)

Тестирование мобильных приложений проводилось на iPhone X. Приложения для Android могут вести себя иначе.

Существует еще множество других мессенджеров, которые вы можете протестировать самостоятельно. Сообщите мне о своих результатах, и я добавлю их в статью.

Как устранить уязвимость

Устранить эту уязвимость можно несколькими способами:

Отправляйте измененные ссылки. Замените точки и двоеточия в URL другими символами или используйте квадратные скобки. Например: Пример:

Так выглядит обычная ссылка: https://www.hunch.ly

Так выглядит видоизмененная ссылка: hxxps://www[.]hunch[.]ly

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

Статья была впервые опубликована на сайте Hunchly.