Касперски Крис
Шрифт:
И вот тут-то и начинается самое интересное. Разберем два варианта: использование готовой таблицы импорта и внедрение своей. На первый взгляд кажется, что отследить «левые» обращения к импорту жертвы просто нереально, так как они ничем не отличаются от «нормальных». Теоретически. Практически же все не так уж и безнадежно. Большинство сред разработки компилирует программы с инкрементной линковкой и вместо непосредственного вызова всякой импортируемой функции, вызывает «переходник» к ней. Таким образом, каждая импортируемая функция вызывается лишь однажды и IDA генерирует лишь одну перекрестную ссылку. При заражении файла картина меняется, и к API-функциям, используемым вирусом, теперь ведут две и более перекрестные ссылки. Это – вернейший признак вирусного заражения! Вернее и быть не может (листинги 1.8 и 1.9)!
Листинг 1.8. «Заглушка», представляющая собой переходник к импортируемой функции и оттягивающая все перекрестные ссылки на себя
Листинг 1.9. Таблица импорта исследуемого приложения: наличие «паразитной» ссылки на CreateFileA указывает на факт вирусного заражения
А что, если вирус захочет создать собственную секцию импорта или как вариант – попытается расширить уже существующую? Ну, две секции импорта для операционных систем семейства Windows – это слишком! Хотя… Почему, собственно, нет? Вирус создает еще одну секцию импорта, дописывая ее в конец файла, копирует туда содержимое оригинальной таблицы импорта, добавляет недостающие API-функции и затем направляет поле Import Table на «свою» таблицу импорта. По факту загрузки файла операционной системой вирус проделывает обратную операцию, перетягивая таблицу импорта «назад». Необходимость последней операции объясняется тем, что система находит таблицу импорта по содержимому поля Import Table, а непосредственно сам исполняемый файл работает с ней по фиксированным адресам.
ВНИМАНИЕ
Наличие двух таблиц импорта в файле – верный признак его заражения!
Расширение уже существующей таблицы импорта менее заметно, но при наличии опыта работы с РЕ-файлами его все-таки можно разоблачить. Так, большинство линкеров упорядочивают импортируемые функции по алфавиту, и функции, дописанные вирусом в конец таблицы импорта, сразу же обращают на себя внимание. Даже если импорт и не отсортирован, повышенная концентрация характерных для вируса API-функций не останется незамеченной.
ПРИМЕЧАНИЕ
Перечисление имен всех импортируемых функций обычно идет сплошным потоком от первой до последней используемой DLL, причем библиотека KERNEL32.DLL (которая вирусу и нужна!) оказывается в конце списка достаточно редко. Вирусу ничего не остается, как дописывать импорт из KERNEL32.DLL в хвост другой библиотеки, в результате чего ссылка на модуль KERNEL32.DLL в таблице импорта зараженного файла присутствует дважды!
…Вот мы и рассмотрели основные способы выявления зараженных файлов и теперь можем смело приступать к расширению и углублению полученных знаний и навыков. Чем больше вирусов пройдет через ваши руки, – тем легче будет справиться с каждым из них. В конце концов, не так страшны вирусы, как люди…
Глава 2Вирусы в Unix, или гибель титаника IIиз которой читатель узнает, что в UNIX-системах вирусы не только живут, но даже очень бурно размножаются, пожирая скрипты и демонстрируя с десяток различных способов внедрения в elf/coff/a.out файлы
…ночью 14 апреля 1912 года принадлежавший Британии непотопляемый океанский лайнер «Титаник» столкнулся с айсбергом и утонул, унеся с собой более пятнадцати сотен из двух тысяч двухсот пассажиров… Поскольку «Титаник» был непотопляем, на нем не хватило спасательных шлюпок…
Джозеф Хеллер. «Вообрази себе картину»…считается, что в UNIX-системах вирусы не живут – они там дохнут. Отчасти это действительно так, однако не стоит путать принципиальную невозможность создания вирусов с их отсутствием как таковых. В действительности же UNIX-вирусы существуют, и на начало 2004 года их популяция насчитывает более двух десятков. Немного? Не торопитесь с выводами. «Дефицит» вирусов носит субъективный, а не объективный характер. Просто в силу меньшей распространенности UNIX-подобных операционных систем и специфики их направленности в юниксоидном мире практически не встречается даунов и вандалов. Степень защищенности операционной системы тут ни при чем. Надеяться, что UNIX сможет справиться с вирусами и сама несколько наивно, и, чтобы не разделить судьбу «Титаника», держите защитные средства всегда под рукой, тщательно проверяя каждый запускаемый файл на предмет наличия заразы. О том, как это сделать, и рассказывает следующая глава.
От древнего мира до наших дней
Исторически сложилось так, что первым нашумевшим вирусом стал Червь Морриса, запущенный им в Сеть 2 ноября 1988 года и поражающий компьютеры, оснащенные 4 BSD UNIX. Задолго до этого, в ноябре 1983 года, доктор Фредерик Коэн (Dr. Frederick Cohen) доказал возможность существования саморазмножающихся программ в защищенных операционных системах, продемонстрировав несколько практических реализаций для компьютеров типа VAX, управляемых операционной системой UNIX. Считается, что именно он впервые употребил термин «вирус».
На самом деле между этими двумя событиями нет ничего общего. Вирус Морриса распространялся через дыры в стандартном программном обеспечении (которые, кстати говоря, долгое время оставались незаткнутыми), в то время как Коэн рассматривал проблему саморазмножающихся программ в идеализированной операционной системе без каких-либо дефектов в системе безопасности вообще. Наличие дыр просто увеличило масштабы эпидемии и сделало размножение вируса практически неконтролируемым.
А теперь перенесемся в наши дни. Популярность UNIX-подобных систем стремительно растет, и интерес к ним со стороны вирусописателей все увеличивается. Квалификация же системных администраторов (пользователей персональных компьютеров и рабочих станций), напротив, неуклонно падает. Все это создает благоприятную среду для воспроизводства и размножения вирусов, и процесс их «производства» в любой момент может принять лавинообразный характер, – стоит только соответствующим технологиям попасть в массы. Готово ли UNIX-сообщество противостоять этому? Нет! Судя по духу, витающему в телеконференциях, и общему настроению администраторов, UNIX считается непотопляемой системой и вирусная угроза воспринимается крайне скептически.