Донецкий техникум промышленной автоматики

SMS-вірус під ОС Android або «Привіт :) Тобі фото ...»

  1. вступ
  2. 1. Підготовка
  3. 5. Dr Web проти вірусу
  4. 6. Реверс-інжиніринг

* Оригінальна картинка, нахабним чином витягнуті з ресурсів apk
[прим. apk - розширення файлу установки програми на ОС андроїд]

вступ


Несподівано, посеред робочого дня на мій старенький Sony Ericsson K320i приходить смс наступного змісту:
привіт [смайлик] тобі фото https: // m ** o * an.ru / oujr / 380688086 * 6 *
В якості відправника значився людина, з яким я вже деякий час не спілкуюся. Подивившись тест повідомлення і відмахнувшись від телефону зі словами «Черговий спам», я далі занурився в роботу.
Все б нічого, але через пару хвилин прийшло аналогічне повідомлення на другий телефон (Samsung Galaxy Gio). Номер відправника збігався.
Через 2 години зателефонував друг і попросив дати йому раду. Йому прийшло схоже смс від його начальника. Заспокоївши його фразою: «По засланні не переходь і буде тобі щастя», я вирішив, що потрібно розібратися в ситуації.

Домовленості 1) Технічно правильно називати цей «зловредів" не вірусом, а трояном . Автор навмисне пішов на дане хитрощі для спрощення. Заздалегідь прошу вибачення за це.
2) Автор в даній статті постарався поставити себе на місце звичайного користувача, випробувати і пережити все те, що який переживає він. Тому спеціалізовані технічні засоби не застосовуються, а методи боротьби обрані примітивні.

1. Підготовка


Поверхнево пошукавши в інтернеті інформацію, було встановлено, що посилання в смс повідомленні є нічим іншим, як адресою на завантаження apk файлу. А apk файл - вірусом «Trojan.SMSSend», що заражає мобільні пристрої під управлінням ОС Android. Головні завдання даного «зловредів» - перехоплювати управління пристроєм і використовувати його в своїх цілях: блокування вихідних дзвінків, відправлення повідомлень «з привітом» і інші дрібні капості.
Перейшовши за посиланням з браузера я благополучно отримав відповідь «403 Forbidden».

Зрозуміло, значить, варто фільтр по браузеру. Що ж, буду перевіряти «на кішках», як то кажуть.
Недовго думаючи, вирішив «покласти на вівтар науки» свій планшет Samsung Galaxy Tab 2. Зробивши бекап, зі спокійною совістю натиснув на кнопку «Очистити все». Про всяк випадок переконався, що на sim-карті немає грошей і приступив до установки.

2. Встановлення


Заходжу в настройки, в пункті меню «Невідомі пристрої», прибираю галочку «Дозволити установку додатків з інших джерел, крім Play Маркет».
Перейшовши за посиланням з смс-повідомлення, отримав попередження браузера, наступного характеру:

Погоджуюся і натискаю кнопку «Продовжити». Скочиляс додаток F0T0_ALB0M.apk:

Встановлюю. Жахаюся кількістю permission (дозволів). Операційна система люб'язно попереджає:
Ця програма може завдати шкоди пристрою Але я ж не шукаю легких шляхів, тому, «згнітивши серце», ставлю галочку «Я розумію, що це додаток може завдати шкоди».
процес установки
Коли додаток запитує права адміністратора, розумію, що це останній етап. Натискаю «Скасування», але діалог з'являється знову. Ех, була не була, буду йти до кінця, і натискаю «Включити».

3. Вірус-додаток


Сам додаток складається з однієї активують-картинки з приреченим кошеням. Напевно таким чином розробник намагався пожартувати.

