Обновлено: 19.07.2019
После публикации этой статьи мы получили письмо от представителя Gamma Group International, по его словам компания прекратила разработку FinFisher в 2013 году. Статья была исправлена в соответствии с полученной информацией.
Согласно информации на официальном сайте, FinFisher, наряду с другими инструментами и сервисами, представляет собой «стратегическое масштабное решение для перехвата и мониторинга». Это ПО, также известное как FinSpy, используется для сбора пользовательских данных как на персональных компьютерах, так и на мобильных устройствах. Впервые импланты FinSpy для персональных компьютеров были описаны в утечке Wikileaks в 2011 году, а мобильные импланты были обнаружены годом позднее. «Лаборатория Касперского» отслеживает развитие данного вредоносного ПО, появление новых версий и атаки на пользователей с его участием. Согласно нашей телеметрии, за последний год было заражено несколько десятков уникальных мобильных устройств, а последние на текущий момент случаи активности были зафиксированы в Мьянме в июне 2019.
За полгода до этого, в конце 2018 года, мы исследовали функционально последние версии имплантов FinSpy для мобильных ОС iOS и Android, скомпилированные летом 2018. Выяснилось, что импланты имеют практически одинаковую функциональность и способны собирать различные типы пользовательских данных: контакты, электронные письма, SMS/MMS-сообщения, записи из календарей, местоположение GPS, фотографии, файлы в памяти, записи телефонных звонков и данные из самых популярных мессенджеров.
Вредоносные функции
iOS
Имплант FinSpy для iOS может наблюдать за практически всеми действиями, совершаемыми на устройстве, включая запись звонков VoIP через установленные приложения, например, Skype или WhatsApp. Более того, в списке приложений, информацию из которых может извлекать данный имплант, находятся такие защищенные мессенджеры, как Threema, Signal и Telegram. Однако для доступа к защищенным данным используется фреймворк Cydia Substrate, т.е. имплант может быть установлен только на iPhone или iPad с джейлбрейком и iOS версии 11 и ниже. Существование версии для iPod не подтверждено, также не подтверждены более новые версии ОС, поскольку на момент исследования импланты для iOS 12 еще не были замечены. После полного развертывания импланта FinSpy на смартфоне или планшете, шпионское ПО обеспечивает атакующего практически безграничными возможностями по отслеживанию работы устройства.
Проанализированные версии зловреда содержали исполняемые файлы для двух разных архитектур: ARMv7 и ARMv64. Учитывая, что версия iOS 11 – первая, которая больше не поддерживает ARMv7, мы предполагаем, что 64-битная версия предназначена для атаки на цели с iOS 11+.
По всей видимости FinSpy для iOS не предоставляет своим клиентам инструменты для заражения устройств, поскольку он специально настроен на удаление из системы следов работы общедоступных инструментов для джейлбрейка. Таким образом, единственный способ установить FinSpy для iOS на не взломанное устройство – получить физический доступ к смартфону или планшету цели. Тогда как для устройств с джейлбрейком существует, как минимум, три возможных вектора заражения:
- входящее SMS-сообщение;
- электронная почта;
- WAP Push.
Любой из этих векторов может быть применен с использованием терминала оператора FinSpy Agent.
Процесс установки включает несколько этапов. На первом этапе шелл-скрипт проверяет версию ОС и запускает соответствующий исполняемый файл Mach-O: для iOS 11+ будет использоваться «install64» (64-разрядная версия), в противном случае «install7» (32-разрядная версия). При запуске исполняемый файл установщика выполняет ряд проверок, в том числе проверку доступности пакета Cydia Substrate, и в случае, если он недоступен, программа установки загружает необходимые пакеты из репозитория Cydia и устанавливает их с помощью инструмента «dpkg». После этого установщик распаковывает пакеты, случайным образом выбирает имена для фреймворка и приложения из жестко закодированного списка, развертывает компоненты в целевой системе и устанавливает необходимые разрешения. После завершения процесса развертывания демон запускается и все временные установочные файлы удаляются.
Закрепление импланта в системе достигается путем добавления конфигурационного «plist»-файла с инструкциями по запуску в папку /Library/LaunchDaemons. Все важные настройки (например, адреса управляющих серверов, управляющих номеров телефонов и т.п.) хранятся в файле с именем «84C.dat» или «PkgConf», находящемся в бандле основного модуля. Эти настройки могут быть удаленно изменены оператором. Данные имена файлов уже встречались в предыдущих версиях FinSpy для разных платформ, в том числе и для Android.
В следующей таблице кратко описаны все модули, имена которых встречались в проанализированной версии импланта:
Имя модуля | Формат | Функциональность |
netwd | app | Фреймворк, используется для запуска основного модуля – FilePrep. |
FilePrep | app | Основной модуль приложения. |
MediaEnhancer | dylib | Запись аудио. |
.vpext | dylib | Перехват звонков VoIP. |
.hdutils | dylib | Набор утилит для сокрытия следов деятельности шпиона. |
keys | dylib | Клавиатурный шпион. |
SBUtils | dylib | Утилита для перехвата событий SpringBoard (приложение, отвечающее за главный экран в iOS). |
.chext | dylib | Перехват сообщений в мессенджерах. |
hdjm | неизвестен | Не представлен в найденных версиях, возможно это модуль для сокрытия следов джейлбрейка. |
Все внутренние строки во всех модулях, включая установщик, зашифрованы с помощью простого алгоритма на основе xor с использованием в качестве ключей следующих строк: «NSString», «NSArray», «NSDictionary», «ExtAudioFileRef».
Основной модуль импланта («FilePrep») содержит 7828 функций. Он контролирует все остальные модули, уведомляет сервер о своем состоянии, связываясь по протоколу HTTP или посредством SMS, и осуществляет прочие сервисные функции. Взаимодействие между модулями реализовано двумя различными способами. В первом случае используется системная оболочка CPDistributedMessagingCenter, во втором поднимается локальный HTTP сервер, обслуживающий запросы клиентов.
Модуль «.hdutils» предназначен для сокрытия следов действий импланта на устройстве. Прежде всего, он перехватывает все входящие SMS-сообщения. Он анализирует текст в поисках определенного содержимого и скрывает уведомления для таких сообщений. Затем он отправляет их в основной модуль через CPDistributedMessagingCenter (оболочку поверх существующих средств обмена сообщениями в операционной системе, которая обеспечивает клиент-серверное взаимодействие между различными процессами с использованием простых сообщений и словарей). Еще один шаг сокрытия состоит в перехвате функции «CLCopyAppsUsingLocation» для удаления основного модуля импланта из отображаемого списка приложений, используемых в настройках сервиса геолокации.
Модуль «.chext» нацелен на мессенджеры и способен перехватывать их функции для извлечения практически всех доступных данных: содержимого сообщений, фотографий, геолокации, контактов, имен групп и т. д. Модуль атакует следующие мессенджеры:
- Facebook Messenger (com.facebook.Messenger);
- Wechat (com.tencent.xin);
- Skype (com.skype.skype/com.skype.SkypeForiPad);
- Threema (ch.threema.iapp / ch.threema.iapp.ThreemaShareExtension);
- InMessage (com.futurebits.instamessage.free);
- BlackBerry Messenger (com.blackberry.bbm1);
- Signal (org.whispersystems.signal).
Собранные данные отправляются на локальный сервер, развернутый основным модулем.
Модуль «keys» ориентирован на другой способ сбора информации о введенных пользователем данных. Он включает множество хуков, которые перехватывают каждый набранный символ. Данный модуль содержит несколько перехватчиков как для момента введения пароля для разблокировки устройства, так и для процесса смены пароля. Перехваченный пароль передается на страницу «keys.html» на локальном сервере, аналогично модулю «.chext».
Модуль «MediaEnhancer» предназначен для записи звонков. Он осуществляет перехват системных функций в демоне «mediaserverd», связанных с обработкой вызовов. Модуль запускает экземпляр локального HTTP-сервера на порту 8889, инициализируя собственный вариант класса VoIPHTTPConnection. Этот класс содержит обработчик для запросов к localhost/voip.html, которые могут быть сделаны другими компонентами.
Модуль «.vpext» реализует более 50 перехватов функций, используемых для вызовов VoIP, совершаемых различными мессенжерами, среди которых:
- WhatsApp;
- LINE;
- Skype (включая независимую версию Skype для iPad);
- Viber;
- WeChat;
- KakaoTalk;
- BlackBerry Messenger;
- Signal.
Эти перехваты позволяют записывать обрабатываемые вызовы VoIP. Для этого они отправляют POST-запрос c метаинформацией о вызове на HTTP-сервер, ранее развернутый компонентом MediaEnhancer, который и начинает запись.
Android
Имплант Android имеет функциональность, аналогичную версии для iOS, но он также способен получать права суперпользователя на нерутированном устройстве, используя эксплойт DirtyCow, содержащийся в самом импланте. Образцы Android имплантов FinSpy известны уже несколько лет. На основании данных сертификата исследованной версии можно предположить, что образец был собран примерно в июне 2018 года.
Функциональность импланта Android вряд ли сильно изменится, учитывая тот факт, что большинство параметров конфигурации одинаковы в старых и новых версиях. Разнообразие доступных настроек позволяет адаптировать поведение импланта для каждой жертвы. Например, операторы могут выбирать предпочтительные каналы связи или автоматически отключать передачу данных, когда жертва находится в режиме роуминга. Все данные конфигурации для зараженного устройства Android (включая адрес сервера управления) встроены в имплант заранее для использования при развертывании на устройстве, но некоторые параметры могут быть изменены оператором удаленно. Данные конфигурации хранятся в сжатом формате, разбитые на набор файлов в каталоге assets apk-файла импланта. После извлечения всех фрагментов данных и построения файла конфигурации можно получить все значения конфигурации. Для каждого конфигурационного параметра в файле последовательно хранятся его тип (в виде хэша), размер и непосредственно значение.
Среди настроек можно выделить такие, как идентификатор устройства, адрес прокси-сервера, к которому следует подключаться, порт прокси-сервера, номер телефона, с которого можно ожидать обновление конфигурации, уникальный идентификатор установленного импланта.
Как и в случае с имплантом для iOS, версию для Android можно установить вручную, если злоумышленник имеет физический доступ к устройству, а также с помощью векторов удаленного заражения: SMS-сообщений, электронной почты или WAP Push. После успешной установки имплант пытается получить права root, проверив наличие известных рутирующих модулей SuperSU и Magisk и запустив их. Если никаких утилит нет, имплант дешифрует и выполняет эксплойт DirtyCow, который находится внутри вредоносной программы. Если ему удастся успешно получить root-доступ, имплант настраивает политику SELinux таким образом, чтобы получить полный доступ к устройству и сохранить права root. Если он использовал SuperSU, имплант изменяет настройки SuperSU так, чтобы тот не выводил никаких уведомлений, меняет срок выданных разрешений на бессрочный и настраивает SuperSU на автозапуск после перезагрузки устройства. Он также удаляет все возможные логи, включая логи SuperSU.
Имплант обеспечивает доступ к такой информации, как контакты, SMS / MMS-сообщения, календари, местоположение GPS, изображения, файлы в памяти и записи телефонных звонков. Все отфильтрованные данные передаются злоумышленнику с помощью SMS-сообщений или через Интернет (местоположение сервера C2 хранится в файле конфигурации). Персональные данные, в том числе контакты, сообщения, аудио и видео, также извлекаются из самых популярных мессенджеров. Каждый из целевых мессенджеров имеет свой собственный модуль обработки, однако API вызовов к данным модулям унифицировано, что позволит в случае необходимости добавлять новые обработчики для других мессенджеров. Ниже представлен жестко закодированный список поддерживаемых мессенджеров, найденный в импланте:
Имя пакета | Название приложения |
com.bbm | BBM (BlackBerry Messenger) |
com.facebook.orca | Facebook Messenger |
com.futurebits.instamesssage.free | InstaMessage |
jp.naver.line.android | Line Messenger |
org.thoughtcrime.securesms | Signal |
com.skype.raider | Skype |
org.telegram.messenger | Telegram |
ch.threema.app | Threema |
com.viber.voip | Viber |
com.whatsapp |
Сначала имплант, используя жестко закодированное имя пакета, проверяет, установлен ли на устройстве целевой мессенджер и предоставлен ли root-доступ. Если условия выполнены, база данных мессенджера подготавливается к извлечению данных – при необходимости она расшифровывается с помощью закрытого ключа, хранящегося в приватном каталоге мессенджера, после чего из базы можно извлечь любую информацию:
Также собирается вся информация о пользователе и все медиа-файлы.
Инфраструктура
Импланты FinSpy контролируются через терминал оператора (FinSpy Agent). По умолчанию при активации все импланты подключаются к анонимным прокси-серверам FinSpy (также называемым FinSpy Relays), предоставляемым вендором. Это сделано для того, чтобы скрыть реальное местоположение главного сервера FinSpy Master. Как только зараженная целевая система появляется в сети, она посылает сигнал прокси-серверу FinSpy Relay. Прокси-сервер обеспечивает связь между целями и главным сервером. Главный сервер FinSpy Master управляет всеми целями и терминалами и хранит собранные данные. На основании расшифрованных файлов конфигурации наши эксперты смогли найти различные прокси-сервера, используемые зараженными устройствами, и вычислить их географическое местоположение. Большинство обнаруженных прокси-серверов сосредоточено в Европе, но некоторые из них находятся в Юго-Восточной Азии и США.
Заключение
FinSpy Mobile для iOS и Android – это современные вредоносные шпионские инструменты с разнообразными функциональными возможностями. Набор опций конфигурации, предоставляемый вендором в своем продукте, позволяет операторам терминала FinSpy (FinSpy Agent) настраивать поведение каждого имплантата для конкретной жертвы и эффективно проводить наблюдение, похищая конфиденциальные данные, такие как местоположение пользователя, его контакты, историю звонков и т.д., в том числе и из всех наиболее популярных мессенджеров.
Имплант для Android обладает функциональностью, позволяющей получить root-права на нерутированном устройстве, используя известные уязвимости. Что касается версии для iOS, то, похоже, шпионское решение не предоставляет возможностей заражения для своих клиентов, поскольку их продукт имеет функционал для уничтожения следов использования общедоступных инструментов для взлома. Это может подразумевать необходимость наличия физического доступа к жертве в случае устройств без джейлбрейка. В то же время в импланте для iOS реализовано множество функций, которые мы ранее не наблюдали во вредоносных программах, разработанных для этой платформы.
С момента нашумевшей утечки исходных кодов в 2014 году разработчики FinSpy воссоздали значительную часть своих имплантов, расширили поддерживаемые функции (например, список поддерживаемых мессенджеров был значительно увеличен) и в то же время улучшили используемые алгоритмы шифрования и обфускации имплантов, затруднив их анализ и обнаружение, для того, чтобы сохранить свои позиции на рынке шпионского ПО.
В целом, в ходе исследований применение этих имплантов было зафиксировано примерно в 20 странах, однако вполне вероятно, что реальное число жертв намного выше, а география значительно шире.
Полный набор индикаторов компрометации, включая Yara-правила, доступен для подписчиков Kaspersky Intelligence Reporting service, по вопросам подписки обращайтесь на intelreports@kaspersky.com.
Обнаружены свежие образцы имплантов FinSpy для мобильных ОС iOS и Android