Вирусы в UNIX, или Гибель Титаника II


На правах врезки "основные признаки вирусов" - часть 2


 

Рисунок 9 0x001 фрагмент файла, зараженного вирусом VirTool.Linux.Mmap.443. В HEX-дампе легко обнаруживается строка "ELF", используемая вирусом для поиска жертв "своего" типа

Вирус Linux.Winter.343 (также известный под именем Lotek) по этой методике обнаружить не удается, поскольку он использует специальное математическое преобразование, зашифровывая строку "¦ELF" на лету:

 

.text:08048473             mov    eax, 0B9B3BA81h      ; -"ELF" (минус "ELF")

.text:08048478             add    eax, [ebx]           ; первые четыре байта жертвы

.text:0804847A             jnz    short loc_804846E    ; à это

не ELF

Листинг 13 фрагмент вируса Lotek, тщательно скрывающего свой интерес к ELF-файлам

Непосредственное значение B9B3BA81h, соответствующее текстовой строке 'Б¦¦¦' (в приведенном выше листинге оно выделено жирным шрифтом), представляет собой не что иное, как строку "¦ELF", преобразованную в 32-разрядную константу и умноженную на минус единицу. Складывая полученное значение с четырьмя первыми байтами жертвы, вирус получает ноль, если строки равны, и ненулевое значение в противном случае.

Как вариант, вирус может дополнять эталонную строку "¦ELF" до единицы, и тогда в его теле будет присутствовать последовательность 80 BA B3 B9. Реже встречаются циклические сдвиги на одну, две, три… и семь позиций в различные стороны, неполные проверки (т. е. проверки на совпадение двух или трех байт) и некоторые другие операции – всех не перечислишь!

Более уязвимым с точки зрения скрытности является механизм реализации системных вызовов. Вирус не может позволить себе тащить за собой всю библиотеку LIBC, прилинкованную к нему статической компоновкой, поскольку существование подобного монстра трудно оставить незаметным. Существует несколько способов решения этой проблемы и наиболее популярный из них сводится к использованию native?API операционной системы. Поскольку последний является прерогативой особенностей реализации данной конкретной системы, создатели UNIX де-факто отказались от многочисленных попыток его стандартизации. В частности, в System V (и ее многочисленных клонах) обращение к системным функциям происходит через дальний call по адресу 0007:00000000, а в Linux это осуществляется через служебное прерывание INT 80h (перечень номеров системных команд можно найти в файле /usr/include/asm/unistd.h). Таким образом, использование native?API существенно ограничивает ареал обитания вируса, делая его непереносимым.




- Начало -  - Назад -  - Вперед -