«Полезная нагрузка»
«Полезная нагрузка» определяет действия, предпринимаемые вирусом в системе. Она никак не связана с механизмом распространения. Некоторые вирусы всего лишь заражают машину и переходят дальше. Другие могут делать забавные вещи (например, «cookies»), а некоторые причиняют вред (скажем, удаляют таблицу разделов).
Существуют вирусы «со спусковым механизмом», «полезная нагрузка» которых выполняется только при определенных обстоятельствах. Скажем, для вируса Michelangelo таким обстоятельством является определенная дата (день рождения скульптора Микеланджело). В других случаях это может быть определенное число успешных заражений.
Если вникнуть в логику происходящего, для вируса лучше всего именно наличие спускового механизма или отсутствие вредоносного кода как такового. Представим вирус, который при активизации немедленно производит заметные невооруженным глазом действия. Это все равно, что написать на экране «Привет! Я вирус!». Пользователь тут же испугается, схватит ближайшую копию антивирусной программы и уничтожит причину неприятностей. Другими словами, немедленные проявления являются гарантией недолговечности вируса. Гораздо разумнее прибегнуть к редко срабатывающему «спусковому механизму». В этом случае у вируса будет достаточно времени для распространения, пока пользователь не поймет, что его компьютер инфицирован. Самые зловредные вирусы вообще никак не проявляют своего присутствия. В этом случае до момента активизации вируса пользователь не подозревает о заражении компьютера, и вирус спокойно выполняет свою задачу.
Прочие уловки
Создатели вирусов и червей потратили много времени, разрабатывая новые способы работы своих творений. Наиболее неприятной уловкой является «эволюция» вируса. Другими словами, время от времени он меняет свою структуру, чтобы обмануть антивирусные программы. Это явление называется полиморфизмом, и его суть состоит в мутации вируса. Можно даже сделать так, чтобы структура вируса полностью менялась от одного воплощения к другому; однако для подобного трюка нужна разветвленная логическая схема, что неизбежно приведет к увеличению размера вируса. Кроме того, вирус со встроенным компилятором намного проще распознать. Впрочем, лучше не переписывать полностью структуру вируса, а менять его отдельные звенья в соответствии с неким случайным ключом. Представим себе вирус, кодирующийся по алгоритму DES (Data Encryption Standard – стандарт шифрования данных). Для его расшифровки применяется известный исходный ключ, а потом вирус снова зашифровывается, но уже с новым ключом. В результате вид вируса изменится.
Но сам по себе код – это еще не все. Ведь для активизации вируса как минимум должно выполниться его декодирование. А принцип работы антивирусных программ основан на просмотре известных механизмов декодирования, которые применяются в вирусах. Программа сообщает об обнаружении объекта, механизм декодирования которого совпадет с найденным в списке. Что остается делать злым гениям, пишущим вирусы? Можно создать механизм декодирования, также способный к мутациям, или же использовать порядок декодирования, встречающийся в других приложениях. Последний способ создает дополнительные проблемы для антивирусной программы, так как ей приходится отличать фальсифицированный механизм от настоящего.
Этот метод не очень надежен, так как основывается на предположении, что пользователю рано или поздно надоест реагировать на ложные срабатывания антивирусной системы и он ее отключит. А вот первый из упомянутых методов весьма интересен. Рассмотрим следующий порядок действий.
1. Вирус выполняется, используя стандартный механизм декодирования.
2. После декодирования вируса запускается на выполнение зашифрованная часть кода. С этого момента выполняемый код теоретически нераспознаваем антивирусной программой.
3. Затем вирус по случайному механизму конструирует алгоритмы кодирования и декодирования. Этот механизм может представлять собой всего лишь оператор, который выбирает между двумя слегка отличными друг от друга операциями, скомбинированными со случайными числами. В итоге из подобных комбинаций могут получиться очень длинные списки.
4. Вирус зашифровывает свою копию с помощью нового алгоритма, полученного в процессе выполнения шага 3.
5. Вместе с новым кодом вирус получает новый алгоритм расшифровки.
В результате каждый раз используется новый механизм кодирования, что затрудняет распознавание вируса. Однако чтобы действительно спрятать вирус от антивирусной программы, нужно гарантировать, что собственно код, необходимый для выполнения «полезной нагрузки» вируса, будет иметь небольшой объем. Наилучшим сценарием является практически немедленный запуск алгоритма кодирования, генерируемого случайным образом. Небольшая задержка требуется всего лишь для активизации кода, который до этого был зашифрован. В принципе, можно воспользоваться уже имеющимися в операционной системе механизмами кодирования. При этом величина кода вируса уменьшится (соответственно снизится вероятность его распознавания антивирусной программой), но вам придется полагаться на ресурсы операционной системы, которые могут и отсутствовать.
Читать дальше
Конец ознакомительного отрывка
Купить книгу