Записки исследователя компьютерных вирусов
Шрифт:
ВИРУСЫ В UNIX, ИЛИ ГИБЕЛЬ ТИТАНИКА II,
из которой читатель узнает, что в UNIX-системах вирусы не только живут, но даже очень бурно размножаются, пожирая скрипты и демонстрируя с десяток различных способов внедрения Belf/coff/a.out файлы
Локальные вирусы образуют многочисленную и весьма устойчивую популяцию, захватившую практически все стратегические уровни – от старушки MS-DOS, дожившей до наших дней разве что в виде эмуляторов (да и то больше по недоразумению, чем по потребности), до современных операционных систем, базирующихся на последних клонах Windows NT и UNIX.
И хотя правильная политика разграничения доступа сводит активность вирусов к разумному минимуму, хитрый вирус всегда найдет чем поживиться, и локальные очаги
Вирусов, уверенно функционирующих под UNIX и NT, пока немного, но с каждым годом их количество растет, причем чем дальше – тем стремительнее. Действительно, сначала идея приходит в голову кому-то одному – высококвалифицированному и опытному программисту, сочетающему в себе талант разработчика с кучей свободного времени (что встречается, прямо-таки скажем, нечасто) и знающему «задний двор» операционной системы как свои пять пальцев. Затем, по мере размножения вируса, его вылавливают десятки программистов с квалификацией пониже и «потрошат» ключевые алгоритмы дизассемблером, окультуривая ассемблерные листинги разъясняющими комментариями, доступными даже начинающим, а иногда и переводя их на языки высокого уровня… Для особо тупых создаются конструкторы вирусов, полностью автоматизирующие процесс разработки и низводящие свободный полет творческой мысли до простого тыканья мышью куда попало.
Даже поверхностное исследование показывает, что вирусы далеко не исчерпали потенциал техники инфицирования и множество прогрессивных методов внедрения в файл все еще остаются незадействованными и бесхозно пылятся на полке. Прежде всего это относится к UNIX-вирусам, только-только вышедшим из стадии детского творчества, но уже активно осваивающим большой мир. Если верить прогнозам, в ближайшее время произойдет настоящий демографический взрыв, увеличивающий количество UNIX-вирусов в десятки раз. Поэтому автор не только описывает алгоритмы, позаимствованные из живых вирусов, выловленных в дикой природе, но и раскрывает технологии завтрашних дней, полученные из экспериментальных вирусов, искусственно выращенных в лабораторных условиях. Никогда они не выйдут на свободу, если только идея их создания не придет в голову кому-нибудь другому (а в том, что она придет, можно не сомневаться).
Поскольку книга ориентирована преимущественно на людей творческих и думающих, готовые рецепты приготовления вирусов здесь и не ночевали. Вторым Хижняком автор становиться не собирается и ориентируется преимущественно на методики внедрения в файл, а не на конкретные программные реализации.
Здесь вы не найдете ни технологий полиморфизма, ни способов захвата RING0 с пользовательского уровня, ни антиотладочных или stealth-приемов. Каждая из этих тем заслуживает отдельного разговора и отдельной книги. Может быть, как-нибудь в другой раз…
Глава 1Борьба с windows-вирусами – опыт контртеррористических операций,из которой читатель узнает, чем зараженный файл отличается от незараженного
Не рой яму другому, чтобы он не использовал ее как окоп!
Солдатская мудростьЧто нам потребуется?
Анализ вирусного кода требует обширных знаний из различных областей программирования, а также специализированного инструментария, без которого исследовательская работа рискует превратиться в орудие средневековой пытки. По этому поводу вспоминается один анекдот: «Наташа, вас по точке схождения двух прямых веслом не били? Ну тогда вы нас навряд ли поймете». Все это отпугивает новичков, порой даже и не пытающихся взять в руки дизассемблерный меч, полагая, что борьба с вирусами слишком сложна для них. Однако это предположение неверно. Бесспорно, наивно надеяться на то, что искусству дизассемблирования можно научиться за одну ночь, но вот пары недель упорного труда для достижения поставленной цели должно оказаться достаточно.
Знание ассемблера – древнейшего языка программирования – обязательно. И одних лишь учебников в стиле «Assembler» Юрова и «Программируем на языке ассемблера IBM PC» Рудакова для его освоения катастрофически недостаточно, поскольку всякий язык познается лишь при общении «в живую». Сходите на любой системно-ориентированный сайт (например, www.wasm.ru) и попытайтесь ухватить суть ассемблера извне, а не изнутри. На форумах, где дикие люди произносят непонятные слова, ругаются матом и обсуждают репродуктивные свойства вирусов, витает особый системный дух, делающий все сложное таким простым и понятым.
В конечном счете ассемблер – это всего лишь язык, причем очень и очень простой. Некоторые даже сравнивают его с эсперанто – десяток команд, и вы уже можете сносно говорить. Единственная сложность состоит в том, что вирусы, в отличие от нормальных программ, содержат множество ассемблерных извращений, смысл которых понятен только посвященным. Для непосвященных же это – интеллектуальный вызов! Это увлекательные логические (и психологические!) головоломки; это бессонные ночи, горы распечаток, яркие озарения и ни с чем не сравнимые радости найденных вами решений! Хотя, если говорить честно… все уже украдено до нас, тьфу, все головоломки давным-давно разгаданы, а задачки – решены. Ресурсы глобальной сети к вашим услугам! Посетите сайт удивительного человека и исследователя программ Марка Русиновича –а также отыщите его книгу «Внутреннее устройство Windows 2000». Еще вам пригодится знаменитый Interrupt List Ральфа Брауна – хорошо структурированный справочник по портам, ячейкам памяти и прерываниям (включая недокументированные). Наличие последних версий Platform SDK и DDK от Microsoft и Basic Architecture/Instruction Set Reference/System Programming Guide от Intel предполагается по умолчанию. Русские переводы технической документации, заполонившие книжные магазины, годятся разве что для студентов, работающих над очередным рефератом, который после написания идет в /dev/null (т. е. в архив на полку). Для реальной же работы они непригодны.
Из инструментария вам прежде всего понадобится хороший отладчик и дизассемблер. Конечно, свой выбор каждый волен делать самостоятельно, но ничего лучше soft-ice от NuMega (www.numega.com) и IDA PROот Ильфака Гуильфанова (www.idapro.com) до сих пор не придумано. Оба этих продукта относятся к классу тяжелой артиллерии и по сложности своего управления ничуть не уступают таким софтверным монстрам, как, например, Photoshop или CorelDRAW! Равно как изучение интерфейса Photoshop'a не заменяет собой освоение техники рисования, так и искусство владения отладчиком/дизассемблером не сводится к чтению штатной документации. Ищите в магазинах «Отладка Windows-приложений» Джона Роббинса, «Отладчик soft-ice» Романа Айрапетяна, «Образ мышления – дизассемблер IDA» Криса Касперски и «Фундаментальные основы хакерства – искусство дизассемблирования» его же.
Источники угрозы
По данным сайта VX.NETLUX.ORG на начало сентября 2003 года, рейтинг «популярности» вирусов и троянских коней выглядел так:
– I-Worm.Sobig.f
– Worm.Win32.Lovesan
– Worm.Win32.Welchia
– I-Worm.Sobig.a
– Worm.Win32.Ladex
– Win32. Paritй
– I-Worm.FireBurn
– Trojan.Win32.Filecoder
– I-Worm.Mimail
– I-Worm.Klez.a-h
– 33.525
– Worm.P2P.Harex.a
– I-Worm.Tanatos.a
– TrojanProxy.Win32.Webber
– MBA. First
– AJ family
– Worm.P2P.Tanked
– Andrey.932
– Worm.Win32.0pasoft
– Worm.Win32.Autorooter
Все двадцать вирусов из двадцати «сильнейших» – чрезвычайно примитивные и неспособные к качественной мимикрии твари, легко обнаруживемые даже при поверхностном анализе исследуемых файлов по методикам, описанным ниже.
Критическая ошибка в svchost.exe
Если, работая под Windows 2000/Windows XP, вы поймаете сообщение о критической ошибке приложения в модуле SVCHOST.EXE и эта критическая ошибка с завидной регулярностью будет повторяться вновь и вновь, – не торопитесь переустанавливать систему, не несите ваш компьютер в ремонт! Источник ошибки сидит отнюдь не в нем, а приходит к вам по сети своим шагом и имя ему – DCOM RPCbug (рис. 1.1).