Xakep Online - Порівняльний аналіз евристичних аналізаторів

Я хотів би, щоб це не було приховано від вас. Хоча й у такому разі я б нічого не виграв. Гамлет

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

Після короткого огляду настав час зайнятися справою. Я провів не складний експеримент, для якого повторення вам знадобиться:

  • TASM 5.0
  • Тривіальний вірус. На вірус накладається умова: він повинен бути присутнім у базах ні dr.Web'a, ні AVP. Вірус для експерименту ви зможете виявити на просторах Інтернету (наприклад vx.netlux.org). Або написати самі.
  • dr.Web та AVP

Після всіх підготовок ми асемблюємо та лінкуємо вірус. Після цього ми повинні перевірити на ньому обидва наші антивірусні продукти.

У мене AVP навіть не пискнув і оголосив, що з файлом все гаразд, можеш запускати його на здоров'я. Мною було проведено ще кілька експериментів із модифікації вірусу, але евристик в AVP так і не прокинувся. З цього робимо висновок - евристики або немає взагалі, або вона в такому стані зародків, що я навіть не знаю що сказати.

Рушаємося далі, що скаже нам наш dr.Web? А dr.Web повідомляє - "Можливо WIN EXE вірус". Це мене звичайно ж не могло не втішити і спонукало на подальшіексперименти. Я у пориві щастя та ейфорії вирішив перевірити свою утиліту для шифрування кодової секції програм ("Secure Code"). І як ви думаєте, що я побачив. Весь той самий чудовий напис - "Можливо WIN EXE вірус". Це вже мене не дуже втішило, а кому сподобатися, коли його доброчесну утиліту вірусом обзивають. Після 5 - 10 експериментів з вірусом та моєю утилітою я виявив, чому утиліта та вірус ідентифікуються однаково. Евристика в dr.Web чіплялася за такі блоки інструкцій:

. cmp word ptr [esi], 'ZM'; Це файл EXE? jne UnmapView .

Як ви можете помітити це перевірка на те, чи файл *.exe - за змістом.

cmp word ptr [ebx],'EP'; Це PE файл? jne UnmapView

А це перевірка *.exe файлу на належність формату – Portable Executable. Також у вірусі ці інструкції використовувалися у пам'яті kernel32.dll. Але цей евристичний підхід виявився вразливим для найпростішої модифікації цього коду. При заміні описаних вище блоків наступні:

push 'ZM'; pop edx; cmp word ptr [esi], dx; Це EXE файл?

Тут було зроблено найпростішу модифікацію коду (мутація) на синонімічний.

push 'EP'; pop eax; cmp word ptr [ebx],ax; Це PE файл?

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

(-) Евристика в зародковому стані (+) Швидкість роботи (цілком може випливати з мінуса - недостатня глибина емуляції) (+) Хибні спрацьовування (практично ні, як і евристики)

Перейдемо до dr.Web'у:

(-) Швидкість роботи (-) Несправжні спрацьовування (частішевсього викликані - евристичним кодоаналізатором) (+) Евристика досить розвинена

Виходячи з результатів мого дослідження можна зробити невтішні висновки: AVP евристика або погано працює, або її немає. А ось у dr.Web'а евристика працює "надзвичайно" добре, що дає безліч помилкових спрацьовувань. З цими двома програмами у мене з'явилися дві асоціації – сліпий та параноїк.