Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Как исследовать алгоритм работы вируса

Стандартные программы защиты

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

Стоит также заметить, что программы-детекторы не слишком универ-
сальны, поскольку способны обнаружить только известные вирусы. Не-
которым таким программам можно сообщить специальную последова-
тельность байт, характерную для какого-то вируса, и они смогут
обнаружить инфицированные им файлы - например, это умеет Notron
AntiVirus или AVSP.

Программа Aidstest устарела и сейчас уже практически не использует-
ся. Наиболее широкое распространение получили программы DrWeb
и AVP. Благодаря своим новейшим детекторам, они могут обнаружить
любые вирусы - как самые старые, так и только что появившиеся. Еще
нужно упомянуть детектор Adinf. Эта антивирусная программа обнару-
живает все вирусы, не изменяющие длину файлов, невидимые вирусы,
и многие другие. Таким образом, эти три программы обеспечат мощней-
шую защиту против вирусов. Кстати, на западе тоже предпочитают
пользоваться российскими программами DrWeb и AVP.

Спасаясь от вирусов, создайте мощную защиту против них. Установите
на своем диске AVP, DrWeb и Adinf. Каждая программа хороша по-сво-
ему - пусть защита будет многоуровневой. Все эти программы можно
вписать в файл AUTOEXEC.BAT, тогда при загрузке компьютера про-
верка на заражение вирусом будет проводиться автоматически.

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

Поиск вируса

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

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

Типичный вариант: стандартная PC (286, 386...Pentium), как минимум
1Мбайт ОЗУ, как минимум 400Мбайт HDD; возможно наличие прин-
тера, звуковой карты, CDD и прочей периферии. Программное обеспе-
чение: Windows 95, возможно Windows 3.1x, но работают все равно под
DOS. Джентльменский набор: Norton Commander 3.0-5.0, Norton Utility
6.0-8.0, свежие антивирусы: AidsTest и DrWeb, русификаторы, архивато-
ры, резидентные программы и прочее. В качестве обязательного усло-
вия - наличие заведомо "чистой" защищенной от записи загрузочной
дискеты, содержащей (хотя бы в урезанном виде) вышеупомянутый
комплект программ.

Итак, по мнению хозяина компьютер ведет себя странно. Например,
программы, которые раньше работали правильно, начинают сбоить или
вообще перестают запускаться, компьютер периодически "виснет", эк-
ран и динамик воспроизводят необычные видео- и аудиоэффекты. Что
будем делать?

1. Усаживаем перед собой хозяина компьютера и подробно расспраши-
ваем его о событиях, предшествующих возникновению сбоев. Выяс-
нить нужно следующее.

Кем и как используется машина? Если сотрудники или хозяин час-
то приносят мелкие игрушки, гороскопы, устанавливают и стирают
различные бухгалтерские программы, то вероятность наличия виру-
са в машине весьма высока. Крупные игрушки, которые с трудом
умещаются даже в упакованном виде в коробку дискет, переносятся
с машины на машину редко. При этом они, чаще всего, тщательно
проверяются на наличие вирусов.

а) Когда впервые замечены симптомы вируса? Некоторые вирусы
любят приурочивать свою деятельность к определенной дате или
времени: 1 мая, 7 ноября, 13-е число, пятница, пять часов вечера,
а также 6 марта, 15 ноября, 11-я минута каждого часа.

б) Не связаны ли изменения в работе компьютера с первым запус-
ком какой-либо программы? Если да, то эта программа - первая
в очереди на "медкомиссию".

в) Не связано ли появление симптомов заражения с распаковкой
какого-либо старого архива и запуском программ из него? Неко-
торые современные антивирусы (AVP, DrWeb) умеют проверять
архивы наиболее популярных форматов. Но ведь изредка еще
встречаются архивы.ice,.arc,.zoo,.bsa,.uc2,.ha,.pak,.chz,.eli
и прочие - их антивирусы диагностировать не могут.

г) Не имеет ли хозяин (хозяйка) компьютера привычку оставлять
дискеты в дисководе при перезагрузке? Загрузочный вирус мо-
жет годами жить на дискете, никак себя не проявляя.

