Современные процессоры настолько мощны, что позволяют эмулировать самих себя
практически без тормозов. В области системного администрирования это находит
большое практическое применение. Но не все так просто, и прежде, чем возводить
виртуальную систему, следует взвесить все аргументы за и против.

 

Двери в виртуальный мир

За последние годы на рынке появилось множество виртуальных машин — от
узкоспециализированных (Bochs, eEye) до эмуляторов общего
назначения (VMware, VirtualBox, QEMU, XEN,
Virtual PC
). Интерес к виртуализации растет, а сами эмуляторы по ходу дела
осваивают новые профессии, становясь все более и более привлекательными
игрушками в глазах системных администраторов. Именно «игрушками» – потому что к
введению в промышленную эксплуатацию существующие эмуляторы еще не готовы. Ущерб
от их использования намного превышает стоимость живого железа, которое они
призваны заменять (не говоря уже о том, что большинство эмуляторов
распространяются на коммерческой основе или, попросту, стоят денег).

Тем не менее, играться с виртуальными машинами можно и нужно! Есть все
основания ожидать, что в ближайшие несколько лет разработчики вылижут баги и
доведут эмуляторы до ума, а потому осваивать их надо прямо сейчас, чтобы потом
не разворачивать виртуальную инфраструктуру впопыхах.

Существует, по меньшей мере, три типа виртуальных машин (не считая
гибридов). К самым первым (и самым древним) относятся машины с полной
эмуляцией
. Классический пример — Bochs. Тормозит ужасно, зато позволяет
эмулировать «чужеродные» архитектуры, например, x86 на Мотороллере или x86-64 на
x86. Возвести многопроцессорную машину на однопроцессорной? Без проблем. Причем,
основная операционная система надежно изолирована от гостевых виртуальных машин
и причинить ей ущерб невероятно трудно. Bochs очень хорошо подходит для
экспериментов с вирусами, червями и прочим зловредным ПО. Также его можно
использовать для того, чтобы опробовать 64-разрядные операционные системы,
прежде чем решиться покупать x86-64 – но высокие накладные расходы на эмуляцию
(даже с учетом оптимизации и кэширования инструкций) предъявляют жесткие
требования к аппаратной оснастке базовой машины. И проблема здесь даже не в том,
что WinXP на P-4 под «Борщем» стартует около суток. Она вообще не стартует!
Поскольку куча операций отваливается по тайм-ауту, в частности, если процедура
инициализации драйвера выполняется свыше 10 секунд, система автоматически
выгружает драйвер со всеми вытекающими отсюда последствиями.

Динамические виртуальные машины (QEMU, VMware, VirtualBox) эмулируют
лишь привилегированные инструкции (равно, как и непривилегированные инструкции,
имеющие доступ к системным данным). За счет этого скорость эмуляции возрастает
на несколько порядков, и на P-III 733 уже можно комфортно работать в среде
виртуального Win2k3, а на P-4 все просто летает. Расплатой за скорость
становится принципиальная невозможность эмуляции «чужеродных» архитектур, плюс
потенциальный риск атаки на основную операционную систему из гостевой.
Теоретически, создать надежный динамический эмулятор вполне возможно, но
практически… это же тысячи строк на Си/Си++ и мегабайты кода! К тому же,
разработчики QEMU и VMware даже не пытались защитить основную систему от атаки
со стороны гостевых виртуальных машин, чем с успехом пользуются вирусы и черви.

