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

46
Uwierzytelnianie i zarządzanie sesją w Java EE

description

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.

Transcript of JDD2014: Błędy uwierzytelniania i zarządzania sesją w JEE - Piotr Bucki

Page 1: JDD2014: Błędy uwierzytelniania i zarządzania sesją w JEE - Piotr Bucki

Uwierzytelnianie i zarządzanie sesją

w Java EE

Page 2: JDD2014: Błędy uwierzytelniania i zarządzania sesją w JEE - Piotr Bucki

O mnie

•14 lat doświadczenia w systemach WEB

•Developer, Technical Leader, Project Manager

•Java/JEE

• (ISC)2 CISSP

•CTO w J-LABS

Page 3: JDD2014: Błędy uwierzytelniania i zarządzania sesją w JEE - Piotr Bucki

O mnie

Prywatnie: MTB MTB MTB… czasem szosa ☺

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

Co to jest?

Uwierzytelnianie i zarządzanie sesją

czyli

OWASP: Broken Authentication and Session Management

Page 5: JDD2014: Błędy uwierzytelniania i zarządzania sesją w JEE - Piotr Bucki

OWASP

OWASP

==

Open Web Application Security Project

Page 6: JDD2014: Błędy uwierzytelniania i zarządzania sesją w JEE - Piotr Bucki

Broken Authentication

Authentication – uwierzytelnianie

==

potwierdzenie za kogo podajesz się

Page 7: JDD2014: Błędy uwierzytelniania i zarządzania sesją w JEE - Piotr Bucki

Session Management

Sesja

==

reprezentacja użytkownika po stronie serwera

i

utrzymanie konwersacji

Page 8: JDD2014: Błędy uwierzytelniania i zarządzania sesją w JEE - Piotr Bucki

Authentication + Session Management

Uwierzytelnianie ↔ Sesja

Page 9: JDD2014: Błędy uwierzytelniania i zarządzania sesją w JEE - Piotr Bucki

Skala zjawiska

No 2 w

OWASP top10

Page 10: JDD2014: Błędy uwierzytelniania i zarządzania sesją w JEE - Piotr Bucki

Konsekwencje udanego ataku

•Na mechanizm uwierzytelniania

•Na mechanizm sesji

Page 11: JDD2014: Błędy uwierzytelniania i zarządzania sesją w JEE - Piotr Bucki

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

Page 12: JDD2014: Błędy uwierzytelniania i zarządzania sesją w JEE - Piotr Bucki

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%

Page 13: JDD2014: Błędy uwierzytelniania i zarządzania sesją w JEE - Piotr Bucki

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%

Page 14: JDD2014: Błędy uwierzytelniania i zarządzania sesją w JEE - Piotr Bucki

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%

Page 15: JDD2014: Błędy uwierzytelniania i zarządzania sesją w JEE - Piotr Bucki

Sposoby uwierzytelniania

Sposoby uwierzytelnienia

•Coś co wiesz

•Coś co masz

•Coś czym/kim jesteś

Wybierz DWA ☺

Page 16: JDD2014: Błędy uwierzytelniania i zarządzania sesją w JEE - Piotr Bucki

Sposoby uwierzytelniania

Sposoby uwierzytelnienia

•Coś co wiesz

•Coś co masz

•Coś czym/kim jesteś

Page 17: JDD2014: Błędy uwierzytelniania i zarządzania sesją w JEE - Piotr Bucki

Sposoby uwierzytelniania

Sposoby uwierzytelnienia

•Coś co wiesz

•Coś co masz

• Token

• Klucz prywatny

• OTP, kody SMS, zdrapki itd.

•Coś czym/kim jesteś

Page 18: JDD2014: Błędy uwierzytelniania i zarządzania sesją w JEE - Piotr Bucki

Sposoby uwierzytelniania

Sposoby uwierzytelnienia

•Coś co wiesz

•Coś co masz

•Coś czym/kim jesteś

Page 19: JDD2014: Błędy uwierzytelniania i zarządzania sesją w JEE - Piotr Bucki

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;

Page 20: JDD2014: Błędy uwierzytelniania i zarządzania sesją w JEE - Piotr Bucki

Rodzaje ataków

Rodzaje ataków na mechanizmy uwierzytelniania i sesje:

•Brute force

•Session sniffing

•Replay attack

•Session Fixation Attack

•Session Hijacking

•Session Expiration

Page 21: JDD2014: Błędy uwierzytelniania i zarządzania sesją w JEE - Piotr Bucki

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

Page 22: JDD2014: Błędy uwierzytelniania i zarządzania sesją w JEE - Piotr Bucki

