Введение

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

В информатике полиморфный код – это код, использующий полиморфный движок для изменения своей структуры, сохраняя при этом исходный алгоритм. То есть, код изменяется каждый раз при запуске, но его функциональность (семантика) остается прежней. Например, простые математические выражения 3+1 и 6-2 дают одинаковый результат, но выполняются с разным машинным кодом в процессоре. Эта техника иногда используется компьютерными вирусами, шелл-кодом и компьютерными червями для маскировки. Шифрование – наиболее распространенный способ сокрытия кода. При шифровании основная часть кода (также называемая полезной нагрузкой) шифруется и выглядит бессмысленной. Для восстановления исходной функциональности в код добавляется функция дешифрования. При запуске эта функция считывает и расшифровывает полезную нагрузку перед ее выполнением. Само по себе шифрование не является полиморфизмом. Для достижения полиморфного поведения пара шифровщика/дешифровщика изменяется с каждой копией кода. Это позволяет создавать различные версии кода, выполняющие одну и ту же функцию.

Злокачественный код

Большинство антивирусных программ и систем обнаружения вторжений (IDS) пытаются обнаружить вредоносный код, просматривая компьютерные файлы и пакеты данных, передаваемые по компьютерной сети. Если антивирусное программное обеспечение обнаруживает закономерности, соответствующие известным компьютерным вирусам или червям, оно предпринимает соответствующие шаги для нейтрализации угрозы. Полиморфные алгоритмы затрудняют распознавание такого кода, поскольку он постоянно мутирует. Злоумышленники пытались защитить свой зашифрованный код от этой стратегии сканирования, переписывая незашифрованный движок дешифрования (и результирующую зашифрованную полезную нагрузку) каждый раз при распространении вируса или червя. Антивирусное программное обеспечение использует сложный анализ шаблонов для выявления базовых закономерностей в различных мутациях движка дешифрования, надеясь надежно обнаруживать такое вредоносное ПО. Эмуляция может быть использована для обхода полиморфной обфускации, позволяя вредоносной программе распаковывать себя в виртуальной среде перед применением других методов, таких как традиционное сканирование по сигнатурам. Такая виртуальная среда иногда называется «песочницей». Полиморфизм не защищает вирус от такой эмуляции, если расшифрованная полезная нагрузка остается неизменной независимо от изменений в алгоритме дешифрования. Методы метаморфического кода могут использоваться для дальнейшего усложнения обнаружения, поскольку вирус может выполняться без наличия в памяти идентифицируемых блоков кода, которые остаются постоянными от заражения к заражению. Первый известный полиморфный вирус был написан Марком Уошберном в 1990 году и назывался 1260. Более известный полиморфный вирус был создан хакером Dark Avenger в 1992 году как средство обхода распознавания шаблонов антивирусным программным обеспечением. Распространенным и весьма вирулентным полиморфным вирусом является файловый инфектор Virut.