Как я чуть не подхватил вирус, пытаясь продать сапоги

Как я чуть не подхватил вирус, пытаясь продать сапоги


Я из тех людей, кто с наступлением осени старается проводить на улице меньше времени. В Москве это не сложно: ограничиваешься маршрутом от дома до офиса и обратно. Однако промозглая погода может причинить дискомфорт и в помещении, особенно если ваше рабочее место, как и моё, находится у окна, а каждый второй коллега, жалуясь на духоту, просит проветрить кабинет. Чтобы не впасть в хандру, этой осенью я обновил гардероб.

Размышляя о судьбе ненужных вещей, я прикидывал, что с ними делать: выкинуть, порезать на тряпки, отдать донашивать младшему брату? Но для одной вещи ни один из этих способов не годился: то были кожаные сапоги 44 размера приличного вида, но порядком мне надоевшие. Их я решил продать на Avito. Загрузил фотографии, указал ненастоящее имя (информационная безопасность же), выставил сапоги, пару других вещей и пошёл спать. Откуда мне было знать, что это обернётся длительным анализом приложения на предмет скрытых угроз?
[spoiler]


Приятная неожиданность
На следующий день после пары сомнительных звонков мне пришло интересное смс-сообщение со следующим содержимым:



Спустя пару дней я получил ещё одно похожее сообщение:



Удивившись, что кто-то каким-то образом смог перевести мне деньги по интернету (видимо, один я старый — пользуюсь до сих пор бумажными сберегательными книжками), я перешёл по ссылке в СМС.

После этого мне предложили скачать приложение для Android (apk-файл). Радостно скачав файл, я увидел следующее:



Вызывает доверие! Я с нетерпением захотел побыстрее всё установить и покончить с этим.
Но здесь, как обычно бывает, надоедливая операционная система Android почему-то не позволила мне запустить файл. «Да отдайте уже деньги!» — негодовал я. Пришлось перейти в настройки и включить какую-то опцию «Неизвестные источники», неужели телефон настолько глуп в 2018? Кстати, мой телефон — Xiaomi Remdi c Andoid 6.0.1 (примечание для технарей).



Далее последовала цепочка странных событий. Телефон продолжал сообщать о недостоверных источниках. Но ведь Avito — это достоверный источник! Пришлось погуглить, разобраться, как это обойти, и после отключить в настройках. Вскоре появился и некий антивирус, который я не устанавливал.



Наконец-то я увидел заветное стандартное окно установки — смотреть на разрешения в наше время нет смысла, сейчас даже блокнот не запустится, пока не дашь ему полный доступ к телефону. Радостный миг окончания установки приложения и ЗАПУСК! Я с нетерпением ждал обещанных денег. Дополнительно приложение запросило администраторские привилегии, с чем я радостно согласился. К сожалению, приложение странно себя вело и не хотело производить оплату, а вскоре и вовсе пропало из списка приложений на общем экране.





Позже я проверил на другом телефоне — Lenovo с Android 4.4.2 на борту. Список разрешений при установке оказался гораздо больше. И никакие Play Защита и Антивирус не мешают, необходимо только разрешить установку из недостоверных источников.





Альтруизм

Итак, к чему мы пришли:
  • На установку потрачено 20 минут времени.
  • Деньги я не получил.
Подумал, что проблема в ошибке кода, как это часто бывает у программистов. Решил выявить, какие ошибки возникают при работе приложения на моём телефоне, и отправить отчёт об этом разработчику.

Сейчас так мало осталось бескорыстных людей, один из них — я.

Понятно, что приложение такого типа должно работать при подключенном интернете, поэтому для начала я попробовал проанализировать трафик между телефоном и сервером приложения.

Техническая инструкция по настройке прокси
Можно прослушать интернет-трафик в любой точке, проходящей по пути от телефона до сервера, будь то домашний роутер, местный интернет-провайдер, магистральный интернет-провайдер или сервер приложения.

Проблемы:
  • Необходим доступ к данному оборудованию.
  • Требуется отделить трафик нужного приложения от остального.
  • В случае шифрования (а в 2018 шифруется уже всё) — необходимо знание ключа.
Я задумал пройти более классическим путём и настроить прокси на телефоне с прокси сервером на собственном ноутбуке. Чтобы нивелировать проблему шифрования, решил импортировать свой сертификат, а для отделения трафика приложения не стал запускать другие приложения. В качестве программы прокси-сервера выбрал burp suite . Настроил прокси-сервер и экспортировал сертификат на телефон.






После настройки специализированного программного обеспечения мне удалось увидеть, какие запросы приложение отправляет на сервер:



Как видно, данные не отправляются (в столбце IP указано значение «unknown host»), более того, их нельзя проанализировать из-за наличия дополнительного шифрования на уровне самого приложения. Судя по ошибке, телефон не мог определить IP-адрес сервера и его поддоменов https://*.sky-sync.pwпо его доменному имени.

Это могло означать только следующие варианты:
  • Доменное имя перестало существовать
    • Его заблокировал сам владелец.
    • Его заблокировал регистратор по жалобе.
  • Проблема с DNS-сервером
    • DNS-сервер не знает адреса, так как разработчик в production выкатил локальный DNS-адрес.
    • DNS-сервер специально блокировал данный запрос, что не удивительно в эпоху интернет-цензуры.
Чтобы проверить предположение о проблеме с DNS-сервером, я попробовал сделать запросы с разных крупных DNS-серверов: Google, Yandex, OpenDNS (обычно цензуре подвергаются местные DNS):



Здесь видно, что ни один из них ничего не знает о таком имени. Дальше я посмотрел whois-сведения о регистрации домена:



Любопытно: домен зарегистрирован, то есть, скорее всего, он не локальный, но поскольку домен не резолвится, возможно, он был заблокирован регистратором по жалобе (abuse). Но за что? Что плохого он сделал?

Чтобы выяснить, что же это всё-таки за приложение и как мне забрать свои деньги, я решил воспользоваться магией обратной разработкой.

Продолжение читайте на Хабре .
Автор: Сергей Зеленский, эксперт Лаборатории практического анализа защищенности компании «Инфосистемы Джет».
mobile malware безопасность мобильных приложений информационная безопасность реверс-инжиниринг
Alt text