Вы используете устаревший браузер!

Страница может отображаться некорректно.

  • добавить в избранное
    Добавить в закладки

Покой нам только снится

Прочитали: 5297 Комментариев: 79 Рейтинг: 165

11 апреля 2017

Если вы знакомы с антивирусами – значит, слышали и о сигнатурах. По крайней мере, наши постоянные читатели о них точно знают. Напомним, о чем речь.

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

То есть теоретически из образца вредоносной программы можно выделить (вручную или автоматически) некий фрагмент кода (как можно меньшего размера – в целях минимизации размера вирусных баз), протестировать его на несовпадение с кодом другого вредоносного ПО и наиболее распространенных легитимных программ и поместить его в вирусные базы. После этого антивирус может выявлять факт заражения, просто пробежавшись по коду программы.

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

Но если антивирус легко может выявлять вредоносные файлы по сигнатуре, то могут ли киберпреступники и вовсе от нее избавиться?

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

Первый известный полиморфный вирус был написан Марком Вашберном (Mark Washburn). Вирус, который назывался 1260, был создан в 1990 году. Более известный полиморфный вирус был внедрен в 1992 году болгарским взломщиком Dark Avenger (псевдоним), создавшим MtE (Mutation Engine).

Избавиться от сигнатур можно несколькими способами.

NOP. Она же NOOP (сокращение от английского «No OPeration») – специальная команда, предписывающая не делать ничего. Применений у данной инструкции множество. Например, она может использоваться для создания задержки на определенное время.

Если упрощать, то любая программа (в том числе вредоносная) – это набор команд и данных. Код – это поток последовательных команд. Поскольку NOP не делает ничего, то это команду можно вставлять где угодно в потоке других инструкций или разбрасывать случайно по коду: на работоспособности программы это никак не скажется (если, конечно, программа не критична к задержкам, вносимым NOP).

Подход простой, но и ответ со стороны антивируса тоже элементарен: при сравнении файла с сигнатурами команды NOP игнорируются.

Второй вариант – шифрование. Как известно, если шифровать данные с разными ключами, то зашифрованный код получится разный. При заражении файла вредоносный код шифруется с новым ключом, который кладется в код распаковщика (декриптор). Помещаем в заражаемый файл зашифрованный буфер с данными, добавляем в декриптор указание на начало зашифрованного кода и помещаем сам декриптор в заражаемый файл.

В итоге антивирус не может ориентироваться на зашифрованный код, а лишь на декриптор. При этом помним, что декриптор тоже изменяется при заражении – в него помещаются ключ и адрес перехода.

К сожалению пользователи, увидев очередные тесты антивирусов, зачастую смотрят только на их результаты, мало обращая внимание на методику.

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

Однако все вышеописанное лишь затрудняет работу антивируса, не более. А вот полностью избавиться от характерных участков кода позволяет пермутация.

Напомним, что код – это поток команд, некая дорожка. При этом он может не располагаться последовательно, его можно разбросать, соединив фрагменты переходами – командами JMP (прыжок).

При таком подходе вредоносный код состоит из некоторого количества блоков, которые переставляются местами при каждом заражении и связываются JMP-ами. Все просто? Как бы не так! Любая программа – это вызов функций, многочисленные внутренние переходы и т. д. Соответственно, разбросав логические блоки, нужно пройтись по коду второй раз и скорректировать все вызовы так, чтобы они указывали на нужные места. Опять же, требование отказа от сигнатур приводит к тому, что блоки вредоносных программ должны быть очень маленькими, что противоречит требованию целостности блока.

Как антивирус может противостоять пермутации? Он теперь не просто ищет сигнатуры, а бежит по инструкциям анализируемой программы, перескакивая по переходам. Таким образом, пробегая по последовательности выполнения программ (фактически выполняя файл внутри антивирусного движка), антивирус снова собирает сигнатуру.

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

Эвристический анализатор позволяет определить вредоносные программы, похожие на ранее изученные. Но это – лишь одна из задач эвристика.

Приведем несколько эвристических признаков:

