BusyGasper – недружелюбный шпион

Содержание 

В начале 2018 года наша технология обнаружения мобильных вторжений выявила подозрительный Android-образец, который, как выяснилось, принадлежал к неизвестному семейству шпионского ПО. Дальнейшее расследование показало, что зловред, которому мы дали название BusyGasper, имеет некоторые особенности, необычные для этого вида угроз. С технической точки зрения, образец является уникальным шпионским имплантом с такими нестандартными функциями, как слежка за датчиками устройства (включая датчики движения), возможность обхода системы энергосбережения «Doze» и невероятно широкий протокол – около ста команд. Как и любое современное шпионское ПО под Android, он также может извлекать данные из приложений обмена сообщениями (WhatsApp, Viber, Facebook). Более того, у BusyGasper есть функциональность кейлоггера – зловред обрабатывает каждое касание пользователя к экрану, анализирует координаты касаний, сопоставляет их с заданными величинами и таким образом вычисляет, какой символ ввел пользователь.

Зловред имеет многокомпонентную структуру и может скачивать дополнительный вредоносные инструменты и обновления с C&C, который, как оказалось, является FTP-сервером, предоставляемым российским хостинговым сервисом Ucoz. Стоит отметить, что BusyGasper поддерживает протокол IRC – это редкость для Android-зловредов. И наконец, зловред может использовать электронный почтовый ящик злоумышленников в качестве командного центра: после авторизации он анализирует письма в специальной папке на наличие команд, а также может сохранять вредоносную нагрузку на устройство из вложений электронной почты.

Текущая операция BusyGasper активна примерно с мая 2016 года до настоящего времени.

Вектор заражения и жертвы

При поиске вектора заражения мы не обнаружили следов фишинга или каких-либо других распространенных путей проникновения. Но некоторые признаки, такие как наличие скрытого меню для управления оператором, указывают на ручное заражение – злоумышленники устанавливают зловред, используя физический доступ к устройству жертвы. Это объясняет такое мало число жертв – их менее десяти, и все они расположены в России.

Заинтересовавшись, мы продолжили поиск и нашли еще несколько зацепок, которые раскрывают некоторую информацию о владельцах зараженных устройств. Несколько TXT-файлов с командами, находящиеся на FTP-сервере злоумышленников, содержат в именах идентификаторы жертв, которые, вероятно, были добавлены злоумышленниками:

CMDS10114-Sun1.txt
CMDS10134-Ju_ASUS.txt
CMDS10134-Tad.txt
CMDS10166-Jana.txt
CMDS10187-Sun2.txt
CMDS10194-SlavaAl.txt
CMDS10209-Nikusha.txt

Некоторые из них похожи на русские имена: Jana, SlavaAl, Nikusha.

Анализ дампа FTP-сервера выявил наличие в нем компонента прошивки ASUS – это указывает на интерес злоумышленника к устройствам этого производителя, а также объясняет, почему строка ‘ASUS’ содержится в идентификаторе жертвы CMDS10134-Ju_ASUS.txt.

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

Файл из почты Тип Описание
lock Текст Лог-файл
ldata sqlite3 Сведения о местоположении устройства на основе сетевых данных (cell_id)
gdata sqlite3 Сведения о местоположении устройства на основе GPS-координат
sdata sqlite3 SMS-сообщения
f.db sqlite3 Сообщения Facebook
v.db sqlite3 Сообщения Viber
w.db sqlite3 Сообщения WhatsApp

Также в числе собираемых данных были сообщения SMS-банкинга, которые указали на наличие у одной из жертв счета с суммой более 10 тысяч долларов. При этом, насколько мы знаем, стоящие за данной кампанией злоумышленники не заинтересованы в краже денег.

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

Техническая информация

Ниже приведена метаинформация по найденным образцам:

Сертификат MD5 Модуль Версия
Serial Number: 0x76607c02
Issuer: CN=Ron
Validity: from = Tue Aug 30 13:01:30 MSK 2016
to = Sat Aug 24 13:01:30 MSK 2041
Subject: CN=Ron
9e005144ea1a583531f86663a5f14607 1
18abe28730c53de6d9e4786c7765c3d8 2 2.0
Serial Number: 0x6a0d1fec
Issuer: CN=Sun
Validity: from = Mon May 16 17:42:40 MSK 2016
to = Fri May 10 17:42:40 MSK 2041
Subject: CN=Sun
9ffc350ef94ef840728564846f2802b0 2 v2.51sun
6c246bbb40b7c6e75c60a55c0da9e2f2 2 v2.96s
7c8a12e56e3e03938788b26b84b80bd6 2 v3.09s
bde7847487125084f9e03f2b6b05adc3 2 v3.12s
2560942bb50ee6e6f55afc495d238a12 2 v3.18s

Интересно, что значение поля Issuer «Sun» из сертификата соответствует идентификаторам зараженных устройств «Sun1» и «Sun2» с FTP-сервера; возможно, это тестовые устройства.

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

Первый (стартовый) модуль

Первый модуль, который устанавливался на целевом устройстве, мог контролироваться по протоколу IRC и позволял устанавливать другие компоненты путем загрузки вредоносного функционала с FTP-сервера:

Команда @install

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

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

Имя команды Описание
@stop Остановить IRC-сервис
@quit System.exit(0)
@start Запустить IRC-сервис
@server Изменить используемый IRC-сервер (по умолчанию «irc.freenode.net»), порт – всегда 6667
@boss Изменить командный nickname в IRC (по умолчанию «ISeency»)
@nick Изменить nickname импланта в IRC
@screen Отправлять отчет о каждом включении экрана (вкл/выкл)
@root Использовать root-функциональность (вкл/выкл)
@timer Установить временной интервал запуска IRC-сервиса
@hide Скрыть иконку импланта
@unhide Сделать иконку импланта видимой
@run Выполнить указанную shell-команду
@broadcast Послать команду второму модулю
@echo Записать указанное сообщение в лог
@install Загрузить и скопировать указанный компонент в системную директорию

Имплант использует сложный механизм коммуникации между компонентами, основанный на Intent:

Примерная схема коммуникации между компонентами BusyGasper

Второй (главный) модуль

Этот модуль записывает лог исполнения команд в файл с названием «lock», который впоследствии отправляется злоумышленникам. Вот фрагмент такого файла:

Журнал с указанной командой

Лог-файлы могут загружаться на FTP-сервер и отсылаться на электронную почту злоумышленника, также есть возможность пересылать лог через SMS-сообщения на номер злоумышленника.

Как видно на скриншоте выше, в зловреде представлен собственный синтаксис команд, которые состоят из комбинаций символов, а символ «#» используется как разделитель. Полный список всех возможных команд с описаниями доступен в Приложении II.

Зловред обладает всеми функциями современного шпионского ПО для Android. Ниже приведено описание самых примечательных из них:

  • Имплант способен шпионить за всеми доступными датчиками устройства и вести журнал регистрируемых событий. Более того, есть специальный обработчик данных акселерометра, который может вычислять и логировать скорость передвижения устройства:

    Эта функция используется, в частности, командой «tk0», которая выключает звук на устройстве, отключает автоматическую блокировку клавиатуры, отключает подсветку экрана, использует wakelock и прослушивает датчики устройства. Это позволяет зловреду незаметно выполнять любые бэкдор-действия, не давая пользователю знать, что устройство находится в активном режиме. Как только владелец берет устройство в руку, имплант распознает событие движения и выполняет команды «tk1» и «input keyevent 3».

    Первая отключает все результаты действия команды «tk0», а вторая – это shell-команда, которая симулирует нажатие кнопки ‘home’, в результате сворачиваются все активные окна, чтобы пользователь ничего не заподозрил.

  • Скрытое от пользователя включение служб геолокации в настройках безопасности для отслеживания местонахождения устройства:
  • Управление имплантом через электронную почту. Зловред может авторизоваться в электронном почтовом ящике злоумышленников, анализировать письма в специальной папке «Cmd» на наличие команд, а также сохранять полезные нагрузки на устройство из вложений электронной почты.

    Обращение к папке Cmd в почтовом ящике злоумышленника

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

  • Экстренные SMS-команды. Если входящее SMS-сообщение содержит одну или более из следующих магических строк – » 2736428734″ или » 7238742800″ – то зловред выполняет определенную последовательность команд:

Реализация кейлоггера

Кейлоггер реализован оригинальным способом.

Сразу после активации зловред создает в новом окне элемент TextView со следующими параметрами:

Все эти элементы обеспечивают сокрытие элемента от пользователя.

Затем зловред добавляет onTouchListener в элемент TextView и может обрабатывать каждое касание пользователя.

Интересно, что есть особый список activity, касания в которых игнорируются:

ui.ConversationActivity
ui.ConversationListActivity
SemcInCallScreen
Quadrapop
SocialPhonebookActivity

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

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

Ручной доступ и меню оператора

Существует скрытое меню для управления имплантом, скорее всего, оно создано для ручного контроля зараженного устройства оператором. Для активации этого меню нужно вызвать с зараженного устройства номер 9909:

Сразу после этого на дисплее устройства появится скрытое меню:

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

Инфраструктура

FTP-сервер

Злоумышленники используют ftp://213.174.157[.]151/ в качестве командного сервера. Этот IP-адрес принадлежит бесплатному российскому хостинг-сервису Ucoz.

