SlideShare a Scribd company logo
1 of 79
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
• Возраст рантайма
~ 2 года
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
MySql parser
AST
TsqlParser
PlqlParser
Syntax analysis Semantic analysis
…
Protector 1
…
Protector N
CST AST
Abstract syntax
analysis
Query
Desired State
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
As a Conclusion
• ANTLR может выдавать достаточную производительность
As a Conclusion
• ANTLR может выдавать достаточную производительность
• Производительность конкретного рантайма не всегда очевидна
As a Conclusion
• ANTLR может выдавать достаточную производительность
• Производительность конкретного рантайма не всегда очевидна
• Парсер – ничто, инфраструктура – всё
As a Conclusion
• ANTLR может выдавать достаточную производительность
• Производительность конкретного рантайма не всегда очевидна
• Парсер – ничто, инфраструктура – всё
• ANTLR4-грамматика для MySQL – open source (MIT)
https://github.com/antlr/grammars-v4/tree/master/mysql
As a Conclusion
• ANTLR может выдавать достаточную производительность
• Производительность конкретного рантайма не всегда очевидна
• Парсер – ничто, инфраструктура – всё
• ANTLR4-грамматика для MySQL – open source (MIT)
https://github.com/antlr/grammars-v4/tree/master/mysql
• Aule – open source (GPL)
https://github.com/PositiveTechnologies/aule
As a Conclusion
• ANTLR может выдавать достаточную производительность
• Производительность конкретного рантайма не всегда очевидна
• Парсер – ничто, инфраструктура – всё
• ANTLR4-грамматика для MySQL – open source (MIT)
https://github.com/antlr/grammars-v4/tree/master/mysql
• Aule – open source (GPL)
https://github.com/PositiveTechnologies/aule
Thank you!
ptsecurity.com

More Related Content

What's hot

Мой маленький уютный PaaS / Илья Беда (bro.agency)
Мой маленький уютный PaaS / Илья Беда (bro.agency)Мой маленький уютный PaaS / Илья Беда (bro.agency)
Мой маленький уютный PaaS / Илья Беда (bro.agency)Ontico
 
Чеклист по клиентской оптимизации - Лавлинский Николай, РИТ++ 2017
Чеклист по клиентской оптимизации - Лавлинский Николай, РИТ++ 2017Чеклист по клиентской оптимизации - Лавлинский Николай, РИТ++ 2017
Чеклист по клиентской оптимизации - Лавлинский Николай, РИТ++ 2017Николай Лавлинский
 
Как не положить тысячи серверов с помощью системы централизованного управлени...
Как не положить тысячи серверов с помощью системы централизованного управлени...Как не положить тысячи серверов с помощью системы централизованного управлени...
Как не положить тысячи серверов с помощью системы централизованного управлени...Ontico
 
Релиз инжиниринг Mail.ru, взгляд изнутри / Максим Глеков (Mail.Ru Group)
Релиз инжиниринг Mail.ru, взгляд изнутри / Максим Глеков (Mail.Ru Group)Релиз инжиниринг Mail.ru, взгляд изнутри / Максим Глеков (Mail.Ru Group)
Релиз инжиниринг Mail.ru, взгляд изнутри / Максим Глеков (Mail.Ru Group)Ontico
 
Как devops исчерпывает себя, и что будет дальше / Кирилл Вечера (Jetware)
Как devops исчерпывает себя, и что будет дальше / Кирилл Вечера (Jetware)Как devops исчерпывает себя, и что будет дальше / Кирилл Вечера (Jetware)
Как devops исчерпывает себя, и что будет дальше / Кирилл Вечера (Jetware)Ontico
 
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)Ontico
 
Антон Галицын
Антон ГалицынАнтон Галицын
Антон ГалицынCodeFest
 
