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.
Uwierzytelnianie i zarządzanie sesją 
w Java EE
O mnie 
•14 lat doświadczenia w systemach WEB 
•Developer, Technical Leader, Project Manager 
•Java/JEE 
•(ISC)2 CISSP 
•C...
O mnie 
Prywatnie: MTB MTB MTB… czasem szosa ☺
Co to jest? 
Uwierzytelnianie i zarządzanie sesją 
czyli 
OWASP: Broken Authentication and Session Management
OWASP 
OWASP 
== 
Open Web Application Security Project
Broken Authentication 
Authentication – uwierzytelnianie 
== 
potwierdzenie za kogo podajesz się
Session Management 
Sesja 
== 
reprezentacja użytkownika po stronie serwera 
i 
utrzymanie konwersacji
Authentication + Session Management 
Uwierzytelnianie ↔Sesja
Skala zjawiska 
No 2 w 
OWASP top10
Konsekwencje udanego ataku 
•Na mechanizm uwierzytelniania 
•Na mechanizm sesji
Skala zjawiska 
Aspect Security: 2013 global application security risk report 
Procentowy rozkład zagrożeń ze względu na o...
Skala zjawiska 
WhiteHat Security: Website Security Statistics Report May 2013 
Cross-Site Scripting 53% 
Brute Force 26% ...
Skala zjawiska 
HP 2012 Cyber Risk Report – analiza dynamiczna 
0,00% 10,00% 20,00% 30,00% 40,00% 50,00% 
Cross-site scrip...
Skala zjawiska 
HP 2012 Cyber Risk Report – analiza statyczna 
0,00% 20,00% 40,00% 60,00% 80,00% 100,00% 
Information leak...
Sposoby uwierzytelniania 
Sposoby uwierzytelnienia 
•Coś co wiesz 
•Coś co masz 
•Coś czym/kim jesteś 
Wybierz DWA ☺
Sposoby uwierzytelniania 
Sposoby uwierzytelnienia 
•Coś co wiesz 
•Coś co masz 
•Coś czym/kim jesteś
Sposoby uwierzytelniania 
Sposoby uwierzytelnienia 
•Coś co wiesz 
•Coś co masz 
• Token 
• Klucz prywatny 
• OTP, kody SM...
Sposoby uwierzytelniania 
Sposoby uwierzytelnienia 
•Coś co wiesz 
•Coś co masz 
•Coś czym/kim jesteś
Sesja – sesja http 
•Protokół http jest bez stanowy – implementacja stanu 
•Reprezentacja użytkownika po stronie sewera 
•...
Rodzaje ataków 
Rodzaje ataków na mechanizmy uwierzytelniania i sesje: 
•Brute force 
•Session sniffing 
•Replay attack 
•...
Rodzaje ataków – Brute Force 
Brute force - atak 
• losowymi wartościami 
• słownikowy 
• łączone 
Brute force 
• sesje – ...
Rodzaje ataków - Session Sniffing 
Session Sniffing 
== 
podsłuchanie transmisji 
i uzyskanie klucza sesji
Rodzaje ataków - Replay Attack 
Replay Attack – przechwycenie i ponowne przesłanie
Rodzaje ataków - Session Fixation Attack 
Session Fixation Attack 
• przesłanie URL z spreparowanym ID sesji do ofiary 
• ...
Rodzaje ataków - Session Hijacking 
Session Hijacking – kradzież identyfikatora 
•XSS 
• session sniffing 
• dostęp do urz...
Rodzaje ataków - Session Expiration 
Session Expiration 
• błedy w implementacji mechanizmu „wyloguj” 
• „Keep me logged i...
Zabezpieczenia 
Jak się zabezpieczyć – obszary warte zainteresowania 
• złożoność haseł 
• przechowywanie haseł 
•mechaniz...
Zabezpieczenia – poprawne hasła 
Poprawne hasło to takie, które: 
• jest trudno zgadnąć 
• jest łatwe do zapamiętania 
• j...
Zabezpieczenia – przechowywanie haseł w DB 
Hasła można przechowywać jako: 
• plain text (o dziwo ma to zalety ☺ ) 
•FH(ha...
Zabezpieczenia – przechowywanie haseł w DB 
…oraz ENCONDING! 
”Ŝródło”.getBytes(”UTF-8”) 
NOT EQUAL ”Ŝródło”.getBytes(”ISO...
Zabezpieczenia – odzyskiwanie hasła 
„Twój ulubiony samochód?” 
Odp: „Ford” 
czy 
Odp: „baNan15” ??? 
Zasady mechanizmów o...
Zabezpieczenia – ponowne uwierzytelnienie 
Ważne/krytyczne operacje powinny wymagać 
ponownego uwierzytelniania 
– klucz s...
Zabezpieczenia – szyfrowanie komunikacji 
Szyfrowany kanał komunikacji uniemożliwia 
• podsłuchanie 
•man-in-the-middle 
P...
Zabezpieczenia – obsługa błędów 
Obsługa błędów: 
• komunikaty maskujące prawdziwe przyczyny 
• odpowiednie logowanie do l...
Zabezpieczenia – ochrona przed brute force 
Mechanizmy utrudniające atak brute force 
• silne hasła 
• hasła jednorazowe 
...
Zabezpieczenia - Sesja 
Zarządzanie sesją 
• nic nie znacząca nazwa identyfikatora sesji zamiast 
JSESSIONID (czyżby: „Sec...
Zabezpieczenia – Sesja – pliki Cookie 
Zalecane atrybuty Cookie 
•Secure – ciasteczka dostępne tylko w połączeniach 
szyfr...
Zabezpieczenia – Sesja + Cookies 
A tak naprawdę to… 
…ZAUFAJ mechanizmom frameworków i serwera 
aplikacyjnego i UŻYWAJ ic...
Zabezpieczenia – infrastruktura 
Inteligentne firewalle i podobne urządzenia/software 
•WAF - Web Application Firewall 
• ...
Uwierzytelnianie i sesja w Java 
•Java Enterprise Edition 
•Spring Security 
•Apache Shiro
Java Enterprise Edition 
JEE – implementuje mechanizmy 
• sesji 
• uwierzytelniania -> JAAS 
Wystarczy używać
Spring Security 
•„JAAS” dla Spring 
•Mechanizm uwierzytelniania i autoryzacji dla Spring 
•Zabezpiecza przed atakami na s...
Apache Shiro 
Apache Shiro 
• uwierzytelnianie – weryfikacja tożsamości użytkowników 
• autoryzacja - kontrola dostępu 
• ...
Z doświadczenia – dobre praktyki 
• podejście całościowe 
•mechanizmy bibliotek/frameworków działają 
• warto ich użyć 
• ...
Linkowisko 
https://www.owasp.org/index.php/Broken_Authentication_and_Session_Management 
http://www.benoist.ch/SoftSec/sl...
www.j-labs.pl 
Dziękuje 
Piotr Bucki 
piotr.bucki@j-labs.pl 
Podziękowania za pomoc w 
przygotowaniu dla: 
Aleksander Naro...
Upcoming SlideShare
Loading in …5
×

JDD2014/ 4Developers 2015: Błędy uwierzytelniania i zarządzania sesją w JEE - Piotr Bucki

413 views

Published on

Celem wykładu jest pokazanie na czym polega Broken Authetication and Session Management – co to tak naprawdę oznacza. Jakie mogą być tego konsekwencje i czy to występuje obecnie w JEE.
Wykład jest przeznaczony dla osób tworzących aplikacje korzystając z WEBowych frameworków Java.
Broken Authetication and Session Management jest od wielu lat klasyfikowany przez OWASP (Open Web Application Security Project) jako jedna z groźniejszych podatność aplikacji WEBowych.

Published in: Technology
  • Be the first to comment

  • Be the first to like this

JDD2014/ 4Developers 2015: Błędy uwierzytelniania i zarządzania sesją w JEE - Piotr Bucki

  1. 1. Uwierzytelnianie i zarządzanie sesją w Java EE
  2. 2. O mnie •14 lat doświadczenia w systemach WEB •Developer, Technical Leader, Project Manager •Java/JEE •(ISC)2 CISSP •CTO w J-LABS
  3. 3. O mnie Prywatnie: MTB MTB MTB… czasem szosa ☺
  4. 4. Co to jest? Uwierzytelnianie i zarządzanie sesją czyli OWASP: Broken Authentication and Session Management
  5. 5. OWASP OWASP == Open Web Application Security Project
  6. 6. Broken Authentication Authentication – uwierzytelnianie == potwierdzenie za kogo podajesz się
  7. 7. Session Management Sesja == reprezentacja użytkownika po stronie serwera i utrzymanie konwersacji
  8. 8. Authentication + Session Management Uwierzytelnianie ↔Sesja
  9. 9. Skala zjawiska No 2 w OWASP top10
  10. 10. Konsekwencje udanego ataku •Na mechanizm uwierzytelniania •Na mechanizm sesji
  11. 11. Skala zjawiska Aspect Security: 2013 global application security risk report Procentowy rozkład zagrożeń ze względu na obszar bezpieczeństwa 0,00% 5,00% 10,00% 15,00% 20,00% 25,00% Identification and Authentication Input Validation and Encoding Sensitive Data Protection Session Management Access Control/Authorization Platform Security Error Handling Logging and Intrusion Detection Cross Site Request Forgery (CSRF) Code Quality Database Security System Availability - DOS Protection Accessing External Services 23,10% 17,00% 11,80% 11,80% 9,20% 5,30% 5,10% 4,40% 3,60% 2,80% 2,40% 2,20% 1,20% Rozkład zagrożeń ze względu na obszar bezpieczeństwa. Według: 2-0Aspect security: 2013 global application security risk report (str. 7)
  12. 12. Skala zjawiska WhiteHat Security: Website Security Statistics Report May 2013 Cross-Site Scripting 53% Brute Force 26% Cross-Site Request Forgery 26% Insufficient Transport Layer Protection 22% Session Fixation 14% URL Redirector Abuse 13% Insufficient Authorization 11% Prawdopodobieństwo wystąpienia przynajmniej jednej poważnej podatności na stronie ze względu na rodzaj ataku. Źródło: WhiteHat Security: Website Security Statistics Report May 2013 (str. 15).
  13. 13. Skala zjawiska HP 2012 Cyber Risk Report – analiza dynamiczna 0,00% 10,00% 20,00% 30,00% 40,00% 50,00% Cross-site scripting Insufficient transport layer protection Security misconfiguration Broken authentication and session management Injection flaws Top 5 podatności wykrytych przy pomocy analizy dynamicznej w 2012 roku przez HP Fortify on Demand. Według: HP 2012 Cyber Risk Report (str. 9) 45,00% 26,00% 25,00% 13,00% 9,00%
  14. 14. Skala zjawiska HP 2012 Cyber Risk Report – analiza statyczna 0,00% 20,00% 40,00% 60,00% 80,00% 100,00% Information leakage and improper error handling Insecure cryptographic storage Injection flaws Insecure direct object reference Broken authentication and session management Top 5 podatności wykrytych przy pomocy analizy statycznej w 2012 roku przez HP Fortify on Demand. Według: HP 2012 Cyber Risk Report (str. 10) 92,00% 88,00% 86,00% 75,00% 61,00%
  15. 15. Sposoby uwierzytelniania Sposoby uwierzytelnienia •Coś co wiesz •Coś co masz •Coś czym/kim jesteś Wybierz DWA ☺
  16. 16. Sposoby uwierzytelniania Sposoby uwierzytelnienia •Coś co wiesz •Coś co masz •Coś czym/kim jesteś
  17. 17. Sposoby uwierzytelniania Sposoby uwierzytelnienia •Coś co wiesz •Coś co masz • Token • Klucz prywatny • OTP, kody SMS, zdrapki itd. •Coś czym/kim jesteś
  18. 18. Sposoby uwierzytelniania Sposoby uwierzytelnienia •Coś co wiesz •Coś co masz •Coś czym/kim jesteś
  19. 19. Sesja – sesja http •Protokół http jest bez stanowy – implementacja stanu •Reprezentacja użytkownika po stronie sewera •Identyfikator: • Unikalny • Przekazywany jako Cookie, URL rewriting i inne •Java -> JSESSIONID Set-Cookie: JSESSIONID=2UvGThyi46DQuiYXlbLp4Zft; expires=Sun, 17-Nov-2013 12:13:13 GMT; path=/; domain=bank.pl;
  20. 20. Rodzaje ataków Rodzaje ataków na mechanizmy uwierzytelniania i sesje: •Brute force •Session sniffing •Replay attack •Session Fixation Attack •Session Hijacking •Session Expiration
  21. 21. Rodzaje ataków – Brute Force Brute force - atak • losowymi wartościami • słownikowy • łączone Brute force • sesje – słabe klucze • login/hasło – słabe hasła • klucze – słaba kryptografia •mechanizmy powiązane np. mechanizm odzyskiwania hasła
  22. 22. Rodzaje ataków - Session Sniffing Session Sniffing == podsłuchanie transmisji i uzyskanie klucza sesji
  23. 23. Rodzaje ataków - Replay Attack Replay Attack – przechwycenie i ponowne przesłanie
  24. 24. Rodzaje ataków - Session Fixation Attack Session Fixation Attack • przesłanie URL z spreparowanym ID sesji do ofiary • ofiara przesyła ID sesji do serwera • serwer uznaje to za dobra sesje • ofiara loguje się • klucz sesji jest nadal ten sam • atakujący ma klucz sesji ☺
  25. 25. Rodzaje ataków - Session Hijacking Session Hijacking – kradzież identyfikatora •XSS • session sniffing • dostęp do urządzenia • itd.
  26. 26. Rodzaje ataków - Session Expiration Session Expiration • błedy w implementacji mechanizmu „wyloguj” • „Keep me logged in” – sesja nie wygasa nigdy • „Alt F4” – nie wylogowuje
  27. 27. Zabezpieczenia Jak się zabezpieczyć – obszary warte zainteresowania • złożoność haseł • przechowywanie haseł •mechanizmy odzyskiwania hasła • ponowne uwierzytelnianie dla krytycznych operacji • szyfrowana komunikacja • odpowiednie komunikaty błędów • zabezpieczenia przed brute force • poprawna implementacja sesji • obsługa Cookie • zabezpieczenia infrastrukturalne
  28. 28. Zabezpieczenia – poprawne hasła Poprawne hasło to takie, które: • jest trudno zgadnąć • jest łatwe do zapamiętania • jest zmieniane odpowiednio często Czyli teoretycznie powinno mieć: • znaki z: A..Za..z0..9!@#$%^&*()_-=+<>?/ • szereg reguł • długości • występowanie znaków (ilościowe, jakościowe) • częstotliwość zmian co daje: Xa1Du2.W albo Kraków2012.123!02 na przemian z Zima2012.123!01
  29. 29. Zabezpieczenia – przechowywanie haseł w DB Hasła można przechowywać jako: • plain text (o dziwo ma to zalety ☺ ) •FH(hasła) •FH(login + hasło) •FH(hasło + sekret) •FH(hasło + sól) • inne kombinacje powyższych •OWASP zaleca: sól + FH(sól + hasło)
  30. 30. Zabezpieczenia – przechowywanie haseł w DB …oraz ENCONDING! ”Ŝródło”.getBytes(”UTF-8”) NOT EQUAL ”Ŝródło”.getBytes(”ISO-8859-1”) …a… ”Ŝródło”.getBytes() jaki da wynik?
  31. 31. Zabezpieczenia – odzyskiwanie hasła „Twój ulubiony samochód?” Odp: „Ford” czy Odp: „baNan15” ??? Zasady mechanizmów odzyskiwania haseł • stosowanie innego kanału komunikacji (SMS, e-mail) • blokowanie konta • kody odblokowujące ważne czasowo i jednorazowe
  32. 32. Zabezpieczenia – ponowne uwierzytelnienie Ważne/krytyczne operacje powinny wymagać ponownego uwierzytelniania – klucz sesji może być skompromitowany np. CSRF, session sniffing
  33. 33. Zabezpieczenia – szyfrowanie komunikacji Szyfrowany kanał komunikacji uniemożliwia • podsłuchanie •man-in-the-middle Poprawne korzystanie z HTTPS!!!
  34. 34. Zabezpieczenia – obsługa błędów Obsługa błędów: • komunikaty maskujące prawdziwe przyczyny • odpowiednie logowanie do logu łatwość diagnostyki vs. łatwość zapisu logów
  35. 35. Zabezpieczenia – ochrona przed brute force Mechanizmy utrudniające atak brute force • silne hasła • hasła jednorazowe •wprowadzenie opóźnienia w odpowiedzi • blokowanie czasowe IP przy kilku nie udanych próbach • blokowanie kont przy kilku nie udanych próbach logowania • stosowanie nie typowych nazw kont • ograniczanie dostępu po IP
  36. 36. Zabezpieczenia - Sesja Zarządzanie sesją • nic nie znacząca nazwa identyfikatora sesji zamiast JSESSIONID (czyżby: „Security through obscurity”) • długi identyfikator – znacząco utrudnia brute force • losowy identyfikator - znacząco utrudnia brute force • identyfikator nie przenosi żadnych informacji • akceptacja tylko znanych identyfikatorów • zmiana identyfikatora przy zmienie poziomu dostępu • timeout na sesji • stosowanie szyfrowanych połączeń np. https • nie mieszanie połączeń szyfrowanych i nie szyfrowanych
  37. 37. Zabezpieczenia – Sesja – pliki Cookie Zalecane atrybuty Cookie •Secure – ciasteczka dostępne tylko w połączeniach szyfrowanych •HttpOnly – uniemożliwia odczytanie przez „document.cookie” •Domain – ciastka wysyłane są tylko do wskazanej domeny •Path – ciastka dla konkretnych ścieżek • non-persistent cookies
  38. 38. Zabezpieczenia – Sesja + Cookies A tak naprawdę to… …ZAUFAJ mechanizmom frameworków i serwera aplikacyjnego i UŻYWAJ ich… …weryfikacja podstawa zaufania… …sprawdź czy nie ma podatności bezpieczeństwa – Google ☺
  39. 39. Zabezpieczenia – infrastruktura Inteligentne firewalle i podobne urządzenia/software •WAF - Web Application Firewall • IPS - Intrusion Prevention System • IDS – Intrusion Detection System • itd.
  40. 40. Uwierzytelnianie i sesja w Java •Java Enterprise Edition •Spring Security •Apache Shiro
  41. 41. Java Enterprise Edition JEE – implementuje mechanizmy • sesji • uwierzytelniania -> JAAS Wystarczy używać
  42. 42. Spring Security •„JAAS” dla Spring •Mechanizm uwierzytelniania i autoryzacji dla Spring •Zabezpiecza przed atakami na sesje •Integracja z Servlet API
  43. 43. Apache Shiro Apache Shiro • uwierzytelnianie – weryfikacja tożsamości użytkowników • autoryzacja - kontrola dostępu • kryptografia - ochrona i ukrywanie wrażliwych danych • zarządzanie sesją •… i dodatkowe biblioteki/mechanizmy
  44. 44. Z doświadczenia – dobre praktyki • podejście całościowe •mechanizmy bibliotek/frameworków działają • warto ich użyć • nie warto robić swoich „lepszych” •weryfikacja podatności używanego software • code review •weryfikacja na serwerze • odpowiednie logowanie błędów i pracy aplikacji • jest więcej możliwych podatności • infrastruktura też jest ważna
  45. 45. Linkowisko https://www.owasp.org/index.php/Broken_Authentication_and_Session_Management http://www.benoist.ch/SoftSec/slides/brokenAuthentication/slidesBrokenAuthentication- 2x2.pdf http://www.jug.ch/events/slides/120510_Sichere_Software- Entwicklung_fuer_Java%20Entwickler.pdf https://www.owasp.org/index.php/SecureFlag https://www.owasp.org/images/8/89/OWASP_Top_10_2007_for_JEE.pdf http://projects.webappsec.org/f/WASC-TC-v2_0.pdf http://news.netcraft.com/archives/2003/01/01/security_advisory_2001011_predictable_sess ion_ids.html https://www.owasp.org/index.php/Insufficient_Session-ID_Length https://www.owasp.org/index.php/Category:OWASP_Enterprise_Security_API http://docs.spring.io/spring-security/site/docs/3.2.0.CI-SNAPSHOT/reference/htmlsingle/ http://shiro.apache.org/documentation.html
  46. 46. www.j-labs.pl Dziękuje Piotr Bucki piotr.bucki@j-labs.pl Podziękowania za pomoc w przygotowaniu dla: Aleksander Narolski Andrzej Legucki

×