Еволюція технологій самозахисту шкідливих програм

Ми спробуємо простежити шляхи зародження “інстинкту самозбереження” шкідливих програм, його еволюцію під тиском все більш жорстких для віруcов умов і оцінити, яке нинішнє положення справ.


Але насамперед необхідно визначити, що саме ми будемо розуміти під словосполученням “самозахист шкідливих програм”. Воно не настільки однозначно, як здається на перший погляд. Напад на антивірус – це, очевидно, вид самозахисту. Приховування слідів функціонування – теж в якомусь сенсі самозахист, хоча вже не настільки явна. І вже зовсім не очевидно, що самозахистом є і сам факт еволюції шкідливих програм. Однак це так. Адже однією з мотивацій вірусописьменників до пошуку нових платформ для зараження, нових лазівок в системі є в тому числі і бажання випустити своє дітище у вільну середу – в таку область, куди ще не дивиться ні одна пара очей, бо там ніколи нічого не знаходили.


Щоб уникнути такої плутанини – що вважати технологією самозахисту, а що ні – ми розглянемо лише найбільш популярні і очевидні способи самозахисту шкідливих програм. В першу чергу до таких відносяться різні способи модифікації та упаковки коду, самосокритія в системі та порушення функціонування систем антивірусного захисту.


Простір класифікації


Способи самозахисту шкідливих програм дуже численні і різноманітні. Деякі з захисних технологій націлені на обхід сигнатурних антивірусів, інші – на утруднення аналізу коду фахівцями; одна шкідлива програма намагається якомога ретельніше сховатися в системі, в той час як інша, не витрачаючи на це свій дорогоцінний процесорний час, займається безпосередньо пошуком і “відстрілом” конкретних засобів антивірусного захисту. До того ж, той чи інший прийом можна класифікувати по-різному і віднести до різних категорій.


Оскільки нашою метою не є побудова строгої системи класифікації технологій самозахисту, розглянемо таку систему, яка дозволила б зорієнтуватися в предметі на інтуїтивному рівні. За основу візьмемо два параметри, які, на наш погляд, є найбільш суттєвими, і побудуємо своєрідну систему координат, по осях якої будемо відкладати “значення” цих двох параметрів.


Перший параметр – це ступінь активності самозахисту шкідливої ​​програми. Найбільш “пасивні” представники цифровий фауни взагалі не захищаються самостійно – тобто не містять в собі відповідного коду. Якась захисна оболонка для них була створена самим автором. У найбільш “активних” самозахист перетворюється в цілеспрямовану агресію.


Другий параметр – це ступінь спеціалізації захисту шкідливої ​​програми. Найбільш “вузька спеціалізація” захисту – у шкідливих програм, так чи інакше порушують роботу конкретного антивіруса. Найбільш широка, “загальна” захист – “захист від всього” – у шкідливих програм, які прагнуть зробити своє перебування в системі максимально непомітним в усіх відношеннях.


У цій системі координат розмістимо види самозахисту шкідливих програм. Слід пам’ятати, що наведена діаграма – не більше ніж іграшкове наочний посібник, що дозволяє зорієнтуватися в технологіях самозахисту шкідливих програм. Ця модель – суб’єктивне побудова автора, засноване, однак, на ретельному аналізі поведінки шкідливих програм.


Рис. 1. Простір технологій самозахисту


Той чи інший спосіб самозахисту шкідливої ​​програми вирішує одну або відразу декілька завдань. Ось основні з них:



  1. Утруднити детектування вірусу сигнатурними методами.
  2. Утруднити аналіз коду вірусу фахівцями.
  3. Утруднити виявлення шкідливої ​​програми в системі.
  4. Утруднити роботу “захисного” ПО (антивірусів, фаєрволів).

