SlideShare ist ein Scribd-Unternehmen logo
1 von 50
Downloaden Sie, um offline zu lesen
MongoDB
Security-Tipps gegen Hacker
Gregor Biswanger | Freier Dozent, Berater, Trainer und Autor
about.me/gregor.biswanger
Über mich
 Freier Dozent, Berater und Trainer
 Schwerpunkte Softwarearchitektur, XAML, Web
und Cross-Plattform Entwicklung
 Technologieberater für die Intel Developer Zone
 Sprecher auf Konferenzen und User Groups
 Freier Autor für heise.de, dotnetpro,
WindowsDeveloper und viele weitere
Fachmagazine
 Video-Trainer bei video2brain und MicrosoftGregor Biswanger
Microsoft MVP, Intel Black Belt &
Intel Software Innovator
cross-platform-blog.de
about.me/gregor.biswanger
Legal Disclaimer
The information provided in this session is to be used for educational
purposes only. The speaker is in no way responsible for any misuse of
the information provided. All of the information in this session is
meant to help the attendees develop a hacker defense attitude in
order to prevent the attacks discussed. In no way should you use the
information to cause any kind of damage directly or indirectly. The
word „Hack“ or „Hacking“ in this session should be regarded as
„Ethical Hack“ or „Ethical hacking“ respectvely.
Unser Reiseplan
 Aktuelles Problem
 Security von MongoDB
 Basis Authentifizierung
 Zugriff mit Authentifizierung
 Robomongo
 Setup-Script zur Authentifizierung
 Weitere Top Security Tipps
Aktuelles
Problem
So „einfach“ wird MongoDB
gehackt
MongoDB Apocalypse 2017
 Bei MongoDB ist per
Standard keine Security aktiv
 Anfang 2017 wurden
mehrere tausend
MongoDB-Server gehackt
 Die Daten wurden geklaut
und anschließend durch
eine Lösegeld Aufforderung
ersetzt
Das kann EUCH auch passieren!
Suchmaschinen von Servern mit „offenen“ Ports
 https://www.shodan.io
 https://censys.io
 https://www.zoomeye.org
Quelle: zoomeye
Shodan.io
Gefundene MongoDB Server ohne Security
Eigenes Netzwerk schon gescannt?
 Kostenloser Security Port Scanner: NMAP
 https://nmap.org
 Läuft unter Windows, Mac und Linux
 Nmap ist sowohl bei Angreifern als auch bei Administratoren sehr
beliebt, da es sehr effizient und zuverlässig arbeitet.
 In einigen Filmen kommt Nmap vor: In Matrix Reloaded hackt sich der
Charakter Trinity mithilfe des 2001 entdeckten SSH1-CRC32-Exploit in
ein Kraftwerk ein, nachdem sie den Rechner mit Nmap gescannt hat.
 In dem Film Battle Royale wird der Quelltext von Nmap gezeigt. Des
Weiteren wird in Das Bourne Ultimatum die damalige Beta-Version 4.01
mit der grafischen Oberfläche Zenmap benutzt.
Security von
MongoDB
Die Basis von allem
Gefährdende Schnittstellen
Network Storage Access
MongoDB V3
Basic
Authentication
Robust
Authentication
SSL
Server-Server
Authentication
LDAP / Kerberos Encryption At Rest
Kein öffentlichen Zugriff auf die MongoDB!
Application
Mongo
Public / Other
Firewall Regeln
 Zugriff nur auf den Application-Server beschränken
 Zugriff nur auf den Mongo-Port beschränken
 Am besten keinen Standard Mongo-Port verwenden
Mongo Server IP Konfiguration
 In der Mongo Konfigurationsdatei
ebenfalls nur erlaubte IP-Adressen
hinterlegen
 Verwende dazu die bindIp Option
 Oder auch als Start-Parameter
„mongod --bind_ip 255.255.255.255“
 Lokale IP-Adressen werden immer
erlaubt
systemLog:
destination: file
path: "/var/log/mongodb/mongod.log"
logAppend: true
storage:
journal:
enabled: true
processManagement:
fork: true
net:
bindIp: 127.0.0.1
port: 27017
setParameter:
enableLocalhostAuthBypass: false
...
Basis
Authentifizierung
Der Standard von Mongo
Authentifizierung und Autorisierung
„Wer bist du?“
„Was möchtest du machen?“
„OK!“
„Bob“
„Eine Collection lesen“
Es gibt eine Vielzahl an Aktionen
„Was möchtest du
machen?“
„Eine Collection lesen“
 Read Collection
 Write Document
 List Collection
 Create User
 Create Database
 Backup
 Restore
 Administer Shards
 Kill Cursor
 …
Autorisierung mit Rollen
„Was möchtest du
machen?“
„Eine Collection lesen“
 readWrite
 Read Collection
 Write Document
 List Collection
 …
 userAdmin
 Create User
 Grant User Permissions
 …
 dbAdmin
 dbStats
 repairDatabase
 …
Die Rolle: Root
 Darf ALLES!
 Sollte so gut wie gar nicht benutzt zum Einsatz kommen!
 Darf niemand weitergegeben werden!
Die Rolle: userAdminAnyDatabase
 Darf sehr viel!
 Sollte nur zum Verwalten von Benutzer zum Einsatz kommen
 Kann Benutzer anlegen
 Kann Rechte von Benutzer verwalten
 Kann sich selbst höhere Rechte geben
Die Rolle: read
 Lesen von Collections
 Nur auf speziell hinterlegte Datenbank
Die Rolle: readWrite
 Lesen und schreiben von Collections
 Nur auf speziell hinterlegte Datenbank
Die ersten Schritte zum Einrichten der internen
Authentifizierung
1. Starte Mongo ohne Authentifizierung (Automatisch Root-Rechte)
2. Lege einen Benutzer an mit der Rolle userAdminAnyDatabase für
die interne admin Datenbank
3. Starte Mongo erneut mit Authentifizierung
4. Einloggen mit der Mongo-Shell und dem neuen Admin-Benutzer
Account
5. Wechsle zum Kontext der gewünschten Datenbank und erzeuge
von dort aus einen Benutzer mit passenden Rollen
6. Ggf. eigene Rollen erzeugen oder Benutzer explizit einzelne
Aktionen zuweisen
1. Starte Mongo ohne Authentifizierung (Automatisch Root-Rechte)
2. Lege einen Benutzer an mit der Rolle userAdminAnyDatabase für
die interne admin Datenbank
3. Starte Mongo erneut mit Authentifizierung
4. Einloggen mit der Mongo-Shell und dem neuen Admin-Benutzer
Account
5. Wechsle zum Kontext der gewünschten Datenbank und erzeuge von
dort aus einen Benutzer mit passenden Rollen
Neuen Benutzer testen
Zugriff mit
Authentifizierung
Von einer Node.js-Applikation
Authentifizierung via Connection-String
const MongoClient = require('mongodb').MongoClient;
// Connection URL
var url = 'mongodb://appUser:123456@localhost:27017/myproject';
// Use connect method to connect to the server
MongoClient.connect(url, function (error, db) {
console.log("Connected successfully to server");
db.close();
});
Authentifizierung via Code (Besser)
const MongoClient = require('mongodb').MongoClient;
// Connection URL
var url = 'mongodb://localhost:27017/myproject';
// Use connect method to connect to the server
MongoClient.connect(url, function (error, db) {
console.log('Connected successfully to server');
db.authenticate('appUser', '123456', () => {
console.log('Logged in as appUser');
db.close();
});
});
Zugriff mit
Robomongo
Tooling
Robomongo
 Kostenloses MongoDB
Management Tool
 Läuft unter Windows, Mac
und Linux
 https://robomongo.org
Setup-Script der
Authentifizierung
Zur Automatisierung
Scripting für die Mongo Shell
 Ermöglicht das automatische Erstellen der Datenbank oder das
verarbeiten von Administrationsaufgaben
 Wird in JavaScript geschrieben
 Nicht alle gewohnten JavaScript-Funktionen können genutzt
werden
 Wird nicht innerhalb einer Node.js-Instanz ausgeführt
 Möglichkeiten und Dokumentation unter:
 https://docs.mongodb.com/manual/tutorial/write-scripts-for-the-mongo-
shell/#differences-between-interactive-and-scripted-mongo
Setup-Script zur Authentifizierung
var db = connect('localhost:27017/admin');
print('Create siteUserAdmin...');
var siteUserAdmin = {
user: 'siteUserAdmin',
pwd: '123456',
roles: [
{
role: 'userAdminAnyDatabase',
db: 'admin'
}
]
};
db.createUser(siteUserAdmin);
print('Switch to myproject db...');
db = db.getSiblingDB('myproject');
print('Create appUser...');
var appUser = {
user: 'appUser',
pwd: '123456',
roles: [
{
role: 'readWrite',
db: 'myproject'
}
]
};
db.createUser(appUser);
print('Finish! Your Database is ready...');
Script ausführen
Security-Tipps Gewappnet sein
Verschlüsselte Kommunikation
 TLS/SSL für eingehende und ausgehende Kommunikation einsetzen
 Schutz gegen Man-in-the-Middle-Angriff
 Dokumentation:
 https://docs.mongodb.com/manual/tutorial/configure-ssl/
 mongod --sslMode requireSSL --sslPEMKeyFile /etc/ssl/mongodb.pem
Datenbank Dateien verschlüsseln
 Ab Version 3.2 gibt es Encrypted Storage Engine
 MongoDB Enterprise only
 Nur verfügbar für die WiredTiger Storage Engine (Normal Standard)
 Dokumentation:
 https://docs.mongodb.com/manual/core/security-encryption-at-rest
 https://docs.mongodb.com/manual/tutorial/configure-encryption
Backup System hinterlegen
 Das Tool MongoDB OPS Manager ermöglicht das automatisierte
Erzeugen von Backups
 MongoDB Enterprise only
 Dokumentation:
 https://docs.opsmanager.mongodb.com/current/tutorial/nav/backup-use
Mongo Shell Script JavaScript Support deaktivieren
 Auf dem Production-System den Script JavaScript Support
deaktivieren
 Es werden nur Mongo spezifische Scripts erlaubt (wire protocol)
 MongoDB mit folgenden Parameter ausführen:
 mongod --dbpath=c:temp --auth --noscripting
Monitoring aktivieren
 Das Tool MongoDB OPS Manager ermöglicht das automatisierte
Benachrichtigen (Alerts) bei sicherheitsrelevanten Aktionen
 MongoDB Enterprise only
 Dokumentation:
 https://docs.opsmanager.mongodb.com/current/tutorial/manage-alert-
configurations/
Regelmäßig Updaten
 MongoDB regelmäßig Updaten um
sich vor neuen Exploits zu schützen
 Hacker haben dafür eine Datenbank
und greifen bei einer Attacke darauf
zu:
 https://www.exploit-db.com
Mongoaudit einsetzen
 Open-Source Tool zum Testen der
MongoDB Security Einstellungen
 https://mongoaud.it
Letzter Tipp: Keine Security-Tipps ignorieren
http://about.me/Gregor.Biswanger
Ich freue mich auf Feedback!
Vielen Dank!

Weitere ähnliche Inhalte

Was ist angesagt?

Nagios Conference 2007 | Pluginprogrammierung in Perl by Wolfgang Barth
Nagios Conference 2007 |  Pluginprogrammierung in Perl by Wolfgang BarthNagios Conference 2007 |  Pluginprogrammierung in Perl by Wolfgang Barth
Nagios Conference 2007 | Pluginprogrammierung in Perl by Wolfgang Barth
NETWAYS
 
HTML5 und node.js Grundlagen
HTML5 und node.js GrundlagenHTML5 und node.js Grundlagen
HTML5 und node.js Grundlagen
Mayflower GmbH
 
EntwicklerCamp 2014 - DOTS reloaded
EntwicklerCamp 2014 - DOTS reloadedEntwicklerCamp 2014 - DOTS reloaded
EntwicklerCamp 2014 - DOTS reloaded
René Winkelmeyer
 
JavaScript für Java-Entwickler W-JAX 2013
JavaScript für Java-Entwickler W-JAX 2013JavaScript für Java-Entwickler W-JAX 2013
JavaScript für Java-Entwickler W-JAX 2013
Oliver Zeigermann
 

Was ist angesagt? (20)

Docker und Kubernetes Patterns & Anti-Patterns
Docker und Kubernetes Patterns & Anti-PatternsDocker und Kubernetes Patterns & Anti-Patterns
Docker und Kubernetes Patterns & Anti-Patterns
 
Automatischer Build mit Maven
Automatischer Build mit MavenAutomatischer Build mit Maven
Automatischer Build mit Maven
 
Node.js Security
Node.js SecurityNode.js Security
Node.js Security
 
Dockerize It - Mit apex in die amazon cloud
Dockerize It - Mit apex in die amazon cloudDockerize It - Mit apex in die amazon cloud
Dockerize It - Mit apex in die amazon cloud
 
Vagrant, Puppet, Docker für Entwickler und Architekten
Vagrant, Puppet, Docker für Entwickler und ArchitektenVagrant, Puppet, Docker für Entwickler und Architekten
Vagrant, Puppet, Docker für Entwickler und Architekten
 
Nagios Conference 2007 | Pluginprogrammierung in Perl by Wolfgang Barth
Nagios Conference 2007 |  Pluginprogrammierung in Perl by Wolfgang BarthNagios Conference 2007 |  Pluginprogrammierung in Perl by Wolfgang Barth
Nagios Conference 2007 | Pluginprogrammierung in Perl by Wolfgang Barth
 
HTML5 und node.js Grundlagen
HTML5 und node.js GrundlagenHTML5 und node.js Grundlagen
HTML5 und node.js Grundlagen
 
Hendrik Jungnitsch: Software verpacken mit Docker
Hendrik Jungnitsch: Software verpacken mit DockerHendrik Jungnitsch: Software verpacken mit Docker
Hendrik Jungnitsch: Software verpacken mit Docker
 
Docker Security - Architektur und Sicherheitsfunktionen von Containervirtuali...
Docker Security - Architektur und Sicherheitsfunktionen von Containervirtuali...Docker Security - Architektur und Sicherheitsfunktionen von Containervirtuali...
Docker Security - Architektur und Sicherheitsfunktionen von Containervirtuali...
 
EntwicklerCamp 2014 - DOTS reloaded
EntwicklerCamp 2014 - DOTS reloadedEntwicklerCamp 2014 - DOTS reloaded
EntwicklerCamp 2014 - DOTS reloaded
 
docker.io - Secure And Portable Containers Made Easy
docker.io - Secure And Portable Containers Made Easydocker.io - Secure And Portable Containers Made Easy
docker.io - Secure And Portable Containers Made Easy
 
Entwicklungsumgebungen - Packer, Vagrant, Puppet
Entwicklungsumgebungen - Packer, Vagrant, PuppetEntwicklungsumgebungen - Packer, Vagrant, Puppet
Entwicklungsumgebungen - Packer, Vagrant, Puppet
 
Docker Workshop Experten Forum Stuttgart 2015, Agile Methoden GmbH
Docker Workshop Experten Forum Stuttgart 2015, Agile Methoden GmbHDocker Workshop Experten Forum Stuttgart 2015, Agile Methoden GmbH
Docker Workshop Experten Forum Stuttgart 2015, Agile Methoden GmbH
 
JavaScript für Java-Entwickler W-JAX 2013
JavaScript für Java-Entwickler W-JAX 2013JavaScript für Java-Entwickler W-JAX 2013
JavaScript für Java-Entwickler W-JAX 2013
 
docker.io @ CentOS 7 - Secure And Portable Containers Made Easy
docker.io @ CentOS 7 - Secure And Portable Containers Made Easydocker.io @ CentOS 7 - Secure And Portable Containers Made Easy
docker.io @ CentOS 7 - Secure And Portable Containers Made Easy
 
Infrastructure as Code - BaselOne 17
Infrastructure as Code - BaselOne 17Infrastructure as Code - BaselOne 17
Infrastructure as Code - BaselOne 17
 
systemd & Docker
systemd & Dockersystemd & Docker
systemd & Docker
 
Windows 10 IoT Core
Windows 10 IoT CoreWindows 10 IoT Core
Windows 10 IoT Core
 
Deploy Magento Shops with Capistrano v3
Deploy Magento Shops with Capistrano  v3Deploy Magento Shops with Capistrano  v3
Deploy Magento Shops with Capistrano v3
 
Tipps und Tricks im Umgang mit Docker
Tipps und Tricks im Umgang mit DockerTipps und Tricks im Umgang mit Docker
Tipps und Tricks im Umgang mit Docker
 

Ähnlich wie MongoDB: Security-Tipps gegen Hacker

Einführung in Puppet und Vagrant
Einführung in Puppet und VagrantEinführung in Puppet und Vagrant
Einführung in Puppet und Vagrant
s0enke
 
High Security PHP Applications
High Security PHP ApplicationsHigh Security PHP Applications
High Security PHP Applications
guest0e6d5e
 
