SlideShare ist ein Scribd-Unternehmen logo
1 von 40
Downloaden Sie, um offline zu lesen
Digital Security CheckCode group
Anatoly Karpenko
Alexey Kuzmenko
SA
Боль Тлен Безысходность Кладбище
Limbo of Static Code Analysis
for Security
http://dsec.ru/
The most important thing whom I making as the programmer during the
last years —
it starting to apply static analysis of the code aggressively.
John Carmack
Not so hundreds serious bugs whom it were possible to prevent,
how many change of mentality and my relation to reliability of a software
and quality of the code
НО… 2
Статический анализ Начало
 QA
 Избыточность кода
 Лучшие практики
 Мертвый код
 Баг и false positive – разные вещи
 Security
 Предотвращает проблемы с безопасностью
 Не любой анализ потоков это безопасность
 Валидация входящих параметров и
санитайзеры
3
БОЛЬ
Статический анализ кода – это боль!
4
Облако Боли
5
Open Source Commercial
• Splint С
• Frama-С C
• SonarQube C/Java/PHP
• FindBugs Java
• CppCheck C/C++
• PyLint Python
• AdaControl Ada
• JSLint JavaScript
• PMD Java
• SonarQube C,Java,PHP
• CodeSonar C/C++,Java,bin
• Parasoft C/C++,Java,.NET
• KlocWork C++,C,C#,Java
• Coverity C++,C,C#,Java
• HP Fortify C++,C,C#,Java
• IBM AppScan Java
• LDRA C/C++
• MathWork Polyspace Bug Finder
C,C++
• Veracode C/C++,Java,PHP,Ruby
• CheckMarx Java,C/C++,Ruby,PHP
6
• Pattern-based
• Быстрое сканирование
• Ищем специфичные паттерны (via regexp)
• Интересует лишь факт паттерна, удобно для Security
• Много false positive
• Flow-based
• Задумываемся о Control Flow, Data Flow, Code Property and etc
• Позволяет выводить цикломатическую сложность
• Межпроцедурный анализ
• Логические ошибки ищутся легче – анализируем потоки
• Metrics based
• Статистический подход к поиску, смесь между паттернами и потоками
• Compiler/build output
• Упрощаем жизнь с использованием дампов компиляторов и интерпретаторов
• Просто делаем надстройки, модель анализа кода уже сделана
Общие концепции построения анализа
7
Техники статического анализа
? SSA (Static Single Assignments)
? Pointer Analysis
? AST, ASG(Abstract Semantic Graph)
? CFG, DFG, CPG
? Tainted Analysis
? Type-based, domain specific
? Interval Analysis
? Symbolic Analysis
В реальной жизни подходы и модели имеют определенные ограничения
Приходится делать нелегкий выбор между:
- Точностью
- Глубиной/Полнотой
- Масштабируемостью
8
А вокруг мертвые с косами стоят…..
gcc -fdump-tree-ssa=if.ssa if.c
int main(){
int a;
int b;
printf("Enter a number you want to check.n");
scanf("%d",&a);
if((a%2)==0){b = a + 1;}
else{b = a - 6;}
return b;
}
if (_4 == 0) goto <bb 3>;
Else goto <bb 4>;
<bb 3>:
a.2_5 = a;
b_6 = a.2_5 + 1;
goto <bb 5>;
<bb 4>:
a.3_7 = a;
b_8 = a.3_7 + -6;
<bb 5>:
# b_1 = PHI <b_6(3), b_8(4)>
_9 = b_1;
a ={v} {CLOBBER};
<L4>:
return _9;
9
…но реальность такова, что
if (true) { … } // fixed conditional, not recommended
if (x) { // original implementation
if (y) {
if (x && y) { // optimized implementation
// свертка не всегда хорошо
if (someVar === true) {
// Ok – pattern-based
}
if (someVar !== 3) {
// Ok – patter-based
}
if (someVar == true) {
// Bad – pattern-based
}
if (someVar != 3) {
// Bad – pattern-based
}
10
…но реальность такова, что
public class Estate {
// Noncompliant; array contents can be modified
public static final String [] HEIRS = new String [] { "Betty", "Suzy" };
}
public class Malicious {
public void changeWill() {
Estate.HEIRS[0] = "Biff";
if (Estate.HEIRS.length > 1) {
for (int i = 1; i < Estate.HEIRS.length; i++) { Estate.HEIRS[i] = ""; }
}
}
MITRE, CWE-582 - Array Declared Public, Final, and Static
MITRE, CWE-607 - Public Static Final Field References Mutable Object
11
НЕ ВСЕ ТО CVE, ЧТО CWE
CWE – Common Weakness Enumeration
CVE – Common Vulnerabilities and Exposures
…но реальность такова, что
12
+ Статей ОЧЕНЬ много
+ Исследований
множество
+ Проектов много
- Продуктов мало
- Проект не вырос до продукта
- Не были доведены «до ума»
- Прекратили развитие
13
ТЛЕН
После черной полосы не наступает белая…..
…еще остается 49 оттенков серого
14
Языки общего назначения и их решения
 СС++ ClangLLVMGCC
 Java PMDJDT
 Python ast
 JavaScript SpiderMonkey ParserAPI/Esprima
 …..
#include "clang/AST/ASTContext.h"
#include "clang/AST/Decl.h"
#include "clang/AST/DeclCXX.h"
#include "clang/AST/DeclObjC.h"
#include "clang/AST/DeclTemplate.h"
#include "clang/AST/Expr.h"
#include "clang/AST/ExprObjC.h"
#include "clang/AST/StmtVisitor.h"
#include "clang/AST/Type.h«
……………………………………………..
Решение: берем готовое
Парсинг кода и его представление
– отдельная и трудоемкая задача
15
Интерфейсы чтения модели для имплементации , чтобы абстрагироваться от AST producer
(e.g. parser vs AST dump file reader, etc).
16
Бизнес “проблемно-ориентированные” языки программирования
∞ Table-driven programming
∞ Высокоуровневое манипулирование состоянием
данных
∞ Мощные операторы и функции без оперирования
состоянием
∞ Report-generator
∞ Генерация форм
∞ Генерация документов
∞ Одна команда – один отчет
∞ Data management
∞ Косвенное управление данными ( в нашем случае
реляционных )
∞ Мульти типовая типизация
∞ Server-side JavaScript ( XSJS )
∞ Request processing
∞ Database
∞ HTTP Outbound
∞ Trace
∞ Job Scheduling
∞ ABAP
∞ OOP
∞ BSP
∞ WebDynPro
∞ Database
∞ System Calls
∞ SQLScript
∞ Call R Scripts
∞ Default database calls
17
Бизнес ЯП
Стат. анализ
Анализ бизнес ориентированных языков - Проблемы
≠ скудное описание в публичных источниках
≠ не вся то полезно, что документация
≠ анализаторов практически нет
≠ анализаторов безопасности еще меньше
 Разработчики не используют всю мощность языка
 Но никогда не узнаешь, какую именно и кто….
18
Анализ бизнес ориентированных языков
? Все стандартно плюс свои особенности
? Списки всех возможных функций заложенных в runtime языка
? Несколько документаций для «перекрестного анализа» различных версий
? Не стоит верить внутренней документации системы – ВЕРСИИ!!!
? Очень много, нереально много ключевых слов
? Отсутствие открытых грамматик для парсеров
Example:
CALL METHOD oref->m1 EXPORTING para = : '1', '2', '3'.
Что бы это могло значить?????
19
Анализ бизнес ориентированных языков
Вот это полный синтаксис:
CALL METHOD oref->m1 EXPORTING para = '1'.
CALL METHOD oref->m1 EXPORTING para = '2'.
CALL METHOD oref->m1 EXPORTING para = '3'.
А документация?
Call m1
Как понимали Как надо
[‘1’,’2’,’3’]
Call
m1
Call
m1
Call
m1
[‘1’] [‘2’] [‘3’]
[EXPORTING p1 = a1 p2 = a2 ...]
[IMPORTING p1 = a1 p2 = a2 ...]
Такой разный Control Flow, который влечет за собой и разный Data Flow
20
Что? Как? Почему?
Нет ничего, что могло бы помочь из готового для анализа таких языков
Пишем свой, на основе реализаций парсер-генераторов
И анализаторов языков общего назначения
Используем ANTLR
Что?
Как?
Почему?
HQL Hibernate, IDEA, Netbeans and etc используют для себя
Adaptive LL(*)
Генерируется Lexer, Parser and Tree walkers(Visitor and Listener Patterns)
Мы получаем часть работы for free
21
22
Безысходность
Всё бежит по кругу….
Что бы ты ни делал, всё равно ты обречён
23
Грамматики ANTLRv4
https://github.com/antlr/grammars-v4
grammar Expr;
prog: (expr NEWLINE)* ;
expr: expr ('*'|'/') expr | expr ('+'|'-') expr | INT | '(' expr ')' ;
NEWLINE : [rn]+ ;
INT : [0-9]+ ;
ANTLR не совсем регулярные выражения, но описания правил терминалов им соответствует
! Java
! JavaScript
! SQL
! …….
? Abap
? SQLScript
? XSJS
24
Грамматики ANTLR пишем сами
Написал рул -> Тестанул -> Нашел боевой пример -> Тестанул грамматику -> романтика
Что бы ты ни делал, всё равно ты обречён бежать по кругу
∞ Списки ключевых слов – для одного языка один блок 817 слов, без операторов
∞ Списки опций операторов – не поддается исчислению и оценке
∞ Списки встроенных «мощных ЭйПиАй»
∞ Сто пятьсот оттенков типов, видов, наименований идентификаторов
∞ Методы для общих языков – не работают
∞ Сами грамматики не менее пары тройки тысяч строк – ОПЦИИ зло!!
25
Не все то Security, что QA
Дерево показывает разбор – но никак не характеризует код, безысходность….
26
Не все то Security, что QA
Если использовать нечеткий разбор
То о коде ничего сказать нельзя, кроме одного – корректен он или нет.
Если использовать островные, мостовые, атрибутные грамматики
То о коде можно сказать больше – типы, вычисления, трансляции,
учет контекста по объявлению блока.
Но всегда останутся нюансы, что ты не учел……
Это нормально
27
Знай свой язык и потенциальные векторы –
чтобы лучше проектировать грамматику для анализатора
Не все то Security, что QA
28
Не все то Security, что QA
29
Не все то Security, что QA
toExcelDownload : function(oEvent){
document.location.href = "http:://hana21:8010/eerm/eermxs/xs/db.xsjs?dfrom=" + dates.SINCE + "&dto=" + dates.TO +"";
}
//------- client
30
var id = $.request.getParameter("dfrom");
var val1 = $.request.getParameter("dto");
var conn = $.db.getConnection();
var st = prepareStatement("INSERT INTO "TABLE1" values("+id+","+val1+")");
Не все то Security, что QA
31
for Security, not for QA
- Нельзя искать регулярными выражениями – нужно уметь итерироваться по модели
- Нельзя строить для каждого исходника модель – это слишком дорого, нужен компромисс
- Нельзя пренебрегать мелочами – от них зависит контекст, важно выделить главное
32
for Security, not for QA
Без контекста – анализ безопасности кода, просто кусок буковок синтаксических моделей
А нам важна еще семантика
Но опять же не везде и не во всем
«Я специализируюсь на весьма специфическом виде безопасности
безопасности подсознания»
inception
33
Если с другом вышел в путь….
…то умрете оба
- Без качественной грамматики не будет качественного анализатора
- Но все это долгий бесконечный процесс по улучшению, дизайну и разработке
Не стоит жалеть времени на фундамент
Но и не стоит уходить в долгий сплин итеративности
Все имеет бесконечный потенциал улучшения
34
….идей
….людей
….времени
Кладбище
35
Хороший анализатор – это движок * проверки
Проверки – это долгий итеративный ресерч
Движок – это долгая бесконечная разработка
Главное правило реальности — не запутаться в своих иллюзиях.
36
Какой самый живучий паразит?
Я имею в виду сформировавшуюся идею,
полностью осознанную, поселившуюся в голове.
Она живуча и крайне заразна.
Стоит идее завладеть мозгом, избавиться от неё уже практически невозможно.
Идея
Движок
37
Проверки
Исследовать — значит видеть то, что видели все, и думать так, как не думал никто.
Альберт Сент-Дьёрди
- Нужно поддерживать общий тренд
- Все возможные спецификации безопасного кода
- Категории уязвимостей и техники эксплуатации
- Иметь то, что не имеют другие, чтобы только у вас это можно было получить
40
For this to work, you must ensure that your security team has the right skill
set—in short, you want security folks with software development chops.
“Secure programming with Static Analysis”
Mess with the best - die like the rest
41
Спасибо за внимание
?
?
?
?
?
?
?
?
?
!
42
Не стоит
бояться быть
посмелее,
малыш!

Weitere ähnliche Inhalte

Was ist angesagt?

C++ CoreHard Autumn 2018. Кодогенерация C++ кроссплатформенно. Продолжение - ...
C++ CoreHard Autumn 2018. Кодогенерация C++ кроссплатформенно. Продолжение - ...C++ CoreHard Autumn 2018. Кодогенерация C++ кроссплатформенно. Продолжение - ...
C++ CoreHard Autumn 2018. Кодогенерация C++ кроссплатформенно. Продолжение - ...corehard_by
 
200 open source проектов спустя: опыт статического анализа исходного кода
200 open source проектов спустя: опыт статического анализа исходного кода200 open source проектов спустя: опыт статического анализа исходного кода
200 open source проектов спустя: опыт статического анализа исходного кодаAndrey Karpov
 
Григорий Демченко, Асинхронность и неблокирующая синхронизация
Григорий Демченко, Асинхронность и неблокирующая синхронизацияГригорий Демченко, Асинхронность и неблокирующая синхронизация
Григорий Демченко, Асинхронность и неблокирующая синхронизацияSergey Platonov
 
Некриптографическое исследование носителей православной криптографии
Некриптографическое исследование носителей  православной криптографииНекриптографическое исследование носителей  православной криптографии
Некриптографическое исследование носителей православной криптографииSergey Soldatov
 
хитрости выведения типов
хитрости выведения типовхитрости выведения типов
хитрости выведения типовcorehard_by
 
Максим Хижинский Lock-free maps
Максим Хижинский Lock-free mapsМаксим Хижинский Lock-free maps
Максим Хижинский Lock-free mapsPlatonov Sergey
 
Для чего мы делали свой акторный фреймворк и что из этого вышло?
Для чего мы делали свой акторный фреймворк и что из этого вышло?Для чего мы делали свой акторный фреймворк и что из этого вышло?
Для чего мы делали свой акторный фреймворк и что из этого вышло?Yauheni Akhotnikau
 
Александр Тарасенко, Использование python для автоматизации отладки С/C++ код...
Александр Тарасенко, Использование python для автоматизации отладки С/C++ код...Александр Тарасенко, Использование python для автоматизации отладки С/C++ код...
Александр Тарасенко, Использование python для автоматизации отладки С/C++ код...Sergey Platonov
 
SWIG — cоздание мультиязыковых интерфейсов для C/C++ библиотек
SWIG — cоздание мультиязыковых интерфейсов для C/C++ библиотекSWIG — cоздание мультиязыковых интерфейсов для C/C++ библиотек
SWIG — cоздание мультиязыковых интерфейсов для C/C++ библиотекPython Meetup
 
"Почему язык Lua — это интересно?", Ник Заварицкий, (Mail.ru Group)
"Почему язык Lua — это интересно?", Ник Заварицкий, (Mail.ru Group)"Почему язык Lua — это интересно?", Ник Заварицкий, (Mail.ru Group)
"Почему язык Lua — это интересно?", Ник Заварицкий, (Mail.ru Group)Badoo Development
 
Asynchrony and coroutines
Asynchrony and coroutinesAsynchrony and coroutines
Asynchrony and coroutinescorehard_by
 
Шишки, набитые за 15 лет использования акторов в C++
Шишки, набитые за 15 лет использования акторов в C++Шишки, набитые за 15 лет использования акторов в C++
Шишки, набитые за 15 лет использования акторов в C++Yauheni Akhotnikau
 
20130429 dynamic c_c++_program_analysis-alexey_samsonov
20130429 dynamic c_c++_program_analysis-alexey_samsonov20130429 dynamic c_c++_program_analysis-alexey_samsonov
20130429 dynamic c_c++_program_analysis-alexey_samsonovComputer Science Club
 
разработка серверов и серверных приложений лекция №3
разработка серверов и серверных приложений лекция №3разработка серверов и серверных приложений лекция №3
разработка серверов и серверных приложений лекция №3Eugeniy Tyumentcev
 
Борис Сазонов, RAII потоки и CancellationToken в C++
Борис Сазонов, RAII потоки и CancellationToken в C++Борис Сазонов, RAII потоки и CancellationToken в C++
Борис Сазонов, RAII потоки и CancellationToken в C++Sergey Platonov
 
Использование юнит-тестов для повышения качества разработки
Использование юнит-тестов для повышения качества разработкиИспользование юнит-тестов для повышения качества разработки
Использование юнит-тестов для повышения качества разработкиvictor-yastrebov
 
Как за час сделать недельную работу
Как за час сделать недельную работуКак за час сделать недельную работу
Как за час сделать недельную работуcorehard_by
 
Сергей Шамбир, Адаптация Promise/A+ для взаимодействия между C++ и Javascript
Сергей Шамбир, Адаптация Promise/A+ для взаимодействия между C++ и JavascriptСергей Шамбир, Адаптация Promise/A+ для взаимодействия между C++ и Javascript
Сергей Шамбир, Адаптация Promise/A+ для взаимодействия между C++ и JavascriptSergey Platonov
 

Was ist angesagt? (20)

C++ CoreHard Autumn 2018. Кодогенерация C++ кроссплатформенно. Продолжение - ...
C++ CoreHard Autumn 2018. Кодогенерация C++ кроссплатформенно. Продолжение - ...C++ CoreHard Autumn 2018. Кодогенерация C++ кроссплатформенно. Продолжение - ...
C++ CoreHard Autumn 2018. Кодогенерация C++ кроссплатформенно. Продолжение - ...
 
200 open source проектов спустя: опыт статического анализа исходного кода
200 open source проектов спустя: опыт статического анализа исходного кода200 open source проектов спустя: опыт статического анализа исходного кода
200 open source проектов спустя: опыт статического анализа исходного кода
 
Григорий Демченко, Асинхронность и неблокирующая синхронизация
Григорий Демченко, Асинхронность и неблокирующая синхронизацияГригорий Демченко, Асинхронность и неблокирующая синхронизация
Григорий Демченко, Асинхронность и неблокирующая синхронизация
 
Некриптографическое исследование носителей православной криптографии
Некриптографическое исследование носителей  православной криптографииНекриптографическое исследование носителей  православной криптографии
Некриптографическое исследование носителей православной криптографии
 
хитрости выведения типов
хитрости выведения типовхитрости выведения типов
хитрости выведения типов
 
Максим Хижинский Lock-free maps
Максим Хижинский Lock-free mapsМаксим Хижинский Lock-free maps
Максим Хижинский Lock-free maps
 
Для чего мы делали свой акторный фреймворк и что из этого вышло?
Для чего мы делали свой акторный фреймворк и что из этого вышло?Для чего мы делали свой акторный фреймворк и что из этого вышло?
Для чего мы делали свой акторный фреймворк и что из этого вышло?
 
Александр Тарасенко, Использование python для автоматизации отладки С/C++ код...
Александр Тарасенко, Использование python для автоматизации отладки С/C++ код...Александр Тарасенко, Использование python для автоматизации отладки С/C++ код...
Александр Тарасенко, Использование python для автоматизации отладки С/C++ код...
 
SWIG — cоздание мультиязыковых интерфейсов для C/C++ библиотек
SWIG — cоздание мультиязыковых интерфейсов для C/C++ библиотекSWIG — cоздание мультиязыковых интерфейсов для C/C++ библиотек
SWIG — cоздание мультиязыковых интерфейсов для C/C++ библиотек
 
"Почему язык Lua — это интересно?", Ник Заварицкий, (Mail.ru Group)
"Почему язык Lua — это интересно?", Ник Заварицкий, (Mail.ru Group)"Почему язык Lua — это интересно?", Ник Заварицкий, (Mail.ru Group)
"Почему язык Lua — это интересно?", Ник Заварицкий, (Mail.ru Group)
 
Asynchrony and coroutines
Asynchrony and coroutinesAsynchrony and coroutines
Asynchrony and coroutines
 
Шишки, набитые за 15 лет использования акторов в C++
Шишки, набитые за 15 лет использования акторов в C++Шишки, набитые за 15 лет использования акторов в C++
Шишки, набитые за 15 лет использования акторов в C++
 
C++ exceptions
C++ exceptionsC++ exceptions
C++ exceptions
 
20130429 dynamic c_c++_program_analysis-alexey_samsonov
20130429 dynamic c_c++_program_analysis-alexey_samsonov20130429 dynamic c_c++_program_analysis-alexey_samsonov
20130429 dynamic c_c++_program_analysis-alexey_samsonov
 
JSQuest d:)
JSQuest   d:)JSQuest   d:)
JSQuest d:)
 
разработка серверов и серверных приложений лекция №3
разработка серверов и серверных приложений лекция №3разработка серверов и серверных приложений лекция №3
разработка серверов и серверных приложений лекция №3
 
Борис Сазонов, RAII потоки и CancellationToken в C++
Борис Сазонов, RAII потоки и CancellationToken в C++Борис Сазонов, RAII потоки и CancellationToken в C++
Борис Сазонов, RAII потоки и CancellationToken в C++
 
Использование юнит-тестов для повышения качества разработки
Использование юнит-тестов для повышения качества разработкиИспользование юнит-тестов для повышения качества разработки
Использование юнит-тестов для повышения качества разработки
 
Как за час сделать недельную работу
Как за час сделать недельную работуКак за час сделать недельную работу
Как за час сделать недельную работу
 
Сергей Шамбир, Адаптация Promise/A+ для взаимодействия между C++ и Javascript
Сергей Шамбир, Адаптация Promise/A+ для взаимодействия между C++ и JavascriptСергей Шамбир, Адаптация Promise/A+ для взаимодействия между C++ и Javascript
Сергей Шамбир, Адаптация Promise/A+ для взаимодействия между C++ и Javascript
 

Andere mochten auch

nosymbols - defcon russia 20
nosymbols - defcon russia 20nosymbols - defcon russia 20
nosymbols - defcon russia 20DefconRussia
 
