Защита от хакеров корпоративных сетей
Шрифт:
Первый тип вирусов можно назвать паразитическим. Он распространяется, присоединяясь к файлам таким образом, что они остаются в рабочем состоянии. В системе MS-DOS для этой цели обычно использовались файлы с расширениями. COM и. EXE. В наши дни список доступных для паразитирования типов файлов увеличился. При этом вовсе не обязательно, чтобы файлы были исполняемыми. Например, макровирусы присоединяются к стандартному шаблону normal.dot, который устанавливается по умолчанию вместе с приложением Microsoft Word.
В данном случае механизм распространения включается при запуске инфицированного файла. Соответственно, если вирус присоединяется к редко используемому файлу, это несколько ограничивает возможности его действия.
Вирусы второго типа поражают загрузочный сектор. Они копируют себя в загрузочную область жесткого диска (или дискеты) и запускаются при старте системы. Вирусы этого типа особенно вредоносны, потому что начинают действовать до момента полной загрузки системы, до включения имеющихся антивирусных программ.
В соответствии с логикой загрузочного процесса вирусы, поражающие загрузочный сектор, делятся на две категории. После включения питания начинается самотестирование системы (Power On Self Test, POST), а затем базовая система ввода/вывода (Basic Input/Output System, BIOS) приступает к инициализации, то есть к проверке загрузочного диска на целостность. В зависимости от конфигурации BIOS проверяться может загрузочная дискета, загрузочный компакт-диск и, наконец, загрузочный жесткий диск.
Жесткий диск является загрузочным при наличии главной загрузочной записи (master boot record, MBR), которая представляет собой небольшой код, расположенный в самом начале жесткого диска (первый сектор первого цилиндра первого диска). Этот код обеспечивает распознавание записей в таблице разделов, описывающей размещение и размер логических дисков в рамках одного устройства. Код главной загрузочной записи ищет раздел, помеченный как загрузочный, и передает управление коду, расположенному в начале раздела (загрузочному сектору). А теперь представим, что произойдет при наличии в этом секторе вируса.
У вируса есть две возможности перехватить управление. Во-первых, он может располагаться в главной загрузочной записи, что даст ему возможность в любом случае контролировать ситуацию (при этом вирус будет читаться и загружаться через таблицу разделов). Во-вторых, он может находиться в загрузочном секторе раздела (предпочтительно активном, потому что в противном случае вирус просто не будет активирован). Обычно вирусы второго типа меняют местоположение загрузочной записи и вставляют внутрь нее свой код. При загрузке системы они активируются, выполняют предписанные действия (модифицируют вызов BIOS, изменяют данные и т. п.), а затем передают управление перемещенному ими коду (ведь только они знают, где он теперь находится).
Возникает закономерный вопрос: а что происходит, если вирус инфицирует одновременно главную загрузочную запись и загрузочный сектор, а возможно, распространяет свое влияние и на файлы? Такая ситуация называется множественным заражением.
Но почему это имеет такое значение? Независимо от того, инфицируется ли файл, загрузочный сектор или главная загрузочная запись, как только вредоносный код будет выполнен, вирус сделал свое дело, не так ли? Это верно, но только отчасти. Чем раньше вирус овладевает загрузочным процессом, тем больше его шанс выжить. В мире компьютеров жизнь – это всего лишь наборы фрагментов кода. Запускаемый раньше других код влияет на вид системы для остального программного обеспечения. Поясним это с помощью аналогии, понятной каждому. Представьте себе матрицу: окружающий мир управляется чем-то, расположенным в высшем слое реальности. Соответственно, это что-то определяет, как мир будет выглядеть для нас. Вирус, проникнув в систему,
«Полезная нагрузка»
«Полезная нагрузка» определяет действия, предпринимаемые вирусом в системе. Она никак не связана с механизмом распространения. Некоторые вирусы всего лишь заражают машину и переходят дальше. Другие могут делать забавные вещи (например, «cookies»), а некоторые причиняют вред (скажем, удаляют таблицу разделов).
Существуют вирусы «со спусковым механизмом», «полезная нагрузка» которых выполняется только при определенных обстоятельствах. Скажем, для вируса Michelangelo таким обстоятельством является определенная дата (день рождения скульптора Микеланджело). В других случаях это может быть определенное число успешных заражений.
Если вникнуть в логику происходящего, для вируса лучше всего именно наличие спускового механизма или отсутствие вредоносного кода как такового. Представим вирус, который при активизации немедленно производит заметные невооруженным глазом действия. Это все равно, что написать на экране «Привет! Я вирус!». Пользователь тут же испугается, схватит ближайшую копию антивирусной программы и уничтожит причину неприятностей. Другими словами, немедленные проявления являются гарантией недолговечности вируса. Гораздо разумнее прибегнуть к редко срабатывающему «спусковому механизму». В этом случае у вируса будет достаточно времени для распространения, пока пользователь не поймет, что его компьютер инфицирован. Самые зловредные вирусы вообще никак не проявляют своего присутствия. В этом случае до момента активизации вируса пользователь не подозревает о заражении компьютера, и вирус спокойно выполняет свою задачу.
Прочие уловки
Создатели вирусов и червей потратили много времени, разрабатывая новые способы работы своих творений. Наиболее неприятной уловкой является «эволюция» вируса. Другими словами, время от времени он меняет свою структуру, чтобы обмануть антивирусные программы. Это явление называется полиморфизмом, и его суть состоит в мутации вируса. Можно даже сделать так, чтобы структура вируса полностью менялась от одного воплощения к другому; однако для подобного трюка нужна разветвленная логическая схема, что неизбежно приведет к увеличению размера вируса. Кроме того, вирус со встроенным компилятором намного проще распознать. Впрочем, лучше не переписывать полностью структуру вируса, а менять его отдельные звенья в соответствии с неким случайным ключом. Представим себе вирус, кодирующийся по алгоритму DES (Data Encryption Standard – стандарт шифрования данных). Для его расшифровки применяется известный исходный ключ, а потом вирус снова зашифровывается, но уже с новым ключом. В результате вид вируса изменится.
Но сам по себе код – это еще не все. Ведь для активизации вируса как минимум должно выполниться его декодирование. А принцип работы антивирусных программ основан на просмотре известных механизмов декодирования, которые применяются в вирусах. Программа сообщает об обнаружении объекта, механизм декодирования которого совпадет с найденным в списке. Что остается делать злым гениям, пишущим вирусы? Можно создать механизм декодирования, также способный к мутациям, или же использовать порядок декодирования, встречающийся в других приложениях. Последний способ создает дополнительные проблемы для антивирусной программы, так как ей приходится отличать фальсифицированный механизм от настоящего.