Файл Описание
CMDS*.txt Текстовые файлы с командами на выполнение
supersu.apk Утилита SuperSU (eu.chainfire.supersu)
246.us
us.x
Бинарные ELF-файлы SuperSU
supersu.cfg
supersu.cfg.ju
supersu.cfg.old
Конфигурационные файлы SuperSU, предоставляющие импланту root-права
bb.txt ELF-файл BusyBox v1.26.2
bdata.xml Конфигурационный файл для исключения компонентов импланта из контроля за энергосбережением Doze
bdatas.apk Основной модуль импланта
com.android.network.irc.apk Стартовый модуль импланта
MobileManagerService.apk Системный компонент из прошивки ASUS (не заражен)
mobilemanager.apk Поврежденный архив
privapp.txt По-видимому, список системных приложений (включая шпионские компоненты) с одного из зараженных устройства
run-as.x
run-as.y
ELF-файл инструмента запуска от имени других пользователей

Фрагмент файла supersu.cfg – конфигурационного файла SuperSU для компонентов импланта и утилиты busybox:

Эти конфигурации позволяют импланту незаметно использовать все root-права.

Содержимое файла bdata.xml:

Файл может быть добавлен в директорию /system/etc/sysconfig/, чтобы внести в белый список указанные компоненты импланта и оградить их от действия системы энергосбережения батареи.

Учетная запись электронной почты

Злоумышленники используют учетную запись Gmail, ее адрес и пароль указаны прямо в коде импланта:

Учетная запись содержит извлеченные данные жертв и директорию «cmd» с командами для зараженных устройств.

Приложение I: Индикаторы заражения

MD5

9E005144EA1A583531F86663A5F14607
18ABE28730C53DE6D9E4786C7765C3D8
2560942BB50EE6E6F55AFC495D238A12
6C246BBB40B7C6E75C60A55C0DA9E2F2
7C8A12E56E3E03938788B26B84B80BD6
9FFC350EF94EF840728564846F2802B0
BDE7847487125084F9E03F2B6B05ADC3

Командный сервер

ftp://213.174.157[.]151/

Приложение II: Список всех возможных команд

Указанные значения действительны для последней наблюдаемой версии (v3.18s).

