Содержание статьи
Как показывает статистика, в России на сегодняшний день 70% мобильных устройств работают на Android. Среди наиболее распространенных вариантов атак на них: блокировка устройства с требованием выкупа, кибершпионаж и кража денег с банковских карт и счетов. Поскольку у каждого уважающего себя банка есть мобильное приложение для Android, неудивительно, что их пользователи становятся мишенями для злоумышленников.
Заражение
Итак, одним холодным осенним вечером ко мне на телефон поступает сообщение: «Вам пришло уведомление mms: fotowy.me/84rt от Оксана». Совершенно очевидно, что это вирус, потому что с Оксаной я давно не общаюсь. Конечно же, многим известно, что любые ссылки в сообщениях — это зло. Мне стало интересно, кто решил взломать мой BlackBerry и кто вообще сегодня на это ведется.
После перехода по ссылке открывается страница с предложением посмотреть фотографию той самой Оксаны.
Некогда размышлять — нажимаем! Сразу же начинается скачивание файла photo_34778_img.apk
. Как нас просят на сайте, разрешаем установку с неизвестных источников и устанавливаем apk. Вот как выглядит приложение «СМС-фото». В том, что фотография вдруг оказалась приложением, конечно, нет ничего странного.
Но мы все еще не увидели фотографию Оксаны! Нам ведь очень хочется ее посмотреть, поэтому запускаем «СМС-фото», и наконец-то Оксана предстает перед нами во всей красе! Или нет. Никакой фотографии так и не вышло, приложение исчезло из списка, в уведомлениях появилось «Системное приложение».
Через несколько секунд появляется окно «Системная неполадка». Звучит страшно.
Нажимаем «Перейти к настройкам». И соглашаемся «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. Видим исходники.
Но удобнее работать с ними в 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 с числом — это пополнение баланса телефона на указанную сумму. Для чего это может быть нужно? Вероятно — проверка на бомжа, есть ли счет в Сбербанке и есть ли на нем какие-то деньги.
После этого вирус начал стучать на свой сервер.
Дальше запускается окно «Перейти к настройкам».
Видим, что приложение объявляет себя приложением для работы с SMS.
И сразу начинает отправлять сообщения на неизвестные номера, одновременно отчитываясь на свой админский сервер.
Командный центр
Посмотрим теперь, куда отстукивает Asacub и перед кем отчитывается. Анализируя пакеты в Wireshark, видим, что Asacub отправляет запросы POST с зашифрованным телом на адрес http://whiteonapple.com
.
Что нам говорит WHOIS про этот домен?
Domain Name: WHITEONAPPLE.COM
Registrar WHOIS Server: whois.ordertld.com
Updated Date: 2018-08-23T18:08:07
Домен зарегистрирован 23 августа 2018 года. Существует уже больше месяца. Посмотрим теперь, что нам скажет сервер самого хозяина (!) Asacub. Узнаем, какие порты открыты на нем, чтобы распознать ОС и используемые сервисы. Просканируем все его порты с помощью Nmap (в нашем случае ZenMap).
Что нам говорит вывод? На командном центре вируса стоит Debian и nginx. 80-й порт, скорее всего, нужен для получения отклика от ботов. На 443-м порте, который используется для HTTPS, стоит сертификат для http://vcdetfva5gnzbtby.onion
. И на парочке портов еще есть HTTP. Скорее всего, там и находится админка, билдер Asacub. Тяжело смотреть на админку, в которую не можешь зайти. Но на этом наши полномочия заканчиваются, как и наше расследование.
Что в итоге?
Сорок тысяч заражений каждый день банковским вирусом Asacub, который умеет:
- отправлять информацию об устройстве, в том числе списка контактов;
- управлять приложениями в телефоне;
- отправлять SMS на номера с командного центра либо со списка контактов с именем контакта в тексте и предложением перейти по ссылке;
- читать SMS и отправлять содержимое в командный центр.
Человек переходит по ссылке, устанавливает вирус. С помощью социальной инженерии Asacub заставляет пользователя выдать доступ к «Специальным возможностям». И все. Дальше начинается распространение вируса друзьям и отправка SMS на банковские номера, а с их помощью выполняется перевод на карты и счета мошенников.
Серверы с командным центром спокойно работают уже больше месяца. В целом убытки от киберпреступности по статистике к 2021 году составят около 6 триллионов долларов. Хочется задаться вопросом: почему наш любимый Роскомнадзор блокирует Telegram, порносайты и все остальное подряд миллионами, вместо того чтобы заблокировать десять серверов, которые приносят огромные убытки жителям страны? Получается, что о нас никто не позаботится, а авторам Asacub разрешено обворовывать ежедневно 40 тысяч человек.
Ни в коем случае нельзя забывать об элементарных правилах безопасности, иначе из друга и помощника Android может стать сообщником грабителей и выдать доступ к банковским счетам, фотографиям и любой персональной информации. Вряд ли кто-то из читателей попадется на такую удочку, но при случае не забывай информировать менее подкованных знакомых и близких!