С точки зрения потребителя, это замечательно. Появилось больше возможностей выбора. С точки зрения профессионала в области безопасности, это ужасающее. Сложность – главный враг безопасности. Эта истина известна с момента появления компьютера и, вероятно, будет верна и в дальнейшем. И поскольку киберпространство продолжает усложняться, безопасность будет становиться все более хрупкой. Тому имеется несколько причин.
Первая причина – количество изъянов систем защиты. В главе 13 я рассказывал о надежности программного обеспечения и о ее связи с безопасностью. По мере усложнения системы возрастает и количество ошибок при выполнении программ, и число уязвимых мест защиты. Это происходит всегда. При усложнении программного обеспечения возрастает и количество ошибок. И процент этих ошибок будет влиять на безопасность, хотя это не всегда очевидно.
Вторая причина – модульная структура сложных систем. В главе 10 говорилось о модульном коде и связанных с ним проблемах безопасности. Сложные системы обязательно модульные; нет никакого другого способа управиться со сложностью системы, кроме как разбить ее на части, поддающиеся управлению. Мы никогда не смогли бы сделать Интернет таким сложным и интересным, каким он является, не прибегая к модульности. Но разрастание модульной структуры грозит ослаблением безопасности, поскольку взаимодействие модулей создает дополнительные возможности для взлома защиты.
Третья причина – это взаимосвязь сложных систем. Распределенные и объединенные в сети системы опасны по своей природе. Усложнение систем может привести к тому, что незначительные проблемы становятся неразрешимыми, – повлечь за собой эффект «бабочки» [62]. Мы уже наблюдали примеры того, как все становится доступным благодаря Интернету. В течение нескольких лет мы считали, что такие интернет-приложения, как почтовые программы, безопасны, но недавняя эпидемия макровирусов показала, что и Microsoft Word и Excel нуждаются в укреплении средств защиты. Апплеты Java должны не только быть безопасными в использовании, но также не допускать возможности применения их для нападения. При написании программного кода для веб-страниц используются тонкие взаимодействия между сценариями CGI, HTML, фреймами, программным обеспечением веб-сервера и cookies. В 2000 году баг Internet Explorer 5.0 блокировал правильную работу Windows 2000 при установке 128-битового шифрования. Фотокопировальные устройства, порты маршрутизаторов, RAID-массивы – ко всему этому можно получить доступ через Интернет, со всеми вытекающими отсюда угрозами для безопасности. Мошеннические драйверы принтера могут скомпрометировать Windows NT; файлы PostScript могут содержать вирусы. Вредоносный код, вложенный в сообщение электронной почты, может проникнуть через брандмауэр. Помните, я говорил о версии Windows NT, которая имела оценку безопасности С2, но только в том случае, если компьютер не подключен к сети и не имеет накопителя на гибких магнитных дисках? Помните WebTV-вирус? [63]Сколько пройдет времени, прежде чем кто-нибудь придумает вирус, поражающий сотовые телефоны? [64]
Четвертая причина в том, что чем сложнее система, тем она труднее для понимания. В главе 17 я рассказывал о манипуляциях людьми и о негативном влиянии человеческого фактора на безопасность. Эти проблемы обостряются из-за сложности систем. Люди, управляющие реальной системой, как правило, не обладают полным пониманием ее устройства, в том числе и проблем, связанных с безопасностью безопасности. А если кто-то плохо разбирается в вопросе, он, скорее всего, воспользуется помощью знающего человека. Сложность не только делает фактически невозможным создание безопасной системы, но и приводит к чрезвычайным трудностям в управлении ею.
Пятая причина – трудность анализа. В 18-21 главах я обрисовал процедуру проектирования и анализа систем безопасности: моделирование возможных угроз, определение механизмов защиты и проектирование системы безопасности. Чем сложнее система, тем тяжелее выполнить такой анализ. Все становится очень запутанным: спецификации, проект, создание и использование системы. Дерево атак для любой сложной системы становится гигантским. И, как мы уже неоднократно убедились, все это релевантно анализу безопасности.
Последняя, шестая причина – повышенные требования к испытаниям сложных систем. В главе 22 говорилось об испытаниях безопасности. Я доказывал, что единственно разумный способ исследования безопасности системы состоит в проведении тестирования непосредственно на ней. Однако чем сложнее система, тем труднее сделать такие оценки. Чем сложнее система, тем больше будет возникать ошибок, имеющих отношение к безопасности, и в спецификации, и в процессе разработки, и при вводе в действие. И, к сожалению, количество ошибок и трудности их распознавания растут не пропорционально возрастанию сложности, а намного быстрее.
Читать дальше