У цьому місці, я трохи забіжу вперед (див. П.6) і приведу, код AndroidManifest.xml для кращого розуміння статті.
AndroidManifest.xml <? Xml version = "1.0&quot; encoding = "utf-8"?> <Manifest android: versionCode = "4" android: versionName = "4.0" android: installLocation = "internalOnly" package = "com.android. systgec "xmlns: android =" http://schemas.android.com/apk/res/android "> <uses-permission android: name =" android.permission.ACCESS_NETWORK_STATE "/> <uses-permission android: name =" android.permission.CALL_PHONE "/> <uses-permission android: name =" android.permission.CALL_PRIVILEGED "/> <uses-permission android: name =" android.permission.CHANGE_COMPONENT_ENABLED_STATE "/> <uses-permission android: name = "android.permission.INTERNET" /> <uses-permission android: name = "android.permission.READ_CONTACTS" /> <uses-permission android: name = "android.permission.WRITE_CONTACTS" /> <uses-permission android: name = "android.permission.READ_PHONE_STATE" /> <uses-permission android: name = "android.permission.PROCESS_OUTGOING_CALLS" /> <uses-permission android: name = "android.permission.MODIFY_PHONE_STATE" /> <uses-permission android: name = "andro id.permission.RECEIVE_BOOT_COMPLETED "/> <uses-permission android: name =" android.permission.RECEIVE_SMS "/> <uses-permission android: name =" android.permission.SEND_SMS "/> <uses-permission android: name = "android.permission.WAKE_LOCK" /> <uses-permission android: name = "android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android: name = "android.permission.SYSTEM_ALERT_WINDOW" /> <uses-permission android: name = "android.permission.GET_TASKS" /> <application android: label = "@ string / app_name" android: icon = "@ drawable / icon" android: manageSpaceActivity = ". ClearActivity" android: allowClearUserData = "false" android: allowBackup = "true"> <activity android: label = "@ string / app_name" android: name = ". AppActivity"> <intent-filter> <action android: name = "android.intent.action.MAIN" /> <category android: name = "android.intent.category.LAUNCHER" /> </ intent-filter> </ activity> <activity android: name = ". ClearActivity" /> <receiver android: name = ". SmsReceiver"> <intent -filter android: priority = "1000"> <action androi d: name = "android.provider.Telephony.SMS_RECEIVED" /> </ intent-filter> </ receiver> <receiver android: name = ". OnBootReceiver"> <intent-filter> <action android: name = "android. intent.action.BOOT_COMPLETED "/> <action android: name =" android.intent.action.QUICKBOOT_POWERON "/> <action android: name =" android.intent.action.USER_PRESENT "/> </ intent-filter> </ receiver> <receiver android: name = ". IncomingCallReceiver"> <intent-filter android: priority = "1000"> <action android: name = "android.intent.action.PHONE_STATE" /> </ intent-filter> </ receiver> <receiver android: name = ". OutCallReceiver"> <intent-filter android: priority = "1000"> <action android: name = "android.intent.action.NEW_OUTGOING_CALL" /> </ intent-filter> </ receiver> <receiver android: name = ". NetworkReceiver"> <intent-filter> <action android: name = "android.net.conn.CONNECTIVITY_CHANGE" /> <action android: name = "android.net.wifi.WIFI_STATE_CHANGED" /> </ intent-filter> </ receiver> <receiver android: name = ". AdminReceiver" android: permission = "android.permis sion.BIND_DEVICE_ADMIN "> <meta-data android: name =" android.app.device_admin "android: resource =" @ xml / policies "/> <intent-filter> <action android: name =" android.app.action. ACTION_DEVICE_ADMIN_DISABLED "/> <action android: name =" android.app.action.ACTION_DEVICE_ADMIN_DISABLE_REQUESTED "/> <action android: name =" android.app.action.DEVICE_ADMIN_ENABLED "/> </ intent-filter> </ receiver> <receiver android: name = ". ServiceController" /> <service android: name = ". SystemService" android: enabled = "true" /> <service android: name = ". DelService" android: enabled = "true" /> </ application> </ manifest>

У менеджері програм наш «зловредів» гордо іменується «Google Play».

4. Видалення?


Благополучно заразивши пристрій, переходжу до фази лікування. Спочатку пробую видалити додаток. Заходжу в «Менеджер програм» і бачу, що всі кнопки заблоковані.

Зрозуміло, значить, у додатку є права адміністратора і так просто видалити його не вийде. Не біда, зараз я їх заберу. Заходжу в пункт меню «Безпека» -> «Адміністратори пристрою» і прибираю галочку навпроти додатки.

Але, ні, не тут то було. Пристрій благополучно переходить в настройки управління WiFi і зависає. Довелося «прибивати» вікно налаштувань.

Далі хотілося вирішити питання «на корню», так би мовити, і скористатися загальним скиданням системи. Ну да, легко мені вибирати такий варіант - мої особисті дані в бекапе зберігаються.
А як же звичайні користувачі? У яких «раптово» улюблений телефон заразився вірусом. Адже вони навіть вихідного дзвінка знайомому «тижпрограммісту» не зроблять. Загалом, читерство це, не буду так робити.
Підсумок: штатними засобами нейтралізувати загрозу не вдалося. Підключаємо «важку артилерію».
Примітка для компаній

