Situazione
Abbiamo scoperto che uno dei nostri database (MySQL) è stato compromesso tramite l'iniezione SQL. Il vettore di iniezione era una query vulnerabile a SQL-injection a causa della concatenazione di stringhe nella sua clausola WHERE
.
L'utente MySQL per l'applicazione Web in questione ha eseguito privilegi piuttosto limitati ( SELECT
, DELETE
, UPDATE
, INSERT
) su un singolo database insieme al database information_schema
. Il server di database è accessibile solo da macchine autorizzate (accesso illimitato a Internet).
Per quanto possiamo vedere, l'utente malintenzionato ha eseguito tutte le interazioni con il nostro database tramite le richieste di HTTP GET
all'applicazione Web vulnerabile. Abbiamo protetto i log degli accessi e degli errori del server web che mostrano chiaramente tutte le query tentate. La cosa sfortunata è che l'hacker ha avuto accesso al nostro database per circa 3 giorni. Pertanto, penso che dobbiamo presupporre che il nostro intero database sia stato mappato e che la maggior parte dei dati di interesse siano stati scaricati dall'attaccante.
Al momento della scoperta, l'attacco era ancora in corso; è stato interrotto e la clausola WHERE
vulnerabile è stata sostituita da un segnaposto di istruzioni preparato (come avrebbe dovuto essere sempre stato). Dato che l'attacco era ancora in corso, penso che posso presumere che non siano ancora riusciti a ottenere tutti dati. Dopo che la vulnerabilità è stata corretta, abbiamo ruotato le 'password' 1 per tutti gli utenti che avevano accesso a questo server di database.
I dati
Il database in questione è il datastore per un negozio online. Non ci sono informazioni di pagamento nel database (tutte le transazioni di pagamento sono gestite da un fornitore di servizi di pagamento (terzo)) e le password utente sono state sottoposte a hash con BCrypt con un fattore di lavoro abbastanza dignitoso.
Il database contiene gli ordini dei clienti (insieme alle informazioni sugli indirizzi), i prodotti, le scorte, ecc.
Domande
-
Il buco è stato tappato, quali passi tecnici 2 dovrebbero essere fatti ora (oltre a ruotare le credenziali dell'utente MySQL, cosa che abbiamo già fatto)?
-
Poiché disponiamo dei file di registro con tutti i tentativi di query, dovrebbe essere possibile capire esattamente quali tabelle sono state scaricate.
Che cosa è uno strumento valido per estrarre queste informazioni da 1 GB combinato di accesso al server Web e file di log degli errori? -
Quali sono gli usi dannosi comuni di dati rubati come questo? Attacchi di phishing rivolti ai clienti del webshop?
1 : ASCII lungo 32 caratteri, stampabile, stringhe casuali.
2 : C'è sicuramente una parte giudiziaria, di comunicazione e di pubbliche relazioni su questo problema , ma questa domanda si concentra esclusivamente sulla parte tecnica dell'incidente.