Может ли быть вирус в pdf файле

Обновлено: 06.07.2024

Чуть более чем в 20% случаев для заражения компьютера пользователя вредоносным ПО злоумышленники в современных эксплойт-паках используют уязвимости при обработке PDF-файлов. Наибольшей популярностью при этом пользуется Adobe Reader.

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

Рис. 1. Количество хостов, детектируемых методом проверки PDF-файлов

Как видно из рисунка 1, количество хостов, с которых распространяются вредоносные PDF-файлы, растет с каждым днем. Метод применяется для детектирования сайтов, ранее считавшихся безопасными, и имеет сравнительно небольшое количество срабатываний.

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

Интерес злоумышленников к Adobe Reader обусловлен поддержкой встроенного JavaScript-движка и возможностью использования форм, а также статического и динамического внешнего содержимого. Такой подход дает злоумышленником большое поле для исследований и поиска уязвимостей.

Самой популярной уязвимостью, используемой злоумышленниками для заражения вредоносным ПО компьютеров пользователей, на сегодня является CVE-2010-0188. В период с 18 по 26 сентября нам удалось зафиксировать более 1100 уникальных вредоносных PDF-файлов, использующих эту уязвимость. Также эта уязвимость осталась в самом популярном на данный момент эксплойт-паке – BlackHole v.2.

Сама уязвимость заключается в неверной обработке параметра DotRange одной из структур Image File Directory в прикрепленном к PDF TIFF-файле. Уязвимы версии Adobe Reader <8.3.1 и <9.3.

Для примера возьмем PDF из BlackHole v.2, использующем эту уязвимость. Хеши вредоносного файла:

  • MD5: 327378bd6d542e3da1ccb9664377eb87
  • SHA1: e58a3724e0ea1d54258589489472c86adecc4dad
  • SHA256: 7b495ef928de9e2348a388262 8a0987dd26a4f9c02e1b4c527 eac143bc8e56af

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

Вредоносный JavaScript в PDF спрятан в одном из объектов, показанном на рисунке 2, откуда его достаёт и дешифрует другой JavaScript, показанный на рисунке 3.

Рис.2. Зашифрованное тело основного вредоносного JavaScript в PDF

Рис.3. Код, дешифрующий основное тело вредоносного JavaScript кода в PDF

После дешифровки основная функция, выполняющая вредоносные действия, выбирает в зависимости от версии Adobe Reader вредоносный TIFF-файл.

Рис.4. Функция, эксплуатирующая уязвимость в PDF-файле в зависимости от версии

Как показано на рисунке 4, если версия Adobe Reader будет ниже 9, то для эксплуатации будет выбран один TIFF-файл, а если выше – то другой.

При успешной эксплуатации уязвимости выполнится код, который скачает и запустит вредоносный файл на компьютере пользователя.

Рис.5. Урл, с которого будет скачан вредоносный файл из блока памяти с вредоносным кодом

Чтобы избежать заражения, мы рекомендуем использовать безопасные браузеры, актуальные операционные системы и антивирусное ПО, а также вовремя обновлять Adobe Reader.

Несколько месяцев назад я столкнулся с интересной задачей по анализу подозрительного pdf файла. К слову сказать, обычно я занимаюсь анализом защищенности веб приложений и не только веб, и не являюсь большим экспертом в направлении malware analysis, но случай представился довольно любопытный.

Практически все инструменты представленные в данной статье содержаться в дистрибутиве Remnux, созданном специально в целях reverse engineering malware. Вы можете сами загрузить себе образ виртуальной машины для VirtualBox или Vmware.

Первым делом я проанализировал полученный экземпляр с помощью скрипта pdfid:


Декодировал javascript код с помощью все того же pdf-parser:


Привел к удобному виду, для этого можно воспользоваться js-beautify:


Неплохо. Также проанализировал файл с помощью отличной утилиты jsunpack:


На первый взгляд им была обнаружена уязвимость CVE-2009-1492, связанная с выполнением произвольного кода или отказа в обслуживании через Adobe Reader и Adobe Acrobat версий 9.1, 8.1.4, 7.1.1 и ранних версий, с помощью pdf файла, содержащего annotaion и использующего метод getAnnots. Но если проверить мои результаты, полученные выше, с соответствующим exploit-ом, то обнаруживается, что эта уязвимость не имеет отношения к текущему случаю. В нашем варианте annotaion используется для хранения большой части скрипта в том числе в целях обфускации.

