Skygofree: по стопам HackingTeam

Содержание 

В начале октября 2017 года мы обнаружили нового троянца-шпиона для ОС Android, имеющего в своем арсенале несколько интересных функций, до этого не использовавшихся в известных нам троянцах. В ходе дальнейшего расследования мы нашли несколько образцов троянца, самый старый из которых датируется концом 2014 года, что указывает на длительный процесс разработки. Со временем возможности зловреда расширялись, добавлялись новые функции, такие как запись звука на микрофон устройства в момент, когда смартфон окажется в заданной локации, перехват сообщений из Whatsapp с помощью сервиса Accessibility и возможность подключить зараженное устройство к контролируемой злоумышленниками Wi-Fi сети. Продукты Лаборатории Касперского детектируют мобильную угрозу как Trojan-Spy.AndroidOS.Skygofree.

Мы наблюдали множество лендингов, замаскированных под сайты мобильных операторов, которые распространяли этого троянца. Доменные адреса, ведущие на эти лендинги, регистрируются злоумышленниками с 2015 года, и согласно нашей телеметрии, именно в этом году кампания по распространению Skygofree была наиболее активна. Регистрация доменов для этой кампании продолжается и по сей день, последний домен был зарегистрирован 31 октября 2017 года. Основываясь на нашей KSN статистике, троянец атаковал нескольких пользователей, но только в Италии.

Более того, во время расследования мы обнаружили несколько троянцев-шпионов под Windows, которые предназначались для получения конфиденциальных данных с атакуемых машин. Версии, которые мы нашли, были скомпилированы в начале 2017 года, и на данный момент мы не уверены, что импланты под Windows уже использовались для атак.

Мы назвали зловреда Skygofree, это слово было найдено в одном из доменов.

Функциональность зловреда

Android

Согласно подписям найденных образцов этого Android-зловреда, его ранние версии были созданы еще в последние месяцы 2014 года, а разработка продолжается и по сей день.

Сигнатура одной из ранних версий

Код и функциональность Skygofree менялись несколько раз – от примитивного необфусцированного зловреда в начале до сложного многоступенчатого троянца-шпиона, который дает злоумышленнику полный удаленный контроль над зараженным устройством. Мы проанализировали все обнаруженные версии, включая последнюю, которая подписана сертификатом, валидным с 14 сентября в 2017 года.

Имплант предоставляет возможность собирать множество конфиденциальных данных, таких как записи звонков, текстовые сообщения, местонахождение устройства, окружающий звук, события в календаре и другую информацию, которая хранится на устройстве.

После запуска пользователем Skygofree показывает фальшивое приветствие:

Dear Customer, we’re updating your configuration and it will be ready as soon as possible.

В то же самое время зловред скрывает свою иконку из списка установленных приложений и запускает следующие сервисы в фоновом режиме:

Service Name Purpose
AndroidAlarmManager Заливка последнего записанного аудио на C&C
AndroidSystemService Запись аудио
AndroidSystemQueues Отслеживание местоположения
ClearSystems GSM трэкинг (CID, LAC, PSC)
ClipService Кража содержимого буфера обмена
AndroidFileManager Заливка украденных данных на C&C
AndroidPush Коммуникации с С&C при помощи XMPP протокола (url.plus:5223)
RegistrationService Регистрация импланта на C&C с помощью HTTP (url.plus/app/pro/)

Почти в каждом сервисе была реализована интересная функция самозащиты. Начиная с Android 8.0 (SDK API 26) операционная система обладает возможностью завершать сервисы, которые находятся в состоянии простоя, поэтому, чтобы предотвратить свое завершение, каждый сервис исполняет следующий код:

