Introducció

L'exposició de dades sensibles és una de les vulnerabilitats més crítiques en aplicacions web. Aquesta vulnerabilitat es produeix quan dades confidencials, com ara informació personal, financera o de salut, no estan adequadament protegides i poden ser accedides per actors no autoritzats.

Conceptes Clau

  • Dades Sensibles: Inclou informació personal identificable (PII), dades financeres, credencials d'accés, informació de salut, etc.
  • Protecció de Dades: Mecanismes com el xifrat, hashing, i controls d'accés per assegurar que només usuaris autoritzats puguin accedir a les dades sensibles.
  • Exposició: Pot ocórrer a través de diverses vies, com la transmissió no segura, emmagatzematge inadequat, o vulnerabilitats en l'aplicació.

Exemples d'Exposició de Dades Sensibles

  1. Transmissió No Segura:

    • HTTP en lloc de HTTPS: Transmetre dades sensibles sense xifrar-les pot permetre que un atacant les intercepti.
    • Protocol de Comunicació No Segur: Utilitzar protocols com FTP en lloc de SFTP.
  2. Emmagatzematge No Segur:

    • Bases de Dades No Xifrades: Emmagatzemar dades sensibles en text pla.
    • Fitxers de Configuració: Incloure credencials en fitxers de configuració sense xifrar.
  3. Vulnerabilitats en l'Aplicació:

    • SQL Injection: Permet que un atacant accedeixi a dades sensibles a través de consultes malicioses.
    • Falta de Controls d'Accés: No restringir adequadament l'accés a dades sensibles.

Pràctiques Recomanades per a la Protecció de Dades Sensibles

  1. Xifrat de Dades:

    • En Trànsit: Utilitzar HTTPS per a totes les comunicacions entre el client i el servidor.
    • En Repòs: Xifrar les dades emmagatzemades en bases de dades i altres mitjans d'emmagatzematge.
  2. Hashing de Credencials:

    • Utilitzar algoritmes de hashing segurs com bcrypt, scrypt o Argon2 per emmagatzemar contrasenyes.
  3. Controls d'Accés:

    • Implementar controls d'accés basats en rols (RBAC) per assegurar que només els usuaris autoritzats puguin accedir a dades sensibles.
  4. Auditoria i Monitoratge:

    • Registrar i monitoritzar els accessos a dades sensibles per detectar i respondre a accessos no autoritzats.

Exemple Pràctic

Xifrat de Dades en Trànsit amb HTTPS

# Configuració d'un servidor web per utilitzar HTTPS amb un certificat SSL

server {
    listen 80;
    server_name example.com;
    return 301 https://$server_name$request_uri;
}

server {
    listen 443 ssl;
    server_name example.com;

    ssl_certificate /etc/ssl/certs/example.com.crt;
    ssl_certificate_key /etc/ssl/private/example.com.key;

    location / {
        proxy_pass http://localhost:8080;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

Explicació del Codi

  • Redirecció HTTP a HTTPS: La primera secció redirigeix totes les peticions HTTP a HTTPS.
  • Configuració del Certificat SSL: La segona secció configura el servidor per utilitzar un certificat SSL per xifrar les comunicacions.

Exercici Pràctic

Exercici: Implementació de Xifrat en una Base de Dades

Objectiu: Implementar el xifrat de dades sensibles en una base de dades MySQL.

Passos:

  1. Crear una Taula amb Dades Sensibles:

    CREATE TABLE users (
        id INT AUTO_INCREMENT PRIMARY KEY,
        username VARCHAR(50) NOT NULL,
        password VARBINARY(255) NOT NULL
    );
    
  2. Xifrar les Contrasenyes Abans d'Emmagatzemar-les:

    import mysql.connector
    from cryptography.fernet import Fernet
    
    # Generar una clau de xifrat
    key = Fernet.generate_key()
    cipher_suite = Fernet(key)
    
    # Connexió a la base de dades
    conn = mysql.connector.connect(
        host="localhost",
        user="root",
        password="password",
        database="security_db"
    )
    cursor = conn.cursor()
    
    # Xifrar la contrasenya
    password = "my_secure_password"
    encrypted_password = cipher_suite.encrypt(password.encode())
    
    # Inserir l'usuari amb la contrasenya xifrada
    cursor.execute("INSERT INTO users (username, password) VALUES (%s, %s)", ("user1", encrypted_password))
    conn.commit()
    

Solució:

  • Generació de Clau de Xifrat: Utilitzar la biblioteca cryptography per generar una clau de xifrat.
  • Xifrat de Contrasenya: Xifrar la contrasenya abans d'emmagatzemar-la a la base de dades.

Errors Comuns i Consells

  • No Utilitzar HTTPS: Un error comú és no utilitzar HTTPS per a totes les comunicacions. Assegura't de configurar correctament el certificat SSL.
  • Emmagatzemar Dades en Text Pla: Evita emmagatzemar dades sensibles en text pla. Utilitza xifrat i hashing adequats.
  • Falta de Controls d'Accés: Implementa controls d'accés rigorosos per assegurar que només els usuaris autoritzats puguin accedir a dades sensibles.

Conclusió

L'exposició de dades sensibles és una vulnerabilitat crítica que pot tenir conseqüències greus per a la seguretat i la privacitat dels usuaris. Implementar pràctiques recomanades com el xifrat, hashing, i controls d'accés és essencial per protegir aquestes dades. En el proper tema, explorarem la vulnerabilitat de les Entitats Externes XML (XXE) i com prevenir-la.

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