Интернет, возможно, наиболее сложная система, которая когда-либо разрабатывалась. Она включает в себя миллионы компьютеров, объединенных в непредсказуемо сложные физические сети. На каждом компьютере работают сотни программ, некоторые из них взаимодействуют с программами, установленными на том же компьютере, другие – через сеть с программами, установленными на удаленных компьютерах. Система принимает сигналы от миллионов пользователей, часто одновременно.
Один человек сказал: «Сэр, это зрелище подобно собаке, стоящей на задних лапах. Удивительно не то, что она делает это недостаточно хорошо, а то, что она вообще способна это делать».
Системы имеют несколько интересных свойств, которые уместно здесь обсудить.
Во-первых, они сложны. Механизмы просты: молоток, дверные петли, нож для бифштексов. Системы же намного сложнее: они имеют компоненты, петли обратной связи, среднее время отклика, инфраструктуру. Цифровые системы весьма затейливы: даже простая компьютерная программа состоит из тысяч строчек кода, описывающего всевозможные разновидности различных операций. Сложная программа имеет тысячи компонентов, которые могут работать как по отдельности, так и во взаимодействии друг с другом. Именно для сложных цифровых систем было разработано объектно-ориентированное программирование.
Во-вторых, системы взаимодействуют, формируя еще более крупные системы. Это может быть сделано намеренно – программисты используют объекты, чтобы дробить большие системы на малые, инженеры подразделяют большие механические системы на малые подсистемы, и так далее, – или происходит естественным образом. Изобретение автомобиля привело к развитию современной системы дорог и магистралей, а она, в свою очередь, взаимодействуя с другими системами, существующими в нашем мире, породила то, что мы называем мегаполисом. Система контроля авиалиний взаимодействует с навигационной системой самолета и с системой предсказания погоды. Тело человека взаимодействует с другими человеческими организмами и с другими системами на планете. Интернет переплетается со всеми наиболее важными системами в нашем обществе.
В-третьих, системы обладают неожиданными свойствами. Другими словами, они иногда могут делать вещи, которых разработчики и пользователи не ожидают от них. Телефонная система, например, породила новый способ взаимодействия людей. (Александр Грэхем Белл не имел представления, что телефон станет прибором для осуществления персональной связи, – он предполагал использовать его для сообщений о приходе телеграммы.) Автомобили изменили пути, на которых люди встречаются, назначают свидания и влюбляются. Системы защиты окружающей среды в зданиях оказывают влияние на здоровье людей, что также сказывается на работе системы здравоохранения. Системы обработки текстов изменили способ их написания. У Интернета полно неожиданных свойств: вспомните об электронных покупках, виртуальном сексе, совместном авторстве.
И – четвертое: в системах имеются «баги»[1]. Они являются особой разновидностью ошибки. Их наличие – неожиданное свойство системы, не предусмотренное при ее создании. «Баги» принципиально отличаются от сбоев. Если где-то происходит сбой, продолжение работы невозможно. Когда же имеется «баг», работа продолжается, хотя объект, ее производящий, ведет себя «плохо»: возможно, неустойчиво, возможно, необъяснимо. «Баги» – уникальное свойство систем. Машины могут ломаться или портиться, или не работать вовсе, но только системы могут иметь «баги».
Системы и безопасность
Все перечисленные свойства оказывают влияние на безопасность систем. Ухищрения – вот точное определение для безопасности на сегодняшний день, поскольку обезопасить сложную систему, подобную Интернету, трудно именно в силу ее сложности. Безопасность систем – дело сложное, а безопасность сложных систем в особенности.
Обычный для компьютеризованных систем механизм тиражирования игнорирует наличие системы как таковой и сосредоточен на отдельных машинах – такова технология… Поэтому мы загружены работой по выработке технологий безопасности: криптография, брандмауэры, инфраструктура ключей общего доступа, сопротивление несанкционированному доступу. Эти технологии просты для понимания и обсуждения и достаточно просты в использовании. Но было бы наивно полагать, что они способны неким таинственным образом наполнить системы свойством:
<reverence type – 'hushed'> Security </reverence>
(<тип уважения = 'секретность'> Безопасность </уважение>)
Увы, так не случается, и подтверждение тому можно видеть в моем отчете за 7 дней марта 2000 года. Причина большинства событий, связанных с нарушением безопасности, коренится в четырех свойствах систем, рассмотренных ранее:
• Сложность. Проблемы безопасности в Active Directory операционной системы Windows 2000 прямо вытекают из сложности любой компьютерной системы каталогов. Я думаю, что они зиждятся на недостатке, заложенном при проектировании: Microsoft применила конструкторское решение, обеспечивающее удобство пользователям, но небезупречное с точки зрения безопасности.
• Взаимодействие. Взаимодействие между программным обеспечением вебсайта Intuit и программным обеспечением DoubleClick, производящее отображение объявлений пользователей, привело к утечке информации от одного к другому.
• Неожиданность. Судя по сообщениям в прессе, программисты Sony не знают, как происходит утечка информации о кредитных картах от одного пользователя к другому. Она просто происходит.
• «Баги». Уязвимость Netscape Enterprise Server 3/6 была следствием программного «бага». Нарушитель мог использовать этот «баг», породив проблему для безопасности.
Многие страницы этой книги (особенно в третьей ее части) посвящены детальному объяснению, почему безопасность мыслится как система внутри большой системы, но пока я хочу, чтобы для начала вы просто держали в голове две вещи.
Первое – это соотношение между теорией и практикой безопасности. Существует целая куча теорий безопасности: теория криптографии, теория брандмауэров и обнаружения вторжения, теория биометрик. В истории полно примеров, когда система была основана на великой теории, но терпела поражение на практике. Йоги Берра однажды сказал: «В теории нет различия между теорией и практикой. На практике есть».
Теоретические изыскания лучше всего подходят для идеальных условий и лабораторных установок. Самая популярная шутка на занятиях физикой в моем колледже была: «Рассмотрим сферическую корову с равномерно распределенной плотностью». Некоторые вычисления мы можем производить только для идеализированной системы: реальный мир гораздо сложнее, чем теория. Цифровые системы безопасности также подчиняются этому закону: мы можем сконструировать идеализированные операционные системы так, что они, вероятно, будут безопасными, но мы не можем заставить их действительно безопасно работать в реальном мире. В реальном мире существуют несоответствия проекту, неприметные изменения и неправильные реализации.
Реальные системы не подчиняются теоретическим решениям. Совпадения случаются только тогда, когда сферическая корова обладает такими же неожиданными свойствами, как и реальная Буренка. Именно по этой причине ученые – не инженеры.
Вторая важная вещь, которую нужно помнить – это соотношение между предупреждением, обнаружением и реагированием. Хорошая защита объединяет все три звена: безопасное хранилище, чтобы сохранить ценности, сигнализацию, чтобы обнаружить грабителей, если они захотят туда проникнуть, и полицию, которая отреагирует на сигнал тревоги и поймает грабителей. В системах компьютерной безопасности наблюдается тенденция полагаться в основном на упреждающие меры: криптография, брандмауэры и т. д. В большинстве случаев в них не заложено обнаружения и почти никогда нет реагирования и преследования. Такая стратегия оправдана только тогда, когда предупредительные меры совершенны: в противном случае кто-нибудь наверняка сможет сообразить, как их обойти. Большинство уязвимых мест и, соответственно, нападений, описанных в данном разделе, – это результат несовершенства превентивных механизмов. В реальности же нашего мира обнаружение и реагирование очень существенны.
Компьютерную безопасность часто представляют абстрактно: «Эта система защищена». Продавец программного обеспечения может сказать: «Эта программа гарантирует защиту вашей сети» или «Мы обеспечиваем безопасность электронной коммерции». Подобные заявления неизбежно несут на себе отпечаток наивности и упрощенчества. Это означает, что обращается больше внимания на безопасность программы, чем на безопасность системы. Первый вопрос, который следует задать в таком случае: «От кого и от чего защищена система?»