Перейти к содержимому





Поиск по форуму

   

Фотография

Навороченные методы обхода антивируса


  • Авторизуйтесь для ответа в теме
В этой теме нет ответов

#1
Ymatox

Ymatox

    Участник

  • Пользователь написал
    75 Cообщений

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

Об этом мы сегодня и поговорим.

 

Основные виды проактивного сканирования:
  • Эвристический анализ

Один из методов детектирования, работает на основе сканирования приложения на малварьные паттерны.

 

  • Эмуляция

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

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

Антиэмуляционные приемы ожидающие вызовов системных событий по типу “нажми на кнопку”, не работают, точно так же как и sleep’ы в циклах.

 

Немного о загрузчиках:

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

Первая ссылка из гугла: 

Пожалуйста Войдите или Зарегистрируйтесь чтобы увидеть скрытый текст

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

 

LoadPE- метод загрузки, который подразумевает выполнение приложения в своей памяти, используется упаковщиками.

 

Данный метод загрузки сложнее в реализации, но в разы эффективнее предыдущего, работает по следующему алгоритму:

мэппит структуры PE в свое пространство (импорты, релокации, тлс), дополнительных процессов не создается.

 

Немного о крипто-контейнерах:

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

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

Некоторые антивирусы брутят первые байты контейнера, при нахождении сигнатуры 0x4D, 0X5A(MZ), детектят в лучшем случае как упаковщик.

В большинстве случаев проблема решается помещением крипто-контейнера с первыми рандомными байтами, и заменой MZ после распаковки.

 

И если с эвристическим методом - все достаточно просто, то с эмуляцией все намного веселее. 

Давайте расмотрим как её обойти: 

1. не вызывать хукнутые функции, не вызываем подозрений, не вызывав ни 1-й, а реализовав эту функцию у себя в коде.

2. вызывать функции напрямую, без мэппинга в таблицу импортов.

3. использовать системные вызовы

 

На самом деле существует целый ряд методов обхода эмуляции, некоторые из них перечислю ниже:
  • Замена высокоуровневых апи-вызовов на низкоуровневые системные вызовы (x64 syscall/x86 sysenter).
  • Полиморфная распаковка крипто-контейнеров.
  • Динамическая защита памяти на основе хардварных треков.

 

Данные методы выходят за рамки статьи, и достойны целой серии.

 

 

Данная статья создана исключительно для ознакомления и не призывает к действиям!


  • 0




Количество пользователей, читающих эту тему: 2

0 пользователей, 2 гостей, 0 анонимных