Securitate Web Cursul 07 - PDF
Document Details
Uploaded by FearlessSasquatch
Universitatea Tehnică Gheorghe Asachi din Iași
2023
Adrian Alexandrescu
Tags
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