
- •17. Безопасность в Веб-разработке
- •17.1. Безопасность в Интернете
- •17.1.1. Информационная безопасность
- •17.1.2. Виды угроз и способы борьбы с ними
- •17.1.2.1. Аутентификация (Authentication)
- •17.1.2.1.1. Подбор (Brute Force)
- •17.1.2.1.2. Недостаточная аутентификация (Insufficient Authentication)
- •17.1.2.1.3. Небезопасное восстановление паролей (Weak Password Recovery Validation).
- •17.1.2.2. Авторизация (Authorization)
- •17.1.2.2.1. Предсказуемое значение идентификатора сессии (Credential/Session Prediction)
- •17.1.2.2.2. Недостаточная авторизация (Insufficient Authorization)
- •17.1.2.2.3. Отсутствие таймаута сессии (Insufficient Session Expiration)
- •17.1.2.2.4. Фиксация сессии (Session Fixation)
- •17.1.2.3. Атаки на клиентов (Client-side Attacks)
- •17.1.2.3.1. Подмена содержимого (Content Spoofing)
- •17.1.2.3.2. Межсайтовое выполнение сценариев (Cross-site Scripting, xss)
- •17.1.2.3.3. Расщепление http-запроса (http Response Splitting)
- •17.1.2.4. Выполнение кода (Command Execution)
- •17.1.2.4.1. Переполнение буфера (Buffer Overflow)
- •17.1.2.4.2. Атака на функции форматирования строк (Format String Attack)
- •17.1.2.4.3. Внедрение операторов ldap (ldap Injection)
- •17.1.2.4.4. Выполнение команд ос (os Commanding)
- •17.1.2.4.5. Внедрение операторов sql (sql Injection)
- •17.1.2.4.6. Внедрение серверных расширений (ssi Injection)
- •17.1.2.4.7. Внедрение операторов xPath (xPath Injection)
- •17.1.2.5. Разглашение информации (Information Disclosure)
- •17.1.2.5.1. Индексирование директорий (Directory Indexing)
- •17.1.2.5.2. Идентификация приложений (Web Server/Application Fingerprinting)
- •17.1.2.5.3. Утечка информации (Information Leakage)
- •17.1.2.6.2. Отказ в обслуживании (Denial of Service)
- •17.1.2.6.3. Недостаточное противодействие автоматизации (Insufficient Anti-automation)
- •17.1.2.6.4. Недостаточная проверка процесса (Insufficient Process Validation)
- •17.1.2.7. Вирусы и приложения типа "троянский конь"
- •17.1.3. Ключевые термины
- •17.2. Xss Filter
- •17.2.1. Общее описание
- •17.2.2. Исследование эффективности xss Filter
- •17.2.2.1. Сохраненный вариант
- •17.2.2.2. Dom-based xss
- •17.2.2.3. Отраженный вариант
- •17.2.2.3.1. Внедрение кода в Javascript
- •17.2.2.3.2. Внедрение кода в тег
- •17.2.2.3.3. Внедрение кода в параметр тега
- •17.2.2.3.4. Внедрение кода в html
- •17.2.2.3.5. Использование расщепления http-ответа
- •17.2.2.4. Заключение
- •17.2.3. Ключевые термины
- •17.3. SmartScreen Filter
- •17.3.1. Общие сведения
- •17.3.2. Ключевые термины
- •17.4. Data Execution Prevention
- •17.4.1. Общие сведения
- •17.4.2. Ключевые термины
- •17.5. Https
- •17.5.1. Ssl
- •17.5.2. Https
- •17.5.3. Настройка https
- •17.5.3.1. Пример настройки для iis 6
- •17.5.3.3. Пример настройки для iis 7
- •17.5.4. Ключевые термины
- •17.6. Краткие итоги
17.2.2.3. Отраженный вариант
Можно выделить четыре основных ситуации, в которых возможен отраженный вариант атаки Межсайтовое выполнение сценариев:
внедрение кода в Javascript;
внедрение кода в тег;
внедрение кода в параметр тега;
внедрение кода в HTML.
Далее рассмотрено противодействие Internet Explorer в каждом их этих случаев.
17.2.2.3.1. Внедрение кода в Javascript
Данная ситуация очень схожа с DOM-based XSS. Однако код внедряется непосредственно в блок Javascript без использования функций AJAX. Пример уязвимого кода приведен на рис. 17.8.
Рис. 17.8. Уязвимый Javascript код
Источник: Защита Internet Explorer 8. Анализ эффективности [21]
В этом случае злоумышленник может передать в качестве значения параметра XSS-значение:
500); alert(document.cookie);//
В результате код в странице приобретет вид:
setTimeout("writetitle()", 500); alert(document.cookie);//)
Два символа обратного слеша является комментарием в языке Javascript, поэтому, с точки зрения синтаксиса, здесь все верно. Таким образом, несмотря на фильтр XSS в IE8, возможно успешно провести классическую атаку Cross-Site Scripting.
17.2.2.3.2. Внедрение кода в тег
Данный вариант уязвимости встречается редко, но сбрасывать его со счетов не стоит. Фильтр XSS в Internet Explorer пропускает конструкции, когда уязвимый параметр к Cross-Site Scripting встречается в следующих вариациях:
<img… $XSS ….>
<font… $XSS ….>
и т.п.
То есть в ситуациях, когда уязвимое значение включено в тег и не является параметром этого тега. В этом случае можно использовать обработчики событий Javascript (onClick(), onMouseover()) для передачи управления коду, используемому для атаки.
17.2.2.3.3. Внедрение кода в параметр тега
Данная ситуация является одним из самых распространенных случаев XSS. Она возникает, когда уязвимый параметр к Cross-Site Scripting встречается в параметре тега:
<img… src=$XSS ….>
<font… size=$XSS ….>
<a… href=$XSS ….>
и т.п.
Тестирование показало, что фильтр Internet Explorer прекрасно справляется с данным видом атак.
17.2.2.3.4. Внедрение кода в html
Классическая ситуация, в которой внедрение происходит непосредственно в HTML, и для проведения атаки необходимо открыть тег. И в этом случае фильтр Internet Explorer показал себя с лучшей стороны, отфильтровав все опробованные комбинации и кодировки.
17.2.2.3.5. Использование расщепления http-ответа
Для тех разработчиков Веб-приложений, которые захотят отключить фильтр XSS на своих сайтах, в Internet Explorer подобная возможность предусмотрена путем установки HTTP-заголовка "X-XSS-Protection: 0" в возвращаемом Веб-сервером ответе.
Однако это можно использовать для обхода фильтра XSS. Такая возможность возникает, когда приложение уязвимо для XSS и для уязвимости типа "Расщепление HTTP-ответа" (HTTP Response Splitting). Используя расщепление, злоумышленник может внедрить дополнительный HTTP-заголовок, который будет отключать фильтр XSS, и эксплуатировать уязвимость.
Не смотря на то, что подобная ситуация встречается не часто, ее тоже необходимо учитывать. По статистике Web Application Security Consortsium, ручной анализ позволяет идентифицировать HTTP Response Splitting в 7,75% всех приложений.