Киберпреступники могут управлять имплантом с помощью протоколов HTTP, XMPP, бинарных SMS и FirebaseCloudMessaging (в старых версиях — GoogleCloudMessaging). Такое разнообразие дает атакующим большую гибкость в управлении. Последние версии импланта могут принимать 48 различных команд, их полный список можно найти в приложении. Вот самые примечательные команды:

  • ‘geofence’ – эта команда добавляет заданное местоположение во внутреннюю базу данных импланта, и когда текущее местоположение будет совпадать с добавленным, зловред запустит запись окружающего звука.
  • »social» — эта команда запускает сервис ‘AndroidMDMSupport’, который позволяет получать доступ к данным любого другого установленного приложения. По имени сервиса понятно, что атакующие имеют ввиду MDM (Mobile Device Management) решения. Оператор может указать путь к файлам любого приложения и адрес PHP-скрипта, который будет использоваться для загрузки файлов на сервер.

    Несколько приложений, являющихся целями команды MDM-граббинга

  • ‘wifi’ — эта команда создает новое Wi-Fi подключение с заданными настройками и включает Wi-Fi, если он выключен. Таким образом, когда устройство будет в зоне действия нужной сети Wi-Fi, подключение к ней произойдет автоматически и незаметно для пользователя. Эта команда используется для подключения жертвы к беспроводной сети, контролируемой киберпреступниками, чтобы осуществить перехват трафика или MitM-атаку.

    Фрагменты кода метода addWifiConfig

  • ‘camera’ – эта команда вызывает запись видео/выполнение фото с помощью фронтальной камеры, как только кто-нибудь разблокирует экран устройства.

Некоторые версии Skygofree используют функцию самозащиты, предназначенную специально для устройств фирмы Huawei. Устройства этой фирмы имеют список «защищенных» приложений, связанный с концептом сохранения жизни батареи. Приложения, не содержащиеся в этом списке перестают работать после того, как экран смартфона выключается, и ждут включения экрана. Во избежание этого сценария имплант имеет возможность определить, что он запущен на устройстве Huawei, и добавить себя в вышеупомянутый список приложений. Наличие этой функции показывает, что разработчики Skygofree уделяли особое внимание работоспособности троянца на устройствах этой фирмы.

Кроме того, мы нашли отладочную версию имплантата (70a937b2504b3ad6c623581424c7e53d), которая содержит интересные константы, включая версию шпионского ПО.

Debug BuildConfig с версией зловреда

После глубокого анализа всех обнаруженных версий Skygofree мы составили приблизительный график эволюции имплантата.

Эволюция мобильного зловреда

Однако некоторые факты указывают на то, что образцы APK со второй стадии также могут использоваться отдельно в качестве первого этапа инфекции. Ниже приведен список полезных нагрузок, используемых имплантом Skygofree на второй и третьей стадии.

Полезная нагрузка Reverse shell

Reverse shell модуль — это внешний файл ELF, скомпилированный злоумышленниками для запуска на Android. Выбор конкретной полезной нагрузки определяется версией имплантата, и ее можно загрузить с C&C-сервера вскоре после запуска имплантата или после определенной команды. В последнем случае выбор ZIP-файла с полезной нагрузкой зависит от архитектуры процессора устройства. На данный момент мы наблюдали только одну версию полезной нагрузки для следующих процессоров ARM: arm64-v8a, armeabi, armeabi-v7a.

Почти во всех случаях файл полезной нагрузки, содержащийся в ZIP-архивах, называется ‘setting’ или ‘setting.o’. Основной целью этого модуля является предоставление функций reverse shell на устройстве путем соединения с сервером.

Полезная нагрузка reverse shell

Полезная нагрузка запускается основным модулем с указанием хоста и порта для соединения в качестве параметра. В некоторых версиях Skygofree эти параметры указаны в коде — «54.67.109.199» и «30010» соответственно:

В качестве альтернативы эти параметры для соединения с командным сервером могут быть указаны в коде самой полезной нагрузки:

Также мы видели модификации Skygofree, у которых модуль reverse shell находился непосредственно в папке /lib главного APK файла.

Строка в полезной нагрузке reverse shell

После более глубокого изучения мы обнаружили, что некоторые версии кода полезной нагрузки reverse shell имеют сходство с PRISM — скрытым бэкдором, который доступен на Github.

Полезная нагрузка reverse shell из файла update_dev.zip

Полезная нагрузка с эксплойт-паком

В то же время мы обнаружили важный исполняемый файл, который пытается использовать несколько известных уязвимостей для получения прав суперпользователя на устройстве. Согласно нескольким временным меткам эта полезная нагрузка используется в имплантах, созданных начиная с 2016 года. Она также может быть загружена с помощью определенной команды. Полезная нагрузка содержит следующие компоненты файла:

Имя компонента Описание
run_root_shell/arrs_put_user.o/arrs_put_user/poc Эксплойт для получения прав суперпользователя
db Утилита Sqlite3
device.db База данных Sqlite3, содержащая список поддерживаемых эксплойтом устройств и некоторые константы, необходимые для его работы

