Жанр: Учеба
Компьютерная вирусология ч. 1
...иностранные слова можно использовать без перевода. Badware включает
ряд подклассов, среди которых наиболее распространенными являются
троянские программы и компьютерные вирусы.
2.2. Троянские программы
"O tempora, o mores !"
(О времена, о нравы !)
Цицерон
Троянскими программами (троянскими конями) обычно называют программы,
содержащие скрытый модуль, осуществляющий несанкционированные
действия. Эти действия не обязательно могут быть разрушительными,
однако практически всегда направлены во вред пользователю.
В свою очередь, троянские программы можно разделить на несколько
категорий.
Троянские программы-вандалы обычно выполняют или имитируют выполнение
какой-нибудь полезной или экзотической функции. При этом
в качестве побочного эффекта они стирают файлы, разрушают каталоги,
форматируют диск и т.д. Иногда разрушительный код встраивается
в какую-нибудь известную программу. Чтобы привлечь пользователей,
полученная троянская программа-вандал часто маскируется под новую
версию данного программного продукта.
С появлением BBS программы-вандалы получили значительное распространение.
При этом техно-крыса подсовывает программу в один или
несколько BBS, пользователи которых затем "попадаются на удочку".
В качестве примера троянской программы-вандала можно привести программу
SURPRISE ("Сюрприз"). Написанная на Бейсике, она исполняла
команду DEL *.*, а затем выдавала на экран строку "Surprise !". И
таких простых и злобных программ создано немало. С их распространением
запуск новой программы на компьютере стал небезопасной операцией.
Иногда в качестве самостоятельной разновидности троянских программ-вандалов
выделяют так называемые логические мины (logic
bomb) є скрытые модули, встроенные в ранее разработанную и широко
используемую программу. Такой модуль является безвредным до определенного
события, при наступлении которого он срабатывает. Такого
рода программы иногда используются уволенными или обиженными сотрудниками
как форма мести по отношению к нанимателю. Частный случай
логических мин, в которых срабатывание скрытого модуля определяется
временем, часто называют минами с часовым механизмом (time
bomb). Фактически логические мины являются средством компьютерного
саботажа и их создание должно предусматривать уголовную ответственность.
Хотя, как указано выше, компьютерный саботаж обычно связан
с "местью" обиженных или уволенных программистов своему бывшему
работодателю, он может использоваться и как форма конкурентной
борьбы.
В истории отечественного программирования было несколько "громких"
случаев компьютерного саботажа. Так, лет семь назад отечественные
газеты сообщали о программисте, который перед своим увольнением
встроил в программу, управлявшую главным конвейером Горьковского
автомобильного завода, "мину", которая через некоторое время
привела к остановке главного конвейера. Программист был выявлен
и осужден. На Западе, наряду с попытками хищения средств через
банковские компьютеры, распространены случаи компьютерного саботажа
по отношению к различного рода финансовым системам, вплоть до
шифровки базы данных с последующим требованием выкупа за ключ
(программу) расшифровки. Последним известным случаем такого рода
было описанное выше распространение дискеты с информацией по
СПИДу, в которой программа управления базой данных была троянской.
Программы, обеспечивающие вход в систему или получение привилегированной
функции (режима работы) в обход существующей системы
полномочий, называют люками (back door). Люки часто оставляются
разработчиками соответствующих компонент операционной системы для
того, чтобы завершить тестирование или исправить какую-то ошибку,
но нередко продолжают существовать и после того, как то, для чего
они планировались, завершено или необходимость в нем отпала. Например,
в операционной системе ОС ЕС широко использовался люк
NEWPSW, позволявший программе пользователя получить привилегированный
режим, называемый в серии 360/370 режимом супервизора, в
обход средств контроля операционной системы.
Троянские программы могут также использоваться в целях разведки.
К распространенным программам такого рода относятся программы угадывания
паролей. Одной из компонент сетевого вируса Морриса была
такая программа, причем, как оказалось, она сумела добиться успеха
в значительном числе случаев.
2.3. Компьютерные вирусы
"Да он-то как вперед пробрался ?"є
"За хвостик тетеньки держался !"
И.Франко
Формально компьютерным вирусом называется программа, которая может
заражать другие программы путем включения в них своей, возможно
модифицированной, копии, причем последняя сохраняет способность
к дальнейшему размножению [Cohen88a]. Программа, зараженная вирусом,
может рассматриваться как автоматически созданная троянская
программа. В данном случае скрытым модулем является тело вируса, а
одним из несанкционированных действий є заражение других программ.
Помимо заражения, вирус, подобно любой другой троянской программе,
может выполнять и другие несанкционированные действия, от вполне
безобидных до крайне разрушительных. Последние, в частности, могут
включать уничтожение данных на зараженном диске. В этом случае вирус
может рассматриваться как логическая мина. Выполняемые вирусом
несанкционированные действия могут быть обусловлены наступлением
определенной даты (такие троянские программы в какой-то степени
аналогичны минам с часовым механизмом) или определенного количества
размножений, или сочетанием определенных условий, например записи
зараженной программы на винчестер (последние аналогичны различного
рода бесконтактным минам). При этом комбинация этих условий
может быть достаточно сложной, чтобы затруднить ее определение
(как например, в вирусе Пинг-понг).
Инфицируя программы, вирусы могут распространяться от одной программы
к другой (транзитивно), что делает их более опасными по
сравнению с другими методами компьютерного вандализма. Зараженные
программы (или их копии) могут передаваться через дискеты или по
сети на другие ЭВМ. Учитывая широко распространенную практику обмена
и передачи программ на дискетах среди пользователей персональных
ЭВМ, количество зараженных программ может быть значительным,
приводя к своего рода эпидемиям. Этому также способствует
распространенная в нашей стране практика использования одной ПЭВМ
несколькими пользователями. Опасность существенно возрастает при
наличии винчестера, программы на котором используются всеми пользователями.
В этом случае один неквалифицированный или злонамеренный
пользователь может нанести значительный ущерб другим пользователям.
Особую опасность с точки зрения распространения компьютерных
вирусов представляют любители компьютерных игр, обычно слабо
знающие операционную систему и не вполне понимающие смысл выполняемых
ими действий. Такие пользователи подвергают значительному риску
своих коллег, работающих с ними на одной ПЭВМ.
Упрощенно процесс заражения вирусом программных файлов можно
представить следующим образом. Код зараженной программы обычно изменен
таким образом, чтобы вирус получил управление первым, до начала
работы программы-вирусоносителя (рис.2). При передаче управления
вирусу, он каким-то способом находит новую программу и выполняет
вставку собственной копии в начало (рис.2б) или добавление
ее в конец этой, обычно еще не зараженной, программы (рис.2а). Если
вирус дописывается в конец программы, то он корректирует код
программы, чтобы получить управление первым. Для этого первые несколько
байтов запоминаются в теле вируса, а на их место вставляется
команда перехода на начало вируса. Этот способ является наиболее
распространенным. Получив управление, вирус восстанавливает
"спрятанные" первые байты, а после отработки своего тела передает
управление программе-вирусоносителю, и та нормально выполняет свои
функции. Возможны случаи, когда вирус включает себя куда-то в середину
программы, например, в область стека (рис.2в). Последние
случаи встречаются редко.
+------------------+ +-------------+ +------------------+
|++++++++++++++++++| |+++++++++++++| |++++++++++++++++++|
|+Команда перехода+|+ |+++++++++++++| |+Команда перехода+|+
|++++++++++++++++++|| |+Тело вируса+| |++++++++++++++++++||
|------------------|| |+++++++++++++| |------------------||
|++++++++++++++++++|| |+++++++++++++| |++++++++++++++++++||
|+ ЗАРАЖЕННАЯ +++|| |+++++++++++++| |+ НАЧАЛО +++||
|++++++++++++++++++|| |+++++++++++++| |++++++++++++++++++||
|+ ПРОГРАММА ++|| |+++++++++++++| |+ ЗАРАЖЕННОЙ +++||
|++++++++++++++++++|| |+++++++++++++| |++++++++++++++++++||
|+ (COM - ФАЙЛ) ++|| |+++++++++++++| |+ ПРОГРАММЫ ++||
|++++++++++++++++++|| |+ЗАРАЖЕННАЯ +| |++++++++++++++++++||
|++++++++++++++++++|| |+++++++++++++| |++++++++++++++++++||
|++++++++++++++++++|+ |+ПРОГРАММА +| |++++++++++++++++++|+
|++++Тело вируса+++| |+++++++++++++| |++++++++++++++++++|
|++++++++++++++++++| |+COM - ФАЙЛ)+| |++++Тело вируса+++|
|++++++++++++++++++| |+++++++++++++| |++++++++++++++++++|
|++++++++++++++++++| |+++++++++++++| |++++++++++++++++++|
|++++++++++++++++++| |+++++++++++++| |++++++++++++++++++|
|+Спрятанные байты+| |+++++++++++++| |+Спрятанные байты+|
|++++++++++++++++++| |+++++++++++++| |++++++++++++++++++|
|++++++++++++++++++| |+++++++++++++| |++++++++++++++++++|
|++++++++++++++++++| |+++++++++++++| |++++++++++++++++++|
+------------------+ +-------------+ |------------------|
а б |++++++++++++++++++|
|+ КОНЕЦ +++|
Рис. 2. |++++++++++++++++++|
Схема заражения вирусом COM-файлов: |+ ЗАРАЖЕННОЙ +++|
а - в конец программы; |++++++++++++++++++|
б - в начало программы; |+ ПРОГРАММЫ ++|
в - в середину программы. |++++++++++++++++++|
+------------------+
в
2.4. Анатомия компьютерного вируса
Наиболее распространенными типами компьютерных вирусов в MS DOS
являются файловые нерезидентные, файловые резидентные и бутовые
вирусы. Многие из пользователей имеют ограниченный опыт работы с
МS DOS. В то же время, для понимания функционирования файловых вирусов
и средств защиты от них важно понимать структуру файловой
системы и прерываний MS DOS. Поэтому в приложении 6 приводится
краткий обзор структуры файловой системы MS DOS, в приложении 7 -
структуры исполняемых файлов и некоторых управляющих блоков, а в
приложениях 8 и 9 є сведения о прерываниях. Более подробные сведения
можно получить в учебниках по языку ассемблера [Скенлон89], в
электронном справочнике TECHHELP, а также книгах П.Нортона [Нортон90]
и Жордена. Разбор анатомии компьютерных вирусов начнем с
анализа структуры нерезидентного файлового вируса, как простейшей
разновидности этого класса системных программ.
Структурно компьютерный вирус можно представить состоящим из
двух частей: головы и хвоста. Головой называется часть вируса,
которая первой получает управление. Хвост вируса - это части вируса,
расположенные отдельно от головы. В простейшем случае вирус
может состоять из одной головы, и действительно файловые вирусы
обычно так и устроены. Такие вирусы будем называть несегментированными.
В отличие от них сегментированные вирусы имеют располагающийся
отдельно хвост и в какой-то мере аналогичны оверлейным файлам.
Примером сегментированных вирусов являются бутовые вирусы,
хотя возможна реализация сегментированных файловых вирусов.
2.4.1. Структура файлового нерезидентного вируса
Файловые вирусы являются наиболее распространенной разновидностью
компьютерных вирусов. Принципиально они заражают любой тип
исполняемых файлов, существующих в MS DOS: COM, EXE, OVL и т.д.
Однако основными объектами заражения являются файлы типа COM и
файлы типа EXE. Некоторые сведения о структуре этих файлов приведены
в прил. 6. Наиболее просто осуществляется заражение COM-файлов,
которые представляют собой почти точную копию участка памяти
с загруженной программой. Единственная требуемая настройка при загрузке
COM-файлов состоит в загрузке сегментных регистров значениями,
соответствующими месту загрузки программы. Значительная часть
COM-файлов начинается с команды перехода, обходящей содержащие в
начале программы данные.
При заражении COM-файлов вирус запоминает в своем теле первые
три или больше байтов программы и вместо них записывает переход на
начало собственного кода. Так поступает большинство файловых вирусов,
заражающих COM-файлы, но не все. Дело в том, что при дописывании
тела вируса в конец заражаемого файла весь код вируса должен
быть написан специальным образом, обычно называемым позиционно-независимым
программированием: при выполнении программы все ссылки
должны адресоваться через соответствующее смещение, которое обычно
хранится в одном из регистров.
Некоторые вирусы используют более примитивный подход: вместо дописывания
своего тела в конец заражаемого COM-файла они перемещают
туда первые несколько блоков программы, а сами записываются на
место освободившихся блоков. Так, например, поступает вирус RCE1813.
В этом случае только программа восстановления исходного состояния
программы должна быть позиционно-независимой или она должна
размещаться где-то в фиксированных адресах памяти, используя
какой-то неиспользуемый ее участок.
Простейший нерезидентный компьютерный вирус, заражающий COMфайлы
в текущем каталоге и дописывающий свое тело в конец файла,
можно представить в виде следующей неформальной спецификации.
Шаг 1: Восстановить первые три байта программы. Три байта
зараженной программы, сохраненные в теле вируса, пересылаются на
свое старое место.
Шаг 2: Проверить среду. Проверить версию операционной системы.
Если не подходящая, то перейти к шагу 11.
Шаг 3: Найти очередную жертву(ы). Найти в текущем каталоге очередной
файл типа COM. При неудаче перейти к шагу 11.
Шаг 4: Проверить зараженность потенциальной жертвы. Считать область,
позволяющую установить, заражен ли уже данный файл вирусом
или нет. Проверить содержимое этой области. Если файл уже заражен,
то перейти к шагу 3, иначе перейти к шагу 5.
Шаг 5: Проверить, подходит ли жертва для заражения. Если длина
файла + длина вируса больше 64К, перейти к шагу 3, иначе перейти к
шагу 6.
Шаг 6: Снять атрибут READ ONLY, запомнить дату создания программы.
Снять указанный атрибут и запомнить в своем теле дату создания
программы.
Шаг 7: Обеспечить передачу управления вирусу. Считать первые три
байта зараженной программы и записать их в своем теле. Сформировать
команду перехода на байт, следующий за концом программы, и
записать соответствующие три байта в начало заражаемой программы.
При неудаче перейти к шагу 11, иначе перейти к шагу 8.
Шаг 8: Дописать тело вируса в конец заражаемой программы. Передвинуть
указатель файла в конец программы и установить режим дозаписи.
Переписать свое тело в конец заражаемой программы. При неудаче
перейти к шагу 11, иначе перейти к шагу 9.
Шаг 9: Восстановить дату создания зараженной программы. Записать
в элемент каталога, соответствующий заражаемой программе, дату,
сохраненную в теле вируса.
Шаг 10: Восстановить атрибут READ ONLY. Присвоить заражаемому
файлу атрибуты, установленные у файла до заражения и сохраненные в
теле вируса. При неудаче перейти к шагу 11, иначе перейти к шагу
10.
Шаг 11: Выход. Восстановить содержимое регистров и передать управление
программе-вирусоносителю.
Как видно из приведенной схемы, данный вирус распространяется не
мгновенно по всей файловой системе, а постепенно, по мере заражения
файлов в текущем каталоге. Поэтому от момента появления в файловой
системе первого зараженного файла до заражения всех файлов в
каталоге должно пройти некоторое время, зависящее от интенсивности
использования зараженной программы.
Наиболее уязвимыми с точки зрения блокирования размножения вируса
являются шаг 6 (попытка снятия атрибута READ ONLY), шаги 7,8 є
запись в файл, содержащий исполняемую программу, и шаг 9 є установка
даты создания файла, отличающейся от текущей. Для блокирования
этих шагов обычно используются различные резидентные программы
(см. ниже). Кроме того, если на шаге 4 вирус использует для маркировки
зараженных файлов легко воспроизводимый признак (например,
простановку в поле даты значения 62 секунды є излюбленный признак
для файловых вирусов), можно блокировать его распространение, присвоив
этот признак всем заражаемым данным вирусом файлам. Этот
прием используется так называемыми программами-вакцинами (см. ниже).
Вставка тела вируса при заражении может выполняться не только в
хвост. Код вируса может имплантироваться в начало, конец или середину
файла.
1) Вставка в начало файла. В этом случае первые блоки (или все
тело) заражаемой программы обычно переписываются в конец, поэтому
до передачи управления зараженной программе вирус должен предварительно
переписать эти блоки (или все тело) на первоначальное место,
заменив ими собственный код. С этой целью вирус должен переместить
свое тело или хотя бы соответствующую часть своего кода таким
образом, чтобы она не была затерта в процессе операции перезаписи.
Некоторые примитивные вирусы, записываясь в начало заражаемого
файла, не сохраняют его содержимого. При этом, естественно,
зараженный файл уничтожается, а вирус, получив управление, должен
как- то замаскировать тот факт, что вызываемая программа является
неработоспособной. Для этой цели иногда используется какое-нибудь
подходящее сообщение об ошибке.
2) Вставка в конец файла. При этом необходимо обеспечить передачу
управления коду вируса до начала работы зараженной программы.
Для файлов типа COM это обеспечивается заменой нескольких первых
байтов программы (обычно трех в соответствии с размером кода команды
перехода микропроцессора 8088/8086) на команду перехода к
началу вируса (инсталлятору). При этом сами первые байты обязательно
должны быть сохранены где-то в теле вируса, что обеспечивает
возможность их восстановления (операция поиска этих трех байтов
является составной частью работы любого фага). Когда инсталлятор
вируса получает управление, то обычно в начале своей работы он
восстанавливает измененные вирусом байты в первоначальном виде.
3) Вставка в середину файла. Этот способ заражения файла встречается
редко. Во-первых, этот способ используется узкоспециализированными
вирусами, поражающими определенный класс программ, особенности
структуры которого заранее известны, например, только
файл СOMMAND.COM. Примером такого вируса может служить вирус RC346
(Lehigh). Во-вторых, и это гораздо более частый случай, вставка
в середину возможна для обычных вирусов, цепляющихся к концу
EXE-файл, если в заголовке этого файла неправильно указана его
длина, т.е. часть файла используется в качестве буфера или
неявного оверлея, как например, в головном модуле системы FOXBASE.
В этом случае вирус считает, что файл имеет длину, указанную в заголовке,
и записывает свой код в область буфера или оверлея. При
этом он оказывается в середине действительно занимаемого данной
программой файла. В-третьих, файл может быть заражен несколькими
вирусами, однотипно заражающими файл (обычно дописывающими свой
код в конец файла). В этом случае, вирус первым заразивший данный
файл, оттесняется к середине файла последующими вирусами. Являясь
сравнительно редкими, указанные случаи довольно часто не учитываются
создателями антивирусных программ, в частности, детекторов и
фагов, которые увлекаясь оптимизацией времени выполнения своих
программ, принимают неправильные допущения о расположении кода вируса
в теле зараженной программы. В результате файл может быть не
детектирован как зараженный или вылечен неправильно.
2.4.2. Структура файлового резидентного вируса
Для понимания функционирования файлового вируса необходимо некоторое
знакомство с системой прерываний компьютера типа IBM PC. Минимальные
необходимые сведения приводятся в приложениях 8 и 9.
Файловые резидентные вирусы, помимо отдельных файлов, заражают,
если так можно выразиться, и память компьютера. Предельно упрощая,
память компьютера можно рассматривать как еще один файл, который
можно заражать, дописываясь "в голову", т.е. в область младших адресов
свободного участка памяти, "в хвост", т.е. в область старших
адресов свободного участка памяти и наконец, "в середину", т.е. в
область адресов, уже используемых операционной системой или какойнибудь
программой (старшие адреса вектора прерываний, буфера и
т.д.).
Вместе с тем, структура резидентного вируса существенно отличается
от структуры нерезидентного вируса. Резидентный вирус можно
представлять как состоящий из двух относительно независимых частей:
инсталлятора и модуля обработки прерываний. Последний, в свою
очередь, состоит из ряда программ обработки. Несколько упрощая,
можно считать, что на каждое перехватываемое прерывание приходится
своя программа обработки.
Инсталлятор получает управление при выполнении зараженной программы
и играет роль своеобразной ракеты-носителя, запускающей вирус
на орбиту, т.е. в оперативную память. Он отрабатывает один
раз є после запуска зараженной программы и его целесообразно рассматривать
как специализированный файловый вирус, заражающий оперативную
память и, возможно, обычные файлы. В последнем случае инсталлятор
можно рассматривать как доработанный для заражения оперативной
памяти файловый вирус. Структуру инсталлятора можно упрощенно
представить следующим образом:
Шаг 1: Проверить версию MS DOS
Шаг 2: Восстановить измененные байты зараженной программы.
Шаг 3: Проверить зараженность оперативной памяти. Если память
заражена, то передать управление программе-вирусоносителю, иначе
перейти к шагу 4.
Шаг 4: Закрепиться в оперативной памяти. Переписать свое тело в
заданный участок оперативной памяти и выполнить некоторые действия
по закреплению этого участка за собой.
Шаг 5: Перехватить требуемые прерывания. Заменить адреса в соответствующих
элементах вектора прерываний на адреса своих программ
обработки.
Шаг 6: Передать управление зараженной программе.
Приведем некоторые пояснения к упрощенной схеме инсталлятора
файлового вируса. На шаге 3 инсталлятор, подобно обычному файловому
вирусу, каким-то образом определяет зараженность оперативной
памяти. Эта проверка может выполняться самыми разнообразными способами.
Одним из наиболее распространенных является введение некоторого
нового прерывания или функции существующего прерывания. Инсталлятор
выдает это прерывание, и получаемый ответ, например 5555
в регистре AX, играет роль сигнала "память заражена" и "память еще
не заражена", своеобразный аналог 62 секунд для нерезидентных файловых
вирусов. Второй способ состоит в сканировании памяти и поиске
сигнатуры, характерной для данного вируса. Поиск может начинаться
с определенной, характерной точки, например, с адреса перехватываемого
вирусом прерывания (обычно 21). Могут быть использованы
и другие способы или их комбинация.
Если проверка показала, что память еще не заражена, то на шаге 4
вирус выполняет ее заражение. Как уже указывалось, заражение может
производиться как путем записывания тела вируса на участок свободной
памяти, так и "вписыванием" тела в уже используемый участок. В
первом случае вирус должен обеспечить резервирование этой памяти,
чтобы она не была затерта другими программами. Простейшие вирусы
выполняют это с помощью функций 21-31 или 27 MS DOS. Такие вирусы
видны при просмотре списка резидентных программ утилитами типа
MAP, MEMANAL и т.д. Более сложный способ предполагает манипуляцию
с цепочкой блоков MCB (см. прил.7): вирус сам создает дополнительный
блок MCB для захваченного участка памяти.
После закрепления в оперативной памяти инсталлятор выполняет так
называемый перехват прерываний є обеспечение передачи управления
модулям вируса, обрабатывающим соответствующие прерывания. Это может
делаться "в лоб", т.е. путем использования соответствующих
функций MS DOS или "с черного хода" є нестандартным способом,
обеспечивающим, в общем случае, более высокую степень маскировки.
При любом способе конечный эффект состоит в том, что при возникновении
определенного прерывания вирусу будет передаваться управление.
При этом вирус может содержать дополнительный механизм, обеспечивающий
то, что он будет получать управление всегда первым. Такие
резидентные вирусы будем называть всплывающими. Всплытие помогает
вирусу обходить простейшие программы-сторожа, основанные на
перехвате тех же прерываний, поскольку они будут получать управление
после вируса. Этот способ использует, в частности, вирус RCE1800
(Эдди). Отсюда следует, что анализ списка резидентных программ
и объема памяти, сообщаемого MS DOS, является весьма полезным
диагностическим приемом, применимым как при анализе многих резидентных
файловых вирусов, так и при анализе бутовых вирусов. Существует
целый ряд программ, выдающих список резидентных программ.
Автор рекомендует использовать для этой цели программу RELEASE,
которая являясь резидентной, не только позволяет получить этот
список в любой момент, но дает возможность снять ненужные резидентные
программы. Сведения об объеме оперативной памяти (уст
...Закладка в соц.сетях