Risspa domxss
Transcript of Risspa domxss
Автоматизированный поиск уязвимостей вида DOM-based XSS: проблемы и решенияТарас ИващенкоАдминистратор информационной безопасности
RISSPA «Безопасность веб-приложений», Москва, 8 июля 2010 года
Обо мне
— Специалист по информационной безопасности, параноик и проповедник свободного ПО
— Автор Termite (утилита для анализа безопасности СУБД Oracle), xCobra (сканер уязвимостей веб-приложений) и участник проекта W3AF (фреймворк для анализа и эксплуатации уязвимостей веб-приложений)
2
Повестка
— DOM-based XSS: назад в прошлое
— Методики поиска DOM-based XSS, проблемы
— Grep-подобные способы
— PoC: w3af+Selenium
3
DOM-based XSS: назад в прошлое
XSS через DOM (DOM-based XSS) - это XSS-атака, при которой зловредная составляющая исполняется на стороне веб-браузера в результате изменения DOM «окружения» оригинальным клиентским скриптом.
Таким образом, при такой атаке HTTP-ответ никак не изменяется в отличии от т.н. активной и пассивной XSS.
4
DOM-based XSS: назад в прошлое
Входные данные веб-приложения в JavaScript-коде могут быть получены из следующих источников:
— document.URL
— document.location
— document.referrer и др.
5
Способы изменения DOM
— Запись «сырого» HTML (document.write, document.writeln и т.п.)
— Прямая модификация DOM (document.forms[0].action и т.п.)
— Замена URL документа:(document.location, document.URL и т.п.)
— Действия с окнами (document.open, window.open и т.п.)
6
DOM-based XSS: назад в прошлое
Важно отметить, что в большинстве современных веб-браузеров в строках данных этих источников URL-кодируются спец. символы < и >, таким образом минимизируя риск подобных атак.
Но не стоит забывать про, всё ещё, засилие MS IE6, мобильные веб-браузеры и то, что < и > не всегда нужны..
7
«Плохие» счётчики посетителей (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
«Плохие» счётчики посетителей (2010)
http://www.some.site/page.html#f' onmouseover='alert(1)' width=400 height=500 border=1 alt='
9
Автом. средства анализа безопасности веб-приложений
— Классическая схема - сначала соберём все входные точки веб-приложения, а потом будем передавать в них «плохие» данные и анализировать результат
— Достаточно просто обнаруживаются пассивные и активные XSS (контрольный токен так или иначе будет в HTTP-ответе)
10
Но как искать автоматизированно уязвимости в клиентской части веб-приложения? Нужен свой JavaScript-интерпретатор?
11
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
Grep-подобные способыRatProxy
13
Grep-подобные способыПопытки анализа JavaScript-кодаЧто бы хоть как-то уменьшить количество ложных срабатываний, можно попробывать самостоятельно анализировать JavaScript-код (умную и большую регулярку). Правда при этом повышается риск уже пропустить более сложные конструкции!
14
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
16
w3af+Seleniumw3af
— Программное окружение (фреймворк) для аудита безопасности веб-приложений с возможностью эксплуатации найденных уязвимостей
— Кроссплатформенность, расширяемость, GNU GPL ver.2
17
w3af+SeleniumSelenium
— Набор инструментов для тестирования веб-приложений
— Базовый набор включает в себя: Selenium IDE, Selenium Remote Control, Selenium Grid, Selenium Core
18
w3af+SeleniumАрхитектура
19
w3af+Selenium в действии
20
Итогиw3af+Selenium
— На каждый вызов audit() запускается новая сессия браузера
— Ограниченность и сложность
21
ИтогиОбщие
— Классические сканеры уязвимостей веб-приложений не в состоянии обнаруживать DOM XSS
— При grep-подходе большое количество ложных срабатываний
— Будущее за комбинированнными подходом, когда сканер работает в паре с движком веб-браузера
22
Информационные источники
— "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
Спасибо за внимание!
24
Тарас ИващенкоАдминистратор информационной безопасности
119021, Москва, ул. Льва Толстого, 16.
+7 (495) 739-00-00+7 (495) 739-70-70 — факс