Автоматическая генерация патчей для уязвимого...
-
Upload
positive-hack-days -
Category
Technology
-
view
91 -
download
5
Transcript of Автоматическая генерация патчей для уязвимого...
![Page 1: Автоматическая генерация патчей для уязвимого исходного кода](https://reader038.fdocument.pub/reader038/viewer/2022102903/55b35040bb61eb4e148b4665/html5/thumbnails/1.jpg)
![Page 2: Автоматическая генерация патчей для уязвимого исходного кода](https://reader038.fdocument.pub/reader038/viewer/2022102903/55b35040bb61eb4e148b4665/html5/thumbnails/2.jpg)
Автоматическая генерация патчей для уязвимого исходного кода
Владимир КочетковApplication Inspector/Compiling Applications
Analysis/Team LeadPositive Technologies
Positive Hack Days V
![Page 3: Автоматическая генерация патчей для уязвимого исходного кода](https://reader038.fdocument.pub/reader038/viewer/2022102903/55b35040bb61eb4e148b4665/html5/thumbnails/3.jpg)
Disclaimer
![Page 4: Автоматическая генерация патчей для уязвимого исходного кода](https://reader038.fdocument.pub/reader038/viewer/2022102903/55b35040bb61eb4e148b4665/html5/thumbnails/4.jpg)
Кто мы?
![Page 5: Автоматическая генерация патчей для уязвимого исходного кода](https://reader038.fdocument.pub/reader038/viewer/2022102903/55b35040bb61eb4e148b4665/html5/thumbnails/5.jpg)
Разработчики PT Application Inspector!
![Page 6: Автоматическая генерация патчей для уязвимого исходного кода](https://reader038.fdocument.pub/reader038/viewer/2022102903/55b35040bb61eb4e148b4665/html5/thumbnails/6.jpg)
Application Inspector― Жесткий dogfooding
― Анализ на пределе возможностей ?AST
― Генерация векторов атак
― Концепция «большой красной кнопки»
― Собственная разработка
![Page 7: Автоматическая генерация патчей для уязвимого исходного кода](https://reader038.fdocument.pub/reader038/viewer/2022102903/55b35040bb61eb4e148b4665/html5/thumbnails/7.jpg)
Application Inspector― Интеграция с PT Application Firewall (aka
«виртуальные патчи»)
Но хочется большего…
![Page 8: Автоматическая генерация патчей для уязвимого исходного кода](https://reader038.fdocument.pub/reader038/viewer/2022102903/55b35040bb61eb4e148b4665/html5/thumbnails/8.jpg)
Чего мы хотим?
![Page 9: Автоматическая генерация патчей для уязвимого исходного кода](https://reader038.fdocument.pub/reader038/viewer/2022102903/55b35040bb61eb4e148b4665/html5/thumbnails/9.jpg)
Генерировать патчи для уязвимого кода!!
![Page 10: Автоматическая генерация патчей для уязвимого исходного кода](https://reader038.fdocument.pub/reader038/viewer/2022102903/55b35040bb61eb4e148b4665/html5/thumbnails/10.jpg)
Как поймать уязвимость?― Знать «как не должно быть»: необходимые и
достаточные формальные признаки уязвимости
― Знать «как есть»: доказать наличие этих признаков в анализируемом коде
― Построить по множеству выявленных признаков вектор атаки
![Page 11: Автоматическая генерация патчей для уязвимого исходного кода](https://reader038.fdocument.pub/reader038/viewer/2022102903/55b35040bb61eb4e148b4665/html5/thumbnails/11.jpg)
Формальные признаки инъекции― Потенциально уязвимая операция PVO(text):
операция прямой или косвенной интерпретации текста text на формальном языке
― text = transform(argument), где argument – элемент множества аргументов точки входа EP, а transform – функция промежуточных преобразований
― Существует и достижимо хотя бы одно множество таких значений элементов EP, при которых происходит изменение структуры синтаксического дерева значения text, достигающего PVO
![Page 12: Автоматическая генерация патчей для уязвимого исходного кода](https://reader038.fdocument.pub/reader038/viewer/2022102903/55b35040bb61eb4e148b4665/html5/thumbnails/12.jpg)
Формализуемость уязвимостей к атакам
Строго формализуемые Слабо формализуемые
Injections Access Control
Buffer Overflow Session Management
Heap Overflow CSRFInteger Overflow Concurrency
Memory Management Domain(Logical)
… …
![Page 13: Автоматическая генерация патчей для уязвимого исходного кода](https://reader038.fdocument.pub/reader038/viewer/2022102903/55b35040bb61eb4e148b4665/html5/thumbnails/13.jpg)
Что у нас есть?
![Page 14: Автоматическая генерация патчей для уязвимого исходного кода](https://reader038.fdocument.pub/reader038/viewer/2022102903/55b35040bb61eb4e148b4665/html5/thumbnails/14.jpg)
Symbolic Execution Context Graph!
![Page 15: Автоматическая генерация патчей для уязвимого исходного кода](https://reader038.fdocument.pub/reader038/viewer/2022102903/55b35040bb61eb4e148b4665/html5/thumbnails/15.jpg)
DisclaimerТолько обзор. Подробности будут представлены на
SIBECRYPT’15Новосибирск, 7-12сентября 2015
![Page 16: Автоматическая генерация патчей для уязвимого исходного кода](https://reader038.fdocument.pub/reader038/viewer/2022102903/55b35040bb61eb4e148b4665/html5/thumbnails/16.jpg)
Symbolic Execution Context GraphSECG – граф, изоморфный CFG и содержащий в каждом узле информацию о контексте символьного выполнения
Контекст символьного выполнения – условие достижимости текущей точки выполнения + множества условных состояний всех объектов и переменных, достижимых в текущей области видимости
![Page 17: Автоматическая генерация патчей для уязвимого исходного кода](https://reader038.fdocument.pub/reader038/viewer/2022102903/55b35040bb61eb4e148b4665/html5/thumbnails/17.jpg)
Symbolic Execution Context Graph
ε �֜ {}
![Page 18: Автоматическая генерация патчей для уязвимого исходного кода](https://reader038.fdocument.pub/reader038/viewer/2022102903/55b35040bb61eb4e148b4665/html5/thumbnails/18.jpg)
Symbolic Execution Context Graph
ε �֜ { parm' א { ε �֜ Request.Params["parm1"] } }
![Page 19: Автоматическая генерация патчей для уязвимого исходного кода](https://reader038.fdocument.pub/reader038/viewer/2022102903/55b35040bb61eb4e148b4665/html5/thumbnails/19.jpg)
Symbolic Execution Context Graph
Request.Params["cond1"] == "true" �֜ { parm' א { ε �֜ Request.Params["parm1"] } }
![Page 20: Автоматическая генерация патчей для уязвимого исходного кода](https://reader038.fdocument.pub/reader038/viewer/2022102903/55b35040bb61eb4e148b4665/html5/thumbnails/20.jpg)
Symbolic Execution Context Graph
Request.Params["cond1"] != "true" �֜ { parm' א { Request.Params["cond1"] != "true" �֜ Request.Params["parm1"] } }
![Page 21: Автоматическая генерация патчей для уязвимого исходного кода](https://reader038.fdocument.pub/reader038/viewer/2022102903/55b35040bb61eb4e148b4665/html5/thumbnails/21.jpg)
Symbolic Execution Context Graph
Request.Params["cond1"] != "true" && Request.Params["cond2"] == "true" �֜ { parm' א { Request.Params["cond1"] != "true" �֜ Request.Params["parm1"] } }
![Page 22: Автоматическая генерация патчей для уязвимого исходного кода](https://reader038.fdocument.pub/reader038/viewer/2022102903/55b35040bb61eb4e148b4665/html5/thumbnails/22.jpg)
Symbolic Execution Context Graph
Request.Params["cond1"] != "true" && Request.Params["cond2"] != "true" �֜ { parm' א { Request.Params["cond1"] != "true" �֜ Request.Params["parm1"] } }
![Page 23: Автоматическая генерация патчей для уязвимого исходного кода](https://reader038.fdocument.pub/reader038/viewer/2022102903/55b35040bb61eb4e148b4665/html5/thumbnails/23.jpg)
Symbolic Execution Context Graph
Request.Params["cond1"] != "true" �֜ { parm' א { Request.Params["cond2"] == "true" �֜ Request.Params["parm2"] || Request.Params["cond2"] != "true" �֜ "<div>Harmless value</div>" } }
![Page 24: Автоматическая генерация патчей для уязвимого исходного кода](https://reader038.fdocument.pub/reader038/viewer/2022102903/55b35040bb61eb4e148b4665/html5/thumbnails/24.jpg)
Request.Params["cond1"] != "true" �֜ { parm' א { Request.Params["cond2"] == "true" �֜ Request.Params["parm2"] || Request.Params["cond2"] != "true" �֜ "<div>Harmless value</div>" } }
Symbolic Execution Context Graph
По SECG для каждой PVO выводится…
![Page 25: Автоматическая генерация патчей для уязвимого исходного кода](https://reader038.fdocument.pub/reader038/viewer/2022102903/55b35040bb61eb4e148b4665/html5/thumbnails/25.jpg)
Формула уязвимости!
![Page 26: Автоматическая генерация патчей для уязвимого исходного кода](https://reader038.fdocument.pub/reader038/viewer/2022102903/55b35040bb61eb4e148b4665/html5/thumbnails/26.jpg)
Формула уязвимостиRequest.Params["cond1"] != "true" ⇒
Response.Write( "<a href=\"" + parm ∈ { Request.Params["cond2"] == "true" ⇒ Request.Params["parm2"] ; Request.Params["cond2"] != "true" ⇒ "<div>Harmless value</div>" } + "\">" )
![Page 27: Автоматическая генерация патчей для уязвимого исходного кода](https://reader038.fdocument.pub/reader038/viewer/2022102903/55b35040bb61eb4e148b4665/html5/thumbnails/27.jpg)
Формула уязвимостиRequest.Params["cond1"] != "true" ⇒
Response.Write( "<a href=\"" + parm ∈ { Request.Params["cond2"] == "true" ⇒ Request.Params["parm2"] } + "\">" )
![Page 28: Автоматическая генерация патчей для уязвимого исходного кода](https://reader038.fdocument.pub/reader038/viewer/2022102903/55b35040bb61eb4e148b4665/html5/thumbnails/28.jpg)
Формула уязвимостиRequest.Params["cond1"] != "true"&&Request.Params["cond2"] == "true" ⇒
Response.Write( "<a href=\"" + Request.Params["parm2"] + "\">" )
![Page 29: Автоматическая генерация патчей для уязвимого исходного кода](https://reader038.fdocument.pub/reader038/viewer/2022102903/55b35040bb61eb4e148b4665/html5/thumbnails/29.jpg)
Формула уязвимостиRequest.Params["cond1"] != "true"&&Request.Params["cond2"] == "true" ⇒
Response.Write( "<a href=\"" + Request.Params["parm2"] + "\">" )
Какое значение Request.Params["parm2"] приведет к выходу за пределы токена?
![Page 30: Автоматическая генерация патчей для уязвимого исходного кода](https://reader038.fdocument.pub/reader038/viewer/2022102903/55b35040bb61eb4e148b4665/html5/thumbnails/30.jpg)
Определяемое типом точки инъекции!
![Page 31: Автоматическая генерация патчей для уязвимого исходного кода](https://reader038.fdocument.pub/reader038/viewer/2022102903/55b35040bb61eb4e148b4665/html5/thumbnails/31.jpg)
<a href=" ">
Тип точки инъекции вычисляется синтаксической эвристикой в результате прохода по уязвимому
выражению в обе стороны от нее
Вычисление типа точки инъекции
![Page 32: Автоматическая генерация патчей для уязвимого исходного кода](https://reader038.fdocument.pub/reader038/viewer/2022102903/55b35040bb61eb4e148b4665/html5/thumbnails/32.jpg)
Формула уязвимостиRequest.Params["cond1"] != "true"&&Request.Params["cond2"] == "true" &&(Request.Params["parm2"] == "\"><script>alert(0)</script>" || Request.Params["parm2"] == "\"onmouseover=\"alert(0)") ⇒
Response.Write( "<a href=\"" + Request.Params["parm2"] + "\">" )
![Page 33: Автоматическая генерация патчей для уязвимого исходного кода](https://reader038.fdocument.pub/reader038/viewer/2022102903/55b35040bb61eb4e148b4665/html5/thumbnails/33.jpg)
Формула уязвимостиRequest.Params["cond1"] != "true"&&Request.Params["cond2"] == "true" &&(Request.Params["parm2"] == "\"><script>alert(0)</script>" || Request.Params["parm2"] == "\"onmouseover=\"alert(0)") ⇒
Response.Write( "<a href=\"" + Request.Params["parm2"] + "\">" ) В результате нахождения значений
неизвестных в условии формулы уязвимости строится…
м
м
![Page 34: Автоматическая генерация патчей для уязвимого исходного кода](https://reader038.fdocument.pub/reader038/viewer/2022102903/55b35040bb61eb4e148b4665/html5/thumbnails/34.jpg)
Контекстный вектор атаки!
![Page 35: Автоматическая генерация патчей для уязвимого исходного кода](https://reader038.fdocument.pub/reader038/viewer/2022102903/55b35040bb61eb4e148b4665/html5/thumbnails/35.jpg)
Контекстный вектор атакиУязвимое выражение:"<a href=\"" + Request.Params["parm2"] + "\">"
Тип точки инъекции:HTML: 2-quoted attribute value
Векторные переменные:Request.Params["parm2"] = "\"><script>alert(0)</script>"
Условные переменные:Request.Params["cond1"] = "__AI_akhivldp"Request.Params["cond2"] = "true"
![Page 36: Автоматическая генерация патчей для уязвимого исходного кода](https://reader038.fdocument.pub/reader038/viewer/2022102903/55b35040bb61eb4e148b4665/html5/thumbnails/36.jpg)
Чего у нас нет?
![Page 37: Автоматическая генерация патчей для уязвимого исходного кода](https://reader038.fdocument.pub/reader038/viewer/2022102903/55b35040bb61eb4e148b4665/html5/thumbnails/37.jpg)
В SECG есть все, что нам нужно!*
* и все, что пока не нужно – тоже есть
![Page 38: Автоматическая генерация патчей для уязвимого исходного кода](https://reader038.fdocument.pub/reader038/viewer/2022102903/55b35040bb61eb4e148b4665/html5/thumbnails/38.jpg)
Правильный патч
― Вносит минимум изменений
― Сохраняет семантику кода
― Решает проблему
― Не создает новых
![Page 39: Автоматическая генерация патчей для уязвимого исходного кода](https://reader038.fdocument.pub/reader038/viewer/2022102903/55b35040bb61eb4e148b4665/html5/thumbnails/39.jpg)
― Знать «как не должно быть»: необходимые и достаточные формальные признаки уязвимости
― Знать «как есть»: доказать наличие этих признаков в анализируемом коде
― Изменив код, устранить хотябы один из необходимыхпризнаков
Как сгенерировать патч?
![Page 40: Автоматическая генерация патчей для уязвимого исходного кода](https://reader038.fdocument.pub/reader038/viewer/2022102903/55b35040bb61eb4e148b4665/html5/thumbnails/40.jpg)
Устраняемые признаки инъекции― Потенциально-уязвимая операция PVO(text):
операция прямой или косвенной интерпретации текста text на формальном языке
― text = transform(argument), где argument – элемент множества аргументов точки входа EP, а transform – функция промежуточных преобразований
― Существует и достижимо хотя бы одно множество таких значений элементов EP, при которых происходит изменение структуры синтаксического дерева значения text, достигающего PVO
![Page 41: Автоматическая генерация патчей для уязвимого исходного кода](https://reader038.fdocument.pub/reader038/viewer/2022102903/55b35040bb61eb4e148b4665/html5/thumbnails/41.jpg)
Способы устранения инъекцииhttp://www.slideshare.net/kochetkov.vladimir/how-to-develop-a-secure-web-application-and-stay-in-mind-phdays-3/87
• Типизация
• Валидация
• Санитизация
![Page 42: Автоматическая генерация патчей для уязвимого исходного кода](https://reader038.fdocument.pub/reader038/viewer/2022102903/55b35040bb61eb4e148b4665/html5/thumbnails/42.jpg)
Вектор атаки vs патчВектор атаки Патч
Достаточно найти один путь от точки входа до PVO и один набор значений векторных переменных
Необходимо найти все пути от точки входа до PVO и все множество наборов значений векторных переменных
Тип точки инъекции может быть вычислен эвристикой
Тип точки инъекции должен быть вычислен строго наряду с ее семантикой
Работоспособность приложения может быть нарушена
Приложение должно оставаться работоспособным
![Page 43: Автоматическая генерация патчей для уязвимого исходного кода](https://reader038.fdocument.pub/reader038/viewer/2022102903/55b35040bb61eb4e148b4665/html5/thumbnails/43.jpg)
Строгое вычисление типа точки инъекцииШаг #1: подставляем в уязвимое выражение вместо каждого taint-источника уникальный спецсимвол:
<a href='∅'>
Шаг #2: разбираем строку модифицированным парсером островного языка, допускающем появление спецсимвола в произвольном токене.
Шаг#3: Ищем в дереве разбора узлы, содержащие спецсимвол, и по их типу определяем тип точки инъекции.
Шаг#4: По типу точки инъекции определяем ее семантику.
![Page 44: Автоматическая генерация патчей для уязвимого исходного кода](https://reader038.fdocument.pub/reader038/viewer/2022102903/55b35040bb61eb4e148b4665/html5/thumbnails/44.jpg)
Opening bracket: <
Tag name: a
Attribute definition
Attribute name: href
Assignment sign
2-quoted attr. value: Closing bracket: >
Строгое вычисление типа точки инъекции
2-quoted attribute (semantic: URL) value
![Page 45: Автоматическая генерация патчей для уязвимого исходного кода](https://reader038.fdocument.pub/reader038/viewer/2022102903/55b35040bb61eb4e148b4665/html5/thumbnails/45.jpg)
Сохранение семантики кода- Приоритет контрмер:
1) Типизация2) Санитизация3) Валидация
- Учет всех условий достижимости PVO и значений ее аргументов при типизации и санитизации
- Применение контрмеры точно в месте возникновения уязвимости
![Page 46: Автоматическая генерация патчей для уязвимого исходного кода](https://reader038.fdocument.pub/reader038/viewer/2022102903/55b35040bb61eb4e148b4665/html5/thumbnails/46.jpg)
Типизация
![Page 47: Автоматическая генерация патчей для уязвимого исходного кода](https://reader038.fdocument.pub/reader038/viewer/2022102903/55b35040bb61eb4e148b4665/html5/thumbnails/47.jpg)
Типизация
2-quoted attribute(semantic: URL) value- типизация возможна
Запись в parm опасногозначения
![Page 48: Автоматическая генерация патчей для уязвимого исходного кода](https://reader038.fdocument.pub/reader038/viewer/2022102903/55b35040bb61eb4e148b4665/html5/thumbnails/48.jpg)
Типизация
![Page 49: Автоматическая генерация патчей для уязвимого исходного кода](https://reader038.fdocument.pub/reader038/viewer/2022102903/55b35040bb61eb4e148b4665/html5/thumbnails/49.jpg)
Санитизация
![Page 50: Автоматическая генерация патчей для уязвимого исходного кода](https://reader038.fdocument.pub/reader038/viewer/2022102903/55b35040bb61eb4e148b4665/html5/thumbnails/50.jpg)
Санитизация
Text(semantic: TEXT) value- типизация невозможна,возможна санитизация
Запись в parm опасногозначения
![Page 51: Автоматическая генерация патчей для уязвимого исходного кода](https://reader038.fdocument.pub/reader038/viewer/2022102903/55b35040bb61eb4e148b4665/html5/thumbnails/51.jpg)
Санитизация
![Page 52: Автоматическая генерация патчей для уязвимого исходного кода](https://reader038.fdocument.pub/reader038/viewer/2022102903/55b35040bb61eb4e148b4665/html5/thumbnails/52.jpg)
Валидация
![Page 53: Автоматическая генерация патчей для уязвимого исходного кода](https://reader038.fdocument.pub/reader038/viewer/2022102903/55b35040bb61eb4e148b4665/html5/thumbnails/53.jpg)
Валидация
Типизация и санитизацияневозможны, возможнавалидация
![Page 54: Автоматическая генерация патчей для уязвимого исходного кода](https://reader038.fdocument.pub/reader038/viewer/2022102903/55b35040bb61eb4e148b4665/html5/thumbnails/54.jpg)
Валидация
![Page 55: Автоматическая генерация патчей для уязвимого исходного кода](https://reader038.fdocument.pub/reader038/viewer/2022102903/55b35040bb61eb4e148b4665/html5/thumbnails/55.jpg)
Патчи для прочих классов атак?√ Injections
√ Buffer Overflow
√ Heap Overflow
√ Integer Overflow
? Memory Management Attacks
? Access Control Attacks
? Session Fixation
? CSRF
x Race Conditions
x Domain(Logical) Attacks
![Page 56: Автоматическая генерация патчей для уязвимого исходного кода](https://reader038.fdocument.pub/reader038/viewer/2022102903/55b35040bb61eb4e148b4665/html5/thumbnails/56.jpg)
Когда мы хотим?
![Page 57: Автоматическая генерация патчей для уязвимого исходного кода](https://reader038.fdocument.pub/reader038/viewer/2022102903/55b35040bb61eb4e148b4665/html5/thumbnails/57.jpg)
Прямо сейчас!!!
![Page 58: Автоматическая генерация патчей для уязвимого исходного кода](https://reader038.fdocument.pub/reader038/viewer/2022102903/55b35040bb61eb4e148b4665/html5/thumbnails/58.jpg)
{DEMO}
![Page 59: Автоматическая генерация патчей для уязвимого исходного кода](https://reader038.fdocument.pub/reader038/viewer/2022102903/55b35040bb61eb4e148b4665/html5/thumbnails/59.jpg)
Вопросы?
Владимир Кочетков
[email protected]@kochetkov_v
Application Inspector/Compiling Applications Analysis/Team LeadPositive Technologies
![Page 60: Автоматическая генерация патчей для уязвимого исходного кода](https://reader038.fdocument.pub/reader038/viewer/2022102903/55b35040bb61eb4e148b4665/html5/thumbnails/60.jpg)