MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Un elenco di controllo di sicurezza per le distribuzioni di produzione MongoDB

Quando un'applicazione richiede una vasta area geografica per funzionare, un'organizzazione è spesso costretta a archiviare i propri dati nel cloud. Le applicazioni basate su MongoDB non fanno eccezione a questo concetto. La mancata protezione dei dati sensibili può causare all'azienda alcune gravi battute d'arresto, tra cui una reputazione rovinata, incoerenze dei dati, perdite finanziarie e, talvolta, completa perdita di dati.

I dati archiviati nel cloud sono soggetti a interesse da parte di elementi criminali. Le persone con intenzioni dannose possono ottenere più facilmente l'accesso quando non sono state stabilite procedure standard per garantire la sicurezza del database. Alcune di queste procedure scadenti includono...

  • Gestione delle password scadente:alcuni sviluppatori finiscono per codificare le password nei file sorgente del progetto, quindi se un hacker decompila l'applicazione possono facilmente recuperare i contenuti.
  • Riluttanza o mancato aggiornamento del database e dei plug-in gratuiti. Le versioni più recenti del database hanno nuove funzionalità che potrebbero essere in termini di sicurezza o piuttosto avere alcune funzionalità corrette rispetto ai predecessori.
  • Configurazioni di database scadenti, ad esempio, non utilizzano chiavi di decrittazione crittografate o piuttosto non utilizzano alcun protocollo di sicurezza .

Gli attacchi al database stanno aumentando giorno dopo giorno (e la tendenza dovrebbe continuare), ma potresti non cadere vittima a meno che non utilizzi le appropriate considerazioni di sicurezza. In questo articolo, discuteremo alcune delle procedure che è possibile verificare con l'installazione di MongoDB nel cloud. Non è necessario applicarli tutti, ma almeno cercare di scegliere quelli che, se evitati, potrebbero mettere i tuoi dati in una situazione disastrosa.

Considerazioni sulla sicurezza di pre-produzione di MongoDB

Queste sono considerazioni da verificare che siano ben configurate quando si sta per distribuire MongoDB nell'ambiente di produzione. Includono: 

  1. Abilitazione e applicazione dell'autenticazione per il controllo degli accessi
  2. Configura il controllo dell'accesso basato sul ruolo
  3. Limita l'esposizione alla rete
  4. Crittografa le comunicazioni
  5. Crittografa i dati
  6. Attività del sistema di audit 
  7. Utilizza utente dedicato per eseguire MongoDB
  8. Utilizza i pacchetti MongoDB ufficiali e aggiornati
  9. Disabilita le esecuzioni Javascript se non necessarie
  10. Aggiornati con le correzioni di sicurezza di MongoDB

1. Abilitazione e applicazione dell'autenticazione per il controllo degli accessi

Il controllo dell'accesso non è abilitato in MongoDB per impostazione predefinita, ma ciò non significa che puoi distribuire anche il tuo database senza questa opzione abilitata. In realtà alcuni pacchetti di database come Bitnami richiederanno di impostare un controllo dell'accesso prima di utilizzare il database. In caso contrario, chiunque può avere accesso al database, quindi l'esposizione a dati anche molto sensibili. Specificare un meccanismo di autenticazione come la SCRAM in modo che i client che verranno collegati debbano fornire alcune credenziali valide prima di potersi connettere al database.

La stringa di connessione dovrebbe essere simile a:

mongodb://[username:[email protected]]host[:port1][/[defaultauthdb]and not just

mongodb://host[:port1]/[defaultauthdb]

2. Configura il controllo degli accessi in base al ruolo

Dopo aver aggiunto utenti con autorizzazioni amministrative, limita i ruoli assegnati a questi utenti utilizzando il controllo degli accessi basato sui ruoli (RBAC). I ruoli che un utente può avere includono:lettura, scrittura o entrambi in specifiche o in tutte le raccolte. Pertanto, un utente non può svolgere un ruolo non assegnatogli o può eseguire operazioni solo su raccolte assegnate.

Prima viene creato l'amministratore utente, poi gli utenti aggiuntivi. Se un utente dispone di privilegi su database diversi, puoi creare un singolo utente con ruoli che concedono privilegi database applicabili invece di creare l'utente più volte in database diversi.

È consigliabile che un numero limitato di utenti acceda al database in modo che gli utenti possano essere persone o applicazioni client.

Per creare e concedere autorizzazioni utente per determinati ruoli in MongoDB puoi usare questo esempio nella mongo shell

use finance

db.createUser(

  {

    user: "manager",

    pwd: passwordPrompt(),  // or cleartext password

    roles: [

       { role: "read", db: "loans" },

       { role: "read", db: "interests" },

       { role: "read", db: "useraccounts" },

       { role: "readWrite", db: "wages" }

    ]

  }

)

 Inoltre, opta per opzioni di autenticazione esterna come LDAP e Kerberos.

3. Limita l'esposizione della rete

La topologia di rete che ospita il database deve essere protetta in modo estensivo e, soprattutto, ascoltare solo l'interfaccia localhost. Questo per evitare l'esposizione da connessioni esterne come avveniva per le versioni precedenti di MongoDB. Assicurati che MongoDB venga eseguito in un ambiente di rete affidabile con il firewall di sicurezza abilitato. Controlla il traffico in entrata e in uscita con gruppi di sicurezza che potrebbero non essere utilizzati con altre istanze. Utilizza la whitelist IP per consentire l'accesso da indirizzi IP attendibili, quindi consenti le connessioni alle istanze MongoDB con interfacce di rete e porte solo da client attendibili.

Inoltre, disabilita l'accesso root SSH diretto.

4. Crittografa le comunicazioni

La configurazione di MongoDB dovrebbe limitare le connessioni in entrata e in uscita solo a TLS/SSL. TLS/SSL crittografa la comunicazione tra i componenti mongod e mongos di una distribuzione MongoDB e tutte le applicazioni ad essa collegate.

Nell'ambiente di produzione, la distribuzione di MongoDB dovrebbe utilizzare certificati validi generati e firmati da un'unica autorità di certificazione.

5. Cripta i dati

I dati del database assumono due forme:dati a riposo e in transito. I dati in transito possono essere protetti utilizzando la crittografia a livello di campo lato client, ma è disponibile solo nella versione 4.2. La crittografia TLS/SSL si occupa anche dei dati in transito.

Il motore di archiviazione WiredTiger dalla versione 3.2 Enterprise fornisce dati nella crittografia del livello di archiviazione. Ciò afferma che solo gli utenti autenticati con chiavi di decrittazione possono accedere ai dati. Se non stai utilizzando la crittografia di WiredTiger a riposo, usa la crittografia del file system. La crittografia dei dati inattivi impedisce di accedere ai contenuti del database se ottengono l'accesso al server fisico, quindi una parte cruciale nella protezione di MongoDB.

6. Attività del sistema di audit 

Questa è un'opzione aziendale che consente di tenere traccia di tutte le modifiche ai dati e alle configurazioni del database. Gli eventi vengono scritti su una connessione syslog o su un file di registro. I log possono contenere tentativi di autenticazione DB inclusi gli indirizzi IP di origine e le informazioni possono aiutare a determinare quali host devono essere bloccati dal firewall dall'accesso al database. Inoltre, si può scegliere quali eventi registrare.

Questi log di controllo in generale aiuteranno l'amministratore a fare alcune analisi forensi e quindi a impostare controlli di sicurezza standard.

7. Usa utente dedicato per eseguire MongoDB

I processi MongoDB dovrebbero essere eseguiti con un account utente del sistema operativo dedicato che dovrebbe avere i permessi di accesso abilitati.

8. Utilizza i pacchetti MongoDB ufficiali e aggiornati

Supera i controlli di autenticità sui tuoi pacchetti per assicurarti che siano i pacchetti ufficiali di MongoDB. L'utilizzo dei driver MongoDB più recenti e dell'ultima versione del database stesso offre una maggiore stabilità di sicurezza rispetto ai predecessori. Ad esempio, la versione 4.2 offre la crittografia a livello di campo lato client. Assicurati quindi di migrare alla versione più recente di MongoDB.

 9. Disabilita le esecuzioni Javascript se non necessarie

mapReduce e  $where sono alcuni dei codici JavaScript eseguibili all'interno di MongoDB e se non ben gestiti possono causare incoerenze di dati indesiderate o consentire di accedere ai dati indirettamente e applicare alcune modifiche se lo desiderano .

In generale, questo codice JavaScript consentirà iniezioni esterne, quindi dati non convalidati che entrano nel tuo database. Puoi anche scegliere di utilizzare pacchetti come mangusta per convalidare e connetterti al tuo database. Usa gli operatori MongoDB invece delle espressioni JavaScript.

10. Aggiornati con le correzioni di sicurezza di MongoDB

I protocolli di sicurezza possono essere violati dagli aggressori con il tempo, quindi è necessario che ne coinvolgano procedure avanzate. Rimanere aggiornati con i migliori aggiornamenti di sicurezza e correzioni di bug dalle note di rilascio di MongoDB è molto importante. La pagina di avviso di MongoDB è stata fondamentalmente creata per tale scopo.

Se possibile, richiedi una guida all'implementazione tecnica della sicurezza e assicurati che la tua distribuzione sia in linea con gli standard di sicurezza.

Conclusione

I database in produzione sono soggetti ad attacchi alla sicurezza, quindi è necessario investire molto nella protezione dei dati sensibili. Le procedure di sicurezza vanno dai dati in transito, ai dati inattivi e alle applicazioni client connesse. Oltre alle pratiche sopra menzionate, gli impegni di rafforzamento del server forniranno un altro livello di protezione dei dati.

È importante utilizzare le versioni più recenti di MongoDB e dei plug-in oltre a tenere il passo con le ultime correzioni di sicurezza e bug relative alla tua versione.