Rodzaje ataków - Session Sniffing

Session Sniffing

==

podsłuchanie transmisji

i uzyskanie klucza sesji

Page 23: JDD2014: Błędy uwierzytelniania i zarządzania sesją w JEE - Piotr Bucki

Rodzaje ataków - Replay Attack

Replay Attack – przechwycenie i ponowne przesłanie

Page 24: JDD2014: Błędy uwierzytelniania i zarządzania sesją w JEE - Piotr Bucki

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 ☺

Page 25: JDD2014: Błędy uwierzytelniania i zarządzania sesją w JEE - Piotr Bucki

Rodzaje ataków - Session Hijacking

Session Hijacking – kradzież identyfikatora

•XSS

•session sniffing

•dostęp do urządzenia

• itd.

Page 26: JDD2014: Błędy uwierzytelniania i zarządzania sesją w JEE - Piotr Bucki

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

Page 27: JDD2014: Błędy uwierzytelniania i zarządzania sesją w JEE - Piotr Bucki

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

Page 28: JDD2014: Błędy uwierzytelniania i zarządzania sesją w JEE - Piotr Bucki

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

Page 29: JDD2014: Błędy uwierzytelniania i zarządzania sesją w JEE - Piotr Bucki

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)

Page 30: JDD2014: Błędy uwierzytelniania i zarządzania sesją w JEE - Piotr Bucki

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?

Page 31: JDD2014: Błędy uwierzytelniania i zarządzania sesją w JEE - Piotr Bucki

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

Page 32: JDD2014: Błędy uwierzytelniania i zarządzania sesją w JEE - Piotr Bucki

Zabezpieczenia – ponowne uwierzytelnienie

Ważne/krytyczne operacje powinny wymagać ponownego uwierzytelniania

– klucz sesji może być skompromitowany

np. CSRF, session sniffing

Page 33: JDD2014: Błędy uwierzytelniania i zarządzania sesją w JEE - Piotr Bucki

Zabezpieczenia – szyfrowanie komunikacji

Szyfrowany kanał komunikacji uniemożliwia

•podsłuchanie

•man-in-the-middle

Poprawne korzystaniez HTTPS!!!

Page 34: JDD2014: Błędy uwierzytelniania i zarządzania sesją w JEE - Piotr Bucki

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

Page 35: JDD2014: Błędy uwierzytelniania i zarządzania sesją w JEE - Piotr Bucki

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

Page 36: JDD2014: Błędy uwierzytelniania i zarządzania sesją w JEE - Piotr Bucki

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

Page 37: JDD2014: Błędy uwierzytelniania i zarządzania sesją w JEE - Piotr Bucki

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

Page 38: JDD2014: Błędy uwierzytelniania i zarządzania sesją w JEE - Piotr Bucki

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 ☺

Page 39: JDD2014: Błędy uwierzytelniania i zarządzania sesją w JEE - Piotr Bucki

Zabezpieczenia – infrastruktura

Inteligentne firewalle i podobne urządzenia/software

•WAF - Web Application Firewall

• IPS - Intrusion Prevention System

• IDS – Intrusion Detection System

• itd.

Page 40: JDD2014: Błędy uwierzytelniania i zarządzania sesją w JEE - Piotr Bucki

Uwierzytelnianie i sesja w Java

•Java Enterprise Edition

•Spring Security

•Apache Shiro

Page 41: JDD2014: Błędy uwierzytelniania i zarządzania sesją w JEE - Piotr Bucki

Java Enterprise Edition

JEE – implementuje mechanizmy

•sesji

•uwierzytelniania -> JAAS

Wystarczy używać

Page 42: JDD2014: Błędy uwierzytelniania i zarządzania sesją w JEE - Piotr Bucki

Spring Security

• „JAAS” dla Spring

•Mechanizm uwierzytelniania i autoryzacji dla Spring

•Zabezpiecza przed atakami na sesje

• Integracja z Servlet API

Page 43: JDD2014: Błędy uwierzytelniania i zarządzania sesją w JEE - Piotr Bucki

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

Page 44: JDD2014: Błędy uwierzytelniania i zarządzania sesją w JEE - Piotr Bucki

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

Page 45: JDD2014: Błędy uwierzytelniania i zarządzania sesją w JEE - Piotr Bucki

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

Page 46: JDD2014: Błędy uwierzytelniania i zarządzania sesją w JEE - Piotr Bucki

www.j-labs.pl

Dziękuje

Piotr Bucki

[email protected]

Podziękowania za pomoc w

przygotowaniu dla:

Aleksander Narolski

Andrzej Legucki