ORGaniZM Много будет.... ну ладно!
[more]
На данный момент в мире создаётся всё большее количество вирусов, за количеством которых невозможно успеть. Поэтому современные технологии "облачных сетей" и эвристических анализаторов кода призваны обеспечить защиту от совершенно новых угроз до того, как аналитики добавят образцы в антивирусные базы.
Не для кого не секрет, что в каждой системе всегда найдется пара дырок, которые рано или поздно выплывут наружу. Иногда это связано с ошибками программистов, иногда - из-за развития технологий вирмейкерства. В данной статье я покажу Вам один из способов обхода эмулятора в последних версиях антивируса Касперского.
Теория Что вообще из себя представляет эмулятор в антивирусе и зачем он нужен ? Ответ очень прост - практически все вредоносное ПО подвержено шифрованию и пакингу различными крипторами и протекторами, во время проверки файла на диске эмулятор "раскручивает" тестируемый исполнительный файл на своей виртуальной машине и постепенно "добирается" до нужного кода, детект которого уже происходит либо сигнатурным, либо эвристическим методом.
Во время разработки одной из своих программ я столкнулся с проблемой, что антивирус Касперского постоянно ругался на мой ехешник, как на "
HEUR:Trojan.Win32.Generic", хотя ничего вредоносного в нем я не видел. Методом исключений было выявлено, что антивирус ругается на создание процесса функцией CreateProcess(...), если в ее параметрах выставлен флаг скрытого запуска процесса. Деваться от этого было некуда, поэтому пришлось перебирать различные варианты исполнения кода, тем более мне самому это было интересно. Результат не заставил себя долго ждать - за пару часов было найдено три способа противодействия эмулятору, давайте рассмотрим, на мой взгляд, самый интересный из них, который заключается в уязвимости проверок api функций.
Эмулятор проверяет лишь вызовы win api, которые делает тестируемое приложение, но вот анализирует ли он другие api, которое вызывает проверяемое, как оказалось - нет. Было ли это сделано в целях оптимизации или же простой недосмотр разработчиков - никто и не узнает.
Для наглядности привожу маленькую схемку: слева изображено исполнение программы в реальной среде, а справа - исполнение проверок над кодом в среде эмулятора антивируса.
Практика В пример привожу часть кода, которая детектировалась в моей программе. Как и говорилось ранее - код не делает ничего плохого, лишь запускает процесс в остановленном виде. Написан на delphi.
Код: procedure ProcessBadCode();
var
StartInfo : TStartupInfoA;
ProcInfo : TProcessInformation;
begin
ZeroMemory(@StartInfo, SizeOf(TStartupInfoA));
StartInfo.cb := SizeOf(TStartupInfoA);
CreateProcessA(nil, 'svchost.exe', nil, nil, False, CREATE_SUSPENDED, nil, nil, StartInfo, ProcInfo);
end;
begin
ProcessBadCode();
end.