У даній статті я розглядаю тільки шкідливі програми для операційної системи Windows (і що передувала їй DOS) – зважаючи на малу популярності і, як наслідок, слабо виражених тенденцій розвитку шкідливих програм для інших платформ. Всі тенденції, що розглядаються в статті по відношенню до виконуваним (EXE, DLL, SYS) шкідливим файлів, з деяким округленням відносяться також до макро-і скрипт-вірусів, тому я не буду згадувати останні окремо.


Витоки: поліморфізм, обфускація і шифрування


Поліморфізм, обфускацію і шифрування має сенс розглядати разом, оскільки вони вирішують одні й ті ж завдання, хіба що в різних пропорціях. Спочатку у модифікації коду шкідливої ​​програми було дві мети: утруднення файлового детектування і утруднення аналізу коду фахівцем.


Історія шкідливих програм починається в 70-х роках, а історія їх самозахисту – в кінці 80-х. Першим вірусом, який спробував вирішити завдання захисту свого тіла від вже існуючих тоді антивірусних утиліт, був DOS-вірус Cascade (Virus.DOS.Cascade). Його “самозахист” полягала в частковому шифруванні власного коду. Ця задача виявилася не вирішена, оскільки кожен новий екземпляр вірусу, хоча і був унікальний, все ж містив у собі незмінну частину, яка “видавала” його і дозволяла антивірусам його зловити. Однак новий напрямок думки вірусописьменників було задано, і через два роки з’явився перший поліморфний вірус Chameleon (Virus.DOS.Chameleon), відомий також під ім’ям “1260”, а його ровесник Whale використовував для захисту свого коду складне шифрування і обфускацію. Ще через два роки почали з’являтися так звані поліморфік-генератори, які можна було застосувати в якості готового рішення для захисту коду шкідливої ​​програми.


Тут необхідно пояснити, чому модифікація коду є засобом протидії файлового детектування, і як це детектування працює.


До останніх років робота антивірусів була заснована виключно на аналізі коду файлу. При цьому більш ранній сигнатурний спосіб детектування спирався на пошук жорстко заданих послідовностей байт, найчастіше по фіксованому зміщення від початку файлу, в бінарному коді шкідливої ​​програми. З’явився дещо пізніше евристичний спосіб детектування також працював з кодом файлу, але спирався вже на більш вільний, імовірнісний пошук характерних для шкідливої ​​програми послідовностей байт. Очевидно, що шкідлива програма легко обійде такий захист, якщо кожна її копія буде представляти собою новий набір байт.


Саме це завдання і вирішують поліморфізм і метаморфізм, Суть яких, без поглиблення в технічні деталі, полягає в тому, що при створенні своєї копії шкідлива програма повністю мутує на рівні набору байт, з якого вона складається. При цьому її функціонал залишається незмінним. Шифрування і обфускація самі по собі в першу чергу націлені на утруднення аналізу коду, але, реалізовані певним чином, виявляються різновидами поліморфізму – як, наприклад, шифрування кожної копії вірусу унікальним ключем в Cascade. Обфускація сама по собі лише ускладнює аналіз, але, використовувана по-новому в кожній копії шкідливої ​​програми, перешкоджає сигнатурного детектування. Хотілося б підкреслити: не можна сказати, що одна з перерахованих вище технік сама по собі є ефективніше інших з точки зору самозахисту шкідливої ​​програми. Швидше, ефективність техніки залежить від конкретних обставин і способу її реалізації.


Відносно широке поширення поліморфізм отримав тільки в епоху DOS-вірусів, що заражають файли. Цьому є причини. Написання поліморфного коду – завдання виключно ресурсномістка і виправдовується тільки в тих випадках, коли шкідлива програма самостійно розмножується: при цьому кожен новий її екземпляр являє собою більш або менш унікальний набір байт. Для більшості сучасних троянців, не мають функції саморозмноження, це не актуально. Тому, коли закінчилася епоха DOS-вірусів, поліморфізм став зустрічатися під шкідливі програми не надто часто і використовувався радше для самоствердження Вірусописьменники, ніж в якості корисної (з точки зору завдань шкідливої ​​програми) функції.


