Бурный рост Internet вместе с существенным набором новых возможностей и услуг приносит и ряд новых проблем, наиболее неприятной из которых, безусловно является проблема безопасности. Даже беглый анализ компьютерной прессы показывает, что проблема безопасности и сохранности информации, помещаемой в Internet или во внутренние корпоративные Intranet-системы, стоит достаточно остро. Поэтому неудивительно, что все компании-производители ПО для Internet вводят в свои продукты все более совершенные средства защиты информации.

Цель этой статьи - рассмотреть проблемы, которые могут возникнуть у администраторов узлов и у пользователей WWW, как они решаются в нескольких популярных WWW-серверах и дать некоторые советы по построению безопасного web сервера и безопасной работы пользователя в Web.

Что же может произойти с вашей информацией, если не заботиться о ее безопасности ?

Во-первых, это утрата конфиденциальности.

Ваша личная информация может остаться в целостности, но конфидециальна больше не будет, например кто-нибудь в Интернете получит номер вашей кредитной карточки.

Во-вторых, это Модификация.

Ваша информация будет модифицирована, например ваш заказ в on-line магазине или ваше резюме.

В-третьих, подмена информации, которая может быть 2 типов.

1)WWW сервер может выдавать себя за другой, каковым он не является.

2)WWW сервер может действительно существовать под этим именем и заявлять, например, что это online магазин, но в действительности никогда не посылать никаких товаров, а только собирать номера кредитных карточек.

Атака на информацию может быть совершена несколькими путями.

Во-первых, это атака на систему клиента со стороны сервера.

Хакер, у которого есть свой WWW сервер, может постараться при помощи Java некорректных апплетов и JavaScript приложений, встроенных в HTML документ, вывести из строя пользовательскую систему, или получить информацию о ней, которая позволит ему взломать машину пользователя.

Во-вторых, атака на сервер со стороны клиента.

Хакер может через www клиента может попытаться вывести пользовательскую систему или www сервер из строя, или получить доступ к информации, доступа к котой у него нет. Для этого он может использовать дырки в безопаснсти в CGI приложениях, плохую настройку сервера, попытаться подменить CGI приложение.

И наконец, информация может быть украдена третьей стороной при ее передаче.

Рассмотрим как решаются эти проблемы в серверах WN, Apache, Netscape. Они весьма популярны и, насколько известно, никогда не содержали дырок внутри самого сервера.

Потом коснемся другого аспекта web сервера - CGI приложений. Рассмотрим как клиент может атаковать сервер через CGI, как этого избежать.

Далее, рассмотрим четвертую проблему - атака на клиента через Java и JavaScript.

World wide web серверы и проблема безопасности информации.

Среди WWW серверов отличаются отсутствием известных проблем с безопаcностью отличаются Netscape серверы, WN и apache.

WN сервер.

Автор этой статьи использовал этот сервер с момента его появления. Это свободно распростроняемый сервер, доступный для множества UNIX платформ. Основными целями при его создании были безопасность и гибкость. WN сервер содержит в каждой директории маленькую базу данных (список) докуметов содержащихся в ней. Если документ не перечислен

в базе данных, клиент получить его не может. Базы данных либо генерируется специальной программой автоматически для всех файлов в дереве директорий, либо другой программой создаются из текстовых описаний, которые создаются вручную. В эти файлы, кроме перечиления документов можно вставлять HTML текст, т.к это аналог index.html в этом сервере.

Администратору web узла разбираться в сгенерирорванных файлах особой необходимости нет, но в принципе они аналогичны .cache файлам gopher. Сам сервер имеет разновидность для одновременной обработки gopher и http запросов к одним и тем же документам.

Безопасность выполнения CGI

приложений обеспечивается выставлением uid/gid для нужного файла этой базы данных. Безо всякого программирования и особой настройки WN сервер обеспечивает 8 возможностей поиска внутри документов, имеет интерфейс к WAIS серверу. Вы можете включать одни документы внутрь других на серверной стороне ( например стандартные сообщения вначале и в конце докумета ) Можете применять фильтры к любому документу, для получения необходимого документа на выходе ( например подстановка слов ). Для обращения к документу можно использовать URL типа , чтобы получить строки с 20 по 30. Документация к серверу очень хорошая, устанавливается он быстро, обнаруженные ошибки исправляются в течении нескольких дней.

Apache сервер - это свободно распространяемый WWW сервер для различных UNIX платформ и Windows NT, один из самых популярных в мире. Сейчас apache работает на 36 процентах от общего количества всех HTTP серверов в мире.Это быстрый и стабильный сервер. В сервер можно встроить SSL протокол, рассмотренный ниже на примере Netscape сервера.

Netscape Enterprise сервер.

Netscape Enterprise Server - это высокопроизводительный, защишенный World Wide Web сервер для создания, распростронения, публикации информации в Интернете и выполнения сетевых интернетовских приложений, используя средства, базирующиеся на языках Java и JavaScript.

Netscape FastTrack сервер.

Netscape FastTrack сервер - это решение для тех, кого не устраивает цена и сложность Netscape Enterprise сервера. Он прост в использовании, разработанного чтобы позволить новичкам создавать и администрировать WWW сервер.

Серверы Netscape имеют встроенные средства безопасности коммерческой информации и коммуникаций. Гибкая авторизация пользователя контролирует доступ к отдельным файлам и директориям, используя имя пользователя и пароль, имя домена, имя машины, IP адрес, клиентские сертификаты ( client-side certificates ), именованные группы. Дополнительные черты безопасности обеспечиваются протоколом Secure Socket Layer 3.0 (SSL 3.0) и механизмом открытых ключей.

SSL 3.0 - это последняя версия широко распространенного в Интернете стандарта, разработанного Netscape Communications corporation.

SSL протокол обеспечивает конфиденциальность, целостность и аутентичность информации.

Конфиденциальность и целостность информации обеспечивается посредством шифрования с открытым ключом. Аутентикация обеспечивается посредством цифровых сертификатов, которые почти невозможно подделать. Сертификат необходимо получать от третьей стороны, которой обе стороны доверяют.

SSL протокол - это схема шифрования низкого уровня, используемая для шифрования транзакций в протоколах высокого уровня, таких как HTTP, NNTP и FTP. SSL протокол содержит методы для идентефикации сервера для клиета, шифрование данных при передаче и дополнительно, верификации клиента для сервера. Из коммерческих систем SSL протокол сейчас реализован в Netscape навигаторах и Netscape серверах. ( Реализованы шифрование данных и авторизация сервера, авторизация клиента нет ).

Существует также свободно распростроняемая версия SSL, называемая SSLeay.

Она содержит исходный код на C, который может быть встроен в такие приложения, как Telnet и FTP. Поддерживаются также свободно распространяемые Unix Web серверы Apache и NCSA httpd и несколько Web клиентов, включая Mosaic. Этот пакет может быть использован бесплатно для коммерческих и некоммерческих приложений.

Механизм открытых ключей обеспечивает шифрование данных припомощи открытого ключа(public key). В традиционных системах шифрования один и тот же ключ использовался для шифрования и дешифрования. В новом открытом или ассиметричных системах шифрования ключи идут парами: один ключ используется для кодирования, другой для декодирования. Один из этих ключей, называемый открытым ключом, свободно распростроняемый и используется для кодирования сообщений. Другой ключ, называемый личным ключом (private key) засекречен и используется для декодирования поступающего сообщения. В этой системе пользователь, посылющий сообщение второму пользователю может зашифровать сообщение открытым ключом второго пользователя.

Сообщение может дешифровано владельцем секретного личного ключа второго пользователя. Эта система может быть использована для создания неподделываемых цифровых подписей. В Netscape Enterprise Server администраторы могут динамически изменять ключи для сервера, что позволяет оперативно изменять политику авторизации.

Netscape серверы и навигаторы осуществляют шифрование используя или 40-битный ключ или 128-битный ключ. В принципе можно взломать 40-битный ключ, перебирая каждую возможную комбинацию ( всего 2^40 ) пока Вы не обнаружите, что сообщение расшифровано. Взломать 128 битный ключ практически нереально.

CGI (выполняющиеся на сервере) программы и проблема безопасности.

Проблема безопасности c CGI программами состоит в том, что каждая из них может содержать ошибку, приводящую к нарушению безопасности сервера. При их написании надо думать о безопасности так же как и при написании WWW сервера, потому что CGI программа - это сервер в миниатюре.

Многие CGI приложения, широко и свободно распространяемые по Internet имеют проблемы с безопасностью. Прежде чем устанавливать найденное в Интернете приложение у себя на сервере необходимо его внимательно изучить и понять, что и как оно делает.

CGI программы могут содержать ошибки безопасности двух типов:

1)Они могут сообщить информацию о системе, на которой работает WWW сервер, что поможет хэкерам ее взломать.

2)Программы, которые обрабатывают ввод пользователя, могут быть подвержены попыткам запустить команды на серверной машине.

В общем случае для обеспечения безопасности мы рекомедуем:

1) При написании CGI приложений.

-Не давать клиенту слишком много информации о сервере и серверной машине;

-Не делать предположений о максимальной длинне ввода со стороны пользователя; -Никогда не передавать необработанного ввода на вход команды shell.

-Не пользоваться относительными путями и переменной PATH.

2)При использовании CGI приложений:

-Хранить CGI приложения в одной директории закрытой на запись от пользователей. -Не распространять работающего у вас на сервере текст CGI приложения, если вы не стремитесь сделать текст своего CGI приложения общедоступным. Ососбенно стоит быть внимательным если WWW и FTP сервер находятся на одной машине. На практике встречаются такие серверы, где через FTP можно добраться до тестов CGI приложений на Perl.

-Надо следить, чтобы никто не подменил CGI программы.

На многопользовательских WWW серверах, для того чтобы WWW приложения выполнялись не под именем сервера ( nobody,http,www ), а под именем и с полномочиями владельца CGI приложения, используется CGIWrap через URL из

HTML документа.

Влюбом случае WWW сервер должен выполняться не под именем root, а под непривелигерованным именем, лучше под своим собственным, а не nobody.

Java, JavaScript и проблема безопасности.

Java и JavaScript - это тот раздел безопасности Web, который касается не администраторов и создателей Web серверов, а пользователей и администраторов пользовательских сетей.

Несмотря на сходство в именах Java и JavaScript это две различных продукта. Java - это язык программирования разработанный SunSoft. Java программы прекомпилируются в компактную форму и хранятся на сервере. HTML документы могут ссылаться на миниприложения, называемые Java аплетами. WWW клиенты, которые поддерживают Java апплеты, загружают откомпилированные Java приложения и выполняют их на машине клиента.

JavaScript это набор расширений к HTML, интерпретируемых WWW клиентом.

В принципе, несмотря на то что JavaScript имеет более длинную историю проблем, связанных с безопасностью, хакерская программа на Java может активно и успешно вывести пользовательскую систему из строя, про JavaScript до сих пор известны только случаи передачи конфиденциальной информации клиента на Web сервер.

Java апплеты выполняются на клиентской стороне, а не на серверной, и поэтому увеличивают риск атаки со стороны сервера. Нужно ли беспокоится об этом ?

В Java встроены средства для ограничения доступа к клиентской машине. Апплетам не разрешается выполнять системные команды, загружать системные библиотеки, или открывать системные устройства, такие как диски. Апплетам, в зависимости от WWW клиента или запрещены все дисковые операции ( Netscape ), или почти все ( HotJava ).Апплетам разрешается устанавливать соединение по сети только к серверу, откуда аплет был загружен. Но Drew Dean ( ddean@cs.princenton.edu ) обнаружил, что можно написать апплет, который будет устанавливать соединение к любому компьютеру в интернете, то есть аплет из Интернета, загруженный на вашу локальную машину WWW клиентом может подсоединиться по TCP/IP к любой машине на вашей локальной сети, даже если она защищена через firewall. Эта проблема связана с тем, что Java выполняет верификацию для соединения через Domain

Name System (DNS). Взломщик используя свой собственный DNS сервер может создать некорректную ссылку в DNS, чтобы заставить Java систему считать, что апплету разрешено соединение с компьютером к которому у него нет права подсоединяться. Ошибка была исправлена в Netscape навигаторе 2.01 и JDK 1.0.1.

David Hopwood обнаружил, что загружая апплеты с 2 разных WWW серверов хэкер может нарушить пространство имен Java Virtual Machine. Это позволяет преобразовывать типы переменных друг в друга, преобразовывать целые в ссылки и т.д. В результате апплет может читать и писать локальные файлы, выполнять машинный код. Безо всяких проблем в UNIX может быть создан файл .rhosts. Эта ошибка проявляется, как минимум на HotJava, код может быть написан целиком на Java и быть платформонезависимым.

В настоящих версиях Java возможны трюки с вызовом конструктора суперкласса,

в результате чего этот вызов может быть пропущен. Это связано с алгоритмом, который сейчас использует интерпретатор Java. Возможные пути для этого:

-super внутри try.

-super внутри if.

-cathcer/thrower.

JavaScript - это встроен в Netscape навигатор. Перидически в Netscape навигаторе обнаруживались проблемы с безопасностью в связи с JavaScript, которые Netscape периодически устраняет в новых версиях навигатора. Andy Augustine в своем JavaScript FAQ описывает следующие проблемы: 1)Чтение пользовательской истории URL - исправлено в Netscape 2.0. 2)Чтение пользовательского кэша URL - исправлено в Netscape 2.0. 3)Чтение пользовательского e-mail адреса и передача его по Интернету исправлено в Netscape 2.01.

4)Получение рекурсивного оглавления файловой системы - исправлено в Netscape 2.01.

5)Открытие окна размером 1 пиксел, получение URL открытых документов и передача их удаленному серверу. Эта общая проблема сетевых графических систем, имеющая длинную историю. Пользователи x-windows, которые запускают команду

`xhost +` без аргументов могут столкнуться с чужим невидимым окошком, которое передает ввод пользователя по Интернету хакеру.

Для того чтобы работать с Java и JavaScript приложениями без проблем с безопасностью рекомедуется:

-Не пользоваться старыми версиями WWW клиентов, которые поддерживают Java и JavaScript. Производители web клиентов исправляют свои программы, если обнаруживается новая ошибка в безопасности.

-Следить за текущим состоянием дел с безопасностью Java и Javascript. Javasoft имеет страницу, посвещенную Java и безопасности. У netscape есть аналогичная страница про JavaScript. Каждый производитель web клиента имеет на своем сервере страницу посвещенную безопасности.

В заключении приведем несколько общих правил, которые помогут Вам избежать многих проблем.

1.При создании web сервера используйте надежный продукт. Используйте web сервер, который подходит под ваши нужды, не обязательно самый всеобьемлющий и модный.

2.Читайте докуметацию сервера. Недостаки в настройке чаще создают проблемы с безопасностью нежели ошибки в самом сервере.

3.Не забывайте про SSL протокол, если речь идет о коммерческой информации.

4.Заботьтесь о безопасности CGI приложений, так как это части самого сервера. Не забывайте проверять и чужие CGI приложения, если у Вас многопользовательский сервер.

5.Не пользуйтесь старыми версиями Web клиентов с поддержкой Java и JavaScript. Следите за обновлениями.