JustPaste.it
User avatar
@anonymous · Sep 28, 2018

Хакер - Вам пришло MMS! Вскрываем малварь Asacub, которая ворует деньги у пользователей Android

https://t.me/hacker_frei

За последний месяц нашумевший вирус 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 может стать сообщником грабителей и выдать доступ к банковским счетам, фотографиям и любой персональной информации. Вряд ли кто-то из читателей попадется на такую удочку, но при случае не забывай информировать менее подкованных знакомых и близких!

Читайте ещё больше платных статей бесплатно: https://t.me/hacker_frei