Qual è la migliore strategia per individuare le intrusioni di database?

Le intrusioni dei file system possono essere rilevate utilizzando strumenti come Snort, ma è più difficile rilevare intrusioni in un database, ad esempio la cancellazione di righe, la modifica di tabelle, ecc. Qual è il modo migliore per monitorarlo per rilevare le modifiche indesiderate nel DB?

Sto usando MySQL, quindi qualsiasi cosa che non sia database-agnostico dovrebbe idealmente essere rivolto a MySQL.

8 Solutions collect form web for “Qual è la migliore strategia per individuare le intrusioni di database?”

Dipende da come si collega al database. Se stai utilizzando un'applicazione web, Snort (e altri NIDS) sarà in grado di rilevare le iniezioni SQL e altri attacchi che si verificano su HTTP.

Il problema è se si utilizza connessioni SSL o crittografate al tuo db, i NIDS saranno ciechi al traffico.

Ecco perché l'analisi del log è molto importnte. L'unico modo in cui il tuo db ti parla è attraverso i registri e molti DBA non ne hanno familiarità. Non capisco perché tutti accettano la logging web come familiare, ma trascurano la logging di db (mi occuperò ancora di più).

Per abilitare il log di mysql: http://www.ossec.net/wiki/index.php/SQL_Logging#MySQL_Logging

Utilizzo anche l'open source OSSEC per monitorare i miei log di MySQL e funziona ottimamente.

Non uso MySQL, quindi non posso parlare con alcuna funzionalità specifiche della piattaforma.

Sembra che tu voglia un path di verifica di qualche tipo. Parlando in un senso RDBMS generale, potresti essere in grado di utilizzare i trigger per get alcune delle funzionalità che stai cercando. Non penso che tu riceverai un audit-trail della modifica dello schema a less che MySQL non rappresenta lo schema come tabelle che possono, a loro volta, avere trigger su loro.

Naturalmente, tutto ciò che innesca la sciocchezza è sospetto se qualcuno ottiene l'accesso a livello "root" al database e distriggers solo i trigger prima di iniziare a scavare con i dati. A quel punto, tutte le scommesse sono spente. (… e che non ha nemless cominciato a trattare con qualcuno che ha accesso al livello "root" al sistema operativo che ospita il database … la manipolazione a livello di byte dei file di database, li aggiorna su un'istanza di database che ha avuto sicurezza le caratteristiche "hacked" da esso, ecc … sorriso )

Se vuoi davvero tenere traccia di each cambiamento alle tabelle, dovrai fare qualcosa di pazzesco come abilitare il log di query di MySQL e analizzare le cose cattive usando qualcosa come il Simple Event Correlator. Non farlo però, poiché ucciderà le performance del tuo server.

Onestamente, la tua scommessa migliore è impedire le modifiche indesiderate in primo luogo utilizzando le autorizzazioni MySQL.

Snort può ancora essere utile. La cattura è sapere where dovrebbe provenire il traffico del tuo database. Se viene da una fonte diversa da quella approvata, puoi bloccarla ovviamente all'interno di MySQL. Tuttavia, è anche ansible impostare avvisi nel tuo IDS per vedere questo tipo di cose.

Per quanto riguarda un attacco proveniente da un indirizzo IP autorizzato, è un po 'una sfida. La domanda chiave è che cosa dovrebbe essere consentita una connessione e cosa non dovrebbe fare? E questo risale alla corretta impostazione delle autorizzazioni. Se un legittimo utente si connette da un IP legittimo e ha bisogno di autorizzazioni DELETE e vuole essere dannoso, non c'è molto da fare durante la modifica effettiva. Un suggerimento è stato dato per la revisione, ma fa male la tua performance. Non sono sicuro di avere un controllo efficace se gli utenti possono accedere direttamente al database e apportre modifiche. Tutte le piattaforms di database, non solo MySQL, si trovano a combattere con questo. Hai un utente attendibile che effettua una modifica autorizzata. C'è solo così tanto che puoi fare.

Ci sono prodotti commerciali progettati per questo. Penso che abbiamo guardato DbProtect (www.appsecinc.com) e sono stati i dollari principali da implementare, ma abbiamo finito per non farlo. Ho anche visto Guardium (www.guardium.com). Entrambi sostengono di sostenere una certa versione di MySQL.

SQL Server 2005 ha introdotto i trigger DDL, questi possono essere spenti fuori each volta che qualcuno esegue il codice di definizione del codice di dati come modificare una tabella, aggiungere un indice o abbandonare una vista.

Non credo che ci siano methods adatti per farlo in MySQL. Dovresti assicurarsi che un controllo di sicurezza dei tipi sia applicato a tutte le modifiche legittime, usando una chiave segreta di qualche tipo, quindi se i dati delle righe differiscono dal checksum, si sa che è stata eseguita una modifica non autorizzata.

Per quanto riguarda il controllo del tuo checksum e come mantenere il segreto chiave, questa è un'altra storia altrettanto che puoi sentirmi libera di inviarmi una e-mail, se lo scopri da o tramite questo sito (sono nuovo qui e non ho installato correttamente ancora).

Realisticamente, solo i backup fuori sede ti aiuteranno a proteggere l'eliminazione delle righe e noti che l'utilizzo di mysqldump è l'unico metodo "ufficialmente" supportto.

Anche se la copia dei file sottostanti (MyISAM) funziona nella stragrande maggioranza dei casi per quel tipo di tabella, essa scende in occasione, quindi non mi fiderei da sola per niente di missione critica.

Abbiamo implementato DbProtect su un database di SQL Server. Non era troppo difficile e ha permesso alcune politiche abbastanza granulari per il controllo. Tuttavia come accennato da bobwood, non è economico.

Suggerimenti per Linux e Windows Server, quali Ubuntu, Centos, Apache, Nginx, Debian e argomenti di rete.