Malware (від malicious software) — загальна назва будь-якої зловмисної програми. «Вірус» — лише один з багатьох її різновидів, і плутанина тут коштує дорого: різні типи поводяться по-різному, лишають різні сліди й вимагають різних заходів. Розберемо основні — backdoor, логічну бомбу, поліморфні зразки — і те, як їх виявляють.
Дві осі, за якими все розкладається
Класифікації часто плутають, бо вони відповідають на різні питання:
- як поширюється — сам (черв'як), через заражений файл (вірус) або руками жертви (троян);
- навіщо існує — шпигувати, вимагати гроші, приховати повернення нападника, перетворити пристрій на ресурс.
Тому реальний зразок майже завжди гібрид: троян, який ставить backdoor і паралельно краде паролі. Назва «вірус» до нього не пасує зовсім.
Основні види
- Вірус. Заражає файли й потребує запуску людиною, щоб поширитися.
- Черв'як (worm). Поширюється мережею самостійно, без участі людини, використовуючи хиби в сервісах.
- Троян. Маскується під корисну програму; сам не розмножується, але відчиняє двері зловмисникові.
- Руткіт. Ховає присутність нападника від системи та засобів захисту — робить його «невидимим».
- Шпигунське ПЗ (spyware). Таємно збирає паролі, натискання клавіш, знімки екрана.
- Ботнет-агент. Перетворює пристрій на частину чужої мережі для DDoS-атак, розсилок чи майнінгу.
- Шифрувальник. Окрема стаття: Ransomware.
Backdoor malware: чорний хід у систему
Backdoor — прихований спосіб потрапити всередину в обхід звичайної автентифікації. Пароль можна змінити, дірку — закрити, а чорний хід лишиться на місці: саме тому backdoor malware ставлять одразу після зламу, ще до того, як почнеться щось помітне.
Виглядати такий вхід може по-різному: додана служба, зайвий обліковий запис із безневинним іменем, заплановане завдання, змінений конфігураційний файл, «зайвий» рядок у вебзастосунку. Головна ознака одна — доступ, який працює в обхід загальних правил.
Практичний висновок для реагування: відновити зашифроване чи почистити заражені машини — ще не перемога. Поки чорний хід на місці, нападник просто повертається.
Логічна бомба (logic bomb malware)
Логічна бомба спить, доки не справдиться умова: настане дата, зникне певний обліковий запис, щезне прізвище зі списку працівників. Класика жанру — код, який адміністратор лишає «на випадок звільнення»: поки він у штаті, щотижня переставляє лічильник; щойно доступ забирають, лічильник добігає нуля — і код спрацьовує.
Небезпека саме в паузі: між закладенням і спрацюванням минають місяці, а іноді роки. За цей час зразок потрапляє у всі резервні копії, і відкат до «чистого» стану вже не рятує.
Поліморфний вірус (polymorphic malware)
Поліморфний зразок змінює власний код за кожного зараження, лишаючи незмінною лише поведінку. Мета — уникнути виявлення за сигнатурою: хеш файлу щоразу новий, і перевірка «чи є він у переліку відомого» нічого не дає. Метаморфні варіанти переписують себе ще глибше.
Звідси зрозуміло, чому сигнатурного антивірусу мало. Проти таких зразків працює поведінкове виявлення: не «на що схожий файл», а «що він робить» — масово читає документи, звертається до чужого сервера, чіпає тіньові копії.
Безфайлове ПЗ: коли сканувати нема чого
Окрема сучасна категорія взагалі обходиться без файлу на диску. Код живе в оперативній пам'яті, а роботу виконують легітимні інструменти системи — вбудовані командні оболонки, планувальник, засоби віддаленого керування. Формально зловмисних програм на диску немає: є звичайний системний інструмент, який робить незвичні речі.
Тому виявлення зсувається з файлів на поведінку й журнали: хто запустив командну оболонку, чому сервер бухгалтерії раптом звертається до зовнішньої адреси, звідки з'явилося нове заплановане завдання.
Інфостілери: вкрадена сесія обходить другий фактор
Ще одна категорія, що вибухнула останніми роками, — викрадачі облікових даних. Вони збирають не лише паролі, а й файли сесій (cookie) з браузера. Це важлива деталь: маючи чинну сесію, зловмисник заходить у сервіс уже автентифікованим — двофакторна автентифікація при цьому не перепитує нічого, бо вхід формально вже відбувся.
Практичний висновок: після зараження станції мало змінити пароль — треба завершити всі активні сесії в постраждалих сервісах.
Які сліди лишає зловмисний код
Насторожити мають:
- незрозуміле сповільнення, перегрів, підвищене споживання ресурсів;
- невідомі процеси, служби та заплановані завдання;
- аномальний вихідний трафік — особливо вночі й до незнайомих адрес;
- нові облікові записи, зміна прав, зникнення журналів;
- вимкнений або «сліпий» антивірус;
- звернення до підозрілих доменів у журналах служби імен.
Виявлення таких аномалій — робота моніторингу й SIEM.
Дослідження шкідливого ПЗ: як розбирають зразок
У пошуку це набирають і як «malware дослідження», і як «дослідження шкідливого ПЗ». Ідеться про аналіз зразка, що дає відповідь на три питання: які дії він виконує, за чим його виявити, куди він звертається.
Працюють двома способами:
- статичний аналіз — розбір коду без запуску: рядки, функції, зашита адреса командного сервера;
- динамічний аналіз — запуск у пісочниці, ізольованому середовищі, і спостереження за поведінкою.
Пастка динамічного методу: сучасні зразки перевіряють, чи не в пісочниці вони опинилися. Дивляться на кількість ядер, рух миші, час роботи машини, наявність типових інструментів дослідника — і в підозрілих умовах поводяться бездоганно. Тому дослідження шкідливого ПЗ поєднує обидва способи.
Результат аналізу — індикатори компрометації: хеші, адреси, домени, характерні артефакти. Ними обмінюються між організаціями (див. MISP), щоб інші могли пошукати ті самі сліди в себе.
Log4Shell — і плутанина в назвах
Найгучніший приклад того, як зловмисний код заходить не через людину, а через чужу хибу в бібліотеці, — Log4Shell (CVE-2021-44228, грудень 2021).
Суть: у бібліотеці журналювання Apache Log4j для Java достатньо було передати спеціально складений рядок, який потрапляв у журнал, — і сервер сам ішов по чужий код на вказану адресу та виконував його. Оцінка критичності — максимальні 10 з 10 балів. Log4j використовують надзвичайно широко, і часто як непряму залежність: компанія її не встановлювала, вона просто всередині іншого продукту.
Тут же живе поширена помилка. Запит «log4js вразливість» веде не туди: log4js — це окрема бібліотека журналювання для Node.js, до Apache Log4j вона стосунку не має. Log4Shell зачепила саме Java-бібліотеку Log4j, гілку 2.x.
Головний урок Log4Shell — не про одну діру, а про облік залежностей: закрити можна лише те, про що знаєш, що воно у тебе є (див. аналіз вразливостей).
Як захищатися
- вести перелік ПЗ й залежностей — інакше оновлювати нема чого;
- своєчасно оновлювати системи й компоненти;
- обмежувати права та ділити мережу на зони;
- захищати пошту й навчати людей — більшість заражень починається з листа (див. цільовий фішинг);
- покладатися не лише на сигнатури, а й на поведінкове виявлення;
- збирати журнали й мати резервні копії поза мережею.