it-swarm.it

Come proteggere un'istanza MongoDB?

Qualcuno ha esperienza con la protezione/indurimento del server MongoDB? Liste di controllo o guide sarebbero benvenute.

28
AaronS

I database NoSQL sono relativamente nuovi (anche se probabilmente un vecchio concetto), non ho visto nessuna guida specifica per l'indurimento di MongoDB e i soliti posti in cui guardo ( CISSecurity , pubblicazioni dei fornitori, Sans ecc.). Suggerisce che sarebbe un buon progetto per un'organizzazione, uno studente, una comunità infosec di scriverne uno e mantenerlo.

Ci sono alcune informazioni di base in Mongodb.org. Tutti i passaggi qui devono essere seguiti, inclusa l'abilitazione della sicurezza. Il sito stesso afferma che MongoDB ha solo un livello di sicurezza di base. http://www.mongodb.org/display/DOCS/Security+and+Authentication

MongoDB e altri database NoSQL hanno anche molte meno funzioni (soprattutto di sicurezza) rispetto ai database SQL maturi, quindi è improbabile trovare permessi o crittografia dei dati dettagliati, utilizza MD5 per l'hash della password con il nome utente come seme. Esistono anche limitazioni come l'autenticazione non disponibile con lo sharding prima della versione 1.9.1, quindi eseguire sempre una valutazione del rischio e costruire un modello di minaccia per risolvere le esigenze di sicurezza e le minacce affrontate è una buona idea. Sulla base di questo output, i database MongoDB o NoSQL in generale potrebbero non essere adatti alle tue esigenze, oppure potresti doverlo utilizzare in un modo diverso che massimizzi i suoi vantaggi e minimizzi i suoi punti deboli (ad esempio per gli estratti di dati piuttosto che le tue informazioni più sensibili, o dietro un numero di livelli di controlli di rete piuttosto che direttamente collegati alla tua applicazione web).

Detto questo, credo fermamente che i principi di sicurezza siano indipendenti dalla tecnologia. Se analizzi anche gli ultimi attacchi e una buona lista su datalossdb.org è sorprendente quanti siano ancora legati a password predefinite e patch mancanti. Con una difesa approfondita, se segui le seguenti pratiche, dovresti avere una sicurezza sufficiente per proteggere la maggior parte dei beni (es. Singoli, commerciali), probabilmente non militari.

Principi di rafforzamento del database:

  • Autenticazione: richiede l'autenticazione, poiché l'amministratore o gli utenti privilegiati hanno due fattori, se possibile, (a livello di piattaforma o tramite un dispositivo di rete poiché il database stesso non lo supporta). Utilizzare l'autenticazione basata su chiave per evitare le password, se possibile.
  • Autorizzazione: numero minimo di account richiesti con autorizzazioni minime richieste, sono supportati account di sola lettura, quindi utilizzali. Poiché non esiste un controllo granulare degli accessi, utilizzare mezzi alternativi, ad esempio un servizio Web davanti al database che contenga una logica aziendale che includa regole di controllo degli accessi o all'interno dell'applicazione. Ridurre al minimo le autorizzazioni eseguite da Mongodb come sulla piattaforma, ad es. non dovrebbe essere eseguito come root.
  • Account predefiniti e di sistema: modifica le password di tutti gli account predefiniti, rimuovi/blocca/disabilita ciò che puoi, disabilita l'accesso dove puoi.
  • Registrazione e monitoraggio: abilitare registrazione ed esportarli in un sistema di monitoraggio centrale. Definire avvisi e procedure di indagine specifici per il personale di monitoraggio
  • Convalida dell'input - I database NoSQL sono ancora vulnerabili agli attacchi di iniezione, quindi solo passando l'input valido noto convalidato, l'uso della paramaterizzazione nei framework dell'applicazione, sono necessarie tutte le buone pratiche per trasferire input non attendibili a un database
  • Crittografia: a seconda della sensibilità dei dati, poiché non è possibile crittografare a livello di database, è necessario crittografare o eseguire l'hashing di tutti i dati sensibili a livello dell'applicazione. Trasporta la crittografia anche tramite il livello di rete (ad es. VPN).
  • Ridurre al minimo i servizi e modificare la porta di ascolto predefinita
  • Rimuovere qualsiasi database di esempio o di prova
  • Predisporre un processo di gestione delle patch per identificare, valutare e installare tutte le patch di sicurezza pertinenti in modo tempestivo
  • Indurire la piattaforma e la piattaforma di virtualizzazione se utilizzate
  • Configurare i controlli di rete appropriati, ad es. firewall, VLAN per ridurre al minimo l'accesso al database, servizio di filtro Denial of Service a monte, DNS completo, database di produzione e non di produzione separati
  • Ambiente fisicamente sicuro
  • Avere un processo di gestione del cambiamento
25
Rakkhi

Ecco una lista di controllo per la sicurezza di MongoDB

Abilita autenticazione: anche se i server Mongodb sono stati distribuiti in una rete attendibile, è consigliabile abilitare l'autenticazione. Ti fornisce "difesa in profondità" se la tua rete è compromessa. Modifica il tuo file di configurazione mongod per abilitare auth

Non esporre il tuo db di produzione a Internet - Limitare l'accesso fisico al tuo database è un aspetto importante della sicurezza. Se non è necessario, non esporre il database di produzione su Internet. In caso di compromesso se un utente malintenzionato non è in grado di connettersi fisicamente al server MongoDB, i tuoi dati sono molto più sicuri. Se utilizzi AWS, puoi posizionare i tuoi db in una sottorete privata VPC. Leggi il post sul blog Distribuire MongoDB in un VPC per ulteriori informazioni.

Usa firewall - Usa i firewall per limitare quali altre entità sono autorizzate a connettersi al tuo server mongodb. La migliore pratica è consentire solo ai server delle applicazioni di accedere al database. Se sei ospitato su AWS, usa "Gruppi di sicurezza" per limitare l'accesso. Se sei ospitato su un provider che non supporta i costrutti del firewall, puoi facilmente configurarlo tu stesso usando "iptables". Consultare la documentazione di mongodb per configurare iptables per il proprio scenario.

Usa file di chiavi per impostare il set di repliche: specificare un file di chiavi condiviso per abilitare la comunicazione tra le istanze di mongodb in un set di repliche. Per abilitare ciò, aggiungi il parametro keyfile al file di configurazione come di seguito. Il contenuto del file deve essere lo stesso su tutti i computer.

Disabilitare l'interfaccia di stato HTTP Mongodb per impostazione predefinita fornisce un'interfaccia http in esecuzione per impostazione predefinita sulla porta 28017 che fornisce la pagina di stato "home". Questa interfaccia non è consigliata per l'uso in produzione ed è disabilitata al meglio. Utilizzare l'impostazione di configurazione "nohttpinterface" per disabilitare l'interfaccia http.

Disabilita REST La monogdb REST non è consigliata per la produzione. Non supporta alcuna autenticazione. È disattivata per impostazione predefinita. Se hai attivato se si utilizza l'opzione di configurazione "rest", è necessario disattivarlo per i sistemi di produzione.

Configura Bind_ip Se il tuo sistema ha più interfacce di rete, puoi utilizzare l'opzione "bind_ip" per limitare il tuo server mongodb in modo che ascolti solo sulle interfacce rilevanti. Di default mongodb si legherà a tutte le interfacce

Abilita SSL: se non si utilizza SSL, i dati viaggiano tra il client Mongo e il server Mongo non crittografati ed è suscettibile di intercettazioni, manomissioni e attacchi "man in the middle". Ciò è particolarmente importante se ci si connette al server Mongodb su reti non sicure come Internet.

Autorizzazione basata sui ruoli: MongoDB supporta l'autenticazione basata sui ruoli per offrire un controllo accurato delle azioni che possono essere eseguite da ciascun utente. Utilizzare costrutti basati sui ruoli per limitare l'accesso anziché rendere tutti gli amministratori degli utenti. Fare riferimento alla documentazione dei ruoli per maggiori dettagli.

Enterprise mongodb e Kerberos Enterprise mongodb si integra con Kerberos per l'autenticazione. Fare riferimento alla documentazione di mongodb per maggiori dettagli. I sistemi di nome utente/password sono intrinsecamente insicuri: se possibile, utilizzare l'autenticazione basata sul freno.

https://scalegrid.io/blog/10-tips-to-improve-your-mongodb-security/

Disclaimer: sono il fondatore di scalegrid.io

Inoltre, ti consiglio di crittografare i dati mongodb a riposo come indicato dagli altri commenti. È possibile utilizzare LUKS (Linux unified key setup) per configurare la crittografia a livello di volume.

2
Dharshan

Poche cose molto iniziali da ricordare sono:

  • Rimuovi il Binding IP da tutto solo per l'IP (private o localhost), ti aspetti di ottenere una richiesta di connessione
  • Modifica i binding di porta predefiniti
  • Assegna solo le autorizzazioni necessarie (come nessuna autorizzazione di aggiornamento/eliminazione per selezionare gli utenti delle query)
  • Imposta i tasti ssh per la connessione master-slave richiesta, rimuovendo il coinvolgimento delle password
  • È anche possibile configurare un tunnel crittografato per la connessione tra l'applicazione e mongodb

in realtà sono applicabili a tutti i servizi DataStorage

PS: esperienza mongodb molto limitata

2
AbhishekKr