За последний месяц нашумевший вирус Asacub заразил более 200 тысяч пользователей Android. Он прилетел прямо ко мне в руки. Попробуем вместе заглянуть в его сердце и найти хозяина.

Как показывает статистика, в России на сегодняшний день 70% мобильных устройств работают на Android. Среди наиболее распространенных вариантов атак на них: блокировка устройства с требованием выкупа, кибершпионаж и кража денег с банковских карт и счетов. Поскольку у каждого уважающего себя банка есть мобильное приложение для Android, неудивительно, что их пользователи становятся мишенями для злоумышленников.

 

Заражение

Итак, одним холодным осенним вечером ко мне на телефон поступает сообщение: «Вам пришло уведомление mms: fotowy.me/84rt от Оксана». Совершенно очевидно, что это вирус, потому что с Оксаной я давно не общаюсь. Конечно же, многим известно, что любые ссылки в сообщениях — это зло. Мне стало интересно, кто решил взломать мой BlackBerry и кто вообще сегодня на это ведется.

После перехода по ссылке открывается страница с предложением посмотреть фотографию той самой Оксаны.

Страница fotowy.me/84rt
Страница fotowy.me/84rt

Некогда размышлять — нажимаем! Сразу же начинается скачивание файла photo_34778_img.apk. Как нас просят на сайте, разрешаем установку с неизвестных источников и устанавливаем apk. Вот как выглядит приложение «СМС-фото». В том, что фотография вдруг оказалась приложением, конечно, нет ничего странного.

Иконка приложения «СМС-фото»
Иконка приложения «СМС-фото»

Но мы все еще не увидели фотографию Оксаны! Нам ведь очень хочется ее посмотреть, поэтому запускаем «СМС-фото», и наконец-то Оксана предстает перед нами во всей красе! Или нет. Никакой фотографии так и не вышло, приложение исчезло из списка, в уведомлениях появилось «Системное приложение».

Уведомление «Системное приложение»
Уведомление «Системное приложение»

Через несколько секунд появляется окно «Системная неполадка». Звучит страшно.

Окно «Системная неполадка»
Окно «Системная неполадка»

Нажимаем «Перейти к настройкам». И соглашаемся «Use Системное приложение».

Окно «Use Системное приложение»
Окно «Use Системное приложение»

Установленное приложение банка сразу замечает что-то неладное (в отличие от нас).

Уведомление от приложения Сбербанка
Уведомление от приложения Сбербанка

Пытаемся запустить его, но оно тут же закрывается.

Окно с сообщением о вирусе
Окно с сообщением о вирусе

Оказывается, это никакая не фотография, а банковский троян Asacub! Антивирусы говорят то же самое.

Некоторые принципы работы Asacub уже были рассмотрены в исследовании «Лаборатории Касперского». Увы, множество людей не в курсе элементарной безопасности Android. Asacub заражает в день более 40 тысяч смартфонов.

Вот наиболее распространенные сообщения для заражения:

  • «Юзернейм, посмотри фотографию по ссылке»;
  • «Юзернейм, тебе пришло MMS-сообщение от Васи»;
  • «Юзернейм, интересует обмен Авито?»;
  • «Юзернейм, и тебе не стыдно после этого?!».

А теперь без шуток попробуем посмотреть подробнее, что за зверь Asacub.

 

Статический анализ. Декомпилируем вирус

Инструменты: Android Studio, JaDX

Статический анализ включает в себя декомпиляцию приложений и просмотр исходного кода для дальнейшего анализа действий вируса. Сначала воспользуемся JaDX для декомпиляции apk. Часто исходники могут быть кривыми, но для анализа этого достаточно. Скачиваем и устанавливаем.

$ ls -l
$ git clone https://github.com/skylot/jadx.git
$ cd jadx
$ ./gradlew dist

Запускаем графический JaDX.

$ ls -l
$ cd build/jadx/
$ bin/jadx-gui lib/jadx-core-*.jar

Выбираем File → Open → photoimg.apk. Видим исходники.

Исходники в JaDX
Исходники в JaDX

Но удобнее работать с ними в Android Studio. Сохраняем как проект и импортируем в Android Studio. Пробежимся по AndroidManifest.xml. Смотрим права приложения.

<uses-permission android:name="android.permission.READ_CONTACTS"/>
<uses-permission android:name="android.permission.SEND_SMS"/>
<uses-permission android:name="android.permission.READ_SMS"/>
<uses-permission android:name="android.permission.WRITE_SMS"/>
<uses-permission android:name="android.permission.RECEIVE_SMS"/>
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
<uses-permission android:name="android.permission.WAKE_LOCK"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.CALL_PHONE"/>
<uses-permission android:name="com.android.alarm.permission.SET_ALARM"/>
<uses-permission android:name="android.permission.BIND_ACCESSIBILITY_SERVICE"/>