‘Device.db’ — это база данных, используемая эксплойтом. Она состоит из двух таблиц, «supported_devices» и «device_address». Первая таблица содержит 205 устройств с некоторыми системными константами; второй — конкретные адреса памяти, которые необходимы для успешной эксплуатации. Полный список моделей устройств, с которыми будет работать эксплойт, можно найти в Приложении.

Фрагмент базы данных с атакуемыми устройствами и адресами памяти

Если зараженное устройство не указано в этой базе, эксплойт пытается обнаружить эти адреса программно.

После загрузки и распаковки основной модуль запускает исполняемый файл эксплойта. После выполнения модуль пытается получить права root на устройстве, используя следующие уязвимости:

CVE-2013-2094
CVE-2013-2595
CVE-2013-6282
CVE-2014-3153 (futex aka TowelRoot)
CVE-2015-3636

Процесс эксплуатации

Мы обнаружили, что код полезной нагрузки эксплойта имеет много общего с проектом android-rooting-tools, который доступен публично.

Фрагмент декомпилированного кода эксплойта

Функция run_with_mmap из проекта android-rooting-tools

Как видно из сравнения, есть похожие строки, а также уникальный комментарий на итальянском языке, так что похоже, что злоумышленники создали эту полезную нагрузку на основе исходного кода проекта android-rooting-tools.

Полезная нагрузка Busybox

Busybox — это общедоступное ПО, которое предоставляет несколько инструментов Linux в одном файле ELF. В ранних версиях импланта этот модуль использовался для исполнения shell команд, например:

Кража ключа шифрования WhatsApp с помощью Busybox

Полезная нагрузка для социальных сетей

На самом деле это не отдельный файл полезной нагрузки – во всех обнаруженных версиях его код был скомпилирован с эксплойтами. Дело в том, что имплант должен получать привилегии суперпользователя перед выполнением этого модуля. Эта полезная нагрузка также используется более ранними версиями импланта, а функционал аналогичен команде «AndroidMDMSupport» из текущих версий – кража данных, принадлежащих другим установленным приложениям. Ниже приведен пример такой команды для Facebook:

Вот список приложений, которые могут быть атакованы проанализированной версией модуля:

Имя пакета Имя приложения
jp.naver.line.android LINE: Free Calls & Messages
com.facebook.orca Facebook messenger
com.facebook.katana Facebook
com.whatsapp WhatsApp
com.viber.voip Viber

Полезная нагрузка для воровства информации приложений

Получив определенную команду, имплант может загрузить специальную полезную нагрузку для воровства конфиденциальной информации из внешних приложений. Мы наблюдали случай, когда Skygofree таким образом атаковал WhatsApp. В рассмотренной версии он был загружен с hxxp://url[.]plus/Updates/tt/parser.apk

Скачанный файл загружается в адресной пространство процесса с помощью API DexClassLoader:

Как упоминалось ранее, мы наблюдали полезную нагрузку, которая была нацелена исключительно на мессенджер WhatsApp, и кража данных выполнялась оригинальным способом. Модуль использовал сервис Accessibility, предоставляемый операционной системой Android для получения информации непосредственно от отображаемых элементов на экране. Он ожидает запуска атакуемого приложения и затем анализирует элементы пользовательского интерфейса, доступные через Accessibility, для поиска текстовых сообщений:

Импланту требуется специальное разрешение на использование API Accessibility Service, но есть команда, которая выполняет запрос с фишинговым текстом, отображаемым пользователю для получения такого разрешения.

Версия для Windows

Мы обнаружили несколько связанных с Skygofree компонентов, которые образуют систему для осуществления шпионской деятельности на платформе Windows.

Имя файла MD5 Назначение
msconf.exe 55fb01048b6287eadcbd9a0f86d21adf Основной модуль, reverse shell
network.exe f673bb1d519138ced7659484c0b66c5b Отправка собранных данных на сервер
system.exe d3baa45ed342fbc5a56d974d36d5f73f Запись аудио на микрофон
update.exe 395f9f87df728134b5e3c1ca4d48e9fa Отслеживание нажатий клавиш
wow.exe 16311b16fd48c1c87c6476a455093e7a Создание скриншотов
skype_sync2.exe 6bcc3559d7405f25ea403317353d905f Запись звонков Skype в MP3

