Содержание статьи
Раньше на получении IP такие игры и заканчивались. Но что, если нужно делать это массово и как‑то централизованно управлять процессом? А еще хотелось бы внедрять свою «канарейку» в любой документ, а не только в пустую заготовку. В этой статье мы покажем, как сделать собственный движок для управления «канарейками».
warning
Статья имеет ознакомительный характер и предназначена для специалистов по безопасности, проводящих тестирование в рамках контракта. Автор и редакция не несут ответственности за любой вред, причиненный с применением изложенной информации. Распространение вредоносных программ, нарушение работы систем и нарушение тайны переписки преследуются по закону.
О канарейках
Если совсем коротко: «канарейка» — это способ заставить объект отстучаться наружу при обращении к нему. Чаще всего для этого используют уникальный URL, заранее сгенерированный для конкретного документа. Запрос к нему позволяет зафиксировать IP-адрес, User-Agent, GeoIP, реферер, параметры устройства и другую телеметрию.
Для документа и приложения, в котором ты его открываешь, все выглядит как легитимная активность: ну тянет документик внешнюю картинку — и пусть. Или делает DNS-запрос — мы что, звери, чтобы ему мешать? Часто канарейки используют проприетарные особенности форматов и популярных приложений, например Microsoft Word, Microsoft Excel и просмотрщиков PDF.
В свободных офисных форматах — LibreOffice, OpenOffice, Apache OpenOffice и подобных, а также в открывашках PDF канарейки будут срабатывать через раз, но чаще не будут. Но если средство безопасности или песочница вытащит URL из документа и решит проверить его активным запросом, канарейка оповестит нас: открытие было — значит, все работает.
Давай попробуем классику. Заходим на сайт Canarytokens, выбираем Word, указываем почту для алерта и, если нужно, комментарий, а затем скачиваем сгенерированный файл. Так же сделаем для PDF.

Открой любой документ в Microsoft Office — только сначала выйди из защищенного просмотра и включи режим редактирования — или закинь PDF в старенький Adobe Acrobat Reader. При открытии документа прилетит «письмо счастья».

Но если открыть файл в других редакторах — например, в EZViewer или просто в браузере — либо в свежих версиях Adobe Acrobat, уведомление не придет. Или, слава богам безопасности, появится запрос‑предупреждение.

Мини‑офтоп. В корпоративной среде можно добавить сайты, которые ловят канарейки, в список доверенных — тогда предупреждение о соединении не появится. Например, в Adobe Acrobat это настраивается в параметрах программы или в реестре:
HKEY_CURRENT_USER\Software\Adobe\Adobe Acrobat\DC\TrustManager\cTrustedSites\cAlwaysTrustedForJavaScript

Теперь немного пореверсим документы и разберемся, как так вышло.
Канарейки в PDF
Анализ PDF-объектов
Давай кратко освежим в памяти структуру файла PDF. Как ты знаешь, просто открыть PDF в обычном текстовом редакторе и поправить содержимое не выйдет.
PDF состоит из множества хитро переплетенных объектов. Даже чтобы просто найти текст в сыром PDF-файле, приходится проваливаться внутрь объектов и декодировать их.
Мы применим специальные утилиты и библиотеки, чтобы анализировать структуры PDF-документов и внедрять в них объекты. Можно, к примеру, использовать онлайн‑инструменты вроде Inspect PDF: они позволяют интерактивно раскрывать объекты. Но такой подход годится только для небольших документов.

Если работаешь в своей инфраструктуре, проще и безопаснее взять готовые утилиты — их полно: есть огромный список на GitHub, pdfxplr для быстрого поиска полезной инфы вроде URL, email и IP-адресов, а еще PDForensic — правда, на ряде документов он у нас работал не очень.

Казалось бы, почему просто не взять открытые шаблоны и код и не вкорячить их в свои ИТ‑решения? Потому что такой путь усложняет работу с уже существующими файлами — например, их маркировку. А нам нужна универсальность: хотим доставлять свою канарейку в каждый дом.
Для поиска дефолтных канареек тоже есть готовые решения — например, одно описано в блоге Adam on Security.
Практика
Сразу скажем: эта статья не вышла бы без PoC и огромной работы камрада aaaaaaaalesha. Он исследовал и реализовал способы внедрять канареек в любое место документа — за это ему отдельное спасибо.
Сработаем на опережение: сначала напишем простейший сервер, который будет слушать прилетающих канареек. Возьмем Python и поставим Flask командой pip3 . Создай каталог templates и положи в него белую картинку размером 1 × 1 пиксель — pic.. Формат можешь выбрать любой: GIF, PNG или какой тебе нравится.
Продолжение доступно только участникам
Материалы из последних выпусков становятся доступны по отдельности только через два месяца после публикации. Чтобы продолжить чтение, необходимо стать участником сообщества «Xakep.ru».
Присоединяйся к сообществу «Xakep.ru»!
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее
