Умная пробирка для злобной малвары

24 мая 2019

Оригинал поста в блоге Евгения Касперского

Вы задавали себе вопрос, почему компьютерные вирусы назвали именно «вирусами»? Вопрос на самом деле риторический, но если для кого-то это не очевидно, то в нашей энциклопедии есть краткий и исчерпывающий ответ.

Эту подводку я использую с другой целью: а почему до сих пор всю компьютерную гадость многие так и называют «вирусами», хотя вирусов как таковых уже надцать лет не было замечено в «дикой цифровой природе»?

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

Вкратце, эмулятор — это метод выявления неизвестных угроз, при котором подозрительный файл запускается в виртуальном пространстве, имитирующем реальный компьютер. Антивирус* смотрит за поведением файла «на лету» и при обнаружении опасных действий изолирует его от греха подальше для проведения дополнительных исследований.

Чувствуете аналогию с оригинальной, микробиологической вирусологией? Зачем делать сомнительную инъекцию живому человеку и потом снимать показания, как его колбасит? Ведь можно эмулировать среду обитания «в пробирке» и наблюдать за поведением подозрительного объекта для выявления его вредоносной сущности.

Впрочем, как и в микробиологии, здесь перед нами встаёт непростая задача эмуляции этой самой естественной среды обитания — так, чтобы вирус зловред комар носа не подточил. Не знаю, как у наших коллег в белых скафандрах :), но мы («ЛК») без ложной скромности делаем это давно и «впереди планеты всей».

Первый в мире эмулятор я разработал ещё в далёкую DOS-эпоху летом 1992 г. Скоро эксперты начали восторгаться детектом нашего антивируса (да, тогда он ещё был «антивирусом»), который рвал конкурентов в независимых тестах, в том числе благодаря работе эмулятора.

Шло время, ландшафт угроз усложнялся: классические вирусы покинули сцену, им на смену пришли сетевые черви, трояны и прочие многоклеточные. Росло разнообразие компьютерных-мобильных-IoT-всех прочих цифровых технологий, а с ними и вредоносного инструментария, а с ним и компетенция эмулятора. Мы прикрутили его к облаку безопасности KSN, обучили новым языкам программирования, браузерам и прочим объектам операционной системы, чтобы автоматически ловить неизвестных зловредов. Никакой маркетинговой ИИ-лапши, только ловкость рук и мощь мозга в лучших традициях принципа инновационных реальных разработок HuMachine :)

Сегодня немногие конкуренты могут похвастаться такой технологией, что вполне понятно: эмулятор — это очень непростая задача, которая требует многолетней экспертизы, трудозатратной интеграции в «боевые» продукты и постоянного развития. Многие новички индустрии кибербезопасности предпочитают вкладываться в развесистый «ля-ля-маркетинг». В краткосрочной перспективе такой подход может дать увесистый толчок развитию бизнеса, но долго морочить голову пользователям не получится — до первого крупного прокола. Иными словами, наличие эмулятора свидетельствует об уровне экспертизы и зрелости разработчика, а его отсутствие — верный признак пустышки-однодневки.

Но я отвлёкся.

На самом деле кибернегодяи тоже, пардон, «не пальцем деланы» (с) и прилагают серьёзные усилия для защиты своего бизнеса и кибершпионских операций, в том числе в плане защиты от эмулятора.

Наиболее продвинутые группировки используют разнообразные антиэмуляторные уловки для распознавания «пробирки». Например, запуск недокументированной функции, проверка подлинности выполнения вызовов по изменению регистров процессора, анализ кодов ошибки, поиск в памяти определённого кода, использование «логических бомб», вводящих эмулятор в бесконечный цикл и так далее. Если зловред учуял что-то подозрительное, то он сворачивает выполнение вредоносной функции, прикидываясь «белым и пушистым» файлом. Но мы лучше их «пальцем не деланы» :) и с этими напастями и разными прочими технологическими особенностями (прежде всего, ресурсоёмкостью) эмулятора успешно боремся. Например, для его ускорения мы используем разные ограничители, оптимизаторы и профили настроек, вплоть до полного отключения этой фичи в определённых условиях, когда задержка BSoD‘у подобна.

А на днях наши патентоведы принесли ещё одну радостную весть: мы получили патент (US10275597) на эмулятор программного кода с функцией интерпретации неизвестных объектов! Насколько мне известно, ни в одном конкурирующем продукте такой фичи нет: для защиты от антиэмуляторных уловок малвары им приходится переделывать весь эмулятор, что, разумеется, процесс небыстрый. Мы же научили эмулятор обновляться «на лету» из локальной базы данных! В общем, очень полезная фича, а посему нет и повода не рассказать вам о ней, ибо знание того, как мы вас защищаем, — сила! :)

Дело в том, что некоторые файлы распространяются не в машинном коде, а непосредственно в коде программном. Для их выполнения на компьютере требуется интерпретатор (например, JavaScript или VBA), который в масштабе реального времени переводит этот код на понятный машине язык. И, понятное дело, в таких файлах тоже частенько встречаются зловреды.

Для обнаружения неизвестных угроз этого типа много лет назад мы создали эмулятор программного кода, который перед выполнением файлов проверяет их в «пробирке». Однако эмулировать интерпретатор целиком — слишком ресурсоёмкий вариант. Задержка в обработке web-страниц со скриптами вряд ли сделает счастливым среднего пользователя. Поэтому эмуляторы воссоздают компромиссный вариант виртуального пространства, приемлемый как с точки зрения производительности, так и качества защиты. Но что делать, когда эмулятор встречает в коде неизвестный объект, метод или функцию, без которых полноценный анализ файла не представляется возможным?

Задачу «надёжно и быстро» мы решили другим способом — при помощи умного интерпретатора, способного быстро обучаться эмулировать такие объекты. Во время обновления через облако KSN продукт получает вспомогательный код на языке анализируемого объекта (JavaScript, VBA, VB Script, AutoIt — список открыт для других языков) и уже с новыми знаниями возвращается к проверке файла. В сложных случаях, когда вспомогательного кода ещё нет, задача автоматически передаётся нашим аналитикам, которые его разрабатывают и оперативно добавляют в базу данных.

В итоге пользователь получает в распоряжение не только сильную, но и высокоскоростную технологию, способную быстро реагировать на киберугрозы, не дожидаясь перевыпуска всего эмулятора. Бинго!

* «Антивирус» — ещё один архаизм эпохи компьютерных вирусов. Современные антивирусы борются не только с вирусами, но со всем зловредством вообще, а также содержат много других полезных функций, например менеджер паролей, VPN, родительский контроль, резервное копирование и многое другое. Т. е. если называть антивирус по-новому, то получится что-то вроде Анти-всё-плюс-много-чего-ещё :)