Рис. 2. Поліморфний код P2P-Worm.Win32.Polip


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


Рис. 3. Діаграма обфусцірованного коду Trojan-Dropper.Win32.Small.ue


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


Stealth-віруси


Приховування шкідливої ​​програми в системі стало другим способом захисту від детектування, реалізованим вірусопісателямі в епоху DOS. Вперше ця техніка була застосована в 1990 році, зокрема, вона входила в арсенал уже згаданого вірусу Whale. Суть її зводиться до того, що ховається вірус тим чи іншим способом перехоплює системні сервіси DOS і “підсовує” користувачеві або антивірусній програмі помилкові дані: наприклад, “чисте” вміст завантажувального сектора замість реального, зараженого шкідливою програмою.


Те, що для операційної системи DOS називалося stealth-технологіями, було “відроджено” на новому рівні в ОС Windows років 10 потому під ім’ям rootkit-технологій.


Більш докладно про механізми приховування вірусу в системі читайте в розділі “Руткіти”.


Пакера


Поступово віруси – шкідливі програми, що функціонують лише в тілі “жертви” і безсилі в якості окремого файлу – стали заміщатися троянцями – повністю самостійними шкідливими програмами. Цей процес почався в той час, коли Інтернет ще був повільним і не таким безкрайніх, як зараз, а жорсткі диски і дискети – маленькими, внаслідок чого розмір програми мав велике значення. Для зменшення розміру файлу троянця ще в епоху DOS почали використовувати так звані Пакера – спеціальні програми, що обробляють заданий файл за принципом архіватора.


Побічний – і корисний з точки зору самозахисту шкідливої ​​програми – ефект від використання пакерів полягає в деякому скруті детектування шкідливої ​​програми файловими методами.


Справа в тому, що, розробляючи нову модифікацію шкідливої ​​програми, її автор зазвичай міняє кілька рядків коду, залишаючи його кістяк недоторканим. У скомпільованому файлі при цьому міняються байти на певному відрізку, і якщо сигнатура антивіруса не складалася саме з цього відрізка, то шкідлива програма буде як і раніше детектувати. Обробка програми пакувальником вирішує цю проблему, оскільки зміна навіть одного байта у вихідному виконуваному файлі призводить до абсолютно нового набору байт у файлі упакованому.


Рис. 4. Візуальна відмінність між упакованим та упакованою кодом


Пакера активно використовуються й донині. Їх різноманіття і витонченість зростає. Багато сучасних пакувальники, крім стиску вихідного файлу, постачають його додатковими функціями самозахисту, націленими на утруднення розпакування файлу і його аналізу за допомогою відладчика.


Руткіти


Шкідливі програми для операційної системи Windows почали ховатися на початку 2000-х – тобто, як уже було сказано вище, приблизно через 10 років після появи концепції приховування шкідливої ​​програми в системі та реалізації її в DOS. На початку 2004 року в “Лабораторію Касперського” потрапила дивовижна програма, яка не була видна в списку процесів і файлів Windows. Для багатьох антивірусних експертів це було початком знайомства з технологіями приховування програм в Windows, а для вірусній індустрії вона стала передвісником нової серйозної тенденції.


Термін “руткіт” (root-kit) сходить до Unix-утиліт, призначених для отримання несанкціонованого root-доступу до системи прозоро для її адміністратора. На даний момент під визначення “руткіт” підпадають як спеціальні утиліти для приховування інформації в системі, так і шкідливі програми з функціями приховування слідів своєї присутності. До останніх можуть належати будь-які зовні реєстровані прояви програми: рядок в списку процесів, файл на диску, ключі в реєстрі або навіть мережевий трафік.


