Информационный сервер для программистов: Исходники со всего света. Паскальные исходники со всего света
  Powered by Поисковый сервер Яndex: Найдется ВСЁ!
На Главную Pascal Форум Информер Страны мира
   Антивирусные программы    >>    asvc50
   
 
 Антивирус Anti-SVC 5.0  И.Мигитко, А.Байков 20.01.1991

Приведено краткое описание действия вируса SVC 5.0 и программа для его обнаружения.



6k 
 

КРАТКОЕ ОПИСАНИЕ ДЕЙСТВИЯ ВИРУСА SVC 5.0 ИСТОРИЯ ОБНАРУЖЕНИЯ В начале июня 1991 г. мы заметили, что с нашей ПЭВМ (фирмы SELCO Computer, МП I80286) происходит что-то неладное : иногда происходит произвольная перезагрузка DOS или машина "зависает", перестал запускаться AUTOCAD, при копировании файлов во время работы Norton Commander время создания копии устанавливается на 12:00. Почти полная уверенность в проникновении неизвестного вируса в используемое нами ПО возникла у нас 7 июня, когда мы использовали программу AS (автор - А.В.Байков) для перехва- тывания дисковых операций при работе Norton Commander (программа AS перехватывает прерывание 13H). Мы заметили, что при любом обращении к диску из NC некая программа пытается осуществить запись на диск. При этом длины всех файлов при работе NC соот- ветствовали их истинным исходным значениям. Однако, при после- дующем просмотре директориев в PC Tools выяснилось, что длины многих *.COM и *.EXE файлов увеличены на 3103 байта. Кроме того, размер памяти системы, доступной DOS, уменьшен на 4 Kb (по рапорту DOS), в то время, как PC Tools находит столько памяти, сколько ее установлено в ПЭВМ на самом деле, а именно 640 Kb. 8 июня мы запустили на "зараженной" ПЭВМ "программу - - приманку" (4 Kb кодов 90Н) - и вирус заразил ее. После этого нетрудно было на "чистом" компьютере выделить его код и проанали- зировать его работу. ИНИЦИАЛИЗАЦИЯ Когда зараженная программа начинает выполняться, управление передается на начало тела вируса, т.к. при заражении программ первые 24 байта оригинального кода запоминаются в области данных тела вируса, а в первые 3 байта, в случае файла типа СОМ, записывается JMP LABEL, где LABEL - начало кода вируса, а случае заражения файла типа ЕХЕ модифицируется заголовок файла с тем, чтобы при загрузке управление передавалось на начало кода вируса. Проверяется наличие кода вируса в ОЗУ. Если он есть, то сравнивается код вируса в памяти с кодом вируса в программе. Если встречается отличие, то происходит перезагрузка ПЭВМ, иначе управление пеpедается исходной программе. Если кода вируса в ОЗУ нет, то происходит загрузка тела вируса в старшие адреса оперативной памяти. При этом: 1. Определяется размер доступной памяти. Если достаточно места для размещения тела вируса, то освобождается блок памяти в старших адресах, куда переписывается тело вируса со смещением 0000Н относительно сегмента вновь распределенного блока памяти; 2. Переустанавливаются вектора прерываний 21Н и 8Н; 3. Управление передается исходной программе. Перед тем, как передать управление исходной программе, происходит декодирование первых 24 байт исходной программы, которые хранятся со смещением 0ВААН относительно начала кода вируса в зараженной программе. Кодирование и декодирование выполняются с помощью одной и той же процедуры, фрагмент которой приведен ниже: PUSH CS POP DS POP SI ; SI указывает на начало кода ; вируса PUSH SI MOV AH,CS:[SI+0C1A] ; ключ перекодировки MOV DH,CS:[SI+0C1B] ; ключ перекодировки ADD SI,0BAA ; начало процедуры перекодировки PUSH DS POP ES MOV DI,SI MOV CX,0018 CLD LABEL: LODSB ; XOR AL,AH ; STOSB ; перекодировка кода ADD AH,DH ; LOOP LABEL ; Если была загружена программа типа СОМ, то начиная с CS:0100 переписываются первые 3 байта раскодированного кода и управление передается на CS:0100. Если была загружена программа типа ЕХЕ, то восстанавливается из раскодированных 24 байт оригинальный заголовок файла и управление передается на оригинальный CS:IP. ИНФИЦИРОВАНИЕ ПРОГРАММ Когда вирус находится в ОЗУ, он перехватывает прерывания 21Н и 8Н. При возникновении прерывания INT 8H происходит следующее: 1. Проверяет вектора прерываний INT 1H, INT 3H; 2. Ecли они не совпадают с установленными им самим, то проис- ходит переопределение этих векторов на точки входа в теле вируса; 3. Управление передается на обработку истинного INT 8H. Koгда возникает INT 3H и INT 1H сравнивается CS инициирующей прерывание программы с СS вируса. Если они совпадают, то проис- ходит перезагрузка ПЭВМ (JMP F000:FFF0). Eсли не совпадают, то происходит переход на истинную обработку прерываний. Видимо, это является попыткой борьбы с отладчиками. При возникновении INT 21Н виpус реагирует на функции: 1. 11Н - найти первый совпадающий файл через FCB; 2. 12H - найти следующий совпадающий файл через FCB; 3. 3СН - создать файл через описатель; 4. 3DH - открыть описатель файла; 5. 3ЕН - закрыть описатель файла; 6. 40Н - писать в файл через описатель; 7. 42H - (подфункция 02Н) переместить указатель файла к концу файла; 8. 4ВН - загрузить и выполнить, при этом выделяет под- функции : - 00Н, 01Н - загрузить и выполнить; - 03Н - загрузить программный оверлей; 9. 4СН - завершить программу; 10. 4ЕН - найти первый совпадающий файл через описатель; 11. 4FH - найти следующий совпадающий файл через описа- тель; 12. 57Н - дать/установить время/дату файла; 13. 83Н - ?; 14. 84H - ?. Вирус пытается инфицировать программы, когда возникает INT 21H c АН, равным 03DH, 03ЕН, 040Н, 04ВН. Сценарий действий во всех случаях примерно одинаков (для примера дана схема действий при АН = 4В): 1. В имени файла ищется цепочка символов "CHKD". Если таковая находится, то по некоторому адресу в область данных вируса заносится 1. Содержимое памяти по этому адресу проверяется при возникновении INT 21Н с АН равным 11H,12H,4ЕH,4FH (Find First and Find Next). Ecли там 1 то на экран выводится истинная длина файла. 2. Переопределяются вектора прерываний 23Н, 24Н. При этом прерывания не запрещаются. 3. Извлекается атрибут файла. Если файл системный, то восстанавливаются прежние вектора прерываний 23Н, 24Н и выполняется переход на истинный INT 21H. 4. Открывается файл для чтения и записи. 5. Извлекаются дата и время создания файла. Если число секунд равно 60, то закрывается описатель файла, восста- навливаются прежние вектора прерываний 23Н, 24Н и выполняется переход на истинный INT 21H. 6. Если число секунд не равно 60, то в имени файла ищутся цепочки символов "mm", "MM", "bm", "BM" и если одна из них находится, то закрывается описатель файла, восстанавливаются прежние вектора прерываний 23Н, 24Н и выполняется переход на истинный INT 21H. 7. Если цепочка символов не встретилась, то описатель файла сравнивается с 0005Н. При равенстве закрывается описатель файла, восстанавливаются прежние вектора прерываний 23Н, 24Н и выполняется переход на истинный INT 21H. 8. Если описатель файла не равен 0005H, то вирус проверяет, заражена ли загружаемая программа. Если число секунд равно 60 и 3 байта со смещением pавным длина файла минус 8АН от начала файла равны соответственно 35, 2Е, 30 (5.0) то виpус считает, что файл уже заражен. 9. Если файл еще не заражен, то модифицируются первые 24 байта программы с тем, чтобы при ее загрузке управление передавалось на начало кода вируса. Модифицированный код записывается в начало программы на диске, а в ее конец тело вируса. 10. После заражения закрывается описатель файла, восста- навливаются прежние вектора прерываний 23Н, 24Н и передается управление исходной программе. ПРОЯВЛЕНИЕ Зараженные программы имет длину на 0C1FН байт большую, чем исходный код. Однако, при просмотре каталогов на зараженной машине этого видно не будет, т.к. при возникновении INT 21H c AH, равным 11H,12H,4ЕH,4FH (Find First and Find Next), вирус проверяет, заражен найденный файл или нет. Если файл заражен, то в DTA записывается длина файла минус 0C1F, т.е. длина незаpаженного файла. Аналогично виpус маскиpует свое пpисутствие и при возникновении INT 21H c АН равным 57Н (установить/опросить время/дату файла). Мы не нашли в коде вируса ничего, что могло бы привести к нежелательным последствиям (удаление файлов, форматирование и т.д.). С этой точки зрения вирус выглядит довольно безобидным. ОБНАРУЖЕНИЕ И ЛЕЧЕНИЕ Обнаружить данный вирус достаточно просто. В области данных вируса есть символьная строка "(c) 1990 by SVC,Ver. 5.0", по которой вирус, если он есть на диске, можно обнаружить с помощью программ типа PC TOOLS. При написании антивирусной программы можно предложить следущую последовательность действий: 1. Для каждого проверяемого файла определяется время его создания. 2. Если число секунд равно 60, то проверяются 3 байта по смещению, pавному "длина файла минус 8АН". Если они равны соответственно 35Н, 2ЕН, 30Н, то файл заражен. 3. Выполняется декодирование первых 24 байт оригинального кода, которые расположены по смещению "длина файла минус 01CFН плюс 0BAAН". Ключи для декодирования расположены по смещению "длина файла минус 01CFН плюс 0С1AН" и "длина файла минус 01CFН плюс 0С1BН". Процедура декодирования описана выше. 4. Раскодированные байты переписываются в начало программы. 5. Файл усекается до величины "длина файла - 0С1F". Изложенный алгоритм реализован в программе ASVC50.EXE, написанной на языке программирования TURBO-PASCAL 5.0 (исходный текст в файле ASVC50.PAS). При таких действиях могут возникнуть "потерянные кластеры", от которых нужно избавиться. ПРИМЕЧАНИЕ Мы не смогли определить, что происходит на зараженной машине при возникновении INT 21H c АН, равным 83Н, 84Н, поскольку не имеем описания оных. Вообще, с информацией по системе - полный "КАРАУЛ !!". И.А.Мигитко, А.В.Байков 20.06.91