Энциклопедия компьютерных вирусов

         

DOS-вирусы


1. Вирус может проникнуть в таблицу векторов прерываний

Лучший способ обнаружить такой вирус состоит в том, чтобы просмотреть карту распределения памяти, которая отображает список резидентных программ (пример такой карты приведен в табл. 3.1). Подробная карта памяти сообщает информацию о всех блоках, на которые разбита память: адрес блока управления памятью MCB, имя программы-владельца блока, адрес ее префикса программного сегмента (PSP) и список перехватываемых блоком векторов прерываний.

При наличии вируса в таблице векторов прерываний, утилиты, отображающие карту распределения памяти (например, AVPTSR.COM, AVPUTIL.COM), начинают «шуметь».

Таблица 3.1. Карта распределения незараженной памяти

+-----------------------------------------------------+ |Адрес|Адрес|Размер |Имя программы|Номера векторов | |блока| PSP |блока |владельца |прерываний | | MCB | |MCB(Кб)|блока MCB | | |-----+-----+-------+-------------+-------------------| |0E9A |0E9B | 3,20K| COMMAND.COM | 22,24,2E | |0F6E |0F6F | 0,04K|блок свободен| | |0F72 |0E9B | 0,15K| COMMAND.COM | | |0F7D |0F85 | 23,20K| AVPTSR.COM | 10,1B,1C,23,26,27 | | | | | | 28,2F,40,EF,FF | |1545 |1546 | 0,10K|блок свободен| | |154D |154E | 3,90K| PLUCK.COM | 09,13,16,21 | |164B |0E9B |549,30K| COMMAND.COM | 30,EE,F2,F3,F4,F5 | | | | | | F6,F7,F8,FE | +-----------------------------------------------------+

Таблица 3.2. Таблица векторов прерываний поражена вирусом

+-----------------------------------------------------+ |Адрес|Адрес|Размер |Имя программы|Номера векторов | |блока| PSP |блока |владельца |прерываний | | MCB | |MCB(Кб)|блока MCB | | |-----+-----+-------+-------------+-------------------| |0E9A |0E9B | 3,20K| COMMAND.COM | 22,24,2E,EB | |0F6E |0F6F | 0,04K|блок свободен| | |0F72 |0E9B | 0,15K| COMMAND.COM | | |0F7D |0F86 | 23,20K| AVPTSR.COM | 10,1B,23,26,27,28 | | | | | | 2F,40,CA,D3 | |1546 |1547 | 0,10K|блок свободен| | |154E |154F | 3,90K| PLUCK.COM | 09,13,16,91 | |164C |0E9B |549,30K| COMMAND.COM | 30,85,89,8E,90,93 | --+ | | | | | 95,97,98,9D,9E,9F | | | | | | | A2,A7,A9,AB,AE,AF | | | | | | | B1,B3,BB,BE,BF,C0 | |- «Шум» | | | | | C4,C9,CE,CF,D0,D1 | | | | | | | D2,D4,D5,D8,D9,DA | | | | | | | DB,DD,DF,E0,E4,E5 | | | | | | | E6,E7,E8,E9,EA,ED | | | | | | | EE,F3,F4,F5,F7,F8 | | | | | | | F9 | --+ +-----------------------------------------------------+


Другой, более надежный, но требующий высокой квалификации пользователя способ, — просмотреть таблицу векторов прерываний с помощью дизассемблера. Если при этом будут обнаружены коды какой-то программы, то код вируса (или участок кода) найден.

2. Вирус может несколькими способами встроиться в DOS: в произвольный системный драйвер, в системный буфер, в другие рабочие области DOS (например, в область системного стека или в свободные места таблиц DOS и BIOS)

Наиболее «популярным» способом инфицирования вирусом произвольного системного драйвера является прикрепление тела вируса к файлу, содержащему драйвер, и модификация заголовка поражаемого драйвера. Если при этом вирус оформляет себя как отдельный драйвер, то его можно обнаружить при просмотре карты распределения памяти, содержащей список системных драйверов. Если при этом в списке присутствует драйвер, который не описан в файле CONFIG.SYS, то он и может быть вирусом. Если же вирус «приклеивается» к расположенному перед ним драйверу, не выделяя свои коды как отдельную программу-драйвер, то обнаружить его можно методами, описанными ниже.