Яким чином руткіт-технологія, спрямована на приховування шкідливої ​​програми в системі, перешкоджає її виявленню засобами захисту? Дуже просто: Антивірусна утиліта є по відношенню до системи таким же зовнішнім агентом, як і користувач. Звичайно те, що не видно користувачеві, не видно і антивірусу. На щастя, останній може технологічно розвивати “гостроту зору” і бачити руткіт там, де його не бачить користувач.


В основі функціонування руткіта лежить той же принцип, що і в основі stealth-вірусів в DOS. Найчастіше зустрічаються руткіти, механізм роботи яких заснований на модифікації ланцюжка системних викликів і тому носить назву Execution Path Modification. Такий руткіт можна уявити собі в якості шпигуна-перехоплювача, що знаходиться в деякій точці шляху, по якому передаються команди або інформація, і модифікуючого ці команди або інформацію в цілях їх спотворення або управління приймаючою стороною непомітно для неї. Теоретично кількість точок, в яких може розміститися перехоплювач, не обмежена. На практиці зараз в основному використовуються декілька видів перехоплення функцій користувацьких додатків (API) і перехоплення системних функцій ядра. Цей тип руткітів представлений, наприклад, широко відомими утилітами Vanquish і Hacker Defender і такими шкідливими програмами, як Backdoor.Win32.Haxdoor, Email-Worm.Win32.Mailbot, деякими версіями Email-Worm.Win32.Bagle.


Рис. 5. Перехоплення функції ZwQueryDirectoryFile приховує
файл драйвера в списку файлів


Інший поширений тип руткітів – Direct Kernel Object Modification (DKOM) – можна уявити як шпигуна-інсайдера, який модифікує інформацію або команди безпосередньо в їх джерелі. Це руткіти, що змінюють системні дані. Типовий представник – утиліта FU; відповідні функції присутні і в троянця Gromozon (Trojan.Win32.Gromp).


Більш нова технологія, формально відповідає наведеному тут визначенню руткіта, – приховування файлів в альтернативних потоках даних (Alternate Data Streams, ADS) файлової системи NTFS. Вперше вона була використана в 2000 році під шкідливій програмі Stream (Virus.Win32.Stream), а “друге народження” здобула в 2006 році – в Mailbot і Gromozon. Строго кажучи, експлуатація ADS – не стільки спосіб обману системи, скільки використання маловідомої її функції. Тому особливих перспектив у неї немає.


Рис. 6. Експлуатація “стріму” системної директорії
шкідливою програмою Mailbot (Rustock)


Ще одна рідкісна технологія, яка підпадає під руткіта лише частково (але ще менше відповідна визначень інших класів самозахисту, наведеним у даній статті), – технологія використання бестелих файлів, коли шкідливі програми абсолютно позбавлені тіла на диску. На даний момент відомі два представники цієї технології: нашумілий у 2001 році Codered (Net-Worm.Win32.CodeRed), що існував подібно примарі лише в контексті MS IIS, і виявлений зовсім недавно концептуальний троянець, який зберігає своє тіло в реєстрі.


Вектор сучасного руткіт-руху спрямований у бік віртуалізації і використання функцій обладнання – узагальнено, в бік все більш глибокого впровадження в систему.


Боротьба з антивірусами


У всі часи існували шкідливі програми, які захищають себе досить активно. В якості такого захисту може виступати:



Фактично, цільове напад на засоби захисту – це більше “вимушений захід”, захист притиснутого до стінки, ніж активне напад. У сучасних умовах, коли антивіруси аналізують не тільки код шкідливих програм, але і їх поведінка, останні виявляються в більшій чи меншій мірі беззбройні: повного захисту їм не забезпечує ні поліморфізм, ні упаковка, ні навіть технології приховування в системі. Тому шкідливим програмам залишається тільки прицільно відстрілювати окремі прояви або функції “ворога”. Поза неминучою необхідності цей спосіб самозахисту не був би такий популярний, оскільки він є занадто невигідним з точки зору максимально широкої захисту.


