В начале октября 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-скрипта, который будет использоваться для загрузки файлов на сервер.
- ‘wifi’ — эта команда создает новое Wi-Fi подключение с заданными настройками и включает Wi-Fi, если он выключен. Таким образом, когда устройство будет в зоне действия нужной сети Wi-Fi, подключение к ней произойдет автоматически и незаметно для пользователя. Эта команда используется для подключения жертвы к беспроводной сети, контролируемой киберпреступниками, чтобы осуществить перехват трафика или MitM-атаку.
- ‘camera’ – эта команда вызывает запись видео/выполнение фото с помощью фронтальной камеры, как только кто-нибудь разблокирует экран устройства.
Некоторые версии Skygofree используют функцию самозащиты, предназначенную специально для устройств фирмы Huawei. Устройства этой фирмы имеют список «защищенных» приложений, связанный с концептом сохранения жизни батареи. Приложения, не содержащиеся в этом списке перестают работать после того, как экран смартфона выключается, и ждут включения экрана. Во избежание этого сценария имплант имеет возможность определить, что он запущен на устройстве Huawei, и добавить себя в вышеупомянутый список приложений. Наличие этой функции показывает, что разработчики Skygofree уделяли особое внимание работоспособности троянца на устройствах этой фирмы.
Кроме того, мы нашли отладочную версию имплантата (70a937b2504b3ad6c623581424c7e53d), которая содержит интересные константы, включая версию шпионского ПО.
После глубокого анализа всех обнаруженных версий Skygofree мы составили приблизительный график эволюции имплантата.
Однако некоторые факты указывают на то, что образцы APK со второй стадии также могут использоваться отдельно в качестве первого этапа инфекции. Ниже приведен список полезных нагрузок, используемых имплантом Skygofree на второй и третьей стадии.
Полезная нагрузка Reverse shell
Reverse shell модуль — это внешний файл ELF, скомпилированный злоумышленниками для запуска на Android. Выбор конкретной полезной нагрузки определяется версией имплантата, и ее можно загрузить с C&C-сервера вскоре после запуска имплантата или после определенной команды. В последнем случае выбор ZIP-файла с полезной нагрузкой зависит от архитектуры процессора устройства. На данный момент мы наблюдали только одну версию полезной нагрузки для следующих процессоров ARM: arm64-v8a, armeabi, armeabi-v7a.
Почти во всех случаях файл полезной нагрузки, содержащийся в ZIP-архивах, называется ‘setting’ или ‘setting.o’. Основной целью этого модуля является предоставление функций reverse shell на устройстве путем соединения с сервером.
Полезная нагрузка запускается основным модулем с указанием хоста и порта для соединения в качестве параметра. В некоторых версиях Skygofree эти параметры указаны в коде — «54.67.109.199» и «30010» соответственно:
В качестве альтернативы эти параметры для соединения с командным сервером могут быть указаны в коде самой полезной нагрузки:
Также мы видели модификации Skygofree, у которых модуль reverse shell находился непосредственно в папке /lib главного APK файла.
После более глубокого изучения мы обнаружили, что некоторые версии кода полезной нагрузки reverse shell имеют сходство с PRISM — скрытым бэкдором, который доступен на Github.
Полезная нагрузка с эксплойт-паком
В то же время мы обнаружили важный исполняемый файл, который пытается использовать несколько известных уязвимостей для получения прав суперпользователя на устройстве. Согласно нескольким временным меткам эта полезная нагрузка используется в имплантах, созданных начиная с 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, который доступен публично.
Как видно из сравнения, есть похожие строки, а также уникальный комментарий на итальянском языке, так что похоже, что злоумышленники создали эту полезную нагрузку на основе исходного кода проекта android-rooting-tools.
Полезная нагрузка Busybox
Busybox — это общедоступное ПО, которое предоставляет несколько инструментов Linux в одном файле ELF. В ранних версиях импланта этот модуль использовался для исполнения shell команд, например:
Полезная нагрузка для социальных сетей
На самом деле это не отдельный файл полезной нагрузки – во всех обнаруженных версиях его код был скомпилирован с эксплойтами. Дело в том, что имплант должен получать привилегии суперпользователя перед выполнением этого модуля. Эта полезная нагрузка также используется более ранними версиями импланта, а функционал аналогичен команде «AndroidMDMSupport» из текущих версий – кража данных, принадлежащих другим установленным приложениям. Ниже приведен пример такой команды для Facebook:
Вот список приложений, которые могут быть атакованы проанализированной версией модуля:
Имя пакета | Имя приложения |
jp.naver.line.android | LINE: Free Calls & Messages |
com.facebook.orca | Facebook messenger |
com.facebook.katana | |
com.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 )
После это зловред модифицицирует запись ‘SoftwareMicrosoftWindowsCurrentVersionRun’ в реестре, чтобы добавить главный модуль в автозагрузку.
Код содержит несколько комментариев на итальянском языке, вот наиболее примечательный пример:
Вот список команд для 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-hostShared FoldersdatiBackupProjectsREcodin_2REcodin_2objx86ReleaseREcodin_2.pdb
network.exe – это модуль для отправки на сервер всех собранных данных. В наблюдаемой версии импланта у него нет интерфейса для работы с модулем skype_sync2.exe.
Похожесть кода
Мы обнаружили некоторое сходство между кодом импланта Skygofree для Windows и общедоступным проектам:
- https://github.com/El3ct71k/Keylogger/
Похоже, разработчики скопировали функциональную часть модуля кейлоггера из этого проекта.
- 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, все еще доступны. Все наблюдаемые лендинги имитируют веб-страницы мобильных операторов с помощью похожего доменного имени и содержимого веб-страницы.
К сожалению, пока мы не можем сказать, как эти страницы использовались атакующими, но по информации, имеющейся в нашем распоряжении, можем предположить, что они идеально подходят для эксплуатации с использованием перенаправлений на зараженных сайтах или с помощью MitM-атак. Например, это может произойти, когда устройство жертвы подключается к точке доступа Wi-Fi, которая контролируется злоумышленниками.
Артефакты
Во время исследования мы обнаружили множество следов разработчиков Skygofree и тех, кто занимается его поддержкой. Как уже было сказано в описании функционала, в коде есть несколько отсылок. Вот только некоторые из них:
ngglobal – Идентификатор используемый в FirebaseCloudMessaging |
Issuer: CN = negg – из нескольких сертификатов |
negg.ddns[.]net, negg1.ddns[.]net, negg2.ddns[.]net — C&C-сервер |
NG SuperShell – строчка из модуля полезной нагрузки |
ngg – префикс в командах для Windows-импланта |
- Записи Whois и связи между IP, использованными в кампании также, дают много интересного. В записях Whois много упоминаний ‘Negg’ и отсылок к ним, например:
Заключение
Skygofree – одна из самых функциональных программ-шпионов, которые мы когда-либо видели для платформы Android. В результате долгосрочного процесса разработки было реализовано множество интересных возможностей: использование нескольких эксплойтов для получения привилегий суперпользователя, сложная структура полезных нагрузок, ненаблюдаемые нами ранее шпионские функции, такие как запись окружающего звука в определенных местах.
Учитывая множество артефактов, обнаруженных в коде вредоносной программы, а также анализ инфраструктуры, мы можем с большой вероятностью утверждать, что разработчиком имплантов Skygofree является итальянская ИТ-компания, которая работает над решениями для слежки, как и HackingTeam.
Skygofree: по стопам HackingTeam