Аппаратная виртуализация (поддерживаемая последними моделями
процессоров Intel и AMD) устраняет ляпы в x86-архитектуре, где системные данные
надежно защищены только от записи, но могут быть прочитаны с прикладного уровня
легальными непривилегированными командами. Это вынуждает эмулятор просматривать
блок кода перед его выполнением, на что расходуется время. В процессорах фирмы
Motorola таких дефектов нет, и потому динамическая эмуляция на них работает
намного быстрее (и без всякой новомодной аппаратной поддержки!). Но рынок
захватила x86-архитектура, вытеснив Motorol'у, и потому аппаратную виртуализацию
встречают с очень большим энтузиазмом. Теоретически, скорость эмуляции должна
вплотную приближаться к «живому» процессору, поскольку накладные расходы на
виртуализацию близки к нулю. Однако, помимо процессора, виртуальная машина
вынуждена эмулировать еще и оборудование. Без жестких дисков ведь не обойтись, а
давать прямой доступ к физическим хардам — самоубийство. В этом причина того,
что производительность виртуальных машин (даже с поддержкой аппаратной эмуляции)
существенно отстает от живого железа, но все-таки обгоняет динамическую
эмуляцию.

Естественно, за повышение скорости приходится платить. Во-первых, необходимо
приобрести процессор с поддержкой аппаратной виртуализации (ладно, это не
проблема, приобретем в ходе очередного планового апгрейда). Во-вторых (а вот это
уже действительно серьезно) — процессоры содержат кучу дефектов, позволяющих
воздействовать на основную операционную систему из гостевых виртуальных машин.
Исправить ошибку в процессоре намного сложнее, чем в полностью программном
эмуляторе! И что самое неприятное – спонтанные падения основной системы
происходят даже без всякой атаки со стороны вредоносного кода! Словом,
аппаратная виртуализация до сих пор остается плохо отлаженной игрушкой, не
готовой к промышленному внедрению. Несмотря на это, Microsoft уже включила
эмулятор с поддержкой аппаратной виртуализации в состав Win2k8, конкурирующий с
бесплатным проектом XEN.

 

Виртуальные сервера

Как можно использовать виртуальную машину в корпоративной или офисной сети?
Например, поднять виртуальный сервер. А что? Допустим, нам нужен публичный WEB и
приватный SQL. По соображениям безопасности, публичный сервер должен быть
расположен в так называемой демилитаризованной (DMZ) зоне, а приватный SQL –
внутри локальной сети, обнесенной по периметру глубоким защитным рвом
(брандмауэром). Что требует двух машин. А как быть, если в наличии имеется
только одна?

Теоретически (подчеркиваю!), можно поднять VMware или Virtual PC, разместив
публичный WEB-сервер на виртуальной машине, а приватный SQL – на основной. И это
как бы будет работать. «Как бы» – потому что для достижения приемлемого уровня
производительности даже при поддержке аппаратной виртуализации нам понадобится
довольно мощное железо, способное тянуть эмулятор с разумной скоростью. Значит,
много сэкономить все равно не удастся, а если добавить к этой сумме издержки от
неизбежных атак на виртуальную машину и сбои самой виртуальной машины, в
долгосрочной перспективе мы имеем весьма внушительные убытки. Купить два
отдельных физических сервера — дешевле, да и работать они будут намного
стабильнее. А если денег на железо нет, то лучше отказаться от DMZ-зон, поселив
публичные и приватные сервисы на одной машине и запретив приватным сервисам
принимать трафик с внешних интерфейсов. А для надежности – еще и закрыть порты
на брандмауэре. Как говорится, дешево и сердито, но это все-таки лучше, чем
возня с виртуальными машинами.

 

Загон для вирусов

Достаточно часто виртуальные машины используются для экспериментов с
потенциально небезопасным программным обеспечением, полученным из ненадежных
источников. Антивирусная проверка — не слишком-то хорошее средство для поиска
неизвестных или модифицированных червей, вирусов и руткитов. Вредителям хорошо
известно, как «ослепить» проактивные технологии и эвристические анализаторы.
Утилиты, ориентированные на поиск руткитов, хорошо работают лишь в первые дни
своего появления, а затем хакеры находят обходной путь.

Прямое сравнение дисковых образов палит все руткиты, червей и вирусы без
исключения (конечно, при условии, что они вносят изменения в файловую систему, а
не ограничиваются заражением одной лишь оперативной памяти, умирая при
перезагрузке). Алгоритм поиска заразы выглядит так: снимаем образ стерильной
системы, сохраняя его в надежном месте, устанавливаем новое программное
обеспечение, снимаем еще один образ. Монтируем оба образа на заведомо не
зараженную систему и сравниваем их. Тривиальное пофайловое сравнение выявляет
до 90% малвари
. Остальные 10% обнаруживает побайтовое сравнение,
«вытягивающее» вирусы, прячущиеся в NTFS-потоках или других местах (работая с
диском на низком уровне, мы должны знать все базовые структуры файловой системы,
подробно описанные в моей книге «Техника восстановления данных», электронную
копию которой можно бесплатно скачать здесь:

nezumi.org.ru/recover-full-rus.zip
).

Естественно, проводить подобные эксперименты лучше всего под эмулятором. Так
намного проще оперировать образами виртуальных жестких дисков, да и выделять
отдельную (физическую) машину не потребуется. Удобство, простота и экономия —
налицо. Но простота хуже воровства, и экономия на выделенной машине до добра не
доводит. Если виртуальная машина соединена с основной системой виртуальной
сетью, то черви могут атаковать базовую операционную систему, используя дыры в
сетевых службах. Администратору следует либо своевременно устанавливать все
заплатки, либо отключить вирусный загон от Сети вообще – не забывая про
расшаренные ресурсы. Виртуальная машина VMware поддерживает их в обход
Ethernet-адаптера. Шары продолжают работать даже после удаления виртуальной
сетевой карты, и подвержены сразу двум типам атак — через дыры в сервисе «общих
папок» и путем засылки червей, модифицирующих шаблон папки, автоматически
«подхватываемый» Проводником. То же самое относится и ко всем остальным типам
носителей. Это существенно затрудняет обмен данными между виртуальной и основной
машинами. Самое надежное — копировать данные через CD-ROM (не обязательно
физический — подойдет и виртуальный, просто берем любую программу для создания
iso-образов и монтируем ее на основную систему и на VMware).

Важно: по умолчанию VMware автоматически распознает все подключаемые
USB-устройства и дает виртуальным машинам к ним полный доступ. Допустим, мы
подключаем FLASH, внешний жесткий диск с USB-интерфейсом или другой девайс
подобного рода, на котором тут же поселяется вирус, вырвавшийся из застенков
виртуальной машины. Чтобы предотвратить вторжение, достаточно отключить
USB-контроллер в свойствах виртуальной машины.

Однако проблемы на этом не заканчиваются. Руткиты уже давно научились
распознавать виртуальные машины
, отказываясь от заражения в их присутствии,
что ломает весь концепт. Мы устанавливаем программное обеспечение с руткитом на
виртуальную машину, сравниваем образы, ничего не находим и, довольные собой,
запускаем руткита в основную систему. Выходит, гарантировано обнаружить
современных руткитов при помощи виртуальных машин невозможно! А если еще учесть
большое количество дыр в эмуляторах, то руткит имеет все шансы заразить основную
систему из гостевой машины. Выход? Либо использовать выделенную живую машину,
либо надежную виртуальную машину с полной эмуляцией (например, Bochs). Это
предотвратит вирусное вторжение, но, увы, не спасет от детекции виртуальной
машины руткитом. Bochs содержит множество мелких дефектов эмуляции (ведет себя
не как настоящий процессор), которые не препятствуют работе нормальных программ,
но могут быть использованы для детекта эмулятора. К тому же, ЛЮБОЙ эмулятор
несет на своем борту довольно специфический набор виртуального железа, по
которому его легко опознать. И хотя при наличии исходных текстов мы можем
воспрепятствовать этому — купить живой компьютер намного дешевле, чем корежить
виртуальное железо.

Резюмируя вышесказанное, делаем вывод: виртуальные машины – не слишком-то
надежный загон для вирусов, хотя если не быть параноиком, то (с учетом низкого
качества подавляющего большинства вирусов и руткитов) лучше использовать
виртуальную машину, чем всецело полагаться на антивирусы.

 

Инструмент выявления сетевых атак

Офисные сети обычно не испытывают необходимости в сенсорах и датчиках,
детектирующих вторжение, а если и испытывают, то дело обычно ограничивается
приобретением коммерческой IDS/IPS-системы, встраиваемой в брандмауэр и спокойно
работающей на шлюзе в интернете или на одном из узлов локальной сети.

С ростом сети появляется желание установить специализированную систему
обнаружения вторжений, например, Snort (бесплатный) или AMP (коммерческий). И
разместить ее на выделенном узле, поскольку для установки того же AMP
администратор должен предоставить его поставщикам удаленный shell на свою
машину. Причем, AMP будет не только автоматом скачивать свежие сигнатуры из
Сети, но и отправлять весь подозрительный трафик для анализа на серверы компании
Endeavor, которая и является его разработчиком.

Доверие — это прекрасно, но отдавать свой трафик в чужие руки… Нет, лучше
размесить эту штуку на отдельном узле, отключенном от основной локальной сети,
но запитанном от того же самого ISP – то есть ловящего тех же вирусов и червей,
что и основные узлы локальной сети. Можно ли использовать для этой цели
виртуальную машину? Конечно! Главное, надежно изолировать ее от корпоративной
сети.

Наибольшую проблему представляют виртуальные сетевые карты, через
которые гостевая операционная система легко доберется до основной. Все
виртуальные карты в обязательном порядке должны быть отключены! Но… если у нас
нет сети, как же тогда общаться с внешним миром и ловить трафик? Вариантов
много. Вот только один из них: ADSL-модем с USB-интерфейсом, подключенный к
виртуальной машине с выдернутой сетевой картой и заблокированными шарами.

Какую именно виртуальную машину следует использовать? VMware очень известна и
слишком дырява. Bochs невероятно медленно работает. Virtual PC – неплохой выбор,
но учитывая большое количество дыр в процессорах, его использование крайне
небезопасно. Реально остается только VirtualBox, XEN или QEMU, хотя первый из
них все еще достаточно сырой и до сих пор не отлаженный.

 

Зеркальный сервер

Вредоносная природа червей и вирусов вполне объяснима. Они как раз для этого
и писались. Увы, честное программное обеспечение зачастую наносит намного
больший урон. Взять хотя бы обновления безопасности или новые версии. Всем
администраторам хорошо известно, что их установка порой приводит к
трудноразрешимым конфликтам, потерям данных, а то и полному краху операционной
системы!

Аналогичным образом дела обстоят с кручением настроек, смысла которых
администратор до конца не понимает и действует методом тыка. Одно неверное
движение руки — и система отказывается загружаться, а чтобы поднять ее,
требуются знания и квалификация, вырабатываемые только в борьбе с вот такими
взлетами и падениями. По книжкам всего не выучишь… И здесь виртуальные машины –
незаменимы.

Просто устанавливаем систему со всеми приложениями и сервисными службами на
VMware/Virtual PC/VirtualBox/etc, и все новые заплатки, обновления, настройки, в
первую очередь, обкатываем на гостевой операционной системе, наблюдая за ее
реакцией. Если полет нормальный — переносим изменения на основную машину. Если
же нет — соображаем, что здесь не так, и где косяк.

 

Итого

Виртуальные машины открывают практически неограниченные возможности для
экспериментов. Главное — правильно ими воспользоваться, предусмотрев максимум
возможных побочных эффектов и разработав план по их устранению.

 

WWW

Bochs:
bochs.sourceforge.net

Virtual PC:

www.microsoft.com/windows/downloads/virtualpc

VirtualBox:
www.virtualbox.org

VMware: www.vmware.com
Xen: www.xen.org



Полную версию статьи
читай в октябрьском номере
Хакера!

  • Подпишись на наc в Telegram!

    Только важные новости и лучшие статьи

    Подписаться

  • Подписаться
    Уведомить о
    0 комментариев
    Межтекстовые Отзывы
    Посмотреть все комментарии