Introducció

En aquest cas d'estudi, analitzarem un incident de seguretat real per entendre com es va produir, quines vulnerabilitats es van explotar i quines mesures es podrien haver pres per prevenir-lo. Aquest exercici pràctic ens ajudarà a aplicar els coneixements adquirits en els mòduls anteriors i a desenvolupar habilitats crítiques per a la gestió d'incidents de seguretat.

Descripció de l'Incident

Context

Una empresa de comerç electrònic va patir un atac que va resultar en l'exposició de dades sensibles dels seus clients. L'atacant va aconseguir accedir a la base de dades de l'empresa i va obtenir informació personal i financera dels usuaris.

Detalls de l'Incident

  1. Data de l'Incident: 15 de març de 2023
  2. Durada de l'Incident: 3 hores
  3. Impacte: Exposició de dades personals i financeres de 10,000 clients
  4. Mètode d'Atac: Injecció SQL

Anàlisi de l'Incident

Pas 1: Identificació de la Vulnerabilitat

L'atacant va utilitzar una vulnerabilitat d'injecció SQL per accedir a la base de dades. Aquesta vulnerabilitat es trobava en un formulari de cerca de productes que no validava ni escapava correctament les entrades dels usuaris.

Exemple de Codi Vulnerable

SELECT * FROM products WHERE name = 'user_input';

En aquest cas, l'entrada de l'usuari no es valida ni s'escapa, permetent que l'atacant injecti codi SQL maliciós.

Pas 2: Exploació de la Vulnerabilitat

L'atacant va introduir la següent entrada maliciosa en el formulari de cerca:

' OR '1'='1

Això va modificar la consulta SQL original a:

SELECT * FROM products WHERE name = '' OR '1'='1';

Aquesta consulta sempre retorna totes les files de la taula products, permetent a l'atacant accedir a tota la informació emmagatzemada.

Pas 3: Impacte de l'Atac

L'atacant va obtenir accés a informació sensible, incloent noms, adreces, números de telèfon i detalls de targetes de crèdit dels clients. Això va resultar en una pèrdua de confiança dels clients i danys reputacionals per a l'empresa.

Mesures Correctives

Pas 1: Correcció de la Vulnerabilitat

Per corregir la vulnerabilitat d'injecció SQL, es van implementar les següents mesures:

  1. Ús de Consultes Preparades: Les consultes preparades asseguren que les entrades dels usuaris es tractin com a dades i no com a codi executable.

Exemple de Codi Corregit

import sqlite3

conn = sqlite3.connect('database.db')
cursor = conn.cursor()

user_input = "product_name"
cursor.execute("SELECT * FROM products WHERE name = ?", (user_input,))
results = cursor.fetchall()
  1. Validació i Escapat de les Entrades: Es va implementar una validació estricta de les entrades dels usuaris per assegurar-se que només es permetin valors esperats.

Pas 2: Millores en la Seguretat

  1. Auditoria de Seguretat: Es va realitzar una auditoria completa de seguretat per identificar i corregir altres possibles vulnerabilitats.
  2. Capacitació del Personal: Es va proporcionar formació en seguretat a tots els desenvolupadors per assegurar-se que comprenguin les millors pràctiques de seguretat.
  3. Implementació de Controls de Seguretat Addicionals: Es van implementar controls de seguretat addicionals, com ara la detecció d'intrusions i el monitoratge de la xarxa.

Conclusió

Aquest cas d'estudi ens ha permès veure com una vulnerabilitat d'injecció SQL pot ser explotada per accedir a dades sensibles i quines mesures es poden prendre per prevenir aquest tipus d'atacs. És crucial implementar bones pràctiques de seguretat, com l'ús de consultes preparades i la validació de les entrades dels usuaris, per protegir les aplicacions web contra atacs maliciosos.

Exercici Pràctic

Tasca

  1. Identificar Vulnerabilitats: Revisa el codi d'una aplicació web i identifica possibles vulnerabilitats d'injecció SQL.
  2. Implementar Correccions: Aplica les mesures correctives necessàries per solucionar les vulnerabilitats identificades.

Solució

  1. Identificació de Vulnerabilitats:
SELECT * FROM users WHERE username = 'user_input' AND password = 'user_input';
  1. Correcció de Vulnerabilitats:
import sqlite3

conn = sqlite3.connect('database.db')
cursor = conn.cursor()

username = "user_name"
password = "user_password"
cursor.execute("SELECT * FROM users WHERE username = ? AND password = ?", (username, password))
results = cursor.fetchall()

Aquest exercici pràctic reforça la importància de la seguretat en el desenvolupament d'aplicacions web i proporciona una oportunitat per aplicar els coneixements adquirits en un context real.

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