Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Frontend security

Frontend security

OdessaJs'2015

Nikolay Belichuk

August 22, 2015
Tweet

Other Decks in Programming

Transcript

  1. Дисклеймер Никогда не доверяйте данным, которые присылают вам пользователи. Кроме

    данных о кредитных картах в формате 4621<script> stealCookie();</script> 1261
  2. Виды XSS атак По вектору атаки • Непостоянные • Хранимые

    • Базирующийся на DOM-модели По каналам внедрения скрипта • Ошибки в браузере • Отсутствие экранирования спецсимволов HTML • Отсутствие фильтрации • Подмена кодировки в заголовке страницы По способу воздействия • Требующие действий пользователя (активные) • Автономные (пассивные) https://ru.wikipedia.org/wiki/Межсайтовый_скриптинг
  3. Непостоянный (non-persistent) XSS Непостоянный XSS – тип атаки нацеленный на

    исполнение вредоносного кода в браузере пользователя посредством влияния на параметры HTTP-запроса (в большинстве случаев в URL). Основная причина кроется в недостаточной фильтрации данных.
  4. Непостоянный XSS https://twitter.com/#!username https://twitter.com/username /* first revision */ (function(g) {

    var a = location.href.split("#!")[1]; if (a) { g.location = g.HBR = a; } })(window);
  5. Что не так с этим кодом? Непостоянная (non-persistent) XSS уязвимость

    с возможностью исполнения произвольного кода на стороне жертвы. https://twitter.com/#!javacript:alert(‘xss’);
  6. Непостоянный XSS А как насчет такого адреса? https://twitter.com/#!javacript::alert(‘xss’); /* second

    revision */ (function(g) { var a = location.href.split("#!")[1]; if (a) { g.location = a.replace(":", ""); } })(window);
  7. Непостоянный XSS https://twitter.com/#!javacript&x58;alert(‘xss’); // IE8 /* third revision */ (function(g)

    { var a = location.href.split("#!")[1]; if (a) { g.location = g.HBR = a.replace(/:/gi, ""); } })(window);
  8. Непостоянный XSS /* final revision */ (function(g) { var a

    = location.href.split("#!")[1]; if (a) { g.location.hash = ""; g.location.pathname = g.HBR = a; } })(window);
  9. Хранимые XSS Хранимый xss – тип атаки при которых скрипт

    добавляется злоумышленником в тело страницы (посредством форм ввода - текстовых полей, инпутов, contenteditable- элементов на сайте Классический пример – форумы, на которых разрешено оставлять комментарии в HTML формате без ограничений, а также сайты, которые хранят пользовательские тексты и отображают их в «сыром» виде.
  10. Logic-less темплейты Шаблон: <div class=“user-detail”> <p>Имя: {{ name }}</p> <p>Фамилия:

    {{surname}} </p> <p>Возраст: {{ age }} </p> </div> Контекст: { name: ‘Nikolay’, surname ‘Belichuk’, age: ‘0</p><script>alert(’xss’);</script><p>’ }
  11. Security Matrix Framework {}SEC-A {}SEC-B {}SEC-C {}SEC-D {}SEC-E {}SEC-F VueJS

    Fail Fail Fail Fail Fail Fail AngularJS 1.0.8 Fail Fail Fail Fail PASS Fail AngularJS 1.2.0 Fail PASS Fail Fail PASS PASS AngularJS 1.4.0 Fail PASS Fail PASS PASS PASS CanJS Fail Fail PASS Fail Fail Fail Underscore.js Fail Fail PASS Fail Fail Fail KnockoutJS Fail Fail Fail Fail Fail Fail Ember.js Fail PASS PASS Fail PASS TBD Ractive.js 0.4.0 Fail Fail Fail Fail Fail Fail Ractive.js 0.7.2 Fail Fail PASS Fail Fail Fail JsRender Fail Fail Fail Fail Fail Fail Kendo UI Fail Fail Fail Fail Fail Fail {}SEC-A - Шаблон обрабатывается без использования eval или Function? ​ {}SEC-B - Контекст исполнения изолирован или находится в песочнице? ​ {}SEC-C - B качестве шаблонов могут выступать только скриптовые елементы?​ {}SEC-D - Структура позволяет или поощряет разделения кода и содержания ​ {}SEC-E - Фреймворк имеет программу по реагированию на угрозы безопасности​ {}SEC-F - Фреймворк позволяет или поощряет использование CSP https://code.google.com/p/mustache-security/
  12. Активные и пассивные XSS <input type=text value=a onfocus=alert('xss') autofocus> <a

    href='#a' onmouseover=alert('xss') style='font-size:500px'>Click me</a> <img src="http://test.com/img.png" onmouseover="javascript:alet('xss');"> <svg onload="javascript:alert('xss')" xmlns="http://www.w3.org/2000/svg"></svg>
  13. Нужно больше примеров? HTML5, HTML4↓ CSS E4X DOM JSON SVG

    X(HT)ML UTF-7 и др. экзот. код-ки DoS Поведения и связывание данных Перехват нажатий и подмена интерфейса http://html5sec.org/
  14. Content-Security-Policy default-src ‘none’; style-src http://odessajs.org frame-src http://odessajs.org/ https://www.google.com; script-src http://odessajs.org/

    https://ssl.google-analytics.com; img-src ‘self’ https://ssl.google-analytics.com; font-src http://odessajs.org
  15. Content-Security-Policy-Report-Only default-src ‘none’; report-uri http://odessajs.org/security/violations { "csp-report": { "document-uri": "http://odessajs.org/index.html",

    "referrer": "http://evil.example.com/", "blocked-uri": "http://evil.example.com/img.png", "violated-directive": "default-src 'self'", "original-policy": "script-src 'self'", "source-file": "http://odessajs.org/script.js", "line-number": 10, "column-nuber": 11 } }
  16. Man in the middle - атака Атакующий способен читать и

    видоизменять по своей воле сообщения, которыми обмениваются корреспонденты, причём ни один из последних не может догадаться о его присутствии в канале
  17. Переходим на HTTPS HTTPS (HyperText Transfer Protocol Secure) — расширение

    протокола HTTP, поддерживающее шифрование. Данные, передаваемые по протоколу HTTPS, "упаковываются" в криптографический протокол SSL или TLS
  18. $curl –I http://example.com HTTP/1.1 301 Moved Permanently Date: Mon, 02

    Aug 2015 20:33:50 GMT Content-Type: text/html Content-Length: 177 Connection: keep-alive Location: https://example.com/ Server: Example Server
  19. $curl –I https://example.com HTTP/1.1 200 OK Date: Mon, 02 Aug

    2015 20:33:50 GMT … Strict-Transport-Security: max-age=31536000;includeSubDomains X-Content-Type-Options: nosniff X-Frame-Options: SAMEORIGIN Front-End-Https: on …
  20. О чем стоит помнить работая с Cookie • Явно указываем

    домен • Важные данные устанавливаем с флагом HttpOnly • Флаг 'Secure' в случае, если основной протокол HTTPS
  21. Adobe Flash http://www.cvedetails.com/product/6761/Adobe-Flash-Player.html?vendor_id=53 Adobe Flash — мультимедийная платформа компании Adobe,

    предназначенная для регулярного обновления самой себя (с) народная мудрость
  22. Как обезопасить себя? Используйте Content Security Policy Перейдите на HTTPS

    Не разрешайте доступ к кукам с авторизацией Выполняйте действия через POST, защищая случайным ключом (CSFR) Дважды проверяйте данные которые приходят от пользователя (на фронтеде и бекенде) По возможности откажитесь от FLASH Просканируйте свой проект на наличие XSS уязвимостей и устраните их ( https://github.com/epsylon/xsser-public )