tmpa-2015: lexical analysis of dynamically formed string expressions

24
Третья международная научно- практическая конференция: Инструменты и методы анализа программ, ТМPА-2015 12–14 ноября, Санкт-Петербург Лексический анализ динамически формируемых строковых выражений Автор: Полубелова Марина Санкт-Петербургский государственный университет 12 ноября 2015г. Полубелова Марина (СПбГУ) 12 ноября 2015г. 1 / 24

Upload: iosif-itkin

Post on 17-Feb-2017

2.429 views

Category:

Science


3 download

TRANSCRIPT

Page 1: TMPA-2015: Lexical analysis of dynamically formed string expressions

Третья международная научно-практическая конференция:Инструменты и методы анализапрограмм, ТМPА-201512–14 ноября, Санкт-Петербург

Лексический анализ динамически формируемыхстроковых выражений

Автор: Полубелова Марина

Санкт-Петербургский государственный университет

12 ноября 2015г.

Полубелова Марина (СПбГУ) 12 ноября 2015г. 1 / 24

Page 2: TMPA-2015: Lexical analysis of dynamically formed string expressions

Примеры

Встроенный SQL в С#private void Go (int cond){

string columnName = cond > 3 ? "X":(cond < 0 ? "Y":"Z");string query =

"SELECT name" + columnName + " FROM table";Program.ExecuteImmediate(query);

}

Динамически генерируемый HTML в PHP-программах<?php

$name = ’your name’;echo ’<table>

<tr><th>Name</th></tr><tr><td>’.$name.’</td></tr></table>’;

?>

Полубелова Марина (СПбГУ) 12 ноября 2015г. 2 / 24

Page 3: TMPA-2015: Lexical analysis of dynamically formed string expressions

Мотивация

Использование динамически формируемых строковых выраженийУменьшает надежность

I Нет статического поиска ошибокУвеличивает уязвимость

I SQL инъекцииI Межсайтовый скриптинг

Полубелова Марина (СПбГУ) 12 ноября 2015г. 3 / 24

Page 4: TMPA-2015: Lexical analysis of dynamically formed string expressions

Статический анализ программ

Статический анализ позволяет получать знания о коде без его запускаЛексический анализСинтаксический анализСемантический анализ

Полубелова Марина (СПбГУ) 12 ноября 2015г. 4 / 24

Page 5: TMPA-2015: Lexical analysis of dynamically formed string expressions

Обзор существующих инструментов

Проверка выражения на соответствие описанию некоторойэталонной грамматики

I Java String AnalyzerI PHP String AnalyzerI Alvor

Статический анализ программы на уязвимостьI PixyI StrangerI SAFELI

Полубелова Марина (СПбГУ) 12 ноября 2015г. 5 / 24

Page 6: TMPA-2015: Lexical analysis of dynamically formed string expressions

Разработка инструментов

Возможны два подходаСоздание универсального инструментаСоздание набора генераторов и библиотек стандартных функций

I По описанию языка генерируются анализаторы (Lex, Yacc, ANTLRи т.д.)

I Для создания конечных решений можно использовать стандартныефункции

Полубелова Марина (СПбГУ) 12 ноября 2015г. 6 / 24

Page 7: TMPA-2015: Lexical analysis of dynamically formed string expressions

Проект YaccConstructor

YaccConstructor — модульный инструмент, предназначенный дляпроведения лексического и синтаксического анализаYaccConstructor — платформа для поддержки встроенных языков

В лексическом анализе не поддерживаются циклы и строковыеоперации

Полубелова Марина (СПбГУ) 12 ноября 2015г. 7 / 24

Page 8: TMPA-2015: Lexical analysis of dynamically formed string expressions

Постановка задачи

Цель: разработать автоматизированный подход созданиялексического анализатора для динамически формируемого кода

Разработать алгоритм лексического анализа выражений,формируемых с помощью строковых операций и цикловСохранить привязку лексических единиц к исходному кодуРеализовать генератор лексических анализаторов

Полубелова Марина (СПбГУ) 12 ноября 2015г. 8 / 24

Page 9: TMPA-2015: Lexical analysis of dynamically formed string expressions

Аппроксимация

private void Go (int cond){string columnName = cond > 3 ? "X":(cond < 0 ? "Y":"Z");string query =

"SELECT name" + columnName + " FROM table";Program.ExecuteImmediate(query);

}

