На главную | Содержание | Назад | Вперёд
Наши друзья

 

 

Доверие к входным данным

Среди разработчиков и программистов бытует распространенное предположение, что пользователи их программ будут вести себя благоразумно. К сожалению, это не так. Злоумышленники действительно существуют, и особенно быстро это проявля­ется, когда программное обеспечение принимает непроверенные данные из Internet. Другим широко распространенным заблуждением является идея, что пользователь­ский интерфейс клиентской программы не подходит для генерации определенных входных данных, т.е. ничего плохого якобы произойти просто не может. И это не со­

ответствует действительности. Злоумышленнику вовсе не нужно использовать оп­ределенный программный код клиентского приложения для генерации данных для сервера. Хакер может просто подготовить нужные биты данных и отправить их по сети. Оба описанных предположения составляют основу большинства проблем, свя­занных с чрезмерным доверием к входным данным.
Любые данные, которые не входят в состав программного обеспечения сервера, не могут и не должны считаться надежными. Выражение "безопасность на стороне клиента" можно рассматривать как бессмысленное сочетание противоположных по значению слов. Следует пользоваться простой аксиомой, что все клиенты могут быть взломаны. Безусловно, здесь главная проблема — это доверие к клиенту. Сле­пое доверие клиенту и непосредственную обработку предоставленных им данных нельзя назвать удачным решением, однако часто именно такое решение реализуется на сервере.
Рассмотрим стандартную проблему. Если непроверенные данные будут считать­ся надежными и входные данные будут использоваться для создания имени файла или доступа к базе данных, то программа-сервер предоставит беспрепятственный доступ клиента к системе. Неоправданное доверие является постоянной, и, возмож­но, одной из самых серьезных проблем для системы безопасности. Система не долж­на доверять данным, отправляемым потенциальным злоумышленником. Данные пользователей всегда должны рассматриваться как нечто вредоносное. Программы, в которых используются входные данные из Internet (пусть даже для фильтрации этих данных используется брандмауэр приложения), должны разрабатываться с уче­том защиты от вероятных атак. Тем не менее, большинство программ просто прини­мают данные пользователя и выполняют на их основе операции с файлами, запросы к базам данных и системные вызовы.
Одной из сложнейших проблем является создание "черных списков" фильтрации и удаление "вредоносных входных данных". Дело в том, что создать и постоянно поддерживать полный "черный список" блокируемых данных очень сложно. Намно­го проще задать перечень тех входных данных, которые могут быть пропущены в "белом списке". Ошибки в "черном списке" значительно упрощают задачу зло­умышленника.
Многие уязвимые места возникают по причине неоправданного доверия к поль­зовательским данным. Это позволяет злоумышленникам открывать любые файлы, управлять запросами к базе данных и даже выключать компьютер. Некоторые из атак могут проводиться даже анонимными пользователями. Для проведения других требуется ввести имя учетной записи пользователя и пароль. Однако даже законным пользователям не следует разрешать копирование всей базы данных и создание файлов в корневом каталоге сервера.
Во многих случаях реализации стандартной технологии клиент/сервер в клиент­ской программе есть пользовательский интерфейс, который как бы служит проме­жуточным уровнем между пользователем и серверным приложением. В качестве примера можно назвать форму на Web-странице. Клиенту предоставляется удобное графическое окно, в которое он может вводить данные. Когда клиент нажимает кнопку "Отправить", программный код клиентского приложения принимает все данные из формы, упаковывает их в специальный формат и отправляет серверу.
Пользовательский интерфейс предназначен для добавления уровня абстракции между человеком и серверной программой. Поэтому клиентское программное обес­

печение практически никогда не показывает, что передается от клиента серверу. По­добным образом клиентская программа стремится скрыть от пользователя большую часть данных, которые предоставляет сервер. Пользовательский интерфейс получает данные от сервера, конвертирует их для использования, делает их удобными для восприятия и т.д. Однако невидимо для пользователя осуществляется передача не­обработанных данных.
Безусловно, клиентское приложение только помогает пользователю в создании специально сформатированного запроса. Можно полностью отказаться от использо­вания клиентского программного кода, если пользователь способен самостоятельно вручную создавать запросы в нужном формате. Но даже этот простой факт не учи­тывается в "безопасной архитектуре" многих Web-приложений. Злоумышленники широко пользуются возможностью создания вредоносных клиентских программ или непосредственного взаимодействия с сервером. Одной из самых любимых программ хакеров является программа net cat. Программа net cat позволяет просто открыть "анонимный" порт для подключения к удаленному серверу. После привязки к порту злоумышленник может вручную вводить строки данных или направлять поток дан­ных на удаленный сервер. Вуаля, клиент просто исчез.

 

На главную | Содержание | Назад | Вперёд
 
Яндекс.Метрика