Данные из annotaion вызываются методом getAnnots и находятся в объекте 9 нашего файла(как показал pdfparser). Сохраним полученный javascript код, добавив к нему поток из объекта 9. Обычно, первым шагом для безопасного выполнения кода является замена функции eval безобидным alert или console.log и открытии файла с помощью браузера. Также в этих целях можно использовать Spidermonkey. Основные необходимые нам функции и переменные уже определены в файле pre.js, который вы также можете обнаружить в дистрибутиве Remnux.


Неплохо. После запуска Spidermonkey мы получили новый скрипт, который использует функции eval и поток данных из объекта 7:


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


Финальный скрипт выглядел так:


После рефакторинга получил:


Как видно во втором случае используются наши unescape("%u0c0c%u0c0c") и this.collabStore = Collab.collectEmailInfo(>);

В переменных v3, v4 просматривается shellcode из-за наличия серии NOP инструкций в начале значений переменных.

Чтобы подтвердить мои предположения я использовал эмулятор libemu из бесплатного продукта PDFStreamDumper со значением, взятым из переменной v4. Также libemu вы можете найти и в Remnux:


Бинго. Обнаружился url xxxxxx.info/cgi-bin/io/n002101801r0019Rf54cb7b8Xc0b46fb2Y8b008c85Z02f01010 который и использовался для загрузки с последующем исполнением нашего вредоноса:


3. Также параметры сравнения, обнаруженные в скрипте:


выглядят также как описано в CVE-2009-2990: Ошибка индекса в массиве Adobe Reader и Acrobat 9.x до версии 9.2, 8.x и 8.1.7, а также с версии 7.x до 7.1.4 позволяет выполнить произвольный код.
В кодируемом FlateDecode потоке объекта 11 мы также обнаруживаем код в U3D:


Теперь мы имеем URL, Shellcode, несколько CVE и этого вполне достаточно для данной статьи.

Автор статьи: Андрей Ефимюк, эксперт в области ИБ, OSCP, eCPPT, хороший друг PentestIT.
Оригинал статьи


В файлах PDF много информации. Бóльшая часть используется для одинаковой визуализации документа на разных платформах. Но также есть множество метаданных: дата и время создания и редактирования, какое приложение было использовано, тема документа, название, автор и многое другое. Это стандартный набор метаданных, а имеются способы вставить в PDF пользовательские метаданные: скрытые комментарии в середине файла. В данной статье мы представим некоторые формы метаданных и покажем, где их искать.

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

  • Автор
  • Дата создания
  • Создатель
  • Производитель (Producer)
  • Название
  • Тема
  • Ключевые слова
  • Дата редактирования (ModDate)


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

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


Как несложно понять, эта информация неоценима при попытке определить историю документа или попытке внедрить другую информацию. PSPDFKit для iOS и Android поддерживает чтение и редактирование метаданных.

Потоки метаданных не ограничиваются только документами; метаданные также можно назначить любому объекту в документе. Например, потоку со встроенным изображением. Чтобы усложнить ситуацию, вспомогательные метаданные также могут храниться в самом потоке. Если пойти ещё дальше, мы можем встроить PDF в метаданные потока изображений, тем самым достигнув бесконечной рекурсии! Поэтому в следующий раз, когда будете проверять метаданные на наличие информации, помните, что вам, возможно, придётся пройти несколько уровней, чтобы найти информацию, которую вы ищете.

В стандарте PDF есть концепция дополнительного сохранения, которую многие приложения, включая PSPDFKit, реализуют для ускорения сохранения. Короче говоря, этот метод добавляет дополнительную информацию в конец документа, и старые объекты, на которые больше нет ссылок, останутся висеть там. Это здорово, когда вы изменяете элементы документа на лету и не хотите ждать длительного процесса сохранения, или, например, для функции автоматического сохранения, где процесс выполняется в фоновом потоке, а мы хотим использовать минимум ресурсов.

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

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