Десятичное значение Символ Описание
33 ! Прервать выполнение предыдущей команды
36 $ Сделать скриншот
48 0 Выполнить следующие shell-команды:
rm c/*; rm p/*; rm sdcard/Android/system/tmp/r/*
63 ? Записать в лог информацию об устройстве и метаинформацию импланта
66(98) B(b) Транслировать указанную команду другому компоненту
67(99) C(c) Установить таймер на выполнение указанной команды
Отладка
68(100) 65(97) D(d) A(a) Записать в лог последние 10 задач, получаемые через API getRecentTasks
68(100) 83(115) D(d) S(s) Записать в лог информацию о датчиках устройства (датчик движения, температуры воздуха и давления и т.д.)
68(100) 84(116) D(d) T(t) Внести в журнал трассировку стека и информацию о потоке
GPS-модуль
101 e Транслировать команду внешнему GPS-модулю
71(103) G(g) Отслеживание местоположения по GPS/сети
Взаимодействие с операторами
73(105) 102 114 I(i) f r Скачать указанный файл с FTP-сервера (по умолчанию – файл CMDS с командами)
73(105) 102 115 I(i) f s Загрузить на сервер эксфильтрованные данные
73(105) 73(105) I(i) I(i) Запустить/остановить IRC-сервис
73(105) 76(108) I(i) L(l) Отправить текущее местоположение через IRC
73(105) 77(109) I(i) M(m) Отправить указанное сообщение через IRC
73(105) 82(114) I(i) R(r) Считать команды из почтового ящика
73(105) 83(115) I(i) S(s) Отправить указанный файл или все собранные данные почтовым сообщением с UID в теме
Сетевая геолокация
76(108) L(l) Получить информацию о текущем cell_id (базовой станции)
Функции камеры
77(109) 99 M(m) c Сделать фото
77(109) 108 M(m) l Записать в лог информацию о доступных камерах
77(109) 114 97 M(m) r a Начать/закончить запись аудио (по умолчанию с длительностью 2 минуты)
77(109) 114 98 M(m) r b Начать/закончить запись аудио с указанной длительностью
77(109) 114 44(114) M(m) r ,(r) Начать запись с указанными параметрами (позволяет выбрать конкретный микрофон и т.д.)
77(109) 114 115 M(m) r s Закончить предыдущую запись
77(109) 114 116 M(m) r t Назначить длительность записи по умолчанию
77(109) 118 M(m) v Снять видео с указанной длительностью и качеством
Общие функции
79(111) 102 O(o) f Принудительно остановить все сервисы импланта, отключить ресиверы
79(111) 110 O(o) n Запустить основной сервис импланта со всеми компонентами
80(112) P(p) Найти указанные изображения на устройстве и масштабировать их с помощью API-функции «inSampleSize»
81(113) Q(q) Остановить основной сервис импланта
82(114) R(r) Выполнить указанную shell-команду
Параметры SharedPreferences
83(115) 33 S(s) ! Вкл/выкл скрытое меню оператора
83(115) 61 S(s) = Управление SharedPreferences (установить/удалить указанное значение)
83(115) 98 S(s) b Вкл/выкл отправку SMS после загрузки устройства
83(115) 99 S(s) c Установить логическое значение «cpyl» в SharedPreferences
83(115) 100 S(s) d Установить логическое значение «dconn»
83(115) 101 S(s) e Вкл/выкл периодическое переподключение к сети
83(115) 102 S(s) f Установить период обновления местонахождения по GPS
83(115) 105 S(s) i Установить логическое значение «imsg» в SharedPreferences
83(115) 108 97 S(s) l a Вкл/выкл логирование текущей activity
83(115) 108 99 S(s) l c Вкл/выкл отправка снятых фото и видео оператору
83(115) 108 102 S(s) l f Вкл/выкл отправка всех изменений базы данных мессенджера Facebook
83(115) 108 108 S(s) l l Вкл/выкл логирования истории браузера
83(115) 108 116 S(s) l t Вкл/выкл отправка всех изменений базы данных кэша мессенджера Telegram
83(115) 108 118 S(s) l v Вкл/выкл отправка всех изменений базы данных мессенджера Viber
83(115) 108 119 S(s) l w Вкл/выкл отправка всех изменений базы данных мессенджера WhatsApp
83(115) 109 S(s) m Вкл/выкл отправку логов через SMS
83(115) 110(112) S(s) o(p) Назначить телефонный номер оператора (для отсылки SMS-сообщений с логами)
83(115) 113 S(s) q Установить режим остановки импланта (полностью или только основного сервиса)
83(115) 114 S(s) r Вкл/выкл выполнение sell-команд с root-правами
83(115) 115 S(s) s Вкл/выкл логирование состояния экрана
83(115) 116 S(s) t Вкл/выкл логирование кейлоггинга и число соответствующих скриншотов
83(115) 117 S(s) u Вкл/выкл режим отладки с логированием информации о системных потоках
83(115) 120 S(s) x Использовать соединение к FTP через busybox или через Socket API (по умолчанию)
Управление сенсорами и дисплеем
84(116) 98 T(t) b Вкл/выклподсветкаэкрана
84(116) 100 T(t) d Вкл/выкл сетевые данные (интернет)
84(116) 75(107) 48 T(t) K(k) 0 Выключить звук устройства, отключить яркость, отключить автоматическую блокировку клавиатуры, использовать wakelock и прослушивать сенсоры устройства.
84(116) 75(107) 49 T(t) K(k) 1 Отключить функции, установленные предыдущей командой
84(116) 75(107) 50 T(t) K(k) 2 Отключить автоматическую блокировку клавиатуры
84(116) 75(107) 51 T(t) K(k) 3 Записать в журнал «userActivity»
84(116) 115 48 T(t) s 0 Отключить прослушиватели датчиков устройства
84(116) 115 49 T(t) s 1 Зарегистрировать прослушиватель для указанного сенсора
84(116) 115 108 T(t) s l Записать в лог значение из файла /dev/lightsensor
84(116) 119 48 T(t) w 0 Отключить Wi-Fi
84(116) 119 49 T(t) w 1 Включить Wi-Fi
84(116) 119 108 T(t) w l Управление WifiLock
Общие бэкдор-команды
85(117) U(u) Монтировать директорию «system», cкачать полезную нагрузку и копировать ее туда. Исходя из комментариев в коде, эта функция может использоваться для обновления компонентов импланта.
87(119) W(w) Отправить SMS с указанным текстом на указанный номер
Обновления из новейшей версии
122 33 z ! Перезагрузить устройство
122 99 z c Сделать дамп журнала вызовов
122 102 z f p Отправить собранные данные на FTP-сервер
122 102 z f g Получить текстовый файл CMDS* и выполнить содержащиеся в нем команды
122 103 z g Получить местонахождение по GPS (без логов, только через Intent)
122 108 102 z l f Сделать дамп сообщений Facebook за указанный период
122 108 116 z l t Сделать дамп кэша Telegram
122 108 118 z l v Сделать дамп сообщений Viber за указанный период
122 108 119 z l w Сделать дамп сообщений WhatsApp за указанный период
122 110 z n Получить число всех SMS-сообщений
122 111 z o Установить режим звонка на беззвучный
122 112 z p Открыть указанный URL в WebView
122 114 z r Удалить все SMS-сообщения
122 116 z t Установить таймеры для всех внутренних сервисов
122 122 z z Удалить значения в SharedPreferences и перезапустить основной сервис
126 ~ Вкл/выкл расширенный режим логирования с SMS и UI

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

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

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