MongoDB ist eine leistungsstarke NoSQL Datenbank. Dennoch ist die Security per Standard deaktiviert. Dass dies große Auswirkungen hat, zeigen regelmäßige Berichte, dass zahlreiche Firmen Opfer von Hacker-Attacken geworden sind. Sie steigen mit den Grundlagen von MongoDB´s Security ein und werden dann mit den wichtigsten Vorgehensweisen vertraut gemacht. Mit diesen Infos sind Sie gewappnet gegen üble Cyber-Angriffe.
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
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.
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
...
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
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();
});
});
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