Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
SlideShare a Scribd company logo

1

Современная практика статического анализа
безопасности кода веб-приложений
Сергей Белов

2

whoami
• Senior Security Auditor in ERPSCan
• BugHunter: Google, Yandex, Badoo, Yahoo +++
• Writer: habrahabr, ”Xakep” magazine
• CTF: DEFCON 2012 CTF Final, Chaos Construction
CTF’2013
• Speaker: CodeFest 2012/2014, ZeroNights 0x03
• Trainer: Hack in Paris’2014, BlackHat’2014 USA (soon)

3

О чем разговор?
Анализ кода:
• Как это делают тулзы
• Как это делать руками

4

От чего зависит успех?
• Знание проекта
• Знание языка, платформы
разработки
• Тонкости клиентского ПО
• Знание уязвимостей

5

Помощники
• IDE – grep, навигация, workflow
• CheatSheet с «опасными»
функциями
• Гайды по безопасной разработке

6

Что ищем?
• SQL Injection
• Cross-Site Scripting
• CRLF
• OS command Injection
• Data validation
• … etc

7

Код на слайдах
Это плохо
Но как без него в
нашей теме?

8

SQL Injection

9

Заэскейпил!

10

Заэскейпил!

11

Все пишут на фреиморвках!

12

Ок, пусть будет Zend
Ищем подвох в трёх строчках…

13

Ок, пусть будет Zend
Sql injection!
2 параметра при user values!
http://habrahabr.ru/post/140145/

14

XSS

15

XSS
Что только не делают
• Вырезают теги через strip_tags()
• Вырезает теги через MyCoolXSSRemover()
• preg_match(“/script/”,…)
• Что угодно, кроме корректного преобразования в
сущности HTML

16

XSS
Нужно: добавить ссылку в профиль
Сделано: через strip_tags()
Вектор атаки:
<a href="http://somesite.com/" onclick="return alert(1)" >

17

XSS
http://somesite.com/" onclick="return alert(1)
• Матчить как URL? Верный
• Остается неизменным после strip_tags()? Да
• Как надо было сделать? Через htmlentities()!

18

DOM XSS
анализируем js

19

DOM XSS
document.write(location.href);
http://google.com/1.htm#<svg/onload=alert(1)>
http://habrahabr.ru/company/xakep/blog/189210/

20

CRLF injection
nr или %0a%0d

21

CRLF injection
Request: http://site/?p=Value
Response:
HTTP/1.1 200 OK
status: 200 OK
version: HTTP/1.1
…
SomeHeader: Value

22

CRLF injection
http://site/?p=Value%0a%0dNe
wHeader:Value
Response:
HTTP/1.1 200 OK
status: 200 OK
version: HTTP/1.1
…
SomeHeader: Value
NewHeader:Value

23

CRLF injection
http://site/?p=1%0a%0d%0a%0
d<HTML>
Response:
HTTP/1.1 200 OK
…
SomeHeader: 1nr
nr
<HTML>

24

OS Command
injection

25

OS Command injection
Грепаем все функции системных вызовов, на примере PHP:
– ``
– shell_exec ()
– exec()
– system()
– popen()
– passthru()
– proc_open()

26

OS Command injection
Самый частый пример:
Вектор: ya.ru;ls
ping –c 4 ya.ru;ls

27

OS Command injection
Разработчики фильтруют, но что-то да забывают:
Редиректы <, >>, >
Пайпы |
Inline команды ;, $
Логические операторы $, &&, ||
Дополнительные параметры –
https://www.golemtechnologies.com/articles/shell-injection

28

Data validation

29

Data validation
Можно говорить бесконечно:
– Поля профиля
– Ограниченный html
– Заливка файлов
– …

30

Data validation
1. Заливка файлов – грепаем:
– $_FILES
– move_uploaded_file()
2. Проверяем валидацию

31

Data validation
Типичные проблемы:
– Разработчики верят content-type из HTTP
– Разработчики верят content-type при проверке файла
на сервере
– Разработчики не проверяют расширение файла (или
проверяют неверно)

32

Data validation
Типичные проблемы:
– Content-Type из HTTP – спуфится при отправке файла
– Content-Type на сервере – подмена заголовков файла
– Неверные регекэспы, обходы типа file.jpeg.php,
.htaccess

33

Data validation
Как безопасно залить файл?
- Проверка заголовков файла, присвоение
расширения по типу заголовка
- Отдельный сервер, без интерпретаторов в веб,
только HEAD/GET
- Отдельный домен! (googleusercontent.com и т.п.)

34

Data validation
Проблема регулярных выражений
Матчим функции:
– preg_*()
– ereg*()
Проверить получится только при хорошем знании
регулярных выражений + обход проверки
массивом

35

Data validation
Методы:
1) Строгое сравнение
2) Принимать по шаблону
3) Отсекать заранее «плохие» данные
4) Приведение в безопасный вид

36

современная практика статического анализа безопасности кода веб приложений

37

Ссылки
• http://www.oracle.com/technetwork/java/seccodeguide-139067.html
• https://www.owasp.org/index.php/OWASP_Code_Review_Guide_Table_of_Contents
• https://www.owasp.org/index.php/Reviewing_Code_for_Data_Validation
•
https://developer.apple.com/library/mac/documentation/security/conceptual/securecodingguide/I
ntroduction.html
• https://www.owasp.org/index.php/CRV2_ManualReviewProsCons - Free tools

38

Спасибо за внимание!
Вопросы?
Digital Security в Москве: (495) 223-07-86
Digital Security в Санкт-Петербурге: (812) 703-15-47
twitter.com/sergeybelove
sbelov@dsec.ru

More Related Content

современная практика статического анализа безопасности кода веб приложений