Come si esegue la scansione di un database MySQL per malware?

7

Ho molti metodi per cercare codice dannoso all'interno del file system, monitorare il traffico, analizzare i file di registro, controllare i processi sospetti / mascherati ecc.

Tuttavia, la scansione di un database relazionale come MySQL non è un compito facile. Alcuni exploit come il Magento Shoplift del 2015 puntano a iniettare codice dannoso all'interno del database, consapevole della sua struttura e del modo in cui collabora con le applicazioni lato server. Scaricando il database e quindi eseguendo una ricerca basata su firma sarebbe del tutto inefficiente dato che alcuni dati sono archiviati in BLOB e altri tipi di dati. Per esempio, non sembra necessariamente sospetto ed è lontano da come potrebbe apparire una webshell PHP, per esempio.

La mia domanda è: qual è il modo più pratico ed efficace per rilevare le anomalie e individuare il codice dannoso in un database MySQL ?

Potrebbe essere considerato un approccio decente?

  1. Scarica il database;
  2. Controllare riga per riga rispetto allo stesso database da un archivio di backup;
    • dire usando una funzionalità simile a quella di diffchecker.com;
  3. Analizza i dati appena inseriti / aggiornati;
    • questo potrebbe comportare il salto di grandi quantità di dati che non sono chiaramente di alcun comportamento malevolo;

Grazie.

    
posta McJohnson 19.09.2016 - 23:56
fonte

1 risposta

1

Domanda interessante. Per prima cosa devi definire che tipo di malware stai cercando. In questo caso, potrebbe essere:

  • Dati dannosi: dati modificati che hanno perso l'integrità.
  • Codice dannoso: dati consolidati, incorporati o modificati che possono essere eseguiti (ad es. binari eseguibili, XSS memorizzato).

Se stai cercando di rilevare dati dannosi potresti scegliere una delle opzioni:

  • Analizza i dati per l'integrità usando regex. Questo potrebbe richiedere molto tempo per la preparazione perché devi sapere esattamente come devono essere le tue strutture dati.
  • Confronta dati legittimi con i set di dati attuali per rilevare le differenze. È possibile creare un valore hash di campi, record o tabelle e confrontarli di tanto in tanto. Archiviandoli nello stesso database potrebbe non essere consigliato. Utilizzare un altro database o anche un altro supporto per quello (ad esempio un approccio basato su file). Se un utente malintenzionato è in grado di compromettere il database e influire sull'integrità, potrebbe non essere in grado di fare lo stesso sul file system.

Questo approccio potrebbe essere in grado di rilevare anche il codice dannoso. Ma potresti essere in grado di utilizzare altre tecniche per rilevarlo correttamente:

  • Utilizzare un approccio basato sulla firma per determinare i frammenti di codice dannoso. Il modo più semplice è quello di schermare i campi. Ma questo si aspetta che i dati siano in un formato compreso dal motore di scansione. Se stai serializzando o codificando i tuoi dati, questo potrebbe danneggiare le possibilità di rilevamento.
  • Potresti voler creare una possibilità di accesso all'API dedicata per i tuoi desideri di scansione. Il tuo database deve fornire i dati come se si trattasse di un attacco. Ad esempio, se si utilizzano i dati in un allegato di posta elettronica, l'API deve creare tale allegato per consentire di analizzare come sarà alla fine. Altri esempi sono l'output basato su file e web.

Gli approcci di scansione basati sulla firma sono soggetti a errori, inefficienti e lenti. Se hai la possibilità di stabilire un controllo di integrità non appena i dati vengono scritti, questo potrebbe essere molto più solido.

    
risposta data 27.03.2017 - 15:38
fonte

Leggi altre domande sui tag