Концепция, лежащая в основе обеспечения безопасности на уровне операционной системы, базируется на разграничении – ОС производит отделение друг от друга файлов, каталогов, процессов, пользователей и устройств, даже если оборудование позволяет им взаимодействовать произвольным образом. Выступающая в роли посредника операционная система накладывает ограничения на области, из которых процессы могут читать или писать данные; управляет вводом, выводом, памятью и ресурсами процессов; выступает в роли посредника для аппаратного обеспечения таким образом, что прямой доступ к нему получает только операционная система. Если операционная система реализована корректно, она сможет предоставить надежные гарантии безопасной работы для процессов, пользователей, файлов и устройств. Мы можем получить защищенную среду операционной системы, которая избавляет каждую программу от необходимости самостоятельно обеспечивать свою безопасность. По крайней мере, именно так меня учили более 30 лет назад.
Реализовать операционную систему таким образом, чтобы она обеспечивала безопасность всего и вся, довольно сложно, поскольку ОС, библиотеки, драйверы и другие программные компоненты слишком велики для того, чтобы гарантировать абсолютную защиту. На практике наблюдаются очевидные проблемы, такие как передача некорректной информации при вызовах операционной системы с возможностью использования этой информации для выполнения некорректных действий, либо менее очевидные, например конкуренция за доступ к файлам из разных потоков, приводящая к установке значений переменных, которые уже после проверки на целостность меняются третьей стороной, что серьезно мешает созданию «правильной» операционной системы.
Нас спасут ядра безопасности
Ядра безопасности решат проблемы! Мы не можем создать большую защищенную операционную систему, но можем создать небольшое защищенное ядро безопасности, принимающее все основные решения, связанные с защитой. Все остальное будет относиться к более сложной обработке, касающейся библиотек, и будет действовать на менее безопасном уровне, реализующем полнофункциональную операционную систему. По крайней мере, именно так меня учили 25 лет назад.
Конечно, реализовать ядро безопасности таким образом, чтобы оно защищало все и вся, слишком сложно. Размер ядра безопасности растет с появлением новых требований, и наши модели безопасности не соответствуют реалиям этого мира. Кроме того, если нельзя организовать атаку на ядро безопасности, можно организовать атаку на механизмы операционной системы. Если этого тоже нельзя сделать, то можно организовать атаку на процессы уровня пользователя. И если даже это затруднительно, то можно организовать атаку на пользовательские процессы, и наконец они падут.
Нас спасет контроль периметра
Контроль периметра решит проблему безопасности! В конце концов, если вы не в состоянии преодолеть периметр, вы не можете попасть внутрь системы, а те, кто находится внутри периметра, в любом случае имеют все права. Конечно, существуют тайные каналы, но о них мало кто знает, чтобы об этом беспокоиться. В любом случае мы можем провести теоретический анализ таких каналов, чтобы ограничить их пропускную способность до допустимых величин, но насколько большими они могут быть? По крайней мере, именно так меня учили 20 лет назад.
Конечно, реализация межсетевого экрана по своей природе должна быть таковой, чтобы определенная информация попадала внутрь и передавалась наружу, иначе нет никакого смысла вообще создавать такой экран. Если же какая-то информация может передаваться внутрь и наружу, то же самое можно сделать и с любой другой информацией, поэтому, по мере введения ограничений на порты в IP-протоколах, весь трафик передавался через несколько портов, и затем все сервисы (Web, DNS и т.п.) базировались на этих портах. И разумеется, существовали каналы через межсетевые экраны, ведущие в пользовательские процессы, которые обходили любые ограничения уровня операционной системы или библиотек и запускали программы, которые сисадмины не контролировали, если это было необходимо. В конце концов вся Сеть стала одним гигантским тайным каналом.
Нас спасет обнаружение вторжений
Своевременное обнаружение вторжений и оперативная реакция на них решит проблему безопасности! Мы реализуем автоматизированные системы, позволяющие извлечь хорошее из плохого. И не важно, что мы уже знаем о невозможности сделать это совершенным образом; мы сделаем это несовершенно, но настолько хорошо, что реальному человеку придется очень серьезно подумать, как это обойти. В конце концов, насколько сложным это может быть? По крайней мере, именно так меня учили 15 лет назад.
Конечно, системы, обнаруживающие вторжения и реагирующие на них, пока не настолько превосходны, чтобы остановить чье-либо желание попытаться организовать новые атаки. И конечно, существует по крайней мере полсотни способов обойти системы обнаружения вторжений, накладные расходы становятся все больше, и...
Нас спасет шифрование
Шифрование решит проблему безопасности! Мы можем использовать инфраструктуру открытых ключей (Public Key Infrastructure, PKI) в сочетании с контролем целостности и цифровыми подписями, сертификатами и всеми остальными средствами шифрования, для того чтобы обеспечить безопасность всех коммуникаций. Вне зависимости от того, с кем вы будете разговаривать, такие разговоры будут конфиденциальными, и вы сможете запускать только сертифицированные программы, поэтому это будет безопасно. В конце концов, мы доверяем нашим производителям, их производителям, производителям этих производителей и так далее. По крайней мере, именно так меня учили 10 лет назад.
Конечно, реализация шифрования имела изъяны. Но даже если бы таких изъянов не было, все хотят иметь возможность поговорить с кем угодно, когда угодно и где угодно, и невозможно сопротивляться потоку, имя которому «пользователи». И конечно, когда мы шифруем, то уже не можем больше обнаруживать вторжения – для этого нужно расшифровывать трафик на уровне межсетевых экранов, обнаружить вторжения и отреагировать на них, вести аудит и так далее, а затем снова зашифровывать трафик для его дальнейшей передачи. Правда, мы используем для этого аппаратное обеспечение, и затраты возросли всего лишь на 10% или около того – мы тратим так много своего компьютерного времени на все остальное, что эти проценты практически незаметны.
Но это не сильно помогло, поскольку, даже если все зашифровывать и подписывать, то в случае взлома практически все остальное рано или поздно станет доступно.
И конечно, мы начали создавать встроенные языки таким образом, чтобы можно было загружать код, который: не может видеть система обнаружения вторжений (Intervention Detection System, IDS) и не может остановить межсетевой экран; поддерживает шифрование; запускается в авторизованных браузерах; взаимодействует без обременительной нагрузки на операционную систему.
Это были языки более высокого уровня, встроенные в наши Web-браузеры, клиенты Twitter и так далее.
Нас спасет виртуализация
Виртуализация решит проблему безопасности! Мы поместим все по отдельности в свои виртуальные компьютеры и будем запускать все там. Затем мы будет контролировать взаимодействия этих виртуальных компьютеров с помощью небольшого ядра безопасности, и они смогут работать в любой операционной системе, с любым программным обеспечением и всем остальным, чего ни пожелают. Кроме того, мы можем балансировать нагрузку таким образом, чтобы в тот момент, когда один компьютер работает слишком интенсивно, можно было перенести виртуальные компьютеры на другие машины и тем самым предотвратить отказ в обслуживании и иные простои. По крайней мере, именно так я вспоминаю теорию, о которой мне рассказывали всего несколько лет назад.
Конечно, все проблемы, которые возникали в связи с операционными системами, ядрами безопасности, контролем периметра, системами обнаружения вторжений и шифрованием по-прежнему остаются. Кроме того, мы не сможем так, как прежде, контролировать, где и что происходит, и утратим возможность отслеживать ситуацию еще в большей степени, чем раньше.
Истина: ничто из перечисленного нас не спасет
Да я и не уверен, что нас нужно спасать. Скажем просто: проблема в том, что на самом деле мы хотим обеспечить безопасность далеко не так сильно, как другие вещи, и ни операционные системы, ни ядра безопасности, ни контроль периметра, ни системы обнаружения вторжений и реакции на них, ни шифрование, ни виртуализация, ни темнота ночи этого не изменят. Но тем не менее просто сидеть в углу и критиковать – этого недостаточно, и мы должны ответить на следующий вопрос: как мы используем возможности, которые нам дает виртуализация, чтобы улучшить ситуацию с безопасностью?
Десять вещей, которые нужно знать о виртуализации
Для того чтобы любое решение обеспечения безопасности могло выдержать тщательную проверку, необходимо говорить о нем честно – гиперболы не сделают виртуализацию более безопасной, чем что-либо иное. Любое решение, которое мы придумываем, будет иметь свои ограничения, и нам нужно четко представлять, что мы имеем сейчас и какой ситуация станет в дальнейшем. Поэтому перечислим десять вещей, которые нужно знать о виртуализации и рассказывать каждому, кто говорит вам о ее способности решить мировые проблемы.
На что не следует рассчитывать
Во-первых, виртуализация не нова. По крайней мере, еще 30 лет назад на мэйнфреймах несколько операционных систем работали в виртуальных машинах. И, по крайней мере, 40 лет назад, когда программист приходил с колодой перфокарт и было несколько мэйнфреймов с необходимыми свойствами, эта колода запускалась на любой доступной машине, в зависимости от предпочтений оператора, доступных ресурсов и приоритетов. Поэтому не стоит рассчитывать на то, что виртуализация как-то повлияет на ситуацию, которую мы изучали еще 40 лет назад, или что это волшебное средство, которое изменит все или хотя бы что-то.
Во-вторых, виртуализация – это форма разделения. Она отделяет одни виртуальные вещи от других в пространстве и времени. Не рассчитывайте на то, что она решит поведенческие проблемы, проблемы управления контентом или проблемы шифрования и кодирования.
В-третьих, качество виртуализации – это качество механизмов, ее реализующих. Если мы не можем создать ядро или операционную систему, которые бы соответствовали нашим требованиям к безопасности, почему кто-то думает, что мы способны создать защищенную виртуальную среду, которая этим требованиям удовлетворяет? И если мы можем делать все остальные вещи, почему нам необходимо использовать виртуализацию, чтобы выполнить какое-то требование к безопасности?
В-четвертых, чтобы быть полезными, виртуальные системы должны взаимодействовать, поэтому нам потребуются все те же самые элементы управления, которые необходимы при взаимодействии невиртуальных систем. Это означает, что нам нужны межсетевые экраны, IDS, разделение процессов и т.д. Так что не рассчитывайте на то, что в эпоху виртуализации вам потребуется меньше этих защитных механизмов – лучше будьте готовы к тому, что их потребуется больше.
В-пятых, если мы не в состоянии безопасным образом управлять в одном месте одним компьютером, на котором работает одно ядро и одна операционная система с одним набором программного обеспечения, приложений и пользователей, почему кто-то думает, что мы можем это делать со множеством компьютеров во множестве мест и со множеством ядер, операционных систем, IDS и так далее? Разве это не безумие – снова и снова делать одно и то же и ожидать других результатов?
На что следует рассчитывать
В-шестых, виртуализация обеспечивает разделение на уровнях, где в противном случае разделение использовалось бы крайне редко. Например, в Web-браузерах виртуализация обеспечивает разделение между сессиями в различных «вкладках». Возможно, такое разделение уменьшит влияние нарушений защиты в одной виртуальной среде на другие среды в рамках одной и той же более крупной среды. Конечно, этот подход имеет множество унаследованных допущений, но, если он работает, поскольку существует готовность повысить качество этого разделения, это может дать позитивный эффект.
В-седьмых, виртуализация используется с целью разделить риски. В частности, распределенные процессорные ресурсы, которые можно переназначить, могут быть использованы как для злоупотреблений, так и для повышения надежности, в зависимости от того, как ими управляют. Точно так же сокращение числа операций, выполняемых данной виртуальной машиной, означает, что нарушения внутренней защиты могут распространяться только внутри данной виртуальной машины, без нарушения механизмов разделения между машинами или использования межмашинных коммуникаций для распространения угроз дальше. Конечно, есть побочный эффект, связанный с повышением риска агрегации оборудования, на котором теперь выполняется больше задач, чем раньше, когда каждая программа была «привязана» к одной физической машине: увеличиваются риски, связанные с перемещением операционных сред и контента с места на место и так далее, но такова природа компромисса.
В-восьмых, виртуализация может помочь, но не гарантирует, что распределение решений по инфраструктуре приведет к снижению уровня воздействия успешных атак на выбранные элементы инфраструктуры. Использование множества путей и избыточных механизмов могло бы помочь гарантировать целостность результатов и процессов, их порождающих. Это заставляет поступиться эффективностью в пользу целостности. Цель – построить надежные композиции из ненадежных компонентов.
В-девятых, для вещей, которые: не являются критически важными с точки зрения конфиденциальности или целостности; являются массовыми сервисами, доступными из любого числа более или менее эквивалентных источников; дают хакерам незначительное преимущество или когда крайне мала вероятность, что в результате будет причинен серьезный вред отельному пользователю (персональные сообщения электронной почты, неконфиденциальные события из календаря, доступ к механизмам поиска и т.д.) – для всех этих случаев виртуализация может представлять небольшой риск и предлагает значительно большую операционную эффективность, чем «собственные» инфраструктуры и системы. В этом смысле виртуальные вычисления похожи на туалетную бумагу. Нам она очень нужна, но нас не беспокоит, что у того или иного поставщика возникнут трудности, есть достаточно много других поставщиков, и, если производители не меняются уж слишком часто и не возникают существенные перерывы в работе, небольшие проблемы можно пережить.
Наконец, мы можем обоснованно рассчитывать на то, что гипербола виртуализации превосходит реальность в том, что касается безопасности, в то время как применение виртуализации превзойдет саму гиперболу совершенно неожиданным образом. Творческие люди найдут, как сделать творческие вещи, ценность которых для пользователей будет все время расти, причем так, чтобы задействовать виртуальные ресурсы. В результате все больше и больше людей будут использовать эти ресурсы для все более разнообразных целей, вне зависимости от последствий для безопасности.
Безопасность не может просто сказать виртуализации «нет»
Это предложение адресовано: людям, реализующим системы с проблемами, о которых уже известно (или должно быть известно); специалистам по безопасности, описывающим эти проблемы и пытающимся сказать «нет»; разработчикам, игнорирующим проблемы или уделяющим им минимум внимания; бизнесу, опирающемуся на плохо защищенные системы.
Конечно, легко стоять в стороне и указывать на проблемы, которые, скорее всего, появились из-за виртуализации и которые по большей части не будут «корректно» решены в соответствии с произвольными требованиями к защите конкретного человека или организации. По-существу, каждый читатель использует виртуализацию ежедневно и доверяет ей в той или иной степени, хотя часто чрезмерно. Получаете ли вы информацию о погоде из второстепенного источника в Интернете, прибегаете ли к помощи механизма поиска, бесплатно предоставляемого в Web, приобретаете ли товары в онлайне или просто звоните с помощью IP-телефонии, – во всех случаях есть вполне резонные основания для использования конкретных сервисов, и с ними работают, пока это имеет смысл.
Просто отказываться от виртуализации глупо и даже невозможно. Пользователи во всем мире переходят от настольных вычислений и модели хранения на сетевую модель. По мере того как ресурсы виртуализованных сред становятся все совершеннее, крупные и перспективные предприятия, обладающие знаниями, навыками и возможностями для того, чтобы самим защитить от крупномасштабных негативных последствий своих пользователей, сами же будут совершенствовать защиту в распределенных, но пока централизованных службах.
Главное здесь – понять, до какой степени и по какой цене вам нужна требуемая безопасность. Другими словами, это то же самое управление рисками, каким оно всегда и было. Представьте себе будущее, когда весь ваш контент находится в виртуализованной среде, зашифрованный средствами, которым вы доверяете и которыми вы управляете, и дублированный операторами и провайдерами. Со своего недорогого компьютера с простенькой защитой вы получаете доступ ко всем своим материалам, оперируя только изображениями на вашем экране. За это вы платите некоторым неудобством доступа к материалам по сети; потерей готовности, когда довольно большое количество сетей не работает; периодической платой за поддержку требуемых сервисов; затратами на модернизацию аппаратного обеспечения, которым вы пользуетесь.
Вы можете получать доступ по мере необходимости к огромному количеству вычислительных ресурсов и разделяемых наборов данных, используемых миллионами других людей по всему миру и защищенных вашими и их инвестициями. Вы можете использовать эти ресурсы для любых целей, которые только можете себе поставить. Вы платите лишь за то, что используете, и лишь тогда, когда вы это используете, в рамках всемирного сотрудничества, что обеспечивает невысокие цены и высокий уровень обслуживания на основе ограниченного общего объема использования за единицу времени. Между вашими провайдерами идет серьезная конкуренция, и нет серьезной «привязки» к тому или иному провайдеру. Поэтому, когда один провайдер увеличивает цены, сокращает сервисы или становится безразличен к вашим нуждам, вы можете быстро и прозрачно отказаться от его услуг в пользу услуг других.
Вам не нужно думать о поддержке сложной ИТ-инфраструктуры и о создании множества настроенных приложений. Однако, как побочный эффект, вы не получаете всего, что вам требуется, даже несмотря на то, что имеете доступ к множеству великолепных, хорошо продуманных и прекрасно спроектированных приложений и базовых механизмов. Вопрос заключается в том, для какой части ваших вычислительных потребностей вы можете согласиться на такое будущее.
Фред Коэн (fc@all.net) – президент California Sciences Institute и генеральный директор консалтинговой компании Fred Cohen & Associates.