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
•CTO w J-LABS
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
Rozkład zagrożeń ze względu na obszar bezpieczeństwa. Według: 2-0Aspect security: 2013 global application security risk report (str. 7)
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
0,00% 5,00% 10,00% 15,00% 20,00% 25,00%
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%
Procentowy rozkład zagrożeń ze względu na obszar bezpieczeństwa
Aspect Security: 2013 global application security risk report
Skala zjawiska
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).
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%
Skala zjawiska
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)
HP 2012 Cyber Risk Report – analiza dynamiczna
Cross-site scripting
Insufficient transport layer protection
Security misconfiguration
Broken authentication and session management
Injection flaws
0,00% 10,00% 20,00% 30,00% 40,00% 50,00%
45,00%
26,00%
25,00%
13,00%
9,00%
Skala zjawiska
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)
HP 2012 Cyber Risk Report – analiza statyczna
Information leakage and improper error handling
Insecure cryptographic storage
Injection flaws
Insecure direct object reference
Broken authentication and session management
0,00% 20,00% 40,00% 60,00% 80,00% 100,00%
92,00%
88,00%
86,00%
75,00%
61,00%
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 SMS, zdrapki itd.
•Coś czym/kim jesteś
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
• 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;
Rodzaje ataków
Rodzaje ataków na mechanizmy uwierzytelniania i sesje:
•Brute force
•Session sniffing
•Replay attack
•Session Fixation Attack
•Session Hijacking
•Session Expiration
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
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
•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 ☺
Rodzaje ataków - Session Hijacking
Session Hijacking – kradzież identyfikatora
•XSS
•session sniffing
•dostęp do urządzenia
• itd.
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
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
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
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)
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?
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
Zabezpieczenia – ponowne uwierzytelnienie
Ważne/krytyczne operacje powinny wymagać ponownego uwierzytelniania
– klucz sesji może być skompromitowany
np. CSRF, session sniffing
Zabezpieczenia – szyfrowanie komunikacji
Szyfrowany kanał komunikacji uniemożliwia
•podsłuchanie
•man-in-the-middle
Poprawne korzystaniez HTTPS!!!
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
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
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
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
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 ☺
Zabezpieczenia – infrastruktura
Inteligentne firewalle i podobne urządzenia/software
•WAF - Web Application Firewall
• IPS - Intrusion Prevention System
• IDS – Intrusion Detection System
• itd.
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 sesje
• Integracja z Servlet API
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
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
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/SecureFlaghttps://www.owasp.org/images/8/89/OWASP_Top_10_2007_for_JEE.pdfhttp://projects.webappsec.org/f/WASC-TC-v2_0.pdfhttp://news.netcraft.com/archives/2003/01/01/security_advisory_2001011_predictable_sess
ion_ids.htmlhttps://www.owasp.org/index.php/Insufficient_Session-ID_Lengthhttps://www.owasp.org/index.php/Category:OWASP_Enterprise_Security_APIhttp://docs.spring.io/spring-security/site/docs/3.2.0.CI-SNAPSHOT/reference/htmlsingle/http://shiro.apache.org/documentation.html
www.j-labs.pl
Dziękuje
Piotr Bucki
Podziękowania za pomoc w
przygotowaniu dla:
Aleksander Narolski
Andrzej Legucki
Top Related