De prevalentie van datalekken is niet langer verrassend. Op basis van het zojuist vrijgegeven cybercriminaliteitsrapport van de FBI hebben slachtoffers van cybercriminaliteit in 2020 in totaal maar liefst $ 4,2 miljard verloren, wat $ 700 miljoen meer is dan de gerapporteerde verliezen in 2019. Met name onveilige MongoDB-databases waren een deel van het probleem dat leidde tot aanzienlijke gegevensinbreuken . In februari 2019 liet een servicebedrijf voor e-mailverificatie hun MongoDB-database doorbreken en onthulde 763 miljoen records, waaronder e-mailadressen, telefoonnummers, IP-adressen en geboortedata. De reden hiervoor is een openbare MongoDB-instantie zonder wachtwoord.
Gebrek aan authenticatie, geen beperking van poorten op de firewall, of het niet beveiligen van gegevens tijdens verzending kan leiden tot een datalek. In deze blog bespreken we hoe u uw MongoDB-database kunt voorbereiden en beveiligen in een productieomgeving.
Authenticatie en autorisatie
Verificatie en autorisatie zijn twee verschillende dingen, maar ze zijn gecorreleerd. Authenticatie betekent dat de gebruiker toegang heeft tot de MongoDB-database, terwijl autorisatie de gebruiker toegang geeft tot de bron in de database.
De standaardinstallatie voor authenticatie in MongoDB is uitgeschakeld. MongoDB ondersteunt meerdere authenticaties, bijvoorbeeld:SCRAM, x.509 Certificaatauthenticatie. De standaardinstelling in MongoDB is SCRAM (Salted Challenge Response Authentication Mechanism), dat de verstrekte inloggegevens verifieert met de gebruikersnaam, het wachtwoord en de authenticatiedatabase.
Voordat u authenticatie inschakelt, moet u een superuser in MongoDB maken met de rol userAdminAnyDatabase. Nadat het klaar is, hoeven we alleen het bestand /etc/mongod.conf te openen en de sectie over beveiliging te vinden. De standaard is uitgeschakeld, we hoeven alleen maar in te schakelen.
security:
authorization: "disabled"
Start de MongoDB-service opnieuw om de configuratiewijzigingen toe te passen. We kunnen ook RBAC (Role Based Access Control) configureren in de MongoDB-database voor een betere beveiliging met betrekking tot de gebruiker. Dus scheiden we de toegang tot de database op basis van de gebruiker en privileges.
Netwerksegmentatie
Netwerksegmentatie is een belangrijk aspect bij het ontwerpen van database-architectuur, het is van toepassing op alle databases, niet alleen voor MongoDB. Het is een best practice om het netwerk te scheiden voor de database. We zetten de databaseserver op in een particulier netwerk, waar deze niet vanaf internet te bereiken is.
De communicatie met de database vindt plaats op het privénetwerk en wanneer de gebruiker toegang wil tot de database, kan hij VPN of een jumphost gebruiken. Naast netwerksegmentatie speelt ook het beperken van de poort een sleutelrol, we openen de databasepoort die specifiek is voor het gesegmenteerde netwerk om het inkomende en uitgaande netwerkverkeer te regelen. We weten dus dat het inkomende verkeer afkomstig is van het vertrouwde bronadres.
Gegevensversleuteling
Een ander gebied waar we naar moeten kijken, is gegevensversleuteling. Gegevenscodering is een methode waarbij de informatie tijdens de verzending in een andere vorm wordt gecodeerd en in de database wordt opgeslagen.
Data-encryptie omvat:
-
Gegevens onderweg:gegevens in overdrachtsstatus
-
Gegevens in rust:gegevens opgeslagen op schijf. Er zijn verschillende soorten gegevensversleuteling in rust, we kunnen versleuteling gebruiken op databaseniveau, of we kunnen versleuteling gebruiken in de opslaglaag.
SSL/TLS inschakelen vanaf de clients en de MongoDB-server en tussen de MongoDB-knooppunten (in replicaset- en shard-clusterarchitectuur), zal de gegevens tijdens het transport beveiligen. De gegevensoverdracht is niet in platte tekst.
Er zijn verschillende coderingstools en functies voor bijvoorbeeld data-at-rest-codering; AWS biedt EBS-schijfversleuteling in combinatie met de KMS (Key Management Service) op de opslag, terwijl op de databaselaag de Enterprise-editie van MongoDB de databaseversleuteling in rust biedt.
Databasecontrole
Het implementeren van een auditdatabase voor MongoDB geeft inzicht in wat er in de database draait; bijvoorbeeld:van welke gebruiker en welk commando dat heeft uitgevoerd, en de bron van het ip-adres. We kunnen die logs combineren en regels maken op basis van de autorisatietoegang. We kunnen detecteren of er een onbedoelde gebruiker een script uitvoert in MongoDB. We kunnen de sectie auditLog zien.
auditLog:
destination: syslog
We kunnen het MongoDB-controlelogboek naar de syslog-bestanden sturen en de logboeken naar Logbeheer pushen. Wilt u meer tips over het beveiligen van MongoDB? Bekijk deze video om een beter begrip te krijgen van de best practices om uw MongoDB-database te beveiligen
Conclusie
Het implementeren van beveiligingsstandaarden voor MongoDB is een must, vooral voor een productieomgeving. We kunnen niet elk verlies en elke inbreuk op de gegevens die in de database zijn opgeslagen accepteren.