Классификация угроз безопасности web-серверов. Часть 5

5.3. Утечка информации (Information Leakage)

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

Анализ доступной информации позволяет злоумышленнику произвести разведку и получить представление о структуре директорий сервера, используемых SQL-запросах, названиях ключевых процессов и программ сервера. Часто разработчики оставляют комментарии в HTML-страницах и коде сценариев для облегчения поиска ошибок и поддержки приложения. Эта информация может варьироваться от простых описаний деталей функционирования программы до (в худших случаях) имен пользователей и паролей, используемых при отладке. Утечка информации может относиться и к конфиденциальным данным, обрабатываемым сервером. Это могут быть идентификаторы пользователя (ИНН, номера водительских удостоверений, паспортов и т.д.), а также текущая информация (баланс лицевого счета или история платежей). Многие атаки этой категории выходят за рамки защиты web-приложений и переходят в область физической безопасности. Утечка информации в этом случае часто возникает, когда в браузере отображается информация, которая не должна выводиться в открытом виде даже пользователю. В качестве примера можно привести пароли пользователя, номера кредитных карточек и т.д. Подробные сообщения об ошибках могут возникать в результате специально сформированного запроса. Ниже приведен пример сообщения, типичного для ошибки, возникающей в результате SQL-запроса. Для реализации атаки с внедрением кода SQL обычно требуется знание структуры запросов, осуществляемых web- сервером. Информация, передаваемая в подробной информации об ошибке, может быть использована для построения атакующим корректных запросов к серверу баз данных. Ниже приведено сообщение, выдаваемое сервером при вводе символа апострофа в качестве имени пользователя:

An Error Has Occurred.
Error Message:
System.Data.OleDb.OleDbException: Syntax error (missing
operator) in query expression 'username = ''' and password = 'g''. at
System.Data.OleDb.OleDbCommand.ExecuteCommandTextErrorHandling (
Int32 hr) at
System.Data.OleDb.OleDbCommand.ExecuteCommandTextForSingleResult
( tagDBPARAMS dbParams, Object& executeResult) at

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

5.4 Обратный путь в директориях (Path Traversal)

Данная техника атак направлена на получение доступа к файлам, директориям и командам, находящимся вне основной директории web-сервера. Злоумышленник может манипулировать параметрами URL с целью получить доступ к файлам или выполнить команды, располагаемые в файловой системе web- сервера. Для подобных атак потенциально уязвимо любое устройство, имеющее web-интерфейс. Многие web-серверы ограничивают доступ пользователя определенной частью файловой системы, обычно называемой web document root или CGI root. Эти директории содержат файлы, предназначенные для пользователя, и программы, необходимые для получения доступа к функциям web-приложения. Большинство базовых атак, эксплуатирующих обратный путь, основаны на внедрении в URL символов "../" для того, чтобы изменить расположение ресурса, который будет обрабатываться сервером. Поскольку большинство web-серверов фильтруют эту последовательность, злоумышленник может воспользоваться альтернативными кодировками для представления символов перехода по директориям. Популярные приемы включают использование альтернативных кодировок, например, Unicode ("..%u2216" или "..%c0%af"), использование обратного слэша ("..\") в Windows-серверах, символов URLEncode ("%2e%2e%2f") или двойной кодировки URLEncode ("..%255c"). Даже если web-сервер ограничивает доступ к файлам определенным каталогом, эта уязвимость может возникать в сценариях или CGI- программах. Возможность использования обратного пути в каталогах довольно часто возникает в приложениях, использующих механизмы шаблонов, или загружают текст их страниц из файлов на сервере. В этом варианте атаки злоумышленник модифицирует имя файла, передаваемое в качестве параметра CGI-программы или серверного сценария. В результате злоумышленник может получить исходный код сценариев. Довольно часто к имени запрашиваемого файла добавляются специальные символы — такие, как "%00" — с целью обхода фильтров. Следующие примеры иллюстрируют обратный путь в каталогах web- сервера:

httр://example/../../../../../some/file
httр://example/..%255c..%255c..%255csome/file
httр://example/..%u2216..%u2216some/file

Обратный путь в каталогах web-приложения: Исходный URL: httр://example/foo.cgi?home=index.htm
Атака: httр://example/foo.cgi?home=foo.cgi

В приведенном сценарии web-приложение генерирует страницу, содержащую исходный код сценария foo.cgi, поскольку значение переменной home используется как имя загружаемого файла. Обратите внимание, что в данном случае злоумышленник не использует специальных символов, поскольку целью является файл в той же директории, в которой располагается файл index.htm. Также возможен вариант обратного пути в каталогах web- приложения с использованием специальных символов:

Исходный URL: httр://example/scripts/foo.cgi?page=menu.txt
Атака: httр://example/scripts/foo.cgi?page=../scripts/foo.cgi%00txt

В приведенном примере web-приложение загружает исходный текст сценария foo.cgi. Атакующий использует символы "../" для перехода на уровень выше по дереву каталогов и перехода в директорию /scripts. Символ "%00" используется для обхода проверки расширения файла (приложение позволяет обращаться только к файлам .txt) и для того, чтобы расширение не использовалось при загрузке файла.

5.5. Предсказуемое расположение ресурсов (Predictable Resource Location)

Предсказуемое расположение ресурсов позволяет злоумышленнику получить доступ к скрытым данным или функциональным возможностям. Путем подбора злоумышленник может получить доступ к содержимому, не предназначенному для публичного просмотра. Временные файлы, файлы резервных копий, файлы конфигурации или стандартные примеры часто являются целью подобных атак. В большинстве случаев перебор может быть оптимизирован путем использования стандартного соглашения об именах файлов и директорий сервера. Получаемые злоумышленником файлы могут содержать информацию о дизайне приложения, информацию из баз данных, имена машин или пароли, пути к директориям. Скрытые файлы также могут содержать уязвимости, отсутствующие в основном приложении. На эту атаку часто ссылаются как на перечисление файлов и директорий (Forced Browsing, File Enumeration, Directory Enumeration). Вот и пример: атакующий может создать запрос к любому файлу или папке на сервере. Наличие или отсутствие ресурса определяется по коду ошибки (например, 404 в случае отсутствия папки или 403 в случае ее наличия на сервере). Ниже приведены варианты подобных запросов:
а) слепой поиск популярных названий директорий:

/admin/
/backup/
/logs/
/vulnerable_file.cgi

б) изменение расширений существующего файла: (/test.asp):
/test.asp.bak
/test.bak
/test

6. Логические атаки (Logical Attacks)

Атаки данного класса направлены на эксплуатацию функций приложения или логики его функционирования. Логика приложения представляет собой ожидаемый процесс функционирования программы при выполнении определенных действий. В качестве примеров можно привести восстановление паролей, регистрацию учетных записей, аукционные торги, транзакции в системах электронной коммерции. Приложение может требовать от пользователя корректного выполнения нескольких последовательных действий для выполнения определенной задачи. Злоумышленник может обойти или использовать эти механизмы в своих целях.

6.1. Злоупотребление функциональными возможностями (Abuse of Functionality)

Данные атаки направлены на использование функций web-приложения с целью обхода механизмов разграничения доступа. Некоторые механизмы web- приложения включая функции обеспечения безопасности могут быть использованы для этих целей. Наличие уязвимости в одном из, возможно, второстепенных компонентов приложения может привести к компрометации всего приложения. Уровень риска и потенциальные возможности злоумышленника в случае проведения атаки очень сильно зависят от конкретного приложения. Злоупотребление функциональными возможностями очень часто используется совместно с другими атаками — такими, как обратный путь в директориях и т.д. К примеру, при наличии уязвимости типа межсайтовое выполнение сценариев в HTML-чате злоумышленник может использовать функции чата для рассылки URL, эксплуатирующего уязвимость, всем текущим пользователям. С глобальной точки зрения все атаки на компьютерные системы являются злоупотреблениями функциональными возможностями. Особенно это относится к атакам, направленным на web-приложения, которые не требуют модификации функций программы. Примеры злоупотребления функциональными возможностями включают в себя:

— использования функций поиска для получения доступа к файлам за пределами корневой директории web-сервера;
— использование функции загрузки файлов на сервер для перезаписи файлов конфигурации или внедрения серверных сценариев;
— реализацию отказа в обслуживании путем использования функции блокировки учетной записи при многократном вводе неправильного пароля. Ниже приведены примеры подобных уязвимостей, взятые из реальной жизни.

Программа Matt Wright FormMail. Программа FormMail представляет собой приложение на языке PERL, используемое для передачи данных из HTML- формы на указанный почтовый адрес. Этот сценарий довольно удобно использовать для организации функции обратной связи на сервере. К сожалению, эта программа предоставляла злоумышленнику возможность передавать почтовые сообщения любому почтовому пользователю. Таким образом, приложение могло быть использовано в качестве почтового ретранслятора для рассылки спама. Злоумышленник использовал параметры URL GET-запроса для указания получателя почтового сообщения, к примеру:

httр://example/cgi-bin/FormMail.pl? recipient=email@victim.example&message=you%20got%20spam

В качестве отправителя почтового сообщения указывался адрес web-сервера, что позволяло злоумышленнику оставаться полностью анонимным.

Macromedia's Cold Fusion. Иногда базовый интерфейс администрирования, поставляемый вместе с web-приложением, может использоваться с непредусмотренными разработчиками целями. К примеру, Macromedia's Cold Fusion по умолчанию имеет модуль, позволяющий просматривать исходный код сценариев. Злоупотребление этой функцией может привести к получению критичной информации web-приложения. Удаление или отключение этой функции весьма проблематично, поскольку от него зависят важные компоненты приложения.

Модификация цены в Smartwin CyberOffice. Иногда изменение данных, обрабатываемых приложением, может позволить модифицировать поведение программы. К примеру, уязвимость в функции покупки приложения CyberOffice позволяла модифицировать значение цены, передаваемой пользователю в скрытом поле HTML-формы. Страница подтверждения заказа загружалась злоумышленником, модифицировалась на клиенте и передавалась серверу уже с модифицированным значением цены.

6.2. Отказ в обслуживании (Denial of Service)

Данный класс атак направлен на нарушение доступности web-сервера. Обычно атаки, направленные на отказ в обслуживании, реализуются на сетевом уровне, однако они могут быть направлены и на прикладной уровень. Используя функции web-приложения, злоумышленник может исчерпать критичные ресурсы системы или воспользоваться уязвимостью, приводящий к прекращению функционирования системы. Обычно DoS-атаки направлены на исчерпание критичных системных ресурсов — таких, как вычислительные мощности, оперативная память, дисковое пространство или пропускная способность каналов связи. Если какой-то из ресурсов достигнет максимальной загрузки, приложение целиком будет недоступно. Атаки могут быть направлены на любой из компонентов web-приложения, например, такие, как сервер СУБД, сервер аутентификации и т.д. В отличие от атак на сетевом уровне, требующих значительных ресурсов злоумышленника, атаки на прикладном уровне обычно легче реализовать. В качестве примера подойдет следующий. Предположим, что сервер Health-Care генерирует отчеты о клинической истории пользователей. Для генерации каждого отчета сервер запрашивает все записи, соответствующие определенному номеру социального страхования. Поскольку в базе содержатся сотни миллионов записей, пользователю приходится ожидать результата несколько минут. В это время загрузка процессора сервера СУБД достигает 60%. Злоумышленник может послать 10 одновременных запросов на получение отчетов, что с высокой вероятностью приведет к отказу в обслуживании, поскольку загрузка процессора сервера баз данных достигнет максимального значения. На время обработки запросов злоумышленника нормальная работа сервера будет невозможна. Как второй вариант — атаки на сервер СУБД. Злоумышленник может воспользоваться внедрением кода SQL для удаления данных из таблиц, что приведет к отказу в обслуживания приложения.

6.3. Недостаточное противодействие автоматизации (Insufficient Anti-automation)

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

6.4. Недостаточная проверка процесса (Insufficient Process Validation)

Уязвимости этого класса возникают, когда сервер недостаточно проверяет последовательность выполнения операций приложения. Если состояние сессии пользователя и приложения должным образом не контролируется, приложение может быть уязвимо для мошеннических действий. В процессе доступа к некоторым функциям приложения ожидается, что пользователь выполнит ряд действий в определенном порядке. Если некоторые действия выполняются неверно или в неправильном порядке, возникает ошибка, приводящая к нарушению целостности. Примерами подобных функций выступают переводы, восстановление паролей, подтверждение покупки, создание учетной записи и т.д. В большинстве случаев эти процессы состоят из ряда последовательных действий, осуществляемых в четком порядке. Для обеспечения корректной работы подобных функций web-приложение должно четко отслеживать состояние сессии пользователя и ее соответствие текущим операциям. В большинстве случаев это осуществляется путем сохранения состояния сессии в cookie или скрытом поле формы HTML. Но, поскольку эти значения могут быть модифицированы пользователем, обязательно должна проводиться проверка этих значений на сервере. Если этого не происходит, злоумышленник получает возможность обойти последовательность действий и — как следствие — логику приложения. В качестве примера подойдет следующее. Система электронной торговли может предлагать скидку на продукт B в случае покупки продукта A. Пользователь, не желающий покупать продукт A, может попытаться приобрести продукт B со скидкой. Заполнив заказ на покупку обоих продуктов, пользователь получает скидку. Затем пользователь возвращается к форме подтверждения заказа и удаляет продукт A из покупаемых путем модификации значений в форме. Если сервер повторно не проверит возможность покупки продукта B по указанной цене без продукта A, будет осуществлена закупка по низкой цене.

Ориг. класс. "Web Application Security Consortium"

Бойцев О.М., boyscout_zone@yahoo.com


Компьютерная газета. Статья была опубликована в номере 10 за 2006 год в рубрике безопасность

©1997-2024 Компьютерная газета