Олег Купреев - Обзор и демонстрация нюансов и трюков из области беспроводных ...
Олег Купреев - Обзор и демонстрация нюансов и трюков из области беспроводных ...Олег Купреев - Обзор и демонстрация нюансов и трюков из области беспроводных ...
Олег Купреев - Обзор и демонстрация нюансов и трюков из области беспроводных ...DefconRussia
 
Weakpass - defcon russia 23
Weakpass - defcon russia 23Weakpass - defcon russia 23
Weakpass - defcon russia 23DefconRussia
 
Vm ware fuzzing - defcon russia 20
Vm ware fuzzing  - defcon russia 20Vm ware fuzzing  - defcon russia 20
Vm ware fuzzing - defcon russia 20DefconRussia
 
[Defcon Russia #29] Алексей Тюрин - Spring autobinding
[Defcon Russia #29] Алексей Тюрин - Spring autobinding[Defcon Russia #29] Алексей Тюрин - Spring autobinding
[Defcon Russia #29] Алексей Тюрин - Spring autobindingDefconRussia
 
[Defcon Russia #29] Александр Ермолов - Safeguarding rootkits: Intel Boot Gua...
[Defcon Russia #29] Александр Ермолов - Safeguarding rootkits: Intel Boot Gua...[Defcon Russia #29] Александр Ермолов - Safeguarding rootkits: Intel Boot Gua...
[Defcon Russia #29] Александр Ермолов - Safeguarding rootkits: Intel Boot Gua...DefconRussia
 
[Defcon Russia #29] Борис Савков - Bare-metal programming на примере Raspber...
[Defcon Russia #29] Борис Савков -  Bare-metal programming на примере Raspber...[Defcon Russia #29] Борис Савков -  Bare-metal programming на примере Raspber...
[Defcon Russia #29] Борис Савков - Bare-metal programming на примере Raspber...DefconRussia
 
[DCG 25] Александр Большев - Never Trust Your Inputs or How To Fool an ADC
[DCG 25] Александр Большев - Never Trust Your Inputs or How To Fool an ADC [DCG 25] Александр Большев - Never Trust Your Inputs or How To Fool an ADC
[DCG 25] Александр Большев - Never Trust Your Inputs or How To Fool an ADC DefconRussia
 
Георгий Зайцев - Reversing golang
Георгий Зайцев - Reversing golangГеоргий Зайцев - Reversing golang
Георгий Зайцев - Reversing golangDefconRussia
 
Andrey Belenko, Alexey Troshichev - Внутреннее устройство и безопасность iClo...
Andrey Belenko, Alexey Troshichev - Внутреннее устройство и безопасность iClo...Andrey Belenko, Alexey Troshichev - Внутреннее устройство и безопасность iClo...
Andrey Belenko, Alexey Troshichev - Внутреннее устройство и безопасность iClo...DefconRussia
 
Advanced cfg bypass on adobe flash player 18 defcon russia 23
Advanced cfg bypass on adobe flash player 18 defcon russia 23Advanced cfg bypass on adobe flash player 18 defcon russia 23
Advanced cfg bypass on adobe flash player 18 defcon russia 23DefconRussia
 
Attacks on tacacs - Алексей Тюрин
Attacks on tacacs - Алексей ТюринAttacks on tacacs - Алексей Тюрин
Attacks on tacacs - Алексей ТюринDefconRussia
 
Zn task - defcon russia 20
Zn task  - defcon russia 20Zn task  - defcon russia 20
Zn task - defcon russia 20DefconRussia
 
Cisco IOS shellcode: All-in-one
Cisco IOS shellcode: All-in-oneCisco IOS shellcode: All-in-one
Cisco IOS shellcode: All-in-oneDefconRussia
 
HTTP HOST header attacks
HTTP HOST header attacksHTTP HOST header attacks
HTTP HOST header attacksDefconRussia
 
Alexey Sintsov- SDLC - try me to implement
Alexey Sintsov- SDLC - try me to implementAlexey Sintsov- SDLC - try me to implement
Alexey Sintsov- SDLC - try me to implementDefconRussia
 
Tyurin Alexey - NTLM. Part 1. Pass-the-Hash
Tyurin Alexey - NTLM. Part 1. Pass-the-HashTyurin Alexey - NTLM. Part 1. Pass-the-Hash
Tyurin Alexey - NTLM. Part 1. Pass-the-HashDefconRussia
 
Taras Tatarinov - Применение аппаратных закладок pwnie express на примере реа...
Taras Tatarinov - Применение аппаратных закладок pwnie express на примере реа...Taras Tatarinov - Применение аппаратных закладок pwnie express на примере реа...
Taras Tatarinov - Применение аппаратных закладок pwnie express на примере реа...DefconRussia
 
Automating Post Exploitation with PowerShell
Automating Post Exploitation with PowerShellAutomating Post Exploitation with PowerShell
Automating Post Exploitation with PowerShellEnclaveSecurity
 

Andere mochten auch (19)

nosymbols - defcon russia 20
nosymbols - defcon russia 20nosymbols - defcon russia 20
nosymbols - defcon russia 20
 
Олег Купреев - Обзор и демонстрация нюансов и трюков из области беспроводных ...
Олег Купреев - Обзор и демонстрация нюансов и трюков из области беспроводных ...Олег Купреев - Обзор и демонстрация нюансов и трюков из области беспроводных ...
Олег Купреев - Обзор и демонстрация нюансов и трюков из области беспроводных ...
 
Weakpass - defcon russia 23
Weakpass - defcon russia 23Weakpass - defcon russia 23
Weakpass - defcon russia 23
 
Vm ware fuzzing - defcon russia 20
Vm ware fuzzing  - defcon russia 20Vm ware fuzzing  - defcon russia 20
Vm ware fuzzing - defcon russia 20
 
[Defcon Russia #29] Алексей Тюрин - Spring autobinding
[Defcon Russia #29] Алексей Тюрин - Spring autobinding[Defcon Russia #29] Алексей Тюрин - Spring autobinding
[Defcon Russia #29] Алексей Тюрин - Spring autobinding
 
[Defcon Russia #29] Александр Ермолов - Safeguarding rootkits: Intel Boot Gua...
[Defcon Russia #29] Александр Ермолов - Safeguarding rootkits: Intel Boot Gua...[Defcon Russia #29] Александр Ермолов - Safeguarding rootkits: Intel Boot Gua...
[Defcon Russia #29] Александр Ермолов - Safeguarding rootkits: Intel Boot Gua...
 
[Defcon Russia #29] Борис Савков - Bare-metal programming на примере Raspber...
[Defcon Russia #29] Борис Савков -  Bare-metal programming на примере Raspber...[Defcon Russia #29] Борис Савков -  Bare-metal programming на примере Raspber...
[Defcon Russia #29] Борис Савков - Bare-metal programming на примере Raspber...
 
[DCG 25] Александр Большев - Never Trust Your Inputs or How To Fool an ADC
[DCG 25] Александр Большев - Never Trust Your Inputs or How To Fool an ADC [DCG 25] Александр Большев - Never Trust Your Inputs or How To Fool an ADC
[DCG 25] Александр Большев - Never Trust Your Inputs or How To Fool an ADC
 
Георгий Зайцев - Reversing golang
Георгий Зайцев - Reversing golangГеоргий Зайцев - Reversing golang
Георгий Зайцев - Reversing golang
 
Andrey Belenko, Alexey Troshichev - Внутреннее устройство и безопасность iClo...
Andrey Belenko, Alexey Troshichev - Внутреннее устройство и безопасность iClo...Andrey Belenko, Alexey Troshichev - Внутреннее устройство и безопасность iClo...
Andrey Belenko, Alexey Troshichev - Внутреннее устройство и безопасность iClo...
 
Advanced cfg bypass on adobe flash player 18 defcon russia 23
Advanced cfg bypass on adobe flash player 18 defcon russia 23Advanced cfg bypass on adobe flash player 18 defcon russia 23
Advanced cfg bypass on adobe flash player 18 defcon russia 23
 
Attacks on tacacs - Алексей Тюрин
Attacks on tacacs - Алексей ТюринAttacks on tacacs - Алексей Тюрин
Attacks on tacacs - Алексей Тюрин
 
Zn task - defcon russia 20
Zn task  - defcon russia 20Zn task  - defcon russia 20
Zn task - defcon russia 20
 
Cisco IOS shellcode: All-in-one
Cisco IOS shellcode: All-in-oneCisco IOS shellcode: All-in-one
Cisco IOS shellcode: All-in-one
 
HTTP HOST header attacks
HTTP HOST header attacksHTTP HOST header attacks
HTTP HOST header attacks
 
Alexey Sintsov- SDLC - try me to implement
Alexey Sintsov- SDLC - try me to implementAlexey Sintsov- SDLC - try me to implement
Alexey Sintsov- SDLC - try me to implement
 
Tyurin Alexey - NTLM. Part 1. Pass-the-Hash
Tyurin Alexey - NTLM. Part 1. Pass-the-HashTyurin Alexey - NTLM. Part 1. Pass-the-Hash
Tyurin Alexey - NTLM. Part 1. Pass-the-Hash
 
Taras Tatarinov - Применение аппаратных закладок pwnie express на примере реа...
Taras Tatarinov - Применение аппаратных закладок pwnie express на примере реа...Taras Tatarinov - Применение аппаратных закладок pwnie express на примере реа...
Taras Tatarinov - Применение аппаратных закладок pwnie express на примере реа...
 
Automating Post Exploitation with PowerShell
Automating Post Exploitation with PowerShellAutomating Post Exploitation with PowerShell
Automating Post Exploitation with PowerShell
 

Ähnlich wie static - defcon russia 20

«Статический анализ: гордость и предубеждения», Алексей Кузьменко, аналитик И...
«Статический анализ: гордость и предубеждения», Алексей Кузьменко, аналитик И...«Статический анализ: гордость и предубеждения», Алексей Кузьменко, аналитик И...
«Статический анализ: гордость и предубеждения», Алексей Кузьменко, аналитик И...Mail.ru Group
 
Принципы работы статического анализатора кода PVS-Studio
Принципы работы статического анализатора кода PVS-StudioПринципы работы статического анализатора кода PVS-Studio
Принципы работы статического анализатора кода PVS-StudioAndrey Karpov
 
Современный статический анализ кода: что умеет он, чего не умели линтеры
Современный статический анализ кода: что умеет он, чего не умели линтерыСовременный статический анализ кода: что умеет он, чего не умели линтеры
Современный статический анализ кода: что умеет он, чего не умели линтерыcorehard_by
 
Эффективный C++
Эффективный C++Эффективный C++
Эффективный C++Andrey Karpov
 
Оптимизация трассирования с использованием Expression templates
Оптимизация трассирования с использованием Expression templatesОптимизация трассирования с использованием Expression templates
Оптимизация трассирования с использованием Expression templatesPlatonov Sergey
 
Оптимизация трассирования с использованием Expression templates
Оптимизация трассирования с использованием Expression templatesОптимизация трассирования с использованием Expression templates
Оптимизация трассирования с использованием Expression templatesPlatonov Sergey
 
Статический анализ Си++ кода
Статический анализ Си++ кодаСтатический анализ Си++ кода
Статический анализ Си++ кодаTatyanazaxarova
 
ADD 2011: Статический анализ Си++ кода
ADD 2011: Статический анализ Си++ кодаADD 2011: Статический анализ Си++ кода
ADD 2011: Статический анализ Си++ кодаAndrey Karpov
 
Разница в подходах анализа кода компилятором и выделенным инструментом
Разница в подходах анализа кода компилятором и выделенным инструментомРазница в подходах анализа кода компилятором и выделенным инструментом
Разница в подходах анализа кода компилятором и выделенным инструментомTatyanazaxarova
 
Alexei Sintsov - "Between error and vulerability - one step"
Alexei Sintsov - "Between error and vulerability - one step"Alexei Sintsov - "Between error and vulerability - one step"
Alexei Sintsov - "Between error and vulerability - one step"Andrew Mayorov
 
Статический анализ кода: Что? Как? Зачем?
Статический анализ кода: Что? Как? Зачем?Статический анализ кода: Что? Как? Зачем?
Статический анализ кода: Что? Как? Зачем?Andrey Karpov
 
Всё о статическом анализе кода для Java программиста
Всё о статическом анализе кода для Java программистаВсё о статическом анализе кода для Java программиста
Всё о статическом анализе кода для Java программистаAndrey Karpov
 
Руслан Гроховецкий "Как Python стал делать погоду в Яндексе"
Руслан Гроховецкий "Как Python стал делать погоду в Яндексе"Руслан Гроховецкий "Как Python стал делать погоду в Яндексе"
Руслан Гроховецкий "Как Python стал делать погоду в Яндексе"Yandex
 
Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...
Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...
Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...Platonov Sergey
 
Статический анализ исходного кода на примере WinMerge
Статический анализ исходного кода на примере WinMergeСтатический анализ исходного кода на примере WinMerge
Статический анализ исходного кода на примере WinMergeTatyanazaxarova
 
Основы и применение статического анализа кода при разработке лекция 1
Основы и применение статического анализа кода при разработке лекция 1Основы и применение статического анализа кода при разработке лекция 1
Основы и применение статического анализа кода при разработке лекция 1m2rus
 
PVS-Studio. Статический анализатор кода. Windows/Linux, C/C++/C#
PVS-Studio. Статический анализатор кода. Windows/Linux, C/C++/C#PVS-Studio. Статический анализатор кода. Windows/Linux, C/C++/C#
PVS-Studio. Статический анализатор кода. Windows/Linux, C/C++/C#Andrey Karpov
 
Поиск уязвимостей с использованием статического анализа кода
Поиск уязвимостей с использованием статического анализа кодаПоиск уязвимостей с использованием статического анализа кода
Поиск уязвимостей с использованием статического анализа кодаAndrey Karpov
 
Поиск уязвимостей с использованием статического анализа кода
Поиск уязвимостей с использованием статического анализа кодаПоиск уязвимостей с использованием статического анализа кода
Поиск уязвимостей с использованием статического анализа кодаcorehard_by
 
Tech Talks @NSU: Как приручить дракона: введение в LLVM
Tech Talks @NSU: Как приручить дракона: введение в LLVMTech Talks @NSU: Как приручить дракона: введение в LLVM
Tech Talks @NSU: Как приручить дракона: введение в LLVMTech Talks @NSU
 

Ähnlich wie static - defcon russia 20 (20)

«Статический анализ: гордость и предубеждения», Алексей Кузьменко, аналитик И...
«Статический анализ: гордость и предубеждения», Алексей Кузьменко, аналитик И...«Статический анализ: гордость и предубеждения», Алексей Кузьменко, аналитик И...
«Статический анализ: гордость и предубеждения», Алексей Кузьменко, аналитик И...
 
Принципы работы статического анализатора кода PVS-Studio
Принципы работы статического анализатора кода PVS-StudioПринципы работы статического анализатора кода PVS-Studio
Принципы работы статического анализатора кода PVS-Studio
 
Современный статический анализ кода: что умеет он, чего не умели линтеры
Современный статический анализ кода: что умеет он, чего не умели линтерыСовременный статический анализ кода: что умеет он, чего не умели линтеры
Современный статический анализ кода: что умеет он, чего не умели линтеры
 
Эффективный C++
Эффективный C++Эффективный C++
Эффективный C++
 
Оптимизация трассирования с использованием Expression templates
Оптимизация трассирования с использованием Expression templatesОптимизация трассирования с использованием Expression templates
Оптимизация трассирования с использованием Expression templates
 
Оптимизация трассирования с использованием Expression templates
Оптимизация трассирования с использованием Expression templatesОптимизация трассирования с использованием Expression templates
Оптимизация трассирования с использованием Expression templates
 
Статический анализ Си++ кода
Статический анализ Си++ кодаСтатический анализ Си++ кода
Статический анализ Си++ кода
 
ADD 2011: Статический анализ Си++ кода
ADD 2011: Статический анализ Си++ кодаADD 2011: Статический анализ Си++ кода
ADD 2011: Статический анализ Си++ кода
 
Разница в подходах анализа кода компилятором и выделенным инструментом
Разница в подходах анализа кода компилятором и выделенным инструментомРазница в подходах анализа кода компилятором и выделенным инструментом
Разница в подходах анализа кода компилятором и выделенным инструментом
 
Alexei Sintsov - "Between error and vulerability - one step"
Alexei Sintsov - "Between error and vulerability - one step"Alexei Sintsov - "Between error and vulerability - one step"
Alexei Sintsov - "Between error and vulerability - one step"
 
Статический анализ кода: Что? Как? Зачем?
Статический анализ кода: Что? Как? Зачем?Статический анализ кода: Что? Как? Зачем?
Статический анализ кода: Что? Как? Зачем?
 
Всё о статическом анализе кода для Java программиста
Всё о статическом анализе кода для Java программистаВсё о статическом анализе кода для Java программиста
Всё о статическом анализе кода для Java программиста
 
Руслан Гроховецкий "Как Python стал делать погоду в Яндексе"
Руслан Гроховецкий "Как Python стал делать погоду в Яндексе"Руслан Гроховецкий "Как Python стал делать погоду в Яндексе"
Руслан Гроховецкий "Как Python стал делать погоду в Яндексе"
 
Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...
Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...
Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...
 
Статический анализ исходного кода на примере WinMerge
Статический анализ исходного кода на примере WinMergeСтатический анализ исходного кода на примере WinMerge
Статический анализ исходного кода на примере WinMerge
 
Основы и применение статического анализа кода при разработке лекция 1
Основы и применение статического анализа кода при разработке лекция 1Основы и применение статического анализа кода при разработке лекция 1
Основы и применение статического анализа кода при разработке лекция 1
 
PVS-Studio. Статический анализатор кода. Windows/Linux, C/C++/C#
PVS-Studio. Статический анализатор кода. Windows/Linux, C/C++/C#PVS-Studio. Статический анализатор кода. Windows/Linux, C/C++/C#
PVS-Studio. Статический анализатор кода. Windows/Linux, C/C++/C#
 
Поиск уязвимостей с использованием статического анализа кода
Поиск уязвимостей с использованием статического анализа кодаПоиск уязвимостей с использованием статического анализа кода
Поиск уязвимостей с использованием статического анализа кода
 
Поиск уязвимостей с использованием статического анализа кода
Поиск уязвимостей с использованием статического анализа кодаПоиск уязвимостей с использованием статического анализа кода
Поиск уязвимостей с использованием статического анализа кода
 
Tech Talks @NSU: Как приручить дракона: введение в LLVM
Tech Talks @NSU: Как приручить дракона: введение в LLVMTech Talks @NSU: Как приручить дракона: введение в LLVM
Tech Talks @NSU: Как приручить дракона: введение в LLVM
 

Mehr von DefconRussia

Sergey Belov - Покажите нам Impact! Доказываем угрозу в сложных условиях
Sergey Belov - Покажите нам Impact! Доказываем угрозу в сложных условияхSergey Belov - Покажите нам Impact! Доказываем угрозу в сложных условиях
Sergey Belov - Покажите нам Impact! Доказываем угрозу в сложных условияхDefconRussia
 
George Lagoda - Альтернативное использование вэб сервисов SharePoint со сторо...
George Lagoda - Альтернативное использование вэб сервисов SharePoint со сторо...George Lagoda - Альтернативное использование вэб сервисов SharePoint со сторо...
George Lagoda - Альтернативное использование вэб сервисов SharePoint со сторо...DefconRussia
 
Anton Alexanenkov - Tor and Botnet C&C
Anton Alexanenkov -  Tor and Botnet C&C Anton Alexanenkov -  Tor and Botnet C&C
Anton Alexanenkov - Tor and Botnet C&C DefconRussia
 
Roman Korkikyan - Timing analysis workshop Part 2 Scary
Roman Korkikyan - Timing analysis workshop Part 2 ScaryRoman Korkikyan - Timing analysis workshop Part 2 Scary
Roman Korkikyan - Timing analysis workshop Part 2 ScaryDefconRussia
 
Roman Korkikyan - Timing analysis workshop Part 2 Practice
Roman Korkikyan - Timing analysis workshop Part 2 PracticeRoman Korkikyan - Timing analysis workshop Part 2 Practice
Roman Korkikyan - Timing analysis workshop Part 2 PracticeDefconRussia
 
Roman Korkikyan - Timing analysis workshop Part 1 Theory
Roman Korkikyan - Timing analysis workshop Part 1 TheoryRoman Korkikyan - Timing analysis workshop Part 1 Theory
Roman Korkikyan - Timing analysis workshop Part 1 TheoryDefconRussia
 
Peter Hlavaty - DBIFuzz
Peter Hlavaty - DBIFuzzPeter Hlavaty - DBIFuzz
Peter Hlavaty - DBIFuzzDefconRussia
 
Vadim Bardakov - AVR & MSP exploitation
Vadim Bardakov - AVR & MSP exploitationVadim Bardakov - AVR & MSP exploitation
Vadim Bardakov - AVR & MSP exploitationDefconRussia
 
Tomas Hlavacek - IP fragmentation attack on DNS
Tomas Hlavacek - IP fragmentation attack on DNSTomas Hlavacek - IP fragmentation attack on DNS
Tomas Hlavacek - IP fragmentation attack on DNSDefconRussia
 

Mehr von DefconRussia (9)

Sergey Belov - Покажите нам Impact! Доказываем угрозу в сложных условиях
Sergey Belov - Покажите нам Impact! Доказываем угрозу в сложных условияхSergey Belov - Покажите нам Impact! Доказываем угрозу в сложных условиях
Sergey Belov - Покажите нам Impact! Доказываем угрозу в сложных условиях
 
George Lagoda - Альтернативное использование вэб сервисов SharePoint со сторо...
George Lagoda - Альтернативное использование вэб сервисов SharePoint со сторо...George Lagoda - Альтернативное использование вэб сервисов SharePoint со сторо...
George Lagoda - Альтернативное использование вэб сервисов SharePoint со сторо...
 
Anton Alexanenkov - Tor and Botnet C&C
Anton Alexanenkov -  Tor and Botnet C&C Anton Alexanenkov -  Tor and Botnet C&C
Anton Alexanenkov - Tor and Botnet C&C
 
Roman Korkikyan - Timing analysis workshop Part 2 Scary
Roman Korkikyan - Timing analysis workshop Part 2 ScaryRoman Korkikyan - Timing analysis workshop Part 2 Scary
Roman Korkikyan - Timing analysis workshop Part 2 Scary
 
Roman Korkikyan - Timing analysis workshop Part 2 Practice
Roman Korkikyan - Timing analysis workshop Part 2 PracticeRoman Korkikyan - Timing analysis workshop Part 2 Practice
Roman Korkikyan - Timing analysis workshop Part 2 Practice
 
Roman Korkikyan - Timing analysis workshop Part 1 Theory
Roman Korkikyan - Timing analysis workshop Part 1 TheoryRoman Korkikyan - Timing analysis workshop Part 1 Theory
Roman Korkikyan - Timing analysis workshop Part 1 Theory
 
Peter Hlavaty - DBIFuzz
Peter Hlavaty - DBIFuzzPeter Hlavaty - DBIFuzz
Peter Hlavaty - DBIFuzz
 
Vadim Bardakov - AVR & MSP exploitation
Vadim Bardakov - AVR & MSP exploitationVadim Bardakov - AVR & MSP exploitation
Vadim Bardakov - AVR & MSP exploitation
 
Tomas Hlavacek - IP fragmentation attack on DNS
Tomas Hlavacek - IP fragmentation attack on DNSTomas Hlavacek - IP fragmentation attack on DNS
Tomas Hlavacek - IP fragmentation attack on DNS
 

static - defcon russia 20

  • 1. Digital Security CheckCode group Anatoly Karpenko Alexey Kuzmenko SA Боль Тлен Безысходность Кладбище Limbo of Static Code Analysis for Security http://dsec.ru/
  • 2. The most important thing whom I making as the programmer during the last years — it starting to apply static analysis of the code aggressively. John Carmack Not so hundreds serious bugs whom it were possible to prevent, how many change of mentality and my relation to reliability of a software and quality of the code НО… 2
  • 3. Статический анализ Начало  QA  Избыточность кода  Лучшие практики  Мертвый код  Баг и false positive – разные вещи  Security  Предотвращает проблемы с безопасностью  Не любой анализ потоков это безопасность  Валидация входящих параметров и санитайзеры 3
  • 6. Open Source Commercial • Splint С • Frama-С C • SonarQube C/Java/PHP • FindBugs Java • CppCheck C/C++ • PyLint Python • AdaControl Ada • JSLint JavaScript • PMD Java • SonarQube C,Java,PHP • CodeSonar C/C++,Java,bin • Parasoft C/C++,Java,.NET • KlocWork C++,C,C#,Java • Coverity C++,C,C#,Java • HP Fortify C++,C,C#,Java • IBM AppScan Java • LDRA C/C++ • MathWork Polyspace Bug Finder C,C++ • Veracode C/C++,Java,PHP,Ruby • CheckMarx Java,C/C++,Ruby,PHP 6
  • 7. • Pattern-based • Быстрое сканирование • Ищем специфичные паттерны (via regexp) • Интересует лишь факт паттерна, удобно для Security • Много false positive • Flow-based • Задумываемся о Control Flow, Data Flow, Code Property and etc • Позволяет выводить цикломатическую сложность • Межпроцедурный анализ • Логические ошибки ищутся легче – анализируем потоки • Metrics based • Статистический подход к поиску, смесь между паттернами и потоками • Compiler/build output • Упрощаем жизнь с использованием дампов компиляторов и интерпретаторов • Просто делаем надстройки, модель анализа кода уже сделана Общие концепции построения анализа 7
  • 8. Техники статического анализа ? SSA (Static Single Assignments) ? Pointer Analysis ? AST, ASG(Abstract Semantic Graph) ? CFG, DFG, CPG ? Tainted Analysis ? Type-based, domain specific ? Interval Analysis ? Symbolic Analysis В реальной жизни подходы и модели имеют определенные ограничения Приходится делать нелегкий выбор между: - Точностью - Глубиной/Полнотой - Масштабируемостью 8
  • 9. А вокруг мертвые с косами стоят….. gcc -fdump-tree-ssa=if.ssa if.c int main(){ int a; int b; printf("Enter a number you want to check.n"); scanf("%d",&a); if((a%2)==0){b = a + 1;} else{b = a - 6;} return b; } if (_4 == 0) goto <bb 3>; Else goto <bb 4>; <bb 3>: a.2_5 = a; b_6 = a.2_5 + 1; goto <bb 5>; <bb 4>: a.3_7 = a; b_8 = a.3_7 + -6; <bb 5>: # b_1 = PHI <b_6(3), b_8(4)> _9 = b_1; a ={v} {CLOBBER}; <L4>: return _9; 9
  • 10. …но реальность такова, что if (true) { … } // fixed conditional, not recommended if (x) { // original implementation if (y) { if (x && y) { // optimized implementation // свертка не всегда хорошо if (someVar === true) { // Ok – pattern-based } if (someVar !== 3) { // Ok – patter-based } if (someVar == true) { // Bad – pattern-based } if (someVar != 3) { // Bad – pattern-based } 10
  • 11. …но реальность такова, что public class Estate { // Noncompliant; array contents can be modified public static final String [] HEIRS = new String [] { "Betty", "Suzy" }; } public class Malicious { public void changeWill() { Estate.HEIRS[0] = "Biff"; if (Estate.HEIRS.length > 1) { for (int i = 1; i < Estate.HEIRS.length; i++) { Estate.HEIRS[i] = ""; } } } MITRE, CWE-582 - Array Declared Public, Final, and Static MITRE, CWE-607 - Public Static Final Field References Mutable Object 11
  • 12. НЕ ВСЕ ТО CVE, ЧТО CWE CWE – Common Weakness Enumeration CVE – Common Vulnerabilities and Exposures …но реальность такова, что 12
  • 13. + Статей ОЧЕНЬ много + Исследований множество + Проектов много - Продуктов мало - Проект не вырос до продукта - Не были доведены «до ума» - Прекратили развитие 13
  • 14. ТЛЕН После черной полосы не наступает белая….. …еще остается 49 оттенков серого 14
  • 15. Языки общего назначения и их решения  СС++ ClangLLVMGCC  Java PMDJDT  Python ast  JavaScript SpiderMonkey ParserAPI/Esprima  ….. #include "clang/AST/ASTContext.h" #include "clang/AST/Decl.h" #include "clang/AST/DeclCXX.h" #include "clang/AST/DeclObjC.h" #include "clang/AST/DeclTemplate.h" #include "clang/AST/Expr.h" #include "clang/AST/ExprObjC.h" #include "clang/AST/StmtVisitor.h" #include "clang/AST/Type.h« …………………………………………….. Решение: берем готовое Парсинг кода и его представление – отдельная и трудоемкая задача 15
  • 16. Интерфейсы чтения модели для имплементации , чтобы абстрагироваться от AST producer (e.g. parser vs AST dump file reader, etc). 16
  • 17. Бизнес “проблемно-ориентированные” языки программирования ∞ Table-driven programming ∞ Высокоуровневое манипулирование состоянием данных ∞ Мощные операторы и функции без оперирования состоянием ∞ Report-generator ∞ Генерация форм ∞ Генерация документов ∞ Одна команда – один отчет ∞ Data management ∞ Косвенное управление данными ( в нашем случае реляционных ) ∞ Мульти типовая типизация ∞ Server-side JavaScript ( XSJS ) ∞ Request processing ∞ Database ∞ HTTP Outbound ∞ Trace ∞ Job Scheduling ∞ ABAP ∞ OOP ∞ BSP ∞ WebDynPro ∞ Database ∞ System Calls ∞ SQLScript ∞ Call R Scripts ∞ Default database calls 17
  • 18. Бизнес ЯП Стат. анализ Анализ бизнес ориентированных языков - Проблемы ≠ скудное описание в публичных источниках ≠ не вся то полезно, что документация ≠ анализаторов практически нет ≠ анализаторов безопасности еще меньше  Разработчики не используют всю мощность языка  Но никогда не узнаешь, какую именно и кто…. 18
  • 19. Анализ бизнес ориентированных языков ? Все стандартно плюс свои особенности ? Списки всех возможных функций заложенных в runtime языка ? Несколько документаций для «перекрестного анализа» различных версий ? Не стоит верить внутренней документации системы – ВЕРСИИ!!! ? Очень много, нереально много ключевых слов ? Отсутствие открытых грамматик для парсеров Example: CALL METHOD oref->m1 EXPORTING para = : '1', '2', '3'. Что бы это могло значить????? 19
  • 20. Анализ бизнес ориентированных языков Вот это полный синтаксис: CALL METHOD oref->m1 EXPORTING para = '1'. CALL METHOD oref->m1 EXPORTING para = '2'. CALL METHOD oref->m1 EXPORTING para = '3'. А документация? Call m1 Как понимали Как надо [‘1’,’2’,’3’] Call m1 Call m1 Call m1 [‘1’] [‘2’] [‘3’] [EXPORTING p1 = a1 p2 = a2 ...] [IMPORTING p1 = a1 p2 = a2 ...] Такой разный Control Flow, который влечет за собой и разный Data Flow 20
  • 21. Что? Как? Почему? Нет ничего, что могло бы помочь из готового для анализа таких языков Пишем свой, на основе реализаций парсер-генераторов И анализаторов языков общего назначения Используем ANTLR Что? Как? Почему? HQL Hibernate, IDEA, Netbeans and etc используют для себя Adaptive LL(*) Генерируется Lexer, Parser and Tree walkers(Visitor and Listener Patterns) Мы получаем часть работы for free 21
  • 22. 22
  • 23. Безысходность Всё бежит по кругу…. Что бы ты ни делал, всё равно ты обречён 23
  • 24. Грамматики ANTLRv4 https://github.com/antlr/grammars-v4 grammar Expr; prog: (expr NEWLINE)* ; expr: expr ('*'|'/') expr | expr ('+'|'-') expr | INT | '(' expr ')' ; NEWLINE : [rn]+ ; INT : [0-9]+ ; ANTLR не совсем регулярные выражения, но описания правил терминалов им соответствует ! Java ! JavaScript ! SQL ! ……. ? Abap ? SQLScript ? XSJS 24
  • 25. Грамматики ANTLR пишем сами Написал рул -> Тестанул -> Нашел боевой пример -> Тестанул грамматику -> романтика Что бы ты ни делал, всё равно ты обречён бежать по кругу ∞ Списки ключевых слов – для одного языка один блок 817 слов, без операторов ∞ Списки опций операторов – не поддается исчислению и оценке ∞ Списки встроенных «мощных ЭйПиАй» ∞ Сто пятьсот оттенков типов, видов, наименований идентификаторов ∞ Методы для общих языков – не работают ∞ Сами грамматики не менее пары тройки тысяч строк – ОПЦИИ зло!! 25
  • 26. Не все то Security, что QA Дерево показывает разбор – но никак не характеризует код, безысходность…. 26
  • 27. Не все то Security, что QA Если использовать нечеткий разбор То о коде ничего сказать нельзя, кроме одного – корректен он или нет. Если использовать островные, мостовые, атрибутные грамматики То о коде можно сказать больше – типы, вычисления, трансляции, учет контекста по объявлению блока. Но всегда останутся нюансы, что ты не учел…… Это нормально 27
  • 28. Знай свой язык и потенциальные векторы – чтобы лучше проектировать грамматику для анализатора Не все то Security, что QA 28
  • 29. Не все то Security, что QA 29
  • 30. Не все то Security, что QA toExcelDownload : function(oEvent){ document.location.href = "http:://hana21:8010/eerm/eermxs/xs/db.xsjs?dfrom=" + dates.SINCE + "&dto=" + dates.TO +""; } //------- client 30
  • 31. var id = $.request.getParameter("dfrom"); var val1 = $.request.getParameter("dto"); var conn = $.db.getConnection(); var st = prepareStatement("INSERT INTO "TABLE1" values("+id+","+val1+")"); Не все то Security, что QA 31
  • 32. for Security, not for QA - Нельзя искать регулярными выражениями – нужно уметь итерироваться по модели - Нельзя строить для каждого исходника модель – это слишком дорого, нужен компромисс - Нельзя пренебрегать мелочами – от них зависит контекст, важно выделить главное 32
  • 33. for Security, not for QA Без контекста – анализ безопасности кода, просто кусок буковок синтаксических моделей А нам важна еще семантика Но опять же не везде и не во всем «Я специализируюсь на весьма специфическом виде безопасности безопасности подсознания» inception 33
  • 34. Если с другом вышел в путь…. …то умрете оба - Без качественной грамматики не будет качественного анализатора - Но все это долгий бесконечный процесс по улучшению, дизайну и разработке Не стоит жалеть времени на фундамент Но и не стоит уходить в долгий сплин итеративности Все имеет бесконечный потенциал улучшения 34
  • 36. Хороший анализатор – это движок * проверки Проверки – это долгий итеративный ресерч Движок – это долгая бесконечная разработка Главное правило реальности — не запутаться в своих иллюзиях. 36
  • 37. Какой самый живучий паразит? Я имею в виду сформировавшуюся идею, полностью осознанную, поселившуюся в голове. Она живуча и крайне заразна. Стоит идее завладеть мозгом, избавиться от неё уже практически невозможно. Идея Движок 37
  • 38. Проверки Исследовать — значит видеть то, что видели все, и думать так, как не думал никто. Альберт Сент-Дьёрди - Нужно поддерживать общий тренд - Все возможные спецификации безопасного кода - Категории уязвимостей и техники эксплуатации - Иметь то, что не имеют другие, чтобы только у вас это можно было получить 40
  • 39. For this to work, you must ensure that your security team has the right skill set—in short, you want security folks with software development chops. “Secure programming with Static Analysis” Mess with the best - die like the rest 41
  • 40. Спасибо за внимание ? ? ? ? ? ? ? ? ? ! 42 Не стоит бояться быть посмелее, малыш!