Загрузка...

Antivirus bypass methods in simple language.

Thread in Security created by Gr0m0z3k4 Mar 26, 2018. 1150 views

  1. Gr0m0z3k4
    Gr0m0z3k4 Topic starter Mar 26, 2018 3 Mar 22, 2018
    [IMG]
    Как известно, целью проактивного сканирования, является предотвращение заражения системы пользователя.

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

    Основные виды проактивного сканирования:

    Эвристический анализ.

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

    Эмуляция.

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

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

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

    В основном под вышеописанные задачи используется алгоритм RunPE, который как видно из названия, запускает приложение в памяти, ничего особенного в нем нет, данный метод загрузки устарел, является неэффективным. Первая ссылка из гугла: https://github.com/Zer0Mem0ry/RunPE. Алгоритм данного загрузчика заключается в создании остановленного процесса, и мэппинга импортов из таблицы.

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

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

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

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

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

    С виду все достаточно неплохо, но все не так просто как вам показалось с первого взгляда, при распаковке контейнера в памяти, подключаются модули динамического сканирования, и при нахождении определенной сигнатуры – моментально прерывают эмуляцию, и возвращают код детекта. Некоторые антивирусы ****ят первые байты контейнера, при нахождении сигнатуры 0x4D, 0X5A(MZ), детектят в лучшем случае как упаковщик. В большинстве случаев проблема решается помещением крипто-контейнера с первыми рандомными байтами, и заменой MZ после распаковки. И если с эвристическим методом - все достаточно просто, то с эмуляцией все намного веселее.

    Рассмотрю как её обойти:

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

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

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

    На самом деле существует целый ряд методов обхода эмуляции, некоторые из них перечислю:

    • Замена высокоуровневых апи-вызовов на низкоуровневые системные вызовы (x64 syscall/x86 sysenter).

    • Полиморфная распаковка крипто-контейнеров.

    • Динамическая защита памяти на основе хардварных треков.

    Если будет много заинтересованных в этой теме, то можно будет сделать несколько статей по этим методам.
     
  2. STAR1XZ
    STAR1XZ Apr 9, 2018 Banned 163 Jan 20, 2018
    FTa1ty, жду ссылку где написано об этом на лолзе и я удаляю тему
     
Loading...
Top