Как исследовать алгоритм работы вируса
Как исследовать алгоритм работы вируса
Ситуация, когда компьютер оказался заражен неизвестным вирусом, встречается не очень часто, но полностью сбрасывать со счетов такую возможность нельзя. Выше рассматривались способы обнаружения вируса и выделения его в чистом виде. Сейчас переходим к исследованию алгоритма работы файловых вирусов для успешной борьбы с ними.
1. Прежде чем перейти к рассмотрению этого вопроса, вспомним некоторые принципы функционирования MS DOS.
Структура COM– и EXE-программ. Вообще говоря, следует отличать СОМ– и ЕХЕ-программы от СОМ– и ЕХЕ-файлов. Дело в том, что в настоящее время расширение СОМ или ЕХЕ является просто признаком (кстати, необязательным) запускаемой программы. Способ загрузки программы в память и ее запуска определяется операционной системой по внутреннему формату программы. Этот факт часто не учитывали авторы первых вирусов, что приводило к уничтожению некоторых программ вместо их заражения.
СОМ-программа представляет собой часть кода и данных, которая начинается с исполняемой команды и занимает не более 64Кбайт. Например, такую структуру имеет командный процессор СОМ– МАND.СОМ операционной системы MSDOS до версии 6.22 включительно.
Структура ЕХЕ-программы гораздо сложнее. В начале файла ЕХЕ-программы располагается заголовок (см. приложение). Поля ReloCS и ExeIP определяют расположение точки входа в программу, поля ExeSP и ReloSS – расположение стека, поля PartPag и PageCnt – размер корневого сегмента программы. Размер некоторых программ, вычисленный по полям 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».
б) Windows 3.11 и Windows 95 сначала запустились корректно, но затем продемонстрировали разноцветные горизонтальные полосы в видеорежиме 800x600x256 (вирус не заражал какие-либо драйвера, просто в момент старта Windows в памяти находился вирусный обработчик прерывания INT 21h).
Излечение пришло после использования антивирусов:
DrWeb c: /cup /al
и
AidsTest c: /f /g /q
3. При помощи ранее описанных методов заразим две приманки: TEST. COM и TEST.EXE. Увеличение их длины на 1740 байт можно увидеть только на «чистой» машине (Stealth-эффект). Несколько слов об инструментарии. Вообще говоря, выбор дизассемблеров весьма широк. В свое время была широко известна программа DisDoc. По признанию Е. Касперского, он активно пользуется интерактивным дизассемблером IDA. Быстро просмотреть код программы позволяет утилита HackerView. Также возможно использование любого отладчика. В данном случае для изучения кода зараженных приманок использовался дизассемблер Sourcer v5.04. Несмотря на отсутствие некоторых полезных опций и ошибки при дизассемблировании (достаточно редкие), пользоваться программой удобно – упакованная PkLite, она занимает на дискете всего 48Кбайт.
Итак, запускаем дизассемблер командой sr test.сом. На экране появилась темно-синяя лицевая страница. Нажав клавишу «a», можно перейти на страницу опций. Рекомендуется установить опцию «a» – обязательно дизассемблировать фрагмент программы, располагающийся после команд jmp/ret/iret – это позволяет получить ассемблерный код тех фрагментов программ, в которые нет явного перехода (процедуры обработки прерываний, скрытые подпрограммы и так далее). Нажав Enter, вернемся на первую страницу. Запустим процесс дизассемблирования нажатием клавиши «g». В зависимости от производительности компьютера, процесс дизассемблирования длится от нескольких секунд до нескольких минут. Для грубой оценки размера листинга можно принять, что один килобайт кода соответствует десяти-пятнадцати килобайтам текста. 6740 байт зараженной приманки дают 96Кбайт текста+файл test.sdf. Этот очень интересный файл хранит в текстовом виде как опции, использованные при дизассемблировании, так и параметры полученного текста (размещение фрагментов кода и данных, место расположения символических имен и прочее). Если изменить эти параметры, переименовать файл в test.def и передать его Sourcer в командной строке в качестве параметра, то дизассемблер будет работать в соответствии с новыми инструкциями. Аналогичную операцию проделаем для файла test.ехе.
4. Займемся анализом полученного листинга. Поверхностно изучая зараженные приманки, видим:
– файлы увеличили свою длину на 1740 байт;
– в их конце явно видны посторонние коды;
– изменилось время создания файлов, точнее, изменилось количество секунд – оно стало равным 60;
– в начале файла test.сом появилась команда jmp;
– в заголовке файла test.ехе изменились значения полей ReloCS, ExeIP, 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
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКДанный текст является ознакомительным фрагментом.
Читайте также
8.1.1 Алгоритм
8.1.1 Алгоритм Сразу после переключения контекста ядро запускает алгоритм планирования выполнения процессов (Рисунок 8.1), выбирая на выполнение процесс с наивысшим приоритетом среди процессов, находящихся в состояниях "резервирования" и "готовности к выполнению, будучи
10.13.3 Алгоритм Нейгла
10.13.3 Алгоритм Нейгла Отправитель должен независимо от получателя исключить пересылку очень коротких сегментов, аккумулируя данные перед отправлением. Алгоритм Нейгла (Nagle) реализует очень простую идею, позволяющую снизить количество пересылаемых по сети коротких
Проникновение вируса через брешь в операционной системе
Проникновение вируса через брешь в операционной системе А теперь рассмотрим самый опасный способ проникновения вируса, который никак не зависит от внимания пользователя. Речь идет о «дырах» в операционной системе. Дело в том, что Windows постоянно совершенствуется,
Алгоритм lexicographical_compare()
Алгоритм lexicographical_compare() template class InputIterator1, class InputIterator2 boollexicographical_compare(InputIterator1 first1, InputIterator1 last1,InputIterator1 first2, InputIterator2 last2 );template class InputIterator1, class InputIterator2,class Compare boollexicographical_compare(InputIterator1 first1, InputIterator1 last1,InputIterator1 first2, InputIterator2 last2,Compare comp );lexicographical_compare() сравнивает соответственные пары
Алгоритм lower_bound()
Алгоритм lower_bound() template class ForwardIterator, class Type ForwardIteratorlower_bound( ForwardIterator first,ForwardIterator last, const Type &value );template class ForwardIterator, class Type, class Compare ForwardIteratorlower_bound( ForwardIterator first,ForwardIterator last, const Type &value,class Compare );lower_bound() возвращает итератор, указывающий на первую позицию в отсортированной
Алгоритм max()
Алгоритм max() template class Type const Type&max( const Type &aval, const Type &bval );template class Type, class Compare const Type&max( const Type &aval, const Type &bval, Compare comp );max() возвращает наибольшее из двух значений aval и bval. В первом варианте используется оператор "больше", определенный в классе Type; во втором - операция
Алгоритм min()
Алгоритм min() template class Type const Type&min( const Type &aval, const Type &bval );template class Type, class Compare const Type&min( const Type &aval, const Type &bval, Compare comp );min() возвращает меньшее из двух значений aval и bval. В первом варианте используется оператор “меньше”, определенный для типа Type; во втором - операция
Алгоритм merge()
Алгоритм merge() template class InputIterator1, class InputIterator2,class OutputIterator OutputIteratormerge( InputIterator1 first1, InputIterator1 last1,InputIterator2 first2, InputIterator2 last2,OutputIterator result );template class InputIterator1, class InputIterator2,class OutputIterator, class Compare OutputIteratormerge( InputIterator1 first1, InputIterator1 last1,InputIterator2 first2, InputIterator2 last2,OutputIterator result, Compare comp );merge() объединяет
Алгоритм partial_sum()
Алгоритм partial_sum() template class InputIterator, class OutputIterator OutputIteratorpartial_sum(InputIterator first, InputIterator last,OutputIterator result );template class InputIterator, class OutputIterator,class BinaryOperation OutputIteratorpartial_sum(InputIterator first, InputIterator last,OutputIterator result, BinaryOperation op );Первый вариант partial_sum() создает из последовательности, ограниченной
Алгоритм partition()
Алгоритм partition() template class BidirectionalIterator, class UnaryPredicate BidirectionalIteratorpartition(BidirectionalIterator first,BidirectionalIterator last, UnaryPredicate pred );partition() переупорядочивает элементы в диапазоне [first,last). Все элементы, для которых предикат pred равен true, помещаются перед элементами, для которых он равен false.
Что происходит при обнаружении вируса?
Что происходит при обнаружении вируса? Антивирус Microsoft Security Essentials постоянно наблюдает за выполняющимися на компьютере программами и файлами, к которым те обращаются. Это и есть защита реального времени.Если в ходе наблюдения обнаружена угроза безопасности компьютера,
Пример макро-вируса
Пример макро-вируса Выше были изложены основы для изучения макро-вирусов. Пришло время рассмотреть исходные тексты.Macro name: AutoNew [AUTONEW] ”U” Encryption key: DFSub MAIN’Включаем обработку автоматических макросовDisableAutoMacros 0’Проверим, установлен ли макрос. Если макрос
Protected Mode – укрытие для вируса
Protected Mode – укрытие для вируса Персональные компьютеры год от года становятся все сложнее и сложнее, используют все более высокие аппаратные и программные технологии. Компьютерные вирусы тоже не отстают и пытаются приспособиться к новым условиям обитания. Так, вирусы
Поиск вируса
Поиск вируса Когда во время работы компьютер начинает вести себя как-то необычно, первая мысль, приходящая на ум любому пользователю – уж не вирус ли это. В такой ситуации важно правильно оценить свои подозрения и сделать выводы.Как правило, человек, обладающий некоторым
Блокировщик вируса
Блокировщик вируса Рассмотрим пример. В дисплейном классе ВУЗа эпидемия, часть машин заражена неизвестным вирусом. До конца сессии – несколько дней, выключение машин из учебного процесса смерти подобно (в первую очередь для обслуживающих класс сотрудников). Ситуация