Секреты и ложь. Безопасность данных в цифровом мире - Шнайер Брюс
И наконец, атаки на домашний компьютер, принадлежащий одному моему другу и подсоединяющийся к Интернету через модем:
• двадцать шесть просмотров с целью обнаружить слабые точки;
• четыре обнаруженные попытки взлома компьютера во время поиска слабых точек;
• множество других хакерских трюков.
Фиксируя подобные события только в течение первой недели марта 2000 года, я воистину устал от этого занятия.
Обозревая получившийся список, можно сказать, что устрашающе действует прежде всего большое разнообразие проблем, слабых точек и атак. Слабые места имеются в программах, которые мы считаем защищенными; есть они даже в самих системах безопасности. Некоторые из них присутствуют в системах электронной коммерции, при конструировании которых наверняка учитывались вопросы безопасности. Одни из них есть в новых программах, другие – в программах, которые продаются уже в течение многих лет. Нередко поставщики программного обеспечения никак не хотят согласиться, что у их продукции имеются проблемы с безопасностью.
Первые семь дней марта 2000 года не были исключением. И в другие недели случались подобные происшествия, а некоторые из них были еще показательнее. Действительно, факты говорят о том, что положение вещей ухудшается: число «дыр» в системах безопасности, взломов и отказов постоянно возрастает. Даже если мы будем больше знать о безопасности (как сконструировать криптографические алгоритмы, как построить безопасную операционную систему), все равно обеспечить полную безопасность будет невозможно. Почему это так и что можно с этим сделать – и является предметом нашего разговора.
СистемыПонятие «система» относительно ново для науки. Восточные философы уже давно рассматривали мир как единую систему, состоящую из различных компонентов, но в западной традиции было принято разделять его на отдельные явления, развивающиеся в различных направлениях.
Машины только недавно стали системами. Подъемный блок – это машина; но лифт – это комплексная система, включающая много различных механизмов. Системы взаимодействуют: лифт взаимодействует с электрической системой здания, с его системой пожарной безопасности и, возможно, даже с его системой защиты окружающей среды. Компьютеры, взаимодействуя, образуют сети; сети, взаимодействуя, образуют более крупные сети… в общем, вы уловили идею.
Адмирал Грейс Хоппер говорил: «Жизнь была проще перед Второй мировой войной. После этого у нас появились системы». Это – очень проницательный взгляд на вещи.
Если вы используете концепцию систем, можно проектировать и строить в более крупном масштабе. Есть разница между созданием особняка и небоскреба, орудия и ракеты Patriot, посадочной полосы и аэропорта. Каждый может изготовить светофор, но разработать городскую систему транспортного контроля значительно сложнее.
Интернет, возможно, наиболее сложная система, которая когда-либо разрабатывалась. Она включает в себя миллионы компьютеров, объединенных в непредсказуемо сложные физические сети. На каждом компьютере работают сотни программ, некоторые из них взаимодействуют с программами, установленными на том же компьютере, другие – через сеть с программами, установленными на удаленных компьютерах. Система принимает сигналы от миллионов пользователей, часто одновременно.
Один человек сказал: «Сэр, это зрелище подобно собаке, стоящей на задних лапах. Удивительно не то, что она делает это недостаточно хорошо, а то, что она вообще способна это делать».
Системы имеют несколько интересных свойств, которые уместно здесь обсудить.
Во-первых, они сложны. Механизмы просты: молоток, дверные петли, нож для бифштексов. Системы же намного сложнее: они имеют компоненты, петли обратной связи, среднее время отклика, инфраструктуру. Цифровые системы весьма затейливы: даже простая компьютерная программа состоит из тысяч строчек кода, описывающего всевозможные разновидности различных операций. Сложная программа имеет тысячи компонентов, которые могут работать как по отдельности, так и во взаимодействии друг с другом. Именно для сложных цифровых систем было разработано объектно-ориентированное программирование.
Во-вторых, системы взаимодействуют, формируя еще более крупные системы. Это может быть сделано намеренно – программисты используют объекты, чтобы дробить большие системы на малые, инженеры подразделяют большие механические системы на малые подсистемы, и так далее, – или происходит естественным образом. Изобретение автомобиля привело к развитию современной системы дорог и магистралей, а она, в свою очередь, взаимодействуя с другими системами, существующими в нашем мире, породила то, что мы называем мегаполисом. Система контроля авиалиний взаимодействует с навигационной системой самолета и с системой предсказания погоды. Тело человека взаимодействует с другими человеческими организмами и с другими системами на планете. Интернет переплетается со всеми наиболее важными системами в нашем обществе.
В-третьих, системы обладают неожиданными свойствами. Другими словами, они иногда могут делать вещи, которых разработчики и пользователи не ожидают от них. Телефонная система, например, породила новый способ взаимодействия людей. (Александр Грэхем Белл не имел представления, что телефон станет прибором для осуществления персональной связи, – он предполагал использовать его для сообщений о приходе телеграммы.) Автомобили изменили пути, на которых люди встречаются, назначают свидания и влюбляются. Системы защиты окружающей среды в зданиях оказывают влияние на здоровье людей, что также сказывается на работе системы здравоохранения. Системы обработки текстов изменили способ их написания. У Интернета полно неожиданных свойств: вспомните об электронных покупках, виртуальном сексе, совместном авторстве.
И – четвертое: в системах имеются «баги»[1]. Они являются особой разновидностью ошибки. Их наличие – неожиданное свойство системы, не предусмотренное при ее создании. «Баги» принципиально отличаются от сбоев. Если где-то происходит сбой, продолжение работы невозможно. Когда же имеется «баг», работа продолжается, хотя объект, ее производящий, ведет себя «плохо»: возможно, неустойчиво, возможно, необъяснимо. «Баги» – уникальное свойство систем. Машины могут ломаться или портиться, или не работать вовсе, но только системы могут иметь «баги».
Системы и безопасностьВсе перечисленные свойства оказывают влияние на безопасность систем. Ухищрения – вот точное определение для безопасности на сегодняшний день, поскольку обезопасить сложную систему, подобную Интернету, трудно именно в силу ее сложности. Безопасность систем – дело сложное, а безопасность сложных систем в особенности.
Обычный для компьютеризованных систем механизм тиражирования игнорирует наличие системы как таковой и сосредоточен на отдельных машинах – такова технология… Поэтому мы загружены работой по выработке технологий безопасности: криптография, брандмауэры, инфраструктура ключей общего доступа, сопротивление несанкционированному доступу. Эти технологии просты для понимания и обсуждения и достаточно просты в использовании. Но было бы наивно полагать, что они способны неким таинственным образом наполнить системы свойством:
Security
( Безопасность )
Увы, так не случается, и подтверждение тому можно видеть в моем отчете за 7 дней марта 2000 года. Причина большинства событий, связанных с нарушением безопасности, коренится в четырех свойствах систем, рассмотренных ранее:
• Сложность. Проблемы безопасности в Active Directory операционной системы Windows 2000 прямо вытекают из сложности любой компьютерной системы каталогов. Я думаю, что они зиждятся на недостатке, заложенном при проектировании: Microsoft применила конструкторское решение, обеспечивающее удобство пользователям, но небезупречное с точки зрения безопасности.