Introducció

La pèrdua d'autenticació és una de les vulnerabilitats més crítiques en aplicacions web segons l'OWASP Top Ten. Aquesta vulnerabilitat es produeix quan una aplicació no gestiona adequadament la identificació i autenticació dels usuaris, permetent a atacants accedir a comptes d'usuaris sense les credencials correctes.

Conceptes Clau

  1. Autenticació: Procés de verificar la identitat d'un usuari.
  2. Autenticació Multifactor (MFA): Utilització de múltiples mètodes d'autenticació per verificar la identitat d'un usuari.
  3. Gestió de Sessions: Control de la durada i validesa de les sessions d'usuari.
  4. Política de Contrasenyes: Normes que defineixen la complexitat i la caducitat de les contrasenyes.

Causes Comunes de la Pèrdua d'Autenticació

  • Contrasenyes febles o predeterminades: Ús de contrasenyes fàcils de predir o no canviades des de la configuració inicial.
  • Absència d'autenticació multifactor: No implementar MFA, facilitant l'accés als atacants amb només una contrasenya.
  • Gestió inadequada de sessions: Sessions que no expiren o que no es tanquen correctament.
  • Emmagatzematge insegur de credencials: Desar contrasenyes en text pla o utilitzar algoritmes de hash insegurs.

Exemples Pràctics

Exemple 1: Contrasenyes Febles

# Exemple de codi en Python que mostra una contrasenya feble
def validar_contrasenya(contrasenya):
    if len(contrasenya) < 8:
        return False
    return True

contrasenya = "123456"
if validar_contrasenya(contrasenya):
    print("Contrasenya vàlida")
else:
    print("Contrasenya feble")

Explicació: Aquest codi només comprova la longitud de la contrasenya, permetent contrasenyes molt febles com "123456".

Exemple 2: Autenticació Multifactor

# Exemple d'implementació d'autenticació multifactor en Python
import random

def enviar_codi_verificacio(usuari):
    codi = random.randint(100000, 999999)
    # Enviar el codi al correu electrònic o telèfon de l'usuari
    print(f"Codi de verificació enviat a {usuari}: {codi}")
    return codi

def autenticar_usuari(usuari, contrasenya, codi_introduit):
    if validar_contrasenya(contrasenya):
        codi_correcte = enviar_codi_verificacio(usuari)
        if codi_introduit == codi_correcte:
            print("Autenticació exitosa")
        else:
            print("Codi de verificació incorrecte")
    else:
        print("Contrasenya incorrecta")

usuari = "[email protected]"
contrasenya = "contrasenyaSegura123"
codi_introduit = 123456  # Aquest codi hauria de ser introduït per l'usuari

autenticar_usuari(usuari, contrasenya, codi_introduit)

Explicació: Aquest codi implementa una autenticació multifactor enviant un codi de verificació a l'usuari.

Exercicis Pràctics

Exercici 1: Millora de la Política de Contrasenyes

Objectiu: Implementar una funció que validi contrasenyes seguint una política més estricta.

Requisits:

  • Longitud mínima de 12 caràcters.
  • Almenys una lletra majúscula.
  • Almenys una lletra minúscula.
  • Almenys un número.
  • Almenys un caràcter especial.

Codi Inicial:

def validar_contrasenya(contrasenya):
    # Implementar la validació de la contrasenya segons els requisits
    pass

contrasenya = "ContrasenyaSegura123!"
if validar_contrasenya(contrasenya):
    print("Contrasenya vàlida")
else:
    print("Contrasenya feble")

Solució:

import re

def validar_contrasenya(contrasenya):
    if len(contrasenya) < 12:
        return False
    if not re.search("[A-Z]", contrasenya):
        return False
    if not re.search("[a-z]", contrasenya):
        return False
    if not re.search("[0-9]", contrasenya):
        return False
    if not re.search("[@#$%^&+=]", contrasenya):
        return False
    return True

contrasenya = "ContrasenyaSegura123!"
if validar_contrasenya(contrasenya):
    print("Contrasenya vàlida")
else:
    print("Contrasenya feble")

Exercici 2: Implementació de Gestió de Sessions

Objectiu: Implementar una funció que gestioni la durada de les sessions d'usuari.

Requisits:

  • Les sessions han de caducar després de 30 minuts d'inactivitat.
  • Les sessions han de ser tancades correctament quan l'usuari es desconnecta.

Codi Inicial:

import time

sessions = {}

def iniciar_sessio(usuari):
    # Implementar l'inici de sessió
    pass

def tancar_sessio(usuari):
    # Implementar el tancament de sessió
    pass

def verificar_sessio(usuari):
    # Implementar la verificació de la sessió
    pass

usuari = "[email protected]"
iniciar_sessio(usuari)
time.sleep(1800)  # Simular 30 minuts d'inactivitat
verificar_sessio(usuari)

Solució:

import time

sessions = {}

def iniciar_sessio(usuari):
    sessions[usuari] = time.time()
    print(f"Sessió iniciada per {usuari}")

def tancar_sessio(usuari):
    if usuari in sessions:
        del sessions[usuari]
        print(f"Sessió tancada per {usuari}")
    else:
        print(f"No hi ha cap sessió activa per {usuari}")

def verificar_sessio(usuari):
    if usuari in sessions:
        temps_actual = time.time()
        temps_inici = sessions[usuari]
        if temps_actual - temps_inici > 1800:  # 30 minuts
            print(f"Sessió caducada per {usuari}")
            tancar_sessio(usuari)
        else:
            print(f"Sessió activa per {usuari}")
    else:
        print(f"No hi ha cap sessió activa per {usuari}")

usuari = "[email protected]"
iniciar_sessio(usuari)
time.sleep(1800)  # Simular 30 minuts d'inactivitat
verificar_sessio(usuari)

Errors Comuns i Consells

  • No implementar MFA: Sempre que sigui possible, implementa autenticació multifactor per augmentar la seguretat.
  • Contrasenyes febles: Assegura't que les contrasenyes compleixin amb una política estricta de seguretat.
  • Sessions que no expiren: Implementa mecanismes per assegurar que les sessions caduquin després d'un període d'inactivitat.

Conclusió

La pèrdua d'autenticació és una vulnerabilitat crítica que pot comprometre la seguretat de les aplicacions web. Implementar polítiques de contrasenyes estrictes, autenticació multifactor i una gestió adequada de sessions són mesures essencials per protegir les aplicacions contra aquest tipus d'atacs.

Curs d'OWASP: Directrius i Estàndards per a la Seguretat en Aplicacions Web

Mòdul 1: Introducció a OWASP

Mòdul 2: Principals Projectes d'OWASP

Mòdul 3: OWASP Top Ten

Mòdul 4: OWASP ASVS (Application Security Verification Standard)

Mòdul 5: OWASP SAMM (Software Assurance Maturity Model)

Mòdul 6: OWASP ZAP (Zed Attack Proxy)

Mòdul 7: Bones Pràctiques i Recomanacions

Mòdul 8: Exercicis Pràctics i Casos d'Estudi

Mòdul 9: Avaluació i Certificació

© Copyright 2024. Tots els drets reservats