Крис Касперски
Эксплоиты, демонстрирующие наличие дыры (proof-of-concept), обычно
распространяются в исходных текстах, но основной функционал заключен в
shell-коде, анализ которого представляет весьма нетривиальную задачу, требующую
инженерного склада ума, развитой интуиции, обширных знаний и… знания
специальных приемов дизассемблирования.
Сообщения о дырах появляются постоянно. Стоит только заглянуть на www.securityfocus.com и… ужаснуться.
Каждый день приносит по 10-20 новых дыр, затрагивающих практически весь спектр
аппаратно-программного обеспечения. Вы до сих пор пользуетесь FireFox, считая
его безопасным? Да как бы не так! За свое недолгое время существования он успел
обрасти полусотней дыр, в том числе и критических. Ладно, оставим FireFox в
покое и возьмем бразузер Opera – почти два десятка ошибок (из которых 17
зарегистрировано на одном лишь www.securityfocus.com)
быстро прочищают мозги от рекламной шелухи, позиционирующей Opera не только как
самый быстрый, но и по-настоящему безопасный браузер. Уязвимости встречаются
даже в текстовых браузуерах наподобие Lynx. Про Internet Explorer лучше вообще
не вспоминать! Стоит ли после этого удивляться, что черви размножаются со
скоростью лесного пожара и регулярно кладут целые сегменты Сети, если не весь
Интернет!
Программное обеспечение ненадежно.
Предоставленное самому себе, без ухода и надзора администратора оно быстро
становится жертвой хакерских атак, превращаясь в рассадник вирусов и червей.
Если уязвимость затрагивает те компоненты системы, без которых можно и обойтись
(например, Message Queuing или RPC DCOM), их можно отключить или оградить
брандмауэром. В противном случае, необходимо установить заплатку от «родного»
производителя или сторонних поставщиков. Проблема в том, что официальные
обновления зачастую выпускаются лишь через несколько месяцев после официального
же признания дыры. А сколько дыр так и остаются «непризнанными»?
Производителей программного обеспечения можно
понять: ведь прежде, чем признавать дыру дырой, необходимо убедиться, что это
именно дыра, а вовсе не «авторское видение функциональности» и добиться
устойчивого воспроизведения сбоя. У многих компаний существует политика
замалчивания дыр и уязвимость либо молча устраняется с выходом очередной версии
продукта (кумулятивного пакета обновления), либо не исправляется вообще! Яркий
пример тому – уязвимость «MS IE (mshtml.dll) OBJECT tag vulnerability»,
обнаруженная 23 апреля 2006 (см. /pipermail/full-disclosure/2006-April/045422.html),
и все еще не признанная Microsoft.
Чтобы администратор мог спать спокойно и не
дергаться каждые пять минут, пытаясь обнаружить в логах брандмауэра «что-то
необычное», первым делом необходимо выяснить – действительно ли вверенная ему
система уязвима? Далеко не всем сообщениям о дырах можно верить. По
общепринятой практике, первооткрыватель дыры должен подтвердить свои слова
программой, демонстрирующей наличие уязвимости, но не совершающей ничего
деструктивного. В зарубежной литературе она называется exploit proof-of-concept.
Часто к эксплоиту прилагается перечень
тестируемых (tested) и уязвимых (affected) платформ и все, что необходимо
сделать, – это запустить эксплоит на своей системе и посмотреть, справится ли
он с ней или нет. Естественно, атаковать «живой» сервер или основную рабочую
станцию может только самоубийца (или очень безответственный человек) и все
потенциально опасные эксперименты следует выполнять на «копии» сервера/рабочей станции,
специально предназначенной для тестовых целей. Под VMWare и другими эмуляторами
подобного типа эксплоиты лучше не запускать. Во-первых, ряд вредоносных эксплоитов
распознает наличие виртуальных машин и отказывается работать. Во-вторых,
вырваться из застенок виртуальной машины вполне реально (см. статью «Побег
из-под VMWare», которую можно скачать с ftp://nezumi.org.ru/pub/vm-escape.zip).
Отрицательный результат сам по себе еще ничего не
доказывает. Даже если атака не удалась, у нас нет никаких оснований считать,
что система находится в безопасности. И это не паранойя, а реальный факт, с
которым следует считаться. Возможно, это просто эксплоит такой кривой, но стоит
его слегка подправить, как список поражаемых систем заметно возрастет (тем
более что большинство эксплоитов закладывается на фиксированные адреса,
варьирующие от версии к версии, поэтому эксплоит, разработанный для английской
версии Windows 2000, может не работать в русской и наоборот).
Эксплоиты обычно запускают для удовлетворения
чувства собственного любопытства. Никакой жизненной необходимости в этом нет.
Просто интересно и ничего более. Но изучить код эксплоита, чтобы знать, что вы
вообще запускаете, попутно устраняя ошибки, допущенные его разработчиками и
адоптируя shell-код к своей системе, корректируя фиксированные адреса при
необходимости, никогда не помешает.