sql >> Database >  >> NoSQL >> MongoDB

Een beveiligingschecklist voor MongoDB-productie-implementaties

Als een applicatie een groot geografisch gebied nodig heeft om te presteren, wordt een organisatie vaak gedwongen om haar gegevens in de cloud op te slaan. Toepassingen die op MongoDB zijn gebouwd, vormen geen uitzondering op dit concept. Als gevoelige gegevens niet worden beschermd, kan het bedrijf ernstige tegenslagen krijgen, waaronder een geruïneerde reputatie, inconsistente gegevens, financiële verliezen en soms volledig gegevensverlies.

Gegevens die in de cloud zijn opgeslagen, zijn vatbaar voor interesse van criminele elementen. Mensen met kwade bedoelingen kunnen gemakkelijker toegang krijgen als er geen standaardprocedures zijn opgesteld om de databasebeveiliging te waarborgen. Sommige van deze ondermaatse procedures omvatten...

  • Slecht wachtwoordbeheer:sommige ontwikkelaars coderen uiteindelijk de wachtwoorden in de bronbestanden van het project, dus als een hacker de applicatie decompileert, kunnen ze de inhoud gemakkelijk ophalen.
  • Weigering of falen om de database en gratis plug-ins bij te werken. Nieuwere databaseversies hebben nieuwe functies, mogelijk op het gebied van beveiliging of liever sommige functies die zijn hersteld ten opzichte van de voorgangers.
  • Ondermaatse databaseconfiguraties, bijvoorbeeld geen gebruik van versleutelde decoderingssleutels of liever helemaal geen beveiligingsprotocol.

Databaseaanvallen nemen dag in, dag uit toe (en de trend zal naar verwachting aanhouden), maar u wordt mogelijk geen slachtoffer tenzij u de juiste beveiligingsoverwegingen in acht neemt. In dit artikel gaan we enkele procedures bespreken die u kunt controleren met MongoDB-installatie in de cloud. U hoeft ze niet allemaal toe te passen, maar probeer in ieder geval diegene te kiezen die, indien vermeden, uw gegevens in een rampzalige situatie zouden kunnen brengen.

MongoDB pre-productie beveiligingsoverwegingen

Dit zijn overwegingen waarvan men moet zorgen dat ze goed zijn geconfigureerd wanneer MongoDB in de productieomgeving wordt geïmplementeerd. Ze omvatten: 

  1. Verificatie inschakelen en afdwingen voor toegangscontrole
  2. Op rollen gebaseerde toegangscontrole configureren
  3. Beperk netwerkblootstelling
  4. Versleutel communicatie
  5. Gegevens versleutelen
  6. Systeemactiviteiten controleren 
  7. Gebruik een speciale gebruiker om MongoDB uit te voeren
  8. Gebruik officiële en bijgewerkte MongoDB-pakketten
  9. Schakel Javascript-uitvoeringen uit indien niet nodig
  10. Wees op de hoogte met MongoDB-beveiligingsoplossingen

1. Authenticatie voor toegangscontrole inschakelen en afdwingen

Toegangscontrole is standaard niet ingeschakeld in MongoDB, maar dit betekent niet dat u uw database ook implementeert zonder dat deze optie is ingeschakeld. Sommige databasepakketten, zoals Bitnami, vereisen dat u enige toegangscontrole instelt voordat u uw database gebruikt. Als u dit niet doet, kan iedereen toegang krijgen tot de database, waardoor zelfs zeer gevoelige gegevens worden blootgesteld. Specificeer een authenticatiemechanisme, zoals de SCRAM, zodat clients die verbinding zullen maken, een aantal geldige referenties moeten verstrekken voordat ze verbinding kunnen maken met de database.

De verbindingsreeks moet er ongeveer zo uitzien:

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

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

2. Op rollen gebaseerde toegangscontrole configureren

Na het toevoegen van gebruikers met beheerdersrechten, beperk dan de rollen die aan deze gebruikers zijn toegewezen met behulp van Role-Based Access Control (RBAC). De rollen die een gebruiker kan hebben zijn:lezen, schrijven of beide voor specifieke of alle collecties. Daarom kan een gebruiker geen rol vervullen die niet aan hem is toegewezen of kan hij alleen bewerkingen uitvoeren voor toegewezen verzamelingen.

Gebruikersbeheerder wordt eerst aangemaakt en daarna extra gebruikers. Als een gebruiker privileges heeft voor verschillende databases, kunt u een enkele gebruiker maken met rollen die toepasselijke databaseprivileges verlenen in plaats van de gebruiker meerdere keren in verschillende databases aan te maken.

Het is raadzaam om een ​​klein aantal gebruikers toegang te geven tot de database, waarbij de gebruikers personen of clienttoepassingen kunnen zijn.

Als u gebruikersrechten voor bepaalde rollen in MongoDB wilt maken en verlenen, kunt u dit voorbeeld in de mongo-shell gebruiken

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" }

    ]

  }

)

 Kies ook voor externe authenticatie-opties zoals LDAP en Kerberos.

3. Netwerkblootstelling beperken

Netwerktopologie die de database host, moet uitgebreid worden beveiligd en vooral luisteren naar de localhost-interface. Dit is om blootstelling van externe verbindingen te voorkomen, zoals het geval was voor oudere MongoDB-versies. Zorg ervoor dat MongoDB wordt uitgevoerd in een vertrouwde netwerkomgeving met een ingeschakelde beveiligingsfirewall. Beheer inkomend en uitgaand verkeer met beveiligingsgroepen die mogelijk niet met andere instanties worden gebruikt. Gebruik IP-whitelisting om toegang vanaf vertrouwde IP-adressen toe te staan ​​en sta dus verbindingen toe met MongoDB-instanties met netwerkinterfaces en poorten van alleen vertrouwde clients.

Bovendien, schakel de directe SSH-roottoegang uit.

4. Communicatie versleutelen

MongoDB-configuratie zou inkomende en uitgaande verbindingen alleen moeten beperken tot TLS/SSL. TLS/SSL versleutelt de communicatie tussen mongod en mongos-componenten van een MongoDB-implementatie en alle applicaties die ermee verbonden zijn.

In de productieomgeving moet de implementatie van MongoDB geldige certificaten gebruiken die zijn gegenereerd en ondertekend door een enkele certificeringsinstantie.

5. Versleutel de gegevens

Databasegegevens hebben twee vormen:gegevens in rust en in transit. Gegevens in transit kunnen worden beveiligd met behulp van versleuteling op veldniveau aan de clientzijde, maar is alleen beschikbaar in versie 4.2. De TLS/SSL-codering zorgt ook voor gegevens die onderweg zijn.

De WiredTiger-opslagengine van versie 3.2 Enterprise biedt gegevens in opslaglaagversleuteling. Dit bevestigt dat alleen geverifieerde gebruikers met decoderingssleutels toegang hebben tot de gegevens. Als u de codering van de WiredTiger in rust niet gebruikt, gebruik dan de bestandssysteemcodering. Versleuteling van gegevens in rust weerhoudt iemand ervan om toegang te krijgen tot de inhoud van uw database als ze toegang krijgen tot de fysieke server en daarom een ​​cruciaal onderdeel is bij het beveiligen van MongoDB.

6. Auditsysteemactiviteiten 

Dit is een bedrijfsoptie waarmee alle wijzigingen in gegevens en databaseconfiguraties kunnen worden gevolgd. De gebeurtenissen worden naar een syslog-verbinding of een logbestand geschreven. De logboeken kunnen DB-verificatiepogingen bevatten, inclusief bron-IP-adressen, en de informatie kan helpen bepalen welke hosts door de firewall moeten worden geblokkeerd voor toegang tot de database. Bovendien kun je prima bepalen welke gebeurtenissen je moet loggen.

Deze controlelogboeken zullen de beheerder in het algemeen helpen om forensische analyses uit te voeren en dus standaard beveiligingscontroles in te stellen.

7. Gebruik een toegewijde gebruiker om MongoDB uit te voeren

MongoDB-processen moeten worden uitgevoerd met een speciaal gebruikersaccount voor het besturingssysteem waarvoor toegangsrechten moeten zijn ingeschakeld.

8. Gebruik officiële en bijgewerkte MongoDB-pakketten

Geef de authenticiteitscontroles van uw pakketten door om er zeker van te zijn dat dit de officiële MongoDB-pakketten zijn. Het gebruik van de nieuwste MongoDB-stuurprogramma's en de nieuwste versie van de database zelf bieden meer beveiligingsstabiliteit dan de voorgangers. Versie 4.2 biedt bijvoorbeeld de Client-Side Field Level Encryption. Zorg er daarom voor dat u migreert naar de meest recente versie van MongoDB.

 9. Schakel Javascript-uitvoeringen uit indien niet nodig

mapReduce en $where zijn enkele van de uitvoerbare JavaScript-codes binnen MongoDB en als ze niet goed worden beheerd, kunnen ze leiden tot ongewenste inconsistentie in de gegevens of iemand indirect toegang geven tot de gegevens en enkele wijzigingen aanbrengen als ze dat willen .

Over het algemeen staat deze JavaScript-code externe injecties toe, waardoor niet-gevalideerde gegevens in uw database komen. U kunt er ook voor kiezen om pakketten zoals mangoest te gebruiken om te valideren en verbinding te maken met uw database. Gebruik MongoDB-operators in plaats van JavaScript-expressies.

10. Krijg een update met MongoDB-beveiligingsoplossingen

Beveiligingsprotocollen kunnen in de loop van de tijd door aanvallers worden verbroken, daarom zijn er geavanceerde procedures nodig. Op de hoogte blijven van de belangrijkste beveiligingsupdates en bugfixes uit de MongoDB-release-opmerkingen is erg belangrijk. De waarschuwingspagina van MongoDB is eigenlijk voor dat doel gemaakt.

Vraag indien mogelijk om een ​​technische implementatiehandleiding voor beveiliging en zorg ervoor dat uw implementatie voldoet aan de beveiligingsnormen.

Conclusie

Databases in productie zijn gevoelig voor beveiligingsaanvallen, en daarom moet er zwaar worden geïnvesteerd in het beschermen van gevoelige gegevens. De beveiligingsprocedures variëren van data-in-transit, data-at-rest en de aangesloten clientapplicaties. Naast de hierboven genoemde praktijken, zullen serververhardingsmaatregelen een extra laag gegevensbescherming bieden.

Het is belangrijk om de meest recente versies van MongoDB en plug-ins te gebruiken, naast het bijhouden van de nieuwste beveiligings- en bugfixes met betrekking tot uw versie.


  1. Mongodb:Query een json-object genest in een array

  2. Spring Data MongoDB met Java 8 LocalDate MappingException

  3. Wat is het voordeel van het gebruik van de aangepaste backend van Gorilla-sessies?

  4. Beste manier om redis-sleutels op te slaan