risspa domxss

25
Автоматизированный поиск уязвимостей вида DOM-based XSS: проблемы и решения Тарас Иващенко Администратор информационной безопасности RISSPA «Безопасность веб-приложений», Москва, 8 июля 2010 года

Upload: yaevents

Post on 16-Jun-2015

480 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: Risspa domxss

Автоматизированный поиск уязвимостей вида DOM-based XSS: проблемы и решенияТарас ИващенкоАдминистратор информационной безопасности

RISSPA «Безопасность веб-приложений», Москва, 8 июля 2010 года

Page 2: Risspa domxss

Обо мне

— Специалист по информационной безопасности, параноик и проповедник свободного ПО

— Автор Termite (утилита для анализа безопасности СУБД Oracle), xCobra (сканер уязвимостей веб-приложений) и участник проекта W3AF (фреймворк для анализа и эксплуатации уязвимостей веб-приложений)

2

Page 3: Risspa domxss

Повестка

— DOM-based XSS: назад в прошлое

— Методики поиска DOM-based XSS, проблемы

— Grep-подобные способы

— PoC: w3af+Selenium

3

Page 4: Risspa domxss

DOM-based XSS: назад в прошлое

XSS через DOM (DOM-based XSS) - это XSS-атака, при которой зловредная составляющая исполняется на стороне веб-браузера в результате изменения DOM «окружения» оригинальным клиентским скриптом.

Таким образом, при такой атаке HTTP-ответ никак не изменяется в отличии от т.н. активной и пассивной XSS.

4

Page 5: Risspa domxss

DOM-based XSS: назад в прошлое

Входные данные веб-приложения в JavaScript-коде могут быть получены из следующих источников:

— document.URL

— document.location

— document.referrer и др.

5

Page 6: Risspa domxss

Способы изменения DOM

— Запись «сырого» HTML (document.write, document.writeln и т.п.)

— Прямая модификация DOM (document.forms[0].action и т.п.)

— Замена URL документа:(document.location, document.URL и т.п.)

— Действия с окнами (document.open, window.open и т.п.)

6

Page 7: Risspa domxss

DOM-based XSS: назад в прошлое

Важно отметить, что в большинстве современных веб-браузеров в строках данных этих источников URL-кодируются спец. символы < и >, таким образом минимизируя риск подобных атак.

Но не стоит забывать про, всё ещё, засилие MS IE6, мобильные веб-браузеры и то, что < и > не всегда нужны..

7

Page 8: Risspa domxss

«Плохие» счётчики посетителей (2010)

<script language="javascript"> u="example.com/counter.png";d=document;nv=navigator;na=nv.appName;p=0;j="N"; n=(na.substring(0,2)=="Mi")?0:1;y=""; y+="<img src='http://"+u+"?r="+escape(d.referrer)+"&width="+screen.width+"&height="+screen.height+"&hash="+d.location.hash.substr(1)+"&rn="+Math.random(); y+="' border=0 width=1 height=1 alt='count'>"; d.write(y);</script>

8

Page 9: Risspa domxss

«Плохие» счётчики посетителей (2010)

http://www.some.site/page.html#f' onmouseover='alert(1)' width=400 height=500 border=1 alt='

9

Page 10: Risspa domxss

Автом. средства анализа безопасности веб-приложений

— Классическая схема - сначала соберём все входные точки веб-приложения, а потом будем передавать в них «плохие» данные и анализировать результат

— Достаточно просто обнаруживаются пассивные и активные XSS (контрольный токен так или иначе будет в HTTP-ответе)

10

Page 11: Risspa domxss

Но как искать автоматизированно уязвимости в клиентской части веб-приложения? Нужен свой JavaScript-интерпретатор?

11

Page 12: Risspa domxss

Grep-подобные способыRatProxy

if (bad_js && res->is_text && (rp_strcasestr(res->payload,".write(") || rp_strcasestr(res->payload,".writeln("))) { m = get_modifiers(req,res); SHOW_MSG(1,"Risky Javascript code","document.write",m); }

RatProxy выполняет обычный поиск "опасной" подстроки:

12

Page 13: Risspa domxss

Grep-подобные способыRatProxy

13

Page 14: Risspa domxss

Grep-подобные способыПопытки анализа JavaScript-кодаЧто бы хоть как-то уменьшить количество ложных срабатываний, можно попробывать самостоятельно анализировать JavaScript-код (умную и большую регулярку). Правда при этом повышается риск уже пропустить более сложные конструкции!

14

Page 15: Risspa domxss

Grep-подобные способыПопытки анализа JavaScript-кода

match = self._script_re.search(response.getBody()) for script_code in match.groups(): for function_re in self._function_names_re: parameters = function_re.search( script_code ) if parameters: for user_controlled in self._get_DOM_user_controlled(): if user_controlled in parameters.groups()[0]: ...

w3af/plugins/grep/domXss.py

15

Page 16: Risspa domxss

16

Page 17: Risspa domxss

w3af+Seleniumw3af

— Программное окружение (фреймворк) для аудита безопасности веб-приложений с возможностью эксплуатации найденных уязвимостей

— Кроссплатформенность, расширяемость, GNU GPL ver.2

17

Page 18: Risspa domxss

w3af+SeleniumSelenium

— Набор инструментов для тестирования веб-приложений

— Базовый набор включает в себя: Selenium IDE, Selenium Remote Control, Selenium Grid, Selenium Core

18

Page 19: Risspa domxss

w3af+SeleniumАрхитектура

19

Page 20: Risspa domxss

w3af+Selenium в действии

20

Page 21: Risspa domxss

Итогиw3af+Selenium

— На каждый вызов audit() запускается новая сессия браузера

— Ограниченность и сложность

21

Page 22: Risspa domxss

ИтогиОбщие

— Классические сканеры уязвимостей веб-приложений не в состоянии обнаруживать DOM XSS

— При grep-подходе большое количество ложных срабатываний

— Будущее за комбинированнными подходом, когда сканер работает в паре с движком веб-браузера

22

Page 23: Risspa domxss

Информационные источники

— "DOM Based XSS", http://www.owasp.org/index.php/DOM_Based_XSS

— "DOM Based Cross Site Scripting or XSS of the Third Kind" by Amit Klein, http://www.webappsec.org/projects/articles/071105.shtml

— w3af offical site - http://w3af.sf.net

— Selenium offical site - http://seleniumhq.org23

Page 24: Risspa domxss

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

24

Page 25: Risspa domxss

Тарас ИващенкоАдминистратор информационной безопасности

119021, Москва, ул. Льва Толстого, 16.

+7 (495) 739-00-00+7 (495) 739-70-70 — факс

[email protected]