Вредоносный код и антивирусы играют в одну игру, но с разными правилами. Антивирус пытается найти короткое описание зловреда, чтобы его запомнить и быстро обнаружить. А зловред старается сделать своё описание максимально длинным и запутанным, чтобы антивирус не смог его легко опознать. Колмогоровская сложность объясняет, почему это противостояние в принципе невозможно разрешить окончательно — потому что нельзя создать универсальный алгоритм, который всегда сможет отличить «интересную» сложность от «бессмысленного» шума.
Что такое колмогоровская сложность и почему она не просто абстрактная теория
Колмогоровская сложность, это длина самой короткой программы, которая может полностью воспроизвести заданный объект, например, файл или строку данных. Если объект можно описать простой программой, его сложность низкая. Если для описания требуется длинный, запутанный код — сложность высокая.
В информационной безопасности это превращается из математического понятия в практическую проблему. Антивирусный сигнатурный анализ работает как поиск короткого описания вредоносного файла. Он хранит в своей базе эти краткие «описания» — сигнатуры. Когда антивирус встречает файл, он пытается сопоставить его с известными описаниями. Если вредонос можно кратко и точно описать (низкая колмогоровская сложность), его легко найти.
Обфускация — процесс намеренного запутывания кода — прямо атакует этот принцип. Она не меняет конечную цель программы (например, шифрование данных или их уничтожение), но делает её исходный код или исполняемый файл максимально запутанным и длинным. Таким образом, колмогоровская сложность вредоноса для антивирусного движка резко возрастает. Краткого описания для его обнаружения уже не существует, или его поиск становится непомерно затратным.
Как обфускация увеличивает сложность для антивируса
Техники обфускации напрямую нацелены на увеличение длины минимального описания программы. Рассмотрим несколько основных методов:
- Добавление избыточного кода (мусора): Встраивание функций или блоков данных, которые никогда не выполняются или не влияют на результат. Для антивируса они становятся частью объекта, которую нужно «описать», но которая не несёт смысловой нагрузки.
- Разрыв логических связей: Превращение линейного, понятного алгоритма в сеть разрозненных вызовов, переходов и условий. Программа делает то же самое, но путь к этому результату становится запутанным и длинным.
- Динамическое генерация кода: Критические части программы создаются только во время выполнения. Статический файл содержит лишь «затравку» — генератор. Полное описание поведения программы появляется только в памяти процесса, что исключает возможность его краткого статического описания в сигнатурной базе.
Эффект этих методов можно проиллюстрировать простым примером. Представьте инструкцию «взять чашку с полки». В чистом виде это короткое описание. Обфусцированная версия может выглядеть так: «подойти к комнате, проверить, что день недели — вторник, если нет — вернуться, затем сделать три шага вперед, повернуть голову на 15 градусов вправо, поднять правую руку на высоту 75 см, согнуть пальцы под углом 45 градусов…». Итоговое действие одно, но описание стало значительно длиннее и сложнее.
Почему это создает фундаментальную проблему для защиты
Ключевое следствие теории колмогоровской сложности — невозможность создания универсального алгоритма, который бы идеально отделял «высокую сложность из-за обфускации» от «высокой сложности из-за законной сложности программы». Граница между вредоносным запутыванием и, например, оптимизированным, но сложным кодом легального приложения (например, драйвера или системы шифрования) теоретически неразличима.
Это приводит к нескольким практическим следствиям для российского ИБ-сектора, особенно в контексте регуляторики (ФСТЭК, 152-ФЗ):
- Неэффективность чисто сигнатурных методов: Требования по использованию антивирусного ПО часто формально выполняются за счет продуктов, основанных на классических сигнатурах. Однако против современного обфусцированного вредоносного ПО они оказываются малоэффективными.
- Сдвиг к поведенческому анализу и песочницам: Поскольку статическое описание (сигнатура) становится недоступным, защита вынуждена анализировать поведение программы в исполняемой среде (песочнице). Это соответствует принципу контроля неизвестных приложений, прописанному в некоторых требованиях ФСТЭК.
- Проблема ложных положительных срабатываний: Поведенческий анализ, пытаясь уловить запутанные вредоносы, может начать флагать сложные легитимные программы, что создает операционные трудности и снижает доверие к системе защиты.
Обфускация как асимметричное преимущество атакующего
С точки зрения ресурсов, обфускация дает атакующему асимметричное преимущество. Создать один экземпляр запутанного вредоносного ПО относительно недорого. А вот для защитника:
- Анализ каждого такого экземпляра требует значительных вычислений (поведенческий анализ, эвристики).
- Невозможно создать универсальное «краткое описание» для всей категории подобных угроз.
- Обновление баз сигнатур или поведенческих моделей против новых техник обфускации — постоянная и ресурсоемкая задача.
В условиях, когда отечественное ИБ-ПО часто должно работать в ограниченных или изолированных инфраструктурах (согласно требованиям регуляторов), эта ресурсная асимметрия становится особенно критичной. Защитная система может не иметь постоянного доступа к облачным базам угроз или возможности для тяжелого локального анализа в реальном времени.
Что это значит для практиков и регуляторов
Понимание этой фундаментальной ограниченности меняет подход к построению систем защиты.
| Традиционный подход (на основе сигнатур) | Подход, учитывающий проблему сложности |
|---|---|
| Фокус на своевременном обновлении баз сигнатур. | Фокус на контроле поведения и контекста исполнения (песочницы, изоляция, контроль целостности). |
| Доверие к статическому сканированию файлов. | Признание, что статическое сканирование неэффективно против сложных угроз, и дополнение его динамическими методами. |
| Требования регуляторов формулируются как «наличие антивирусного ПО». | Требования должны формулироваться как «наличие механизмов контроля неизвестного и потенциально опасного кода», включая поведенческий анализ и изоляцию. |
Для специалистов, осуществляющих аттестацию систем по требованиям ФСТЭК или 152-ФЗ, важно оценивать не просто наличие «антивируса», но и его способность противостоять угрозам, использующим обфускацию — через механизмы песочниц, эвристического анализа и контроля исполняемых процессов.
В конечном счете, колмогоровская сложность показывает, что борьба с вредоносным ПО, это не борьба за полное уничтожение угроз, а борьба за управление рисками. Задача защиты — не найти «идеальное краткое описание» всех вредоносов, а создать такие условия в системе, где даже неопознанный запутанный код будет иметь минимальные возможности для реализации своей вредоносной логики.