Все модули, за исключением skype_sync2.exe, написаны на Python и были собраны в исполняемые файлы с помощью инструмента Py2exe. Такое преобразование позволяет запускать код Python в среде Windows без предустановленного дистрибутива Python.

msconf.exe – это основной модуль, который обеспечивает коммуникацию с сервером злоумышленников (получает команды, в т.ч. и для других модулей) и предоставляет reverse shell на зараженной машине. Он открывает сокет на машине жертвы и соединяется с серверным компонентом импланта, расположенным по адресу 54.67.109.199:6500. Перед подключением он создает необходимое для работы окружение в «APPDATA / myupd», в том числе базу данных sqlite3 — «myupd_tmp \\ mng.db»:

CREATE TABLE MANAGE(ID INT PRIMARY KEY NOT NULL,Send INT NOT NULL, Keylogg INT NOT NULL,Screenshot INT NOT NULL,Audio INT NOT NULL);
INSERT INTO MANAGE (ID,Send,Keylogg,Screenshot,Audio) VALUES (1, 1, 1, 1, 0 )

После это зловред модифицицирует запись ‘Software\Microsoft\Windows\CurrentVersion\Run’ в реестре, чтобы добавить главный модуль в автозагрузку.

Код содержит несколько комментариев на итальянском языке, вот наиболее примечательный пример:

«Получить команды с удаленного сервера, здесь вы можете установить команды ключей для управления вирусом»

Вот список команд для Windows-версии импланта:

Имя Описание
cd Изменить текущий каталог на указанный в параметре команды
quit Закрыть сокет
nggexe Выполнить полученную команду с помощью команды Python subprocess.Popen(), вывод команды отбрасывается
ngguploads Загрузить указанный файл на указанный URL
nggdownloads Загрузить контент с указанного URL и сохранить в указанный файл
nggfilesystem Дамп структуры директорий диска C:, сохраняется в файл в формате JSON
nggstart_screen
nggstop_screen
Включить/отключить модуль скриншотов. Когда модуль включен, он делает снимок экрана каждые 25 секунд
nggstart_key
nggstop_key
Включить/отключить модуль кейлоггера
nggstart_rec
nggstop_rec
Включить отключить модуль записи окружающего аудио на микрофон
ngg_status Отправка состояния компонентов на C&C
*any other* Выполнить полученную команду с помощью команды Python subprocess.Popen(), вывод команды отправляется на C&C

Все модули устанавливают своим файлам атрибут скрытости. Ниже приведены пути и форматы имен файлов для разных модулей:

Модуль Пути Формат имени файла
msconf.exe %APPDATA%/myupd/gen/ %Y%m%d-%H%M%S_filesystem.zip (файл содержащий структуру директорий)
system.exe %APPDATA%/myupd/aud/ %d%m%Y%H%M%S.wav (аудиозапись окружения)
update.exe %APPDATA%/myupd_tmp/txt/
%APPDATA%/myupd/txt/
%Y%m%d-%H%M%S.txt (кейлоггер)
wow.exe %APPDATA%/myupd/scr/ %Y%m%d-%H%M%S.jpg (снимки экрана)
skype_sync2.exe %APPDATA%/myupd_tmp/skype/
%APPDATA%/myupd/skype/
yyyyMMddHHmmss_in.mp3
yyyyMMddHHmmss_out.mp3
(записи звонков Skype)

Более того, мы нашли модуль skype_sync2.exe, написанный, в отличии от остальных, на .Net. Основная цель этого модуля – запись звонков Skype. Как и предыдущие модули, он содержит несколько строк на итальянском языке.

После запуска он напрямую с C&C-сервера загружает кодек для кодирования MP3:

hxxp://54.67.109.199/skype_resource/libmp3lame.dll

Модуль skype_sync2.exe имеет временную метку компиляции (06 февраля 2017 года), и в отладочной информации содержится следующая строка:

\\vmware-host\Shared Folders\dati\Backup\Projects\REcodin_2\REcodin_2\obj\x86\Release\REcodin_2.pdb

network.exe – это модуль для отправки на сервер всех собранных данных. В наблюдаемой версии импланта у него нет интерфейса для работы с модулем skype_sync2.exe.

Фрагмент кода network.exe

Похожесть кода