Точка входа в секции открытой для записи(rwx). Открытая для записи, исполняемая секция, в которую сразу передается управление, с большой вероятностью свидетельствует о наличии самомодифицирующегося кода, такие секции используются в подавляющем большинстве случаев вирусами и программными защитами.

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

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

Поломки в заголовке. Некоторые модификации заголовка после инфицирования оставляют файл работоспособным, но сам заголовок при этом содержит ошибки, которые линкер бы не допустил. Это тоже подозрительно.

Нестандартный формат некоторых служебных секций. В исполняемых файлах есть служебные секции, такие как, например, .ctors, .dtors, .fini и т.п. Особенности этих секций могут использоваться вирусами для заражения файла. Нарушение формата такой секции также является подозрительным.

… и еще сотня таких признаков.

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

https://habrahabr.ru/company/mailru/blog/240655/

Итак, пермутация не является проблемой для поиска сигнатур, хотя, конечно, сильно поднимает планку требований к команде разработчиков антивируса.

Что еще есть в арсенале злоумышленников?

Генерация мусора. Выше мы говорили о команде NOP. Вместо нее вирусописатели могут при заражении вставлять во вредоносный код множество лишних инструкций, пряча действительно вредоносный код среди ничего не значащих команд. Задача выглядит простой, но таковой не является, так как код должен остаться работающим несмотря на добавление кучи лишних команд.

Для противодействия такому подходу полиморфный анализатор еще более усложняется – нужно не только собирать код в сигнатуры, но и очищать его от неработающих кусков (а если через этот анализатор прогнать код Windows – много ли от него останется?). Повышается цена ошибки полиморфного анализатора.

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

Как многим известно, изначально почти все программы пишутся на определенном языке программирования, который с помощью специальной программы-компилятора переводится в исполняемый код. При этом в общем случае при каждом запуске, в зависимости от опций компилятора, код может создаваться новый. Программа может быть оптимизирована по скорости, компактности, потреблению ресурсов и т. д. Аналогично работает и метаморфный генератор. При каждом запуске создается новый код вредоносной программы на основе базового.

Вредоносный код можно еще более запутать работой с константами, регистрами вызова и т. д. Здесь уместно привести аналогию из математики, пусть и далекую. Скажем, число 6 может быть получено как 2+4, 3+3, 8-2... Какая сигнатура операции будет характерной?

Чтобы справиться с таким методом, просто анализировать код антивирусу уже недостаточно. Совершенствование полиморфного анализатора превращает его в эмулятор. То есть внутри антивирусного ядра находится фактически система запуска программы на исполнение, отслеживающая уже не сигнатуры, а действия «запускаемой» программы.

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

Если вы в состоянии написать хороший метаморфный генератор, с которым специалисты провозятся хотя бы несколько дней, или эмулятор, детектирующий сигнатуру внутри качественного вирусного движка, или сделать качественный crackme, который публично зауважают, то… просто напишите мне. Я не рекрутер, но если вас будет много — сменю профессию, просто представляя вас компаниям, которые занимаются безопасностью. Будьте уверены, ваши доходы и стабильность по жизни во много раз перевесят то, что можно получить, распространяя вирусы или взламывая софт.

https://habrahabr.ru/company/mailru/blog/240655

#терминология #технологии #технологии_Dr.Web #антивирусная_проверка

Антивирусная правДА! рекомендует

Cовременный антивирус – это очень и очень сложная система, возникшая в ходе борьбы с поколениями вредоносных программ. Создание антивируса сегодня под силу только немногим компаниям.

Оцените выпуск

Сделайте репост

Необходимо войти на страницу выпуска через аккаунт на сайте «Доктор Веб» (или создать аккаунт). Аккаунт должен быть связан с вашим аккаунтом в социальной сети. Видео о связывании аккаунта.


Нам важно ваше мнение

Чтобы оставить комментарий, нужно зайти через свой аккаунт на сайте «Доктор Веб». Если аккаунта еще нет, его можно создать.

Комментарии пользователей


 
На страницу: