Come proteggere un'istanza MongoDB? [chiuso]

28

Qualcuno ha esperienza con il server MongoDB di protezione / protezione? Check list o guide sarebbero i benvenuti.

    
posta AaronS 27.09.2011 - 13:26
fonte

3 risposte

25

I database NoSQL sono relativamente nuovi (anche se discutibilmente un vecchio concetto), non ho visto nessuna guida specifica per indurire MongoDB e i soliti posti che guardo ( CISSecurity , pubblicazioni dei fornitori, Sans ecc. tutto viene a mancare). Suggerisce che sarebbe un buon progetto per un'organizzazione, una comunità studentesca, una comunità infosec di scriverne una e mantenerla.

Ci sono alcune informazioni di base in Mongodb.org. Tutti i passaggi qui dovrebbero essere seguiti includendo la sicurezza. Il sito stesso afferma che MongoDB ha solo un livello base di sicurezza. link

MongoDB e altri database NoSQL hanno anche molte meno funzioni (specialmente di sicurezza) rispetto ai database SQL maturi, quindi è improbabile che si possano trovare permessi o crittografia dati ben definiti, utilizza MD5 per l'hashing delle password con il nome utente come seme. Ci sono anche limitazioni come l'autenticazione che non è disponibile con sharding prima della versione 1.9.1, così come sempre eseguire una valutazione del rischio e costruire un modello di minaccia per risolvere i vostri bisogni di sicurezza e le minacce affrontate è una buona idea. In base a questo output, i database MongoDB o NoSQL in generale potrebbero non essere adatti alle proprie esigenze, oppure potrebbe essere necessario utilizzarlo in un modo diverso per massimizzarne i vantaggi e minimizzarne i punti deboli (ad esempio per estratti di dati piuttosto che per le 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 si analizzano anche gli ultimi attacchi e una buona lista su datalossdb.org è sorprendente quanti siano ancora legati alle password predefinite e alle patch mancanti. Con la difesa approfondita se segui le seguenti pratiche dovresti avere una sicurezza sufficiente per proteggere la maggior parte delle risorse (ad es. Individuale, commerciale) forse probabilmente non militare.

Principi di protezione dei database:

  • Autenticazione - richiede l'autenticazione, per gli utenti amministratori o privilegiati hanno due fattori se possibile (farlo a livello di piattaforma o tramite un dispositivo di rete in quanto il database stesso non lo supporta). Utilizza l'autenticazione basata su chiave per evitare password, se possibile.
  • Autorizzazione: numero minimo di account obbligatori con autorizzazioni minime richieste, sono supportati solo gli account di sola lettura, quindi usali. Poiché il controllo granulare degli accessi non esiste, utilizzare mezzi alternativi, ad esempio un servizio Web di fronte al database che contiene la logica aziendale, comprese le regole di controllo dell'accesso o all'interno dell'applicazione. Riduci al minimo le autorizzazioni che Mongodb esegue come sulla piattaforma, ad es. non dovrebbe essere eseguito come root.
  • Account predefiniti e di sistema - cambia le password di tutti gli account predefiniti, rimuovi / blocca / disattiva ciò che puoi, disabilita il login dove puoi.
  • Registrazione e monitoraggio: abilita la registrazione ed esporta questi in un sistema di monitoraggio centrale. Definire avvisi specifici e procedure di indagine per il personale di monitoraggio
  • Convalida dell'input - I database NoSQL sono ancora vulnerabili agli attacchi di iniezione, quindi è sufficiente trasmettere gli input validi validi convalidati, utilizzare la parametrizzazione nei framework delle applicazioni, tutte le buone pratiche per il passaggio di input non attendibili a un database
  • Crittografia: a seconda della sensibilità dei dati, poiché non è possibile crittografare a livello di database, è richiesta la crittografia o l'hashing di dati sensibili a livello di applicazione. Trasporta la crittografia anche tramite il livello di rete (ad es. VPN).
  • Riduci i servizi e modifica la porta di ascolto predefinita
  • Rimuovi qualsiasi campione o database di test
  • Avere un processo di gestione delle patch in atto per identificare, valutare e installare tutte le patch di sicurezza pertinenti in modo tempestivo
  • Indurire la piattaforma e la piattaforma di virtualizzazione, se utilizzata
  • Configura i controlli di rete appropriati, ad es. firewall, VLAN per minimizzare l'accesso al database, servizio di filtraggio del servizio denial ofstream, DNS completo, database di produzione e non di produzione separati
  • Ambiente fisicamente sicuro
  • Avere un processo di gestione delle modifiche
risposta data 03.10.2011 - 11:35
fonte
2

Poche cose molto iniziali da ricordare sono:

  • Rimuovi IP Binding da tutti al solo IP (privato o localhost), ci si aspetta di ottenere la richiesta di connessione
  • Modifica la porta predefinita Attacchi
  • Fornisci solo le autorizzazioni necessarie (come nessun aggiornamento / eliminazione autorizzazioni per selezionare gli utenti della query)
  • Imposta le chiavi ssh per la connessione master-slave richiesta, rimuovendo il coinvolgimento delle password
  • È anche possibile impostare un tunnel crittografato per la connessione tra l'applicazione e mongodb

in realtà sono applicabili a tutti i servizi DataStorage

PS: esperienza di mongodb molto limitata

    
risposta data 28.09.2011 - 16:32
fonte
2

Ecco una lista di controllo per la sicurezza di MongoDB

Abilita autenticazione - Anche se hai distribuito i tuoi server Mongodb in una rete affidabile, è buona norma per la sicurezza abilitare l'autenticazione. Ti fornisce "Difesa in profondità" se la tua rete è compromessa. Modifica il tuo file di configurazione mongod per abilitare l'autenticazione

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

Usa i firewall: usa i firewall per limitare quali altre entità sono autorizzate a connettersi al tuo server mongodb. La migliore pratica consiste nel 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 configurarlo facilmente usando "iptables". Fare riferimento alla documentazione di mongodb per configurare iptables per il proprio scenario.

Usa i file chiave per configurare il set di repliche - Specifica un file di chiavi condivise per abilitare la comunicazione tra le istanze di mongodb in un set di repliche. Per abilitare questo aggiungi il parametro keyfile al file di configurazione come sotto. Il contenuto del file deve essere uguale su tutte le macchine.

Disabilita l'interfaccia di stato HTTP Mongodb fornisce di default un'interfaccia http attiva di default sulla porta 28017 che fornisce la pagina di stato "casa". Questa interfaccia non è raccomandata per l'uso in produzione ed è meglio disabilitata. Utilizzare l'impostazione di configurazione "nohttpinterface" per disabilitare l'interfaccia http.

Disabilita l'interfaccia REST L'interfaccia REST di monogdb non è raccomandata per la produzione. Non supporta alcuna autenticazione. È disattivato per impostazione predefinita. Se lo hai acceso usando l'opzione di configurazione "resto", dovresti spegnerlo per i sistemi di produzione.

Configura Bind_ip Se il tuo sistema ha più interfacce di rete puoi usare l'opzione "bind_ip" per limitare il tuo server mongodb ad ascoltare solo sulle interfacce rilevanti. Di default mongodb si collegherà a tutte le interfacce

Abilita SSL - Se non si utilizza SSL, i dati viaggiano tra il client Mongo e il server Mongo non crittografati e sono soggetti a intercettazioni, manomissioni e attacchi "man in the middle". Questo è particolarmente importante se ti connetti al tuo server Mongodb su reti non sicure come Internet.

Autorizzazione basata sui ruoli - MongoDB supporta l'autenticazione basata sui ruoli per fornire un controllo accurato sulle azioni che possono essere eseguite da ciascun utente. Utilizza i costrutti basati sui ruoli per limitare l'accesso invece di rendere tutti gli amministratori degli utenti. Fare riferimento alla documentazione dei ruoli per ulteriori dettagli.

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

link

Dichiarazione di non responsabilità: 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.

    
risposta data 31.03.2014 - 06:58
fonte

Leggi altre domande sui tag