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

Post on 01-Jul-2015

211 views 5 download

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

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

piotr.bucki@j-labs.pl

Podziękowania za pomoc w

przygotowaniu dla:

Aleksander Narolski

Andrzej Legucki