Введення в поліморфізм
Як відомо, перше віруси з'явилися давно. Вони заражали стародавнікомп'ютери, і ніщо не могло їх зупинити, крім пильного користувачамашини. Потім були придумані антивіруси, що визначають їх за характернимисимптомів. Але через якийсь час вірус перестав бути тупий мішенню дляантивіруса. Тепер вірус був наділений спеціальними можливостями, щодозволяло йому бути непоміченим в системі. Одним із варіантів захисту відвизначення є поліморфізм. У далекому 1990 році він мало незнищив всю антивірусну індустрію. Тільки завдяки професіоналізмупрацівників лабораторії були впроваджені складні методи, спрямовані назнищення поліморфних вірусів ...
Як же вони працюють? Взагалі, поліморфізм - високоякісна техніка,що дозволяє вірусу бути непоміченим за стандартною сигнатурі (або,попросту, масці). Зазвичай детектори визначають вірус по характерних шматкахйого коду. У випадку з поліморфним вірусом таке не пройде. Два файла,заражені одним і тим же вірусом, завжди будуть мати різний розмір. Засіктитакий вірус дуже складно.
Всі поліморфні віруси обов'язково забезпечуються розшифровувача коду, щоза певним принципом перетворить переданий йому код, викликаючи при цьомустандартні функції і процедури операційної системи. Самі методишифрування можуть бути різними, але, як правило, кожна операція має своюдзеркальну пару. В асемблері це реалізується дуже просто, і таких парможе бути багато - ADD/SUB, XOR/XOR, ROL/ROR і т.п. Подібні операціїпроводяться для розшифровки елементів пам'яті.
Важливою особливістю поліморфного вірусу є те, що вірусмістить сміття, тобто операнди, функції та процедури, які служать лишедля заплутування коду. При цьому реалізуються дві мети:
1. Складність вивчення коду при трасуванні файлу. Ця мета актуальна лишедля новачка, професіонал, який займався вивченням вірусів багатороки, відразу в усьому розбереться.
2. Збільшення елементу випадковості в розшифровувача. Місце їх вставки маєвеличезний вплив на розмір коду. З сміттям ж з'являються нові варіантиФорматування коду. Розмір при кожному з них буде різним.
Асемблер дає безмежні можливості по вставці сміття, тому вставкиможуть бути різними. Ось деякі їх види:
1. Регістрові операції. Як правило, арифметичні і логічні. Прикладомможуть служити наступні команди: inc ax; mov ax, [si + bx-04]; add ax, 1234h іін
2. Дзеркальні команди. Такі, як add/sub, inc/dec та інші.
3. Помилкові переходи, а також виклик підпрограм, що містять сміття (jmp $ 10 h;call XXXXh).
4. Простий сміття з одиночних операндів (daa; nop; cld і т.д.).
Виділяють кілька рівнів поліморфізму, що використовуються у вірусу. Кожен зних по-різному реалізує неоднаковий розмір файлів, які були заражені.
Рівень 1. Найпростіші олігоморфние віруси. Вони використовують постійнізначення для своїх розшифровувача, тому легко визначаються антивірусами.
Із за цього такі віруси прозвали "не дуже поліморфними". Приклади такихвірусів: Cheeba, December_3, Slovakia, V-Sign, Whale.
Рівень 2. Віруси, що мають одну або дві постійні інструкції, яківикористовуються в розшифровувача. Також визначаються за сигнатурі, але маютьбільш складну будову, ніж представники першого рівня. Приклади: ABC, DM,
Flip, Jerusalem, Ontario, PC-Flu, Phoenix, Seat, Stasi, Suomi.
Рівень 3. Віруси, які використовують в своєму коді команди-сміття. Це, у своємуроді, пастка від детектування, допомагає заплутати власний код. Алетакий вірус може бути засікти за допомогою попереднього відсіювання сміттяантивірусом. Віруси Tequila, StarShip, V2Px, DrWhite належать до третьогорівнем поліморфізму.
Рівень 4. Використання взаємозамінних інструкцій з перемішуванням вкоді, без додаткового зміни алгоритму розшифровки, допомагаєповністю заплутати антивірус. При цьому неможливо "зловити" вірус постандартної масці. Доводиться виконувати перебір, після якого потрібнасигнатура буде знайдено. Так були написані віруси Uruguay, CLME, APE.
Рівень 5. Реалізація всіх вищевикладених рівнів з підтримкою різнихалгоритмів в розшифровувача допомагає досягти високого рівня поліморфізму.
При цьому може існувати кілька паралельних процесів розшифровки,коли один буде перетворювати код іншого чи навпаки. Розпізнаваннятаких вірусів - дуже складний процес. Для цього необхідно провестиретельний аналіз коду самого розшифровувача. З лікуванням складніше --доводиться трассіровать не тільки генератор, а й тіло самого вірусу длявиявлення повної інформації про заражений файл. Ця процедура займаєдосить тривалий час і може закінчитися невдало. Лікувати вірусицього рівня може лише DrWeb, в інших програмах це просто нереалізовано. До представників рівня відносяться DAME та ін
Рівень 6 (невиліковний). І, нарешті, існують віруси, які складаються зпрограмних одиниць-частин. Вони постійно змінюються в тілі і переміщують своїпідпрограми. Лікування таких вірусів поки не виробляється, а й длянаписання потрібно дуже добре розбиратися в асемблері. Характерноюособливістю такої зарази є плями. При цьому в різні місця файлузаписується кілька блоків коду, що обумовлює назву методу.
Такі плями в цілому утворюють поліморфний розшифровувача, який працює зкодом в кінці файлу. Для реалізації методу навіть не потрібно використовуватикоманди-сміття - підібрати сигнатуру буде все одно неможливо. Такийалгоритм використовують віруси BadBoy, CommanderBomber, Leech тощо
Поліморфізм став дуже поширеним лише завдяки розшифровувача.
Зручно те, що один файл може працювати з багатьма вірусами. Цим ікористуються Вірусописьменники, використовуючи чужий модуль. Підводним каменем притакому розкладі може стати ситуація, коли в базі антивіруса зберігаєтьсявикористовуваний розшифровувача. Якщо це трапилося, всі віруси, підключені донього, будуть детектировать. p>
Будь-хто може написати хороший поліморфний вірус. Необхідно лише трохирозбиратися в асемблері. На створення середнього поліморфного вірусу витрачаєтьсяне більше шести годин.
Дуже проста реалізація пошуку дзеркальних команд. Для цього необхідностворити зведену таблицю з операндами. До неї повинна додаватисядодаткова інформація: наявність дзеркала, необхідність заміни команди іінше. Якщо людина трохи розуміє в вірусології та асемблері, тоскласти таку таблицю йому буде нескладно. З командами-сміттям можнавчинити аналогічно, як і з дзеркалами.
До речі про сміття. До таких інструкцій додається ряд обмежень, якіповинен виконувати кожний вірусописьменників, щоб його творіння працювало якслід. Отже, команда не повинна:
1. Передавати керування за зовнішню програму. Тобто керувати кодомможе лише розшифровувача і ніхто інший. Якщо порушити це правило - вірусбуде помічений.
2. Змінювати регістри, які використовують робочі команди. Сміття є сміттяі він жодним чином не повинен перетинатися з правильним кодом.
3. Викликати фатальні помилки, а також генерувати виключення, так як цезупинить роботу розшифровувача, або зробить її невірною.
Зміст всіх правил зводиться до одного - сміття не повинен заважати процесурозшифровки коду, а лише радувати око антивіруса і недосвідченогокористувача, трассірующей заражений файл.
Ще треба ставити неробочу команду після циклу, але перед шифрованих кодом
- Це позбавить від деяких проблем з конвеєром у процесорів Pentium.
У поліморфа нерідко вбудовують код, який виконується в залежності відпевній ситуації. Наприклад, при детектуванні вірусу він може викликатипроцедуру самознищення. Як самого себе (часткова або повнабезповоротна модифікація коду), так і системи (масове зараженнясистемних файлів без можливості відновлення). Це дуже ускладнює пошукантивіруса від поліморфного вірусу - до антивірусної лабораторії вірусдоходить вже в неробочому стані. Також були випадки виклику що виключаєкоду при спробі лікування вірусу (на високому рівні поліморфізму).
Вірусописьменники передусім акцентують увагу на три головні речі всвоєму творінні:
1. Маскування. Мета кожного поліморфного вірусу - як можна довшепротриматися в системі до детектуванні антивірусом.
2. Захист. Після виявлення зарази відбувається виклик виключає коду.
3. Складність. Код вірусу повинен бути дуже заплутаним, містити в собіінструкції-дзеркала, команди-сміття та інше. Це звичайно працює протиновачка, але професіонал протягом декількох годин вивчення коду притрасуванні, простежить за алгоритмом вірусу.
Перший поліморфний вірус з'явився в 1990 році і називався Chameleon. Вінвписував свій код в кінець COM-файлів, а також використовував два алгоритмишифрування. Перший шифрує тіло по таймеру залежно від значеннязаданого ключа. Другий використовує динамічний шифрування і при цьомуактивно заважає трасуванні вірусу. Існувала і модифікація Chameleon.
Друга версія 1 квітня форматувати диск A: (враховуючи обсяги того часу,це було дуже неприємно).
Після цього еволюція поліморфа завершилася. Тільки через три роки вийшоввірус Phantom1, який добрався і до російських комп'ютерів. Він не бувнебезпечний, хоча містив в коді ряд помилок, через які генератор не мігрозшифрувати тіло вірусу. При цьому виконавчий файл перестававфункціонувати. Після тривалого простою системи фантом виводив на екранвідеозображення з написом. Вона свідчила, що комп'ютер знаходиться підспостереженням небезпечного вірусу.
Паралельно вірусам з'являлися і поліморфік-генератори, одним з якимбув MtE, що відкрив ціле вірусне сімейство. Він вже використав дзеркальніфункції, ніж утруднював своє детектування. Тепер вірусологи не потрібно булописати свій дешифратор, а лише скористатися MtE, в результаті чого світдізнався про новий сімействі вірусів. Що цікаво, перший MtE-вірус бувперехоплений антивірусної лабораторії, тому швидкий вихід захисту відпершого серйозного поліморфного вірусу захистив безліч робочих станцій відзарази.
На 1993 рік довелося дуже багато поліморфних вірусів. При цьомупрограмісти, мабуть, змагалися між собою і вирішували, чий вірусвиявиться крутіше всіх. З `являлися все нові дешифратори, яківикористовувалися іншими вірусописьменниками для своїх брудних цілей. Одним зтаких небезпечних вірусів був Predator, який перехоплював переривання 13h і
21h і записував себе в кінець всіх COM-файлів. Використовуючи int 13h, вірьперевіряв сектора, що зчитуються з дисків, і змінював у них один біт впевний час.
Інше сімейство вірусів Daemaen записує себе в COM, EXE та SYS-файли.
При цьому бінарники, що починаються на SC, VF і F-, не заражаються. На вигляд цівіруси виглядають цілком безпечно, але насправді відбувається запис в MBRвінчестера і в boot-сектору дискет, а тіло зарази зберігається в останніхсекторах. Вірь містить в собі ряд помилок, які цілком можуть зруйнувати
FAT.
Вірусописьменники зазвичай залишають разом з вірусом будь-яку інформацію.
Так, наприклад, поліморфний вірус Invisible записується в кінець виконуванихфайлів. У залежності від часу зараза замінює файл іншою програмою,при запуску якої юзер чує музику і бачить перед собою текст пісні I'mthe invisible man (хіт тих часів). Ще один приклад - вірус Seat. Післязараження вірус перехоплює 21h, записує себе в виконувані файли.
Час від часу на екрані комп'ютера з'являється візульние ефекти, а принатисканні на клавіші лунають звуки;).
В цей же час група програмістів з болгарської школи створює поліморфнийвірус Todor. Він не використовував висококласних алгоритмів. Його витонченістьполягала в тому, чтоон розроблявся за новою технологією. Вага вірусустановив рівно 1993 байти, що відповідало року випуску.
При запуску Тодора відбувається розшифрування його тіла. Для цього використовуєтьсядосить простий алгоритм, заснований на XOR. З кожним кроком слово вірусу
XOR'ітся з непостійним ключем. Після активації перехоплюється адреса 24h івідбувається зараження файлу command.com. На довершення вірус вражає 5файлів з розширенням COM або EXE.
Особливістю вірусу є те, що він перевіряє носій на можливістьзапису. Перед зараженням кожного бінарників створюється тимчасовий файл (потімвилучається). Коли це неможливо (адреса 24h потрібен для повернення саме такихпомилок), зараза припиняє свою діяльність, вважаючи, що носій захищенийвід запису. Атрибути і дата файлу після зараження стають колишніми. Лишезначення секунд стає рівним 22. Це зроблено для того, щоб неінфікувати бінарників повторно (вірус перевіряє дату під час пошуку). Дотого ж, 15 числа кожного місяця, вірус випадковим чином шифрує секторжорсткого диска. Це робить поліморфного вірусу досить небезпечним, тому щосектором може бути і Root Directory.
Не обійшлося і без помилок. Todor некоректно перевіряє довжину файлу. Точніше,якщо вона буде більш 64 Кб, заразити файл не вдасться, а комп'ютер зависне.
Друга помилка полягає в тому, що в тілі розшифровувача міститься зайвакоманда POP. Файл, в якому вона потрапить, неминуче повисне після запуску.
І на останок, заражаючи бінарників, вірус спочатку змінює заголовок файлу, апотім записує себе в його кінець. При помилку запису або переповненняносія виконуваний файл буде зіпсований, і відновити його вже невдасться.
Після виходу Тодора світ дізнався про новий поліморфік-генераторі TPE (Trident
Polymorphic Engine), який поширювався в архівах BBS з докладнимкодом і документацією по використанню. Завдяки цьому, стали з'являтисявіруси (родина TPE), що використовують цей модуль.
До кінця 1993 року генераторів стало випускатися дуже багато. Антивірус несправлялися з таким потоком, це також обумовлювалося поліпшеннямтехнології поліморфізму.
Розглянемо приклади. Дешифратор SPE дозволяв записувати код вірусу ввиконувані файли і організовував спеціальний лічильник. При його певнихзначеннях, вірус стирав вміст MBR вінчестера і перезавантажувати комп'ютер.
Деякі генератори реагували на команди, введені користувачем.
Наприклад, VICE заражав файли в каталозі лише тоді, коли користувач унього входив. Також дешифратор вмів видаляти бази антивіруса.
Генератор SMEG був дуже небезпечний. Цей розшифровувача вмів вписувати свій кодв виконувані файли, а також прати CMOS і сектора дисків. Процесвідбувався кожен понеділок. Після екзекуції вірус показував напис,повідомляю, що жорсткий диск був пошкоджений.
У наш час багато вірусів використовують поліморфізм високих рівнів у своїхалгоритмах. Але розвитку технології практично не спостерігається, можнасказати, що вона вже віджила себе. Крім поліморфізму має також іншіметоди маскування, наприклад, стелс-технології. Можливо, скороВірусописьменники придумають потужний алгоритм захисту своїх творінь, який незможе розгадати жоден просунутий антивірус ... p>
p>