Автор: (c)Крис Касперски ака мыщъх
Броня крепка и кони наши быстры! Антивирусы, в смысле. Да где же мы быстрые антивирусы видели?! Они же тормозят как... Ну, прямо как танки! И ни хвоста не ловят! А малварь идет косяками и если ее не прищемить, она сожрет все данные и даже ни разу не подавится. Персональные брандмауэры отдыхают, тихо куря в сторонке. До сих пор реально действующие защитные комплексы были доступны лишь крупным провайдерам, теперь же они приходят в массы!
Люди верят в антивирусы, и хотя антивирусы им не очень-то помогают, они уже давно стали непременным атрибутом безопасности. Даже со старыми базами месячной давности. Антивирусная индустрия, изначально ориентированная на отлов вирусов, разрабатывающихся месяцами и внедряющих свою, возможно измененную копию, в исполняемые файлы, распространяемые через дискеты, BBS или первобытные компьютерные сети типа FIDO, оказалась тупиковой ветвью эволюции, паразитирующей на вирусах и обреченной на вымирание, агонию которой мы уже наблюдаем.
Вирусы изменились! Точнее - исчезли, уступив место компьютерным червям, появляющимся чуть ли не каждый день, написанных на С/DELPHI/Visual Basic'е, ни в какие файлы не внедряющиеся и зачастую обитающих исключительно в оперативной памяти. Руткиты и почтовые троянские кони - это для детишек. Нормальная мальварь похожа на крылатую ракету. Быструю, стремительную, накрывающую цель точечным ударом и самоуничтожающуюся в случае неудачной атаки. Действительно - какой смысл торчать на машине, если пароли вместе с электронными деньгами уже ушли в неизвестном направлении и червь может смело делать себе харакири, благо пока все дыры не заткнуты, он, в случае необходимости, будет приходить вновь и вновь.
Антивирусные компании испытывают серьезные проблемы с поиском образцов свежей малвари, покупая ее за нехилые деньги у того же VirusTotal'а или Norman'а (ой, что я такое говорю?! Это же секретная информация!). Наглядный тому пример - Rustock.C. Когда одни антивирусные компании (имеющие связь с миром андеграунда) уже выпустили лекарство, другие (такой связи, очевидно, не имеющие) - лихорадочно пытались заполучить хотя бы один рабочий образец. А смысл? По данным компаний, владеющих распределенными сенсорными сетями, эпидемия рустока завершилась еще до выпуска лекарства в свет (по другим данным - спустя несколько дней после его выхода). Русток сделал свое дело, подняв бот-нет, прокачавший через себя нехилый объем хакерского трафика, после чего осел в частных коллекциях, ну и в антивирусных базах. О! Как круто ловить вирус, которого можно встретить разве что на http://www.offensivecomputing.net/, да и то после предварительной регистрации.
Новое время требует новых решений. Пионерами борьбы с червями (и зловещими хакерами) стали системы обнаружения вторжений, они же Intruder Detection System или, сокращенно, IDS. В отличие от антивирусов и pro-активных механизмов, работающих с файлами и хачащих операционную систему, так что она постоянно сваливается в голубой экран смерти, IDS поступает совсем не так. IDS садится на интерфейс, прогоняя через себя весь входящий/исходящий сетевой трафик и через специальную базу "правил" (фактически, тех же самых сигнатур), ловит подозрительные пакеты или детектит специфичную сетевую активность, поднимая сигнал тревоги. Естественно, сигнатуры необходимо обновлять, иначе IDS ни хвоста не сможет распознать. А где их брать? Сигнатуры, в смысле?!
Пополнение сигнатур осуществляется из двух основных источников. Первый - это honey-pot'ы - "горшки с медом" или "капканы" для червей, реализованные на базе умышленно незащищенных компьютеров (виртуальных машин) с кучей дыр, куда малварь устремляется мощными косяками, возбуждая специально сконструированную систему сенсоров, тут же "выцарапывающих" червей из TCP/IP потока и забрасывающих их в сигнатурную базу, в результате чего остальные узлы, оснащенные IDS, автоматически распознают малварь и поднимают администратора по тревоге.
Второй источник - ручной анализ свежих дыр с ручным же созданием регулярных выражений, описывающих практически все возможные комбинации зловредного кода, благодаря чему малварь еще не написана, а она уже в базе! И это никакая не эвристика, а конкретная сигнатура (точнее, набор сигнатур), который не так-то просто обломать, особенно с учетом того, что рядовым пользователям сигнатуры недоступны и лицензируются только крупными компаниями по подписке за деньги.
Локальные антивирусы с эвристическими анализаторами на борту доступны всем желающим и прежде чем выпускать червя в сеть, хакеры многократно прогоняют его через кучу антивирусов, совершенствуя код до тех пор, пока не заткнутся все эвристики. Собственно, потому эвристический анализ и не работает. Даже если эвристик настолько крут, что ловит 99,996% еще неизвестной малвари, то оставшихся 0,004% вполне достаточно для эпидемии глобальных масштабов, не говоря уже о том, что цифры, приводимые разработчиками антивирусов, выражаются не в процентах, а в попугаях. Да-да, именно в попугаях. Проценты - это всегда проценты от чего-то. От чего? Если брать малварь, написанную с учетом обхода эвристика, мы получим 0%, если же брать всю малварь... гм, а оно нам нужно?! Обилие пионерских червей, конечно, повышает процентаж, но нас интересуют не маркетинговые данные, а реальная защищенность, которая, увы, существует только в маркетинговых проспектах и в умах доверчивых пользователей, начитавшихся рекламной мишуры.
По большому счету, качество детекции у IDS ничуть не выше, но! Недоступность коммерческих реализаций и невозможность "обкатки" малвари погружают хакера во тьму, вынуждая его действовать наугад, наступая на заботливо расставленные капканы и грабли, обойти которые может разве что ясновидец или же... непосредственно сам разработчик IDS, но ни тех, ни других среди хакеров не наблюдается, а потому IDS'ы рулят.
Рисунок 1. Схематическое устройство типичной системы обнаружения/блокировки вторжений.
Главным (и пожалуй, единственным) недостатком IDS'ов является их пассивность. Они словно посторонние наблюдатели, распознающие вторжение, но не предпринимающие никаких мер по его предотвращению, хотя с технической стороны заблокировать трафик - раз плюнуть. Так почему же IDS'ы этого не делают?! Причина в огромном количестве ложных позитивных срабатываний. При простой записи в лог проблем не возникает (администраторы любят анализировать длинные логи), а вот блокировка трафика из-за каждого пустяка превращает IDS в замечательное средство для DoS атак, причем его даже атаковать не нужно. Он и сам с перепугу замурует все входы/выводы, словив совершенно честный пакет.
Когда же IDS достигли приемлемого качества распознавания атак, их тут же переименовали в IPS - Intruder Prevention System - Системы Предотвращения Вторжений. Базовые принципы работы остались неизменными. Старые продукты под новой торговой маркой. Ясное дело, чтобы срубить с пользователей побольше бабла (а что? некоторые ставят одновременно и IDS, и IPS, хотя по сути дела, IDS реализует подмножество функций IPS и при наличии последнего просто не нужен, ну разве что достался в подарок от производителей сетевых девайсов).
Кстати, о подарках. С некоторого времени IDS/IPS стали встраиваться в персональные брандмауэры, точки беспроводного доступа, модемы и т.д., и т.п. Однако качество встраиваемых защит крайне невелико. Доступа к сигнатурным базам (за редким исключением) они не имеют, а потому ловят только клинически устаревшую малварь, использующую типовые сценарии атаки, разработанные несколько лет тому назад.
IDS/IPS, встроенные в "промышленные" маршрутизаторы от CISCO, работают намного лучше. Точнее сказать, CISCO IPS работает, а та штука, что встроена в персональный брандмауэр, только набивает себе цену. Кстати, о цене. До недавнего времени IDS/IPS стоили очень и очень дорого, что в конечном счете (спрос рождает предложение) привело к появлению аналогов от независимых производителей, из которых мы рассмотрим два наиболее известных продукта: коммерческий AMP (Active Malware Protection) от Endeavor Security и открытый проект Snort, сравнивая их сильные и слабые стороны.
Система обнаружения вторжений по имени Snort (с логотипом свиньи с во-о-от такими ноздрями) позиционируется как Open Source проект, исходные тексты которого можно в любой момент скачать с официального сайта http://www.snort.org. Там же можно найти и многочисленные порты под любые системы: от XP до прошивок DSL-модемов и беспроводных точек доступа. Правда, с установкой придется, мягко выражаясь, попыхтеть. Юзабельность на уровне черного экрана командой строки. Системы генерации отчетов в удобочитаемом виде как бы есть, но пользы от них немного и сквозь отчет приходится продираться, как через оккупированную хрюшками свиноферму.
Рисунок 2. www.snort.org - официальный сайт одной из самых популярных IDS с открытыми исходными текстами.
Ладно, все это мелочи. Пора поговорить о главном, то есть о деньгах. Оказывается, что Snort далеко не бесплатный, хотя и свободный. Без сигнатурной базы Snort практически бесполезен, а за доступ к базе надо платить, выкладывая за годовую подписку от $30 до $500 в зависимости от количества установленных сенсоров и потребностей. Без подписки зарегистрированные пользователи (то есть, халявщики) получают сигнатуры через 30 дней -п орядком протухшие и не сильно полезные (последнее время вспышки вирусной активности носят кратковременный характер и через 30 дней вирусная агрессия, как правило, сходит на нет и в сети наблюдается мелкая "рябь" остаточной активности). Незарегистрированные пользователи получают сигнатуры по мере выхода новых релизов Snort'а, удивляясь, как эта штука стала стандартом де-факто в мире открытых IDS?! Ведь она же совсем не работает!
Рисунок 3. Открытость Snort'а еще не подразумевает его бесплатность.
Бесспорно, среди открытых проектов - Snort самый лучший и детально описанный в десятках книг, спектр целевой аудитории которых распластался от чайников до администраторов, самостоятельно пишущих сигнатуры (или, точнее, в терминах Snort'а - рулеза от английского "rules", что переводится как "правило [поведения]") вместо того, чтобы лицензировать уже готовые у ведущих поставщиков.
На этом достоинства Snort'а и заканчиваются. Классический пример продукта в стиле: откомпилировали исходные тексты (попутно исправив кучу ошибок) - получился паровоз, откомпилировали опять - снова паровоз! Перевернули всю документацию, пока наконец не нашли сноску: доработать напильником до самолета. И нечего жаловаться! Ведь исходные тексты бесплатны! А готовые наборы сигнатур, составленные неизвестно кем и неизвестно для чего, это не Zen-way. Настоящие администраторы пишут все сигнатуры самостоятельно, обложившись кучей литературы (не бесплатной, однако), сигаретами и всеми прочими атрибутами хакерской жизни. Ладно, заканчиваем со Snort'ом и переходим к действительно серьезным вещам, повернутым лицом к пользователю.
Основной конкурент Snort'а - это Active Malware Protection от Endeavor Security (www.endeavorsecurity.com). Коммерческий продукт с дружелюбным интерфейсом и потрясающими возможностями, приправленными качественно сконструированными и тщательно отлаженными сигнатурами, дающих минимум ложных срабатываний, что позволяет использовать AMP и как IDS, и как IPS. Полный аппаратно-программный комплекс стоит порядка $13k, причем не "вообще", а за год. По лицензии. А что?! Для крупных организаций - вполне подъемная сумма, окупающая себя за счет подавления "паразитного" трафика, создаваемого червями, ботнетами и всякой прочей нечистью.
Рисунок 4. Панель Web-интерфейса по управлению AMP.
А как быть рядовым пользователям?! Мыщъх убедил руководство компании создать бесплатную демонстрационную версию с ограничением по количеству малвари, детектируемой в единицу времени. Скажем, не более 100 червей в день, что для большинства из нас более, чем достаточно!!! Даже в разгар эпидемий мыщъхиный компьютер пытаются атаковать примерно раз в полчаса, что дает нам двойной запас по прочности.
Программная составляющая представляет собой дистрибутив в формате rpm, требующий процессора не хуже P4, операционную систему типа Fedora Core 6 и, как минимум, одну сетевую карту. На Windows AMP принципиально не устанавливается, но... на этот случай существуют виртуальные машины со своими же виртуальными сетями и сетевыми трансляторами, связывающими виртуальную сеть с внешним миром.
В зависимости от целей, преследуемых пользователем, варианты установки варьируются в широких пределах. Если нам нужна система обнаружения вторжений, мы просто ставим Федору на VM Ware, инсталлируем AMP и даем ей доступ к физической сети, чтобы она ловила все проходящие пакеты, распознавая атаки (как успешные, так и обломавшиеся) вместе со следами присутствия малвари, что открывает огромное поле для экспериментов, позволяя, в частности, коллекционировать свежих червей и вести мониторинг вирусной активности.
Рисунок 5. В сети свирепствует червь Worm.Allaple-2, совершающий набеги на беззащитные узлы.
Функционируя в режиме IDS (системы обнаружения вторжений), AMP никак не защищает компьютер от атак, а лишь информирует, что нас поимели. Гм, ну это мы и без AMP рано или поздно узнаем. Как насчет укрепления линии обороны? В идеале нам потребуется отдельный компьютер, включенный в разрыв сетевого кабеля, но в "бюджетном" варианте можно обойтись и без него, воспользовавшись все той же VM Ware, чья виртуальная сеть конфигурируется так, чтобы весь трафик проходил через гостевую операционную систему с AMP - тогда AMP получит возможность блокировать вредоносные пакеты в реальном времени без отрыва от производства. Однако при этом придется задействовать NAT (транслятор сетевых адресов, встроенный в VM Ware), а через NAT работают далеко не все программы, или работают, но в ограниченном режиме (скажем, Осел). К тому же, такая схема защиты не предотвращает атаки на TCP/IP стек базовой операционной системы, в котором также имеются дыры. Впрочем, подавляющее большинство дыр сосредоточено в прикладных протоколах и приложениях типа IE, а дыры в TCP/IP стеке - это целое событие! И такие события можно пересчитать по пальцам одной руки. Ну, хорошо, двух рук - но это уже за все время существования NT.
Рисунок 6. Детальная информация по отдельно взятому инциденту с возможностью скачивания экземпляра червя (разной степени "потрепанности") на свою локальную машину.
Хорошая идея - пусть IE и другие потенциально небезопасные приложения работают через AMP, установленную на виртуальной машине, а программы, которым мы доверяем (например, Осел), ходят в сеть напрямую, что обеспечит полный комфорт и сухость.
Помимо локальной копии, фиксирующей атаки на заданный узел, пользователи AMP получают бесплатный доступ к демонстрационному аккаунту, который, пусть и с ограничениями, но отображает текущую статистику вторжений в реальном времени. Очень полезная штука для анализа вирусной активности. В частности, 16 июля 2008 года произошел взрыв. Нет, не ядерный. Просто резкая и непонятно чем обоснованная вспышка вирусной активности, сошедшая на нет уже через несколько дней.
AMP позволяет не только наблюдать за вирусами, но и скачивать образцы, отловленные распределенной сетью honey-pot'ов, причем не только вирусов, атакующих наш узел, но и всех пойманных вирусов вообще! Лучшего средства для пополнения частных вирусных коллекций, пожалуй, и не придумаешь. Правда, не все так радужно. Больше половины малвари "вытягивается" в сильно побитом состоянии. Есть голова, но нет хвоста. Или же, наоборот, червь длиною в 9,6 Кб, захваченный вместе с посторонним трафиком, вырастает до мегабайтный размеров, что, естественно, сбивает с толку, затрудняя анализ. Впрочем, учитывая, что количество пойманных штаммов одного и того же вируса исчисляется сотнями, всегда можно "выдрать" наиболее качественный экземпляр, с которым уже и работать.
Рисунок 7. Hex-дамп атакующего shell-кода с возможностью скачки на компьютер в бинарный файл.
Но черви - это ерунда. Их и на http://www.offensivecomputing.net найти можно. Уникальность AMP в том, что она ловит (и позволяет скачивать для исследования!) еще и shell-коды, т.е. атакующие компоненты червя, вызывающие переполнения буфера и загружающие "хвост", чаще всего реализованный в виде обычного exe/dll/sys файла, реже - чего-то сильно необычного и без загрузчика практически не поддающегося анализу (взять хотя бы нашумевший Rustock.C, когда реверсеры рвали на себе волосы в разных местах, умоляя бога послать им дроппер - ну, то есть тот код, который забрасывает Rustock'а на заражаемые компьютеры).
Лучше всего, конечно, вообще не допускать вторжения малвари на свой компьютер, используя AMP или любую другую достойную IPS, но... даже AMP не дает 100% гарантии и потому время от времени нужно обследовать тачку на предмет наличия заразы. Забьем на антивирусы и пораскинем умом - какие мы имеем вектора атаки?
Малварь делится на две больших категории: одна обитает исключительно в оперативной памяти, другая же оседает на диске, либо создавая новые файлы, либо же внедряясь в уже существующие.
Из памяти зараза убивается простой перезагрузкой, а потому нужно именно перезагружаться, а не делать компьютеру suspend. И обновляться! Обязательно обновляться, чтобы не схватить червя еще на стадии загрузки системы.
Как обнаружить малварь на диске? Короткий ответ - никак. Развернутая версия - существует бесчисленное множество векторов атак, и каждый день появляются все новые. Антивирусы (и ревизоры) в основном концентрируются на exe/dll файлах, однако малварь также может поражать и расширения Горящего Лиса, винжеты Оперы, плагины Adobe Acrobat/Reader'а, да и не только их одних! Дыры в графических библиотеках позволяют размещать вредоносный код в gif/jpg файлах, а дыры в MS Office - в doc, xls, ppt... Короче говоря, ситуация - ласты. Спасает лишь то, что по меньшей мере 90% малвари оседает именно в exe/dll файлах, которые мы и будем искать.
Чтобы нейтрализовать root-kit'ы, необходимо загрузиться либо с LiveCD (например, BartPE - www.nu2.nu/pebuilder), либо с флешки. Как вариант, можно воспользоваться съемным жестким диском с установленной XP. Тут на вкус и цвет товарищей нет, но LiveCD все-таки предпочтительнее, потому что его никак не заразишь, а вот флешку или съемный жесткий диск - запросто! Бороться же с активными root-kit'ми под их управлением это... пустая трата времени.
Ок, загрузились, и что дальше? По хорошему, следовало бы воспользоваться каким-нибудь дисковым ревизором в стиле старого доброго AdInfo. Для малвари это, конечно, хорошо, ибо качественных ревизоров немного, форматы их баз, сохраняемые на жестком диске, давно известны и ничего не стоит их захачить. К тому же, ревизор - он денег стоит. Нафиг? Будем действовать руками и головой. Скачаем бесплатную утилиту для подсчета контрольной суммы файлов - http://www.pc-tools.net/win32/md5sums/ и запустим ее: for /R X:\ %A in (*.*) do md5sums.exe %A >> X-file.txt, где X:\ - буква диска, для которого нужно создать текстовый файл X-file.txt с контрольными суммами всех файлов, рассчитанных по алгоритму MD5. После чего остается только загрузить X-file.txt в MS Word, преобразовать текст в таблицу, отсортировать ее по именам файлов и сохранить полученный результат в надежном месте.
При последующих проверках на наличие малвари повторить данную операцию вновь, сравнивая старый и новый X-file.doc средствами самого Word'а, который покажет появление новых файлов или изменения контрольных сумм ранее существующих. Новоявленные/измененные файлы отправляем прямиком на VirusTotal и смотрим результат. Утомительно? Да, конечно! Надежно? Увы! Во-первых, мы забыли о том, что малварь может скрыть свои файлы, сделав их доступными только определенным пользователям или системе (не администратору!).
Во-вторых, а как же реестр?! Куча программ хранит в нем макросы и другую информацию, предрасположенную к заражению. А какой ревизор реально проверяет реестр?! Правильно - никакой и это приходится делать руками. Дампим реестр в текстовый файл средствами Редактора Реестра и сравниваем "слепки", полученные в разное время, утилитой WinDiff, входящей в MS Resource Kit и комплект штатной поставки MS Visual Studio.
Проблема в том, что реестр уже давно превратился в мусорную свалку и количество обнаруженных изменений очень и очень велико, причем программы, хранящие свои настройки в бинарном виде (а таких - большинство) весьма затрудняют борьбу с малварью, поскольку совершенно непонятно - что же конкретно было изменено?
А не плюнуть ли на это мокрое дело и не воспользоваться ли нам автоматической утилитой типа AVZ или Hijackit? Воспользоваться, конечно, можно, только шансы найти малварь невелики. Не нужно считать всех хакеров идиотами. В момент своего появления AVZ/Hijackit работали неплохо, но теперь, как говорят американцы: too known to stay alive, в смысле - "известность фраера сгубила". Сегодня с ними не борется только ленивый. Так что, лапы, хвост и мозги - единственное надежное орудие поиска!
Проникнуть на компьютер, защищенный Snort'ом, AMP или другой качественной IPS, практически невозможно. Допустим, хакер обнаружил новую, еще никому неизвестную уязвимость в... впрочем, неважно. Допустим также, что атака основана на переполнении буфера, а жертва использует XP SP2+ с аппаратным DEP, задействованным для всех приложений. В этом случае первая фаза атаки - копирование shell-кода из стека в специально выделенную область памяти с атрибутами, разрешающими чтение, запись и выполнение. Технически это реализуется через последовательность вызовов API функций, чьи адреса хакер засылает в стек, что легко описывается языком сигнатур и распознается системой обнаружения вторжений независимо от того, какое именно приложение (или сетевая служба) атакуется.
В умелых руках AMP превращается в мощный инструмент борьбы с агрессорами, действующий на автопилоте и не требующий внимания со стороны оператора. К сожалению, если за компьютером сидит существо типа "секретарша", то... AMP эффективно парсит TCP-протокол с сетевого уровня, и декодирует HTTP, а также файлы различных форматов, такие, например, как MS Word или PDF - в них тоже встречаются ошибки переполнения! Достаточно лишь открыть их. Увы! PDF, выложенный на Web/FTP, распарсить (на сетевом уровне) еще возможно, но это уже предел (во всяком случае, для AMP). Тот же самый PDF, начиненный shell-кодом и упакованный zip'ом или rar'ом на сетевом уровне ни AMP, ни другие системы обнаружения вторжений, не распарсят, ибо если парсить абсолютно все - никаких вычислительных мощностей не хватит и мы получим такие тормоза, что ну ее нафиг эту безопасность.
То же самое относится и к обычным исполняемым файлам, внутри которых может находится все что угодно: от AdWare до троянских коней. AMP в принципе не защищает от атак подобного рода. Это все-таки не антивирус. А антивирусы известно где - на VirusTotal. AMP плюс VirusTotal (или локальный антивирус) плюс песочница типа Norman Sand Box - хоть и не панацея, но во всей своей совокупности обеспечивают вполне приемлимый уровень защищенности.