Хоть они и очевидны для тех, кто понимает английский язык, пройдемся по ним.

  • READ_CONTACTS — чтение адресной книги.
  • SEND_SMS, READ_SMS, WRITE_SMS, RECEIVE_SMS — отправка, чтение, редактирование, получение SMS.
  • RECEIVE_BOOT_COMPLETED — получение информации о включении устройства для автозапуска.
  • WAKE_LOCK — отключение спящего режима.
  • READ_PHONE_STATE — получение информации об устройстве.
  • INTERNET — доступ в интернет.
  • CALL_PHONE — осуществление звонков.
  • SET_ALARM — использование будильника (для совершения периодических действий).
  • BIND_ACCESSIBILITY_SERVICE — для мониторинга событий в системе, запуска приложений, нажатий кнопок и прочего.

Посмотрим некоторые действия.

<activity android:name="com.bacon.accident.Hypothesize" android:showWhenLocked="true" android:turnScreenOn="true"/>

В Hypothesize.java находится код, который вызывает окно «Перейти к настройкам».

<service android:name="com.bacon.accident.DespiseFar" android:permission="android.permission.BIND_JOB_SERVICE" android:exported="true"/>

В DespiseFar.java — планирование задач с помощью JobScheduler. Используется для задания времени выполнения функции, отсрочки.

<receiver android:name="com.bacon.accident.King" android:permission="android.permission.BROADCAST_SMS">
  <intent-filter>
    <action android:name="android.provider.Telephony.SMS_DELIVER"/>
    <action android:name="android.provider.Telephony.SMS_RECEIVED"/>
    <action android:name=".STATUS"/>
  </intent-filter>
</receiver>

В King.java собственно получение и обработка SMS. Также Asacub парсит контакты для дальнейшей отправки им SMS.

Парсинг контактов
Парсинг контактов

Все данные, отправляемые на сервер, и строки в приложении шифруются. На сервер отправляется информация о телефоне, контакты. С сервера приходят команды для выполнения, номера для отправки SMS и тексты сообщений.

Зашифрованные строки
Зашифрованные строки

Дешифровка строк находится в f.java.

class f {
  private static final byte[] a = "8c70b3a3965".getBytes();
  private final byte[] b;
  f() {
    this.b = new byte[256];
    c(a);
  }
  f(String str) {
    this.b = new byte[256];
    c(str.getBytes());
  }
  private static f a(int i, int i2, int i3) {
    return new f("b32a67497e88");
  }
  static String a(String str) {
    return new String(a(7, 6, 5).b(str.getBytes()));
  }
  private void c(byte[] bArr) {
    int i;
    int i2 = 0;
    int length = bArr.length;
    byte[] bArr2 = new byte[256];
    for (i = 0; i < 256; i++) {
      this.b[i] = (byte) i;
      bArr2[i] = bArr[i % length];
    }
    i = 0;
    while (i2 < 256) {
      i = ((i + this.b[i2]) + bArr2[i2]) & 255;
      byte b = this.b[i];
      this.b[i] = this.b[i2];
      this.b[i2] = b;
      i2++;
    }
  }
  byte[] a(byte[] bArr) {
    int i = 0;
    byte[] bArr2 = new byte[bArr.length];
    int i2 = 0;
    int i3 = 0;
    while (i < bArr.length) {
      i3 = (i3 + 1) & 255;
      i2 = (i2 + this.b[i3]) & 255;
      byte b = this.b[i2];
      this.b[i2] = this.b[i3];
      this.b[i3] = b;
      bArr2[i] = (byte) (this.b[(this.b[i3] + this.b[i2]) & 255] ^ bArr[i]);
      i++;
    }
    return bArr2;
  }
  byte[] b(byte[] bArr) {
  return a(Base64.decode(bArr, 0));
  }
}

Видимо, используется Base64, но не будем пытаться дешифровать руками. Скопируем f.java в новый проект, запустим и выведем в консоль дешифрованную строку a.

String a = f.a("bQVMCZTJ8RucwuWP+ncPVMRzIkv9g/PXCauYXscZme2gUQL/3VmxUkOhO4Hj4EyFm4W7I3eO1wr9ZdxOhgiqbF1ox5veD9G3hJPy21Oo4UrF6xPBkefFDRSqI9Efyqp9HZVWDuOhz4WREtF558SOMI99GRBgj9kYMdxdJfJ+XHuiRro2V0E9Qy3rTels0lLRFT48xvL2KAKEpfaKbtZdxXwW+PFvn7r3Wy6XMK03n2m2c0PLMjHz3HvKWlZW1Dz5V1JzSYb6ck/SfT4eJJouna07iNY2ZpWsJAGvQc46hPJwIDVzu3Ofs6yv/e0iECNhzsnrxX3gWu0Qoh8Lfc0apwy1g8/3DVykz1q6udXbdsYXUuORaRKkmKL07b/iAqHSsNvpoOPsknRB");
System.out.print(a);