2. В присутствии хозяина (хозяйки) включаем компьютер. Вниматель-
но следим за процессом загрузки. Сначала запускается программа
POST, записанная в ПЗУ BIOS. Она тестирует память, тестирует и
инициализирует прочие компоненты компьютера и завершается ко-
ротким одиночным гудком. Если "вирус" проявляет себя уже на
этом этапе - он здесь ни при чем. Теоретически вирус может суще-
ствовать и в BIOS: предполагается, что первые вирусы на террито-
рию СССР "приехали" внутри болгарских ПЗУ (современные ПЗУ
часто не являются "постоянными запоминающими устройствами",
они предусматривают возможность перезаписи BIOS).

3. В присутствии хозяина (хозяйки) пытаемся вызвать необычное по-
ведение компьютера.

а) Идеально, если вирус (если это действительно он) самостоятель-
но извещает всех о своем присутствии, например, выводит на эк-
ран сообщение типа "I am VIRUS!".

Вирусы проявляют себя различными способами: проигрывают ме-
лодии, выводят на экран посторонние картинки и надписи, имити-
руют аппаратные сбои, заставляя дрожать экран. Но, к сожалению,
чаще всего вирусы специально себя не обнаруживают. К антиви-
русным программам прилагаются каталоги с описаниями вирусов
(для AidsTest они хранятся в файле aidsvir.txt, для DrWeb -
в файле virlist.web). Наиболее полным является гипертекстовый
каталог avpve, входящий в состав антивирусного пакета Е. Каспер-
ского. В нем можно не только прочитать достаточно подробное
описание любого вируса, но и понаблюдать его проявления.

От настоящих вирусов следует отличать так называемые "студен-
ческие шутки", особенно широко распространенные на компью-
терах ВУЗов и школ. Как правило, это резидентные программы,
которые периодически производят напоминающие работу виру-
сов видео- и аудиоэффекты. В отличие от настоящих вирусов,
эти программы не умеют размножаться. Наличие такого рода
программ на "бухгалтерских" компьютерах маловероятно.

б) Очень часто сбои вызываются вирусами не преднамеренно,
а лишь в силу их несовместимости с программной средой, возни-
кающей из-за наличия в алгоритме вируса ошибок и неточнос-
тей. Если какая-либо программа "зависает" при попытке запуска,
существует очень большая вероятность, что именно она и зараже-
на вирусом. Если компьютер "виснет" в процессе загрузки (пос-
ле успешного завершения программы POST), то при помощи по-
шагового выполнения файлов config.sys и autoexec.bat (клавиша
F8 в DOS 6.x) можно легко определить источник сбоев.

4. Не перегружая компьютер, запускаем (можно прямо с винчестера)
антивирус, лучше всего DrWeb с ключом /hal. Вирус (если он есть)
попытается немедленно заразить DrWeb. Последний достаточно на-
дежно детектирует целостность своего кода и в случае чего выведет
сообщение "Я заражен неизвестным вирусом!" Если так и произой-
дет, то наличие вируса в системе доказано. Внимательно смотрим на
диагностические сообщения типа "Файл такой-то ВОЗМОЖНО за-
ражен вирусом такого-то класса" (СОМ, EXE, TSR, BOOT, MACRO
и т.п.). Подозрения на ВООТ-вирус в 99% бывают оправданы.

Однажды DrWeb 3.20 "ругался" на ВООТ-сектор дискеты, "вылечен-
ной" AidsTest от вируса LzExe, поэтому антивирусным программам
тоже не всегда можно доверять. Наличие большого количества фай-
лов, предположительно зараженных вирусом одного и того же клас-
са, с большой достоверностью указывает на присутствие в компьюте-
ре неизвестного вируса. Но могут быть и исключения - DrWeb
версии 3.15 и ниже активно "ругался" на стандартные DOC-компо-
ненты WinWord 2.0.

Кроме того, DrWeb определяет наличие в памяти компьютера неиз-
вестных резидентных вирусов и Stealth-вирусов. Ошибки при их
определении (в последних версиях антивируса) достаточно редки.
Версия 3.15, не умеющая лечить вирус Kaczor, исправно заподозри-
ла наличие агрессивного резидента в памяти. Версия же 3.18, умею-
щая его лечить, в инфицированной системе вообще ничего не заме-
тила, а детектировала и вылечила вирус лишь при загрузке с чистой
дискеты. При этом нужно иметь в виду, что предупреждения типа
"Странная дата файла", единичные подозрения на СОМ-, ЕХЕ-ви-
русы и прочее вряд ли могут быть расценены как бесспорное дока-
зательство наличия вируса.

MACRO-вирусы живут исключительно в Windows и никакого нега-
тивного влияния на DOS-программы оказать не могут, за исключе-
нием того случая, когда они что-либо стерли в Windows-сеансе.

5. Нередко сбои бывают вызваны естественными причинами, никако-
го отношения к вирусам не имеющими.

а) Аппаратные сбои. Исключить эту возможность поможет загрузка
с чистой дискеты и запуск (с нее) диагностической программы
ndiags. Тестируем память, основную плату, порты и все осталь-
ное. Иногда достаточен простой внешний осмотр компьютера -
может быть, что-то неправильно подключено.

б) Нарушения в логической структуре диска. Загружаемся с чистой
дискеты и запускаем (с нее) ndd. Сначала просто отмечаем наличие
ошибок (перекрестных цепочек, потерянных кластеров и так далее).
Если ошибок очень много и подавляющее их число относится
к СОМ- и ЕХЕ-файлам, то ни в коем случае нельзя выполнять опе-
рацию исправления ошибок: это может быть DIR-подобный вирус,
и такое "лечение" диска может стать для многих программ фаталь-
ным. Если ошибки есть и их относительно немного, рискуем и ле-
чим диск. Вновь загружаемся с винчестера. Сбои пропали?

в) Конфликты между различными компонентами операционной си-
стемы и прикладными программами. Особенно "вредоносными"
являются дисковые драйверы-обманщики, активно видоизменяю-
щие (пусть и с благородными целями) информацию, считывае-
мую или записываемую на диск:

- дисковые кэш (SMARTDRV, NC_CASHE);

- упаковщики дисков (DblSpace, DrvSpace, Stacker);

- системы безопасности (антивирусные мониторы типа PROTECT,
HDPROT, ADM и прочие, системы разграничения доступа
DISKMON, DISKREET). Нередко сбоят устаревшие пристыковоч-
ные системы защиты от несанкционированного копирования, типа
NOTA или CERBERUS.

6. Наконец, самый интересный случай - вирус явно не обнаружен,
но подозрения на его наличие 'по-прежнему остаются. Достаточно
подробно эту тему изложил Е. Касперский в своей книге "Компью-
терные вирусы в MS-DOS", избранные фрагменты которой можно
найти в гипертекстовом каталоге avpve того же автора. Остается
только привести краткое изложение этих глав с уточнениями и за-
мечаниями (может быть, весьма спорными).

а) Обнаружение загрузочного вируса. Загружаемся с чистой дискеты
и, запустив DiskEditor, заглядываем в сектор 0/0/1 винчестера.
Если винчестер разделен (при помощи fdisk) на логические диски,
то код занимает приблизительно половину сектора и начинается
с байт FAh 33h COh (вместо 33h иногда может быть 2Bh). Закан-
чиваться код должен текстовыми строками типа "Missing operating
system". В конце сектора размещаются внешне разрозненные бай-
ты таблицы разделов. Нужно обратить внимание на размещение
активного раздела в таблице разделов. Если операционная система
расположена на диске С, а активен 2, 3 или 4 раздел, то вирус мог
изменить точку старта, сам разместившись в начале другого логи-
ческого диска (заодно нужно посмотреть и там). Но также это мо-
жет говорить о наличии на машине нескольких операционных си-
стем и какого-либо boot-менеджера, обеспечивающего выборочную
загрузку. Проверяем всю нулевую дорожку. Если она чистая,
то есть ее сектора содержат только байт-заполнитель, все в поряд-
ке. Наличие мусора, копий сектора 0/0/1 и прочего может гово-
рить о присутствии загрузочного вируса. Впрочем, антивирусы при
лечении загрузочных вирусов лишь "обезглавливают" противника

(восстанавливают исходное значение сектора 0/0/1), оставляя тело
"догнивать" на нулевой дорожке. Проверяем boot-сектор MS-DOS,
он обычно расположен в секторе в 0/1/1. Его внешний вид для
сравнения можно найти как в вышеупомянутой книге Е. Касперс-
кого, так и на любой "чистой" машине. Итак, если вирус обнару-
жен, при помощи DiskEditor переписываем в файл зараженный
объект: MBR 0/0/1 (а лучше всю нулевую дорожку), boot 0/1/1
и все остальное. Желательно отправить этот комплект вирусоло-
гам. Копию, при желании, оставляем себе - для опытов.

б) Обнаружение файлового вируса. Нерезидентные файловые виру-
сы специально не скрывают своего наличия в системе. Поэтому
основным признаком заражения файла является увеличение его
длины, которое легко заметить даже в инфицированной операци-
онной системе. Резидентные вирусы могут скрывать изменение
длины файла (да и вообще наличие своего кода внутри файла-
жертвы), если они написаны по Stealth-технологии. Но при заг-
рузке с "чистой" дискеты это можно увидеть. Некоторые вирусы
не изменяют длину заражаемых программ, используя "пустые"
участки внутри файла программы или кластерный "хвост" фай-
ла, расположенный после последнего заполненного сектора.

В этом случае основной признак заражения - изменение конт-
рольной суммы байт файла. Это легко обнаруживают антивиру-
сы-инспектора типа Adinf. В качестве крайней меры можно рас-
сматривать прямое изучение кода программ, подозрительных
с точки зрения наличия в них вируса. Одно из лучших программ-
ных средств для оперативного изучения кода вирусов - програм-
ма HackerView (hiew.exe by SEN). Но, поскольку "по умолча-
нию" компьютер чужой, hiew, td, softice, ida и подобных
программ на нем может просто не оказаться. Зато стандартный
отладчик debug присутствует точно. Загружаем подозреваемую
на наличие вируса программу (в чистой операционной системе)
в память при помощи команды debug <имя_программы>. Коман-
да и позволяет дизассемблировать фрагмент кода, команда d -
просмотреть его в шестнадцатеричном формате, команда g <ад-
рес> запускает программу на выполнение с остановом в указан-
ной точке, команда t обеспечивает пошаговую трассировку кода,
команда г отображает текущее содержимое регистров. Чтобы ви-
зуально распознать наличие вируса по коду, конечно, необходим
определенный опыт. Вот на что надо обращать особое внимание:

- Наличие в начале программы последовательности команд подоб-
ного типа крайне подозрительно:

Start:

call Metka
Metka: pop<r>

- Наличие в начале файла строк типа "PkLite", "Ь291"или "diet"
подразумевает обработку программы соответствующим упаковщиком;

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

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

- Подозрение вызывают расположенные в начале программы, напи-
санной на языке высокого уровня, фрагменты видоизменения соб-
ственного кода, вызовы DOS- или BIOS-прерываний и прочее. Же-
лательно визуально помнить характерные начала программ,
скомпилированных в той или иной системе программирования (на-
пример, начала программ, написанных на Turbo Pascal, содержат
большое количество дальних вызовов подпрограмм call xxxx:xxxx).

- Наконец, о наличии вируса могут свидетельствовать "посторон-
ние" строки типа "Eddie lives." внутри файла.

7. Ловля вируса "на живца". Итак, допустим, что наличие вируса в си-
стеме доказано одним из предложенных выше методов, и заражен-
ные вирусом объекты определены. Теперь можно начать изучение
вируса и, вслед за этим, попытаться удалить его с машины. Жела-
тельно послать образец вируса профессиональным вирусологам.
А для этого необходимо выделить вирус в чистом виде.

а) Выделение загрузочного вируса. Как уже говорилось выше, если
вирус заразил винчестер, необходимо при помощи программы
DiskEditor сохранить в файле образ зараженного объекта (напри-
мер, сектора 0/0/1 или всей нулевой дорожки). Но, как известно,
загрузочные вирусы только "живут" в системных областях вин-
честера, размножаются же они, заражая системные области дис-
кет. Поэтому смотрим на лицевую панель компьютера. Если
в наличии дисководы обоих типов (3.5" и 5.25"), то придется

/•

отформатировать 4 дискеты на 4 стандартных формата: 360Кбайт,
720Кбайт, 1.2Мбайт и 1.44Мбайт. Затем при помощи программы
DiskEditor внимательно рассмотрим и постараемся запомнить
внешний вид boot-секторов этих дискет (0/0/1), хотя бы первые
байты (естественно, все это делается на чистой машине). Встав-
ляем не защищенные от записи дискеты по очереди в дисководы
"больной" машины и (обязательно) обращаемся к ним: пытаемся
прочитать каталог, записать, прочитать и удалить какие-либо
файлы. Наконец, на чистой машине при помощи DiskEditor
вновь просматриваем сектор 0/0/1. Если на какой-либо дискете
он изменился, при помощи того же DiskEditor снимаем образ
всей дискеты в файл. Вирус пойман. Можно упаковать файл ка-
ким-нибудь архиватором и послать его вирусологу. Некоторые
хитрые вирусы хранят свое тело на дополнительной, специально
отформатированной дорожке, так называемом инженерном ци-
линдре дискеты. В этом случае без пакета копирования ключевых
дискет типа fda, teledisk или copymaster не обойтись.

б) Выделение резидентного вируса. Как известно, резидентный ви-
рус постоянно находится в памяти ПЭВМ, выбирая жертву для
заражения. Наиболее часто в качестве жертв выступают запуска-
емые программы. Однако файлы программ могут заражаться при
открытии, копировании на дискету или с нее (вирус OneHalf), во
время поиска при помощи DOS-функций FindFirst или FindNext.
Необходимо подобрать подходящего претендента на "конт-
рольное" заражение - небольшую программу простой структуры,
приманку. Некоторые вирусы пытаются распознать приманку
и отказываются от ее заражения. Не подходят для таких целей
слишком короткие программы или такие, большая часть которых
состоит из повторяющихся байт (например, 90h - код команды
NOP). В качестве приманки с большим успехом можно использо-
вать программы test.com и test.exe. Вот их исходные тексты
на языке Assembler.

Test.com

cseg segment

assume cs:cseg, ds:cseg, ss:cseg

org -lOOh
Start:

db 1249 dup (OFAh,90h,OFBh,OF8h)

1 60 Методы борьбы с вирусами

mov ah,4Ch

int 21h

cseg ends

End Start

Test.exe

cseg segment

assume cs:cseg, ds:cseg
Start:

db 1000 dup (OFAh,90h,OFBh,OF8h)

mov ah,4Ch

int 21h

cseg ends

sseg segment stack

assume ss:sseg

db 118 dup (OFAh,90h,OFBh,OF8h)

sseg ends

End Start

Скопируем приманки на зараженную машину. Выполним над ними как
можно больше операций: запустим, скопируем в другое место винчесте-
ра и на дискету, переместим, просмотрим их в NC и DOS (командой
dir). При этом желательно несколько раз поменять системное время
и дату, потому что вирусы нередко активны не каждый день и не круг-
лые сутки. Чтобы исключить Stealth-эффект, загрузимся с чистой дис-
кеты и рассмотрим внимательно эти файлы. Как правило, достаточно
бывает проконтролировать размер файлов и просмотреть их код при
помощи F3 - наличие вируса определить несложно.

в) Выделение нерезидентного файла. Самый неприятный случай.
Помимо того, что вирус нередко привередничает, распознавая
приманку, и по-прежнему отказывается работать "без выходных
и отпусков", так еще и заражаемость программ сильно зависит от
их расположения на винчестере. Одни нерезидентные вирусы за-
ражают только в текущем каталоге, другие - только в подкатало-
гах 1-го уровня, третьи - в каталогах, указанных в строке path
системной среды (Vienna), четвертые - вообще во всех каталогах
винчестера. Поэтому воспользуемся программой типа it, чтобы
скопировать приманки во все каталоги диска (запускаем из кор-
невого каталога):

rt copy a:\test.*.

Точка "." в конце - символ текущего каталога. Потом их можно будет
удалить:

rt del test*

Теперь выбираем заведомо зараженную программу и запускаем ее N раз,
постоянно изменяя время и дату. Проконтролировать изменение длины
поможет та же программа rt:

rt dir test.* >test.txt

Получаем файл test.txt, содержащий список файлов test.* с указанием
их длины. Выбираем тот файл приманки, который изменил длину.
Вот вирус и пойман.

Как исследовать алгоритм работы вируса

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

1. Прежде чем перейти к рассмотрению этого вопроса, вспомним неко-
торые принципы функционирования MS DOS.

Структура СОМ- и ЕХЕ-программ. Вообще говоря, следует отли-
чать СОМ- и ЕХЕ-программы от СОМ- и ЕХЕ-файлов. Дело в том,
что в настоящее время расширение СОМ или ЕХЕ является просто
признаком (кстати, необязательным) запускаемой программы. Спо-
соб загрузки программы в память и ее запуска определяется опера-
ционной системой по внутреннему формату программы. Этот факт
часто не учитывали авторы первых вирусов, что приводило к унич-
тожению некоторых программ вместо их заражения.

СОМ-программа представляет собой часть кода и данных, которая
начинается с исполняемой команды и занимает не более 64Кбайт.
Например, такую структуру имеет командный процессор
COMMAND.СОМ операционной системы MSDOS до версии 6.22
включительно.

Структура ЕХЕ-программы гораздо сложнее. В начале файла
ЕХЕ-программы располагается заголовок (см. приложение). Поля
ReloCS и ExelP определяют расположение точки входа в программу,
поля ExeSP и ReloSS - расположение стека, поля PartPag
и PageCnt - размер корневого сегмента программы. Размер некоторых

6-1436

программ, вычисленный по полям PartPag и PageCnt, может не со-
впадать с реальным размером файла. Такие программы называются
"сегментированными" или "содержащими внутренние оверлеи".
Опытные авторы вирусов избегают заражать такие программы. Пос-
ле заголовка может размещаться специальная таблица, точное место
расположения которой определяется полем TablOff, а размер - по-
лем ReloCnt. В этой таблице хранятся адреса тех слов в коде про-
граммы, которые модифицируются операционной системой во время
загрузки программы. Например, просматривая файл программы при
помощи утилиты HackerView, можно видеть команду call
0000:1234h. В процессе загрузки программы MS-DOS подставит вме-
сто нулей нужный сегментный адрес, и все будет работать коррект-
но. Кстати, если в поле TablOff указано число 40h или больше,
то, скорее всего, это программа в формате Windows. Подобный
формат имеет, например, командный процессор Windows 95
COMMAND.COM. Несмотря на свое расширение, он имеет в нача-
ле знаменитые символы "MZ" и длину 95Кбайт.

2. Приступаем к исследованию конкретного файлового вируса и разра-
ботке алгоритма его лечения. В качестве жертвы "показательного
вскрытия" возьмем широко известный в начале 90-х годов вирус
SVC-1740. Выбор определился следующими обстоятельствами:

- это очень простой вирус с четкой структурой;

- он не содержит деструктивных функций;

- не содержит грубых ошибок в алгоритме;

- он стандартно заражает СОМ- и ЕХЕ-программы.
Запустив SVC вирус на своей машине, можно наблюдать следую-
щие его проявления.

а) В MS-DOS успели заразиться файлы ARCVIEW.EXE,
HIEW.EXE и LEX.EXE. В результате HackerView, проверяющий
целостность своего кода, отказался работать, сообщив: "HIEW
bad, work is aborted".

6) Windows 3.11 и Windows 95 сначала запустились корректно, но
затем продемонстрировали разноцветные горизонтальные полосы
в видеорежиме 800х600х256 (вирус не заражал какие-либо драй-
вера, просто в момент старта Windows в памяти находился ви-
русный обработчик прерывания INT 21h).

Излечение пришло после использования антивирусов:

DrWeb с: /сир /а1
и
AidsTest с: /f /g /q

3. При помощи ранее описанных методов заразим две приманки:

TEST.COM и TEST.EXE. Увеличение их длины на 1740 байт мож-
но увидеть только на "чистой" машине (Stealth-эффект). Несколь-
ко слов об инструментарии. Вообще говоря, выбор дизассемблеров
весьма широк. В свое время была широко известна программа
DisDoc. По признанию Е. Касперского, он активно пользуется инте-
рактивным дизассемблером IDA. Быстро просмотреть код програм-
мы позволяет утилита HackerView. Также возможно использование
любого отладчика. В данном случае для изучения кода зараженных
приманок использовался дизассемблер Sourcer v5.04. Несмотря на
отсутствие некоторых полезных опций и ошибки при дизассембли-
ровании (достаточно редкие), пользоваться программой удобно -
упакованная PkLite, она занимает на дискете всего 48Кбайт.

Итак, запускаем дизассемблер командой sr test-сом. На экране появи-
лась темно-синяя лицевая страница. Нажав клавишу "а", можно пе-
рейти на страницу опций. Рекомендуется установить опцию "а" -
обязательно дизассемблировать фрагмент программы, располагаю-
щийся после команд jmp/ret/iret - это позволяет получить ассемб-
лерный код тех фрагментов программ, в которые нет явного перехо-
да (процедуры обработки прерываний, скрытые подпрограммы и так
далее). Нажав Enter, вернемся на первую страницу. Запустим процесс
дизассемблирования нажатием клавиши "g". В зависимости от про-
изводительности компьютера, процесс дизассемблирования длится от
нескольких секунд до нескольких минут. Для грубой оценки размера
листинга можно принять, что один килобайт кода соответствует деся-
ти-пятнадцати килобайтам текста. 6740 байт зараженной приманки
дают 96Кбайт текста+файл test.sdf. Этот очень интересный файл хра-
нит в текстовом виде как опции, использованные при дизассемблиро-
вании, так и параметры полученного текста (размещение фрагментов
кода и данных, место расположения символических имен и прочее).
Если изменить эти параметры, переименовать файл в test.def и пере-
дать его Sourcer в командной строке в качестве параметра, то дизас-
семблер будет работать в соответствии с новыми инструкциями. Ана-
логичную операцию проделаем для файла testexe.

б*

4. Займемся анализом полученного листинга. Поверхностно изучая за-
раженные приманки, видим:

- файлы увеличили свою длину на 1740 байт;

- в их конце явно видны посторонние коды;

- изменилось время создания файлов, точнее, изменилось количе-
ство секунд - оно стало равным 60;

- в начале файла test.coM появилась команда jmp;

- в заголовке файла test.exe изменились значения полей ReloCS,
ExelP, ExeSP, ReloSS, PartPag и PageCnt.

Итак.

а) В начале вирусного кода содержится последовательность команд
вида:

call sub_1
sub_1: pop si
sub si,3

Подобная последовательность символов характерна для очень мно-
гих вирусов. Команда call помещает в стек смещение следующей за
ней команды. Это значение извлекается вирусом при помощи ко-
манды pop si (в то время как обычно это делается командой ret)
и помещается в регистр si. Скорректировав эту величину на длину
команды call (3 байта), вирус получает возможность корректного
обращения к ячейкам памяти относительно кодового сегмента:

mov cs:Data[si], xxxx.

Не случайно DrWeb всегда реагирует на подобные команды в на-
чале программ, выдавая предупреждающее сообщение. Впрочем,
это не является обязательным признаком присутствия вируса. На-
пример, устаревшая пристыковочная защита от несанкционирован-
ного копирования (НСК) "Nota" также пользуется этим приемом.

б) Важным элементом алгоритма вируса является определение на-
личия собственного резидента в ОЗУ. Вызывая прерывание DOS
с "секретной" функцией 83h, вирус ждет реакции системы. "Здо-
ровая" система не среагирует на провокацию, а "больная" поме-
стит в регистр dx число 1990h (год создания вируса?), чем и из-
вестит о наличии вируса в памяти. Вот соответствующий
фрагмент вирусного обработчика прерывания INT 21h:

cmp ah,83h
je loc_9

loc_9:

mov dx,1990h
iret

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

в) В случае отсутствия вирусного обработчика INT 21h в памяти,
вирус пытается установить его и остаться в памяти резидентно.
Алгоритм резидентной записи кода вируса в память основан
на прямой модификации заголовка блока памяти (МСВ). Под-
робное описание этого алгоритма и методов борьбы с вирусами,
использующими подобный метод инсталляции, можно найти
в одном из номеров журнала "Монитор" за 1993 г.

г) Установив свою резидентную копию в ОЗУ (или обнаружив на-
личие такой копии), вирус передает управление оригинальной
программе. Изучение этого момента чрезвычайно важно для ана-
лиза. В процессе заражения (данный фрагмент из листинга уда-
лен) вирус считывает (в data_15) 24 байта начала программы
и анализирует первые два байта из них. В зависимости от содер-
жимого первого слова ("MZ" или нет), вирус выполняет зараже-
ние жертвы либо по СОМ-, либо по ЕХЕ-алгоритму, дописывая
фрагмент памяти со своим кодом к ее концу. Естественно, счи-
танные 24 байта также дописываются в файл-жертву. Поэтому
для определения способа передачи управления оригинальному
коду программы вполне достаточно повторно сравнить сохранен-
ный фрагмент начала с признаком "MZ":

cmp cs:data_15[si],5A4Dh
je lt_Was_EXE

В случае если программа была заражена по СОМ-алгоритму, вирус
просто извлекает первые 3 байта из ячейки памяти по адресу
data_15, копирует их в старое начало оригинального кода (по адре-
су cs:100h) и передает туда управление. Адресу data_15 соответ-
ствует 80-ый (если считать от конца) байт зараженной программы.

В случае если программа была заражена по ЕХЕ-алгоритму, вирус
вычисляет старую точку входа по сохраненным в data_20 и data_21
значениям полей ReloCS и ExelP, восстанавливает расположение
стека по сохраненным в data_18 и data_19 значениям полей ReloSS
и ExeSP и передает управление на ReloCS+ES+10h:ExeIP (ES -
сегмент PSP; ES+lOh - сегмент начала программы; ES+ReloCS+
10h - полный сегмент точки входа). Расположение этих адресов
в зараженном файле (от конца файла):

data_20 - 60
data_21 - 58
data_18 - 66
data_19 - 64

Еще могут пригодиться сохраненные значения полей PartPag
и PageCnt (от конца файла):

data_16+1 - 78
data_16+3 - 76

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

5. Еще несколько особенностей, с которыми иногда можно встретить-
ся при дизассемблировании кода вируса и изучении листинга. Код
вируса может быть зашифрован. В этом случае в начале вирусного
кода должен располагаться расшифровщик. Вообще говоря, рас-
шифровщиков может быть много, но первый всегда существует.
Если расшифровщик меняется от одного зараженного файла к дру-
гому, значит имеем дело с полиморфным вирусом. Вырожденный
случай - зашифровываются только сохраненные в теле вируса бай-
ты. Для СОМ-файла вполне достаточно пошагово пройти расшиф-
ровщик в отладчике, дождаться его завершения и сохранить на вин-
честер расшифрованный код вируса. Полученный файл можно
дизассемблировать. Для ЕХЕ-файла такое не подходит, так как в
памяти после загрузки отсутствует заголовок, и полученный файл
не может быть дизассемблирован именно как ЕХЕ. Вероятно, при-
дется писать специальную программу расшифровки на основе изу-
ченного по листингу алгоритма расшифровщика.

Расшифровщик может быть совмещен с алгоритмами, противодей-
ствующими трассировке кода вируса с использованием отладчиков.
Ознакомиться с ними можно в специальной литературе, посвящен-
ной борьбе с НСК. Авторы вирусов, как правило, редко изобретают
что-то новое и используют широко известные методы.

Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...