Выбрать главу
Виртуализация и безопасность

Безопасности во всех ее ипостасях на IDF было уделено очень много внимания. На подходе уже первые системы с ее аппаратной поддержкой, и в ближайшие несколько лет разработка «безопасных приложений» и «безопасных операционных систем», несомненно, будет одной из актуальнейших «программистских» тем. Шифрование на канальном уровне - лишь один из аспектов общей проблемы, коротко описывающейся так: главная угроза корпоративным сетям исходит не «извне», а «изнутри» - хакеры предпочитают «внедриться» в сеть, «стать одним из своих», вместо того чтобы преодолевать навороченные файрволлы и IDS на ее границах. И та же LinkSec, востребованная, если хакер попытается физически подключить к сети «чужой» компьютер или иное «прослушивающее» оборудование, будет абсолютно бесполезна, если в одну из машин «доверительной» сети окажется внедрен троянец.

Что делать? Виртуализироваться! Виртуализация, позволяющая создавать на одном компьютере изолированные друг от друга виртуальные машины, и безопасность идут рука об руку, поскольку вместо комплекса мер по защите компьютера в целом - файрволла, антивируса, разграничения прав доступа - достаточно реализовать защиту только сравнительно маленькой программки - менеджера виртуальных машин (VMM). Во-первых, с его помощью можно выстраивать «доверительную пирамиду»: VMM при создании очередного раздела на компьютере проверит «цифровую подпись» загрузчика операционной системы, загрузчик проверит подписи всех исполняемых файлов и данных операционной системы, операционная система будет проверять подписи у всех запускаемых программ, программы - у всех запускаемых скриптов и используемых данных и т. д., где каждый уровень, который мы уже считаем надежным, проверяет надежность следующего уровня. Если аппаратно обеспечить гарантию подлинности самого первого уровня, с которого начинается «пирамида», - а именно это и делают TPM, LaGrande и иже с ними, то на подобном компьютере будет принципиально невозможно запустить что-либо неподписанное кем-то, кому мы доверяем, - в частности, того же троянца. Во-вторых, виртуализация гарантирует, что если «вредная» программа все-таки будет запущена (например, где-то в описанной схеме встретится незащищенный слой, систему безопасности для собственного удобства отключит сам пользователь или, что еще неприятнее, из-за ошибки в софте «подписанная» программа сделает что-нибудь «неприличное» [Как вы помните, «борьба за безопасность» началась еще с введения бита NX/XD, который позволял предотвратить один из самых распространенных видов подобных атак, заставляющих недостаточно аккуратно написанное приложение выполнить произвольный «чужой» код, послав на его вход специально подобранную последовательность данных]), то «погибнет» лишь один из «отсеков корабля», а не вся система. Скажем, дыра в WinAMP или многострадальном Internet Explorer, использующихся в неслужебных целях, не станет причиной компрометации бизнес-приложения, работающего с важными данными, поскольку пробившийся в одну виртуальную машину низкой защиты хакер попросту не увидит недоступные для него остальные машины, на которых запущены более критичные вещи.