Вывелся наш текст.

Дешифрованная строка
Дешифрованная строка
 

Динамический анализ. Дебажим вирус

Инструменты: Genymotion, Android Studio, Wireshark, Nmap

Код может быть обфусцирован, и тогда при статическом анализе у нас возникнут трудности. В таких случаях на помощь приходит динамический анализ. Суть его в том, что мы будем изучать вирус в процессе исполнения приложения.

Готовим инструменты. Android Studio — для дебага. Genymotion — эмулятор для запуска apk. Wireshark — для анализа трафика и пакетов, передаваемых вирусом. Я разместила все вместе на экране, чтобы было видно одновременно и трафик, и процессы.

Подготовка инструментов
Подготовка инструментов

Устанавливаем приложение на наш эмулятор. Запускаем и смотрим, что говорит Android Studio.

Первым делом приложение хочет отправить SMS на номер 900 с текстом 502. Как говорится на сайте Сбербанка, отправка SMS с числом — это пополнение баланса телефона на указанную сумму. Для чего это может быть нужно? Вероятно — проверка на бомжа, есть ли счет в Сбербанке и есть ли на нем какие-то деньги.

Сообщение на номер 900
Сообщение на номер 900

После этого вирус начал стучать на свой сервер.

Перехваченный трафик в Wireshark
Перехваченный трафик в Wireshark

Дальше запускается окно «Перейти к настройкам».

Лог запуска кода для окна «Перейти к настройкам»
Лог запуска кода для окна «Перейти к настройкам»

Видим, что приложение объявляет себя приложением для работы с SMS.

Уведомление об изменении приложения SMS app
Уведомление об изменении приложения SMS app

И сразу начинает отправлять сообщения на неизвестные номера, одновременно отчитываясь на свой админский сервер.

Отправка сообщения 1
Отправка сообщения 1
Отправка сообщения 2
Отправка сообщения 2
 

Командный центр

Посмотрим теперь, куда отстукивает Asacub и перед кем отчитывается. Анализируя пакеты в Wireshark, видим, что Asacub отправляет запросы POST с зашифрованным телом на адрес http://whiteonapple.com.

Пакет POST-запроса в Wireshark
Пакет POST-запроса в Wireshark

Что нам говорит WHOIS про этот домен?

Domain Name: WHITEONAPPLE.COM
Registrar WHOIS Server: whois.ordertld.com
Updated Date: 2018-08-23T18:08:07

Домен зарегистрирован 23 августа 2018 года. Существует уже больше месяца. Посмотрим теперь, что нам скажет сервер самого хозяина (!) Asacub. Узнаем, какие порты открыты на нем, чтобы распознать ОС и используемые сервисы. Просканируем все его порты с помощью Nmap (в нашем случае ZenMap).

Вывод ZenMap 1
Вывод ZenMap 1
Вывод ZenMap 2
Вывод ZenMap 2

Что нам говорит вывод? На командном центре вируса стоит Debian и nginx. 80-й порт, скорее всего, нужен для получения отклика от ботов. На 443-м порте, который используется для HTTPS, стоит сертификат для http://vcdetfva5gnzbtby.onion. И на парочке портов еще есть HTTP. Скорее всего, там и находится админка, билдер Asacub. Тяжело смотреть на админку, в которую не можешь зайти. Но на этом наши полномочия заканчиваются, как и наше расследование.

 

Что в итоге?

Сорок тысяч заражений каждый день банковским вирусом Asacub, который умеет:

  • отправлять информацию об устройстве, в том числе списка контактов;
  • управлять приложениями в телефоне;
  • отправлять SMS на номера с командного центра либо со списка контактов с именем контакта в тексте и предложением перейти по ссылке;
  • читать SMS и отправлять содержимое в командный центр.

Человек переходит по ссылке, устанавливает вирус. С помощью социальной инженерии Asacub заставляет пользователя выдать доступ к «Специальным возможностям». И все. Дальше начинается распространение вируса друзьям и отправка SMS на банковские номера, а с их помощью выполняется перевод на карты и счета мошенников.

Серверы с командным центром спокойно работают уже больше месяца. В целом убытки от киберпреступности по статистике к 2021 году составят около 6 триллионов долларов. Хочется задаться вопросом: почему наш любимый Роскомнадзор блокирует Telegram, порносайты и все остальное подряд миллионами, вместо того чтобы заблокировать десять серверов, которые приносят огромные убытки жителям страны? Получается, что о нас никто не позаботится, а авторам Asacub разрешено обворовывать ежедневно 40 тысяч человек.

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

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

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

    Подписаться

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