TYPO3 5.0 - Der aktuelle Stand der Zukunft
TYPO3 5.0 - Der aktuelle Stand der ZukunftTYPO3 5.0 - Der aktuelle Stand der Zukunft
TYPO3 5.0 - Der aktuelle Stand der Zukunft
Jochen Rau
 

Ähnlich wie MongoDB: Security-Tipps gegen Hacker (20)

Einführung in Puppet und Vagrant
Einführung in Puppet und VagrantEinführung in Puppet und Vagrant
Einführung in Puppet und Vagrant
 
Yes zu NoSQL mit MongoDB für .NET-Entwickler
Yes zu NoSQL mit MongoDB für .NET-EntwicklerYes zu NoSQL mit MongoDB für .NET-Entwickler
Yes zu NoSQL mit MongoDB für .NET-Entwickler
 
Webanwendungen - Installation, Konfiguration und Administration
Webanwendungen - Installation, Konfiguration und AdministrationWebanwendungen - Installation, Konfiguration und Administration
Webanwendungen - Installation, Konfiguration und Administration
 
MongoDB - Big Data mit Open Source
MongoDB - Big Data mit Open SourceMongoDB - Big Data mit Open Source
MongoDB - Big Data mit Open Source
 
Back to Basics – Webinar 2: Ihre erste MongoDB-Anwendung
Back to Basics – Webinar 2: Ihre erste MongoDB-AnwendungBack to Basics – Webinar 2: Ihre erste MongoDB-Anwendung
Back to Basics – Webinar 2: Ihre erste MongoDB-Anwendung
 
Webinar: Online Security
Webinar: Online SecurityWebinar: Online Security
Webinar: Online Security
 
Vortrag WordPress absichern beim Webmontag Hannover am 16.01.2017
Vortrag WordPress absichern beim Webmontag Hannover am 16.01.2017Vortrag WordPress absichern beim Webmontag Hannover am 16.01.2017
Vortrag WordPress absichern beim Webmontag Hannover am 16.01.2017
 
Automatischer Build mit Maven - OPITZ CONSULTING - Stefan Scheidt
Automatischer Build mit Maven - OPITZ CONSULTING - Stefan ScheidtAutomatischer Build mit Maven - OPITZ CONSULTING - Stefan Scheidt
Automatischer Build mit Maven - OPITZ CONSULTING - Stefan Scheidt
 
Der oracle dba_und_seine_passwoerter
Der oracle dba_und_seine_passwoerterDer oracle dba_und_seine_passwoerter
Der oracle dba_und_seine_passwoerter
 
Software Entwicklung im Team
Software Entwicklung im TeamSoftware Entwicklung im Team
Software Entwicklung im Team
 
MongoDB Munich 2012: Spring Data MongoDB
MongoDB Munich 2012: Spring Data MongoDBMongoDB Munich 2012: Spring Data MongoDB
MongoDB Munich 2012: Spring Data MongoDB
 
Joomla
JoomlaJoomla
Joomla
 
Sicherheit in Single-Page-Web-Anwendungen
Sicherheit in Single-Page-Web-AnwendungenSicherheit in Single-Page-Web-Anwendungen
Sicherheit in Single-Page-Web-Anwendungen
 
bccon-2014 adm01 tipps-und-skripts-aus-dem-leben-eines-ibm-connections-admins
bccon-2014 adm01 tipps-und-skripts-aus-dem-leben-eines-ibm-connections-adminsbccon-2014 adm01 tipps-und-skripts-aus-dem-leben-eines-ibm-connections-admins
bccon-2014 adm01 tipps-und-skripts-aus-dem-leben-eines-ibm-connections-admins
 
Tipps und Skripts aus dem Leben eines Connections Admins
Tipps und Skripts aus dem Leben eines Connections AdminsTipps und Skripts aus dem Leben eines Connections Admins
Tipps und Skripts aus dem Leben eines Connections Admins
 
Dnug35 ak-dev.071111-beyond
Dnug35 ak-dev.071111-beyondDnug35 ak-dev.071111-beyond
Dnug35 ak-dev.071111-beyond
 
High Security PHP Applications
High Security PHP ApplicationsHigh Security PHP Applications
High Security PHP Applications
 
Ionic 2 - Hybridapps auf Steroiden
Ionic 2 - Hybridapps auf SteroidenIonic 2 - Hybridapps auf Steroiden
Ionic 2 - Hybridapps auf Steroiden
 
TYPO3 5.0 - Der aktuelle Stand der Zukunft
TYPO3 5.0 - Der aktuelle Stand der ZukunftTYPO3 5.0 - Der aktuelle Stand der Zukunft
TYPO3 5.0 - Der aktuelle Stand der Zukunft
 
Azure Days 2019: Master the Move to Azure (Konrad Brunner)
Azure Days 2019: Master the Move to Azure (Konrad Brunner)Azure Days 2019: Master the Move to Azure (Konrad Brunner)
Azure Days 2019: Master the Move to Azure (Konrad Brunner)
 

Mehr von Gregor Biswanger

Multi Touch.Prio.Conference 2009
Multi Touch.Prio.Conference 2009Multi Touch.Prio.Conference 2009
Multi Touch.Prio.Conference 2009
Gregor Biswanger
 

Mehr von Gregor Biswanger (6)

MongoDB: Entwurfsmuster für das NoSQL-Schema-Design
MongoDB: Entwurfsmuster für das NoSQL-Schema-DesignMongoDB: Entwurfsmuster für das NoSQL-Schema-Design
MongoDB: Entwurfsmuster für das NoSQL-Schema-Design
 
Fachmodell-First: Einstieg in das NoSQL-Schema-Design
Fachmodell-First: Einstieg in das NoSQL-Schema-DesignFachmodell-First: Einstieg in das NoSQL-Schema-Design
Fachmodell-First: Einstieg in das NoSQL-Schema-Design
 
Clevere Tipps zum Thema Facebook Posts
Clevere Tipps zum Thema Facebook PostsClevere Tipps zum Thema Facebook Posts
Clevere Tipps zum Thema Facebook Posts
 
Responsive Webdesign mit Bootstrap
Responsive Webdesign mit BootstrapResponsive Webdesign mit Bootstrap
Responsive Webdesign mit Bootstrap
 
Intel XDK: Cross-Plattform Entwicklung – Apps Entwickeln für alle Plattformen...
Intel XDK: Cross-Plattform Entwicklung – Apps Entwickeln für alle Plattformen...Intel XDK: Cross-Plattform Entwicklung – Apps Entwickeln für alle Plattformen...
Intel XDK: Cross-Plattform Entwicklung – Apps Entwickeln für alle Plattformen...
 
Multi Touch.Prio.Conference 2009
Multi Touch.Prio.Conference 2009Multi Touch.Prio.Conference 2009
Multi Touch.Prio.Conference 2009
 

MongoDB: Security-Tipps gegen Hacker

  • 1. MongoDB Security-Tipps gegen Hacker Gregor Biswanger | Freier Dozent, Berater, Trainer und Autor about.me/gregor.biswanger
  • 2. Über mich  Freier Dozent, Berater und Trainer  Schwerpunkte Softwarearchitektur, XAML, Web und Cross-Plattform Entwicklung  Technologieberater für die Intel Developer Zone  Sprecher auf Konferenzen und User Groups  Freier Autor für heise.de, dotnetpro, WindowsDeveloper und viele weitere Fachmagazine  Video-Trainer bei video2brain und MicrosoftGregor Biswanger Microsoft MVP, Intel Black Belt & Intel Software Innovator cross-platform-blog.de about.me/gregor.biswanger
  • 3. Legal Disclaimer The information provided in this session is to be used for educational purposes only. The speaker is in no way responsible for any misuse of the information provided. All of the information in this session is meant to help the attendees develop a hacker defense attitude in order to prevent the attacks discussed. In no way should you use the information to cause any kind of damage directly or indirectly. The word „Hack“ or „Hacking“ in this session should be regarded as „Ethical Hack“ or „Ethical hacking“ respectvely.
  • 4. Unser Reiseplan  Aktuelles Problem  Security von MongoDB  Basis Authentifizierung  Zugriff mit Authentifizierung  Robomongo  Setup-Script zur Authentifizierung  Weitere Top Security Tipps
  • 6. MongoDB Apocalypse 2017  Bei MongoDB ist per Standard keine Security aktiv  Anfang 2017 wurden mehrere tausend MongoDB-Server gehackt  Die Daten wurden geklaut und anschließend durch eine Lösegeld Aufforderung ersetzt
  • 7. Das kann EUCH auch passieren!
  • 8. Suchmaschinen von Servern mit „offenen“ Ports  https://www.shodan.io  https://censys.io  https://www.zoomeye.org Quelle: zoomeye
  • 10. Eigenes Netzwerk schon gescannt?  Kostenloser Security Port Scanner: NMAP  https://nmap.org  Läuft unter Windows, Mac und Linux  Nmap ist sowohl bei Angreifern als auch bei Administratoren sehr beliebt, da es sehr effizient und zuverlässig arbeitet.  In einigen Filmen kommt Nmap vor: In Matrix Reloaded hackt sich der Charakter Trinity mithilfe des 2001 entdeckten SSH1-CRC32-Exploit in ein Kraftwerk ein, nachdem sie den Rechner mit Nmap gescannt hat.  In dem Film Battle Royale wird der Quelltext von Nmap gezeigt. Des Weiteren wird in Das Bourne Ultimatum die damalige Beta-Version 4.01 mit der grafischen Oberfläche Zenmap benutzt.
  • 14. Kein öffentlichen Zugriff auf die MongoDB! Application Mongo Public / Other
  • 15. Firewall Regeln  Zugriff nur auf den Application-Server beschränken  Zugriff nur auf den Mongo-Port beschränken  Am besten keinen Standard Mongo-Port verwenden
  • 16. Mongo Server IP Konfiguration  In der Mongo Konfigurationsdatei ebenfalls nur erlaubte IP-Adressen hinterlegen  Verwende dazu die bindIp Option  Oder auch als Start-Parameter „mongod --bind_ip 255.255.255.255“  Lokale IP-Adressen werden immer erlaubt systemLog: destination: file path: "/var/log/mongodb/mongod.log" logAppend: true storage: journal: enabled: true processManagement: fork: true net: bindIp: 127.0.0.1 port: 27017 setParameter: enableLocalhostAuthBypass: false ...
  • 18. Authentifizierung und Autorisierung „Wer bist du?“ „Was möchtest du machen?“ „OK!“ „Bob“ „Eine Collection lesen“
  • 19. Es gibt eine Vielzahl an Aktionen „Was möchtest du machen?“ „Eine Collection lesen“  Read Collection  Write Document  List Collection  Create User  Create Database  Backup  Restore  Administer Shards  Kill Cursor  …
  • 20. Autorisierung mit Rollen „Was möchtest du machen?“ „Eine Collection lesen“  readWrite  Read Collection  Write Document  List Collection  …  userAdmin  Create User  Grant User Permissions  …  dbAdmin  dbStats  repairDatabase  …
  • 21. Die Rolle: Root  Darf ALLES!  Sollte so gut wie gar nicht benutzt zum Einsatz kommen!  Darf niemand weitergegeben werden!
  • 22. Die Rolle: userAdminAnyDatabase  Darf sehr viel!  Sollte nur zum Verwalten von Benutzer zum Einsatz kommen  Kann Benutzer anlegen  Kann Rechte von Benutzer verwalten  Kann sich selbst höhere Rechte geben
  • 23. Die Rolle: read  Lesen von Collections  Nur auf speziell hinterlegte Datenbank
  • 24. Die Rolle: readWrite  Lesen und schreiben von Collections  Nur auf speziell hinterlegte Datenbank
  • 25. Die ersten Schritte zum Einrichten der internen Authentifizierung 1. Starte Mongo ohne Authentifizierung (Automatisch Root-Rechte) 2. Lege einen Benutzer an mit der Rolle userAdminAnyDatabase für die interne admin Datenbank 3. Starte Mongo erneut mit Authentifizierung 4. Einloggen mit der Mongo-Shell und dem neuen Admin-Benutzer Account 5. Wechsle zum Kontext der gewünschten Datenbank und erzeuge von dort aus einen Benutzer mit passenden Rollen 6. Ggf. eigene Rollen erzeugen oder Benutzer explizit einzelne Aktionen zuweisen
  • 26. 1. Starte Mongo ohne Authentifizierung (Automatisch Root-Rechte)
  • 27. 2. Lege einen Benutzer an mit der Rolle userAdminAnyDatabase für die interne admin Datenbank
  • 28. 3. Starte Mongo erneut mit Authentifizierung
  • 29. 4. Einloggen mit der Mongo-Shell und dem neuen Admin-Benutzer Account
  • 30. 5. Wechsle zum Kontext der gewünschten Datenbank und erzeuge von dort aus einen Benutzer mit passenden Rollen
  • 33. Authentifizierung via Connection-String const MongoClient = require('mongodb').MongoClient; // Connection URL var url = 'mongodb://appUser:123456@localhost:27017/myproject'; // Use connect method to connect to the server MongoClient.connect(url, function (error, db) { console.log("Connected successfully to server"); db.close(); });
  • 34. Authentifizierung via Code (Besser) const MongoClient = require('mongodb').MongoClient; // Connection URL var url = 'mongodb://localhost:27017/myproject'; // Use connect method to connect to the server MongoClient.connect(url, function (error, db) { console.log('Connected successfully to server'); db.authenticate('appUser', '123456', () => { console.log('Logged in as appUser'); db.close(); }); });
  • 36. Robomongo  Kostenloses MongoDB Management Tool  Läuft unter Windows, Mac und Linux  https://robomongo.org
  • 38. Scripting für die Mongo Shell  Ermöglicht das automatische Erstellen der Datenbank oder das verarbeiten von Administrationsaufgaben  Wird in JavaScript geschrieben  Nicht alle gewohnten JavaScript-Funktionen können genutzt werden  Wird nicht innerhalb einer Node.js-Instanz ausgeführt  Möglichkeiten und Dokumentation unter:  https://docs.mongodb.com/manual/tutorial/write-scripts-for-the-mongo- shell/#differences-between-interactive-and-scripted-mongo
  • 39. Setup-Script zur Authentifizierung var db = connect('localhost:27017/admin'); print('Create siteUserAdmin...'); var siteUserAdmin = { user: 'siteUserAdmin', pwd: '123456', roles: [ { role: 'userAdminAnyDatabase', db: 'admin' } ] }; db.createUser(siteUserAdmin); print('Switch to myproject db...'); db = db.getSiblingDB('myproject'); print('Create appUser...'); var appUser = { user: 'appUser', pwd: '123456', roles: [ { role: 'readWrite', db: 'myproject' } ] }; db.createUser(appUser); print('Finish! Your Database is ready...');
  • 42. Verschlüsselte Kommunikation  TLS/SSL für eingehende und ausgehende Kommunikation einsetzen  Schutz gegen Man-in-the-Middle-Angriff  Dokumentation:  https://docs.mongodb.com/manual/tutorial/configure-ssl/  mongod --sslMode requireSSL --sslPEMKeyFile /etc/ssl/mongodb.pem
  • 43. Datenbank Dateien verschlüsseln  Ab Version 3.2 gibt es Encrypted Storage Engine  MongoDB Enterprise only  Nur verfügbar für die WiredTiger Storage Engine (Normal Standard)  Dokumentation:  https://docs.mongodb.com/manual/core/security-encryption-at-rest  https://docs.mongodb.com/manual/tutorial/configure-encryption
  • 44. Backup System hinterlegen  Das Tool MongoDB OPS Manager ermöglicht das automatisierte Erzeugen von Backups  MongoDB Enterprise only  Dokumentation:  https://docs.opsmanager.mongodb.com/current/tutorial/nav/backup-use
  • 45. Mongo Shell Script JavaScript Support deaktivieren  Auf dem Production-System den Script JavaScript Support deaktivieren  Es werden nur Mongo spezifische Scripts erlaubt (wire protocol)  MongoDB mit folgenden Parameter ausführen:  mongod --dbpath=c:temp --auth --noscripting
  • 46. Monitoring aktivieren  Das Tool MongoDB OPS Manager ermöglicht das automatisierte Benachrichtigen (Alerts) bei sicherheitsrelevanten Aktionen  MongoDB Enterprise only  Dokumentation:  https://docs.opsmanager.mongodb.com/current/tutorial/manage-alert- configurations/
  • 47. Regelmäßig Updaten  MongoDB regelmäßig Updaten um sich vor neuen Exploits zu schützen  Hacker haben dafür eine Datenbank und greifen bei einer Attacke darauf zu:  https://www.exploit-db.com
  • 48. Mongoaudit einsetzen  Open-Source Tool zum Testen der MongoDB Security Einstellungen  https://mongoaud.it
  • 49. Letzter Tipp: Keine Security-Tipps ignorieren