У подальших розділах використовується опис дій пов'язаних з використанням безкоштовних версій продуктів деяких компаній. Метою оповідання не є скарги на компанії або надані ними послуги.


5. Dr Web проти вірусу


Пам'ятаючи про хорошу лікує утиліту «Dr.Web CureIt!», Вирішив боротися з зловредів за допомогою аналога під Android. Заходжу на офіційний сайт і качаю безкоштовну версію антівірусника «Dr.Web для Android Light 9».
Встановлюю, по WiFi обновляю сигнатури.
Запускаю швидку перевірку - нічого.
Запускаю повну перевірку - теж нічого.

Я розчарований! Сумно зітхнувши, видаляю антивирусник.
UPD від 6.09.14. На даний момент антивирусник успішно пізнає цей зловредів під детектив Android.SmsBot.origin.165. Алгоритм видалення такої ж, як і при використанні Avast (див. Нижче).

5. Avast проти вірусу


Думка автора Ніколи особливо не любив антивирусник даної фірми. Особливо після історії про видалення файлу відповідає за протокол tcp / ip в Windows XP . Але, чим «чорт не жартує», встановимо.

Скачую і встановлюю версію «Avast-Mobile-Security-v3-0-7700».
При старті запускається експрес-сканування, яке ніяких вірусів в системі не знаходить.

Ну й добре, мозок підказав чергову ідею: ось є якийсь пункт меню «Управління додатками», а що якщо ...
Так, дійсно завантажився список додатків в системі.

Пункту «Видалити» немає. Тому, пробую зупинити додаток. Зупинилося.
Чекаю 2-3 секунди, додаток знову в роботі.
Гаразд, спробую з іншого боку. Запускаю примусову перевірку системи. О_о, виявлено шкідливе ПЗ. Натискаю «Усунути всі» [прим. як-то це звучить в дусі Дарта Вейдера або далеко]. Avast повідомляє, що видалити додаток не може, а потрібно спочатку відібрати права адміністратора у додатки. З'являється системний діалог:
Видалити всі дані з пристрою і повернути заводські настройки? Натисніть «Так» якщо згодні, або «Ні» для скасування
І відразу ж, поверх у цьому діалоговому вікні відкривається «нещасливе» вікно налаштувань wi-fi. Натискаю «Повернення», знову відкриваються настройки. Добре, хоч вікно налаштувань не зависає.

Знову на стежку читерства мене штовхають. Будемо шукати інше рішення ...

6. Реверс-інжиніринг


Подивимося в вихідний код програми, благо на Android це не така велика проблема. Багато всього цікавого ...
Наприклад, в класі SystemService вказано url сайту lamour.byethost5.com (дизайн-студія).
Але найбільше мені сподобався клас AdminReceiver, який є спадкоємцем системного класу DeviceAdminReceiver.
У цьому класі є перевизначення метод onDisableRequested , Який спрацьовує при відключенні адмінполномочій для цього додатка. Повністю заблокувати кнопки в системному діалозі можна, тому розробник вірусу пішов на хитрість, він змінив текст повідомлення на «Видалити всі дані з пристрою і повернути заводські настройки? Натисніть «Так» якщо згодні, або «Ні» для скасування »і рясно прикрив зверху настирливим вікном налаштувань.
Бінго. Значить тепер я сміливо зможу натиснути в даному діалоговому вікні «Видалити» і планшет буде «здоровий».

Післямова


Таким чином, виконавши повторно пункт 5 даної публікації (не зупиняючись на останньому кроці), вірус версії 4.0 (згідно маніфест-файлу) був переможений.
Чому не вдалося безпосередньо з налаштувань прибрати галочку адмінправ для додатка, а тільки використовуючи Avast? Швидше за все, варто чергова пастка з перевизначення методом.

висновки


Розробники вірусів знаходять все нові лазівки.
Але, так чи інакше, браузер і операційна система стали краще захищати користувачів.
Мені необхідно було натиснути 2 підтвердження і поставити галочку в налаштуваннях «Невідомі пристрої».
Будьте здорові, ви і ваші девайси!Quot; encoding = "utf-8"?
4. Видалення?
А як же звичайні користувачі?
Повністю заблокувати кнопки в системному діалозі можна, тому розробник вірусу пішов на хитрість, він змінив текст повідомлення на «Видалити всі дані з пристрою і повернути заводські настройки?
Чому не вдалося безпосередньо з налаштувань прибрати галочку адмінправ для додатка, а тільки використовуючи Avast?