Вирус, встраивающийся в системный буфер, должен уменьшать общее число буферов; в противном случае он будет уничтожен последующими операциями считывания с диска. Достаточно несложно написать программу, которая подсчитывает число буферов, реально присутствующих в системе, и сравнивает полученный результат со значением команды BUFFERS, расположенной в файле CONFIG.SYS (если команда BUFFERS отсутствует, то со значением, устанавливаемым DOS по умолчанию).

Существует достаточно способов внедрения вируса в системные таблицы или область стека DOS. Однако реализация этих способов потребует от автора вируса досконального знания различных версий DOS. К тому же свободного места в DOS не так уж много, и поэтому написание полноценного «стелс»-вируса такого типа маловероятно. Если же все-таки подобный вирус появится, то обнаружить его код можно дизассемблированием «подозрительных» на наличие вируса участков DOS.



3. Вирус может проникнуть в область программ в виде:

  • отдельной резидентной программы или отдельного блока памяти (MCB);




  • внутри или «приклеившись» к какой-либо резидентной программе.


  • Если вирус внедряется в отведенную для прикладных программ область памяти в виде нового блока, создавая для себя собственный MCB, или как отдельная резидентная программа, то его можно обнаружить при просмотре подробной карты распределения памяти, отображающей адреса всех блоков MCB. Обычно такой вирус выглядит как отдельный блок памяти (табл. 3.3), не имеющий имени и перехватывающий один или несколько векторов прерываний (например, INT 8, 13h, 1Ch, 21h). Следует отметить, что вирус может выделить себе блок памяти как в обычной (conventional), так и в верхней памяти (UMB).

    Таблица 3.3.a. Вирус в области пользовательских программ

    +-----------------------------------------------------+ |Адрес|Адрес|Размер |Имя программы|Номера векторов | |блока| PSP |блока |владельца |прерываний | | MCB | |MCB(Кб)|блока MCB | | |-----+-----+-------+-------------+-------------------| |0E9A |0E9B | 3,20K| COMMAND.COM | 22,24,2E | |0F6E |0F6F | 0,04K|блок свободен| | |0F72 |0E9B | 0,15K| COMMAND.COM | | |10D1 |10DA | 23,20K| AVPTSR.COM | 10,1B,23,26,27,28 | | | | | | 2F,40 | |17AF |17B0 | 1,70K| ? | 08 <----+ | |1820 |0E9B |539,30K| COMMAND.COM | 30,31 | | |9F04 |0000 | 3,90K| ? | 1C,21 <--+ | | +---------------------------------------------|-|-----+ | | вирус «Yankee» -+ | вирус «Jerusalem» ---+

    Таблица 3.3.b. Вирус в области пользовательских программ (UMB)

    +-----------------------------------------------------+ |Адрес|Адрес|Размер |Имя программы|Номера векторов | |блока| PSP |блока |владельца |прерываний | | MCB | |MCB(Кб)|блока MCB | | |-----+-----+-------+-------------+-------------------| |03D8 |03D8 | 2,62K| COMMAND.COM | 22,24,2E | |047D |0000 | 0,06K|блок свободен| | |0482 |03D8 | 0,25K| COMMAND.COM | | |0493 |0493 | 18,90K| AVPTSR.COM | 10,1B,23,26,27,28 | | | | | | 2F,40 | |08F5 |03D8 |618,64K| COMMAND.COM | 30 | |A000 |0008 |136,09K| DOS | | |C13A | - | 1,20K| DOS | <--+ | |C186 | - | 54,96K|блок свободен| | | +---------------------------------------------|-------+ | вирус «Tremor», маскирующийся под блок DOS -+



    4. Вирус может проникнуть за границу памяти, выделенной под DOS

    Практически все загрузочные и некоторые файловые вирусы располагаются за пределами памяти, выделенной для DOS, уменьшая значение слова, расположенного по адресу [0040:0013]. В этом случае первый мегабайт памяти компьютера выглядит так:

    00000 +------+ Память DOS 00000 +------+ Память DOS | | | | | | | | | | XXXX0h |------| «Вырезанный» вирусом | | | | участок памяти A0000h |------| Видео-память A0000h |------| Видео-память | | | | C0000h |------| ROM BIOS C0000h |------| ROM BIOS | | | | | | | | +------+ +------+

    Обнаружить такие вирусы очень просто — достаточно узнать емкость оперативной памяти и сравнить ее с реальной. Если вместо 640K (на некоторых старых PC — 512K) система сообщит меньшее значение, то следует просмотреть дизассемблером «отрезанный» участок памяти. Если на этом участке будут обнаружены коды какой-то программы, то, скорее всего, вирус найден.

    Внимание! Емкость оперативной памяти может уменьшиться на 1 или несколько килобайт и в результате использования расширенной памяти или некоторых типов контроллеров. При этом типичной является следующая картина: в «отрезанном» участке содержимое большинства байтов нулевое.

    5. Вирус может встраиваться в конкретные, заведомо резидентные программы или «приклеиться» к уже имеющимся блокам памяти

    Возможно инфицирование вирусом файлов DOS, которые являются резидентными (например, IO.SYS, MSDOS.SYS, COMMAND.COM), загружаемых драйверов (ANSY.SYS, COUNTRY.SYS, RAMDRIVE.SYS) и др. Обнаружить такой вирус гораздо сложнее вследствие малой скорости его распространения, но, однако, вероятность атаки подобного вируса значительно меньше. Все чаще стали встречаться «хитрые» вирусы, которые корректируют заголовки блоков памяти или «обманывают» DOS таким образом, что блок с кодами вируса становится одним целым с предыдущим блоком памяти.

    В этом случае обнаружить вирус гораздо сложнее — необходимо знать реальную длину программ, размещенных в памяти, и список прерываний, которые они перехватывают.


    Но этот способ не очень удобен и иногда не срабатывает. Поэтому рекомендуется использовать другой метод, который может облегчить выявление вируса в подобной ситуации. Он основан на следующем свойстве - подавляющее большинство вирусов для обнаружения незараженных файлов или секторов дисков перехватывает прерывания 13h или 21h, встраиваясь в обработчик прерывания. В таком случае для обнаружения вируса достаточно просмотреть текст (команды ассемблера) обработчиков указанных прерываний (например, при помощи программы AVPUTIL.COM). Правда для того, чтобы отличить вирус от обычных программ, требуется достаточный опыт работы с вирусами и некоторое представление о структуре обработчика на незараженном компьютере. К тому же следует быть осторожным: существует несколько вирусов, которые «завешивают» систему при попытке трассировки их кодов.

    Известны вирусы, которые при заражении файлов или дисков не пользуются прерываниями, а напрямую работают с ресурсами DOS. При поиске подобного вируса необходимо тщательно исследовать изменения во внутренней структуре зараженной DOS: список драйверов, таблицы файлов, стеки DOS и т.д. Это является очень кропотливой работой, и, учитывая многочисленность версий DOS, требует очень высокой квалификации пользователя.

    Конечно, существуют и другие, достаточно экзотические способы инфицирования памяти вирусом, например внедрение вируса в видеопамять, в High Memory Area (HMA) или в расширенную память (EMS, XMS), но подобные вирусы встречаются достаточно редко и всегда проявлялись хотя бы одним из перечисленных выше признаков. Существуют также монстры, использующие защищенный режим процессоров i386 и выше. К счастью, известные вирусы такого типа либо «не живут» вместе с современными операционными системами и поэтому слишком заметны, либо не используют стелс-приемов. Однако появление полноценного стелс-DOS-вируса, работающего в защищенном режиме, вполне реально. Такой вирус будет невидим для DOS-задач и обнаружить его будет возможно, только либо перенеся зараженные файлы на незараженный компьютер, либо после перезагрузки DOS с чистой дискеты.


    Содержание раздела