Множество значений{ "SELECT nameX FROM table"; "SELECT nameY FROM table";"SELECT nameZ FROM table"}Результат аппроксимации

0 1"SELECT name" 32

"X"

"Y"

"Z"

" FROM table"

Полубелова Марина (СПбГУ) 12 ноября 2015г. 9 / 24

Page 10: TMPA-2015: Lexical analysis of dynamically formed string expressions

Строковые операции

string s = "SELECT nameX FROM tableY";s = s.Replace("SELECT nameX", "b");

Многие строковые операции могут быть выражены с помощьюконечных автоматовДля построения аппроксимации множества значений выраженияиспользовался алгоритм, описанный в статье Fang Yu“Automata-based symbolic string analysis for vulnerability detection”

Полубелова Марина (СПбГУ) 12 ноября 2015г. 10 / 24

Page 11: TMPA-2015: Lexical analysis of dynamically formed string expressions

Пример

M = replace(M1,M2,M3)

0 1b 5

3e

2

c4

l

6d

m

kf

0 2e

1

d kf

M1 M2

0 1n

m

0 1b 5

3n

2

c

m

4l

6n

m

mm

M3 M

Полубелова Марина (СПбГУ) 12 ноября 2015г. 11 / 24

Page 12: TMPA-2015: Lexical analysis of dynamically formed string expressions

Лексический анализ строковых выражений

На вход анализатору подается конечный автомат, полученный врезультате аппроксимации множества значений строковоговыраженияНа выходе получаем либо конечный автомат над токенами, либосписок лексических ошибок. Токен содержит в себе:

I идентификатор токенаI конечный автомат, описывающий все возможные

последовательности символов для данного токена

Задача лексического анализа: получение конечного автомата надалфавитом токенов эталонной грамматики из конечного автомата надалфавитом символов обрабатываемого языка

Полубелова Марина (СПбГУ) 12 ноября 2015г. 12 / 24

Page 13: TMPA-2015: Lexical analysis of dynamically formed string expressions

Пример

private void Go (int cond){string columnName = cond > 3 ? "X":(cond < 0 ? "Y":"Z");string query =

"SELECT name" + columnName + " FROM table";Program.ExecuteImmediate(query);

}

Результат аппроксимации

0 1"SELECT name" 32

"X"

"Y"

"Z"

" FROM table"

Результат лексического анализа

0 1SELECT 52IDENT 3FROM 4IDENT EOF

Полубелова Марина (СПбГУ) 12 ноября 2015г. 13 / 24

Page 14: TMPA-2015: Lexical analysis of dynamically formed string expressions

Пример

Результат лексического анализа

0 1SELECT 52IDENT 3FROM 4IDENT EOF

Конечный автомат первого токена IDENT

n: "SELECT name"(7,8)

a: "SELECT name"(8,9)

m: "SELECT name"(9,10)

e: "SELECT name"(10,11)

Z: "Z"(0,1)

Y: "Y"(0,1)

X: "X"(0,1)

Конечный автомат второго токена IDENTt: " FROM table"

(6,7)a: " FROM table"

(7,8)b: " FROM table"

(8,9)l: " FROM table"

(9,10)e: " FROM table"

(10,11)

Полубелова Марина (СПбГУ) 12 ноября 2015г. 14 / 24

Page 15: TMPA-2015: Lexical analysis of dynamically formed string expressions

Конечный преобразователь

Конечный преобразователь — это конечный автомат, которыйможет выводить конечное число символов для каждого входногосимволаКомпозиция конечных преобразователей — это двапоследовательно взаимодействующих конечных преобразователя:выход первого конечного преобразователя является входом длявторого конечного преобразователя

Полубелова Марина (СПбГУ) 12 ноября 2015г. 15 / 24

Page 16: TMPA-2015: Lexical analysis of dynamically formed string expressions

Генератор лексических анализаторов

Вход:

Лексическая спецификация языкаlet digit = [’0’-’9’]let whitespace = [’ ’ ’\t’ ’\r’ ’\n’]let num = [’-’]? digit+ (’.’digit+)? ([’e’ ’E’] digit+)?rule token = parse| whitespace token lb| num { NUMBER(lexeme lb) }| ’-’ { MINUS(lexeme lb) }| ’/’ { DIV(lexeme lb) }| ’+’ { PLUS(lexeme lb) }| "**" { POW(lexeme lb) }| ’*’ { MULT(lexeme lb) }

