Группа стелс-вирусов
Если попытаться квантовать наблюдаемые непрерывные эволюционные изменения, то можно говорить о поколениях компьютерных вирусов.
🕛 09.03.2009, 00:03
"ВВС США впервые использовали в боевых условиях свой секретный истребительбомбардировщик F-117A "Стелс". Новый самолет, "невидимый" для радаров, участвовал в бомбардировке в Панаме перед высадкой там в среду американских войск."ТАСС, 24 декабря 1989 г.
Как и другие продукты человеческой деятельности, компьютерные вирусы претерпевают определенную эволюцию, которая в значительной степени облегчается тем, что в течение значительного отрезка времени среда их размножения (MS DOS) остается практически неизменной.
Понятие поколения компьютерного вируса связано, в основном, с механизмом размножения и методами маскировки. Наблюдаемый cейчас в ряде публикаций акцент на проявлениях того или иного вируса является неверным: по сути вирус можно разделить на две достаточно независимые части: компоненту размножения и компоненту проявления. При этом именно характеристики компоненты размножения являются основными и определяют место конкретного вируса "в эволюционной цепочке". В то же время популярная пресса акцентирует внимание на компоненте проявления, что видно хотя бы из распространенности неформальных названий типа Тринадцатая пятница, День Колумба, Воскресенье, Пинг-Понг и т.д. Если провести аналогию с авиацией, то компонента размножения соответствует самому летательному аппарату, а компонента проявления - полезной нагрузке. Очевидно, что один и тот же самолет может доставлять и бомбы, и листовки.
Компонента размножения должна обеспечить две основные функции: получить управление с тем, чтобы обеспечить репликацию вируса; избежать обнаружения, чтобы выжить и выполнить предыдущий пункт.
Важность этих двух функций изменяется в ходе эволюции. На первом этапе эволюции вирусов основной является репликация. При этом вопросам маскировки либо вообще не уделялось внимание, либо они носили несистематический характер и были направлены на маскировку одного или двух изменений, возникающих в зараженной программе или системе. Этому этапу эволюции соответствует первое поколение вирусов - вирусы, не рассчитанные на преодоление антивирусных средств.
С распространением антивирусных средств вопросы маскировки стали основными, и вирусу для того, чтобы выжить, важно как можно дольше остаться незамеченным. В связи с этим основные усилия при разработке стали направляться именно на маскировку. В результате маскировка приобрела комплексный характер, и соответствующие вирусы можно условно относить к новому поколению вирусов, получившему название стелс-вирусов.
Данный термин употребляется как в узком, так и широком смысле. В узком смысле стелс-вирусами называют резидентные вирусы, которые как бы исчезают из инфицированных программ при наличии вируса в памяти. В этом смысле первым стелс-вирусом можно считать бутовый вирус Brain, который перехватывает прерывание 13h и при попытке просмотра бут-сектора на инфицированной машине подставляет вместо него оригинальный бут-сектор, хранящийся в хвосте вируса. Применительно к файловым вирусам непосредственным аналогом являются подмена длины при чтении элемента оглавления зараженного файла и "выкусывание" вируса при чтении зараженных файлов.
Наиболее важным следствием является возможность "обмана" существующего поколения ревизоров, которые до этого момента считались наиболее надежным методом контроля целостности программ. Естественно, что новое поколение ревизоров учитывает указанные возможности маскировки (см., например, очередную версию ревизора Dinf (Софтпанорама, т.3, No. 2)).
Действия по маскировке можно условно классифицировать на четыре категории:
* затруднение обнаружения вируса в зараженной программе; * маскировка наличия вируса в оперативной памяти; * маскировка процесса заражения программ; * использование методов кодирования, затрудняющих трассировку и исследование вируса.
К первой категории можно отнести автомодификацию инсталлятора с целью затруднить обнаружение детекторами, основанными на контекстном поиске; шифровка всей или части программы (например, текстовых строк); сохранение точки входа в EXE-программах; выкусывание вируса из зараженной программы при попытке просмотра последней при резидентном вирусе; имплантацию тела вируса в программу без увеличения размеров файла; cохранение первого перехода в COM-файлах; маскировка увеличения длины зараженных файлов путем подмены значения соответствующего поля элемента оглавления при операциях FindFirst и FindNext (21h-11h и 21h-12h) с предварительным вычитанием длины вируса (при этом утилиты, которые не используют указанные функции DOS, работая с каталогами непосредственно (например Norton Commander), будут показывать увеличенную длину, а команда DIR - уменьшенную).
Для маскировки наличия вируса в оперативной памяти используются занесение тела вируса в специальную зону MS DOS (например, в буфера или старшие адреса векторов прерываний); манипуляция MCB, специальные методы перехвата прерываний, обеспечивающие обход сторожей, контролирующих список резидентных программ и состояние векторов прерываний; перехват и модификация дисковых операций с целью скрыть изменения в исполняемых блоках (бут-сектор, MBR); корректировка резидентным вирусом общего объема свободной оперативной памяти с целью скрыть его изменение в результате инсталляции вируса.
Здесь приведены только приемы, которые уже были использованы в том или ином существующем вирусе, однако могут существовать и другие эффективные приемы маскировки. Конечно, граница между указанными двумя поколениями условна, и некоторые исследователи относят к стелс-вирусам любой вирус, который использует хотя бы два из приведенных выше методов маскировки. Автору кажется, что критерий должен быть несколько жестче. Ниже приведены описания двух вирусов, которые, по мнению автора, можно отнести к новому поколению.
5.8.1. RCE-04096 (Frodo - Фродо, 4096)
Данный вирус принято считать первым стелс-вирусом. RCE-04096 был разработан в Израиле в конце 1989 г. Название "Фродо" связано с тем, что вирус содержит бут-сектор в своем коде, хотя он никогда не записывает свое тело в бут-сектор. При записи этого бут-сектора в бут-сектор дискеты и попытке загрузки выдается "плакатный текст"
FRODO LIVES
("Фродо живет" или "Фродо жив"), выполненный буквами 8*5, состоящими из символов псевдографики. По данным П.Хоффман, 22 сентября - это день рождения героев известной сказочной трилогии Дж.Р.Толкиена "Властелин колец" (Lord Of The Rings) - Бильбо и Фродо Бэггинов (Bilbo and Frodo Baggins) [Толкиен83].
Формально данный вирус относится к файловым резидентным вирусам. Заражает как COM-, так и EXE-файлы (включая оверлеи) при запуске на выполнение или закрытии файла (функции 21h-4Bh или 21h-3Eh). Файлы заражаются однократно. В качестве признака заражения используется значение поля года даты создания файла. Для зараженных файлов вирус изменяет поле года создания файла, увеличивая его на сто, например с 1990 до 2090. В дальнейшем это значение используется для определения зараженности файла. Возможно заражение файлов, содержащих данные. Приращение длины при заражении всегда равно 4096 байтов, что объясняет такие неформальные названия, как 4096 и 4K. Следует отметить, что вирус проверяет расширение файлов путем суммирования значений букв. Поэтому он будет заражать файлы с любыми расширениями, имеющими сумму кодов букв 223 или 226.
Заражает COM-файлы длиной до 61440 (F000h) байтов. При заражении изменяет первые шесть байтов файла. Тело вируса дописывается в хвост файла. При этом приращение длины файла всегда равно 4096 байтов. Командный процессор заражается как обычный COM-файл. Как и в случае вируса RCE-1800, заражение командного процессора обычно происходит сразу после инсталляции вируса в оперативной памяти.
Заражаемые EXE-файлы могут иметь любую длину. При заражении изменяется заголовок. Тело вируса дописывается в хвост файла. Длина зараженного EXE-файла увеличивается ровно на 4096 байт.
При инсталляции вирус создает себе "дыру" в старших адресах оперативной памяти путем манипуляций с MCB и записывает туда свое тело, затирая транзитную часть COMMAND.COM. При перезагрузке командного процессора вирус заражает его как обычный файл. После инсталляции вируса обьем доступной памяти уменьшается на 6К. Для определения положения обработчиков прерываний 13h и 21h вирус проходит при инсталляции соответствующую часть кода с флагом трассировки (как музыкальные самоеды). Для получения управления по прерыванию 21h вирус использует сплайсинг ("врезку" в обработчик прерывания). Это первый вирус, использующий сплайсинг для получения управления по прерыванию 21h.
RCE-04096 обрабатывает порядка 20 (двадцати !) функций MS DOS (Create, FindFirst, FindNext, Read, Write, Lseek, Open, Close, Exec и некоторые другие).
При наличии вируса в оперативной памяти приращение длины зараженных файлов маскируется и не видно при просмотре оглавления командой DIR. Этот эффект обеспечен за счет перехвата операций, используемых командой DIR для считывания элементов каталога и вычитания 4К из длины зараженных файлов. Первым такой метод маскировки был использован в вирусе RCE-02000. Более того, RCE-04096 маскирует и изменение заголовка.
Любая попытка доступа к зараженному файлу, за исключением выполнения на зараженной машине, ведет к "выкусыванию" тела вируса из зараженного файла. Например, при чтении зараженного файла или загрузке его в память вирус "подставляет" файл в незараженном виде. При открытии файла для записи вирус "выкусывает" свое тело из зараженного файла (поскольку запись в файл может повредить тело вируса или "загнать" его в середину файла), а затем снова заражает при закрытии.
Описанный механизм обеспечивает обход детектирования заражения с помощью ревизоров. Таким образом, данный вирус является первым вирусом, обходящим данный класс антивирусных программ. Если при копировании выполняемого файла создается файл с расширением, не используемым для исполняемых файлов (COM, EXE, BIN, SYS и т.д.), то вирус "выкусывает" свое тело при копировании.
При кодировании вируса использованы достаточно сложные приемы, затрудняющие трассировку. В частности, первые действия инсталлятора вируса после получения им управления направлены на "сбивание" трассировки путем манипулирования прерыванием 1 (пошаговое выполнение), регистром флажков и контроллером 8259. Код вируса не лишен ошибок. В частности, из-за ошибки при кодировании вирус повреждает некоторые файлы при их заражении: после заражения вирус не обновляет информацию в заголовке файла. При запуске таких файлов MS DOS выдает диагностическое сообщение "ERROR in EXE File". Такие повреждения можно устранить, запустив CHKDSK/F, а затем соответствующий фаг. Как уже отмечалось, вирус иногда заражает файлы данных. Они могут быть восстановлены с помощью соответствующего фага.
Фаза проявления привязана к дате 22 сентября, однако код в имеющихся экземплярах вируса стерт в связи с недостаточным размером памяти, отведенным под стек. Учитывая наличие в теле вируса загрузчика, выдающего сообщение "Фродо жив", логично предположить, что она связана с записью в бут-сектор этого загрузчика. В результате первая же перезагрузка приведет к выдаче на экран приведенного выше сообщения. Однако реально после 22 сентября запуск любой зараженной программы вызывает зависание операционной системы (вирус зацикливается), создавая впечатление машинной неисправности. По данным П.Хоффман, из-за ошибки в коде вирус может "сращивать" файлы на диске при манипулировании FAT и числом свободных секторов. Пользователь, использующий команду CHKDSK/F, обнаруживает, что файлы имеют потерянные кластеры или кластеры, принадлежащие двум файлам одновременно.
Вирус ориентирован на MS DOS 3.х и использует ряд недокументированных функций последней. Работоспособность при работе с версиями 4.01 и 5.0 сомнительна, однако автором не проверялась. Зависимости от типа используемого процессора не выявлено. При экспериментах вирус успешно работал как на XT, так и на AT/286. Вирус несовместим с сетевым программным обеспечением фирмы Novell.
Все авторы публикаций, включающих описание данного вируса, сходятся в том, что вирус написан техно-крысой, хорошо знающей "внутренности" операционной системы и алгоритмы работы антивирусных программ. Есть основания предполагать, что при написании вируса использованы идеи и методы вируса RCE-1800 (возможно, он имел исходный текст вируса или дизассемблировал его самостоятельно).
Исторические сведения. Вирус был обнаружен в Израиле в какой-то военной организации в октябре 1989 г. В СССР обнаружен Д.Н.Лозинским в августе 1990 г. Существует штамм 4096-B, аналогичный описанному, но шифрующий свое тело.
Неформальные названия. Среди неформальных названий следует отметить следующие: 4096, 4K, 100 Years virus (100 лет), Century virus (столетие), Hiding (Прячущийся), IDF Virus (ИА-вирус - IDF расшифровывается как Israeli Defence Forces - израильская армия), Stealth Virus (стелс-вирус).
Методы и средства защиты. Данный вирус диагностируется полидетектором Scan. Для визуального обнаружения можно использовать год создания файла (у зараженных файлов год увеличен на 100). Для этой цели можно просмотреть оглавление с помощью Turbo C++ (единственная известная автору оболочка, показывающая год создания файла полностью) или дамп кластеров с каталогами с помощью Norton Utilities (в DIR и в Norton Commander видны только две последние цифры года). Для входного контроля программ можно использовать фаги, рекомендуемые в прил.1. При отсутствии фага для "выкусывания" можно использовать упоминавшийся эффект, связанный с тем, что при копировании выполняемого файла в файл с расширением, отличным от исполняемых (COM, EXE, BIN, SYS и т.д.) резидентный вирус выполняет "выкусывание" своего тела из файла. Для этой цели при резидентном вирусе можно свернуть зараженные файлы в архив, а затем после перезагрузки с защищенной дискеты, содержащей эталонную операционную систему, скопировать их обратно. Другим вариантом является копирование с переименованием расширения, например EXE в TTT, а COM в YYY.
Неясно, является ли увеличение года достаточным признаком зараженности файла, или вирус проверяет еще какие-то поля. Если этот признак достаточен, то возможна пассивная вакцинация файлов путем увеличения значения года создания на 100, как это делалось с секундами создания файла при вакцинации от вируса C-648. Кроме того, возможно создание резидентной вакцины, обеспечивающей увеличение значения поля года при считывании элемента каталога.
Фрагмент дампа дрозофилы, зараженной вирусом RCE-04096
0000: E9E502BA1560B409 0E1FCD21B44CCD21 ..`..!.L.!
010: 9090909090909090 9090909090909090 .
*** последующие строки идентичны предыдущей ***
0080: 00E9A700E90000BA 1C01B4090E1FCD21 ...!
0090: B44CCD2100000000 0000000000000000 .L.!...
00A0: 00FE3A558BEC5081 7E0400C0730C2EA1 ..:U..P.~...s...
00B0: 4712394604760358 5DCF2E803E501201 G.9F.v.X]...>P..
00C0: 74328B46042EA32F 128B46022EA32D12 t2.F.../..F...-.
00D0: 7215585D2E8E16DD 122E8B26DF122EA0 r.X].&.
00E0: E512E621E9D90C81 6606FFFE2EA0E512 ...!.f.
00F0: E621EBC32EFE0E51 1275BC816606FFFE .!..Q.u..f...
0100: E86C0DE8340D2EC5 163112B001E80C0F .l..4.1...
02D0: 010612002EA1E312 2E8E1612002E8B26 ...&
02E0: 1400FB2EFF2E1800
+- начало инсталлятора V 81FC0001770233E4 ...w.3.
02F0: 8BE8E800005981E9 75028CC8BB1000F7 ..Y..u.
0300: E303C183D200F7F3 50B8AB00508BC5CB ..P...P...
0310: 307C07234E04378B 0E4B8B053CD5043D 0|.#N.7..K..<..=
0320: 11053E55050F9B03 14CD0321C10327BF ..>U.!..'.
0330: 031159031259034E 9F044F9F043FA50A ..Y..Y.N..O..?..
0340: 408A0B42900A5741 0A48340E3D004B75 @..B..WA.H4.=.Ku
. .. .. .. .. .. .. .. .. . . . . . . . .
0810: E97CFBE83005E8BC 00C606200001813E .|..0... ...>
0820: 00124D5A740E813E 00125A4D7406FE0E ..MZt..>..ZMt...
0830: 20007458A10412D1 E1F7E10500023BC6 .tX.;.
0840: 7248A10A120B060C 12743FA1A9128B16 rH.t?..
. .. .. .. .. .. .. .. .. . . . . . . . .
1000: E2F6FD8036E77C01 8036D77C288036E2 .6.|..6.|(.6.
1010: 7C28C383E3038A87 0A7C43C3065333DB |(.|C..S3.
1020: 8EC38AD8D1E3D1E3 268917268C5F025B ..&..&._.[
1030: 07C3E811FDB20100 9A0EFB077000330E ...p.3.
1040: 2E03571803002600 0000210050121B17 ..W...&...!.P...
1050: E00F7B21C1023141 7A16011F9A0EFB07 ..{!..1Az.
1060: 7000330E2E035718 571FA9800000571F p.3...W.W..W.
1070: 50121B36F411FF36 F211B903005153B9 P..6...6..QS.
5.8.2. Вирус RC-0-512 (512, 666)
Данный вирус имеет размер, совпадающий с типичным размером сектора в MS DOS, и использует специальный метод размножения, напоминающий метод размножения бутовых вирусов. Вирус содержит текстовую строку 666 в конце тела, поэтому его иногда называют 666. В коде вируса используется ряд недокументированных функций MS DOS. Формально RC-0-512 представляет собой первый сегментированный резидентный файловый вирус. В нем используется несовершенство распределения дисковой памяти в MS DOS: размер кластера обычно превышает размер сектора как минимум в два раза, и поэтому можно использовать незаполненные "хвосты" в последнем секторе для хранения части тела вируса (модификация первых команд остается обязательной, иначе вирус не сможет получить управления). Фактически эту схему можно рассматривать как попытку перенесения схемы бутового вируса на файловый вирус. Как известно, бутовый вирус, в отличие от файлового, сегментирован и состоит из головы и хвоста. Голова находится в бут-секторе, а хвост хранится где-то в другом месте и его загрузка выполняется головой. Аналогично вирус RC-0-512 рассматривает первый сектор COM-файла как бут-сектор и заменяет его своим телом, а хвост, представляющий собой оригинальный первый сектор зараженной программы, прячет в неиспользуемый сектор последнего кластера. Очевидно, что вирус может заражать на дискете только те файлы, у которых второй сектор последнего кластера полностью свободен. На винчестере возможно заражение большинства COM-файлов, так как размер кластера значительно больше и один свободный сектор имеется практически всегда (это, кстати, говорит в пользу использования дисковых драйверов типа SpeedStore, позволяющих, при размере логического диска до 30K, уменьшить размер кластера до 1К, высвободив таким образом порядка 1М дисковой памяти).
При заражении RC-0-512 записывает себя в первый сектор заражаемого COM-файла, предварительно переписав "оригинальный" первый сектор в один из незаполненных секторов последнего кластера, занимаемого файлов, если такой имеется. При отсутствии в памяти резидентного вируса, зараженные файлы, скопированные с помощью команды COPY (копирующей файл побайтово в соответствии с указанной в элементе каталога длиной), будут неработоспособны, а находящийся в них вирус - работоспособным. Заражаются только файлы, имеющие в последнем кластере свободный сектор. Зараженные файлы отмечаются 62 секундным значением в поле даты.
Подобно специфическому механизму заражения, вирус использует необычный механизм инсталляции в оперативной памяти: для хранения собственного тела вирус "откусывает" первый буфер буферного пула MS DOS, переставляя указатель на первый буфер так, чтобы он указывал на второй буфер. Таким образом, определить его наличие в памяти без полного сканирования оперативной памяти можно только, если знаешь, где искать. Этот факт свидетельствует о том, что оптимизация просмотра оперативной памяти в контекстных детекторах и полифагах является неверным шагом и может ухудшить качество детектирования.
Как и в других вирусах группы Dark Avenger, заражение происходит как при открытии, так и при выполнении файла. Заражаются файлы, первые две буквы расширения которых "CO". При копировании заражаются как копия, так и оригинал.
Вирус заражает COMMAND.COM методом, аналогичным использованному в RCE-1800. При этом он сам специально модифицирует часть транзитного модуля COMMAND.COM, чтобы вызвать его перезагрузку и заражение. Поскольку при перезагрузке системы командный процессор загружается в память до появления в ней резидентного вируса, то вирус инсталлируется, а затем подгружает недостающую часть командного процессора из свободного сектора последнего кластера.
Исторические сведения. Вирус RC-0-512 разработан в Болгарии техно-крысой, называющей себя Dark Avenger. Он был обнаружен студентом-программистом Василем Никодимовым в ноябре 1989 г. в Институте математики (София). Первой публикацией, описывающей данный вирус, является статья [Бончев90б]. В СССР обнаружен практически одновременно в Москве и Киеве в сентябре 1990 г.
Методы и средства защиты. Данный вирус диагностируется полидетектором Scan и любым контекстным детектором, содержащим соответствующую сигнатуру. Возможность создания резидентной вакцины неясна. Для входного контроля рекомендуются полифаги, приведенные в прил.1, в сочетании с полидетектором Scan. В связи с используемым механизмом заражения, при его создании возникает проблема с определением, хранится ли в соответствующем секторе последнего кластера оригинальная голова COM-файла (первые 512 байтов программы) или файл был скопирован и там теперь просто мусор. В последнем случае восстановление приведет к записи мусора на место тела вируса. Неясно также, что произойдет при оптимизации диска, содержащего зараженные файлы, с помощью утилит Norton Speed Disk (NSD), Сompress и т.д.
Фрагмент дампа дрозофилы, зараженной вирусом RC-0-512
+-начало инсталлятора V
000: B430CD21BE04008E DE80FC1EC5440872 .0.!...D.r
010: 0AB413CD2F1E52CD 2F581FBFF800AB8C ./.R./X...
020: D8AB8EDEC54440AB 3D1B018CD8AB0657 ..D@.=...W
030: 7507D1E6B90001F3 A70E1F744AB452CD u.tJ.R.
040: 2106BEF8002BFF26 C44712268B5502B9 !.+.&.G.&.U..
050: 0401F3A58ED9BF16 00C7456E1B018C45 .En...E
060: 701F8957148CCA8E DA8B5DECFECF8EC3 p..W...]..
070: 3B158E1D8B154A8E DA8BF18BD7B128F3 ;..J.(.
080: A58EDB7212CD208B F18E5C2CAD4E85C0 ...r.. ...\,.N..
090: 75FA83C6038BD6B4 3DE814008B158955 u.=...U
0A0: 04010D5A520E1F1E 0706B05050B43FCB ...ZR...PP.?.
... .. .. .. .. .. .. .. .. . . . . . . . .
150: 00AD50AD50FF7440 FF74422EC554B0B8 ..P.P.t@.tB..T..
160: 1325CD210E1FBA75 00B024CD21061F8A .%.!...u..$.!...
170: 45FC241F3C1F7408 8B45172D434F7544 E.$.<.t..E.-COuD
180: 3045FC8B053BC172 3B03C17237F645F3 0E...;.r;..r7.E.
190: 047531C575F6386C 04720848D0EC2264 .u1.u.8l.r.H.."d
1A0: 047421B820008ED8 2BD2E85EFF8BF251 .t!. ...+..^...Q
1B0: AC2E3A44077527E2 F75926804DFC1F26 ..:D.u'..Y&.M..&
1C0: 804DF540B43EE844 FF26804DF4401F5A .M.@.>.D.&.M.@.Z
1D0: B82425CD211F5AB0 13CD21E94FFF5926 .$%.!.Z...!.O.Y&
1E0: 8B3526897504B440 CD2172D326893526 .5&.u..@.!r.&.5&
1F0: 8955040E1FB208B4 40CD21EBBD363636 .U...@.!..666
5.9. Студенческая группа резидентных вирусов
Базовым вирусом при создании "студенческих" резидентных вирусов является, по-видимому, вирус RCE-1813. Это связано с тем, что, с одной стороны, данный вирус относится к числу наиболее распространенных файловых вирусов, что обусловливает его доступность, а, с другой стороны, код вируса сравнительно прост и не требует специальных знаний для дизассемблирования и реконструкции.
Типичным примером студенческих резидентных вирусов, основанных на RCE-1813, является так называемая воронежская подгруппа, хотя, по имеющимся данным, разработавшая ее техно-крыса в момент написания этих вирусов была не студентом, а школьником. Это, пожалуй, наиболее ранние отечественные вирусы, которые можно отнести к группе студенческих.