Быстрый старт iOS приложения на примере iOS Почты Mail.Ru / Николай Морев (Ma...
Быстрый старт iOS приложения на примере iOS Почты Mail.Ru / Николай Морев (Ma...Быстрый старт iOS приложения на примере iOS Почты Mail.Ru / Николай Морев (Ma...
Быстрый старт iOS приложения на примере iOS Почты Mail.Ru / Николай Морев (Ma...Ontico
 
Архитектура поиска в Booking.com / Иван Круглов (Booking.com)
Архитектура поиска в Booking.com / Иван Круглов (Booking.com)Архитектура поиска в Booking.com / Иван Круглов (Booking.com)
Архитектура поиска в Booking.com / Иван Круглов (Booking.com)Ontico
 
Настройка и оптимизация высоконагруженных J2EE веб-приложений / Шамим Ахмед (...
Настройка и оптимизация высоконагруженных J2EE веб-приложений / Шамим Ахмед (...Настройка и оптимизация высоконагруженных J2EE веб-приложений / Шамим Ахмед (...
Настройка и оптимизация высоконагруженных J2EE веб-приложений / Шамим Ахмед (...Ontico
 
Приключения проекта от компьютера разработчика до серьезных нагрузок / Андрей...
Приключения проекта от компьютера разработчика до серьезных нагрузок / Андрей...Приключения проекта от компьютера разработчика до серьезных нагрузок / Андрей...
Приключения проекта от компьютера разработчика до серьезных нагрузок / Андрей...Ontico
 
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...Ontico
 
Тестирование через мониторинг или холакратия на практике / Максим Чистяков (U...
Тестирование через мониторинг или холакратия на практике / Максим Чистяков (U...Тестирование через мониторинг или холакратия на практике / Максим Чистяков (U...
Тестирование через мониторинг или холакратия на практике / Максим Чистяков (U...Ontico
 
Денис Иванов
Денис ИвановДенис Иванов
Денис ИвановCodeFest
 
Пайплайн машинного обучения на Apache Spark / Павел Клеменков (Rambler&Co)
Пайплайн машинного обучения на Apache Spark / Павел Клеменков (Rambler&Co)Пайплайн машинного обучения на Apache Spark / Павел Клеменков (Rambler&Co)
Пайплайн машинного обучения на Apache Spark / Павел Клеменков (Rambler&Co)Ontico
 
NVMf: 5 млн IOPS по сети своими руками / Андрей Николаенко (IBS)
NVMf: 5 млн IOPS по сети своими руками / Андрей Николаенко (IBS)NVMf: 5 млн IOPS по сети своими руками / Андрей Николаенко (IBS)
NVMf: 5 млн IOPS по сети своими руками / Андрей Николаенко (IBS)Ontico
 
Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...
Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...
Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...Ontico
 
Javascript-фреймворки:
 должен остаться только один
Javascript-фреймворки:
 должен остаться только одинJavascript-фреймворки:
 должен остаться только один
Javascript-фреймворки:
 должен остаться только одинSergey Xek
 
Сегментируем 600 млн. пользователей в режиме реального времени каждый день. H...
Сегментируем 600 млн. пользователей в режиме реального времени каждый день. H...Сегментируем 600 млн. пользователей в режиме реального времени каждый день. H...
Сегментируем 600 млн. пользователей в режиме реального времени каждый день. H...Ontico
 
Переосмысливая подход к инфраструктурному коду / Евгений Пивень (IPONWEB)
Переосмысливая подход к инфраструктурному коду / Евгений Пивень (IPONWEB)Переосмысливая подход к инфраструктурному коду / Евгений Пивень (IPONWEB)
Переосмысливая подход к инфраструктурному коду / Евгений Пивень (IPONWEB)Ontico
 

What's hot (20)

Мой маленький уютный PaaS / Илья Беда (bro.agency)
Мой маленький уютный PaaS / Илья Беда (bro.agency)Мой маленький уютный PaaS / Илья Беда (bro.agency)
Мой маленький уютный PaaS / Илья Беда (bro.agency)
 
Чеклист по клиентской оптимизации - Лавлинский Николай, РИТ++ 2017
Чеклист по клиентской оптимизации - Лавлинский Николай, РИТ++ 2017Чеклист по клиентской оптимизации - Лавлинский Николай, РИТ++ 2017
Чеклист по клиентской оптимизации - Лавлинский Николай, РИТ++ 2017
 
Как не положить тысячи серверов с помощью системы централизованного управлени...
Как не положить тысячи серверов с помощью системы централизованного управлени...Как не положить тысячи серверов с помощью системы централизованного управлени...
Как не положить тысячи серверов с помощью системы централизованного управлени...
 
Релиз инжиниринг Mail.ru, взгляд изнутри / Максим Глеков (Mail.Ru Group)
Релиз инжиниринг Mail.ru, взгляд изнутри / Максим Глеков (Mail.Ru Group)Релиз инжиниринг Mail.ru, взгляд изнутри / Максим Глеков (Mail.Ru Group)
Релиз инжиниринг Mail.ru, взгляд изнутри / Максим Глеков (Mail.Ru Group)
 
Как devops исчерпывает себя, и что будет дальше / Кирилл Вечера (Jetware)
Как devops исчерпывает себя, и что будет дальше / Кирилл Вечера (Jetware)Как devops исчерпывает себя, и что будет дальше / Кирилл Вечера (Jetware)
Как devops исчерпывает себя, и что будет дальше / Кирилл Вечера (Jetware)
 
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
 
Антон Галицын
Антон ГалицынАнтон Галицын
Антон Галицын
 
Быстрый старт iOS приложения на примере iOS Почты Mail.Ru / Николай Морев (Ma...
Быстрый старт iOS приложения на примере iOS Почты Mail.Ru / Николай Морев (Ma...Быстрый старт iOS приложения на примере iOS Почты Mail.Ru / Николай Морев (Ma...
Быстрый старт iOS приложения на примере iOS Почты Mail.Ru / Николай Морев (Ma...
 
Архитектура поиска в Booking.com / Иван Круглов (Booking.com)
Архитектура поиска в Booking.com / Иван Круглов (Booking.com)Архитектура поиска в Booking.com / Иван Круглов (Booking.com)
Архитектура поиска в Booking.com / Иван Круглов (Booking.com)
 
Настройка и оптимизация высоконагруженных J2EE веб-приложений / Шамим Ахмед (...
Настройка и оптимизация высоконагруженных J2EE веб-приложений / Шамим Ахмед (...Настройка и оптимизация высоконагруженных J2EE веб-приложений / Шамим Ахмед (...
Настройка и оптимизация высоконагруженных J2EE веб-приложений / Шамим Ахмед (...
 
Приключения проекта от компьютера разработчика до серьезных нагрузок / Андрей...
Приключения проекта от компьютера разработчика до серьезных нагрузок / Андрей...Приключения проекта от компьютера разработчика до серьезных нагрузок / Андрей...
Приключения проекта от компьютера разработчика до серьезных нагрузок / Андрей...
 
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
 
Тестирование через мониторинг или холакратия на практике / Максим Чистяков (U...
Тестирование через мониторинг или холакратия на практике / Максим Чистяков (U...Тестирование через мониторинг или холакратия на практике / Максим Чистяков (U...
Тестирование через мониторинг или холакратия на практике / Максим Чистяков (U...
 
Денис Иванов
Денис ИвановДенис Иванов
Денис Иванов
 
Пайплайн машинного обучения на Apache Spark / Павел Клеменков (Rambler&Co)
Пайплайн машинного обучения на Apache Spark / Павел Клеменков (Rambler&Co)Пайплайн машинного обучения на Apache Spark / Павел Клеменков (Rambler&Co)
Пайплайн машинного обучения на Apache Spark / Павел Клеменков (Rambler&Co)
 
NVMf: 5 млн IOPS по сети своими руками / Андрей Николаенко (IBS)
NVMf: 5 млн IOPS по сети своими руками / Андрей Николаенко (IBS)NVMf: 5 млн IOPS по сети своими руками / Андрей Николаенко (IBS)
NVMf: 5 млн IOPS по сети своими руками / Андрей Николаенко (IBS)
 
Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...
Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...
Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...
 
Javascript-фреймворки:
 должен остаться только один
Javascript-фреймворки:
 должен остаться только одинJavascript-фреймворки:
 должен остаться только один
Javascript-фреймворки:
 должен остаться только один
 
Сегментируем 600 млн. пользователей в режиме реального времени каждый день. H...
Сегментируем 600 млн. пользователей в режиме реального времени каждый день. H...Сегментируем 600 млн. пользователей в режиме реального времени каждый день. H...
Сегментируем 600 млн. пользователей в режиме реального времени каждый день. H...
 
Переосмысливая подход к инфраструктурному коду / Евгений Пивень (IPONWEB)
Переосмысливая подход к инфраструктурному коду / Евгений Пивень (IPONWEB)Переосмысливая подход к инфраструктурному коду / Евгений Пивень (IPONWEB)
Переосмысливая подход к инфраструктурному коду / Евгений Пивень (IPONWEB)
 

Similar to Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский, Денис Колегов (Позитив Текнолоджис)

Software Analytics in frontend
Software Analytics in frontendSoftware Analytics in frontend
Software Analytics in frontendDenis Kolesnikov
 
Вадим Мадисон "Опыт разработки через микросервисы"
Вадим Мадисон "Опыт разработки через микросервисы"Вадим Мадисон "Опыт разработки через микросервисы"
Вадим Мадисон "Опыт разработки через микросервисы"Tanya Denisyuk
 
Миграция JIRA - безобразие или безрассудство
Миграция JIRA - безобразие или безрассудствоМиграция JIRA - безобразие или безрассудство
Миграция JIRA - безобразие или безрассудствоSQALab
 
My Open Source (Sept 2017)
My Open Source (Sept 2017)My Open Source (Sept 2017)
My Open Source (Sept 2017)Roman Dvornov
 
Codeception UATestingDays
Codeception UATestingDaysCodeception UATestingDays
Codeception UATestingDaysdavertmik
 
Макс Лапшин Erlyvideo
Макс Лапшин   ErlyvideoМакс Лапшин   Erlyvideo
Макс Лапшин ErlyvideoSiel01
 
D2D Pizza JS Илья Беда "Куда мы все катимся?"
D2D Pizza JS Илья Беда "Куда мы все катимся?"D2D Pizza JS Илья Беда "Куда мы все катимся?"
D2D Pizza JS Илья Беда "Куда мы все катимся?"Dev2Dev
 
Денис Иванов
Денис ИвановДенис Иванов
Денис ИвановCodeFest
 
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)Pavel Tsukanov
 
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...IT-Portfolio
 
Микросервисы: опыт использования в нагруженном проекте / Вадим Мадисон (М-Тех)
Микросервисы: опыт использования в нагруженном проекте / Вадим Мадисон (М-Тех)Микросервисы: опыт использования в нагруженном проекте / Вадим Мадисон (М-Тех)
Микросервисы: опыт использования в нагруженном проекте / Вадим Мадисон (М-Тех)Ontico
 
Обзор перспективных баз данных для highload / Юрий Насретдинов
Обзор перспективных баз данных для highload / Юрий НасретдиновОбзор перспективных баз данных для highload / Юрий Насретдинов
Обзор перспективных баз данных для highload / Юрий НасретдиновOntico
 
Erlyvideo — сервер потокового видео.
Erlyvideo — сервер потокового видео.Erlyvideo — сервер потокового видео.
Erlyvideo — сервер потокового видео.Max Lapshin
 
Михаил Боднарчук Современное функциональное тестирование с Codeception
Михаил Боднарчук Современное функциональное тестирование с CodeceptionМихаил Боднарчук Современное функциональное тестирование с Codeception
Михаил Боднарчук Современное функциональное тестирование с CodeceptionAlbina Tiupa
 
М. Боднарчук Современное функциональное тестирование с Codeception
М. Боднарчук Современное функциональное тестирование с CodeceptionМ. Боднарчук Современное функциональное тестирование с Codeception
М. Боднарчук Современное функциональное тестирование с CodeceptionAlbina Tiupa
 
Easy authcache 2 кэширование для pro. Родионов Игорь
Easy authcache 2   кэширование для pro. Родионов ИгорьEasy authcache 2   кэширование для pro. Родионов Игорь
Easy authcache 2 кэширование для pro. Родионов ИгорьPVasili
 
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
 
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 2012InTRUEdeR
 

Similar to Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский, Денис Колегов (Позитив Текнолоджис) (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
 
Макс Лапшин Erlyvideo
Макс Лапшин   ErlyvideoМакс Лапшин   Erlyvideo
Макс Лапшин Erlyvideo
 
D2D Pizza JS Илья Беда "Куда мы все катимся?"
D2D Pizza JS Илья Беда "Куда мы все катимся?"D2D Pizza JS Илья Беда "Куда мы все катимся?"
D2D Pizza JS Илья Беда "Куда мы все катимся?"
 
Денис Иванов
Денис ИвановДенис Иванов
Денис Иванов
 
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)
 
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...
 
Микросервисы: опыт использования в нагруженном проекте / Вадим Мадисон (М-Тех)
Микросервисы: опыт использования в нагруженном проекте / Вадим Мадисон (М-Тех)Микросервисы: опыт использования в нагруженном проекте / Вадим Мадисон (М-Тех)
Микросервисы: опыт использования в нагруженном проекте / Вадим Мадисон (М-Тех)
 
Обзор перспективных баз данных для highload / Юрий Насретдинов
Обзор перспективных баз данных для highload / Юрий НасретдиновОбзор перспективных баз данных для highload / Юрий Насретдинов
Обзор перспективных баз данных для highload / Юрий Насретдинов
 
Erlyvideo — сервер потокового видео.
Erlyvideo — сервер потокового видео.Erlyvideo — сервер потокового видео.
Erlyvideo — сервер потокового видео.
 
Михаил Боднарчук Современное функциональное тестирование с Codeception
Михаил Боднарчук Современное функциональное тестирование с CodeceptionМихаил Боднарчук Современное функциональное тестирование с Codeception
Михаил Боднарчук Современное функциональное тестирование с Codeception
 
М. Боднарчук Современное функциональное тестирование с Codeception
М. Боднарчук Современное функциональное тестирование с CodeceptionМ. Боднарчук Современное функциональное тестирование с Codeception
М. Боднарчук Современное функциональное тестирование с Codeception
 
Easy authcache 2 кэширование для pro. Родионов Игорь
Easy authcache 2   кэширование для pro. Родионов ИгорьEasy authcache 2   кэширование для pro. Родионов Игорь
Easy authcache 2 кэширование для pro. Родионов Игорь
 
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"
 
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
 

More from Ontico

Масштабируя DNS / Артем Гавриченков (Qrator Labs)
Масштабируя DNS / Артем Гавриченков (Qrator Labs)Масштабируя DNS / Артем Гавриченков (Qrator Labs)
Масштабируя DNS / Артем Гавриченков (Qrator Labs)Ontico
 
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...Ontico
 
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)Ontico
 
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...Ontico
 
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)Ontico
 
MySQL Replication — Advanced Features / Петр Зайцев (Percona)
MySQL Replication — Advanced Features / Петр Зайцев (Percona)MySQL Replication — Advanced Features / Петр Зайцев (Percona)
MySQL Replication — Advanced Features / Петр Зайцев (Percona)Ontico
 
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...Ontico
 
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...Ontico
 
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...Ontico
 
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)Ontico
 
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)Ontico
 
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)Ontico
 
100500 способов кэширования в Oracle Database или как достичь максимальной ск...
100500 способов кэширования в Oracle Database или как достичь максимальной ск...100500 способов кэширования в Oracle Database или как достичь максимальной ск...
100500 способов кэширования в Oracle Database или как достичь максимальной ск...Ontico
 
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...Ontico
 
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...Ontico
 
Как мы учились чинить самолеты в воздухе / Евгений Коломеец (Virtuozzo)
Как мы учились чинить самолеты в воздухе / Евгений Коломеец (Virtuozzo)Как мы учились чинить самолеты в воздухе / Евгений Коломеец (Virtuozzo)
Как мы учились чинить самолеты в воздухе / Евгений Коломеец (Virtuozzo)Ontico
 
Java и Linux — особенности эксплуатации / Алексей Рагозин (Дойче Банк)
Java и Linux — особенности эксплуатации / Алексей Рагозин (Дойче Банк)Java и Linux — особенности эксплуатации / Алексей Рагозин (Дойче Банк)
Java и Linux — особенности эксплуатации / Алексей Рагозин (Дойче Банк)Ontico
 
Как построить кластер для расчета сотен тысяч high-CPU/high-MEM-задач и не ра...
Как построить кластер для расчета сотен тысяч high-CPU/high-MEM-задач и не ра...Как построить кластер для расчета сотен тысяч high-CPU/high-MEM-задач и не ра...
Как построить кластер для расчета сотен тысяч high-CPU/high-MEM-задач и не ра...Ontico
 
Отказоустойчивая архитектура фронтальной системы банка / Роман Шеховцов, Алек...
Отказоустойчивая архитектура фронтальной системы банка / Роман Шеховцов, Алек...Отказоустойчивая архитектура фронтальной системы банка / Роман Шеховцов, Алек...
Отказоустойчивая архитектура фронтальной системы банка / Роман Шеховцов, Алек...Ontico
 
libfpta — обгоняя SQLite и Tarantool / Леонид Юрьев (Positive Technologies)
libfpta — обгоняя SQLite и Tarantool / Леонид Юрьев (Positive Technologies)libfpta — обгоняя SQLite и Tarantool / Леонид Юрьев (Positive Technologies)
libfpta — обгоняя SQLite и Tarantool / Леонид Юрьев (Positive Technologies)Ontico
 

More from Ontico (20)

Масштабируя DNS / Артем Гавриченков (Qrator Labs)
Масштабируя DNS / Артем Гавриченков (Qrator Labs)Масштабируя DNS / Артем Гавриченков (Qrator Labs)
Масштабируя DNS / Артем Гавриченков (Qrator Labs)
 
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
 
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
 
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
 
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
 
MySQL Replication — Advanced Features / Петр Зайцев (Percona)
MySQL Replication — Advanced Features / Петр Зайцев (Percona)MySQL Replication — Advanced Features / Петр Зайцев (Percona)
MySQL Replication — Advanced Features / Петр Зайцев (Percona)
 
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
 
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
 
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
 
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
 
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
 
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
 
100500 способов кэширования в Oracle Database или как достичь максимальной ск...
100500 способов кэширования в Oracle Database или как достичь максимальной ск...100500 способов кэширования в Oracle Database или как достичь максимальной ск...
100500 способов кэширования в Oracle Database или как достичь максимальной ск...
 
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
 
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
 
Как мы учились чинить самолеты в воздухе / Евгений Коломеец (Virtuozzo)
Как мы учились чинить самолеты в воздухе / Евгений Коломеец (Virtuozzo)Как мы учились чинить самолеты в воздухе / Евгений Коломеец (Virtuozzo)
Как мы учились чинить самолеты в воздухе / Евгений Коломеец (Virtuozzo)
 
Java и Linux — особенности эксплуатации / Алексей Рагозин (Дойче Банк)
Java и Linux — особенности эксплуатации / Алексей Рагозин (Дойче Банк)Java и Linux — особенности эксплуатации / Алексей Рагозин (Дойче Банк)
Java и Linux — особенности эксплуатации / Алексей Рагозин (Дойче Банк)
 
Как построить кластер для расчета сотен тысяч high-CPU/high-MEM-задач и не ра...
Как построить кластер для расчета сотен тысяч high-CPU/high-MEM-задач и не ра...Как построить кластер для расчета сотен тысяч high-CPU/high-MEM-задач и не ра...
Как построить кластер для расчета сотен тысяч high-CPU/high-MEM-задач и не ра...
 
Отказоустойчивая архитектура фронтальной системы банка / Роман Шеховцов, Алек...
Отказоустойчивая архитектура фронтальной системы банка / Роман Шеховцов, Алек...Отказоустойчивая архитектура фронтальной системы банка / Роман Шеховцов, Алек...
Отказоустойчивая архитектура фронтальной системы банка / Роман Шеховцов, Алек...
 
libfpta — обгоняя SQLite и Tarantool / Леонид Юрьев (Positive Technologies)
libfpta — обгоняя SQLite и Tarantool / Леонид Юрьев (Positive Technologies)libfpta — обгоняя SQLite и Tarantool / Леонид Юрьев (Positive Technologies)
libfpta — обгоняя SQLite и Tarantool / Леонид Юрьев (Positive Technologies)
 

Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский, Денис Колегов (Позитив Текнолоджис)

  • 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 • Возраст рантайма ~ 2 года 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. MySql parser AST TsqlParser PlqlParser Syntax analysis Semantic analysis … Protector 1 … Protector N CST AST Abstract syntax analysis Query Desired State
  • 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
  • 73. As a Conclusion • ANTLR может выдавать достаточную производительность
  • 74. As a Conclusion • ANTLR может выдавать достаточную производительность • Производительность конкретного рантайма не всегда очевидна
  • 75. As a Conclusion • ANTLR может выдавать достаточную производительность • Производительность конкретного рантайма не всегда очевидна • Парсер – ничто, инфраструктура – всё
  • 76. As a Conclusion • ANTLR может выдавать достаточную производительность • Производительность конкретного рантайма не всегда очевидна • Парсер – ничто, инфраструктура – всё • ANTLR4-грамматика для MySQL – open source (MIT) https://github.com/antlr/grammars-v4/tree/master/mysql
  • 77. As a Conclusion • ANTLR может выдавать достаточную производительность • Производительность конкретного рантайма не всегда очевидна • Парсер – ничто, инфраструктура – всё • ANTLR4-грамматика для MySQL – open source (MIT) https://github.com/antlr/grammars-v4/tree/master/mysql • Aule – open source (GPL) https://github.com/PositiveTechnologies/aule
  • 78. As a Conclusion • ANTLR может выдавать достаточную производительность • Производительность конкретного рантайма не всегда очевидна • Парсер – ничто, инфраструктура – всё • ANTLR4-грамматика для MySQL – open source (MIT) https://github.com/antlr/grammars-v4/tree/master/mysql • Aule – open source (GPL) https://github.com/PositiveTechnologies/aule