rule token = parse| whitespace { None }| num { Some(NUMBER(gr)) }| ’-’ { Some(MINUS(gr)) }| ’/’ { Some(DIV(gr)) }| ’+’ { Some(PLUS(gr)) }| "**" { Some(POW(gr)) }| ’*’ { Some(MULT(gr)) }

FsLex YaccConstructor

Описание токенов

Выход: Описание конечного преобразователя и вспомогательныефункцииПолубелова Марина (СПбГУ) 12 ноября 2015г. 16 / 24

Page 17: TMPA-2015: Lexical analysis of dynamically formed string expressions

Алгоритм лексического анализа

Этап 0Вход: конечный автомат, полученный в результате построенияаппроксимацииВыход: конечный преобразователь, построенный из входногоконечного автомата

0 1+ 2**

0 1+ : + 32* : * eof : eof* : *

Полубелова Марина (СПбГУ) 12 ноября 2015г. 17 / 24

Page 18: TMPA-2015: Lexical analysis of dynamically formed string expressions

Алгоритм лексического анализа

Этап 1Вход:

I Конечный преобразователь, полученный на Этапе 0I Конечный преобразователь, полученный из описания,

построенного генератором лексических анализаторов

Выход: конечный преобразователь и набор лексических ошибок

0 1+ : ε

4

2* : PLUS

eof : MULT

3

* : ε

* : POW

Полубелова Марина (СПбГУ) 12 ноября 2015г. 18 / 24

Page 19: TMPA-2015: Lexical analysis of dynamically formed string expressions

Алгоритм лексического анализа

Этап 2. Интерпретация конечного преобразователяВход: конечный преобразователь, полученный на Этапе 1Выход: конечный автомат над алфавитом токенов эталоннойграмматики

0 1+ : ε

4

2* : PLUS

eof : MULT

3

* : ε

* : POW

0 1PLUS 4

3POW

2MULT

POW

MULTEOF

Полубелова Марина (СПбГУ) 12 ноября 2015г. 19 / 24

Page 20: TMPA-2015: Lexical analysis of dynamically formed string expressions

Пример 1

private void Go (int number){string query =

"SELECT nameX FROM tableY WHERE x < ";while(query.Length < number){ query += "+ 1 ";}Program.ExecuteImmediate(query);

}

Результат аппроксимации

0 1"SELECT nameX FROM tableY WHERE x < "

"+ 1 "

Результат лексического анализа

0 1SELECT 92IDENT 3FROM 4IDENT 5WHERE 6IDENT 7LESSEOF

8

PLUS

10NUM

EOF

PLUS

Полубелова Марина (СПбГУ) 12 ноября 2015г. 20 / 24

Page 21: TMPA-2015: Lexical analysis of dynamically formed string expressions

Пример 2

string query = "SELECT name";for(int i = 0; i < 10; i++){ query += "X";}query += " FROM tableY";Program.ExecuteImmediate(query);

Результат лексического анализа

0 1SELECT 52IDENT 3FROM 4IDENT EOF

Конечный автомат первого токена IDENT

n: "SELECT name"(7,8)

X: "X"(0,1)

a: "SELECT name"(8,9)

m: "SELECT name"(9,10)

e: "SELECT name"(10,11)

Полубелова Марина (СПбГУ) 12 ноября 2015г. 21 / 24

Page 22: TMPA-2015: Lexical analysis of dynamically formed string expressions

Архитектура инструмента

Полубелова Марина (СПбГУ) 12 ноября 2015г. 22 / 24

Page 23: TMPA-2015: Lexical analysis of dynamically formed string expressions

Результаты

В рамках данной работы были получены следующие результатыРазработан алгоритм лексического анализа выражений,формируемых с помощью строковых операций и цикловРеализован генератор лексических анализаторов на основепредложенного алгоритма

Полубелова Марина (СПбГУ) 12 ноября 2015г. 23 / 24

Page 24: TMPA-2015: Lexical analysis of dynamically formed string expressions

Контактная информация

Полубелова Марина: [email protected]Григорьев Семён: [email protected]Исходный код YaccConstructor:https://github.com/YaccConstructor

Полубелова Марина (СПбГУ) 12 ноября 2015г. 24 / 24