Der Einbruchsweg, der in den letzten Jahren am zuverlässigsten funktioniert, führt nicht über die Anwendung, die man betreut. Er führt über die Oberfläche daneben: Hypervisor-Weboberfläche, Container-Verwaltung, Datenbank-Frontend, Backup-Konsole, VPN-Appliance. Alles Dinge, die man einmal aufgemacht hat, um schnell etwas zu erledigen.
Eine Verwaltungsoberfläche ist per Definition der Zugang mit den meisten Rechten. Wer sie übernimmt, braucht keine Rechteausweitung mehr, er ist schon oben. Gleichzeitig werden genau diese Oberflächen seltener aktualisiert als die Anwendung davor, weil sie „ja nur intern“ sind.
Wie lange dauert es, bis sie gefunden wird?#
Nicht Wochen. Der gesamte IPv4-Adressraum ist in Stunden durchscannbar, und mehrere Dienste tun das dauerhaft und veröffentlichen die Ergebnisse durchsuchbar. Ein frisch geöffneter Port 8006 ist keine Nadel im Heuhaufen, sondern ein Eintrag in einer Liste, die man nach Software und Version filtern kann.
Der Ablauf beim Angreifer ist industrialisiert: Scan nach Kennzeichen der Oberfläche, Abgleich mit bekannten Lücken für diese Version, automatisierter Versuch. Zwischen „Lücke veröffentlicht“ und „Massenausnutzung“ liegen bei Randgeräten regelmäßig Tage, der Zeitraum, den automatische Sicherheitsupdates für Distributionspakete schließen, für Appliances aber oft gar nicht abdecken.
Was bei dir tatsächlich offen ist#
Zuerst auf der Maschine:
sudo ss -tulpn | grep LISTEN
Typische Verdächtige und ihre Ports:
| Port | Was dort meistens hört |
|---|---|
| 8006 | Proxmox VE |
| 8007 | Proxmox Backup Server |
| 9000 / 9443 | Portainer |
| 3000 | Grafana |
| 5601 | Kibana |
| 9090 | Prometheus / Cockpit |
| 10000 | Webmin |
| 8080 | alles Mögliche, meistens ohne Anmeldung |
Und dann die Gegenprobe von außen, von einer anderen Maschine, nicht vom Server selbst:
nmap -Pn -p 80,443,3000,5601,8006,8007,8080,9000,9090,9443,10000 203.0.113.10
nmap -Pn -6 -p 8006 2001:db8::1 # IPv6 getrennt prüfen
„Die Oberfläche ist doch passwortgeschützt.“ Das war bei praktisch jeder ausgenutzten Appliance-Lücke der letzten Jahre auch so, ausgenutzt wurde die Anmeldemaske selbst, nicht das Passwort dahinter. Erreichbarkeit ist die Angriffsfläche, nicht die Anmeldung.
Die Reihenfolge, die trägt#
- Gar nicht veröffentlichen. Auf
127.0.0.1oder die interne Adresse binden, wie in Eingehend dichtmachen beschrieben. Bei Proxmox etwa hört die Oberfläche auf allen Adressen, begrenzt wird sie in der Firewall oder im davorliegenden Proxy, nicht in der Anwendung. - Zugang über ein Overlay-Netz, nicht über eine Portfreigabe: WireGuard statt offener Ports. Damit ist die Oberfläche für Scanner schlicht nicht vorhanden.
- Oder über einen Sprungserver, wenn ein VPN nicht passt: Sprungserver: eine Tür statt zwanzig.
- Wenn es doch offen sein muss: auf Quell-IP begrenzen, zweiter Faktor an, eigener Pfad, Protokollierung nach außen, in dieser Reihenfolge, absteigend nach Wirkung.
# nftables: Oberfläche nur aus dem Overlay- und Büronetz
nft add rule inet filter input ip saddr { 10.99.0.0/24, 198.51.100.0/28 } tcp dport 8006 accept
nft add rule inet filter input tcp dport 8006 drop
Was Randgeräte besonders macht#
Bei einer VPN- oder Firewall-Appliance greift der ganze Rest dieser Seite nicht: kein apt, keine unbeaufsichtigten Updates, oft kein SSH, manchmal kein Protokollversand. Dafür stehen sie per Definition am Rand und sind erreichbar.
Drei Fragen je Gerät, schriftlich beantwortet:
- Wer spielt Updates ein, und woher erfährt diese Person davon? Ein Herstellerbulletin, das niemand abonniert hat, ist kein Prozess, siehe Meldequellen ohne Rauschen.
- Bis wann gibt es überhaupt noch Firmware? Ein Gerät ohne Supportzusage ist ein Termin, kein Bestand.
- Was sieht man, wenn es übernommen wird? Bei Appliances meist nur den ausgehenden Verkehr, deshalb ausgehend begrenzen.
Prüfliste in fünf Minuten#
# 1. Was hört lokal?
sudo ss -tulpn | grep LISTEN | awk '{print $5, $7}'
# 2. Was davon ist von außen erreichbar? (von einer anderen Maschine)
nmap -Pn --top-ports 200 203.0.113.10
# 3. Antwortet dort eine Anmeldemaske?
curl -sS -o /dev/null -w '%{http_code} %{url_effective}\n' -k https://203.0.113.10:8006/
Wenn Schritt 3 eine Anmeldemaske findet, die nicht dort sein muss, ist das der Punkt, an dem der Feierabend wartet, nicht der nächste Sprint.
Ob eine konkrete Meldung zu einer dieser Oberflächen dich überhaupt betrifft, klärt Betroffenheit prüfen; wie du entscheidest, was zuerst drankommt, steht in Ausgenutzt schlägt kritisch.
Geschrieben aus dem laufenden Betrieb: MRMedia betreibt eigene Hosts, Kundendienste und deren Härtung in der EU. Eine veraltete Anleitung ist hier ein Sicherheitsproblem, kein Schönheitsfehler. Korrekturen bitte über Discord.