Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

TMPA-2015: Lexical analysis of dynamically formed string expressions

2,876 views

Published on

Lexical analysis of dynamically formed string expressions
Marina Polubelova, Semyon Grigorev, Saint Petersburg State University, Saint Petersburg

12 - 14 November 2015
Tools and Methods of Program Analysis in St. Petersburg

Published in: Science
  • Be the first to comment

  • Be the first to like this

TMPA-2015: Lexical analysis of dynamically formed string expressions

  1. 1. Третья международная научно- практическая конференция: Инструменты и методы анализа программ, ТМPА-2015 12–14 ноября, Санкт-Петербург Лексический анализ динамически формируемых строковых выражений Автор: Полубелова Марина Санкт-Петербургский государственный университет 12 ноября 2015г. Полубелова Марина (СПбГУ) 12 ноября 2015г. 1 / 24
  2. 2. Примеры Встроенный 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
  3. 3. Мотивация Использование динамически формируемых строковых выражений Уменьшает надежность Нет статического поиска ошибок Увеличивает уязвимость SQL инъекции Межсайтовый скриптинг Полубелова Марина (СПбГУ) 12 ноября 2015г. 3 / 24
  4. 4. Статический анализ программ Статический анализ позволяет получать знания о коде без его запуска Лексический анализ Синтаксический анализ Семантический анализ Полубелова Марина (СПбГУ) 12 ноября 2015г. 4 / 24
  5. 5. Обзор существующих инструментов Проверка выражения на соответствие описанию некоторой эталонной грамматики Java String Analyzer PHP String Analyzer Alvor Статический анализ программы на уязвимость Pixy Stranger SAFELI Полубелова Марина (СПбГУ) 12 ноября 2015г. 5 / 24
  6. 6. Разработка инструментов Возможны два подхода Создание универсального инструмента Создание набора генераторов и библиотек стандартных функций По описанию языка генерируются анализаторы (Lex, Yacc, ANTLR и т.д.) Для создания конечных решений можно использовать стандартные функции Полубелова Марина (СПбГУ) 12 ноября 2015г. 6 / 24
  7. 7. Проект YaccConstructor YaccConstructor — модульный инструмент, предназначенный для проведения лексического и синтаксического анализа YaccConstructor — платформа для поддержки встроенных языков В лексическом анализе не поддерживаются циклы и строковые операции Полубелова Марина (СПбГУ) 12 ноября 2015г. 7 / 24
  8. 8. Постановка задачи Цель: разработать автоматизированный подход создания лексического анализатора для динамически формируемого кода Разработать алгоритм лексического анализа выражений, формируемых с помощью строковых операций и циклов Сохранить привязку лексических единиц к исходному коду Реализовать генератор лексических анализаторов Полубелова Марина (СПбГУ) 12 ноября 2015г. 8 / 24
  9. 9. Аппроксимация 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
  10. 10. Строковые операции 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
  11. 11. Пример M = replace(M1, M2, M3) 0 1 b 5 3 e 2 c 4 l 6 d m kf 0 2 e 1 d kf M1 M2 0 1 n m 0 1 b 5 3 n 2 c m 4l 6 n m m m M3 M Полубелова Марина (СПбГУ) 12 ноября 2015г. 11 / 24
  12. 12. Лексический анализ строковых выражений На вход анализатору подается конечный автомат, полученный в результате аппроксимации множества значений строкового выражения На выходе получаем либо конечный автомат над токенами, либо список лексических ошибок. Токен содержит в себе: идентификатор токена конечный автомат, описывающий все возможные последовательности символов для данного токена Задача лексического анализа: получение конечного автомата над алфавитом токенов эталонной грамматики из конечного автомата над алфавитом символов обрабатываемого языка Полубелова Марина (СПбГУ) 12 ноября 2015г. 12 / 24
  13. 13. Пример 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 1 SELECT 52 IDENT 3 FROM 4 IDENT EOF Полубелова Марина (СПбГУ) 12 ноября 2015г. 13 / 24
  14. 14. Пример Результат лексического анализа 0 1 SELECT 52 IDENT 3 FROM 4 IDENT 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) Конечный автомат второго токена IDENT t: " 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
  15. 15. Конечный преобразователь Конечный преобразователь — это конечный автомат, который может выводить конечное число символов для каждого входного символа Композиция конечных преобразователей — это два последовательно взаимодействующих конечных преобразователя: выход первого конечного преобразователя является входом для второго конечного преобразователя Полубелова Марина (СПбГУ) 12 ноября 2015г. 15 / 24
  16. 16. Генератор лексических анализаторов Вход: Лексическая спецификация языка 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
  17. 17. Алгоритм лексического анализа Этап 0 Вход: конечный автомат, полученный в результате построения аппроксимации Выход: конечный преобразователь, построенный из входного конечного автомата 0 1 + 2 * * 0 1 + : + 32 * : * eof : eof * : * Полубелова Марина (СПбГУ) 12 ноября 2015г. 17 / 24
  18. 18. Алгоритм лексического анализа Этап 1 Вход: Конечный преобразователь, полученный на Этапе 0 Конечный преобразователь, полученный из описания, построенного генератором лексических анализаторов Выход: конечный преобразователь и набор лексических ошибок 0 1 + : ε 4 2 * : PLUS eof : MULT 3 * : ε * : POW Полубелова Марина (СПбГУ) 12 ноября 2015г. 18 / 24
  19. 19. Алгоритм лексического анализа Этап 2. Интерпретация конечного преобразователя Вход: конечный преобразователь, полученный на Этапе 1 Выход: конечный автомат над алфавитом токенов эталонной грамматики 0 1 + : ε 4 2 * : PLUS eof : MULT 3 * : ε * : POW 0 1 PLUS 4 3POW 2MULT POW MULT EOF Полубелова Марина (СПбГУ) 12 ноября 2015г. 19 / 24
  20. 20. Пример 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 1 SELECT 92 IDENT 3 FROM 4 IDENT 5 WHERE 6 IDENT 7 LESS EOF 8 PLUS 10 NUM EOF PLUS Полубелова Марина (СПбГУ) 12 ноября 2015г. 20 / 24
  21. 21. Пример 2 string query = "SELECT name"; for(int i = 0; i < 10; i++){ query += "X";} query += " FROM tableY"; Program.ExecuteImmediate(query); Результат лексического анализа 0 1 SELECT 52 IDENT 3 FROM 4 IDENT 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
  22. 22. Архитектура инструмента Полубелова Марина (СПбГУ) 12 ноября 2015г. 22 / 24
  23. 23. Результаты В рамках данной работы были получены следующие результаты Разработан алгоритм лексического анализа выражений, формируемых с помощью строковых операций и циклов Реализован генератор лексических анализаторов на основе предложенного алгоритма Полубелова Марина (СПбГУ) 12 ноября 2015г. 23 / 24
  24. 24. Контактная информация Полубелова Марина: polubelovam@gmail.com Григорьев Семён: Semen.Grigorev@jetbrains.com Исходный код YaccConstructor: https://github.com/YaccConstructor Полубелова Марина (СПбГУ) 12 ноября 2015г. 24 / 24

×