Майбутнє: рефлексуючий вірус?


Антивірусний захист безперервно розвивається від аналізу файлів до аналізу поведінки програм. На відміну від файлового аналізу, суть якого роз’яснена в розділі “Поліморфізм, обфускація …”, поведінковий аналіз заснований на роботі не з файлами, а з подіями на рівні системи, такими як “перерахувати процеси, активні в системі”, “створити файл із заданим ім’ям в заданій директорії”, “відкрити заданий порт для прийому даних “. Аналізуючи ланцюжка таких подій, антивірус обчислює ймовірність шкідливості породжує їх процесу і при необхідності сигналізує про небезпеку.


Відзначимо, що в області поведінкового аналізу відбувається термінологічна плутанина, розібратися в якій – завдання непросте. Зокрема, модуль поведінкового аналізатора може називатися у різних виробників по-різному: “HIPS”, “проактивний захист”, “евристика” (Heuristic), “пісочниця” (Sandbox) … Проте незалежно від термінології очевидно одне: шкідливі програми проти поведінкового аналізу принципово безсилі. І ця принципова уразливість задає вірогідний вектор еволюції для шкідливих програм.


Іншими словами, перед вірусопісателямі стоїть завдання навчитися обходити поведінковий аналізатор. Яким саме способом вона буде вирішена – неясно. Але ясно, наприклад, що використання обфускаціі на рівні поведінки практично марно. А ось розвиток технологій діагностики стану середовища, навпаки, вельми цікаво. У тому числі і тим, що вони мають на увазі підвищення “самоусвідомлення” вірусу, яке дозволило б йому визначити, де саме він знаходиться: в “реальному світі” (у чистій робочого середовища користувача) або ж в “матриці” (під управлінням антивіруса-аналізатора).


У діагностичних технологій вже є попередник: деякі шкідливі програми, якщо їх запустити у віртуальному середовищі (VMWare, Virtual PC), негайно вбивають себе. Вбудовуючи такий механізм самознищення під шкідливу програму, її автор перешкоджає її аналізу, іноді проведеного антивірусними фахівцями саме у віртуальному середовищі.


Тенденції та прогнози


З точки зору перспектив та динаміки розвитку, стан розглянутих вище напрямків самозахисту таке:



  1. Руткіти прагнуть до експлуатації функцій обладнання та до віртуалізації. Однак цей напрямок ще не дозріло й навряд чи стане суттєвим (стосовно до масивного використання даної технології) в найближчі роки.
  2. Технологія відмови від файлу на диску: два відомих концепту цілком дозволяють очікувати розвитку теми найближчим часом.
  3. Використання технологій обфускаціі незначно, але незмінно актуально.
  4. Використання технологій виявлення засобів захисту та порушення їх функціонування – значно і незмінно актуально.
  5. Використання пакерів значно і рівномірно зростає (як за кількісними, так і за якісними показниками).
  6. Використання технологій виявлення отладчиков, емуляторів, віртуальних машин, так само як і інших технологій діагностики середовища, повинно розвиватися, щоб компенсувати масовий перехід антивірусів до поведінкового аналізу.


    Рис.7. Примірне розподіл технологій самозахисту
    шкідливих програм на початок 2007 р.


    Нескладно помітити, що тенденції розвитку самозахисту шкідливих програм змінюються у відповідності з тенденціями розвитку самих шкідливих програм і захисту від них. У той час, коли більшість шкідливих програм заражали файли, а в антивірусах використовувалося тільки сигнатурного детектування, актуальними були поліморфізм і захист коду. В даний час шкідливі програми в основному самостійні, а антивіруси – все більш проактивних. Виходячи з цього можна зробити прогноз, які напрями самозахисту шкідливих програм будуть розвиватися інтенсивніше інших:



    1. Руткіти. Невидимість в системі завжди дає переваги – навіть якщо вже не рятує від детектування. Найбільш вірогідна поява нових типів бестелих шкідливих програм і, трохи пізніше, використання технологій віртуалізації.
    2. Обфускація і шифрування. Утруднення аналізу коду збереже актуальність.
    3. Протидія засобам захисту, заснованої на поведінковому аналізі. Тут можна чекати появи якихось нових технологій, оскільки ті, що використовуються зараз (цільове напад на антивіруси), не є ефективними. Можливо, це будуть якісь способи детектування віртуального середовища або якесь шифрування поведінкових патернів.

