SlideShare uma empresa Scribd logo
1 de 46
Baixar para ler offline
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 
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)
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).
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%
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%
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 korzystanie 
z 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/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
www.j-labs.pl 
Dziękuje 
Piotr Bucki 
piotr.bucki@j-labs.pl 
Podziękowania za pomoc w 
przygotowaniu dla: 
Aleksander Narolski 
Andrzej Legucki

Mais conteúdo relacionado

Mais procurados

Web Application Firewall -- potrzeba,rozwiązania, kryteria ewaluacji
Web Application Firewall -- potrzeba,rozwiązania, kryteria ewaluacjiWeb Application Firewall -- potrzeba,rozwiązania, kryteria ewaluacji
Web Application Firewall -- potrzeba,rozwiązania, kryteria ewaluacji
msobiegraj
 

Mais procurados (10)

Sql z perspektywy hakera czy twoje dane są bezpieczne ? - Sqlday 2016 Wrocław
Sql z perspektywy hakera   czy twoje dane są bezpieczne ? - Sqlday 2016 WrocławSql z perspektywy hakera   czy twoje dane są bezpieczne ? - Sqlday 2016 Wrocław
Sql z perspektywy hakera czy twoje dane są bezpieczne ? - Sqlday 2016 Wrocław
 
Krytyczne błędy konfiguracji
Krytyczne błędy konfiguracjiKrytyczne błędy konfiguracji
Krytyczne błędy konfiguracji
 
Malware vs autoryzacja transakcji
Malware vs autoryzacja transakcjiMalware vs autoryzacja transakcji
Malware vs autoryzacja transakcji
 
Owasp Top10 2010 RC1 PL
Owasp Top10 2010 RC1 PLOwasp Top10 2010 RC1 PL
Owasp Top10 2010 RC1 PL
 
Web Application Firewall -- potrzeba,rozwiązania, kryteria ewaluacji
Web Application Firewall -- potrzeba,rozwiązania, kryteria ewaluacjiWeb Application Firewall -- potrzeba,rozwiązania, kryteria ewaluacji
Web Application Firewall -- potrzeba,rozwiązania, kryteria ewaluacji
 
Java authentication and authorization service
Java authentication and authorization serviceJava authentication and authorization service
Java authentication and authorization service
 
Czy naprawdę wiesz co robi twoja przeglądarka?
Czy naprawdę wiesz co robi twoja przeglądarka?Czy naprawdę wiesz co robi twoja przeglądarka?
Czy naprawdę wiesz co robi twoja przeglądarka?
 
Praktyczne ataki na aplikacje webowe (TAPT 2015)
Praktyczne ataki na aplikacje webowe (TAPT 2015)Praktyczne ataki na aplikacje webowe (TAPT 2015)
Praktyczne ataki na aplikacje webowe (TAPT 2015)
 
Ekran system - prezentacja
Ekran system - prezentacjaEkran system - prezentacja
Ekran system - prezentacja
 
Owasp top 10 2010 final PL Beta
Owasp top 10   2010 final PL BetaOwasp top 10   2010 final PL Beta
Owasp top 10 2010 final PL Beta
 

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

CISSPDAY 2011 - 2 AM A Disaster just Began
CISSPDAY 2011 - 2 AM A Disaster just BeganCISSPDAY 2011 - 2 AM A Disaster just Began
CISSPDAY 2011 - 2 AM A Disaster just Began
Tobias Koprowski
 
Czy twoje zabezpieczenia są skuteczne? Błędy i podatności w rozwiązaniach zab...
Czy twoje zabezpieczenia są skuteczne? Błędy i podatności w rozwiązaniach zab...Czy twoje zabezpieczenia są skuteczne? Błędy i podatności w rozwiązaniach zab...
Czy twoje zabezpieczenia są skuteczne? Błędy i podatności w rozwiązaniach zab...
SecuRing
 
Atmosphere 2014: Scalable and under control - open cloud architecture conside...
Atmosphere 2014: Scalable and under control - open cloud architecture conside...Atmosphere 2014: Scalable and under control - open cloud architecture conside...
Atmosphere 2014: Scalable and under control - open cloud architecture conside...
PROIDEA
 
