Вирус и Пингвин

Xakep, номер #043, стр. 043-058-3


Эти адреса можно взять из структуры Elf32_Phdr, а для самих адресов пользоваться

Elf32_Addr. Далее изменение заголовка программы: модифицируются размер сегмента

кода в файле p_filesz и в памяти p_memsz суммированием с размером вируса

VIRUS_SIZE. Далее в цикле двигаем смещение p_offset до тех пор, пока оно не

станет нужного размера. Модификация заголовка секций Elf32_Shdr состоит в

приведении смещения этого заголовка e_offset, для этого к нему надо прибавить

VIRUS_SIZE. Последнее делать не обязательно, но желательно, так как иначе

readelf и strip не согласятся с зараженной программой.

Прежде чем заражать программу, вирусу следует убедиться, что она не была

заражена ранее. Представь себе многократно зараженный bash. При вызове любого

скрипта каждая копия вируса будет заражать новые файлы, и производительность

системы заметно упадет. Самый легкий способ для обнаружения уже зараженных

программ - поставить какую-нибудь метку, как это проделывал покойный Jerusalem,

или использовать код вируса в качестве метки. Но такой вирус просто обнаружить,

поэтому авторы вирусов делают свои произведения полиморфными.

Полиморфный - это вирус, состоящий из двух частей: дешифратора и рабочей части.

Часто используют простые шифровальные алгоритмы, так как они быстрее - подойдет

и простой XOR с именем файла (или другим паролем). Соответственно, и дешифратор

в таком вирусе - полиморфный, так как в теле хорошего вируса не должно

присутствовать ни одной постоянной последовательности байтов.

Очевидно, что нет шифра, который сам себя расшифровывал бы. Но производители

процессоров облегчили эту задачу, введя команды, которые не влияют на ход

исполнения программы, - nop, xor AX 0, mov AX AX и прочие. Если эти команды

разбрасывать по дешифратору случайным образом, то в нем не останется постоянных

последовательностей. В качестве же метки, например, можно использовать имя

файла, шифрованное строкой пробелов. Механизм, которым вирус проверяет файл,

можно использовать для построения антивируса, но это не сильно беспокоит

вирусмейкеров - антивирус можно написать всегда, есть даже такая теорема,

поэтому зачем париться? Если вирус будет просто модифицировать файлы, то эта

подлянка ничего не даст :). В любом дистрибутиве Linux присутствуют средства

борьбы с таким произволом. Во-первых, естественно, это разграничение прав

доступа, ядро в любой Unix-системе не даст вирусу изменять файлы, к которым у

него нет доступа по записи. Во-вторых, есть такие вещи, как rpm, syslog,

logwatch, так и прочие шпионы и мониторы контрольных сумм файлов. И опять-таки

в Linux'е большинство программ устанавливается через rpm, так как это удобно

абсолютно всем, кроме создающим подлянки в лице вирусов. Достаточно набрать

# /bin/nice -n 19 rpm --verify --all,

таким образом, можно увидеть, какие программы были изменены. В-третьих,

грамотные пользователи проводят регулярный backup системы. Надеюсь, ты не

исключение? :) Со всем этим действительно сложно что-либо поделать. Правда, если

Назад на стр. 043-058-2  Содержание  Вперед на стр. 043-058-4