Хорошо, если есть возможность заново скачать поврежденный файл или запросить его копию у отправителя. Тогда вопросов нет! Но что делать, если документ существует в единственном экземпляре? Начинать работу с самого начала? Может помочь известная в кругах специалистов утилита Recovery Toolbox for PDF. Но обо всем по порядку…

Разбор ошибок Adobe

Ситуация, когда PDF-файл становится испорченным после отправки по почте или неудачного копирования, является довольно типичной. Есть мнение, что причину этого нужно искать в перегруженном «костылями» программном коде Acrobat. Очень обидно. Типичный пример того, как великолепная концепция страдает из-за нерадивых разработчиков.

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


Это далеко не единственная ошибка, которая может выскочить в момент работы с PDF-файлами, но одна из самых распространенных. Удивительно, но служба технической поддержки Adobe не желает помогать своим пользователям даже в мелочах. Посмотрим, как именно американские эксперты предлагают решать эту проблему.


Этот скриншот сделан на официальной странице разработчика, разберем его по пунктам.

Нельзя сказать, что в руководстве по исправлению ошибок совсем нет ничего ценного. В последнем разделе Still need help («Все еще нужна помощь») пару полезных советов можно найти. Так, пользователи Mac, которые работают с InDesign и Illustrator, должны сохранять свои PDF-проекты только с помощью Print to PDF. В противном случае файл будет испорчен. Если это ваш случай, нужно только заново сохранить документ по новой схеме.


Есть еще такой лайфхак, с его помощью вы сможете выдернуть из поврежденного файла текст. Суть метода в том, чтобы попробовать открыть поврежденный файл не с помощью Adobe, а через блокнот. Для этого щелкните правой кнопкой мыши по своему документу, далее «Открыть с помощью» – «Блокнот». Появится программный код, после чего вы сможете скопировать текстовую информацию, а затем отредактировать ее вручную.

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

Профессиональные инструменты для работы с PDF

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

Риск встретить мошенников в этом деле – девять шансов из десяти. Поэтому не спешите передавать первому же ресурсу свои данные. Лучше потратить несколько минут на изучение отзывов в интернете. И конечно, никогда не верьте тем, кто предлагает помощь бесплатно. Деда Мороза не существует, а за все хорошее нужно платить!

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

Вариантов восстановления разработчик предлагает ровно два:

  • первый – удобный онлайн-сервис
  • второй – утилита для Windows, которая называется Recovery Toolbox for PDF

Работать с приложением можно даже без изучения мануала, там все элементарно. Скачиваете, устанавливаете, запускаете. Следуя указаниям мастера, находите PDF-файл и указываете папку на диске для его сохранения. Подтверждаете выбор нажатием «Далее». Вот и все. Стоимость программы $27, при этом число восстановлений и размеры файлов не ограничены.


Если цена восстановления при помощи программы для вас слишком высока, воспользуйтесь более демократичным Recovery Toolbox. Услуги сервиса обойдутся вам всего в $10 за один гигабайт. Никакого ПО для работы с ним устанавливать не нужно, просто переходите на страницу, отмечаете местоположение PDF документа, вводите проверочный код (чтобы подтвердить, что вы живой человек) и указываете свою почту. Через несколько секунд исправленный файл будет в вашем распоряжении.


P. S. Забыли пароль от защищенного документа PDF? Не беда. Восстановить доступ позволит Recovery Toolbox for PDF Passwords.

P. P. S. Еще существует универсальный сервис Recovery Toolbox Online, который умеет работать не только с PDF, но также с расширениями docx, xlsx, psd, ai, ost и другими популярными форматами, всего их более двадцати. Идеальное решение для офисов и предприятий.

Чтобы восстановить файл, перейдите на официальный сайт и выполните следующее:

  1. Выберите на диске нерабочий файл
  2. Пройдите captcha
  3. Укажите электронную почту
  4. Посмотрите превью вашего файла
  5. Оплатите услуги онлайн-сервиса
  6. Скачайте восстановленный документ

На этом все. Можно поздравить вас с успешным решением проблемы. Иначе и быть не могло, а на будущее рекомендуется важные документы на флешке. Кстати, если вы успели удалить поврежденный файл и уже очистили от него «Корзину», вернуть его позволит бесплатная программа Recovery Toolbox File Undelete Free. Пусть сбои и вирусы обходят ваш компьютер стороной.

Читайте также: