SlideShare a Scribd company logo
1 of 73
Download to read offline
Итак
вам нужен парсер
или
Опыт разработки модуля межсетевого
экранирования для
Брославский Олег Колегов Денис
Intro
…
короче говоря,
мы решили парсить MySQL
…
Intro
???
Intro
Совместная работа PT Application Firewall Research Team
Принимали участие:
• Брославский Олег
• Гречнев Сергей
• Колегов Денис
• Кочуркин Иван
• Олексов Никита
• Решетников Сергей
• Худяшов Иван
SQL Injections
SELECT * FROM users WHERE email = '$email' AND password = md5('$password');
“Did you really name your son Robert'); DROP TABLE Students; -- ?”
© Exploits of a Mom (xkcd #327)
SELECT * FROM users WHERE email = 'xxx' AND password = md5('xxx') OR 1=1; -- 1');
Impact
Обнаруженные
SQL-инъекции в
CMS WordPress
за 2017 год
WAF
Client WAF Web Server
“That’s not a bug, that’s unintended user behavior“
- some developer
… makes your system 99,96%secure …
WAF SQLi detection
• Лексический подход (регулярные выражения)
(?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_user|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_l
ock))?|n(?:et6?_(aton|ntoa)|s(?:ert|tr)|terval)?|f(null)?)|u(?:n(?:compress(?:ed_length)?|ix_timestamp|hex)|tc_(date|time|timestamp)|p(?:dat
exml|per)|uid(_short)?|case|ser)|l(?:o(?:ca(?:l(timestamp)?|te)|g(2|10)?|ad_file|wer)|ast(_day|_insert_id)?|e(?:(?:as|f)t|ngth)|case|trim|pa
d|n)|t(?:ime(stamp|stampadd|stampdiff|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_(base64|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_(add|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|eat
es)t|et_(format|lock))|o(?:(?:ld_passwo)?rd|ct(et_length)?)|we(?:ek(day|ofyear)… <Еще несколько тысяч символов>
• Лексико-сигнатурный подход (libinjection)
-6270" UNION ALL SELECT 5594, 5594, 5594, 5594, 5594, 5594, 5594, 5594, 5594, 5594, 5594,
5594, 5594, 5594, 5594, 5594, 5594, 5594, 5594, 5594, 5594, 5594, 5594, 5594, 5594, 5594,
5594, 5594, 5594, 5594, 5594, 5594, 5594, 5594, 5594, 5594, 5594, 5594, 5594, 5594, 5594#
AND "JWWQ"="JWWQ
sUk1,1,1,1,1,1,1,1,&
• Подходы, основанные на машинном обучении
Impact
Michael Stepankin. Advanced Web Application Fuzzing
WAF + DBFW
Client WAF Web Server DBFW Database
SELECT * FROM users
WHERE email = 'xxx'
AND password = md5('xxx') OR 1=1; -- 1');
?name=xxx&password=xxx')+OR+1=1;+--+1
SELECT * FROM users WHERE email = 'xxx' AND password = md5('xxx') OR 1=1; -- 1');
Advanced SQL Analysis
select and
* password
from =
users md5
where (
email “HI”
= )
“xxx“ ;
select md5
* (
from “xxx”
users )
where OR
email 1
= =
“xxx” 1
and ;
password <COMMENT>
16 ≠ 20
SELECT * FROM users WHERE email = 'xxx' AND password = md5('xxx') OR 1=1; -- 1');
SELECT * FROM users WHERE email = 'xxx' AND password = md5(‘HI');
Подсчёт токенов
[expression]
[expression]
or
[expression]
email = xxx
[expression]
password =
and
[expression]
1 = 1
email password whereusers
[expression]
md5 xxx
[where][fields] [from]select
[select]
Анализ синтаксического дерева
Advanced SQL Analysis
Кроме того, анализ синтаксического дерева позволяет:
Анализ
синтаксиса
Анализ
семантики
построение
«узкоспециализированной»
грамматики веб-приложения
построение «профиля»
SQL-запросов веб-приложения
управление доступом для
пользователей веб-приложения
SQL Parsing
Parser
Syntax analysis Protectors
Protector 1
…
Protector N
Concrete
syntax tree
MySQL
Query
Existing Parsers
• Локальные runtime-specific варианты
Existing Parsers
• Локальные runtime-specific-варианты
• Коммерческие решения
(http://www.sqlparser.com)
Existing Parsers
• Локальные runtime-specific-варианты
• Коммерческие решения
(http://www.sqlparser.com)
• Реализации движков БД на конкретном
языке (e.g. https://github.com/youtube/vitess)
Existing Parsers
• Локальные runtime-specific-варианты
• Коммерческие решения
(http://www.sqlparser.com)
• Реализации движков БД на конкретном
языке (e.g. https://github.com/youtube/vitess)
• Официальная YACC-грамматика MySQL
(https://github.com/twitter/mysql)
Existing Parsers
• Локальные runtime-specific-варианты
• Коммерческие решения
(http://www.sqlparser.com)
• Реализации движков БД на конкретном
языке (e.g. https://github.com/youtube/vitess)
• Официальная YACC-грамматика MySQL
(https://github.com/twitter/mysql)
• ANTLR3-грамматика для MySQL Workbench
(https://github.com/mysql/mysql-workbench)
Existing Parsers
• Локальные runtime-specific-варианты
• Коммерческие решения
(http://www.sqlparser.com)
• Реализации движков БД на конкретном
языке (e.g. https://github.com/youtube/vitess)
• Официальная YACC-грамматика MySQL
(https://github.com/twitter/mysql)
• ANTLR3-грамматика для MySQL Workbench
(https://github.com/mysql/mysql-workbench)
© Standards (xkcd #927)
ANLTR
MySql parser
AST
TsqlParser
PlqlParser
Syntax analysis Semantic analysis
…
Protector 1
…
Protector N
CST AST
Abstract syntax
analysis
Query
ANTLR Runtimes
Proof Of Concept
Python 2.7
Возраст рантайма ~ 2 года (июль 2015)
Количество разработчиков 12 человек
Количество коммитов 78
Proof Of Concept
Python 2.7
• Возраст рантайма ~ 2 года
476,33
0
100
200
300
400
500
600
Q/Sec
Python 2.7
Минимальный
приемлемый результат
• 10 000 запросов/секунду
Proof Of Concept
С++
Возраст рантайма ~ 1 год (март 2016)
Количество разработчиков 33 человека
Количество коммитов 336
Proof Of Concept
Python 2.7
• Возраст рантайма ~ 2 года
C++11
• Возраст рантайма ~ 1 года
476,33
11052,3
0
2000
4000
6000
8000
10000
12000
Q/Sec
Python 2.7 C++11
Минимальный
приемлемый результат
• 10 000 запросов/секунду
Proof Of Concept
476,33
11052,3
0
2000
4000
6000
8000
10000
12000
Q/Sec
Python 2.7 C++11
Минимальный
приемлемый результат
• 10 000 запросов/секунду
Python 2.7
• Возраст рантайма ~ 2 года
C++11
• Возраст рантайма ~ 1 года
Proof Of Concept
476,33
11052,3
0
2000
4000
6000
8000
10000
12000
Q/Sec
Python 2.7 C++11
Минимальный
приемлемый результат
• 10 000 запросов/секунду
Python 2.7
• Возраст рантайма ~ 2 года
C++11
• Возраст рантайма ~ 1 года
Positive Grammar
(!) Не зависит от рантайма
https://habrahabr.ru/company/pt/blog/339336/
https://github.com/antlr/grammars-v4/tree/master/mysql
Release Fail!
• У нас нет свободных С++
разработчиков
Release Fail!
• У нас нет свободных С++
разработчиков
• С++11 не поддерживается у нас в
стеке
Release Fail!
• У нас нет свободных С++
разработчиков
• С++11 не поддерживается у нас в
стеке
• Кажется, C++11 не получится
втянуть на Debian Wheezy
Test Them All
Python 3.5
Возраст рантайма ~ 2 года
Количество разработчиков 12 человек
Количество коммитов 77
Test Them All
Минимальный
приемлемый результат
• 10 000 запросов/секунду
Python 3.5
• Возраст рантайма
~ 2 года
¯_(ツ)_/¯
476,33
11052,3
449,95
0
2000
4000
6000
8000
10000
12000
Q/Sec
Python 2.7 C++11 Python 3.5
Test Them All
PyPy
Возраст рантайма Официально не поддерживается
Количество разработчиков -
Количество коммитов -
476,33
11052,3
449,95
996,26
0
2000
4000
6000
8000
10000
12000
Q/Sec
Python 2.7 C++11 Python 3.5 PyPy
Test Them All
Минимальный
приемлемый результат
• 10 000 запросов/секунду
PyPy
• Официально не поддерживается
Time To Go
Время добавить Go!
Time To Go
Golang
Возраст рантайма ~ 2 года (декабрь 2015)
Количество разработчиков 15 человек
Количество коммитов 213
Time To Go
Минимальный
приемлемый результат
• 10 000 запросов/секунду
Golang
• Возраст рантайма
~ 11 месяцев
476,33
11052,3
449,95
996,26
372,6
0
2000
4000
6000
8000
10000
12000
Q/Sec
Python 2.7 C++11 Python 3.5 PyPy Golang
Test Them All
С#
Возраст рантайма ~ 2 года (июнь 2015)
Количество разработчиков 13 человек
Количество коммитов 83
Test Them All
Минимальный
приемлемый результат
• 10 000 запросов/секунду
C#
• Возраст рантайма
~ 11 месяцев
476,33
11052,3
449,95 996,26 372,6
35543,7
0
5000
10000
15000
20000
25000
30000
35000
40000
Q/Sec
Python 2.7 C++11 Python 3.5 PyPy Golang C#
Remaining Runtimes
Remaining Runtimes
Remaining Runtimes
Remaining Runtimes
Remaining Runtimes
Remaining Runtimes
Remaining Runtimes
The Last One
Java
Возраст рантайма ~ 7 лет (январь 2010)
Количество разработчиков 28 человек
Количество коммитов 1600
476,33
11052,3
449,95 996,26 372,6
35543,7
72446,72
0
10000
20000
30000
40000
50000
60000
70000
80000
Q/Sec
Python 2.7 C++11 Python 3.5 PyPy Golang C# Java
Java Comeback
Минимальный
приемлемый результат
• 10 000 запросов/секунду
Java
• Возраст рантайма
~ 7 лет
God Please Not Java
The Chosen One
Kotlin
Возраст рантайма Официально не поддерживается
Количество разработчиков -
Количество коммитов -
476,33
11052,3
449,95 996,26 372,6
35543,7
72446,72
60946,21
0
10000
20000
30000
40000
50000
60000
70000
80000
Q/Sec
Python 2.7 C++11 Python 3.5 PyPy Golang C# Java Kotlin
Kotlin Performance
Минимальный
приемлемый результат
• 10 000 запросов/секунду
Kotlin
• Полностью совместим с Java
Final Results
ANTLR Runtime Query Mode (q/sec) File Mode (MiB/sec)
Python 2.7 466.28 13.4
Python 3.5 449.95 19.3
Python 3.6 419.17 16.5
PyPy 996.26 22.02
Golang 372.60 x
CPP 11052.30 11.0
C# 35543.7 3.09
Java 72446.72 51.04
Kotlin 60946.21 35.59
Desired State
MySql parser
AST
TsqlParser
PlqlParser
Syntax analysis Semantic analysis
…
Protector 1
…
Protector N
CST AST
Abstract syntax
analysis
Query
Desired State
MySql parser
AST
TsqlParser
PlqlParser
Syntax analysis Semantic analysis
…
Protector 1
…
Protector N
CST AST
Abstract syntax
analysis
Query
Universal Syntax Tree
MySql parser
AST
TsqlParser
PlqlParser
Syntax analysis
…
CST AST
Abstract syntax
analysis
Query
Universal Syntax Tree
MySql parser
MySQL
visitor
TsqlParser
PlqlParser
…
CST USTQuery
TsqlSQL
visitor
PlqlSQL
visitor
Usage Unification
MySql parser
MySQL
visitor
TsqlParser
PlqlParser
…
CST USTQuery
TsqlSQL
visitor
PlqlSQL
visitor
Backend 1
Backend 1
Backend n
Usage Unification
MySql parser
MySQL
visitor
TsqlParser
PlqlParser
…
CST USTQuery
TsqlSQL
visitor
PlqlSQL
visitor
Backend 1
Backend 1
Backend n
IDL Codegenerator Runtime
Artifacts
We Need More Artifacts!
IDL CodeGenerator Runtime
Artifacts
We Need More Artifacts!
IDL CodeGenerator Runtime
Artifacts
Positive
IDL
Aule
Вдохновлён
Web IDL
We Need More Artifacts!
IDL CodeGenerator Runtime
Artifacts
Positive
IDL
Aule
Вдохновлён
Web IDL
We Need More Artifacts!
IDL CodeGenerator Runtime
Artifacts
Positive
IDL
Aule
Вдохновлён
Web IDL
We Need More Artifacts!
IDL CodeGenerator Runtime
Artifacts
Positive
IDL
Aule
Вдохновлён
Web IDL
We Need More Artifacts!
IDL CodeGenerator Runtime
Artifacts
Positive
IDL
Aule
Вдохновлён
Web IDL
We Need More Artifacts!
IDL CodeGenerator Runtime
Artifacts
Positive
IDL
Aule
Вдохновлён
Web IDL
We Need More Artifacts!
IDL CodeGenerator Runtime
Artifacts
Positive
IDL
Aule
Вдохновлён
Web IDL
/PositiveTechnologies/aule
Art Of Architecture
Parser
Art Of Architecture
Parser
Protector 1
…
Protector N
Art Of Architecture
Parser
Protector 1
…
Protector N
Aule
Art Of Architecture
Parser
Protector 1
…
Protector N
Interceptor
Aule
Art Of Architecture
Thank you!
ptsecurity.com

More Related Content

What's hot

Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Ontico
 
NoSQL — неспроста ли это "ЖЖЖ"?
NoSQL — неспроста ли это "ЖЖЖ"?NoSQL — неспроста ли это "ЖЖЖ"?
NoSQL — неспроста ли это "ЖЖЖ"?
Daniel Podolsky
 
Выбираем СУБД для хранения временных рядов / Павел Филонов (Лаборатория Каспе...
Выбираем СУБД для хранения временных рядов / Павел Филонов (Лаборатория Каспе...Выбираем СУБД для хранения временных рядов / Павел Филонов (Лаборатория Каспе...
Выбираем СУБД для хранения временных рядов / Павел Филонов (Лаборатория Каспе...
Ontico
 
Оптимизация производительности нагруженных веб-систем на Java
Оптимизация производительности нагруженных веб-систем на JavaОптимизация производительности нагруженных веб-систем на Java
Оптимизация производительности нагруженных веб-систем на Java
Alex Chistyakov
 
Remote Highload
Remote HighloadRemote Highload
Remote Highload
Andrey Smirnov
 
Тестирование аварий. Андрей Губа. Highload++ 2015
Тестирование аварий. Андрей Губа. Highload++ 2015Тестирование аварий. Андрей Губа. Highload++ 2015
Тестирование аварий. Андрей Губа. Highload++ 2015
odnoklassniki.ru
 
Нагрузочное тестирование с помощью Яндекс.Танк - Алексей Лавренюк, PyCon RU 2...
Нагрузочное тестирование с помощью Яндекс.Танк - Алексей Лавренюк, PyCon RU 2...Нагрузочное тестирование с помощью Яндекс.Танк - Алексей Лавренюк, PyCon RU 2...
Нагрузочное тестирование с помощью Яндекс.Танк - Алексей Лавренюк, PyCon RU 2...
it-people
 
NodeJS в HighLoad проекте / Акрицкий Владимир (iAge Engineering)
NodeJS в HighLoad проекте / Акрицкий Владимир (iAge Engineering)NodeJS в HighLoad проекте / Акрицкий Владимир (iAge Engineering)
NodeJS в HighLoad проекте / Акрицкий Владимир (iAge Engineering)
Ontico
 

What's hot (20)

ТОП ошибок в инфраструктуре, мешающих высоким нагрузкам / Андрей Половов (Флант)
ТОП ошибок в инфраструктуре, мешающих высоким нагрузкам / Андрей Половов (Флант)ТОП ошибок в инфраструктуре, мешающих высоким нагрузкам / Андрей Половов (Флант)
ТОП ошибок в инфраструктуре, мешающих высоким нагрузкам / Андрей Половов (Флант)
 
Хайлоад и безопасность в мире DevOps: совместимы ли? / Юрий Колесов (security...
Хайлоад и безопасность в мире DevOps: совместимы ли? / Юрий Колесов (security...Хайлоад и безопасность в мире DevOps: совместимы ли? / Юрий Колесов (security...
Хайлоад и безопасность в мире DevOps: совместимы ли? / Юрий Колесов (security...
 
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
 
Zabbix и правильное обнаружение проблем - Алексей Владышев @ RootConf 2015
Zabbix и правильное обнаружение проблем - Алексей Владышев @ RootConf 2015Zabbix и правильное обнаружение проблем - Алексей Владышев @ RootConf 2015
Zabbix и правильное обнаружение проблем - Алексей Владышев @ RootConf 2015
 
NoSQL — неспроста ли это "ЖЖЖ"?
NoSQL — неспроста ли это "ЖЖЖ"?NoSQL — неспроста ли это "ЖЖЖ"?
NoSQL — неспроста ли это "ЖЖЖ"?
 
ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)
ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)
ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)
 
Выбираем СУБД для хранения временных рядов / Павел Филонов (Лаборатория Каспе...
Выбираем СУБД для хранения временных рядов / Павел Филонов (Лаборатория Каспе...Выбираем СУБД для хранения временных рядов / Павел Филонов (Лаборатория Каспе...
Выбираем СУБД для хранения временных рядов / Павел Филонов (Лаборатория Каспе...
 
Приключения проекта от компьютера разработчика до серьезных нагрузок / Андрей...
Приключения проекта от компьютера разработчика до серьезных нагрузок / Андрей...Приключения проекта от компьютера разработчика до серьезных нагрузок / Андрей...
Приключения проекта от компьютера разработчика до серьезных нагрузок / Андрей...
 
RTB DSP на языке Go укрощение buzzwords / Даниил Подольский (Qmobi.Com)
RTB DSP на языке Go укрощение buzzwords /  Даниил Подольский (Qmobi.Com)RTB DSP на языке Go укрощение buzzwords /  Даниил Подольский (Qmobi.Com)
RTB DSP на языке Go укрощение buzzwords / Даниил Подольский (Qmobi.Com)
 
Антон Галицын
Антон ГалицынАнтон Галицын
Антон Галицын
 
Хорошо поддерживаемое приложение
Хорошо поддерживаемое приложениеХорошо поддерживаемое приложение
Хорошо поддерживаемое приложение
 
Оптимизация производительности нагруженных веб-систем на Java
Оптимизация производительности нагруженных веб-систем на JavaОптимизация производительности нагруженных веб-систем на Java
Оптимизация производительности нагруженных веб-систем на Java
 
Uawebchallenge.yandex.tank
Uawebchallenge.yandex.tankUawebchallenge.yandex.tank
Uawebchallenge.yandex.tank
 
Чеклист по клиентской оптимизации - Лавлинский Николай, РИТ++ 2017
Чеклист по клиентской оптимизации - Лавлинский Николай, РИТ++ 2017Чеклист по клиентской оптимизации - Лавлинский Николай, РИТ++ 2017
Чеклист по клиентской оптимизации - Лавлинский Николай, РИТ++ 2017
 
Remote Highload
Remote HighloadRemote Highload
Remote Highload
 
Тестирование аварий. Андрей Губа. Highload++ 2015
Тестирование аварий. Андрей Губа. Highload++ 2015Тестирование аварий. Андрей Губа. Highload++ 2015
Тестирование аварий. Андрей Губа. Highload++ 2015
 
Подходы к сигнатурному статическому анализу
Подходы к сигнатурному статическому анализуПодходы к сигнатурному статическому анализу
Подходы к сигнатурному статическому анализу
 
Database First! О распространённых ошибках использования РСУБД
Database First! О распространённых ошибках использования РСУБДDatabase First! О распространённых ошибках использования РСУБД
Database First! О распространённых ошибках использования РСУБД
 
Нагрузочное тестирование с помощью Яндекс.Танк - Алексей Лавренюк, PyCon RU 2...
Нагрузочное тестирование с помощью Яндекс.Танк - Алексей Лавренюк, PyCon RU 2...Нагрузочное тестирование с помощью Яндекс.Танк - Алексей Лавренюк, PyCon RU 2...
Нагрузочное тестирование с помощью Яндекс.Танк - Алексей Лавренюк, PyCon RU 2...
 
NodeJS в HighLoad проекте / Акрицкий Владимир (iAge Engineering)
NodeJS в HighLoad проекте / Акрицкий Владимир (iAge Engineering)NodeJS в HighLoad проекте / Акрицкий Владимир (iAge Engineering)
NodeJS в HighLoad проекте / Акрицкий Владимир (iAge Engineering)
 

Similar to So Your WAF Needs a Parser

Макс Лапшин Erlyvideo
Макс Лапшин   ErlyvideoМакс Лапшин   Erlyvideo
Макс Лапшин Erlyvideo
Siel01
 
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...
IT-Portfolio
 
Микросервисы: опыт использования в нагруженном проекте / Вадим Мадисон (М-Тех)
Микросервисы: опыт использования в нагруженном проекте / Вадим Мадисон (М-Тех)Микросервисы: опыт использования в нагруженном проекте / Вадим Мадисон (М-Тех)
Микросервисы: опыт использования в нагруженном проекте / Вадим Мадисон (М-Тех)
Ontico
 
Михаил Боднарчук Современное функциональное тестирование с Codeception
Михаил Боднарчук Современное функциональное тестирование с CodeceptionМихаил Боднарчук Современное функциональное тестирование с Codeception
Михаил Боднарчук Современное функциональное тестирование с Codeception
Albina Tiupa
 
Erlyvideo — сервер потокового видео.
Erlyvideo — сервер потокового видео.Erlyvideo — сервер потокового видео.
Erlyvideo — сервер потокового видео.
Max Lapshin
 
М. Боднарчук Современное функциональное тестирование с Codeception
М. Боднарчук Современное функциональное тестирование с CodeceptionМ. Боднарчук Современное функциональное тестирование с Codeception
М. Боднарчук Современное функциональное тестирование с Codeception
Albina Tiupa
 
Easy authcache 2 кэширование для pro. Родионов Игорь
Easy authcache 2   кэширование для pro. Родионов ИгорьEasy authcache 2   кэширование для pro. Родионов Игорь
Easy authcache 2 кэширование для pro. Родионов Игорь
PVasili
 
What's new in Visual Studio 2012
What's new in Visual Studio 2012What's new in Visual Studio 2012
What's new in Visual Studio 2012
InTRUEdeR
 
Alexei Sintsov - "Between error and vulerability - one step"
Alexei Sintsov - "Between error and vulerability - one step"Alexei Sintsov - "Between error and vulerability - one step"
Alexei Sintsov - "Between error and vulerability - one step"
Andrew Mayorov
 

Similar to So Your WAF Needs a Parser (20)

Software Analytics in frontend
Software Analytics in frontendSoftware Analytics in frontend
Software Analytics in frontend
 
Вадим Мадисон "Опыт разработки через микросервисы"
Вадим Мадисон "Опыт разработки через микросервисы"Вадим Мадисон "Опыт разработки через микросервисы"
Вадим Мадисон "Опыт разработки через микросервисы"
 
Sivko
SivkoSivko
Sivko
 
Миграция JIRA - безобразие или безрассудство
Миграция JIRA - безобразие или безрассудствоМиграция JIRA - безобразие или безрассудство
Миграция JIRA - безобразие или безрассудство
 
My Open Source (Sept 2017)
My Open Source (Sept 2017)My Open Source (Sept 2017)
My Open Source (Sept 2017)
 
Codeception Introduction
Codeception IntroductionCodeception Introduction
Codeception Introduction
 
Codeception UATestingDays
Codeception UATestingDaysCodeception UATestingDays
Codeception UATestingDays
 
D2D Pizza JS Илья Беда "Куда мы все катимся?"
D2D Pizza JS Илья Беда "Куда мы все катимся?"D2D Pizza JS Илья Беда "Куда мы все катимся?"
D2D Pizza JS Илья Беда "Куда мы все катимся?"
 
Денис Иванов
Денис ИвановДенис Иванов
Денис Иванов
 
Макс Лапшин Erlyvideo
Макс Лапшин   ErlyvideoМакс Лапшин   Erlyvideo
Макс Лапшин Erlyvideo
 
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...
 
Обзор перспективных баз данных для highload / Юрий Насретдинов
Обзор перспективных баз данных для highload / Юрий НасретдиновОбзор перспективных баз данных для highload / Юрий Насретдинов
Обзор перспективных баз данных для highload / Юрий Насретдинов
 
Микросервисы: опыт использования в нагруженном проекте / Вадим Мадисон (М-Тех)
Микросервисы: опыт использования в нагруженном проекте / Вадим Мадисон (М-Тех)Микросервисы: опыт использования в нагруженном проекте / Вадим Мадисон (М-Тех)
Микросервисы: опыт использования в нагруженном проекте / Вадим Мадисон (М-Тех)
 
Михаил Боднарчук Современное функциональное тестирование с Codeception
Михаил Боднарчук Современное функциональное тестирование с CodeceptionМихаил Боднарчук Современное функциональное тестирование с Codeception
Михаил Боднарчук Современное функциональное тестирование с Codeception
 
Erlyvideo — сервер потокового видео.
Erlyvideo — сервер потокового видео.Erlyvideo — сервер потокового видео.
Erlyvideo — сервер потокового видео.
 
М. Боднарчук Современное функциональное тестирование с Codeception
М. Боднарчук Современное функциональное тестирование с CodeceptionМ. Боднарчук Современное функциональное тестирование с Codeception
М. Боднарчук Современное функциональное тестирование с Codeception
 
Easy authcache 2 кэширование для pro. Родионов Игорь
Easy authcache 2   кэширование для pro. Родионов ИгорьEasy authcache 2   кэширование для pro. Родионов Игорь
Easy authcache 2 кэширование для pro. Родионов Игорь
 
What's new in Visual Studio 2012
What's new in Visual Studio 2012What's new in Visual Studio 2012
What's new in Visual Studio 2012
 
InterSystems Community and Projects in CIS November 2015
InterSystems Community and Projects in CIS November 2015InterSystems Community and Projects in CIS November 2015
InterSystems Community and Projects in CIS November 2015
 
Alexei Sintsov - "Between error and vulerability - one step"
Alexei Sintsov - "Between error and vulerability - one step"Alexei Sintsov - "Between error and vulerability - one step"
Alexei Sintsov - "Between error and vulerability - one step"
 

More from yalegko

More from yalegko (14)

SD-WAN Internet Census
SD-WAN Internet CensusSD-WAN Internet Census
SD-WAN Internet Census
 
WebGoat.SDWAN.Net in Depth
WebGoat.SDWAN.Net in DepthWebGoat.SDWAN.Net in Depth
WebGoat.SDWAN.Net in Depth
 
[ISC] Docker + Swarm
[ISC] Docker + Swarm[ISC] Docker + Swarm
[ISC] Docker + Swarm
 
How to Open School For Young Hackers
How to Open School For Young HackersHow to Open School For Young Hackers
How to Open School For Young Hackers
 
How to make school CTF
How to make school CTFHow to make school CTF
How to make school CTF
 
AOP and Inversion of Conrol
AOP and Inversion of ConrolAOP and Inversion of Conrol
AOP and Inversion of Conrol
 
White-Box HMAC. Make your cipher secure to white-box attacks.
White-Box HMAC. Make your cipher secure to white-box attacks.White-Box HMAC. Make your cipher secure to white-box attacks.
White-Box HMAC. Make your cipher secure to white-box attacks.
 
White box cryptography
White box cryptographyWhite box cryptography
White box cryptography
 
How to admin
How to adminHow to admin
How to admin
 
ИИ: Этические аспекты проблемы выбора
ИИ: Этические аспекты проблемы выбораИИ: Этические аспекты проблемы выбора
ИИ: Этические аспекты проблемы выбора
 
Covert timing channels using HTTP cache headers
Covert timing channels using HTTP cache headersCovert timing channels using HTTP cache headers
Covert timing channels using HTTP cache headers
 
Covert timing channels using HTTP cache headers
Covert timing channels using HTTP cache headersCovert timing channels using HTTP cache headers
Covert timing channels using HTTP cache headers
 
Include and extend in Ruby
Include and extend in RubyInclude and extend in Ruby
Include and extend in Ruby
 
Not a children in da web
Not a children in da webNot a children in da web
Not a children in da web
 

So Your WAF Needs a Parser

  • 1. Итак вам нужен парсер или Опыт разработки модуля межсетевого экранирования для Брославский Олег Колегов Денис
  • 4. Intro Совместная работа PT Application Firewall Research Team Принимали участие: • Брославский Олег • Гречнев Сергей • Колегов Денис • Кочуркин Иван • Олексов Никита • Решетников Сергей • Худяшов Иван
  • 5. SQL Injections SELECT * FROM users WHERE email = '$email' AND password = md5('$password'); “Did you really name your son Robert'); DROP TABLE Students; -- ?” © Exploits of a Mom (xkcd #327) SELECT * FROM users WHERE email = 'xxx' AND password = md5('xxx') OR 1=1; -- 1');
  • 7. WAF Client WAF Web Server “That’s not a bug, that’s unintended user behavior“ - some developer … makes your system 99,96%secure …
  • 8. WAF SQLi detection • Лексический подход (регулярные выражения) (?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_user|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_l ock))?|n(?:et6?_(aton|ntoa)|s(?:ert|tr)|terval)?|f(null)?)|u(?:n(?:compress(?:ed_length)?|ix_timestamp|hex)|tc_(date|time|timestamp)|p(?:dat exml|per)|uid(_short)?|case|ser)|l(?:o(?:ca(?:l(timestamp)?|te)|g(2|10)?|ad_file|wer)|ast(_day|_insert_id)?|e(?:(?:as|f)t|ngth)|case|trim|pa d|n)|t(?:ime(stamp|stampadd|stampdiff|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_(base64|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_(add|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|eat es)t|et_(format|lock))|o(?:(?:ld_passwo)?rd|ct(et_length)?)|we(?:ek(day|ofyear)… <Еще несколько тысяч символов> • Лексико-сигнатурный подход (libinjection) -6270" UNION ALL SELECT 5594, 5594, 5594, 5594, 5594, 5594, 5594, 5594, 5594, 5594, 5594, 5594, 5594, 5594, 5594, 5594, 5594, 5594, 5594, 5594, 5594, 5594, 5594, 5594, 5594, 5594, 5594, 5594, 5594, 5594, 5594, 5594, 5594, 5594, 5594, 5594, 5594, 5594, 5594, 5594, 5594# AND "JWWQ"="JWWQ sUk1,1,1,1,1,1,1,1,& • Подходы, основанные на машинном обучении
  • 9. Impact Michael Stepankin. Advanced Web Application Fuzzing
  • 10. WAF + DBFW Client WAF Web Server DBFW Database SELECT * FROM users WHERE email = 'xxx' AND password = md5('xxx') OR 1=1; -- 1'); ?name=xxx&password=xxx')+OR+1=1;+--+1
  • 11. SELECT * FROM users WHERE email = 'xxx' AND password = md5('xxx') OR 1=1; -- 1'); Advanced SQL Analysis select and * password from = users md5 where ( email “HI” = ) “xxx“ ; select md5 * ( from “xxx” users ) where OR email 1 = = “xxx” 1 and ; password <COMMENT> 16 ≠ 20 SELECT * FROM users WHERE email = 'xxx' AND password = md5('xxx') OR 1=1; -- 1'); SELECT * FROM users WHERE email = 'xxx' AND password = md5(‘HI'); Подсчёт токенов [expression] [expression] or [expression] email = xxx [expression] password = and [expression] 1 = 1 email password whereusers [expression] md5 xxx [where][fields] [from]select [select] Анализ синтаксического дерева
  • 12. Advanced SQL Analysis Кроме того, анализ синтаксического дерева позволяет: Анализ синтаксиса Анализ семантики построение «узкоспециализированной» грамматики веб-приложения построение «профиля» SQL-запросов веб-приложения управление доступом для пользователей веб-приложения
  • 13. SQL Parsing Parser Syntax analysis Protectors Protector 1 … Protector N Concrete syntax tree MySQL Query
  • 14. Existing Parsers • Локальные runtime-specific варианты
  • 15. Existing Parsers • Локальные runtime-specific-варианты • Коммерческие решения (http://www.sqlparser.com)
  • 16. Existing Parsers • Локальные runtime-specific-варианты • Коммерческие решения (http://www.sqlparser.com) • Реализации движков БД на конкретном языке (e.g. https://github.com/youtube/vitess)
  • 17. Existing Parsers • Локальные runtime-specific-варианты • Коммерческие решения (http://www.sqlparser.com) • Реализации движков БД на конкретном языке (e.g. https://github.com/youtube/vitess) • Официальная YACC-грамматика MySQL (https://github.com/twitter/mysql)
  • 18. Existing Parsers • Локальные runtime-specific-варианты • Коммерческие решения (http://www.sqlparser.com) • Реализации движков БД на конкретном языке (e.g. https://github.com/youtube/vitess) • Официальная YACC-грамматика MySQL (https://github.com/twitter/mysql) • ANTLR3-грамматика для MySQL Workbench (https://github.com/mysql/mysql-workbench)
  • 19. Existing Parsers • Локальные runtime-specific-варианты • Коммерческие решения (http://www.sqlparser.com) • Реализации движков БД на конкретном языке (e.g. https://github.com/youtube/vitess) • Официальная YACC-грамматика MySQL (https://github.com/twitter/mysql) • ANTLR3-грамматика для MySQL Workbench (https://github.com/mysql/mysql-workbench) © Standards (xkcd #927)
  • 20. ANLTR MySql parser AST TsqlParser PlqlParser Syntax analysis Semantic analysis … Protector 1 … Protector N CST AST Abstract syntax analysis Query
  • 22. Proof Of Concept Python 2.7 Возраст рантайма ~ 2 года (июль 2015) Количество разработчиков 12 человек Количество коммитов 78
  • 23. Proof Of Concept Python 2.7 • Возраст рантайма ~ 2 года 476,33 0 100 200 300 400 500 600 Q/Sec Python 2.7 Минимальный приемлемый результат • 10 000 запросов/секунду
  • 24. Proof Of Concept С++ Возраст рантайма ~ 1 год (март 2016) Количество разработчиков 33 человека Количество коммитов 336
  • 25. Proof Of Concept Python 2.7 • Возраст рантайма ~ 2 года C++11 • Возраст рантайма ~ 1 года 476,33 11052,3 0 2000 4000 6000 8000 10000 12000 Q/Sec Python 2.7 C++11 Минимальный приемлемый результат • 10 000 запросов/секунду
  • 26. Proof Of Concept 476,33 11052,3 0 2000 4000 6000 8000 10000 12000 Q/Sec Python 2.7 C++11 Минимальный приемлемый результат • 10 000 запросов/секунду Python 2.7 • Возраст рантайма ~ 2 года C++11 • Возраст рантайма ~ 1 года
  • 27. Proof Of Concept 476,33 11052,3 0 2000 4000 6000 8000 10000 12000 Q/Sec Python 2.7 C++11 Минимальный приемлемый результат • 10 000 запросов/секунду Python 2.7 • Возраст рантайма ~ 2 года C++11 • Возраст рантайма ~ 1 года
  • 28. Positive Grammar (!) Не зависит от рантайма https://habrahabr.ru/company/pt/blog/339336/ https://github.com/antlr/grammars-v4/tree/master/mysql
  • 29. Release Fail! • У нас нет свободных С++ разработчиков
  • 30. Release Fail! • У нас нет свободных С++ разработчиков • С++11 не поддерживается у нас в стеке
  • 31. Release Fail! • У нас нет свободных С++ разработчиков • С++11 не поддерживается у нас в стеке • Кажется, C++11 не получится втянуть на Debian Wheezy
  • 32. Test Them All Python 3.5 Возраст рантайма ~ 2 года Количество разработчиков 12 человек Количество коммитов 77
  • 33. Test Them All Минимальный приемлемый результат • 10 000 запросов/секунду Python 3.5 • Возраст рантайма ~ 2 года ¯_(ツ)_/¯ 476,33 11052,3 449,95 0 2000 4000 6000 8000 10000 12000 Q/Sec Python 2.7 C++11 Python 3.5
  • 34. Test Them All PyPy Возраст рантайма Официально не поддерживается Количество разработчиков - Количество коммитов -
  • 35. 476,33 11052,3 449,95 996,26 0 2000 4000 6000 8000 10000 12000 Q/Sec Python 2.7 C++11 Python 3.5 PyPy Test Them All Минимальный приемлемый результат • 10 000 запросов/секунду PyPy • Официально не поддерживается
  • 36. Time To Go Время добавить Go!
  • 37. Time To Go Golang Возраст рантайма ~ 2 года (декабрь 2015) Количество разработчиков 15 человек Количество коммитов 213
  • 38. Time To Go Минимальный приемлемый результат • 10 000 запросов/секунду Golang • Возраст рантайма ~ 11 месяцев 476,33 11052,3 449,95 996,26 372,6 0 2000 4000 6000 8000 10000 12000 Q/Sec Python 2.7 C++11 Python 3.5 PyPy Golang
  • 39. Test Them All С# Возраст рантайма ~ 2 года (июнь 2015) Количество разработчиков 13 человек Количество коммитов 83
  • 40. Test Them All Минимальный приемлемый результат • 10 000 запросов/секунду C# • Возраст рантайма ~ 11 месяцев 476,33 11052,3 449,95 996,26 372,6 35543,7 0 5000 10000 15000 20000 25000 30000 35000 40000 Q/Sec Python 2.7 C++11 Python 3.5 PyPy Golang C#
  • 48. The Last One Java Возраст рантайма ~ 7 лет (январь 2010) Количество разработчиков 28 человек Количество коммитов 1600
  • 49. 476,33 11052,3 449,95 996,26 372,6 35543,7 72446,72 0 10000 20000 30000 40000 50000 60000 70000 80000 Q/Sec Python 2.7 C++11 Python 3.5 PyPy Golang C# Java Java Comeback Минимальный приемлемый результат • 10 000 запросов/секунду Java • Возраст рантайма ~ 7 лет
  • 51. The Chosen One Kotlin Возраст рантайма Официально не поддерживается Количество разработчиков - Количество коммитов -
  • 52. 476,33 11052,3 449,95 996,26 372,6 35543,7 72446,72 60946,21 0 10000 20000 30000 40000 50000 60000 70000 80000 Q/Sec Python 2.7 C++11 Python 3.5 PyPy Golang C# Java Kotlin Kotlin Performance Минимальный приемлемый результат • 10 000 запросов/секунду Kotlin • Полностью совместим с Java
  • 53. Final Results ANTLR Runtime Query Mode (q/sec) File Mode (MiB/sec) Python 2.7 466.28 13.4 Python 3.5 449.95 19.3 Python 3.6 419.17 16.5 PyPy 996.26 22.02 Golang 372.60 x CPP 11052.30 11.0 C# 35543.7 3.09 Java 72446.72 51.04 Kotlin 60946.21 35.59
  • 54. Desired State MySql parser AST TsqlParser PlqlParser Syntax analysis Semantic analysis … Protector 1 … Protector N CST AST Abstract syntax analysis Query
  • 55. Desired State MySql parser AST TsqlParser PlqlParser Syntax analysis Semantic analysis … Protector 1 … Protector N CST AST Abstract syntax analysis Query
  • 56. Universal Syntax Tree MySql parser AST TsqlParser PlqlParser Syntax analysis … CST AST Abstract syntax analysis Query
  • 57. Universal Syntax Tree MySql parser MySQL visitor TsqlParser PlqlParser … CST USTQuery TsqlSQL visitor PlqlSQL visitor
  • 58. Usage Unification MySql parser MySQL visitor TsqlParser PlqlParser … CST USTQuery TsqlSQL visitor PlqlSQL visitor Backend 1 Backend 1 Backend n
  • 59. Usage Unification MySql parser MySQL visitor TsqlParser PlqlParser … CST USTQuery TsqlSQL visitor PlqlSQL visitor Backend 1 Backend 1 Backend n IDL Codegenerator Runtime Artifacts
  • 60. We Need More Artifacts! IDL CodeGenerator Runtime Artifacts
  • 61. We Need More Artifacts! IDL CodeGenerator Runtime Artifacts Positive IDL Aule Вдохновлён Web IDL
  • 62. We Need More Artifacts! IDL CodeGenerator Runtime Artifacts Positive IDL Aule Вдохновлён Web IDL
  • 63. We Need More Artifacts! IDL CodeGenerator Runtime Artifacts Positive IDL Aule Вдохновлён Web IDL
  • 64. We Need More Artifacts! IDL CodeGenerator Runtime Artifacts Positive IDL Aule Вдохновлён Web IDL
  • 65. We Need More Artifacts! IDL CodeGenerator Runtime Artifacts Positive IDL Aule Вдохновлён Web IDL
  • 66. We Need More Artifacts! IDL CodeGenerator Runtime Artifacts Positive IDL Aule Вдохновлён Web IDL
  • 67. We Need More Artifacts! IDL CodeGenerator Runtime Artifacts Positive IDL Aule Вдохновлён Web IDL /PositiveTechnologies/aule
  • 70. Art Of Architecture Parser Protector 1 … Protector N Aule
  • 71. Art Of Architecture Parser Protector 1 … Protector N Interceptor Aule