Новые технологии, зарождающиеся в университетских лабораториях, помогут когда-нибудь найти лучшее решение, но это произойдет не ранее, чем через несколько лет. Тем временем модульная программа, вероятно, станет еще большей проблемой безопасности. Все больше и больше программных пакетов обладают способностью к самоусовершенствованию, то есть регулярно загружают новые модули. Например, Internet Explorer 4.0 и последующие версии дают возможность подписаться на обновление программного обеспечения. Если вы этим пользуетесь, то программа автоматически обновляется, загружая новые модули с веб-страницы корпорации Microsoft. Это очень полезное свойство, если не пускать дело на самотек. В противном случае вы можете обнаружить, что среди ночи ваш компьютер автоматически подсоединяется к Интернету. Как может на это отреагировать пользователь, видно по следующему отрывку из программы новостей:
«Ранним утром я полез в холодильник, и вдруг услышал, что компьютер сам подключился к Интернету, – рассказал один пользователь, занимающийся бета-тестированием
???
повредить его рабочим взаимоотношениям с Microsoft. – Я очень испугался и вытащил телефонную вилку из розетки».
Здесь нет ничего постыдного – пользователь просто не осознал, что происходит. Но большинство компьютерных пользователей не имеют ни малейшего представления, что происходит внутри их компьютеров. И если они привыкли, что их компьютер куда-то звонит среди ночи, они могут однажды с удивлением обнаружить, что какая-то гнусная программа резко увеличила сумму телефонного счета, позвонив по 900 номерам в Молдавии.
Если задуматься, использование программ, написанных кем-то другим, – это всегда риск. Вы принимаете на веру, что программист не злоумышленник и что программы, которые вы запускаете, работают так, как надо. (Мы снова вернемся к проблемам человеческого фактора в главе 17.) На заре существования вычислительной техники пользователи просто не имели возможности пользоваться чужими программами. Программы нужно было писать или, по крайней мере, компилировать для каждого компьютера особо.
Появление персональных компьютеров и таких программ, как VisiCalc, вынуло компьютеры из рук инженеров и поместило их на столы пользователей. Пользователи стали доверять готовым прикладным программам, они, не задумываясь, запускали программу, не имея представления о ее содержимом, поскольку не обладали достаточной для этого квалификацией.
Я уже говорил о вирусах и троянских конях; они распространились потому, что люди обменивались копиями готовых программ (иногда нелегально), не беспокоясь о проблемах безопасности. Антивирусные средства помогли решить проблему, и на протяжении последних 20 лет пользователи безоговорочно доверяли программному обеспечению.
Однако с появлением Интернета эта прочно укоренившаяся вера стала создавать крупные проблемы.
В предыдущем разделе я объяснил, почему появление сетей сделало разрушительные программы более опасными. Там приведены и примеры переносимого кода и связанные с ними проблемы. К сожалению, существуют и более серьезные неприятности.
С появлением модульных программ все больше фрагментов программного обеспечения рассылается по Интернету. Сейчас любое ваше приобретение с большой вероятностью получено с веб-сайта: новый дополнительный модуль для браузера, драйвер для принтера, блестящая утилита или апплет на Java, который делает какие-то классные штучки. Поэтому вам следует задать себе следующие важные вопросы. Надежна ли эта программа? Надежен ли этот веб-сайт? Можно ли быть уверенным, что эта программа будет правильно взаимодействовать с остальным содержимым компьютера? И какая есть защита на случай, если эта программа окажется разрушительной? Редко встречаются пользователи, которые задаются подобными вопросами, но еще реже – те, которые могут на них ответить.
JavaScript, Java, ActiveX и загружаемые дополнительные модули – все они имеют различные модели защиты. Я по очереди расскажу о каждом из них.
JavaScript – это язык сценариев Netscape, при помощи которого можно вставлять фрагменты кода на веб-страницу. Его поддерживают все основные браузеры. Его сходство с Java исчерпывается первыми четырьмя буквами. При помощи программы на JavaScript можно проделывать обычные простые действия: открывать и закрывать окна, изменять формы на веб-страницах, настраивать параметры браузера и т. п. Все, чем докучают некоторые веб-сайты при попытке закрыть их страницы, – это тоже JavaScript[32].
Сам по себе JavaScript достаточно безвреден, но именно он лежит в основе множества атак всех видов, предпринятых за последние несколько лет. Приведу несколько примеров: 1997 год – контроль посещаемости сайтов пользователями; 1998 – чтение случайно выбранных файлов на машине пользователя; тот же 1998 – перехват адреса электронной почты пользователя. Для большинства этих атак требуется слегка обмануть пользователя, заставив его сделать незначительную глупость, но это и не сложно. Недостатки в обеспечении безопасности браузеров, допускавшие такие атаки, были выявлены довольно быстро и устранены. Но регулярно обнаруживаются новые «дыры».
В ActiveX применяется защита при помощи подписывания кода. По сути, у каждого фрагмента кода ActiveX, называемого «control», проверяется цифровая подпись. (Microsoft вводит для этого понятие кода аутентичности.) После этого браузер открывает диалоговое окно и показывает пользователю имя программиста или компании, которые подписали код. Если пользователь соглашается принять код, программа загружается в браузер.
Любой подросток, к которому на вечеринку заявлялись случайные гости не лучшего сорта, знаком с этой проблемой. Безопасность системы полностью находится в руках пользователя. Как только код ActiveX проникает на машину пользователя, он может сделать все что угодно: переформатировать жесткий диск, изменить ваши однодолларовые ставки в тотализаторе на стодолларовые, собрать все ваши полные чувств любовные письма и послать их кинопродюсеру в Лос-Анджелес и пр. и пр.
Microsoft возразила, что подписи, конечно, будут указывать на автора, но это знание будет небольшим утешением человеку, у которого только что «рухнул» компьютер. Это все равно, что обязать преступников носить визитные карточки и перестать запирать двери на замок. «Мы сожалеем, что они вошли в ваш дом, съели всю вашу еду, сломали всю вашу мебель и унесли все ваши ценности. Но, по крайней мере, мы знаем, кто они». Причем в случае Интернета может быть такое уточнение: «Это были два подростка из страны, с которой у США нет договора об экстрадиции. Вам стало легче?» Кроме того, предполагается, что вы сможете определить, какая именно программа из десятков имеющихся у вас на жестком диске вызвала проблемы. Один исследователь показал, что при соединении двух безвредных средств управления ActiveX они способны стать разрушительными; и кто будет виноват в этом случае?
Существуют и более серьезные проблемы. В главе 17 подробно рассказывается о том, насколько сомнительно, что пользователи примут правильное и безопасное решение, здесь же достаточно сказать, что большинство людей не беспокоятся о том, каким средствам ActiveX можно доверять, а каким – нет. А это предполагает наличие инфраструктуры открытого ключа (PKI), поддерживающей подписи, о чем я еще буду сокрушаться в главе 15. Существует много возможностей обмануть PKI и заставить ее поверить, что средство управления подписано, когда это не так.
На самом деле ActiveX – это расширение старой системы компонентов Microsoft, так называемой DCOM. Это система, при помощи которой, например, Internet Explorer открывает и показывает таблицы Excel. Большинство используемых программами DLL на самом деле служат только транспортным средством для объектов DCOM. Explorer просто вставляет внутреннее содержимое книги Excel посредством DCOM и ActiveX. Это – невероятно мощная система, более гибкая, более доступная, более интересная архитектурно и невообразимо более опасная, чем аналогичные способы в других операционных системах.
32
Как наследие эпохи войны браузеров, имеется две версии JavaScript. Исходная, созданная Netscape, и вариация Microsoft под названием JScript. Они практически идентичны, за исключением объектных моделей браузера (читай: веб-документа) и синтаксиса языка сценариев. Тем не менее далеко не все сайты умеют одинаково работать с обеими моделями. Формально для безопасности это угрозы не представляет, но кто знает… Чем сложнее система, тем она потенциально незащищеннее. – Примеч. ред.