Глава 23
Будущее программных продуктов
Напрашивается закономерный вопрос: «Какие технологии помогут созданию продуктов, обеспечивающих безопасность, в будущем?» Конечно, криптография постоянно улучшается. Несомненно, мы все лучше и лучше проектируем брандмауэры. Будет ли это помогать? Ответ: и да, и нет. «Да» – потому что отдельные технологии непрерывно совершенствуются. «Нет» – потому что фундаментальные проблемы остаются.
Технологии развиваются. Центральные процессоры стали намного быстрее работать, чем десять лет назад, что дает возможность применять шифрование почти повсеместно. Например, можно полностью зашифровать цифровую сотовую связь с помощью сильных алгоритмов без видимого замедления работы.
Технологии компьютерной и сетевой безопасности тоже совершенствуются. Сегодняшние брандмауэры намного эффективнее разработанных 10 лет назад. Системы обнаружения вторжения все еще находятся на ранней стадии развития, но и они постепенно улучшаются.
И это верно почти для каждой технологии, обсуждавшейся во части II книги. Технологии защиты от несанкционированного доступа становятся качественнее, то же можно сказать и о биометрических технологиях. Мы даже создали более эффективные механизмы защиты цифровых копий (несмотря на вскрытие DVD).
Но кое-что остается неизменным – основы технологий и люди, использующие их. Криптография всегда будет не больше, чем математика. Недостатки безопасности всегда будут присутствовать в программном обеспечении. Пользователи никогда не захотят запоминать длинные пароли. Люди будут всегда уязвимы для манипуляций.
Ситуация ухудшается. Системы становятся более сложными, и для компьютерных систем это означает нечто большее, чем аналогичные усовершенствования в любой другой области. Будущее цифровых систем – сложность, а сложность – главный враг безопасности. Безопасность не укрепляется, а становится более уязвимой.
Цифровая технология представляет собой нескончаемый ряд новшеств, непредсказуемых последствий и неожиданностей, и нет никакой причины полагать, что это прекратится в обозримом будущем. Единственная вещь, которая остается неизменной, – это то, что цифровые системы постоянно усложняются.
В течение последних нескольких лет мы наблюдаем этот процесс. Микропроцессоры стали более сложными. Операционные системы и программы тоже усложнились. Иногда без достаточно веской причины: существует целое моделирование виртуального полета, скрытое в каждой копии Microsoft Excel 97[61]. Компьютеры и сети стали более сложными. Появились сложные сетевые службы, загружаемые в память модули, программные агенты и распределенная обработка данных. Отдельные сети объединились, что привело к дальнейшему возрастанию сложности. Интернет, вероятно, – наиболее сложная система, когда-либо созданная человечеством. И она не станет более простой в ближайшее время.
Глобальная финансовая система стала более сложной. Цифровые системы в вашем автомобиле, посудомоечной машине и тостере стали сложными. Усложнились смарт-карты, а также сети, которые их обслуживают. Дверной замок вашего гостиничного номера, сигнализация, сотовые телефоны, система контроля состояния окружающей среды – все стало более сложным. Букингемский Фонтан в Чикаго управляется удаленным компьютером, находящимся в Атланте.
С точки зрения потребителя, это замечательно. Появилось больше возможностей выбора. С точки зрения профессионала в области безопасности, это ужасающее. Сложность – главный враг безопасности. Эта истина известна с момента появления компьютера и, вероятно, будет верна и в дальнейшем. И поскольку киберпространство продолжает усложняться, безопасность будет становиться все более хрупкой. Тому имеется несколько причин.
Первая причина – количество изъянов систем защиты. В главе 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 говорилось об испытаниях безопасности. Я доказывал, что единственно разумный способ исследования безопасности системы состоит в проведении тестирования непосредственно на ней. Однако чем сложнее система, тем труднее сделать такие оценки. Чем сложнее система, тем больше будет возникать ошибок, имеющих отношение к безопасности, и в спецификации, и в процессе разработки, и при вводе в действие. И, к сожалению, количество ошибок и трудности их распознавания растут не пропорционально возрастанию сложности, а намного быстрее.
61
Неудачный пример. «Пасхальные яйца» – неотъемлемая принадлежность большинства программных систем. Тот же симулятор полета в Excel 97 занимает ничтожную часть суммарного кода Office и скрыт от лишних глаз (переходим в ячейку X97:L97, нажав F5. Нажимаем Enter, Tab, Ctrl+Shift вместе со значком «Мастер диаграмм»). А до него – в Excel 95 – мы наблюдали встроенный Doom. В Excel 2000 мы можем поучаствовать в полноценных автогонках со стрельбой (предварительных операций нужно проделать еще больше). Списки разработчиков и даже фотографии есть почти в каждом программном продукте. Такие шалости появились одновременно с первыми программами и не могут служить аргументом в разговоре об усложнении программных продуктов. – Примеч. ред.
62
«Суть идеи прекрасно сформулирована в рассказе Рея Брэдбери "И грянул гром"… Начальные отклонения с течением времени нарастают, малые причины приводят к большим следствиям… взмах крыльев бабочки в неустойчивой системе может со временем вызвать бурю, изменить погоду в огромном регионе.» – С. П. Капица, С. П. Курдюмов, Г. Г. Малинецкий, «Синергетика и прогнозы будущего». – Примеч. ред.
63
WebTV – телеприставка от Microsoft с выходом в Интернет, предоставляет дополнительные услуги – электронная почта, просмотр веб-страниц др., считается безопасной в отношении вирусов. В начале 2000 года в форумах и телеконференциях WebTV распространился Flood Virus, первый в мире для такого рода устройств, с механизмом размножения по принципу «Мелиссы» – путем изменения подписи под размещаемыми пользователями сообщениями. Засорение форумов и досок объявлений лавиной сгенерированных сообщений выводит их из строя. Microsoft, как всегда, все опровергала («Это не вирус. На WebTV не может быть вирусов»), кивая на злонамеренный программный код. Но в 2002 году был зарегистрирован новый представитель телевирусов – WebTV 911. Пользователи (ныне MSNTV), открывшие вложение в сообщение электронной почты, не предполагали, что тем самым позволяют вирусу перезагрузить модем для входа в командный режим, после чего вирус при помощи стандартной команды hayes-модемов (+++ATH0) набирал номер 911, а полиция не заставляла себя ждать. – Примеч. ред.
64
В то время, когда печаталась эта книга, вирус SMS-Flooder уже поражал германские телекоммуникационные сети, круглосуточно затапливая их SMS-ссобщениями, пользуясь функцией саморассылки почтового клиента Microsoft; в Испании I-Worm.Timofonica рассылал SMS случайным пользователям сети MoviStar. Всего за несколько месяцев появился ряд вирусов, воздействующих на сети сотовой связи. В Норвегии некоторые такие SMS вызывали блокировку кнопок мобильных телефонов Nokia (вплоть до необходимости разрядки аккумулятора и замены SIM-карты). Это – самая малость того, что может сделать вирус, имеющий доступ к коммуникационным интерфейсам Windows (MAPI – почтовый и TAPI – телефонный), нещадно эксплуатируемым вирусами и закладками (запись переговоров, снятие денег со счета и т. д.). В интерфейс современных моделей телефонов («щелкни & звони») на радость хакерам уже заложена возможность самораспространения вирусов по принципу «Мелиссы». – Примеч. ред.