Висновок


Що залишається сказати на закінчення? Оскільки існують шкідливі програми – остільки існує і розвивається захист від них, – і остільки ж буде існувати і розвиватися захист шкідливих програм від захисту від шкідливих програм. У зв’язку з чим хочеться навести деякі думки на тему цього нескінченного протистояння, навіяні спостереженнями за “живою природою”.


В останні роки надзвичайно актуальна наступна ситуація. Хтось із середовища кіберзлочинців (або “дослідників”, що прикриваються білими капелюхами) розробляє концепт коду, обходящего сучасні засоби захисту, і в цілях самопіару, замаскованого під турботу про прогрес, публікує його як “недетектіруемий”. Підкреслимо: зрозуміло, на ділі такий концепт є не принципово недетектіруемим, а недетектіруемим на рівні одно-двухшаговим обходу відомих функцій засобів захисту. Зробити такий однокроковий обхід досить просто, якщо відомі механізми захисту.


Подібні публікації змушують турбуватися певний відсоток користувачів, не знайомих з принципами роботи шкідливих програм і антивірусів (“А чи захищає моє антивірусний засіб від цього нового типу загроз?). У такій ситуації виробникам засобів захисту залишається тільки кинути частку ресурсів на відновлення свого авторитету: на розробку технологій обходу описаного концепту, зазвичай таких само, як і сам концепт – однокрокових. У підсумку авторитет відновлюється (а як же інакше?), Система “шкідлива програма – антивірус – користувач” приходить в початковий стан, і процес замикається в цикл. Кожна нова його ітерація породжує все більш витончені шкідливі програми і все більш ваговиті засоби захисту.


Хочеться підкреслити, що процес цей вельми ресурсномісткий, безглуздий і нескінченний, а останнім часом – все більше гротескний, і закликати всі три його сторони до підвищення свідомості. Користувачів – До розуміння того, що ніякий засіб захисту не є абсолютним, а кращий захист від небезпеки – її попередження. Концептуалістів – до того, щоб зайвий раз замислитися про чистоту своїх спонукань перед публікацією концепту, підливають масла у вогонь. А “захисників” – до того, щоб змусити себе мислити ширше і глибше, намагаючись випереджати “ворога” не на один крок, а хоча б на порядок. І хоча про повне припинення “гонки озброєнь” і не йдеться, перешкоджати її прискоренню цілком в силах учасників процесу.




* Поліморфізм – Клас технологія, що дозволяє саморозмножуються програмі повністю або частково змінювати зовнішній вигляд і / або структуру свого коду в процесі розмноження.


* Обфускація – Сукупність прийомів заплутування коду програми, що мають на меті максимально ускладнити його читання й аналіз, але повністю зберегти функціональність. Технології обфускаціі можуть бути застосовані на рівні будь-якої мови програмування – високорівневого, скриптового, ассемблера. Приклади найпростішої обфускаціі: розбавлення коду нейтральними (не змінюють функціонал програми) операторами; зниження його наочності допомогою використання надмірної кількості безумовних (або маскуються під умовні безумовних) переходів.


* Широко відома в сфері комп’ютерної безпеки діалектична пара термінів: Black Hat (“Чорний капелюх”, хакер-нелегал) – White Hat (“Біла капелюх”, спеціаліст з інформаційної безпеки).

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*