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.
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. 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. 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. 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%
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. 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. 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. Rodzaje ataków - Session Sniffing
Session Sniffing
==
podsłuchanie transmisji
i uzyskanie klucza sesji
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. Rodzaje ataków - Session Hijacking
Session Hijacking – kradzież identyfikatora
•XSS
• session sniffing
• dostęp do urządzenia
• itd.
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. 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. 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. 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. 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. 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. Zabezpieczenia – ponowne uwierzytelnienie
Ważne/krytyczne operacje powinny wymagać
ponownego uwierzytelniania
– klucz sesji może być skompromitowany
np. CSRF, session sniffing
33. Zabezpieczenia – szyfrowanie komunikacji
Szyfrowany kanał komunikacji uniemożliwia
• podsłuchanie
•man-in-the-middle
Poprawne korzystanie
z HTTPS!!!
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. 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. 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. 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. Zabezpieczenia – infrastruktura
Inteligentne firewalle i podobne urządzenia/software
•WAF - Web Application Firewall
• IPS - Intrusion Prevention System
• IDS – Intrusion Detection System
• itd.
42. Spring Security
•„JAAS” dla Spring
•Mechanizm uwierzytelniania i autoryzacji dla Spring
•Zabezpiecza przed atakami na sesje
•Integracja z Servlet API
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. 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