19
Заголовок ptsecurity.com Подходы к сигнатурному статическому анализу Иван Кочуркин

Подходы к сигнатурному статическому анализу

Embed Size (px)

Citation preview

Page 1: Подходы к сигнатурному статическому анализу

Заголовок

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

Page 2: Подходы к сигнатурному статическому анализу

ЗаголовокЭтапы работы анализатора 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

Page 3: Подходы к сигнатурному статическому анализу

ЗаголовокОбоснование разработки анализатора 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

Page 4: Подходы к сигнатурному статическому анализу

ЗаголовокЗадачи парсинга

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

Page 5: Подходы к сигнатурному статическому анализу

ЗаголовокСпособы описания шаблонов

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

Page 6: Подходы к сигнатурному статическому анализу

ЗаголовокЦелесообразность 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

Page 7: Подходы к сигнатурному статическому анализу

Заголовок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

Page 8: Подходы к сигнатурному статическому анализу

ЗаголовокСинтаксические конструкции в 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

Page 9: Подходы к сигнатурному статическому анализу

ЗаголовокСинтаксические конструкции в 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

Page 10: Подходы к сигнатурному статическому анализу

ЗаголовокПримеры шаблонов на 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

Page 11: Подходы к сигнатурному статическому анализу

ЗаголовокПримеры шаблонов на 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

Page 12: Подходы к сигнатурному статическому анализу

ЗаголовокПримеры шаблонов на 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

Page 13: Подходы к сигнатурному статическому анализу

ЗаголовокПримеры шаблонов под 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

Page 14: Подходы к сигнатурному статическому анализу

ЗаголовокНезакрытый курсор в 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

Page 15: Подходы к сигнатурному статическому анализу

ЗаголовокНезакрытый курсор в 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

Page 16: Подходы к сигнатурному статическому анализу

Заголовок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

Page 17: Подходы к сигнатурному статическому анализу

ЗаголовокШаблон С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

Page 18: Подходы к сигнатурному статическому анализу

ЗаголовокЗаключение

Статьи с тегом [Application Inspector] на laquoХабрахабреraquo

Грамматики PLSQL T-SQL PHP на githubcomantlrgrammars-v4

Pattern Matching планируется включить в AppRoof

Заголовок

Thank You

ptsecuritycom

Page 19: Подходы к сигнатурному статическому анализу

Заголовок

Thank You

ptsecuritycom