PHP5. Bezpieczne programowanie. Leksykon kieszonkowy
PHP5. Bezpieczne programowanie. Leksykon kieszonkowyPHP5. Bezpieczne programowanie. Leksykon kieszonkowy
PHP5. Bezpieczne programowanie. Leksykon kieszonkowy
Wydawnictwo Helion
 
“Jak ocalić swoje dane przed SQL injection?” - Krzysztof Kotowicz na KrakSpot...
“Jak ocalić swoje dane przed SQL injection?” - Krzysztof Kotowicz na KrakSpot...“Jak ocalić swoje dane przed SQL injection?” - Krzysztof Kotowicz na KrakSpot...
“Jak ocalić swoje dane przed SQL injection?” - Krzysztof Kotowicz na KrakSpot...
krakspot
 

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

4Developers 2015: 10 przykazań bezpiecznego kodowania - Wojciech Dworakowski
4Developers 2015: 10 przykazań bezpiecznego kodowania - Wojciech Dworakowski4Developers 2015: 10 przykazań bezpiecznego kodowania - Wojciech Dworakowski
4Developers 2015: 10 przykazań bezpiecznego kodowania - Wojciech Dworakowski
 
Testowanie na 101 sposobów
Testowanie na 101 sposobówTestowanie na 101 sposobów
Testowanie na 101 sposobów
 
[Confidence 2016] Red Team - najlepszy przyjaciel Blue Teamu
[Confidence 2016] Red Team - najlepszy przyjaciel Blue Teamu[Confidence 2016] Red Team - najlepszy przyjaciel Blue Teamu
[Confidence 2016] Red Team - najlepszy przyjaciel Blue Teamu
 
Jak stworzyć udany system informatyczny
Jak stworzyć udany system informatycznyJak stworzyć udany system informatyczny
Jak stworzyć udany system informatyczny
 
CISSPDAY 2011 - 2 AM A Disaster just Began
CISSPDAY 2011 - 2 AM A Disaster just BeganCISSPDAY 2011 - 2 AM A Disaster just Began
CISSPDAY 2011 - 2 AM A Disaster just Began
 
Czy twoje zabezpieczenia są skuteczne? Błędy i podatności w rozwiązaniach zab...
Czy twoje zabezpieczenia są skuteczne? Błędy i podatności w rozwiązaniach zab...Czy twoje zabezpieczenia są skuteczne? Błędy i podatności w rozwiązaniach zab...
Czy twoje zabezpieczenia są skuteczne? Błędy i podatności w rozwiązaniach zab...
 
Certyfikaty od podszewki w oparciu o PKI w windows 2008 MTS 2011
Certyfikaty od podszewki w oparciu o PKI w windows 2008 MTS 2011Certyfikaty od podszewki w oparciu o PKI w windows 2008 MTS 2011
Certyfikaty od podszewki w oparciu o PKI w windows 2008 MTS 2011
 
PLNOG19 - Sebastian Pasternacki - Wykrywanie złośliwego kodu
PLNOG19 - Sebastian Pasternacki - Wykrywanie złośliwego koduPLNOG19 - Sebastian Pasternacki - Wykrywanie złośliwego kodu
PLNOG19 - Sebastian Pasternacki - Wykrywanie złośliwego kodu
 
Bezpieczeństwo aplikacji czy musi być aż tak źle
Bezpieczeństwo aplikacji   czy musi być aż tak źleBezpieczeństwo aplikacji   czy musi być aż tak źle
Bezpieczeństwo aplikacji czy musi być aż tak źle
 
OWASP Top10 2013
OWASP Top10 2013OWASP Top10 2013
OWASP Top10 2013
 
Bezpieczne korzystanie z platformy e sklepu ma znaczenie
Bezpieczne korzystanie z platformy e sklepu ma znaczenieBezpieczne korzystanie z platformy e sklepu ma znaczenie
Bezpieczne korzystanie z platformy e sklepu ma znaczenie
 
Atmosphere 2014: Scalable and under control - open cloud architecture conside...
Atmosphere 2014: Scalable and under control - open cloud architecture conside...Atmosphere 2014: Scalable and under control - open cloud architecture conside...
Atmosphere 2014: Scalable and under control - open cloud architecture conside...
 
