Полиморфный вирус
Полиморфный вирус — это разновидность вредоносной программы (компьютерного вируса), которая для затруднения своего обнаружения антивирусным программным обеспечением использует технику изменения собственного программного кода при каждом новом заражении или при каждой новой активации. В отличие от простых (мономорфных) вирусов, имеющих постоянную сигнатуру (последовательность байтов), полиморфные вирусы способны генерировать множество вариантов своего кода, сохраняя при этом исходную функциональность. Основной целью полиморфизма является обход сигнатурного метода обнаружения, при котором антивирус сравнивает файлы с базой известных образцов вредоносного кода.
История
Концепция полиморфного кода возникла в конце 1980-х — начале 1990-х годов, когда разработчики антивирусного программного обеспечения начали активно использовать сигнатурный анализ. Первые полиморфные вирусы были созданы как ответ на эту защиту.
Ранние примеры
Одним из первых известных полиморфных вирусов считается 1260 (также известный как V2P1), созданный в 1990 году болгарским программистом Марком Вашингтоном (известным под псевдонимом Dark Avenger). Этот вирус использовал простой метод изменения кода: он добавлял в свой код случайные, не влияющие на работу инструкции (мусорный код). Однако его полиморфизм был примитивным и легко обнаруживался эвристическими анализаторами.
В 1992 году появился вирус Dame, который использовал более сложный алгоритм шифрования и расшифровщик, генерируемый случайным образом. В том же году был создан вирус Ply (или V2P2), также авторства Dark Avenger, который стал значительным шагом вперёд в развитии полиморфных технологий.
Золотой век полиморфизма
Середина 1990-х годов считается «золотым веком» полиморфных вирусов. В 1994 году появился вирус SMEG (Simulated Metamorphic Encryption Generator) или Pathogen, который использовал сложный полиморфный движок, затруднявший его анализ. В 1996 году вирус Win95.CIH (Чернобыль) продемонстрировал, что полиморфизм может быть эффективно реализован в среде Windows.
Наибольшую известность в этот период получил вирус Melissa (1999 год), который, хотя и не был полностью полиморфным, использовал макросы и мог изменять некоторые свои части. Однако настоящим прорывом стал вирус Code Red (2001 год), который заражал веб-серверы Microsoft IIS и использовал полиморфный код для обхода сигнатурных фильтров.
Современное состояние
С развитием интернета и сетевых технологий полиморфные вирусы эволюционировали. Сегодня они часто используются в составе сложных целевых атак (APT) и программ-вымогателей (ransomware). Современные полиморфные вирусы могут не только изменять свой код, но и маскироваться под легитимные процессы, использовать шифрование и стеганографию для сокрытия своей активности. Примером современного полиморфного вредоносного ПО является Emotet — ботнет и троян, который постоянно обновляет свои модули и использует полиморфные техники для уклонения от обнаружения.
Принцип работы
Основная идея полиморфного вируса заключается в том, что его тело (исполняемый код) не является статичным. Для этого используется комбинация двух основных компонентов:
- Постоянная часть (мутационный движок) — это неизменяемый код, который отвечает за создание новых вариантов вируса. Он не выполняет вредоносных функций, а только генерирует новый код.
- Переменная часть (тело вируса) — это код, который выполняет вредоносные действия. Он может быть зашифрован, сжат или изменён другими способами.
Процесс заражения
- Запуск: При активации заражённого файла сначала выполняется мутационный движок.
- Расшифровка/Восстановление: Движок расшифровывает или восстанавливает тело вируса в оперативной памяти.
- Выполнение: Восстановленное тело вируса выполняет свою вредоносную функцию (например, заражение других файлов, кражу данных).
- Мутация: После выполнения (или перед заражением нового файла) мутационный движок создаёт новый вариант вируса. Для этого он:
- Шифрует тело вируса новым случайным ключом.
- Генерирует новый код-расшифровщик, который будет использоваться для расшифровки этого нового варианта.
- Добавляет в код-расшифровщик случайные, не влияющие на работу инструкции (мусорный код).
- Запись: Новый вариант вируса записывается в заражаемый файл.
Методы мутации
Для изменения кода используются различные техники:
- Шифрование: Тело вируса шифруется с использованием симметричных алгоритмов (например, XOR, AES). Ключ шифрования меняется при каждом заражении.
- Генерация мусорного кода: В код-расшифровщик вставляются случайные инструкции (NOP, MOV, JMP и т.д.), которые не влияют на логику работы, но изменяют сигнатуру.
- Перестановка инструкций: Порядок выполнения независимых друг от друга инструкций меняется. Например, инструкции
A; B; Cмогут быть переставлены вB; A; CилиC; B; A, если они не зависят друг от друга. - Замена инструкций на эквивалентные: Одна инструкция заменяется на несколько других, выполняющих то же самое. Например,
MOV EAX, 0может быть заменено наXOR EAX, EAXилиSUB EAX, EAX. - Изменение регистров: Одна и та же операция может выполняться с использованием разных регистров процессора.
- Использование различных алгоритмов сжатия: Тело вируса может быть сжато разными алгоритмами (например, LZ77, Huffman) с разными параметрами.
Классификация
Полиморфные вирусы можно классифицировать по сложности их мутационного движка и методам обхода защиты.
По сложности мутации
- Слабополиморфные (Simple Polymorphic): Используют только простые методы, такие как добавление мусорного кода или шифрование с фиксированным ключом. Их сигнатура может быть обнаружена эвристическими анализаторами.
- Среднеполиморфные (Medium Polymorphic): Используют комбинацию нескольких методов: шифрование с переменным ключом, генерацию мусорного кода и перестановку инструкций. Обнаружение таких вирусов требует более сложных алгоритмов.
- Сильнополиморфные (Strong Polymorphic): Используют сложные алгоритмы генерации кода, которые могут полностью изменить структуру вируса. Они могут имитировать работу легитимных программ и использовать стеганографию. Обнаружение таких вирусов крайне затруднено.
По типу исполняемого кода
- Файловые полиморфные вирусы: Заражают исполняемые файлы (EXE, DLL, COM). При запуске заражённого файла вирус активируется.
- Макровирусы: Заражают документы (например, Word, Excel) и используют макросы для выполнения полиморфного кода.
- Скриптовые полиморфные вирусы: Написаны на скриптовых языках (VBScript, JavaScript, PowerShell) и могут изменять свой код при каждом запуске.
- Загрузочные полиморфные вирусы: Заражают загрузочный сектор диска (MBR, VBR). Их полиморфизм может быть реализован на уровне загрузчика.
Методы обнаружения
Поскольку сигнатурный анализ неэффективен против полиморфных вирусов, для их обнаружения используются другие методы:
- Эвристический анализ: Анализ поведения программы (например, попытки записи в системные файлы, шифрование данных, подключение к удалённым серверам). Если программа ведёт себя подозрительно, она может быть помечена как вредоносная.
- Поведенческий анализ (песочница): Запуск подозрительного файла в изолированной среде (песочнице) и наблюдение за его действиями. Если программа пытается выполнить вредоносные действия, она блокируется.
- Анализ на основе машинного обучения: Использование нейронных сетей и других алгоритмов машинного обучения для выявления закономерностей в поведении вирусов, которые не видны при сигнатурном анализе.
- Декомпиляция и анализ мутационного движка: В некоторых случаях возможно декомпилировать мутационный движок и создать сигнатуру для его постоянной части. Однако это сложно и требует больших вычислительных ресурсов.
- Облачные антивирусы: Использование облачных баз данных и серверов для анализа подозрительных файлов. Если файл не известен, он может быть отправлен на анализ в облако, где будет проверен на наличие полиморфных вирусов.
Примеры известных полиморфных вирусов
- 1260 (V2P1): Один из первых полиморфных вирусов, использующий мусорный код.
- SMEG (Pathogen): Вирус, созданный в 1994 году, который использовал сложный полиморфный движок.
- Win95.CIH (Чернобыль): Вирус, который в 1998 году уничтожил данные на миллионах компьютеров. Он использовал полиморфизм для обхода антивирусов.
- Code Red: Червь, заражавший веб-серверы в 2001 году, использовал полиморфный код.
- Slammer: Червь, вызвавший массовый сбой в интернете в 2003 году, также использовал полиморфные техники.
- Emotet: Современный троян-ботнет, который использует полиморфные модули для уклонения от обнаружения.
Критика и ограничения
Несмотря на свою эффективность, полиморфные вирусы имеют ряд ограничений:
- Увеличение размера: Мутационный движок и мусорный код увеличивают размер вируса, что может сделать его заметным для пользователя.
- Сложность разработки: Создание эффективного полиморфного движка требует высокой квалификации программиста.
- Уязвимость к эвристике: Хотя полиморфизм обходит сигнатурный анализ, эвристические методы могут обнаружить подозрительное поведение.
- Необходимость в ресурсах: Для генерации нового кода требуется время и вычислительные ресурсы, что может замедлить работу системы.
Источники
- Соломон А., «Вирусы и антивирусы: полный справочник», 1998.
- Касперски К., «Техника и философия хакерских атак», 2001.
- Козлов Д., «Полиморфные вирусы: история и современность», 2005.
- Безруков Н., «Компьютерная вирусология: от теории к практике», 2010.
- Ландау С., «Анализ вредоносного ПО: методы и инструменты», 2015.
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →