Малварь по шагам [№5] Эмулятор

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

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

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

Ситуация с эмулятором чем-то напоминает знаменитую трилогию “Матрица”: главный герой (вредоносный файл) пытается понять находится ли он в реальном мире или в дьявольской симуляции, созданной хитроумной машиной, подключенной к его органам зрения\осязания\слуха (winapi). Если это ему удаётся, он получает шанс вырваться за границы иллюзий: при запуске нового файла, антивирус проверяет его в песочнице, после чего разрешает запуск в реальной системе.

Таким образом наша задача – обойти эмулятор. Как же это сделать? Из возможных путей взаимодействия с системой у нас только WinApi и чтение памяти собственного процесса напрямую. С помощью этих инструментов необходимо понять исполняемся ли мы внутри “коробки” или на реальной системе.

Эмулятор изнутри

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

emul

“Работает по принципу беговой дорожки: виртуальный мир исчезает за нами и моделируется впереди нас, пока мы продвигаемся по нему.” Рик и морти 1s-4s

Конкретные реализации могут отличаться, но суть остаётся та же. Эмулятор находит точку входа из pe-хидеров, загружает образ в память, выставляет начальные значения виртуальных регистров, стека и запускает пошаговую трассировку. Если мы обращаемся к некоему участку памяти, эмулятор генерирует его на лету, например код библиотек. Это даёт возможность корректно эмулировать хуки, не загружая настоящий код dll. Такие структуры как PEB довольно хорошо эмулируются, просто потому что используются почти во всех упаковщиках. Когда происходит вызов winapi, эмулятор вызывает специальную функцию изнутри себя, призванную симулировать исполнения реальной winapi, такие функции принято называть стабами или просто заглушкой.

Как легко догадаться, как бы не был стар и всеобъемлющ эмулятор, коду размером в 20МБ (~средний эмулятор) не под силу работать так же как ОГРОМНАЯ система windows.

Несколько интересных примеров обхода эмуляторов

WinApi
Предположим, мы знаем, что рядом с нашим вирусом всегда лежит файл конфигурации, некий “1.txt”. Мы пробуем его читать и завершаем процесс при его отсутствии, эмулятор же не использует данные реальной системы и ничего об этом файле не знает, поэтому его заглушка на CreateFile возвращает ошибку.

WinApi + SEH
Мы фазим несколько библиотек, составляя список функций, падающих в SEH при некорректных параметрах. Эмулятор проглатывает вызов функции и возвращает 0, в то время как реальная функция передаёт управление на SEH-обработчик.

WinApi + стек
Силой данной нам фазингом, мы узнаём, что некая функция после вызова на любой системе, оставляет после себя в стеке конкретное значение. Сверяем его с ожидаемым на реальной системе и если оно не совпадает – выходим. Эмулятор в пролёте.

Подсистемы windows
Году в 13 эмулятор AVP плохо справлялся с симуляцией потоков, чем охотно пользовались крипторы. Со временем симуляция этой подсистемы была доведена до ума. Если взять книгу о подсистемах винды и шаг за шагом проверить их работу под эмулятором, можно найти ещё много различий в ответах на реальной системе и в симуляции.

Ресурсы эмулятора
На каждый скан наложен жёсткий лимит по ресурсам компьютера: количество оперативки и процессорного времени. Атака на первый пункт не так широко распространена как на второй. Нет ничего проще и легальнее: вы создаёте огромное количество не-вирусного кода, с обилием WinApi вызовов, дабы эмулятор не мог исполнить весь ассемблерный код на реальном процессоре для скорости. Количество тактов, отведенных эмулятору заканчивается до начала вредоносного кода и мы получаем доступ к реальному процессору =).

Ваш вклад в исследования AV

Эмуляторы не стоят на месте, в ответ на новые тренды получают развитие эмуляторы js, WSH, макросов Word и прочих не компилируемых языков. Это огромный и интересный пласт знаний о работе AV, который только предстоит открыть и задокументировать. Если вы заинтересованы в подобных (и не только) исследованиях и даже хотите принять в них участие, создайте аккаунт тут , если среди вас будут талантливые кадры, форум заработает в полную силу.

Ссылки

Вы просили ссылок – проставляю их по статьям:

Ну и конечно, Вы можете помочь Ретвитами!

5 thoughts on “Малварь по шагам [№5] Эмулятор

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

Добавить комментарий