Document Details

FearlessSasquatch

Uploaded by FearlessSasquatch

Universitatea Tehnică Gheorghe Asachi din Iași

2023

Adrian Alexandrescu

Tags

web security web application security access control session management

Summary

This document is a lecture on web security, focusing on authentication and security mechanisms like session management, JSON Web Tokens (JWT), and Single Sign-On (SSO). It provides an overview of security attacks, principles of secure web development, and potential security vulnerabilities.

Full Transcript

SECURITATE WEB CURSUL 07 SECURIZAREA ACCESULUI (2) ș.l. dr. ing. ADRIAN ALEXANDRESCU Facultatea de Automatică și Calculatoare Universitatea Tehnică “Gheorghe Asachi” din Iași 2023-2024 Cuprins I. Managementul sesiunilor II. JSON-Web Token III. Single Sign-On Adrian Alexandrescu 2023-2024 2 ...

SECURITATE WEB CURSUL 07 SECURIZAREA ACCESULUI (2) ș.l. dr. ing. ADRIAN ALEXANDRESCU Facultatea de Automatică și Calculatoare Universitatea Tehnică “Gheorghe Asachi” din Iași 2023-2024 Cuprins I. Managementul sesiunilor II. JSON-Web Token III. Single Sign-On Adrian Alexandrescu 2023-2024 2 Managementul sesiunilor 1. 2. 3. 4. I Atac de tipul session hijacking Atac de tipul session fixation Atac de tipul session keep Managementul sesiunilor pe instanțe multiple Adrian Alexandrescu 2023-2024 3 1. Atac de tipul session hijacking  Token-ul / ID-ul de sesiune poate fi transmis de la client la server:      I În adresa URL În header-ul Cookie Într-un alt header HTTP În corpul cererii Atacul de tipul session hijacking implică obținerea de către atacator a token-ului de sesiune Adrian Alexandrescu 2023-2024 4 1. Atac de tipul session hijacking I Metode prin care un atacator poate obține un token de sesiune:      Utilizarea de către server a unui token de sesiune predictibil Session sniffing Atacuri client-side (e.g., XSS, execuția de cod JavaScript malițios, troian) Atacuri de tipul man-in-the-middle Atacuri de tipul man-in-the-browser Adrian Alexandrescu 2023-2024 5 1. Atac de tipul session hijacking Adrian Alexandrescu 2023-2024 https://owasp.org/www-community/attacks/Session_hijacking_attack I 6 2. Atac de tipul session fixation      I Permite atacatorului să deturneze o sesiune utilizator validă Exploatează o aplicație web vulnerabilă prin faptul că token-ul de sesiune este generat la intrarea utilizatorului pe site, iar atunci când utilizatorul se autentifică nu se generează un token de sesiune nou Atacatorul intră pe site-ul vulnerabil și automat i se generează un token de sesiune Victima ajunge să intre pe site cu token-ul de sesiune al atacatorului și apoi se autentifică pe site Din acest moment atacatorul are acces la contul utilizatorului de pe site-ul respectiv Adrian Alexandrescu 2023-2024 7 2. Atac de tipul session fixation I Metode prin care victima ar putea ajunge să folosească token-ul de sesiune al atacatorului:      Token-ul de sesiune este trimis victimei în adresa URL Este folosit un formular cu <input type="hidden" …> care poate fi pe site-ul atacatorului sau fi trimis prin email Printr-un atac XSS – atacatorul trimite un link malițios victimei care conține o secvență de cod JavaScript care schimbă cookie-ul de sesiune În trecut, se putea seta un cookie cu ajutorul tag-ului meta <meta http-equiv='Set-Cookie' ...> Inserarea cookie-ului de sesiune în răspunsul primit de la server Adrian Alexandrescu 2023-2024 8 2. Atac de tipul session fixation Adrian Alexandrescu 2023-2024 I http://www.cs.toronto.edu/~arnold/427/15s/csc427/owasp/A2/sessionFixation/sessionFixation.html 9 3. Atac de tipul session keep    I Atacatorul obține token de sesiune și încearcă să mențină sesiunea activă pentru o perioadă mai lungă de timp Prin trimiterea periodică de cereri serverului, atacatorul face ca serverul să creadă că utilizatorul utilizează în continuare site-ul Atacatorul ar putea modifica timpul de expirare al token-ului de sesiune din Cookie, dar doar dacă serverul permite ca un client să modifice acest timp Adrian Alexandrescu 2023-2024 10 3. Atac de tipul session keep    I Nu există o modalitate eficientă de a rezolva această problemă Serverul ar putea să forțeze expirarea cookie-ului de sesiune după un anumit timp de la autentificarea utilizatorului, dar se poate ca atunci utilizatorul să facă ceva important pe site și ar ajunge să fie delogat Serverul ar putea ca, atunci când victima se autentifică ulterior, atacatorul să fie delogat automat, dar, în acest caz, serverul nu ar permite autentificarea unui utilizator de pe mai multe dispozitive Adrian Alexandrescu 2023-2024 11 4. Managementul sesiunilor pe instanțe multiple     I În momentul în care clientul s-a autentificat se generează un cookie de sesiune Doar token-ul de sesiune ar trebui stocat în cookie Informațiile referitoare la sesiunea utilizatorului ar trebui stocate la server (e.g., username) Sistemul de management al sesiunilor implicit pus la dispoziție de framework-uri stochează informațiile în memorie și/sau pe harddisk-ul serverului web Adrian Alexandrescu 2023-2024 12 4. Managementul sesiunilor pe instanțe multiple    I Apare o problemă dacă avem mai multe instanțe ale aplicației web O soluție este ca informațiile referitoare la sesiunea utilizatorului este să fie stocate într-o bază de date, care devine resursă comună pentru toate instanțele Dacă informațiile care trebuie stocate reprezintă fișiere încărcate de utilizator sau niște rezultate ale unor procesări intermediare, atunci se poate folosi un serviciu de stocare de fișiere Adrian Alexandrescu 2023-2024 13 4. Managementul sesiunilor pe instanțe multiple    I Există soluții Cloud de scalare pe orizontală cu "session affinity" prin care toate cererile cu un anumit token de sesiune se duc pe aceeași instanță În schimb, afinitatea sesiunii nu poate fi garantată (e.g, dacă instanța respectivă devine inactivă) Unde ar trebui stocate produsele favorite ale unui utilizator de site de shopping Adrian Alexandrescu 2023-2024 14 JSON-Web Token II 1. JWT 2. Structura token-ului 3. Modul de comunicare 4. JWS vs. JWE vs. JWK vs. JWA 5. Exemplu Adrian Alexandrescu 2023-2024 15 II 1. JWT     JSON Web Token (JWT) – RFC 7519 Modalitate de a reprezenta identitatea utilizatorului într-un mod sigur în interacțiunea dintre client și server Poate fi folosit pentru identifica utilizatorul fără a trimite credențialele la fiecare cerere https://jwt.io/ Adrian Alexandrescu 2023-2024 Sursa: https://blog.logrocket.com/how-to-secure-a-rest-api-using-jwt-7efd83e71432/ 16 2. Structura token-ului  Șir de caractere format din 3 secțiuni separate prin punct  header.payload.signature Adrian Alexandrescu 2023-2024 II 17 2. Structura token-ului  II Header – codat cu Base64  Tipul token-ului (jwt)  Se mai numește JOSE header (Javascript Object Signing and Encryption)  Algoritmul folosit la generarea acestuia (HS256, RS256, ES256, PS256, ...)  HS256 (HMAC with SHA-256) – cheie simetrică știută de client și de server  RS256 (RSA Signature with SHA-256) – cheie privată știută de server și cheie publică știută de client Adrian Alexandrescu 2023-2024 18 2. Structura token-ului  II Payload – codat cu Base64   Date referitoare la cerere și la utilizatorul care face cererea Perechi cheie-valoare standard (claims) https://www.iana.org/assignments/jwt/jwt.xhtml:  iss (issuer) – identifică cine a inițiat cererea  sub (subject) – subiectul cererii (ar putea să fie URI-ul utilizat)  aud (audience) – identifică destinatarul JWT  exp (expiration time) – timpul după care JWT-ul nu ar mai trebui să fie acceptat pentru procesare  iat (issued at) – timpul la care JWT-ul a fost creat  jti (JWT id) – identificator unic pentru JWT Adrian Alexandrescu 2023-2024 19 2. Structura token-ului  II Signature   Șir de caractere encodat utilizat de client și de server pentru a verifica autenticitatea payload-lui HS256(Base64(header) + “.” + Base64(payload), “cheie secreta”) Adrian Alexandrescu 2023-2024 20 Adrian Alexandrescu 2023-2024 21 https://codecurated.com/blog/introduction-to-jwt-jws-jwe-jwa-jwk 3. Modul de comunicare Adrian Alexandrescu 2023-2024 II Sursa: https://www.vaadata.com/blog/jwt-tokens-and-security-working-principles-and-use-cases/ 22 3. Modul de comunicare Adrian Alexandrescu 2023-2024 Sursa: https://dev.to/mattgahrns/what-is-a-jwt-fb5 II 23 3. Modul de comunicare   II Dacă se dorește accesarea unei resurse protejate de la server User agent-ul (clientul) trimite JWT-ul în header-ul HTTP Authorization folosind schema Bearer Authorization: Bearer token  Serverul se uită la header-ul Authorization și verifică dacă este permis accesul la resursa protejată Adrian Alexandrescu 2023-2024 24 4. JWS vs. JWE vs. JWK vs. JWA  JSON Web Signature (JWS)  JSON Web Encryption (JWE)  JSON Web Algorithm (JWA)   II Definește algoritmii de semnătură și criptare folosiți de JWS și JWE JSON Web Key (JWK)  Cheia publică a algoritmului de semnătură definit în JWA poate fi găzduit ca JWK Adrian Alexandrescu 2023-2024 https://medium.facilelogin.com/jwt-jws-and-jwe-for-not-so-dummies-b63310d201a3 25 II https://codecurated.com /blog/introduction-tojwt-jws-jwe-jwa-jwk/ Adrian Alexandrescu 2023-2024 26 4. JWS vs. JWE vs. JWK vs. JWA II JWS (JSON Web Signature)  JOSE Header-ul va conține (https://www.rfc-editor.org/rfc/rfc7515#page-10):     Cheia publică folosită pentru a semna mesajul (jku, jwk, kid, x5u, x5c, x5t, x5t#s256) Algoritmul folosit pentru a semna mesajul (alg) JWS este considerat a fi sigur chiar dacă oricine poate să vadă payload-ul Cine folosește JWS-ul poate poate fi sigur că JWS-ul nu a fost modificat și că a fost creat de cine trebuie datorită verificării prin semnătură folosind algoritmul MAC Adrian Alexandrescu 2023-2024 https://medium.facilelogin.com/jwt-jws-and-jwe-for-not-so-dummies-b63310d201a3 27 4. JWS vs. JWE vs. JWK vs. JWA II JWE (JSON Web Encryption)  Permite criptarea payload-ului astfel încât doar destinatarul poate să îl citească Adrian Alexandrescu 2023-2024 https://medium.facilelogin.com/jwt-jws-and-jwe-for-not-so-dummies-b63310d201a3 28 4. JWS vs. JWE vs. JWK vs. JWA  II JSON Web Algorithm (JWA)  Definește algoritmii de semnătură și criptare folosiți de JWS și JWE  https://www.rfc-editor.org/rfc/rfc7518 Adrian Alexandrescu 2023-2024 29 4. JWS vs. JWE vs. JWK vs. JWA   II JSON Web Key (JWK)  JSON care reprezintă o cheie criptografică  https://www.rfc-editor.org/rfc/rfc7517 JWK Set  Reprezintă un set de JWK-uri Adrian Alexandrescu 2023-2024 30 5. Exemplu  II https://github.com/hantsy/spring-webmvc-jwt-sample Adrian Alexandrescu 2023-2024 31 II https://stackoverflow.com/q uestions/60538047/jwtprivate-public-key-confusion Adrian Alexandrescu 2023-2024 32 Single Sign-On III 1. Introducere 2. SAML 3. OAuth Adrian Alexandrescu 2023-2024 33 1. Introducere  Single Sign-On (SSO)  SAML 2.0 – Security Assertion Markup Language  OAuth 2.0 – Web Authorization Protocol  OpenID Connect 1.0 (OIDC) - Identity layer on top of OAuth 2.0 Adrian Alexandrescu 2023-2024 III 34 2. SAML     III Security Assertion Markup Language Soluție care permite ca identity provider-ul și service provider-ul să existe separat Centralizează managementul utilizatorilor și oferă acces la soluții SaaS Implementează o metodă sigură de a realiza autentificarea și autorizarea prin transmiterea datelor între furnizorul de identități și furnizorul de servicii  SAML 1.0 – 2002  SAML 2.0 – 2005 Adrian Alexandrescu 2023-2024 35 2. SAML    III Furnizorul de servicii face autorizarea după ce furnizorul de identități a autentificat utilizatorul Furnizorul de identități autentifică utilizatorul și trimite furnizorului de servicii datele și drepturile de acces pentru serviciul respectiv SAML Assertion – document XML trimis de identity provider către service provider Adrian Alexandrescu 2023-2024 36 2. SAML Adrian Alexandrescu 2023-2024 III Sursa: https://community.denodo.com/kb/view/document/SAML%202.0%20Protocol%20Overview?category=Security 37 3. OAuth    III Soluție de delegare a accesului Aplicațiile accesează informațiile de pe alte site-uri fără ca acestea din urmă să le divulge parolele utilizatorilor Folosește XML pentru token-ii de autentificare, dar poate folosi și token-i JSON  Similar cu SAML  OAuth 1.0 – draft în 2007, RFC 5849 în 2010  OAuth 2.0 – RFC 6729 în 2012 Adrian Alexandrescu 2023-2024 38 III 3. OAuth Adrian Alexandrescu 2023-2024 Sursa: https://www.soapui.org/docs/oauth2/oauth2-overview/ 39 Bibliografie      Forgot Password Cheat Sheet https://cheatsheetseries.owasp.org/cheatsheets/Forgot_Password_C heat_Sheet.html Testing for Account Enumeration and Guessable User Account https://owasp.org/www-project-web-security-testing-guide/stable/4Web_Application_Security_Testing/03Identity_Management_Testing/04Testing_for_Account_Enumeration_and_Guessable_User_Account.ht ml OWASP Session hijacking attack https://owasp.org/www-community/attacks/Session_hijacking_attack OWASP Session fixation https://owasp.org/www-community/attacks/Session_fixation Authentication and Session Management https://pomain.medium.com/authentication-and-sessionmanagement-e44bd4210b08 Adrian Alexandrescu 2023-2024 40 Bibliografie         JSON Web Tokens - https://jwt.io/ JSON Web Token (JWT) - https://tools.ietf.org/html/rfc7519 JSON Web Algorithms (JWA) - https://tools.ietf.org/html/rfc7518 JWT, JWS and JWE for Not So Dummies! https://medium.facilelogin.com/jwt-jws-and-jwe-for-not-so-dummiesb63310d201a3 IANA JSON Web Token (JWT) https://www.iana.org/assignments/jwt/jwt.xhtml GitHub spring-webmvc-jwt-sample https://github.com/hantsy/spring-webmvc-jwt-sample Understanding JSON Web Encryption (JWE) https://www.scottbrady91.com/jose/json-web-encryption JSON Web Token attacks and vulnerabilities https://www.invicti.com/blog/web-security/json-web-token-jwt-attacksvulnerabilities/ Adrian Alexandrescu 2023-2024 41 Bibliografie       What is SAML and How Does it Work? https://www.varonis.com/blog/what-is-saml/ The OAuth 2.0 Authorization Framework https://tools.ietf.org/html/rfc6749 How to secure a REST API using JWT authentication https://blog.logrocket.com/how-to-secure-a-rest-api-using-jwt7efd83e71432/ OAuth 2.0 - https://oauth.net/2/ OAuth2 Overview - https://www.soapui.org/docs/oauth2/oauth2overview/ Spring Boot and OAuth2 - https://spring.io/guides/tutorials/springboot-oauth2/ Adrian Alexandrescu 2023-2024 42

Use Quizgecko on...
Browser
Browser