Мы обнаружили некоторое сходство между кодом импланта Skygofree для Windows и общедоступным проектам:

  • https://github.com/El3ct71k/Keylogger/

Похоже, разработчики скопировали функциональную часть модуля кейлоггера из этого проекта.

Сравнение кода модуля update.exe и проекта Keylogger

Сравнения кода модуля update.exe module и Xenotix Python Keylogger

Метод ‘addStartup’ из модуля msconf.exe

Метод ‘addStartup’ из Xenotix Python Keylogger

Распространение

Мы нашли несколько страниц лендингов, с помощью которых распространяется имплант Android.

Зловредный URL Реферрер Дата
http://217.194.13.133/tre/internet/Configuratore_3.apk http://217.194.13.133/tre/internet/ 2015-02-04 to
present time
http://217.194.13.133/appPro_AC.apk 2015-07-01
http://217.194.13.133/190/configurazione/vodafone/smartphone/VODAFONE%20Configuratore%20v5_4_2.apk http://217.194.13.133/190/configurazione/vodafone/smartphone/index.html 2015-01-20 to
present time
http://217.194.13.133/190/configurazione/vodafone/smartphone/Vodafone%20Configuratore.apk http://217.194.13.133/190/configurazione/vodafone/smartphone/index.html currently active
http://vodafoneinfinity.sytes.net/tim/internet/Configuratore_TIM.apk http://vodafoneinfinity.sytes.net/tim/internet/ 2015-03-04
http://vodafoneinfinity.sytes.net/190/configurazione/vodafone/smartphone/VODAFONE%20Configuratore%20v5_4_2.apk http://vodafoneinfinity.sytes.net/190/configurazione/vodafone/smartphone/ 2015-01-14
http://windupdate.serveftp.com/wind/LTE/WIND%20Configuratore%20v5_4_2.apk http://windupdate.serveftp.com/wind/LTE/ 2015-03-31
http://119.network/lte/Internet-TIM-4G-LTE.apk http://119.network/lte/download.html 2015-02-04
42205
http://119.network/lte/Configuratore_TIM.apk 2015-07-08

Многие из этих доменов устарели, но почти все (кроме одного — appPro_AC.apk) образцы троянца, расположенные на сервере 217.194.13.133, все еще доступны. Все наблюдаемые лендинги имитируют веб-страницы мобильных операторов с помощью похожего доменного имени и содержимого веб-страницы.

Лендинги, которые имитируют интерфейс мобильных операторов Vodafone and Three

К сожалению, пока мы не можем сказать, как эти страницы использовались атакующими, но по информации, имеющейся в нашем распоряжении, можем предположить, что они идеально подходят для эксплуатации с использованием перенаправлений на зараженных сайтах или с помощью MitM-атак. Например, это может произойти, когда устройство жертвы подключается к точке доступа Wi-Fi, которая контролируется злоумышленниками.

Артефакты

Во время исследования мы обнаружили множество следов разработчиков Skygofree и тех, кто занимается его поддержкой. Как уже было сказано в описании функционала, в коде есть несколько отсылок. Вот только некоторые из них:

ngglobal Идентификатор используемый в FirebaseCloudMessaging
Issuer: CN = neggиз нескольких сертификатов
negg.ddns[.]net, negg1.ddns[.]net, negg2.ddns[.]netC&C-сервер
NG SuperShell строчка из модуля полезной нагрузки
ngg префикс в командах для Windows-импланта

Signature with specific issuer

  • Записи Whois и связи между IP, использованными в кампании также, дают много интересного. В записях Whois много упоминаний ‘Negg’ и отсылок к ним, например:

Заключение

Skygofree – одна из самых функциональных программ-шпионов, которые мы когда-либо видели для платформы Android. В результате долгосрочного процесса разработки было реализовано множество интересных возможностей: использование нескольких эксплойтов для получения привилегий суперпользователя, сложная структура полезных нагрузок, ненаблюдаемые нами ранее шпионские функции, такие как запись окружающего звука в определенных местах.

Учитывая множество артефактов, обнаруженных в коде вредоносной программы, а также анализ инфраструктуры, мы можем с большой вероятностью утверждать, что разработчиком имплантов Skygofree является итальянская ИТ-компания, которая работает над решениями для слежки, как и HackingTeam.

 Skygofree Appendix — Indicators of Compromise (PDF)

Публикации на схожие темы

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *