Пример: Транспортная логистика
Я ищу:
На главную  |  Добавить в избранное  

Программированиеи компьютеры /

Компьютерные вирусы

←предыдущая следующая→
1 2 3 4 5 6 7 8 9 10 



Скачать реферат


методов заразим две приманки: TEST.COM и TEST.EXE. Увеличение их длины на 1740 байт можно увидеть только на машине (Stealth-эффект). Несколько слов об инструментарии. Вообще говоря, выбор дизассемблеров весьма широк. В свое время была широко известна программа DisDoc. По признанию Е. Касперского, он активно пользуется интерактивным дизассемблером IDA. Быстро просмотреть код программы позволяет утилита HackerView; Также возможно использование любого отладчика. В данном случае для изучения кода зараженных приманок использовался дизассемблер Sourcer v5.04. Несмотря наотсутствие некоторых полезных опций и ошибки при дизассемблировании (достаточно редкие), пользоваться программой удобно -упакованная PkLite, она занимает на дискете всего 48 Кбайт. Итак, запускаем дизассемблер командой sr test-сом. На экране появилась темно-синяя лицевая страница. Нажав клавишу , можно перейти на страницу опций. Рекомендуется установить опцию -обязательно дизассемблировать фрагмент программы, располагающийся после команд jmp/ret/iret - это позволяет получить ассемблерный код тех фрагментов программ, в которые нет явного перехода (процедуры обработки прерываний, скрытые подпрограммы и такдалее). Нажав Enter, вернемся на первую страницу. Запустим процесс дизассемблирования нажатием клавиши . В зависимости от производительности компьютера, процесс дизассемблирования длится отнескольких секунд до нескольких минут. Для грубой оценки размера листинга можно принять, что один килобайт кода соответствует десяти-пятнадцати килобайтам текста. 6740 байт зараженной приманкидают 96Кбайт текста+файл test.sdf. Этот очень интересный файл хранит в текстовом виде как опции, использованные при дизассемблировании, так и параметры полученного текста (размещение фрагментов кода и данных, место расположения символических имен и -прочее).Если изменить эти параметры, переименовать файл в test.def и передать его Sourcer в командной строке в качестве параметра, то дизас-семблер будет работать в соответствии с новыми инструкциями. Аналогичную операцию проделаем для файла test.exe.

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 байта), вирус получает возможность корректного обращения к ячейкам памяти относительно кодового сегмента: movcs:Data[si], хххх. Не случайно DrWeb всегда реагирует на подобные команды в начале программ, выдавая предупреждающее сообщение. Впрочем, это не является обязательным признаком присутствия вируса. Например, устаревшая пристыковочная защита от несанкционированного копирования (НСК) также пользуется этим приемом.

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

cmp ah,83h

je loc_9

loc_9:

mov dx, 1990h

iret

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

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

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

cmp cs:data_15[si],5A4Dh

je lt_Was_EXE

В случае если программа была заражена по СОМ-алгоритму, вирус просто извлекает первые 3 байта из ячейки памяти по адресу data_15, копирует их в старое начало оригинального кода (по адресу cs:100h) и передает туда управление. Адресу data_15 соответствует 80-ый (если считать от конца) байт зараженной программы. В случае если программа была заражена по ЕХЕ-алгоритму, вирус вычисляет старую точку входа по сохраненным в data_20 и data_21 значениям полей ReloCS и ExeIP, восстанавливает расположение стека по сохраненным в data_18 и data_19 значениям полей ReloSSи ExeSP и передает управление на ReloCS+ES+10h:ExeIP (ES -сегмент PSP; ES+l0h - сегмент начала программы; 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. Еще несколько особенностей, с которыми иногда можно встретиться при дизассемблировании кода вируса и изучении листинга. Код вируса может быть зашифрован. В этом случае в начале вирусного кода должен располагаться расшифровщик. Вообще говоря, расшифровщиков может быть много, но первый всегда существует. Если расшифровщик меняется от одного зараженного файла к другому, значит имеем дело с полиморфным вирусом. Вырожденныйслучай - зашифровываются только сохраненные в теле вируса байты. Для СОМ-файла вполне достаточно пошагово пройти расшифровщик в отладчике, дождаться его завершения и сохранить на винчестер расшифрованный код вируса. Полученный файл можно дизассемблировать. Для ЕХЕ-файла такое не подходит, так как впамяти после загрузки отсутствует заголовок, и полученный файлне может быть дизассемблирован именно как ЕХЕ. Вероятно, придется писать специальную программу расшифровки на основе изу-ченного по листингу алгоритма расшифровщика. Расшифровщик может быть совмещен с алгоритмами, противодействующими трассировке кода вируса с использованием отладчиков. Ознакомиться с ними можно в специальной литературе, посвященной борьбе с НСК. Авторы вирусов, как правило, редко изобретают что-то новое и используют широко известные методы. Эвристические анализаторы кода Эвристическим анализатором кода называется набор подпрограмм, анализирующих код исполняемых файлов, памяти или загрузочных секторов для обнаружения в нем разных типов компьютерных вирусов. Рассмотрим универсальную схему такого кодо анализатора. Действуя в соответствии с этой схемой, кодоанализатор способен максимально эффективно задействовать всю информацию, собранную для тестируемого объекта. Основные термины: Событие - это совокупность кода или вызов определенной функции операционной системы, направленные на преобразование системных данных, работу , с файлами или часто используемые вирусные конструкции. Цепочка связных событий - это набор событий, которые должны быть выявлены в порядке их следования. Цепочка несвязных событий - это набор событий, которые должны быть выявлены, но не обязательно в строгом порядке. Действия - набор цепочек связных или несвязных событий, для которых выполнены все условия. Эвристическая маска - набор действий, выявленных при проверке файла.Эвристическое число - порядковый номер первой из совпавших эвристических масок. События распознаются при помощи подпрограмм выявления событий, в которых могут использоваться также таблицы с данными. Остальные данные просто хранятся в массивах и не анализируются. Рассмотрим функциональную схему эвристического анализатора Эмулятор кода работает в режиме просмотра, то есть его основная задача - не эмулировать код, а выявлять в нем всевозможные события. События сохраняются в таблице событий по алгоритму:

if (Events[EventNumber]= =0) Events[EventNumber]=++CountEvents;

где: Events - массив событий;

EventNumber - номер регистрируемого события;

CountEvents - порядковый номер зарегистрированного события.

Таким образом, в ячейку массива Events записывается

←предыдущая следующая→
1 2 3 4 5 6 7 8 9 10 



Copyright © 2005—2007 «Mark5»