PHP5. Bezpieczne programowanie. Leksykon kieszonkowy
PHP5. Bezpieczne programowanie. Leksykon kieszonkowyPHP5. Bezpieczne programowanie. Leksykon kieszonkowy
PHP5. Bezpieczne programowanie. Leksykon kieszonkowy
 
Ataki po stronie klienta w publicznych punktach dostępowych
Ataki po stronie klienta w publicznych punktach dostępowychAtaki po stronie klienta w publicznych punktach dostępowych
Ataki po stronie klienta w publicznych punktach dostępowych
 
Sql Dla Administratora i Dewelopera
Sql Dla Administratora i DeweloperaSql Dla Administratora i Dewelopera
Sql Dla Administratora i Dewelopera
 
“Jak ocalić swoje dane przed SQL injection?” - Krzysztof Kotowicz na KrakSpot...
“Jak ocalić swoje dane przed SQL injection?” - Krzysztof Kotowicz na KrakSpot...“Jak ocalić swoje dane przed SQL injection?” - Krzysztof Kotowicz na KrakSpot...
“Jak ocalić swoje dane przed SQL injection?” - Krzysztof Kotowicz na KrakSpot...
 
Jak ocalić swoje dane przed SQL injection?
Jak ocalić swoje dane przed SQL injection?Jak ocalić swoje dane przed SQL injection?
Jak ocalić swoje dane przed SQL injection?
 
(Nie)bezpieczenstwo aplikacji mobilnych
(Nie)bezpieczenstwo aplikacji mobilnych(Nie)bezpieczenstwo aplikacji mobilnych
(Nie)bezpieczenstwo aplikacji mobilnych
 
Application security verification standard
Application security verification standardApplication security verification standard
Application security verification standard
 
JDD 2017: Bezpieczny wypoczynek - czyli uwierzytelnianie RESTa (Krzysztof Be...
JDD 2017:  Bezpieczny wypoczynek - czyli uwierzytelnianie RESTa (Krzysztof Be...JDD 2017:  Bezpieczny wypoczynek - czyli uwierzytelnianie RESTa (Krzysztof Be...
JDD 2017: Bezpieczny wypoczynek - czyli uwierzytelnianie RESTa (Krzysztof Be...
 

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

  • 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. O mnie Prywatnie: MTB MTB MTB… czasem szosa ☺
  • 4. Co to jest? Uwierzytelnianie i zarządzanie sesją czyli OWASP: Broken Authentication and Session Management
  • 5. OWASP OWASP == Open Web Application Security Project
  • 6. Broken Authentication Authentication – uwierzytelnianie == potwierdzenie za kogo podajesz się
  • 7. Session Management Sesja == reprezentacja użytkownika po stronie serwera i utrzymanie konwersacji
  • 8. Authentication + Session Management Uwierzytelnianie ↔Sesja
  • 9. Skala zjawiska No 2 w OWASP top10
  • 10. Konsekwencje udanego ataku •Na mechanizm uwierzytelniania •Na mechanizm sesji
  • 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%
  • 15. Sposoby uwierzytelniania Sposoby uwierzytelnienia •Coś co wiesz •Coś co masz •Coś czym/kim jesteś Wybierz DWA ☺
  • 16. Sposoby uwierzytelniania Sposoby uwierzytelnienia •Coś co wiesz •Coś co masz •Coś czym/kim jesteś
  • 17. Sposoby uwierzytelniania Sposoby uwierzytelnienia •Coś co wiesz •Coś co masz • Token • Klucz prywatny • OTP, kody SMS, zdrapki itd. •Coś czym/kim jesteś
  • 18. Sposoby uwierzytelniania Sposoby uwierzytelnienia •Coś co wiesz •Coś co masz •Coś czym/kim jesteś
  • 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
  • 23. Rodzaje ataków - Replay Attack Replay Attack – przechwycenie i ponowne przesłanie
  • 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!!!
  • 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. 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.
  • 40. Uwierzytelnianie i sesja w Java •Java Enterprise Edition •Spring Security •Apache Shiro
  • 41. Java Enterprise Edition JEE – implementuje mechanizmy • sesji • uwierzytelniania -> JAAS Wystarczy używać
  • 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
  • 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. www.j-labs.pl Dziękuje Piotr Bucki piotr.bucki@j-labs.pl Podziękowania za pomoc w przygotowaniu dla: Aleksander Narolski Andrzej Legucki