d_x
07.06.2010, 17:53
В начале года несколькими людьми была найдена "уязвимость" (http://blog.didierstevens.com/2010/03/29/escape-from-pdf) в формате PDF, позволяющая запускать произвольный код при открытии файла, которая на самом деле является документированной возможностью формата. Всего было опубликовано два типа уязвимостей: с использованием и без использования JavaScript.
После беглого изучения формата и специфики этой проблемы была реализована программа для внедрения exe файлов в тело pdf и последующего запуска exe при открытии. Конечно, при открытии pdf выдается предупреждение:
http://kaimi.ru/wp-content/uploads/2010/06/example-launch.png
Однако, существует возможность вывести произвольный текст в окне предупреждения (актуально для Acrobat Reader 9.*, в 8.* весь внедренный код вываливается целиком, и пользователь, скорее всего, что-нибудь заподозрит).
Программа обладает следующими возможностями:
Задание произвольного текста сообщение (лучше не делать текст длинным)
Задание имени временного vbs файла (используется для создания exe файла из тела pdf)
Задание имени временного exe
Возможность удаления exe через заданный интервал времени
Интерфейс программы предельно прост и выглядит следующим образом:
http://kaimi.ru/wp-content/uploads/2010/06/exe2pdf.png
Скачать: здесь (http://kaimi.ru/wp-content/uploads/2010/06/PDFRunner.zip)
===== Как это работает? =====
Программа открывает заданный PDF-документ и ищет в нем максимальное значение номера объекта. После этого создается собственный объект с командой запуска, и его выполнение указывается в корневом объекте PDF, т.е запуск происходит сразу после открытия документа.
Было много проблем плана "а как же спрятать exe?". Алгоритм таков: если пользователь разрешает запуск объекта, открывается cmd.exe, создающая небольшой vbscript-сценарий.
Этот сценарий запускается и начинает искать в текущей директории pdf-документ с самой последней датой изменения (очевидно, это будет наш коварный pdf). Сценарий открывает этот файл и считывает из него заданный диапазон байтов (это второй vbs-файл, спрятанный в конец pdf-документа) и записывает его в виде нового vbscript-сценария, после чего запускает. На этом работа первого сценария завершена.
Второй сценарий содержит тело exe-файла, запакованное в массив байтов. Сценарий из массива создает exe-файл и запускает его, после чего удаляет себя и первый сценарий. Если была задана опция удаления exe, то сценарий ждет заданное время и пытается удалить также созданный exe-файл.
Окно командной строки при всех этих манипуляциях появляется всего на пару секунд.
Такой подход позволяет спрятать в pdf-документе exe-файл любого размера и за несколько секунд запустить его.
После беглого изучения формата и специфики этой проблемы была реализована программа для внедрения exe файлов в тело pdf и последующего запуска exe при открытии. Конечно, при открытии pdf выдается предупреждение:
http://kaimi.ru/wp-content/uploads/2010/06/example-launch.png
Однако, существует возможность вывести произвольный текст в окне предупреждения (актуально для Acrobat Reader 9.*, в 8.* весь внедренный код вываливается целиком, и пользователь, скорее всего, что-нибудь заподозрит).
Программа обладает следующими возможностями:
Задание произвольного текста сообщение (лучше не делать текст длинным)
Задание имени временного vbs файла (используется для создания exe файла из тела pdf)
Задание имени временного exe
Возможность удаления exe через заданный интервал времени
Интерфейс программы предельно прост и выглядит следующим образом:
http://kaimi.ru/wp-content/uploads/2010/06/exe2pdf.png
Скачать: здесь (http://kaimi.ru/wp-content/uploads/2010/06/PDFRunner.zip)
===== Как это работает? =====
Программа открывает заданный PDF-документ и ищет в нем максимальное значение номера объекта. После этого создается собственный объект с командой запуска, и его выполнение указывается в корневом объекте PDF, т.е запуск происходит сразу после открытия документа.
Было много проблем плана "а как же спрятать exe?". Алгоритм таков: если пользователь разрешает запуск объекта, открывается cmd.exe, создающая небольшой vbscript-сценарий.
Этот сценарий запускается и начинает искать в текущей директории pdf-документ с самой последней датой изменения (очевидно, это будет наш коварный pdf). Сценарий открывает этот файл и считывает из него заданный диапазон байтов (это второй vbs-файл, спрятанный в конец pdf-документа) и записывает его в виде нового vbscript-сценария, после чего запускает. На этом работа первого сценария завершена.
Второй сценарий содержит тело exe-файла, запакованное в массив байтов. Сценарий из массива создает exe-файл и запускает его, после чего удаляет себя и первый сценарий. Если была задана опция удаления exe, то сценарий ждет заданное время и пытается удалить также созданный exe-файл.
Окно командной строки при всех этих манипуляциях появляется всего на пару секунд.
Такой подход позволяет спрятать в pdf-документе exe-файл любого размера и за несколько секунд запустить его.