Impedire la manipolazione del database delle password

3

Dato: un utente malintenzionato ha ottenuto l'accesso (root) al server che ospita il database delle password di un'applicazione. Supponiamo che l'applicazione stia utilizzando un meccanismo affidabile di hashing della password come bcrypt e che il database delle password stia memorizzando le informazioni rilevanti: username, hash, salt, # iterations ...

È possibile impedire all'utente malintenzionato di creare il proprio utente amministratore nel database e accedere correttamente all'applicazione con tutti i diritti? Presumibilmente, potrebbero INSERIRE un nuovo utente amministratore nel database con la propria password crittografata. Saranno quindi in grado di accedere all'applicazione con diritti di amministratore completi.

C'è un modo per prevenire questo o mitigare un simile attacco all'applicazione?

    
posta ChaimKut 11.02.2016 - 17:20
fonte

2 risposte

4

Se solo il server del database è compromesso: sì. Se il server delle applicazioni è compromesso: no.

Memorizza un HMAC dell'hash della password finale insieme all'hash stesso: SIG = HMAC(hash, secret) .

secret è un singolo valore noto solo al server delle applicazioni. Non cambia mai. Durante la verifica di un tentativo di accesso, ricalcolare l'HMAC e confrontare. In questo modo l'autore dell'attacco che ha compromesso il database non è in grado di creare o modificare una password (poiché secret è noto solo al server delle applicazioni).

In pratica, le cose sono sempre un po 'diverse: se il tuo server DB è compromesso, molto probabilmente avrai molti più problemi.

    
risposta data 11.02.2016 - 17:30
fonte
-1

In primo luogo, penso che sia necessario raccogliere prove su ciò che è accaduto, perché potrebbe essere stato il risultato di un attacco di SQL Injection attraverso l'applicazione o un'altra applicazione ospitata nello stesso server, inoltre potrebbe essere il risultato di un altro tipo di attacco. Esaminare i registri dell'applicazione, del server delle applicazioni, del server di database e persino del sistema operativo. Rileva i cattivi utenti sui tuoi database ed eliminali.

Ora ti consiglio le seguenti misure di sicurezza:

  1. Crea un utente sui tuoi database per la tua applicazione.
  2. Imposta i privilegi corretti per l'utente della tua applicazione sul tuo database in base alle esigenze dell'applicazione.
  3. Imposta i meccanismi di controllo degli accessi nella tua applicazione; forse un utente malintenzionato potrebbe eseguire l'escalation dei privilegi su alcune funzioni dell'applicazione per inserire un utente amministratore.
  4. Implementa le convalide dei dati di input nella tua applicazione; se si implementano le convalide dei dati di input è possibile evitare attacchi di SQL injection o un altro tipo di attacchi di iniezione, come hai menzionato sopra, potrebbe essere il risultato di un attacco di SQL injection.

Spero che questa informazione ti aiuti.

Buona fortuna.

    
risposta data 08.03.2016 - 19:36
fonte

Leggi altre domande sui tag