На фоне повального нашествия Internet-«червей» представляется весьма уместным рассказать как о механизмах их распространения, так и о способах выявления, предотвращения и удаления заразы.
Исторически сложилось так, что титул первого Internet-«червя» закрепился за так называемым «вирусом Морриса», а некоторые даже присуждают ему звание первого компьютерного вируса вообще. На самом же деле «черви» в изобилии водились в глобальных (и локальных) сетях еще до Морриса, а «заслуга» последнего состоит лишь в том, что допущенные при реализации ошибки привели к его чрезмерной активности и, как следствие, к колоссальному росту сетевого трафика, который межсетевые узлы оказались просто не в состоянии обработать!
Случившийся паралич сети вызвал массовую истерию, сродни сопровождавшей недавнюю атаку на серверы SQL. Тем не менее никаких уроков из случившегося человечество так и не извлекло. Многие из «дыр», обнаруженных еще до «червя» Морриса, остаются незакрытыми до сих пор, не говоря уже о том, что буквально каждый день выявляются новые. В качестве же основного средства лечения предлагают использовать антивирусную программу, однако подавляющее большинство пользователей крайне неохотно и неоперативно обновляют антивирусные базы, в результате беда не заставляет себя ждать.
По данным «Лаборатории Касперского», на сегодняшний день первое место по распространенности занимают почтовые «черви», на их долю приходится 95,6% всех сетевых «червей», а, по последним сведениям «Антивирусной лаборатории Данилова» и «Диалогнаука», за май 2003 г. доля Internet-«червей» составляет 97,7%. В силу указанных обстоятельств именно они и представляют наибольший интерес, поэтому им мы и уделим основное внимание.
МЕХАНИЗМЫ РАСПРОСТРАНЕНИЯ «ЧЕРВЕЙ»
Жизненный цикл любого вируса (и «червя», в частности) начинается с доставки его тела на целевой компьютер. Почтовые «черви», как это и следует из их названия, внедряются в электронную почту и попадают в почтовый ящик жертвы вместе с зараженным письмом. Однако любой программный код сам по себе инертен, т. е. не способен ни на какие самостоятельные действия, и для активизации вируса операционная система должна явным или неявным способом передать ему управление.
С «явным» способом все более или менее ясно: в письме пользователю предлагается запустить вложенную в него программу (порой тщательно замаскированную под звуковой файл или графическое изображение). Если жертва окажется слишком наивной (жадной/доверчивой/глупой), то вирус получает хорошие шансы захватить управление. Оградить себя от неприятного сюрприза очень просто — достаточно не открывать никакие файлы, полученные из сети. Менее жесткая мера — открывать лишь те файлы, которые заведомо не содержат исполняемого кода и/или присланы тем адресатом, кому вы безоговорочно доверяете. По наблюдениям автора, около 99% сетевых «червей» данного типа приходят от совершенно неизвестных жертве лиц либо выдают себя несвойственным «отправителю» стилем письма. Оставшийся 1% приходится на умышленные заражения и сигнализирует о том, что пользователю следует сузить свой круг общения, исключив из него всех потенциально неблагонадежных адресатов.
К сожалению, даже предприняв весь комплекс описанных выше защитных мер, вы не сможете полностью обезопасить себя и свой компьютер, ведь некоторым вирусам управление передается неявно, т. е. без каких-либо действий со стороны пользователя вообще! Ошибки реализации (или попросту говоря «дыры») используемых жертвой программ приводят к тому, что полученные из сети данные компьютер молчаливо интерпретирует как исполняемый код со всеми вытекающими отсюда последствиями. При этом вся «вина» пользователя заключается лишь в том, что он установил на свой компьютер уязвимую операционную систему и вошел в Internet, т. е. не сделал ровным счетом ничего потенциально опасного с общепринятой точки зрения! Найти идеально выполненную операционную систему и программное обеспечение к ней не представляется возможным, поэтому каждый из компьютеров, подключенных к сети, может подвергнуться вирусной атаке, и гарантированно защититься от нее нельзя. Вопреки распространенному мнению, антивирусные программы (даже самые свежие и совершенные) — не самое эффективное средство борьбы с «заразой». И нашумевшая атака на серверы SQL — лучшее тому подтверждение.
Никто, разумеется, не говорит, что антивирусные средства бесполезны, ведь именно благодаря им, в конце концов, все вирусные атаки сходят на нет. Но — задумайтесь! — «отбить» атаку совсем не то же самое, что «предотвратить». Практика показывает: более или менее успешно удается предупредить лишь атаки вирусов с длительным «инкубационным» периодом, т. е. когда промежуток времени между заражением жертвы и началом активных (и, зачастую, крайне деструктивных) действий довольно значителен. Лишь в исключительных случаях специалистам по безопасности удается опередить вирусы и изловить их прежде, чем пострадает хотя бы один пораженный компьютер. Как нетрудно понять, вероятность этого события прямо пропорциональна интенсивности распространения вируса, т. е. до истечения своего инкубационного периода он должен ухитриться заразить компьютер хотя бы одного специалиста по безопасности, которому по косвенным признакам повезет обнаружить «спящего врага». Причем, получив штамм «червя», разработчикам популярных антивирусных программ необходимо не только оперативно изготовить противоядие, но и разослать его всем (или хотя бы части) зараженным пользователям до наступления «часа Х».
С другой стороны, промежуток времени между «официальным» открытием новой «дыры» и моментом появления первых вирусов, использующих ее в своих целях, в подавляющем большинстве случаев очень велик и колеблется от нескольких месяцев до двух-трех лет! Если бы администраторы и пользователи хотя бы пару раз в год удосуживались посещать сервер www.microsoft.com для загрузки новых «заплаток», то с вероятностью, близкой к единице, вирусных атак второго типа (происходящих без участия пользователя) удалось бы избежать. Действительно, квалификация основной массы «вирусописателей» слишком низка, чтобы вести самостоятельный поиск «дыр» в системе. Те же, кто способен сам отыскать такие «дыры», в случае их обнаружения сначала, как правило, оповещают разработчиков программного обеспечения и специалистов по информационной безопасности и лишь затем предают эту информацию гласности. Редкие исключения, если они и случаются, не меняют общей картины, ведь для создания нового вируса требуется значительно больше времени, чем для ликвидации той или иной уязвимости.
Таким образом, непременным условием распространения сетевых «червей» является наличие «дыр» в программном обеспечении жертвы и/или непродуманные действия пользователя.
МЕТОДИКИ ПРОТИВОДЕЙСТВИЯ ВИРУСАМ
Как говорится, «если хочешь быть здоров — закаляйся». Другими словами, чем надеяться на новомодные лекарства, лучше заблаговременно повысить свой иммунитет, не доводя дело до болезни. К сожалению, в компьютерном мире эту поговорку практически никогда не вспоминают, ну а руководствуются ею вообще считанные единицы. Несколько утрируя, можно сказать, что мы имеем дело с синдромом врожденного иммунодефицита. А ведь вирусы день ото дня становятся все коварнее, изощреннее и... опаснее! Рост пропускной способности каналов Internet позволяет злоумышленникам поражать воистину астрономическое число компьютеров за рекордно короткое время. В этой ситуации единственный способ противостоять вирусам — увеличить защищенность своего узла. О том, что именно следует для этого сделать, рассказано ниже.
Резервное копирование. По общему мнению специалистов по информационной безопасности, лишь малая часть всех потерь данных происходит по вине вирусов. Высокая надежность современной вычислительной техники создает обманчивую иллюзию ее стабильной работоспособности, и о необходимости своевременного резервного копирования подавляющее большинство пользователей просто забывают. И это в наш век изобилия резервных накопителей всех видов и емкостей! Что мешает, например, приобрести CR-RW? Мизерная стоимость самого привода, практически бесплатные «болванки» и сумасшедшая скорость записи позволяют производить резервное копирование содержимого жесткого диска хоть каждый день, тратя на это не более 10 мин (вообще-то, копировать весь диск целиком нет никакой надобности, достаточно записать лишь измененные за день файлы). При наличии резервной копии систему можно быстро восстановить после любого сбоя, сводя к минимуму убытки от потери информации.
Недопустимо производить запись поверх прежней копии — нет никаких гарантий, что последние версии файлов уже не заражены (и/или не искажены) вирусом, а раз так, то резервная копия потеряет всякий смысл, ведь она будет содержать те же самые данные, что имеются на жестком диске! По меньшей мере, следует создать две-три резервные копии, сделанные в различные моменты времени. Например, на первый диск записывать информацию каждый день, на другой — с периодичностью в одну-две недели, ну а на третий — не чаще одного раза в месяц. Чем больше у вас будет копий, тем безболезненней окажется «откат» в случае вирусной атаки.
В виду возможности появления вирусов, поддерживающих перезаписываемые диски и уничтожающих содержащиеся на них данные (или, что более сложно, но технически все-таки осуществимо, заражающие файлы непосредственно на CD-RW), при восстановлении информации с резервной копии никогда не следует вставлять диск в пишущий привод — лучше воспользоваться обычным CD-ROM.
Переход на защищенные операционные системы. Масштабы то и дело возникающих вирусных эпидемий не в последнею очередь объясняются тем, что в офисах подавляющего большинства компаний установлена изначально незащищенная Windows 98, поэтому она представляет собой лакомую мишень для вирусов и хакеров. Да, конечно, Windows 2000/XP намного дороже, а ее далеко не очевидные на первый взгляд преимущества сводятся как раз к защищенности — тому самому свойству, на котором многие предпочитают экономить. Действительно, пока гром не грянет, руководители компаний зачастую вообще не задумываются о безопасности. Зато потом, подвергнувшись вирусной (хакерской) атаке, они приводят совершенно фантастические цифры, сообщая о стоимости утерянных данных. Помилуйте! Если хотя бы 1% от заявленной суммы был потрачен на грамотную защиту компьютеров, то оставшиеся 99% сейчас были бы при вас! Необходимость резервного копирования уже никто и не оспаривает, а вот по поводу целесообразности оснащения рабочих станций Windows 2000/XP единого мнения даже среди специалистов по информационной безопасности нет, многие из них считают такую меру неоправданным расточительством. А потому окончательное решение этого вопроса остается за вами.
Ограничение привилегий пользователей до минимума. Операционные системы семейства NT выгодно отличаются от Windows 98/Me: они позволяют пресекать потенциально опасные действия пользователей и серьезно ограничивают полномочия запущенных этими пользователями приложений. В частности, запрет на модификацию исполняемых файлов делает распространение большинства вирусов просто невозможным! Правда, сетевые «черви», заражающие оперативную память, выживут и в NT, но правильная политика разграничения доступа к файлам документов сведет последствия их деструктивных действий к минимуму. К сожалению, многие безалаберно относящиеся к собственной безопасности пользователи постоянно находятся в системе как «администратор», а потом удивляются, почему NT не спасла их от атаки.
И даже те, кто входит в систему с правами «простых пользователей» и без нужды никогда их не повышает, редко задумываются о целесообразности запрета модификации файлов, которые в данный период времени ими не используются. В этой связи следует отметить уязвимость службы Run As, с помощью которой можно запускать программы от имени других пользователей. На первый взгляд никакой угрозы как будто бы нет — все запускаемые таким образом программы требуют явного ввода пароля, и вирусы «добраться» до них как будто не могут. Увы, это не так. Во-первых, даже начинающему программисту ничего не стоит написать программу, отслеживающую появление диалогового окна «запуск программы от имени другого пользователя» для похищения вводимого этим самым пользователем пароля. Во-вторых, коль скоро та или иная программа выполняется, вирус сможет захватить над ней управление, просто эмулируя ввод с мыши и/или клавиатуры! Несмотря на то что пока таких вирусов нет, никогда не позволяйте себе запускать более привилегированные программы из менее привилегированных. Лучше, завершив текущий сеанс работы, снова войдите в систему под соответствующим именем. И — внимание! — работая с правами администратора, ни в коем случае не запускайте программы, которые пользователь мог модифицировать с обычными привилегиями!
Сокращение избыточной функциональности программ. Громоздкость современного программного обеспечения чрезвычайно затрудняет его тестирование и практически не оставляет никаких надежд на выявление всех «дыр» в разумные сроки. Большая часть функциональных возможностей того же Outlook явно избыточна и реально требуется лишь небольшой части пользователей. Вот, например, просмотр писем формата HTML. Спору нет — это удобно. Но необходимо ли? Без таких писем в подавляющем большинстве случаев можно и обойтись, а уж поддержка сценариев в письмах и подавно не нужна (разве что спаммерам банеры прокручивать).
Создание собственного минимально функционального почтового клиента — далеко не такая сложная задача, какой кажется; стоимость разработки ничтожно мала по сравнению с общими расходами, выделяемыми на обеспечение безопасности. Он в действительности настолько прост, что его вполне можно реализовать без «дыр» собственными силами. А отсутствие «дыр» автоматически отсекает запуск вирусов неявным образом.
Единственная серьезная проблема заключается в обработке писем на HTML. Реализация собственного браузера — затея практически нереальная, а использование готовых компонентов Internet Explorer или Netscape Navigator с неотвратимой неизбежностью ведет к наследованию всех «дыр», и ваш почтовый клиент будет защищен ничуть не лучше Outlook Express! Но кто сказал, что почтовый клиент должен содержать полноценный браузер? Поддержки десятка основных тегов для комфортного чтения писем вполне достаточно.
Методики обнаружения. Самый простой (но далеко не самый надежный) метод обнаружения вирусов сводится к приобретению, установке и периодическому запуску одной или нескольких антивирусных программ. Если не лениться и хотя бы эпизодически обновлять антивирусные базы, то (по моим наблюдениям) более 80% всех вирусных атак будут успешно отбиты. Домашним пользователям, у которых на компьютере нет ничего ценного, такая надежность может показаться вполне удовлетворительной, но в отношении корпоративных пользователей это не так! Стоит ли говорить, что способен натворить даже один-единственный своевременно не разоблаченный вирус, пробравшийся в корпоративную сеть? Тем более что компаниям (особенно крупным) приходится сталкиваться не только со «слепыми», но и с целенаправленными атаками, когда вирусы специально написаны для нападения на сеть конкретной компании и потому никакими антивирусными средствами не распознаются (не спасет здесь и эвристический анализ).
Мониторинг изменений файлов. Внедрившись в систему, вирус начинает в ней размножаться, вот тут-то его и можно обнаружить, для чего достаточно лишь периодически контролировать целостность существующих файлов и отслеживать появление новых. Это позволяют делать многочисленные утилиты (например, AdInf от «Диалог Науки» и Disk Inspector от «Лаборатории Касперского»), однако в Windows 98 и Windows 2000/XP для решения поставленной задачи можно обойтись и штатными средствами — достаточно запустить утилиту SFC.EXE. Несмотря на то что хитроумные вирусы могут программу обмануть, степень достоверности результатов проверки весьма высока, и таким образом удается отловить подавляющее большинство вирусов, включая и тех, которые в силу своей новизны еще не обнаруживают AVP и Dr. Web. Разумеется, качество проверки уже упомянутых выше AdInf и Disk Inspector намного выше, и обмануть их практически невозможно (во всяком случае вирусов, способных проделать это, до сих пор нет). Правда, стремясь замаскировать свое присутствие, некоторые вирусы просто удаляют базы с информацией о проверяемых файлах, но эффект от этой «хитрости» получается совершенно обратный — сам факт удаления демаскирует их присутствие!
Стоит отметить, что операционные системы класса NT (к которым принадлежат и Windows 2000/XP) запрещают обычным пользователям модифицировать системные файлы, равно как и вносить потенциально опасные изменения в конфигурацию системы, а потому выжить в такой среде вирусу очень и очень непросто. С некоторой натяжкой можно даже утверждать, что вообще невозможно. Как отмечалось выше, не следует экономить на безопасности, устанавливая на рабочие места не NT, а более дешевую Windows 98/Me.
Контроль за обращениями к файлам. Хорошим средством обнаружения вторжений (как вирусных, так и хакерских) служит щедро разбросанная приманка: файлы, к которым легальные пользователи в силу своих потребностей не обращаются, но которые, с высокой степенью вероятности, будет заражены вирусом или затребованы хакером. В первом случае в роли наживки могут выступить любые исполняемые файлы вообще, а во втором — любые файлы с интригующими именами (например, «номера кредитных карт.doc»).
Как обнаружить сам факт обращения к ним? Операционная система отслеживает дату последнего открытия документа (не путать с датой его создания), узнать ее можно через пункт «Свойства» контекстного меню выбранного файла. Опытные пользователи могут получить ту же самую информацию через популярную оболочку FAR Manager — для отображения полной информации о диске достаточно просто нажать . И если дата неожиданно изменилась, значит, к вам пришла беда. Конечно, опытные хакеры и тщательно продуманные вирусы такую примитивную меру могут обойти, но, как показывает практика, в подавляющем большинстве случаев они об этом забывают.
В самых ответственных случаях рекомендуем воспользоваться свободно распространяемым файловым монитором Марка Русиновича (его можно загрузить с http://www.sysinternals.com). В упакованном виде он занимает чуть более полусотни килобайт и контролирует доступ к диску на уровне дискового драйвера. Ни один существующий вирус не пройдет незамеченным мимо этой замечательной утилиты. К тому же утилита сообщает имя программы, обратившейся к файлу-приманке, и тем самым позволяет точно локализовать источник заразы и отсеять ложные срабатывания (ведь и сам пользователь мог по ошибке обратиться к «подсадному» файлу, к тому же антивирусные сканеры открывают все файлы без разбора).
Эффективность предложенной методики автор готов подтвердить личным опытом, авторитетом и репутацией. Пожалуй, это наилучшее и притом бесплатное решение из всех возможных. (Заметим, что ручного анализа протоколов файлового монитора очень легко избежать, поручив работу компьютеру, а соответствующую программу напишет даже студент.)
Контроль за состоянием системы. Не все вирусы, однако, внедряют свой код в чужие исполняемые файлы. Спрятавшись в дальнем уголке жесткого диска (как правило, это WindowsSystem, содержимое которой никто из пользователей не знает и не проверяет), они изменяют конфигурацию системы так, чтобы управление передавалось им при каждой загрузке (или, на худой конец, эпизодически). Самые «тупые» вирусы прописывают команду своего запуска в «Автозагрузку» (см. «Пуск —> Программы —> Автозагрузка»), а основная масса остальных — в следующую ветвь системного реестра: [HKEY_LOCAL_MACHINESOFTWARE MicrosoftWindowsCurrentVersionRun]. Конечно, существуют и более экзотические способы (наподобие файлов config.sys/autoexec.bat в Windows 98/Me и config.nt/ autoexec.nt в Windows 2000/XP), но они редко находят себе применение.
Богатую информацию несет и количество оперативной памяти, выделенной на момент загрузки системы (получить справку можно, в частности, через «Диспетчер задач»). Просто запомните число (или запишите где-нибудь на бумажке), а затем сверяйте при каждой загрузке системы. И хотя теоретически в систему возможно внедриться без изменения объема выделенной памяти, встречаться с такими вирусами мне до сих пор не доводилось. На всякий случай, запустив тот же «Диспетчер задач» и перейдя ко вкладке «Процессы», в меню «Вид» выберите «Все столбцы» и проставьте галочки напротив всех характеристик, которые вы хотите контролировать (как правило, это вообще все характеристики процесса). Далее аналогично: запомнив начальное состояние каждого запускаемого процесса на заведомо «чистой» машине, при очередных запусках его следует сверять с эталоном. Теперь незаметно проникнуть в вашу систему никто не сможет.
Нетипичная сетевая активность. Часто вирусы (и внедренные хакерами троянцы) выдают себя тем, что проявляют необычную сетевую активность (обращение по нетипичным для данного пользователя сетевым адресам и/или портам, резко возросший трафик или подозрительное время суток). Практически ни один вирус не анализирует учетные записи распространенных почтовых клиентов и, стало быть, самостоятельно определить адрес вашего почтового сервера не может. Как же тогда «черви» ухитряются распространяться? Да очень просто: часть из них пользуется заранее заданными адресами бесплатных серверов SMTP, другие же связываются с получателями писем напрямую, т. е. обращаются непосредственно к их почтовому серверу. И то и другое демаскирует вирус, исключая, конечно, тот случай, когда по иронии судьбы и вирус, и зараженная им жертва используют один и тот же сервер исходящей почты. Учитывая, что корпоративные пользователи, как правило, используют собственный сервер для рассылки почты, вероятностью случайного совпадения адресов можно пренебречь.
Для протоколирования сетевого трафика существует огромное множество разнообразных программ, самая доступная из которых (хотя и не самая лучшая) — netstat, поскольку она входит в штатный пакет поставки ОС Windows 98/Me и Windows 2000/XP. Помимо этого, имеет смысл приобрести любой сканер портов (на худой конец можно воспользоваться все той же netstat) и периодически просматривать все порты своего компьютера — не открылись ли среди них новые. Некоторые сетевые «черви» устанавливают на заражаемые компьютеры компоненты для удаленного администрирования, последние чаще всего работают через протоколы TCP и реже — через UDP. Утилита netstat позволяет отслеживать открытые порты и в тех, и в других.
Анализ полученных из сети файлов. Подавляющее большинство почтовых «червей» распространяет свое тело через вложения (attachment), и, хотя существует принципиальная возможность создания вирусов, целиком умещающихся в заголовке или основном теле письма, на практике с такими вирусами приходится сталкиваться крайне редко, да и живут они все больше в лабораторных условиях. Таким образом, задача выявления почтовых «червей» сводится к анализу корреспонденции, содержащей подозрительные вложения.
Но как узнать, каково действительное назначение файла *.jpg или +*.wav? Четкий ответ на этот вопрос дает лишь дизассемблирование и полная реконструкция всего алгоритма. Разумеется, дизассемблирование — операция необычайно трудоемкая, требующая высокой квалификации администратора, но ведь можно поступить и проще! На помощь приходит утилита DUMPBIN, входящая в штатный комплект поставки любого компилятора Windows. Запуск ее ключами «DUMPDIN/IMPORTS имя файла» позволяет получить полные сведения о всех импортируемых данным файлом динамических библиотеках и функциях API. Что делает каждая из них, можно прочитать в Platform SDK того же компилятора. В частности, многие сетевые «черви» демаскируют себя, импортируя библиотеку WS2_32.DLL, где содержится реализация функций WINSOCKS. Конечно, к этой функции обращаются не только вирусы, но и легальные программы, но в любом случае анализ импорта позволяет установить приблизительную функциональность программы. С другой стороны, отсутствие явного обращения к функциям WINSOCKS еще не гарантирует отсутствия обращения к ним вообще: вирус вполне может вызывать их динамически по ходу своего выполнения, и тогда соответствующих библиотек в списке импорта просто не окажется! Собственно, этого и следовало ожидать: учитывая, что некоторые вирусы — настоящая головоломка даже для опытных профессионалов, надеяться выловить их столь примитивными средствами, по меньшей мере, было бы наивно. К счастью, такие «монстры» в живой природе встречаются крайне редко.
Методики удаления. После установки операционной системы и всех сопутствующих ей приложений, содержимое диска следует скопировать на резервный носитель, и затем — когда будет зафиксирован факт вторжения в систему — все файлы следует восстановить с резервной копии. Главное преимущество указанного способа — его быстрота и отсутствие повышенных требований к квалификации администратора (или, в общем случае, лица, осуществляющего удаление вирусов). Конечно, надо помнить простые правила: а) многие программы, например Outlook Express, сохраняют свои данные в одном из подкаталогов папки Windows, и если почтовую базу не зарезервировать отдельно, то после восстановления системы она просто исчезнет; б) некоторые вирусы внедряются не только в файлы, но и в загрузочные и/или MBR-секторы, и для их удаления одной лишь перезаписи файлов недостаточно; в) вирус способен перехватить системные вызовы и отслеживать попытки замещения исполняемых файлов, имитируя свою перезапись, но не выполняя ее в действительности.
Поэтому более надежен следующий путь: загрузившись с заведомо стерильного компакт-диска (или, в крайнем случае, дискеты), вы удаляете папки Windows (WINNT) и Program Files, а затем с нуля переустанавливаете операционную систему вместе со всеми приложениями. Конечно, это медленно, но... ничего более лучшего предложить, по-видимому, просто невозможно.
ЗАКЛЮЧЕНИЕ
Пренебрежительное отношение к собственной безопасности — бесспорное зло. Ведь пораженная вирусом жертва страдает от него не одна, заражая, пусть и непредумышленно, всех остальных. С другой стороны, паническая боязнь вирусов — зло еще большее. Право же, не стоит лишать себя радости обитания во Всемирной Паутине только потому, что в ней существуют хакеры и вирусы (хакеры — в ругательном смысле этого слова, я ничего не имею против хакеров как таковых).
Крис Касперски — независимый эксперт в области компьютерной безопасности. С ним можно связаться по адресу: kpnc@programme.ru.