View
137
Download
0
Embed Size (px)
Citation preview
Заголовок
ptsecuritycom
Подходы к сигнатурному статическому анализу
Иван Кочуркин
ЗаголовокЭтапы работы анализатора Pattern Matching
ЗаголовокОбоснование разработки анализатора Pattern Matching
Преимущества Недостатки
bull Простая разработка поддержка
и тестирование
bull Быстрая масштабируемость
на другие языки
bull Обработка файлов
с синтаксическими ошибками
bull Невозможность анализировать
семантику кода
bull Покрытие частных случаев
вместо общих
bull Невозможность учитывать конфигурацию
и правила бизнес-логики
ЗаголовокЗадачи парсинга
bull Разбор контекстно-зависимых конструкций
bull Разрешение неоднозначностей
bull Анализ комментариев
bull Обработка ошибок
bull Производительность и потребление памяти
bull Использование Visitor или Listener для обхода деревьев
Теория и практика парсинга исходников с помощью ANTLR и RoslynОбработка древовидных структур и унифицированное AST
ЗаголовокСпособы описания шаблонов
bull Жесткое задание в коде+ Отсутствие какого-либо парсинга
minus Громоздкий и нечитаемый синтаксис
minus Невозможность добавления своих шаблонов без перекомпиляции
bull Запись в формате обмена данных (JSON YAML XML)+ Простая реализация
minus Громоздкий и трудночитаемый синтаксис
bull Запись в формате предметно-ориентированного языка (DSL)+ Краткий и лаконичный синтаксис
minus Необходимость разрабатывать грамматику и конвертер для нее
ЗаголовокЦелесообразность DSL
ЗаголовокDSL ne Regex
DSL ndash это синтаксические конструкциии регулярные выражения
([a-z0-9$amp+=^_`|~-]+([a-z0-9$amp+=^_`|~-]+)|([x01-
x08x0bx0cx0e-x1fx21x23-x5bx5d-x7f]|[x01-x09x0bx0cx0e-x7f]))(([a-z0-
9]([a-z0-9-][a-z0-9]))+[a-z0-9]([a-z0-9-][a-z0-9])|[((25[0-5]|2[0-4][0-9]|[01][0-
9][0-9]))3(25[0-5]|2[0-4][0-9]|[01][0-9][0-9]|[a-z0-9-][a-z0-9]([x01-
x08x0bx0cx0e-x1fx21-x5ax53-x7f]|[x01-x09x0bx0cx0e-x7f])+)])
private_key_bits = lt[02048]gt
Регулярные выражения
DSL ndash не нужно больше думать о проблемах пробелах
ЗаголовокСинтаксические конструкции в DSL
expr(args) ndash вызов метода
exprId ndash обращение к члену объекта (поле метод)
Id expr = expr ndash инициализация переменной
expr + expr ndash конкатенация
new Id(args) ndash создание объекта
expr[expr] ndash обращение по индексу или ключу
ЗаголовокСинтаксические конструкции в DSL
bull Примитивные типы в DSL
Id String Int Bool Null
bull Синтаксис DSL
lt[]gt ndash оператор расширенного выражения (lt[md5|sha1]gt или lt[02048]gt)
или lt[expr]gt ndash любое Expression
или lt[args]gt ndash произвольное количество любых аргументов
(expr)expr ndash эквивалентно exprexpr или просто expr
lt[~]gtexpr ndash отрицание условия
expr (lt[||]gt expr) ndash объединение нескольких условий (ИЛИ)
Comment regex ndash поиск по комментариям
ЗаголовокПримеры шаблонов на DSL
bull Hardcoded Password (All C Java PHP PLSQL T-SQL)
()lt[(i)password(-i)]gt = lt[w]gt
bull Static Random Number Generator (C Java)
new Random(lt[]gt)
bull Debug Information Leak (PHP)
Configurelt[(i)^write$(-i)]gt(debug lt[19]gt)
bull Insecure SSL connection (Java)
new AllowAllHostnameVerifier() lt[||]gt SSLSocketFactoryALLOW_ALL_HOSTNAME_VERIFIER
ЗаголовокПримеры шаблонов на DSL
bull Password In Comment (All C Java PHP PLSQL T-SQL)
Comment lt[ (i)password(-i)s= ]gt
bull SQL Injection (All C Java PHP PLSQL T-SQL)
lt[(i)select(-i)sw]gt + lt[~w]gt
bull Cookie Without Secure Attribute (PHP)session_set_cookie_params() без четвертого аргумента
bull Incorrect Permission Assignment For Critical Resource (PHP)
chmod( lt[0777 || 02777 || 04777]gt)
ЗаголовокПримеры шаблонов на DSL
bull Empty try-catch block (All C Java PHP PLSQL T-SQL)
try catch
bull Weak Cryptographic Algorithm (PHP)mcrypt_encrypt(lt[MCRYPT_DES || des]gt lt[MCRYPT_MODE_ECB || ecb]gt )
bull Insecure Cookie (Java)Cookie lt[cookie]gt = new Cookie()
lt[~]gtlt[cookie]gtsetSecure(true)
responseaddCookie(lt[cookie]gt)
ЗаголовокПримеры шаблонов под PLSQL и T-SQL
bull Erroneous Null Comparison (PLSQL T-SQL)
== null lt[||]gt = null
bull Overly Broad Grant (PLSQL T-SQL)
grant_all()
Пример
GRANT ALL ON employees TO john_doe
ЗаголовокНезакрытый курсор в PLSQL
lt[cursor]gt = DBMS_SQLOPEN_CURSOR
lt[~]gtDBMS_SQLCLOSE_CURSOR(lt[cursor]gt)
F1 = UTL_FILEFOPEN(user_diru12345tmpR256)
UTL_FILEGET_LINE(F1V132767)
-- UTL_FILEFCLOSE(F1) is missing
ЗаголовокНезакрытый курсор в T-SQL
declare_cursor(lt[cursor]gt )
lt[~]gtdeallocate(lt[cursor]gt)
DECLARE Employee_Cursor CURSOR FOR SELECT EmployeeID Title FROMAdventureWorks2012HumanResourcesEmployee
OPEN Employee_Cursor
FETCH NEXT FROM Employee_Cursor
--CLOSE Employee_Cursor is missing
--DEALLOCATE Employee_Cursor is missing
ЗаголовокTaint
bull Taint gt PM
bull Анализ не только AST но и CFG DFG
bull Учет семантики из других анализаторов (Roslyn для C)
bull Шаблоны Pattern Matching также будут валидны в Taint
ЗаголовокШаблон Сross-Site Scripting (XSS) в Taint
TDE (Taint Data Entry)
lt[a]gt = Requestlt[Params|QueryString]gt[]
TF (Transform function)
lt[~]gt lt[b]gt =lt[SystemNetWebUtilityHtmlEncode]gt(lt[a]gt)
PVF (Potential Vulnerability Function) ResponseWrite(lt[b]gt)
ЗаголовокЗаключение
Статьи с тегом [Application Inspector] на laquoХабрахабреraquo
Грамматики PLSQL T-SQL PHP на githubcomantlrgrammars-v4
Pattern Matching планируется включить в AppRoof
Заголовок
Thank You
ptsecuritycom
ЗаголовокЭтапы работы анализатора Pattern Matching
ЗаголовокОбоснование разработки анализатора Pattern Matching
Преимущества Недостатки
bull Простая разработка поддержка
и тестирование
bull Быстрая масштабируемость
на другие языки
bull Обработка файлов
с синтаксическими ошибками
bull Невозможность анализировать
семантику кода
bull Покрытие частных случаев
вместо общих
bull Невозможность учитывать конфигурацию
и правила бизнес-логики
ЗаголовокЗадачи парсинга
bull Разбор контекстно-зависимых конструкций
bull Разрешение неоднозначностей
bull Анализ комментариев
bull Обработка ошибок
bull Производительность и потребление памяти
bull Использование Visitor или Listener для обхода деревьев
Теория и практика парсинга исходников с помощью ANTLR и RoslynОбработка древовидных структур и унифицированное AST
ЗаголовокСпособы описания шаблонов
bull Жесткое задание в коде+ Отсутствие какого-либо парсинга
minus Громоздкий и нечитаемый синтаксис
minus Невозможность добавления своих шаблонов без перекомпиляции
bull Запись в формате обмена данных (JSON YAML XML)+ Простая реализация
minus Громоздкий и трудночитаемый синтаксис
bull Запись в формате предметно-ориентированного языка (DSL)+ Краткий и лаконичный синтаксис
minus Необходимость разрабатывать грамматику и конвертер для нее
ЗаголовокЦелесообразность DSL
ЗаголовокDSL ne Regex
DSL ndash это синтаксические конструкциии регулярные выражения
([a-z0-9$amp+=^_`|~-]+([a-z0-9$amp+=^_`|~-]+)|([x01-
x08x0bx0cx0e-x1fx21x23-x5bx5d-x7f]|[x01-x09x0bx0cx0e-x7f]))(([a-z0-
9]([a-z0-9-][a-z0-9]))+[a-z0-9]([a-z0-9-][a-z0-9])|[((25[0-5]|2[0-4][0-9]|[01][0-
9][0-9]))3(25[0-5]|2[0-4][0-9]|[01][0-9][0-9]|[a-z0-9-][a-z0-9]([x01-
x08x0bx0cx0e-x1fx21-x5ax53-x7f]|[x01-x09x0bx0cx0e-x7f])+)])
private_key_bits = lt[02048]gt
Регулярные выражения
DSL ndash не нужно больше думать о проблемах пробелах
ЗаголовокСинтаксические конструкции в DSL
expr(args) ndash вызов метода
exprId ndash обращение к члену объекта (поле метод)
Id expr = expr ndash инициализация переменной
expr + expr ndash конкатенация
new Id(args) ndash создание объекта
expr[expr] ndash обращение по индексу или ключу
ЗаголовокСинтаксические конструкции в DSL
bull Примитивные типы в DSL
Id String Int Bool Null
bull Синтаксис DSL
lt[]gt ndash оператор расширенного выражения (lt[md5|sha1]gt или lt[02048]gt)
или lt[expr]gt ndash любое Expression
или lt[args]gt ndash произвольное количество любых аргументов
(expr)expr ndash эквивалентно exprexpr или просто expr
lt[~]gtexpr ndash отрицание условия
expr (lt[||]gt expr) ndash объединение нескольких условий (ИЛИ)
Comment regex ndash поиск по комментариям
ЗаголовокПримеры шаблонов на DSL
bull Hardcoded Password (All C Java PHP PLSQL T-SQL)
()lt[(i)password(-i)]gt = lt[w]gt
bull Static Random Number Generator (C Java)
new Random(lt[]gt)
bull Debug Information Leak (PHP)
Configurelt[(i)^write$(-i)]gt(debug lt[19]gt)
bull Insecure SSL connection (Java)
new AllowAllHostnameVerifier() lt[||]gt SSLSocketFactoryALLOW_ALL_HOSTNAME_VERIFIER
ЗаголовокПримеры шаблонов на DSL
bull Password In Comment (All C Java PHP PLSQL T-SQL)
Comment lt[ (i)password(-i)s= ]gt
bull SQL Injection (All C Java PHP PLSQL T-SQL)
lt[(i)select(-i)sw]gt + lt[~w]gt
bull Cookie Without Secure Attribute (PHP)session_set_cookie_params() без четвертого аргумента
bull Incorrect Permission Assignment For Critical Resource (PHP)
chmod( lt[0777 || 02777 || 04777]gt)
ЗаголовокПримеры шаблонов на DSL
bull Empty try-catch block (All C Java PHP PLSQL T-SQL)
try catch
bull Weak Cryptographic Algorithm (PHP)mcrypt_encrypt(lt[MCRYPT_DES || des]gt lt[MCRYPT_MODE_ECB || ecb]gt )
bull Insecure Cookie (Java)Cookie lt[cookie]gt = new Cookie()
lt[~]gtlt[cookie]gtsetSecure(true)
responseaddCookie(lt[cookie]gt)
ЗаголовокПримеры шаблонов под PLSQL и T-SQL
bull Erroneous Null Comparison (PLSQL T-SQL)
== null lt[||]gt = null
bull Overly Broad Grant (PLSQL T-SQL)
grant_all()
Пример
GRANT ALL ON employees TO john_doe
ЗаголовокНезакрытый курсор в PLSQL
lt[cursor]gt = DBMS_SQLOPEN_CURSOR
lt[~]gtDBMS_SQLCLOSE_CURSOR(lt[cursor]gt)
F1 = UTL_FILEFOPEN(user_diru12345tmpR256)
UTL_FILEGET_LINE(F1V132767)
-- UTL_FILEFCLOSE(F1) is missing
ЗаголовокНезакрытый курсор в T-SQL
declare_cursor(lt[cursor]gt )
lt[~]gtdeallocate(lt[cursor]gt)
DECLARE Employee_Cursor CURSOR FOR SELECT EmployeeID Title FROMAdventureWorks2012HumanResourcesEmployee
OPEN Employee_Cursor
FETCH NEXT FROM Employee_Cursor
--CLOSE Employee_Cursor is missing
--DEALLOCATE Employee_Cursor is missing
ЗаголовокTaint
bull Taint gt PM
bull Анализ не только AST но и CFG DFG
bull Учет семантики из других анализаторов (Roslyn для C)
bull Шаблоны Pattern Matching также будут валидны в Taint
ЗаголовокШаблон Сross-Site Scripting (XSS) в Taint
TDE (Taint Data Entry)
lt[a]gt = Requestlt[Params|QueryString]gt[]
TF (Transform function)
lt[~]gt lt[b]gt =lt[SystemNetWebUtilityHtmlEncode]gt(lt[a]gt)
PVF (Potential Vulnerability Function) ResponseWrite(lt[b]gt)
ЗаголовокЗаключение
Статьи с тегом [Application Inspector] на laquoХабрахабреraquo
Грамматики PLSQL T-SQL PHP на githubcomantlrgrammars-v4
Pattern Matching планируется включить в AppRoof
Заголовок
Thank You
ptsecuritycom
ЗаголовокОбоснование разработки анализатора Pattern Matching
Преимущества Недостатки
bull Простая разработка поддержка
и тестирование
bull Быстрая масштабируемость
на другие языки
bull Обработка файлов
с синтаксическими ошибками
bull Невозможность анализировать
семантику кода
bull Покрытие частных случаев
вместо общих
bull Невозможность учитывать конфигурацию
и правила бизнес-логики
ЗаголовокЗадачи парсинга
bull Разбор контекстно-зависимых конструкций
bull Разрешение неоднозначностей
bull Анализ комментариев
bull Обработка ошибок
bull Производительность и потребление памяти
bull Использование Visitor или Listener для обхода деревьев
Теория и практика парсинга исходников с помощью ANTLR и RoslynОбработка древовидных структур и унифицированное AST
ЗаголовокСпособы описания шаблонов
bull Жесткое задание в коде+ Отсутствие какого-либо парсинга
minus Громоздкий и нечитаемый синтаксис
minus Невозможность добавления своих шаблонов без перекомпиляции
bull Запись в формате обмена данных (JSON YAML XML)+ Простая реализация
minus Громоздкий и трудночитаемый синтаксис
bull Запись в формате предметно-ориентированного языка (DSL)+ Краткий и лаконичный синтаксис
minus Необходимость разрабатывать грамматику и конвертер для нее
ЗаголовокЦелесообразность DSL
ЗаголовокDSL ne Regex
DSL ndash это синтаксические конструкциии регулярные выражения
([a-z0-9$amp+=^_`|~-]+([a-z0-9$amp+=^_`|~-]+)|([x01-
x08x0bx0cx0e-x1fx21x23-x5bx5d-x7f]|[x01-x09x0bx0cx0e-x7f]))(([a-z0-
9]([a-z0-9-][a-z0-9]))+[a-z0-9]([a-z0-9-][a-z0-9])|[((25[0-5]|2[0-4][0-9]|[01][0-
9][0-9]))3(25[0-5]|2[0-4][0-9]|[01][0-9][0-9]|[a-z0-9-][a-z0-9]([x01-
x08x0bx0cx0e-x1fx21-x5ax53-x7f]|[x01-x09x0bx0cx0e-x7f])+)])
private_key_bits = lt[02048]gt
Регулярные выражения
DSL ndash не нужно больше думать о проблемах пробелах
ЗаголовокСинтаксические конструкции в DSL
expr(args) ndash вызов метода
exprId ndash обращение к члену объекта (поле метод)
Id expr = expr ndash инициализация переменной
expr + expr ndash конкатенация
new Id(args) ndash создание объекта
expr[expr] ndash обращение по индексу или ключу
ЗаголовокСинтаксические конструкции в DSL
bull Примитивные типы в DSL
Id String Int Bool Null
bull Синтаксис DSL
lt[]gt ndash оператор расширенного выражения (lt[md5|sha1]gt или lt[02048]gt)
или lt[expr]gt ndash любое Expression
или lt[args]gt ndash произвольное количество любых аргументов
(expr)expr ndash эквивалентно exprexpr или просто expr
lt[~]gtexpr ndash отрицание условия
expr (lt[||]gt expr) ndash объединение нескольких условий (ИЛИ)
Comment regex ndash поиск по комментариям
ЗаголовокПримеры шаблонов на DSL
bull Hardcoded Password (All C Java PHP PLSQL T-SQL)
()lt[(i)password(-i)]gt = lt[w]gt
bull Static Random Number Generator (C Java)
new Random(lt[]gt)
bull Debug Information Leak (PHP)
Configurelt[(i)^write$(-i)]gt(debug lt[19]gt)
bull Insecure SSL connection (Java)
new AllowAllHostnameVerifier() lt[||]gt SSLSocketFactoryALLOW_ALL_HOSTNAME_VERIFIER
ЗаголовокПримеры шаблонов на DSL
bull Password In Comment (All C Java PHP PLSQL T-SQL)
Comment lt[ (i)password(-i)s= ]gt
bull SQL Injection (All C Java PHP PLSQL T-SQL)
lt[(i)select(-i)sw]gt + lt[~w]gt
bull Cookie Without Secure Attribute (PHP)session_set_cookie_params() без четвертого аргумента
bull Incorrect Permission Assignment For Critical Resource (PHP)
chmod( lt[0777 || 02777 || 04777]gt)
ЗаголовокПримеры шаблонов на DSL
bull Empty try-catch block (All C Java PHP PLSQL T-SQL)
try catch
bull Weak Cryptographic Algorithm (PHP)mcrypt_encrypt(lt[MCRYPT_DES || des]gt lt[MCRYPT_MODE_ECB || ecb]gt )
bull Insecure Cookie (Java)Cookie lt[cookie]gt = new Cookie()
lt[~]gtlt[cookie]gtsetSecure(true)
responseaddCookie(lt[cookie]gt)
ЗаголовокПримеры шаблонов под PLSQL и T-SQL
bull Erroneous Null Comparison (PLSQL T-SQL)
== null lt[||]gt = null
bull Overly Broad Grant (PLSQL T-SQL)
grant_all()
Пример
GRANT ALL ON employees TO john_doe
ЗаголовокНезакрытый курсор в PLSQL
lt[cursor]gt = DBMS_SQLOPEN_CURSOR
lt[~]gtDBMS_SQLCLOSE_CURSOR(lt[cursor]gt)
F1 = UTL_FILEFOPEN(user_diru12345tmpR256)
UTL_FILEGET_LINE(F1V132767)
-- UTL_FILEFCLOSE(F1) is missing
ЗаголовокНезакрытый курсор в T-SQL
declare_cursor(lt[cursor]gt )
lt[~]gtdeallocate(lt[cursor]gt)
DECLARE Employee_Cursor CURSOR FOR SELECT EmployeeID Title FROMAdventureWorks2012HumanResourcesEmployee
OPEN Employee_Cursor
FETCH NEXT FROM Employee_Cursor
--CLOSE Employee_Cursor is missing
--DEALLOCATE Employee_Cursor is missing
ЗаголовокTaint
bull Taint gt PM
bull Анализ не только AST но и CFG DFG
bull Учет семантики из других анализаторов (Roslyn для C)
bull Шаблоны Pattern Matching также будут валидны в Taint
ЗаголовокШаблон Сross-Site Scripting (XSS) в Taint
TDE (Taint Data Entry)
lt[a]gt = Requestlt[Params|QueryString]gt[]
TF (Transform function)
lt[~]gt lt[b]gt =lt[SystemNetWebUtilityHtmlEncode]gt(lt[a]gt)
PVF (Potential Vulnerability Function) ResponseWrite(lt[b]gt)
ЗаголовокЗаключение
Статьи с тегом [Application Inspector] на laquoХабрахабреraquo
Грамматики PLSQL T-SQL PHP на githubcomantlrgrammars-v4
Pattern Matching планируется включить в AppRoof
Заголовок
Thank You
ptsecuritycom
ЗаголовокЗадачи парсинга
bull Разбор контекстно-зависимых конструкций
bull Разрешение неоднозначностей
bull Анализ комментариев
bull Обработка ошибок
bull Производительность и потребление памяти
bull Использование Visitor или Listener для обхода деревьев
Теория и практика парсинга исходников с помощью ANTLR и RoslynОбработка древовидных структур и унифицированное AST
ЗаголовокСпособы описания шаблонов
bull Жесткое задание в коде+ Отсутствие какого-либо парсинга
minus Громоздкий и нечитаемый синтаксис
minus Невозможность добавления своих шаблонов без перекомпиляции
bull Запись в формате обмена данных (JSON YAML XML)+ Простая реализация
minus Громоздкий и трудночитаемый синтаксис
bull Запись в формате предметно-ориентированного языка (DSL)+ Краткий и лаконичный синтаксис
minus Необходимость разрабатывать грамматику и конвертер для нее
ЗаголовокЦелесообразность DSL
ЗаголовокDSL ne Regex
DSL ndash это синтаксические конструкциии регулярные выражения
([a-z0-9$amp+=^_`|~-]+([a-z0-9$amp+=^_`|~-]+)|([x01-
x08x0bx0cx0e-x1fx21x23-x5bx5d-x7f]|[x01-x09x0bx0cx0e-x7f]))(([a-z0-
9]([a-z0-9-][a-z0-9]))+[a-z0-9]([a-z0-9-][a-z0-9])|[((25[0-5]|2[0-4][0-9]|[01][0-
9][0-9]))3(25[0-5]|2[0-4][0-9]|[01][0-9][0-9]|[a-z0-9-][a-z0-9]([x01-
x08x0bx0cx0e-x1fx21-x5ax53-x7f]|[x01-x09x0bx0cx0e-x7f])+)])
private_key_bits = lt[02048]gt
Регулярные выражения
DSL ndash не нужно больше думать о проблемах пробелах
ЗаголовокСинтаксические конструкции в DSL
expr(args) ndash вызов метода
exprId ndash обращение к члену объекта (поле метод)
Id expr = expr ndash инициализация переменной
expr + expr ndash конкатенация
new Id(args) ndash создание объекта
expr[expr] ndash обращение по индексу или ключу
ЗаголовокСинтаксические конструкции в DSL
bull Примитивные типы в DSL
Id String Int Bool Null
bull Синтаксис DSL
lt[]gt ndash оператор расширенного выражения (lt[md5|sha1]gt или lt[02048]gt)
или lt[expr]gt ndash любое Expression
или lt[args]gt ndash произвольное количество любых аргументов
(expr)expr ndash эквивалентно exprexpr или просто expr
lt[~]gtexpr ndash отрицание условия
expr (lt[||]gt expr) ndash объединение нескольких условий (ИЛИ)
Comment regex ndash поиск по комментариям
ЗаголовокПримеры шаблонов на DSL
bull Hardcoded Password (All C Java PHP PLSQL T-SQL)
()lt[(i)password(-i)]gt = lt[w]gt
bull Static Random Number Generator (C Java)
new Random(lt[]gt)
bull Debug Information Leak (PHP)
Configurelt[(i)^write$(-i)]gt(debug lt[19]gt)
bull Insecure SSL connection (Java)
new AllowAllHostnameVerifier() lt[||]gt SSLSocketFactoryALLOW_ALL_HOSTNAME_VERIFIER
ЗаголовокПримеры шаблонов на DSL
bull Password In Comment (All C Java PHP PLSQL T-SQL)
Comment lt[ (i)password(-i)s= ]gt
bull SQL Injection (All C Java PHP PLSQL T-SQL)
lt[(i)select(-i)sw]gt + lt[~w]gt
bull Cookie Without Secure Attribute (PHP)session_set_cookie_params() без четвертого аргумента
bull Incorrect Permission Assignment For Critical Resource (PHP)
chmod( lt[0777 || 02777 || 04777]gt)
ЗаголовокПримеры шаблонов на DSL
bull Empty try-catch block (All C Java PHP PLSQL T-SQL)
try catch
bull Weak Cryptographic Algorithm (PHP)mcrypt_encrypt(lt[MCRYPT_DES || des]gt lt[MCRYPT_MODE_ECB || ecb]gt )
bull Insecure Cookie (Java)Cookie lt[cookie]gt = new Cookie()
lt[~]gtlt[cookie]gtsetSecure(true)
responseaddCookie(lt[cookie]gt)
ЗаголовокПримеры шаблонов под PLSQL и T-SQL
bull Erroneous Null Comparison (PLSQL T-SQL)
== null lt[||]gt = null
bull Overly Broad Grant (PLSQL T-SQL)
grant_all()
Пример
GRANT ALL ON employees TO john_doe
ЗаголовокНезакрытый курсор в PLSQL
lt[cursor]gt = DBMS_SQLOPEN_CURSOR
lt[~]gtDBMS_SQLCLOSE_CURSOR(lt[cursor]gt)
F1 = UTL_FILEFOPEN(user_diru12345tmpR256)
UTL_FILEGET_LINE(F1V132767)
-- UTL_FILEFCLOSE(F1) is missing
ЗаголовокНезакрытый курсор в T-SQL
declare_cursor(lt[cursor]gt )
lt[~]gtdeallocate(lt[cursor]gt)
DECLARE Employee_Cursor CURSOR FOR SELECT EmployeeID Title FROMAdventureWorks2012HumanResourcesEmployee
OPEN Employee_Cursor
FETCH NEXT FROM Employee_Cursor
--CLOSE Employee_Cursor is missing
--DEALLOCATE Employee_Cursor is missing
ЗаголовокTaint
bull Taint gt PM
bull Анализ не только AST но и CFG DFG
bull Учет семантики из других анализаторов (Roslyn для C)
bull Шаблоны Pattern Matching также будут валидны в Taint
ЗаголовокШаблон Сross-Site Scripting (XSS) в Taint
TDE (Taint Data Entry)
lt[a]gt = Requestlt[Params|QueryString]gt[]
TF (Transform function)
lt[~]gt lt[b]gt =lt[SystemNetWebUtilityHtmlEncode]gt(lt[a]gt)
PVF (Potential Vulnerability Function) ResponseWrite(lt[b]gt)
ЗаголовокЗаключение
Статьи с тегом [Application Inspector] на laquoХабрахабреraquo
Грамматики PLSQL T-SQL PHP на githubcomantlrgrammars-v4
Pattern Matching планируется включить в AppRoof
Заголовок
Thank You
ptsecuritycom
ЗаголовокСпособы описания шаблонов
bull Жесткое задание в коде+ Отсутствие какого-либо парсинга
minus Громоздкий и нечитаемый синтаксис
minus Невозможность добавления своих шаблонов без перекомпиляции
bull Запись в формате обмена данных (JSON YAML XML)+ Простая реализация
minus Громоздкий и трудночитаемый синтаксис
bull Запись в формате предметно-ориентированного языка (DSL)+ Краткий и лаконичный синтаксис
minus Необходимость разрабатывать грамматику и конвертер для нее
ЗаголовокЦелесообразность DSL
ЗаголовокDSL ne Regex
DSL ndash это синтаксические конструкциии регулярные выражения
([a-z0-9$amp+=^_`|~-]+([a-z0-9$amp+=^_`|~-]+)|([x01-
x08x0bx0cx0e-x1fx21x23-x5bx5d-x7f]|[x01-x09x0bx0cx0e-x7f]))(([a-z0-
9]([a-z0-9-][a-z0-9]))+[a-z0-9]([a-z0-9-][a-z0-9])|[((25[0-5]|2[0-4][0-9]|[01][0-
9][0-9]))3(25[0-5]|2[0-4][0-9]|[01][0-9][0-9]|[a-z0-9-][a-z0-9]([x01-
x08x0bx0cx0e-x1fx21-x5ax53-x7f]|[x01-x09x0bx0cx0e-x7f])+)])
private_key_bits = lt[02048]gt
Регулярные выражения
DSL ndash не нужно больше думать о проблемах пробелах
ЗаголовокСинтаксические конструкции в DSL
expr(args) ndash вызов метода
exprId ndash обращение к члену объекта (поле метод)
Id expr = expr ndash инициализация переменной
expr + expr ndash конкатенация
new Id(args) ndash создание объекта
expr[expr] ndash обращение по индексу или ключу
ЗаголовокСинтаксические конструкции в DSL
bull Примитивные типы в DSL
Id String Int Bool Null
bull Синтаксис DSL
lt[]gt ndash оператор расширенного выражения (lt[md5|sha1]gt или lt[02048]gt)
или lt[expr]gt ndash любое Expression
или lt[args]gt ndash произвольное количество любых аргументов
(expr)expr ndash эквивалентно exprexpr или просто expr
lt[~]gtexpr ndash отрицание условия
expr (lt[||]gt expr) ndash объединение нескольких условий (ИЛИ)
Comment regex ndash поиск по комментариям
ЗаголовокПримеры шаблонов на DSL
bull Hardcoded Password (All C Java PHP PLSQL T-SQL)
()lt[(i)password(-i)]gt = lt[w]gt
bull Static Random Number Generator (C Java)
new Random(lt[]gt)
bull Debug Information Leak (PHP)
Configurelt[(i)^write$(-i)]gt(debug lt[19]gt)
bull Insecure SSL connection (Java)
new AllowAllHostnameVerifier() lt[||]gt SSLSocketFactoryALLOW_ALL_HOSTNAME_VERIFIER
ЗаголовокПримеры шаблонов на DSL
bull Password In Comment (All C Java PHP PLSQL T-SQL)
Comment lt[ (i)password(-i)s= ]gt
bull SQL Injection (All C Java PHP PLSQL T-SQL)
lt[(i)select(-i)sw]gt + lt[~w]gt
bull Cookie Without Secure Attribute (PHP)session_set_cookie_params() без четвертого аргумента
bull Incorrect Permission Assignment For Critical Resource (PHP)
chmod( lt[0777 || 02777 || 04777]gt)
ЗаголовокПримеры шаблонов на DSL
bull Empty try-catch block (All C Java PHP PLSQL T-SQL)
try catch
bull Weak Cryptographic Algorithm (PHP)mcrypt_encrypt(lt[MCRYPT_DES || des]gt lt[MCRYPT_MODE_ECB || ecb]gt )
bull Insecure Cookie (Java)Cookie lt[cookie]gt = new Cookie()
lt[~]gtlt[cookie]gtsetSecure(true)
responseaddCookie(lt[cookie]gt)
ЗаголовокПримеры шаблонов под PLSQL и T-SQL
bull Erroneous Null Comparison (PLSQL T-SQL)
== null lt[||]gt = null
bull Overly Broad Grant (PLSQL T-SQL)
grant_all()
Пример
GRANT ALL ON employees TO john_doe
ЗаголовокНезакрытый курсор в PLSQL
lt[cursor]gt = DBMS_SQLOPEN_CURSOR
lt[~]gtDBMS_SQLCLOSE_CURSOR(lt[cursor]gt)
F1 = UTL_FILEFOPEN(user_diru12345tmpR256)
UTL_FILEGET_LINE(F1V132767)
-- UTL_FILEFCLOSE(F1) is missing
ЗаголовокНезакрытый курсор в T-SQL
declare_cursor(lt[cursor]gt )
lt[~]gtdeallocate(lt[cursor]gt)
DECLARE Employee_Cursor CURSOR FOR SELECT EmployeeID Title FROMAdventureWorks2012HumanResourcesEmployee
OPEN Employee_Cursor
FETCH NEXT FROM Employee_Cursor
--CLOSE Employee_Cursor is missing
--DEALLOCATE Employee_Cursor is missing
ЗаголовокTaint
bull Taint gt PM
bull Анализ не только AST но и CFG DFG
bull Учет семантики из других анализаторов (Roslyn для C)
bull Шаблоны Pattern Matching также будут валидны в Taint
ЗаголовокШаблон Сross-Site Scripting (XSS) в Taint
TDE (Taint Data Entry)
lt[a]gt = Requestlt[Params|QueryString]gt[]
TF (Transform function)
lt[~]gt lt[b]gt =lt[SystemNetWebUtilityHtmlEncode]gt(lt[a]gt)
PVF (Potential Vulnerability Function) ResponseWrite(lt[b]gt)
ЗаголовокЗаключение
Статьи с тегом [Application Inspector] на laquoХабрахабреraquo
Грамматики PLSQL T-SQL PHP на githubcomantlrgrammars-v4
Pattern Matching планируется включить в AppRoof
Заголовок
Thank You
ptsecuritycom
ЗаголовокЦелесообразность DSL
ЗаголовокDSL ne Regex
DSL ndash это синтаксические конструкциии регулярные выражения
([a-z0-9$amp+=^_`|~-]+([a-z0-9$amp+=^_`|~-]+)|([x01-
x08x0bx0cx0e-x1fx21x23-x5bx5d-x7f]|[x01-x09x0bx0cx0e-x7f]))(([a-z0-
9]([a-z0-9-][a-z0-9]))+[a-z0-9]([a-z0-9-][a-z0-9])|[((25[0-5]|2[0-4][0-9]|[01][0-
9][0-9]))3(25[0-5]|2[0-4][0-9]|[01][0-9][0-9]|[a-z0-9-][a-z0-9]([x01-
x08x0bx0cx0e-x1fx21-x5ax53-x7f]|[x01-x09x0bx0cx0e-x7f])+)])
private_key_bits = lt[02048]gt
Регулярные выражения
DSL ndash не нужно больше думать о проблемах пробелах
ЗаголовокСинтаксические конструкции в DSL
expr(args) ndash вызов метода
exprId ndash обращение к члену объекта (поле метод)
Id expr = expr ndash инициализация переменной
expr + expr ndash конкатенация
new Id(args) ndash создание объекта
expr[expr] ndash обращение по индексу или ключу
ЗаголовокСинтаксические конструкции в DSL
bull Примитивные типы в DSL
Id String Int Bool Null
bull Синтаксис DSL
lt[]gt ndash оператор расширенного выражения (lt[md5|sha1]gt или lt[02048]gt)
или lt[expr]gt ndash любое Expression
или lt[args]gt ndash произвольное количество любых аргументов
(expr)expr ndash эквивалентно exprexpr или просто expr
lt[~]gtexpr ndash отрицание условия
expr (lt[||]gt expr) ndash объединение нескольких условий (ИЛИ)
Comment regex ndash поиск по комментариям
ЗаголовокПримеры шаблонов на DSL
bull Hardcoded Password (All C Java PHP PLSQL T-SQL)
()lt[(i)password(-i)]gt = lt[w]gt
bull Static Random Number Generator (C Java)
new Random(lt[]gt)
bull Debug Information Leak (PHP)
Configurelt[(i)^write$(-i)]gt(debug lt[19]gt)
bull Insecure SSL connection (Java)
new AllowAllHostnameVerifier() lt[||]gt SSLSocketFactoryALLOW_ALL_HOSTNAME_VERIFIER
ЗаголовокПримеры шаблонов на DSL
bull Password In Comment (All C Java PHP PLSQL T-SQL)
Comment lt[ (i)password(-i)s= ]gt
bull SQL Injection (All C Java PHP PLSQL T-SQL)
lt[(i)select(-i)sw]gt + lt[~w]gt
bull Cookie Without Secure Attribute (PHP)session_set_cookie_params() без четвертого аргумента
bull Incorrect Permission Assignment For Critical Resource (PHP)
chmod( lt[0777 || 02777 || 04777]gt)
ЗаголовокПримеры шаблонов на DSL
bull Empty try-catch block (All C Java PHP PLSQL T-SQL)
try catch
bull Weak Cryptographic Algorithm (PHP)mcrypt_encrypt(lt[MCRYPT_DES || des]gt lt[MCRYPT_MODE_ECB || ecb]gt )
bull Insecure Cookie (Java)Cookie lt[cookie]gt = new Cookie()
lt[~]gtlt[cookie]gtsetSecure(true)
responseaddCookie(lt[cookie]gt)
ЗаголовокПримеры шаблонов под PLSQL и T-SQL
bull Erroneous Null Comparison (PLSQL T-SQL)
== null lt[||]gt = null
bull Overly Broad Grant (PLSQL T-SQL)
grant_all()
Пример
GRANT ALL ON employees TO john_doe
ЗаголовокНезакрытый курсор в PLSQL
lt[cursor]gt = DBMS_SQLOPEN_CURSOR
lt[~]gtDBMS_SQLCLOSE_CURSOR(lt[cursor]gt)
F1 = UTL_FILEFOPEN(user_diru12345tmpR256)
UTL_FILEGET_LINE(F1V132767)
-- UTL_FILEFCLOSE(F1) is missing
ЗаголовокНезакрытый курсор в T-SQL
declare_cursor(lt[cursor]gt )
lt[~]gtdeallocate(lt[cursor]gt)
DECLARE Employee_Cursor CURSOR FOR SELECT EmployeeID Title FROMAdventureWorks2012HumanResourcesEmployee
OPEN Employee_Cursor
FETCH NEXT FROM Employee_Cursor
--CLOSE Employee_Cursor is missing
--DEALLOCATE Employee_Cursor is missing
ЗаголовокTaint
bull Taint gt PM
bull Анализ не только AST но и CFG DFG
bull Учет семантики из других анализаторов (Roslyn для C)
bull Шаблоны Pattern Matching также будут валидны в Taint
ЗаголовокШаблон Сross-Site Scripting (XSS) в Taint
TDE (Taint Data Entry)
lt[a]gt = Requestlt[Params|QueryString]gt[]
TF (Transform function)
lt[~]gt lt[b]gt =lt[SystemNetWebUtilityHtmlEncode]gt(lt[a]gt)
PVF (Potential Vulnerability Function) ResponseWrite(lt[b]gt)
ЗаголовокЗаключение
Статьи с тегом [Application Inspector] на laquoХабрахабреraquo
Грамматики PLSQL T-SQL PHP на githubcomantlrgrammars-v4
Pattern Matching планируется включить в AppRoof
Заголовок
Thank You
ptsecuritycom
ЗаголовокDSL ne Regex
DSL ndash это синтаксические конструкциии регулярные выражения
([a-z0-9$amp+=^_`|~-]+([a-z0-9$amp+=^_`|~-]+)|([x01-
x08x0bx0cx0e-x1fx21x23-x5bx5d-x7f]|[x01-x09x0bx0cx0e-x7f]))(([a-z0-
9]([a-z0-9-][a-z0-9]))+[a-z0-9]([a-z0-9-][a-z0-9])|[((25[0-5]|2[0-4][0-9]|[01][0-
9][0-9]))3(25[0-5]|2[0-4][0-9]|[01][0-9][0-9]|[a-z0-9-][a-z0-9]([x01-
x08x0bx0cx0e-x1fx21-x5ax53-x7f]|[x01-x09x0bx0cx0e-x7f])+)])
private_key_bits = lt[02048]gt
Регулярные выражения
DSL ndash не нужно больше думать о проблемах пробелах
ЗаголовокСинтаксические конструкции в DSL
expr(args) ndash вызов метода
exprId ndash обращение к члену объекта (поле метод)
Id expr = expr ndash инициализация переменной
expr + expr ndash конкатенация
new Id(args) ndash создание объекта
expr[expr] ndash обращение по индексу или ключу
ЗаголовокСинтаксические конструкции в DSL
bull Примитивные типы в DSL
Id String Int Bool Null
bull Синтаксис DSL
lt[]gt ndash оператор расширенного выражения (lt[md5|sha1]gt или lt[02048]gt)
или lt[expr]gt ndash любое Expression
или lt[args]gt ndash произвольное количество любых аргументов
(expr)expr ndash эквивалентно exprexpr или просто expr
lt[~]gtexpr ndash отрицание условия
expr (lt[||]gt expr) ndash объединение нескольких условий (ИЛИ)
Comment regex ndash поиск по комментариям
ЗаголовокПримеры шаблонов на DSL
bull Hardcoded Password (All C Java PHP PLSQL T-SQL)
()lt[(i)password(-i)]gt = lt[w]gt
bull Static Random Number Generator (C Java)
new Random(lt[]gt)
bull Debug Information Leak (PHP)
Configurelt[(i)^write$(-i)]gt(debug lt[19]gt)
bull Insecure SSL connection (Java)
new AllowAllHostnameVerifier() lt[||]gt SSLSocketFactoryALLOW_ALL_HOSTNAME_VERIFIER
ЗаголовокПримеры шаблонов на DSL
bull Password In Comment (All C Java PHP PLSQL T-SQL)
Comment lt[ (i)password(-i)s= ]gt
bull SQL Injection (All C Java PHP PLSQL T-SQL)
lt[(i)select(-i)sw]gt + lt[~w]gt
bull Cookie Without Secure Attribute (PHP)session_set_cookie_params() без четвертого аргумента
bull Incorrect Permission Assignment For Critical Resource (PHP)
chmod( lt[0777 || 02777 || 04777]gt)
ЗаголовокПримеры шаблонов на DSL
bull Empty try-catch block (All C Java PHP PLSQL T-SQL)
try catch
bull Weak Cryptographic Algorithm (PHP)mcrypt_encrypt(lt[MCRYPT_DES || des]gt lt[MCRYPT_MODE_ECB || ecb]gt )
bull Insecure Cookie (Java)Cookie lt[cookie]gt = new Cookie()
lt[~]gtlt[cookie]gtsetSecure(true)
responseaddCookie(lt[cookie]gt)
ЗаголовокПримеры шаблонов под PLSQL и T-SQL
bull Erroneous Null Comparison (PLSQL T-SQL)
== null lt[||]gt = null
bull Overly Broad Grant (PLSQL T-SQL)
grant_all()
Пример
GRANT ALL ON employees TO john_doe
ЗаголовокНезакрытый курсор в PLSQL
lt[cursor]gt = DBMS_SQLOPEN_CURSOR
lt[~]gtDBMS_SQLCLOSE_CURSOR(lt[cursor]gt)
F1 = UTL_FILEFOPEN(user_diru12345tmpR256)
UTL_FILEGET_LINE(F1V132767)
-- UTL_FILEFCLOSE(F1) is missing
ЗаголовокНезакрытый курсор в T-SQL
declare_cursor(lt[cursor]gt )
lt[~]gtdeallocate(lt[cursor]gt)
DECLARE Employee_Cursor CURSOR FOR SELECT EmployeeID Title FROMAdventureWorks2012HumanResourcesEmployee
OPEN Employee_Cursor
FETCH NEXT FROM Employee_Cursor
--CLOSE Employee_Cursor is missing
--DEALLOCATE Employee_Cursor is missing
ЗаголовокTaint
bull Taint gt PM
bull Анализ не только AST но и CFG DFG
bull Учет семантики из других анализаторов (Roslyn для C)
bull Шаблоны Pattern Matching также будут валидны в Taint
ЗаголовокШаблон Сross-Site Scripting (XSS) в Taint
TDE (Taint Data Entry)
lt[a]gt = Requestlt[Params|QueryString]gt[]
TF (Transform function)
lt[~]gt lt[b]gt =lt[SystemNetWebUtilityHtmlEncode]gt(lt[a]gt)
PVF (Potential Vulnerability Function) ResponseWrite(lt[b]gt)
ЗаголовокЗаключение
Статьи с тегом [Application Inspector] на laquoХабрахабреraquo
Грамматики PLSQL T-SQL PHP на githubcomantlrgrammars-v4
Pattern Matching планируется включить в AppRoof
Заголовок
Thank You
ptsecuritycom
ЗаголовокСинтаксические конструкции в DSL
expr(args) ndash вызов метода
exprId ndash обращение к члену объекта (поле метод)
Id expr = expr ndash инициализация переменной
expr + expr ndash конкатенация
new Id(args) ndash создание объекта
expr[expr] ndash обращение по индексу или ключу
ЗаголовокСинтаксические конструкции в DSL
bull Примитивные типы в DSL
Id String Int Bool Null
bull Синтаксис DSL
lt[]gt ndash оператор расширенного выражения (lt[md5|sha1]gt или lt[02048]gt)
или lt[expr]gt ndash любое Expression
или lt[args]gt ndash произвольное количество любых аргументов
(expr)expr ndash эквивалентно exprexpr или просто expr
lt[~]gtexpr ndash отрицание условия
expr (lt[||]gt expr) ndash объединение нескольких условий (ИЛИ)
Comment regex ndash поиск по комментариям
ЗаголовокПримеры шаблонов на DSL
bull Hardcoded Password (All C Java PHP PLSQL T-SQL)
()lt[(i)password(-i)]gt = lt[w]gt
bull Static Random Number Generator (C Java)
new Random(lt[]gt)
bull Debug Information Leak (PHP)
Configurelt[(i)^write$(-i)]gt(debug lt[19]gt)
bull Insecure SSL connection (Java)
new AllowAllHostnameVerifier() lt[||]gt SSLSocketFactoryALLOW_ALL_HOSTNAME_VERIFIER
ЗаголовокПримеры шаблонов на DSL
bull Password In Comment (All C Java PHP PLSQL T-SQL)
Comment lt[ (i)password(-i)s= ]gt
bull SQL Injection (All C Java PHP PLSQL T-SQL)
lt[(i)select(-i)sw]gt + lt[~w]gt
bull Cookie Without Secure Attribute (PHP)session_set_cookie_params() без четвертого аргумента
bull Incorrect Permission Assignment For Critical Resource (PHP)
chmod( lt[0777 || 02777 || 04777]gt)
ЗаголовокПримеры шаблонов на DSL
bull Empty try-catch block (All C Java PHP PLSQL T-SQL)
try catch
bull Weak Cryptographic Algorithm (PHP)mcrypt_encrypt(lt[MCRYPT_DES || des]gt lt[MCRYPT_MODE_ECB || ecb]gt )
bull Insecure Cookie (Java)Cookie lt[cookie]gt = new Cookie()
lt[~]gtlt[cookie]gtsetSecure(true)
responseaddCookie(lt[cookie]gt)
ЗаголовокПримеры шаблонов под PLSQL и T-SQL
bull Erroneous Null Comparison (PLSQL T-SQL)
== null lt[||]gt = null
bull Overly Broad Grant (PLSQL T-SQL)
grant_all()
Пример
GRANT ALL ON employees TO john_doe
ЗаголовокНезакрытый курсор в PLSQL
lt[cursor]gt = DBMS_SQLOPEN_CURSOR
lt[~]gtDBMS_SQLCLOSE_CURSOR(lt[cursor]gt)
F1 = UTL_FILEFOPEN(user_diru12345tmpR256)
UTL_FILEGET_LINE(F1V132767)
-- UTL_FILEFCLOSE(F1) is missing
ЗаголовокНезакрытый курсор в T-SQL
declare_cursor(lt[cursor]gt )
lt[~]gtdeallocate(lt[cursor]gt)
DECLARE Employee_Cursor CURSOR FOR SELECT EmployeeID Title FROMAdventureWorks2012HumanResourcesEmployee
OPEN Employee_Cursor
FETCH NEXT FROM Employee_Cursor
--CLOSE Employee_Cursor is missing
--DEALLOCATE Employee_Cursor is missing
ЗаголовокTaint
bull Taint gt PM
bull Анализ не только AST но и CFG DFG
bull Учет семантики из других анализаторов (Roslyn для C)
bull Шаблоны Pattern Matching также будут валидны в Taint
ЗаголовокШаблон Сross-Site Scripting (XSS) в Taint
TDE (Taint Data Entry)
lt[a]gt = Requestlt[Params|QueryString]gt[]
TF (Transform function)
lt[~]gt lt[b]gt =lt[SystemNetWebUtilityHtmlEncode]gt(lt[a]gt)
PVF (Potential Vulnerability Function) ResponseWrite(lt[b]gt)
ЗаголовокЗаключение
Статьи с тегом [Application Inspector] на laquoХабрахабреraquo
Грамматики PLSQL T-SQL PHP на githubcomantlrgrammars-v4
Pattern Matching планируется включить в AppRoof
Заголовок
Thank You
ptsecuritycom
ЗаголовокСинтаксические конструкции в DSL
bull Примитивные типы в DSL
Id String Int Bool Null
bull Синтаксис DSL
lt[]gt ndash оператор расширенного выражения (lt[md5|sha1]gt или lt[02048]gt)
или lt[expr]gt ndash любое Expression
или lt[args]gt ndash произвольное количество любых аргументов
(expr)expr ndash эквивалентно exprexpr или просто expr
lt[~]gtexpr ndash отрицание условия
expr (lt[||]gt expr) ndash объединение нескольких условий (ИЛИ)
Comment regex ndash поиск по комментариям
ЗаголовокПримеры шаблонов на DSL
bull Hardcoded Password (All C Java PHP PLSQL T-SQL)
()lt[(i)password(-i)]gt = lt[w]gt
bull Static Random Number Generator (C Java)
new Random(lt[]gt)
bull Debug Information Leak (PHP)
Configurelt[(i)^write$(-i)]gt(debug lt[19]gt)
bull Insecure SSL connection (Java)
new AllowAllHostnameVerifier() lt[||]gt SSLSocketFactoryALLOW_ALL_HOSTNAME_VERIFIER
ЗаголовокПримеры шаблонов на DSL
bull Password In Comment (All C Java PHP PLSQL T-SQL)
Comment lt[ (i)password(-i)s= ]gt
bull SQL Injection (All C Java PHP PLSQL T-SQL)
lt[(i)select(-i)sw]gt + lt[~w]gt
bull Cookie Without Secure Attribute (PHP)session_set_cookie_params() без четвертого аргумента
bull Incorrect Permission Assignment For Critical Resource (PHP)
chmod( lt[0777 || 02777 || 04777]gt)
ЗаголовокПримеры шаблонов на DSL
bull Empty try-catch block (All C Java PHP PLSQL T-SQL)
try catch
bull Weak Cryptographic Algorithm (PHP)mcrypt_encrypt(lt[MCRYPT_DES || des]gt lt[MCRYPT_MODE_ECB || ecb]gt )
bull Insecure Cookie (Java)Cookie lt[cookie]gt = new Cookie()
lt[~]gtlt[cookie]gtsetSecure(true)
responseaddCookie(lt[cookie]gt)
ЗаголовокПримеры шаблонов под PLSQL и T-SQL
bull Erroneous Null Comparison (PLSQL T-SQL)
== null lt[||]gt = null
bull Overly Broad Grant (PLSQL T-SQL)
grant_all()
Пример
GRANT ALL ON employees TO john_doe
ЗаголовокНезакрытый курсор в PLSQL
lt[cursor]gt = DBMS_SQLOPEN_CURSOR
lt[~]gtDBMS_SQLCLOSE_CURSOR(lt[cursor]gt)
F1 = UTL_FILEFOPEN(user_diru12345tmpR256)
UTL_FILEGET_LINE(F1V132767)
-- UTL_FILEFCLOSE(F1) is missing
ЗаголовокНезакрытый курсор в T-SQL
declare_cursor(lt[cursor]gt )
lt[~]gtdeallocate(lt[cursor]gt)
DECLARE Employee_Cursor CURSOR FOR SELECT EmployeeID Title FROMAdventureWorks2012HumanResourcesEmployee
OPEN Employee_Cursor
FETCH NEXT FROM Employee_Cursor
--CLOSE Employee_Cursor is missing
--DEALLOCATE Employee_Cursor is missing
ЗаголовокTaint
bull Taint gt PM
bull Анализ не только AST но и CFG DFG
bull Учет семантики из других анализаторов (Roslyn для C)
bull Шаблоны Pattern Matching также будут валидны в Taint
ЗаголовокШаблон Сross-Site Scripting (XSS) в Taint
TDE (Taint Data Entry)
lt[a]gt = Requestlt[Params|QueryString]gt[]
TF (Transform function)
lt[~]gt lt[b]gt =lt[SystemNetWebUtilityHtmlEncode]gt(lt[a]gt)
PVF (Potential Vulnerability Function) ResponseWrite(lt[b]gt)
ЗаголовокЗаключение
Статьи с тегом [Application Inspector] на laquoХабрахабреraquo
Грамматики PLSQL T-SQL PHP на githubcomantlrgrammars-v4
Pattern Matching планируется включить в AppRoof
Заголовок
Thank You
ptsecuritycom
ЗаголовокПримеры шаблонов на DSL
bull Hardcoded Password (All C Java PHP PLSQL T-SQL)
()lt[(i)password(-i)]gt = lt[w]gt
bull Static Random Number Generator (C Java)
new Random(lt[]gt)
bull Debug Information Leak (PHP)
Configurelt[(i)^write$(-i)]gt(debug lt[19]gt)
bull Insecure SSL connection (Java)
new AllowAllHostnameVerifier() lt[||]gt SSLSocketFactoryALLOW_ALL_HOSTNAME_VERIFIER
ЗаголовокПримеры шаблонов на DSL
bull Password In Comment (All C Java PHP PLSQL T-SQL)
Comment lt[ (i)password(-i)s= ]gt
bull SQL Injection (All C Java PHP PLSQL T-SQL)
lt[(i)select(-i)sw]gt + lt[~w]gt
bull Cookie Without Secure Attribute (PHP)session_set_cookie_params() без четвертого аргумента
bull Incorrect Permission Assignment For Critical Resource (PHP)
chmod( lt[0777 || 02777 || 04777]gt)
ЗаголовокПримеры шаблонов на DSL
bull Empty try-catch block (All C Java PHP PLSQL T-SQL)
try catch
bull Weak Cryptographic Algorithm (PHP)mcrypt_encrypt(lt[MCRYPT_DES || des]gt lt[MCRYPT_MODE_ECB || ecb]gt )
bull Insecure Cookie (Java)Cookie lt[cookie]gt = new Cookie()
lt[~]gtlt[cookie]gtsetSecure(true)
responseaddCookie(lt[cookie]gt)
ЗаголовокПримеры шаблонов под PLSQL и T-SQL
bull Erroneous Null Comparison (PLSQL T-SQL)
== null lt[||]gt = null
bull Overly Broad Grant (PLSQL T-SQL)
grant_all()
Пример
GRANT ALL ON employees TO john_doe
ЗаголовокНезакрытый курсор в PLSQL
lt[cursor]gt = DBMS_SQLOPEN_CURSOR
lt[~]gtDBMS_SQLCLOSE_CURSOR(lt[cursor]gt)
F1 = UTL_FILEFOPEN(user_diru12345tmpR256)
UTL_FILEGET_LINE(F1V132767)
-- UTL_FILEFCLOSE(F1) is missing
ЗаголовокНезакрытый курсор в T-SQL
declare_cursor(lt[cursor]gt )
lt[~]gtdeallocate(lt[cursor]gt)
DECLARE Employee_Cursor CURSOR FOR SELECT EmployeeID Title FROMAdventureWorks2012HumanResourcesEmployee
OPEN Employee_Cursor
FETCH NEXT FROM Employee_Cursor
--CLOSE Employee_Cursor is missing
--DEALLOCATE Employee_Cursor is missing
ЗаголовокTaint
bull Taint gt PM
bull Анализ не только AST но и CFG DFG
bull Учет семантики из других анализаторов (Roslyn для C)
bull Шаблоны Pattern Matching также будут валидны в Taint
ЗаголовокШаблон Сross-Site Scripting (XSS) в Taint
TDE (Taint Data Entry)
lt[a]gt = Requestlt[Params|QueryString]gt[]
TF (Transform function)
lt[~]gt lt[b]gt =lt[SystemNetWebUtilityHtmlEncode]gt(lt[a]gt)
PVF (Potential Vulnerability Function) ResponseWrite(lt[b]gt)
ЗаголовокЗаключение
Статьи с тегом [Application Inspector] на laquoХабрахабреraquo
Грамматики PLSQL T-SQL PHP на githubcomantlrgrammars-v4
Pattern Matching планируется включить в AppRoof
Заголовок
Thank You
ptsecuritycom
ЗаголовокПримеры шаблонов на DSL
bull Password In Comment (All C Java PHP PLSQL T-SQL)
Comment lt[ (i)password(-i)s= ]gt
bull SQL Injection (All C Java PHP PLSQL T-SQL)
lt[(i)select(-i)sw]gt + lt[~w]gt
bull Cookie Without Secure Attribute (PHP)session_set_cookie_params() без четвертого аргумента
bull Incorrect Permission Assignment For Critical Resource (PHP)
chmod( lt[0777 || 02777 || 04777]gt)
ЗаголовокПримеры шаблонов на DSL
bull Empty try-catch block (All C Java PHP PLSQL T-SQL)
try catch
bull Weak Cryptographic Algorithm (PHP)mcrypt_encrypt(lt[MCRYPT_DES || des]gt lt[MCRYPT_MODE_ECB || ecb]gt )
bull Insecure Cookie (Java)Cookie lt[cookie]gt = new Cookie()
lt[~]gtlt[cookie]gtsetSecure(true)
responseaddCookie(lt[cookie]gt)
ЗаголовокПримеры шаблонов под PLSQL и T-SQL
bull Erroneous Null Comparison (PLSQL T-SQL)
== null lt[||]gt = null
bull Overly Broad Grant (PLSQL T-SQL)
grant_all()
Пример
GRANT ALL ON employees TO john_doe
ЗаголовокНезакрытый курсор в PLSQL
lt[cursor]gt = DBMS_SQLOPEN_CURSOR
lt[~]gtDBMS_SQLCLOSE_CURSOR(lt[cursor]gt)
F1 = UTL_FILEFOPEN(user_diru12345tmpR256)
UTL_FILEGET_LINE(F1V132767)
-- UTL_FILEFCLOSE(F1) is missing
ЗаголовокНезакрытый курсор в T-SQL
declare_cursor(lt[cursor]gt )
lt[~]gtdeallocate(lt[cursor]gt)
DECLARE Employee_Cursor CURSOR FOR SELECT EmployeeID Title FROMAdventureWorks2012HumanResourcesEmployee
OPEN Employee_Cursor
FETCH NEXT FROM Employee_Cursor
--CLOSE Employee_Cursor is missing
--DEALLOCATE Employee_Cursor is missing
ЗаголовокTaint
bull Taint gt PM
bull Анализ не только AST но и CFG DFG
bull Учет семантики из других анализаторов (Roslyn для C)
bull Шаблоны Pattern Matching также будут валидны в Taint
ЗаголовокШаблон Сross-Site Scripting (XSS) в Taint
TDE (Taint Data Entry)
lt[a]gt = Requestlt[Params|QueryString]gt[]
TF (Transform function)
lt[~]gt lt[b]gt =lt[SystemNetWebUtilityHtmlEncode]gt(lt[a]gt)
PVF (Potential Vulnerability Function) ResponseWrite(lt[b]gt)
ЗаголовокЗаключение
Статьи с тегом [Application Inspector] на laquoХабрахабреraquo
Грамматики PLSQL T-SQL PHP на githubcomantlrgrammars-v4
Pattern Matching планируется включить в AppRoof
Заголовок
Thank You
ptsecuritycom
ЗаголовокПримеры шаблонов на DSL
bull Empty try-catch block (All C Java PHP PLSQL T-SQL)
try catch
bull Weak Cryptographic Algorithm (PHP)mcrypt_encrypt(lt[MCRYPT_DES || des]gt lt[MCRYPT_MODE_ECB || ecb]gt )
bull Insecure Cookie (Java)Cookie lt[cookie]gt = new Cookie()
lt[~]gtlt[cookie]gtsetSecure(true)
responseaddCookie(lt[cookie]gt)
ЗаголовокПримеры шаблонов под PLSQL и T-SQL
bull Erroneous Null Comparison (PLSQL T-SQL)
== null lt[||]gt = null
bull Overly Broad Grant (PLSQL T-SQL)
grant_all()
Пример
GRANT ALL ON employees TO john_doe
ЗаголовокНезакрытый курсор в PLSQL
lt[cursor]gt = DBMS_SQLOPEN_CURSOR
lt[~]gtDBMS_SQLCLOSE_CURSOR(lt[cursor]gt)
F1 = UTL_FILEFOPEN(user_diru12345tmpR256)
UTL_FILEGET_LINE(F1V132767)
-- UTL_FILEFCLOSE(F1) is missing
ЗаголовокНезакрытый курсор в T-SQL
declare_cursor(lt[cursor]gt )
lt[~]gtdeallocate(lt[cursor]gt)
DECLARE Employee_Cursor CURSOR FOR SELECT EmployeeID Title FROMAdventureWorks2012HumanResourcesEmployee
OPEN Employee_Cursor
FETCH NEXT FROM Employee_Cursor
--CLOSE Employee_Cursor is missing
--DEALLOCATE Employee_Cursor is missing
ЗаголовокTaint
bull Taint gt PM
bull Анализ не только AST но и CFG DFG
bull Учет семантики из других анализаторов (Roslyn для C)
bull Шаблоны Pattern Matching также будут валидны в Taint
ЗаголовокШаблон Сross-Site Scripting (XSS) в Taint
TDE (Taint Data Entry)
lt[a]gt = Requestlt[Params|QueryString]gt[]
TF (Transform function)
lt[~]gt lt[b]gt =lt[SystemNetWebUtilityHtmlEncode]gt(lt[a]gt)
PVF (Potential Vulnerability Function) ResponseWrite(lt[b]gt)
ЗаголовокЗаключение
Статьи с тегом [Application Inspector] на laquoХабрахабреraquo
Грамматики PLSQL T-SQL PHP на githubcomantlrgrammars-v4
Pattern Matching планируется включить в AppRoof
Заголовок
Thank You
ptsecuritycom
ЗаголовокПримеры шаблонов под PLSQL и T-SQL
bull Erroneous Null Comparison (PLSQL T-SQL)
== null lt[||]gt = null
bull Overly Broad Grant (PLSQL T-SQL)
grant_all()
Пример
GRANT ALL ON employees TO john_doe
ЗаголовокНезакрытый курсор в PLSQL
lt[cursor]gt = DBMS_SQLOPEN_CURSOR
lt[~]gtDBMS_SQLCLOSE_CURSOR(lt[cursor]gt)
F1 = UTL_FILEFOPEN(user_diru12345tmpR256)
UTL_FILEGET_LINE(F1V132767)
-- UTL_FILEFCLOSE(F1) is missing
ЗаголовокНезакрытый курсор в T-SQL
declare_cursor(lt[cursor]gt )
lt[~]gtdeallocate(lt[cursor]gt)
DECLARE Employee_Cursor CURSOR FOR SELECT EmployeeID Title FROMAdventureWorks2012HumanResourcesEmployee
OPEN Employee_Cursor
FETCH NEXT FROM Employee_Cursor
--CLOSE Employee_Cursor is missing
--DEALLOCATE Employee_Cursor is missing
ЗаголовокTaint
bull Taint gt PM
bull Анализ не только AST но и CFG DFG
bull Учет семантики из других анализаторов (Roslyn для C)
bull Шаблоны Pattern Matching также будут валидны в Taint
ЗаголовокШаблон Сross-Site Scripting (XSS) в Taint
TDE (Taint Data Entry)
lt[a]gt = Requestlt[Params|QueryString]gt[]
TF (Transform function)
lt[~]gt lt[b]gt =lt[SystemNetWebUtilityHtmlEncode]gt(lt[a]gt)
PVF (Potential Vulnerability Function) ResponseWrite(lt[b]gt)
ЗаголовокЗаключение
Статьи с тегом [Application Inspector] на laquoХабрахабреraquo
Грамматики PLSQL T-SQL PHP на githubcomantlrgrammars-v4
Pattern Matching планируется включить в AppRoof
Заголовок
Thank You
ptsecuritycom
ЗаголовокНезакрытый курсор в PLSQL
lt[cursor]gt = DBMS_SQLOPEN_CURSOR
lt[~]gtDBMS_SQLCLOSE_CURSOR(lt[cursor]gt)
F1 = UTL_FILEFOPEN(user_diru12345tmpR256)
UTL_FILEGET_LINE(F1V132767)
-- UTL_FILEFCLOSE(F1) is missing
ЗаголовокНезакрытый курсор в T-SQL
declare_cursor(lt[cursor]gt )
lt[~]gtdeallocate(lt[cursor]gt)
DECLARE Employee_Cursor CURSOR FOR SELECT EmployeeID Title FROMAdventureWorks2012HumanResourcesEmployee
OPEN Employee_Cursor
FETCH NEXT FROM Employee_Cursor
--CLOSE Employee_Cursor is missing
--DEALLOCATE Employee_Cursor is missing
ЗаголовокTaint
bull Taint gt PM
bull Анализ не только AST но и CFG DFG
bull Учет семантики из других анализаторов (Roslyn для C)
bull Шаблоны Pattern Matching также будут валидны в Taint
ЗаголовокШаблон Сross-Site Scripting (XSS) в Taint
TDE (Taint Data Entry)
lt[a]gt = Requestlt[Params|QueryString]gt[]
TF (Transform function)
lt[~]gt lt[b]gt =lt[SystemNetWebUtilityHtmlEncode]gt(lt[a]gt)
PVF (Potential Vulnerability Function) ResponseWrite(lt[b]gt)
ЗаголовокЗаключение
Статьи с тегом [Application Inspector] на laquoХабрахабреraquo
Грамматики PLSQL T-SQL PHP на githubcomantlrgrammars-v4
Pattern Matching планируется включить в AppRoof
Заголовок
Thank You
ptsecuritycom
ЗаголовокНезакрытый курсор в T-SQL
declare_cursor(lt[cursor]gt )
lt[~]gtdeallocate(lt[cursor]gt)
DECLARE Employee_Cursor CURSOR FOR SELECT EmployeeID Title FROMAdventureWorks2012HumanResourcesEmployee
OPEN Employee_Cursor
FETCH NEXT FROM Employee_Cursor
--CLOSE Employee_Cursor is missing
--DEALLOCATE Employee_Cursor is missing
ЗаголовокTaint
bull Taint gt PM
bull Анализ не только AST но и CFG DFG
bull Учет семантики из других анализаторов (Roslyn для C)
bull Шаблоны Pattern Matching также будут валидны в Taint
ЗаголовокШаблон Сross-Site Scripting (XSS) в Taint
TDE (Taint Data Entry)
lt[a]gt = Requestlt[Params|QueryString]gt[]
TF (Transform function)
lt[~]gt lt[b]gt =lt[SystemNetWebUtilityHtmlEncode]gt(lt[a]gt)
PVF (Potential Vulnerability Function) ResponseWrite(lt[b]gt)
ЗаголовокЗаключение
Статьи с тегом [Application Inspector] на laquoХабрахабреraquo
Грамматики PLSQL T-SQL PHP на githubcomantlrgrammars-v4
Pattern Matching планируется включить в AppRoof
Заголовок
Thank You
ptsecuritycom
ЗаголовокTaint
bull Taint gt PM
bull Анализ не только AST но и CFG DFG
bull Учет семантики из других анализаторов (Roslyn для C)
bull Шаблоны Pattern Matching также будут валидны в Taint
ЗаголовокШаблон Сross-Site Scripting (XSS) в Taint
TDE (Taint Data Entry)
lt[a]gt = Requestlt[Params|QueryString]gt[]
TF (Transform function)
lt[~]gt lt[b]gt =lt[SystemNetWebUtilityHtmlEncode]gt(lt[a]gt)
PVF (Potential Vulnerability Function) ResponseWrite(lt[b]gt)
ЗаголовокЗаключение
Статьи с тегом [Application Inspector] на laquoХабрахабреraquo
Грамматики PLSQL T-SQL PHP на githubcomantlrgrammars-v4
Pattern Matching планируется включить в AppRoof
Заголовок
Thank You
ptsecuritycom
ЗаголовокШаблон Сross-Site Scripting (XSS) в Taint
TDE (Taint Data Entry)
lt[a]gt = Requestlt[Params|QueryString]gt[]
TF (Transform function)
lt[~]gt lt[b]gt =lt[SystemNetWebUtilityHtmlEncode]gt(lt[a]gt)
PVF (Potential Vulnerability Function) ResponseWrite(lt[b]gt)
ЗаголовокЗаключение
Статьи с тегом [Application Inspector] на laquoХабрахабреraquo
Грамматики PLSQL T-SQL PHP на githubcomantlrgrammars-v4
Pattern Matching планируется включить в AppRoof
Заголовок
Thank You
ptsecuritycom
ЗаголовокЗаключение
Статьи с тегом [Application Inspector] на laquoХабрахабреraquo
Грамматики PLSQL T-SQL PHP на githubcomantlrgrammars-v4
Pattern Matching планируется включить в AppRoof
Заголовок
Thank You
ptsecuritycom
Заголовок
Thank You
ptsecuritycom