aboutsummaryrefslogtreecommitdiff
path: root/README.md
blob: faad56eab946ce0652e43d0c4f37fe194fda9d5e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
Тестовое задание в Dr. Web на вакансию "Вирусный аналитик-стажёр Android"
=========================================================================

Во время выполнения тестового задания использовалось следующее ПО:

  * fernflower
  * dex2jar
  * jdgui

Задание 1
---------

Изучить `first-classes.dex`, найти вредоносный функционал и составить подробное
описание угроз (без копирования кода, своими словами).  

Решение
-------

Данное приложение (`com.creativemobi.DragRacing`) было инфицировано и, как я
понимаю, распространялось в виде APK на варезниках (приложение популярно,
разработчик на Google Play с пометкой «Лучший разработчик»).  На мой взгляд,
эта система инфицирования APK автоматическая и мало зависит от инфицируемого
приложения.  Вредоносный функционал: типичный «ботнет-клиент», отправляющий
дампы пришедших SMS и номеров телефонов входящих и исходящих звонков, а так же
выполняющий некий набор команд, приходящих из «командного пункта»
(lebar.gicp.net, бэкэнд на ASP.NET, домен в любой момент может поменяться,
конфиг со всеми необходимыми параметрами получается с «текущего» сервера).

Вредоносный функционал находится в пакете com.GoldDream.zj и хранит в себе три
класса:
- `zjReceiver` выполняет роль Android-ресивера, который вызывается при
  описанных в AndroidManifest'е экшенах: обрабатываются экшены получения SMS и
  звонков (`android.intent.action.NEW_OUTGOING_CALL`,
  `android.provider.Telephony.SMS_RECEIVED`, и аналогичные для получения
  звонков и отправления SMS), таким образом все SMS и номера дампаются в два
  файла, замаскированные под файлы того приложения, которое было инфицировано.
  Также обрабатывается экшен BOOT для запуска главного сервиса при старте ОС.

- `zjService` — сервис, выполняющий операции каждые n минут (по умолчанию 3),
  пришедшие из «командного пункта»:
    * команда «Позвонить» по указанному в аргументе с сервера номеру,
    * команда «Отправить SMS»,
    * команды «Удалить приложение» и «Установить приложение» (вызывая менеджер пакетов Android),
    * команда «Отправить локальный файл».
  Каждые n минут он также отправляет сдампленные звонки и SMS и чистит дампы и
  пытается зарегистрировать устройство в своей системе на основании IMEI,
  серийного номера SIM, юзерагента встроенного в Android Webkit'а и IMSI.

- `UploadFiles` — хелпер для загрузки файлов а-ля загрузка файлов в HTML-форму
  «командного пункта».

Задание 2
---------

Изучить `second-classes.dex`, найти вредоносный функционал и составить подробное
описание угроз (без копирования кода, своими словами).  

Решение
-------

Более качественно написанный ботнет-клиент, чем в задании task #1,
специализирующийся на SMS.  Вредоносный функционал: отправляет контакты в
XML-формате на CnC-сервер (load-date.ru), хранит входящие и исходящие SMS в
своей sqlite-БД, данные из которых периодически отправляет на сервер и чистит.
Отлавливает BOOT-экшн для запуска сервиса, который в свою очередь настраивает
AlarmManager на выполнение вышеописанных действий через некоторое время. Так
как используется AlarmManager, то телефон может нормально «засыпать», в отличие
от реализации «задержки» с помощью sleep в task #1.  С сервера приходят задания
на отправку сообщений на короткие номера, для подтверждения парсятся входящие
смски с помощью заранее написанных регулярок и отправляются обратно для
подтверждения (почему-то автор малвари назвал это «логикой каптчи»).  Сервисные
сообщения о подписках и платных услугах специально скрываются от пользователя.
Если я правильно понял, то при запуске приложения пользователя заспамливают
просьбой разрешить стать «администратором устройства» этому приложению.

Задание 3
---------

Задание для `test.apk`: приложение запрашивает пароль, необходимо его узнать.

Решение
-------

"Ninja 300"