- SHA1: ac633643a7130c5ced5672841dbc91ff92737ae6
Описание
Android.FakeUpdates.1.origin является трояном, встроенным в системное приложение ряда Android-устройств, отвечающее за обновление прошивки «по воздуху». Рассматриваемый образец встроен в программу /system/priv-app/ThirdPartyFOTA.apk (com.fota.wirelessupdate), в то время как существуют модификации, встроенные в другие приложения.
В процессе работы Android.FakeUpdates.1.origin выполняет разнообразные Lua-скрипты, с помощью которых способен загружать и устанавливать ПО без ведома пользователя.
Троян замаскирован под библиотеку com.google.android.gcm и имеет вредоносный сервис com.google.android.gcm.GCMBaseIntentService. В данном случае злоумышленники использовали имена пакета и класса платформы Google Cloud Messaging SDK, которая в настоящее время устарела и не применяется (её сменила платформа Firebase Cloud Messaging).
Принцип действия
Android.FakeUpdates.1.origin имеет следующий широковещательный приемник:
<receiver android:name="com.google.android.gcm.GCMBroadcastReceiver">
<intent-filter android:priority="1000000">
<action android:name="android.intent.action.BOOT_COMPLETED"/>
<action android:name="android.net.conn.CONNECTIVITY_CHANGE"/>
<action android:name="android.intent.action.TIMEZONE_CHANGED"/>
<action android:name="android.intent.action.ACTION_POWER_CONNECTED"/>
<action android:name="android.intent.action.ACTION_POWER_DISCONNECTED"/>
<action android:name="com.google.android.gcm.action"/>
</intent-filter>
</receiver>
При наступлении указанных в нем системных событий с использованием класса android.app.AlarmManager устанавливается задача на запуск троянского сервиса com.google.android.gcm.GCMBaseIntentService с периодичностью раз в час.
При создании сервиса GCMBaseIntentService из архивов license_01 или license_03 распаковываются двоичные Lua-файлы. Архив, из которого будут распакованы файлы, выбирается в зависимости от архитектуры процессора зараженного устройства:
Архитектура процессора | Распаковываемый файл |
---|---|
Armeabi | license_01 |
armeabi-v7a | license_01 |
arm64-v8a | license_03 |
x86 | license_01 |
x86_64 | license_03 |
Во время запуска сервиса происходит вызов функции BootEntry() троянского скрипта boot. При этом для выполнения Lua-скриптов используется инструмент luajava, который позволяет им использовать Java-классы, открывая доступ к Android API.
Реализованная на языке Lua программа периодически обращается к следующим C&C-серверам:
- hxxp[:]//statistics[.]flurrydata[.]com
- hxxp[:]//106[.]184.5.78
Также существует третий адрес сервера, который генерируется в зависимости от текущей даты:
- "http://boot.b" + md5("202207")[1:8] + ".net"
Параметр 202207 в данном случае составлен из значений текущего года и месяца.
Таким образом, если доступ к другим адресам будет утерян, Android.FakeUpdates.1.origin сможет автоматически подключаться к новым доменным именам, которые зарегистрируют злоумышленники.
Первый запрос к серверу имеет параметр action="check". В нем передается уникальный номер трояна, а также значение переменных его окружения (рабочие директории, конфигурация, версии скриптов boot и worker, версия вредоносного пакета com.google.android.gcm, версия Android SDK и т. д.).
В ответ Android.FakeUpdates.1.origin получает следующие команды:
- register
- upgrade
- info
Команда register
Троян получает UID-идентификатор пользователя и свою конфигурацию.
Команда upgrade
Троян скачивает с сервера и распаковывает ZIP-архив с двоичными Lua-скриптами, главный из которых обычно имеет имя worker. После скачивания они вызываются из скрипта boot. При этом в функции BootEntry() вызывается worker.WorkerEntry(), а в функции BootStart() вызывается worker.WorkerStart(). Среди загруженных в процессе анализа были скрипты, выполняющие установку и удаление приложений с помощью команд pm install -r и pm uninstall.
Команда info
Троян отправляет на C&C-сервер подробную информацию об устройстве, включая номер мобильного телефона:
- PhoneType — тип мобильного телефона (GSM, CDMA, SIP или NONE);
- DeviceID — IMEI-идентификатор устройства;
- PhoneNumber — номер мобильного телефона;
- NetworkCountry — идентификатор страны;
- NetworkOperatorName — имя мобильного оператора;
- NetworkType — тип мобильной сети;
- SimCountry - страна принадлежности SIM-карты;
- SimName - имя провайдера мобильного сервиса (SPN, Service provider Name);
- SimNumber — серийный номер SIM-карты, если он доступен.
Также передаются поля класса android.os.Build:
- MODEL — название модели;
- DISPLAY — идентификатор сборки ОС;
- TIME — время сборки операционной системы;
- ID — метка или номер списка изменений;
- BOARD — название основной платы;
- BOOTLOADER — версия загрузчика ОС;
- BRAND — имя бренда устройства;
- DEVICE — название промышленного образца;
- HARDWARE — название аппаратной платформы;
- MANUFACTURER — производитель устройства;
- PRODUCT — имя продукта;
- VERSION.RELEASE — версия ОС;
- VERSION.CODENAME — кодовое имя ОС;
- VERSION.SDK_INT — версия SDK ОС.
Работа невредоносной части приложения
Невредоносная часть приложения, непосредственно отвечающая за обновление прошивки, получает необходимые URL-адреса из метода GCMBaseIntentService.readFotaConfig(this). Этот метод вызывает функцию BootReadFotaConfig троянского срипта boot.
Загружаемые обновления устанавливаются как через соответствующий метод ОС Android RecoverySystem.installPackage(), так и при помощи команды pm install. Последняя при этом также может применяться для установки и удаления отдельных программ.
Поскольку получение URL-адресов происходит из троянской составляющей приложения, помимо обновлений прошивки может также загружаться и вредоносное ПО.
Известные адреса, к которым программа обращается для получения обновлений прошивки:
- hxxp[:]//app[.]fota.digitimetech[.]com
- hxxp[:]//s1[.]fotaservice[.]com
- hxxp[:]//112[.]124.58.101