Du solltest niemals eine Datenbank offen zugänglich im Internet lassen. Auch nicht kurz. Auch nicht eine Testdatenbank. Auch nicht auf einem anderen Port. Niemals! Warum das so ist zeige ich dir mit einem kleinen Experiment. «Ungesichert» bedeutet, dass die Datenbank erstens über einen Port von außen erreichbar ist und zweitens dass diese über keine Zugangs-Credentials verfügt. Jede Person kann sich also einloggen und die Daten ansehen oder verändern.
Ein MongoDB Honeypot
Für das Experiment habe ich MongoDB gewählt. Ich starte mit Hilfe von Docker einfach eine neue Instanz auf einem Server und weise der Anwendung den Port 27017 zu. Dieser Port ist der default Port für Mongo-Datenbanken.
sudo docker run -d \
--name honeypot-mongo \
-p 27017:27017 \
mongo:latest
Anschließend kann ich mich einfach mit einem Tool wie Robo 3T mit der Datenbank verbinden und eine Testdatenbank samt Testeinträgen anlegen. Ich lege einfach drei Records mit dem Inhalt «foo»:»bar» an:
Nun erst mal zurücklehnen. Kaffee trinken. Einen Tag warten.
Der nächste Tag 😨
Was ist das? Ich habe mich soeben mit meiner Datenbank verbunden und alle Daten sind weg. Nanu? Das ging aber schnell. Anstelle meiner Daten ist nur noch ein Readme-Eintrag in der Datenbank zu finden. In diesem ist die folgende Nachricht zu finden:
All your data is a backed up. You must pay 0.021 BTC to 17jHiu7FGUX8xcotaxBnxnNZRTqU86kr8b 48 hours for recover it. After 48 hours expiration we will leaked and exposed all your data. In case of refusal to pay, we will contact the General Data Protection Regulation, GDPR and notify them that you store user data in an open form and is not safe. Under the rules of the law, you face a heavy fine or arrest and your base dump will be dropped from our server! You can buy bitcoin here, does not take much time to buy https://localbitcoins.com or https://buy.moonpay.io/ After paying write to me in the mail with your DB IP: recmydb+1tizw@onionmail.org and you will receive a link to download your database dump.
Na toll! Meine foo:bar Datenbankeinträge sind Opfer einer Ransomware geworden! Hoffentlich werden diese nicht geleakt 😜! Aber 0.021 Bitcoin (~800 €) Lösegeld finde ich dafür doch etwas überzogen. Das lässt eigentlich nur einen Schluss zu: Das ist alles vollautomatisch passiert. Da schauen nicht mal mehr Leute drüber, die entscheiden, ob die Daten etwas taugen.
Was sagen die Logs?
Gleich eine Stunde nachdem die Datenbank am Netz war gab es erste eingehende Verbindungen. Insgesamt gab es innerhalb der 24 Stunden in denen der Test lief 10 Verbindungen von 6 verschiedenen IPs. Ausnahmslos alle IPs wurden von https://www.ipqualityscore.com/ mit sehr hohen Fraud-Scores von 93-99 Punkten eingestuft. Bei allen IPs handelte es sich um Tor-Exit-Nodes.
Titelbild: https://pixabay.com/de/photos/lost-places-verlassener-ort-raum-3035877/