Что же нам предлагают? По правде говоря, для меня стало откровением, что несмотря на отсутствие поддерживающего ее программного обеспечения, первая на рынке технология виртуализации VT-x, которую процессоры Intel поддерживают уже около года, за это время несколько раз оптимизировалась по быстродействию, так что производительность использующих ее программ на Core 2 Duo будет заметно выше, чем на первых Pentium D (даже с учетом разницы в производительности самих этих процессоров). Впрочем, сегодня ведущие производители виртуальных машин уже поддерживают VT-x, хотя и не реализуют всех ее потенциальных возможностей, что, впрочем, неудивительно, если учесть, что необходимый для полного раскрытия технологии объем работ сопоставим по сложности с созданием новой операционной системы, да и ОС в идеале должны бы пройти соответствующую оптимизацию. Камень преткновения в данном вопросе - это необходимость реализации работающих на уровне виртуальной машины драйверов для железа и их поддержки операционной системой. Дело в том, что все нынешние ОСи попросту не умеют совместно с другими ОСями одновременно использовать одно и то же оборудование - скажем, общую видеокарту, и приходится либо реализовывать средствами виртуальной машины виртуальный же графический адаптер, жертвуя производительностью и функциональностью, либо ставить, грубо говоря, две видеокарты - по одной на каждую из ОСей, что тоже едва ли можно назвать удачным выходом. Кроме того, если мы собираемся использовать VMM не только для одновременного запуска Linux и пары копий Windows на одной машине, а для более «прогрессивных» схем, в которых, например, предлагается каждому критичному приложению выделять по собственной копии операционной системы, то без поддержки со стороны ОС и запустить это приложение - проблема (потребуется ждать создания новой виртуальной машины и загрузки в ней ОСи, после чего вручную запускать нужную программу), и работать с ним (было бы лучше, если б запущенная на другой виртуальной машине программа выглядела как обычное приложение, а все технические тонкости были спрятаны), и ресурсов на это уйдет слишком много (о быстродействии во многих случаях можно забыть). Словом, объем работы огромен, он наверняка займет еще несколько лет. Так что первые ее по-настоящему интересные плоды мы, вероятно, увидим тогда же, когда и второе поколение виртуализации от Intel, известное сейчас под кодовым названием VT-d.

Для разработчиков VT-d - большой шаг вперед. Например, в этой технологии появится аппаратная поддержка двойной трансляции виртуальной памяти, что позволит обойтись в виртуальных машинах без реализации ее функциональности чисто программным путем, довольно медленным и требующим большого непроизводительного расхода оперативной памяти. Появится возможность предоставления быстрого, без участия VMM доступа к выбранным MSR-регистрам процессора [Эта фича уже реализована в VT-x процессоров архитектуры Intel Core]; появится возможность не сбрасывать при каждом переключении между виртуальными машинами таблицу трансляции виртуальной памяти TLB, - все это тоже должно сильно увеличить быстродействие VT-d по сравнению с VT-x. Появится защита DMA-операций, улучшится поддержка прерываний - что, в свою очередь, повысит безопасность, закрыв некоторые потенциальные дыры. Кстати, интересно, что почти все из вышеперечисленного предлагает в своей технологии Pacifica компания AMD, незадолго до Форума начавшая поставки соответствующих процессоров. Так что Intel, безоговорочно лидировавшая в этой области, рискует на полгода-год - до выхода процессоров и чипсетов с поддержкой VT-d - остаться в хвосте. Впрочем, решение AMD не совместимо с решением Intel, и решатся ли разработчики на «оптимизацию» своего ПО «под AMD» - пока непонятно.

Любопытный доклад был посвящен созданию виртуальной машины «от Intel». В свое время, когда еще только появлялись первые процессоры VT-x, я спрашивал на московском Форуме представителей Intel о перспективах создания компанией собственного ПО, дабы потребители могли воспользоваться этой технологией (как известно, Intel разрабатывает и продает довольно много программных продуктов для собственного железа, начиная с компиляторов и заканчивая средствами отладки), но тогда мне сказали, что создание VMM ляжет на плечи сторонних разработчиков (в числе которых, кстати, фигурирует Microsoft), а Intel в лучшем случае поддержит OpenSource-проекты, но уж никак не станет создавать собственный стандарт. Однако ситуация, похоже, меняется, и вместо разговоров о довольно невнятном опенсорсном проекте Xen, на котором демонстрировалась работа VT-x, но который, на мой взгляд, страшно далек был не только от «народа», но и от подавляющего большинства сисадминов [Хотя Novell, включившая Xen в свои версии Linux, пожалуй, со мной не согласится], на Форуме разговор шел уже о более чем понятном и весьма многообещающем Open Virtual Iron, реализующем полноценную, удобную и довольно «навороченную» виртуализацию. Сама Virtual Iron - стартап, предлагающий коммерческое ПО, и подобный поворот в сторону «открытости», да еще и подробно освещенный Intel, выглядит как попытка установить некую собственную «стандартную платформу» в виртуализации.