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.

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

975 views

Published on

  • Be the first to comment

  • Be the first to like this

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

  1. 1. Современная практика статического анализа безопасности кода веб-приложений Сергей Белов
  2. 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. 3. О чем разговор? Анализ кода: • Как это делают тулзы • Как это делать руками
  4. 4. От чего зависит успех? • Знание проекта • Знание языка, платформы разработки • Тонкости клиентского ПО • Знание уязвимостей
  5. 5. Помощники • IDE – grep, навигация, workflow • CheatSheet с «опасными» функциями • Гайды по безопасной разработке
  6. 6. Что ищем? • SQL Injection • Cross-Site Scripting • CRLF • OS command Injection • Data validation • … etc
  7. 7. Код на слайдах Это плохо Но как без него в нашей теме?
  8. 8. SQL Injection
  9. 9. Заэскейпил!
  10. 10. Заэскейпил!
  11. 11. Все пишут на фреиморвках!
  12. 12. Ок, пусть будет Zend Ищем подвох в трёх строчках…
  13. 13. Ок, пусть будет Zend Sql injection! 2 параметра при user values! http://habrahabr.ru/post/140145/
  14. 14. XSS
  15. 15. XSS Что только не делают • Вырезают теги через strip_tags() • Вырезает теги через MyCoolXSSRemover() • preg_match(“/script/”,…) • Что угодно, кроме корректного преобразования в сущности HTML
  16. 16. XSS Нужно: добавить ссылку в профиль Сделано: через strip_tags() Вектор атаки: <a href="http://somesite.com/" onclick="return alert(1)" >
  17. 17. XSS http://somesite.com/" onclick="return alert(1) • Матчить как URL? Верный • Остается неизменным после strip_tags()? Да • Как надо было сделать? Через htmlentities()!
  18. 18. DOM XSS анализируем js
  19. 19. DOM XSS document.write(location.href); http://google.com/1.htm#<svg/onload=alert(1)> http://habrahabr.ru/company/xakep/blog/189210/
  20. 20. CRLF injection nr или %0a%0d
  21. 21. CRLF injection Request: http://site/?p=Value Response: HTTP/1.1 200 OK status: 200 OK version: HTTP/1.1 … SomeHeader: Value
  22. 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. 23. CRLF injection http://site/?p=1%0a%0d%0a%0 d<HTML> Response: HTTP/1.1 200 OK … SomeHeader: 1nr nr <HTML>
  24. 24. OS Command injection
  25. 25. OS Command injection Грепаем все функции системных вызовов, на примере PHP: – `` – shell_exec () – exec() – system() – popen() – passthru() – proc_open()
  26. 26. OS Command injection Самый частый пример: Вектор: ya.ru;ls ping –c 4 ya.ru;ls
  27. 27. OS Command injection Разработчики фильтруют, но что-то да забывают: Редиректы <, >>, > Пайпы | Inline команды ;, $ Логические операторы $, &&, || Дополнительные параметры – https://www.golemtechnologies.com/articles/shell-injection
  28. 28. Data validation
  29. 29. Data validation Можно говорить бесконечно: – Поля профиля – Ограниченный html – Заливка файлов – …
  30. 30. Data validation 1. Заливка файлов – грепаем: – $_FILES – move_uploaded_file() 2. Проверяем валидацию
  31. 31. Data validation Типичные проблемы: – Разработчики верят content-type из HTTP – Разработчики верят content-type при проверке файла на сервере – Разработчики не проверяют расширение файла (или проверяют неверно)
  32. 32. Data validation Типичные проблемы: – Content-Type из HTTP – спуфится при отправке файла – Content-Type на сервере – подмена заголовков файла – Неверные регекэспы, обходы типа file.jpeg.php, .htaccess
  33. 33. Data validation Как безопасно залить файл? - Проверка заголовков файла, присвоение расширения по типу заголовка - Отдельный сервер, без интерпретаторов в веб, только HEAD/GET - Отдельный домен! (googleusercontent.com и т.п.)
  34. 34. Data validation Проблема регулярных выражений Матчим функции: – preg_*() – ereg*() Проверить получится только при хорошем знании регулярных выражений + обход проверки массивом
  35. 35. Data validation Методы: 1) Строгое сравнение 2) Принимать по шаблону 3) Отсекать заранее «плохие» данные 4) Приведение в безопасный вид
  36. 36. Ссылки • 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
  37. 37. Спасибо за внимание! Вопросы? Digital Security в Москве: (495) 223-07-86 Digital Security в Санкт-Петербурге: (812) 703-15-47 twitter.com/sergeybelove sbelov@dsec.ru

×