Антивірус, Android і х86. Особливості взаємодії


Тема оптимізації Android-додатків під платформу х86 не сходить зі сторінок нашого блогу. Сьогодні ми подивимося на проблему під дещо специфічним кутом. Портируются під Intel… віруси? У чому полягають нюанси функціонування антивірусів на різних платформах? З якими проблемами зустрічаються розробники антивірусного ПЗ на шляху оптимізації? З цими питаннями звернулися до команди лабораторії Касперського, що розробляє антивірус для Android.

Почнемо з початку. Ми встановлюємо додаток (пройшовши за неперевіреною ссылке або запустити установку вручну) — отримуємо АПК, до складу якого входить не тільки заявлена функціональність, але і шкідник, який краде паролі, посилає платні SMS або блокуючий смартфон з подальшим вимаганням викупу. Правильно?
У цілому так. Найбільшому ризику піддаються відвідувачі різного роду піратських сайтів, але зрідка зараза просочується навіть у великі офіційні магазини додатків.

Припускаємо, що є якась база сигнатур, за якою йде пошук шкідливого коду. Чи повинна вона бути різною для ARM і x86? Чи Правильно ми розуміємо, що для x86 довелося створювати свою базу, причому основна робота в портуванні під х86 була саме в створенні цієї бази?
База сигнатур і евристичних правил платформо-незалежна. Взагалі, більшість шкідливих програм під Android не мають нативної частини взагалі і весь їх шкідливий код написаний виключно на Java, тому різниця в архітектурі в даному випадку не істотна.
У будь-якому випадку ми підтримуємо детектування ARM об'єктів навіть на x86.


Якщо автори зловредів під Android виявилися спритнішим деяких авторів програм і портувати свої творіння на x86, то чи означає це, що ваш антивірус під ARM (працює через транслятор) в принципі не міг такі віруси виявити, так як в ньому не було відповідних баз «із зразками кодів», а виявляв тільки ушкодження на чистої Java та ARM додатках?
Для нас немає різниці, чим код — ARM або x86. Наш движок розглядає об'єкти незалежно від платформи, на якій він працює. Тобто наш продукт на любоей платформі здатний виявити і ARM і x86-шкідників, якщо вони є в базі.

А чи є реально x86 зловредів? Наскільки велика їхня база?
Таких, які працюють тільки на x86 і не працюють на ARM — не зустрічали. Це суперечить логіці вірусописьменників, які зацікавлені в максимальному поширенні свого дітища.

Але це — про зловредів. А чи існують для Android реальні віруси, тобто шматки коду, здатні заражати інші файли — поширюватися, а також самомодифицироваться, щоб обдурити антивіруси? Якщо так, то скільки їх, чи включають вони нативний код або Java досить, які вони можуть заразити?
Ну почнемо з того, що для поширення немає необхідності заражати інші файли. Можна, наприклад, розсилати посилання на себе по контакт-листу. Це поведінка відноситься до класу Червів. А класичних инфекторов (або полимрорфов) під Android поки немає.
Як ви вже сказали, код антивіруса — майже весь нативний, але, як і належить додатків під Android, побудований у вигляді набору викликаються бібліотек. Бібліотеки з «стандартного» місця /lib заховані в більш глибокої ієрархії. Якщо можна, поясніть, навіщо це зроблено?
Більшість бібліотек лежить в папці lib, окремо винесені антивірусні бази, які вимагають регулярного оновлення папки в папці lib їх оновлювати не можна, оскільки вона не доступна на запис.


Як саме працює антивірус? Перевіряє він додатки тільки перед запуском, або і на диску теж; може відстежити «підозрілі» операції в реальному часі? І що саме він робить при їх виявленні?
Антивірус в Kaspersky Internet Security for Android перевіряє програми при їх встановлення та оновлення, на вимогу користувача (якщо користувач натиснув кнопку просканувати), за розкладом (розклад вибирається в настройках продукту). Крім цього скануються файли зберігаються в папку Download (туди зберігаються файли, які користувач завантажує в браузері). Крім цього, є режим розширеної захисту, у цьому випадку перевіряються файли на карті пам'яті при будь-якому їх зміну, а також всі нові файли, записані на карту пам'яті.
Як і в «настільних» продуктах «Лабораторії Касперського», Kaspersky Internet Security for Android використовує цілий комплекс технологій для виявлення шкідливих програм, у тому числі евристичний движок, який дозволяє виявляти цілі сімейства вірусів за допомогою загальних ознак. При цьому у нас є вимога, щоб медіанна навантаження на CPU від нас не перевищувала 10% при нормальному використанні пристрою.


Що було зроблено для додавання підтримки х86 в Android-продукт?
В нашому продукті під Android використовується багато кросплатформених компонентів власної розробки, написаних на С++ і застосовуються в більшості продуктів «Лабораторії Касперського». Тобто більшість захисних модулів написані для простої інтеграції на різні платформи. Забезпечити їх складання під Android x86 не склало особливих труднощів — невеликі зміни в make-файли, натискання кнопки, і продукт готовий :). Основне навантаження припало на відділ тестування, оскільки і без того довгий список тестових конфігурацій і сценаріїв додалися Android-пристрої на базі x86, які тепер підтримуються офіційно.
Раніше на x86-пристроях наш продукт працював за допомогою бібліотеки Hoodini. Зрозуміло, у такому випадку проводиться бінарна трансляція коду з певним збитком для продуктивності.


Так, звичайно, розмова про складання під х86 був би неповним без вимірювання приросту продуктивності в порівнянні зі старою, «бінарно-трансльованій», версією. Фахівці Intel протестували швидкість роботи Kaspersky Internet Security 11, зібраного для х86 і ARM, з допомогою пристрою на платформі Intel Clover Trail (процесор Intel Atom Z2760). Результати виявилися такими: продуктивність нативного x86-додатки в режимі сканування файлів збільшилася в 2,7 рази. Хоча, справедливості заради, треба відзначити, що при цьому спостерігалося деяке (точніше — 15-відсоткове) підвищення енергоспоживання пристроєм під час роботи. Але, з урахуванням зменшення цього часу, загальний результат x86 версії беззастережно краще вихідного.

Отже, віруси оптимізувати під х86, виходить, не обов'язково, а ось корисні програми, в тому числі і антивіруси — дуже бажано. І чим важливіше для параметри продуктивності та швидкодії, тим ретельніше потрібно підходити до цього питання.

Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.