Lektion 1 von 9
Wie Angriffe ablaufen und was Härtung bringt
Du verstehst die Kette eines Ransomware-Angriffs, kennst die Grundsätze der Härtung und machst die Angriffsfläche eines Servers mit ss und PowerShell sichtbar.
Worum es geht
Montag, 7.30 Uhr bei der EW Rheintal AG in Buchs SG. Auf Maras Tisch liegt der Bericht eines externen Audits, 38 Seiten dick. Die Kurzfassung auf Seite 2 ist unangenehm deutlich: Admins arbeiten im Alltag mit vollen Rechten, auf allen Servern ist dasselbe lokale Administratorpasswort gesetzt, die Linux-Server sind seit Monaten nicht gepatcht, und Anmeldungen werden kaum protokolliert. Ihr Berufsbildner sagt: «Du übernimmst die Härtung der 12 Windows- und 4 Linux-Server. In sechs Wochen will die Geschäftsleitung einen Bericht.»
Das klingt nach viel Technik, und das ist es auch. Aber bevor du an einer einzigen Einstellung drehst, musst du verstehen, wogegen du härtest. Ein frisch installiertes Betriebssystem ist auf Bequemlichkeit eingestellt: Es soll mit möglichst vielen Geräten und Programmen sofort funktionieren. Angreifer lieben genau diese Bequemlichkeit. Die meisten erfolgreichen Angriffe auf Schweizer KMU, Gemeinden und Energieversorger nutzen keine geheimen Superlücken, sondern bekannte Schwächen: fehlende Updates, schwache oder mehrfach verwendete Passwörter, Konten mit zu vielen Rechten und Dienste, die niemand braucht und die trotzdem laufen.
In dieser Lektion lernst du, wie ein typischer Angriff abläuft, was die Angriffsfläche eines Systems ist und wie du sie mit zwei Befehlen sichtbar machst. Damit hast du das Raster, in das alle weiteren Lektionen passen.
Wie ein Angriff typischerweise abläuft
Ein Ransomware-Angriff ist selten ein einzelner Moment. Er ist eine Kette von Schritten, die oft Tage oder Wochen dauert. Das ist die gute Nachricht: Jedes Glied der Kette ist eine Chance, den Angreifer zu stoppen oder ihn wenigstens zu bemerken.
- Erstzugang. Jemand öffnet einen Phishing-Anhang, ein RDP- oder VPN-Zugang ohne Mehrfaktor-Anmeldung wird mit erratenen Passwörtern geöffnet, oder eine bekannte Lücke in einer aus dem Internet erreichbaren Anwendung wird ausgenutzt.
- Festsetzen. Der Angreifer installiert ein Werkzeug für den Fernzugriff und legt einen geplanten Task oder einen neuen Dienst an, damit er auch nach einem Neustart zurückkommt.
- Rechte ausweiten. Er liest zwischengespeicherte Anmeldedaten aus dem Arbeitsspeicher oder findet ein Konto mit Admin-Rechten. Arbeitet die betroffene Person selbst im Alltag als Admin, entfällt dieser Schritt ganz.
- Seitlich bewegen (Lateral Movement). Mit dem erbeuteten lokalen Admin-Passwort meldet er sich am nächsten Gerät an. Ist das Passwort überall gleich, steht ihm jetzt jedes Gerät offen.
- Daten abziehen. Vor der Verschlüsselung kopiert er Daten nach aussen, um zusätzlich mit einer Veröffentlichung drohen zu können.
- Verschlüsseln und erpressen. Er löscht erreichbare Backups und Schattenkopien und verschlüsselt alles, was er erreicht.
Schau dir an, wie die Themen dieses Kurses genau an diesen Stellen ansetzen:
| Phase | Was der Angreifer ausnutzt | Härtungsmassnahme | Lektion |
|---|---|---|---|
| Erstzugang | ungepatchte Lücke in exponiertem Dienst | Schwachstellenscan, Patch-Management | 2, 5 |
| Erstzugang | Passwort-Login an RDP, VPN, SSH | MFA, SSH-Schlüssel, fail2ban | 4, 7 |
| Festsetzen | niemand bemerkt einen neuen Dienst | Protokollierung, EDR, Alarme | 8 |
| Rechte ausweiten | Alltag mit Admin-Rechten | getrennte Admin-Konten, Least Privilege | 6 |
| Seitlich bewegen | gleiches lokales Admin-Passwort, SMBv1, NTLMv1 | Windows LAPS, Baseline, Tiering | 3, 6 |
| Daten abziehen | gestohlener Laptop, ausgebaute Disk | BitLocker, LUKS | 7 |
| Verschlüsseln | Backups online erreichbar, keine Reaktion geplant | Incident Response, Offline-Backup | 9 |
Bring die Phasen eines typischen Ransomware-Angriffs in die richtige Reihenfolge.
- 1
Erstzugang, z.B. über einen Phishing-Anhang oder einen RDP-Zugang ohne MFA
- 2
Festsetzen mit einem Fernzugriffswerkzeug, einem geplanten Task oder einem neuen Dienst
- 3
Daten nach aussen kopieren, um mit einer Veröffentlichung drohen zu können
- 4
Backups löschen, Daten verschlüsseln und Lösegeld fordern
- 5
Seitlich bewegen, z.B. mit dem überall gleichen lokalen Admin-Passwort
- 6
Rechte ausweiten, z.B. durch ausgelesene Anmeldedaten eines Admin-Kontos
Woher weisst du, welche Einfallstore gerade häufig genutzt werden? In der Schweiz veröffentlicht das Bundesamt für Cybersicherheit (BACS) laufend Warnungen und regelmässig Berichte über gemeldete Vorfälle. Ein Blick hinein lohnt sich: Die Muster wiederholen sich erstaunlich oft.
Ordne jedem Einfallstor die Härtungsmassnahme zu, die es am direktesten schliesst.
Angriffsfläche: Jede offene Tür zählt
Stell dir ein Haus vor. Jede Tür, jedes Fenster und jede Kellerluke ist ein möglicher Einstieg. Ein Haus mit zwei abgeschlossenen Türen ist leichter zu schützen als eines mit zwanzig halb offenen Fenstern, auch wenn die Schlösser gleich gut sind. Die Angriffsfläche eines Systems ist die Summe aller solcher Einstiege:
- Offene Netzwerkports und die Dienste dahinter (SSH, RDP, SMB, Webserver, Datenbank)
- Installierte Software, inklusive Browser, PDF-Reader, Java und Agents von Herstellern
- Konten mit ihren Passwörtern, Schlüsseln und Rechten
- Konfiguration, z.B. alte Protokolle wie SMBv1 oder NTLMv1, die nur aus Kompatibilitätsgründen aktiv sind
- Physischer Zugang, z.B. ein Server in einem Unterwerk, zu dem viele Leute einen Schlüssel haben
Härtung (englisch hardening) bedeutet, diese Fläche gezielt zu verkleinern und den Rest robust zu konfigurieren. Vier Grundsätze ziehen sich durch den ganzen Kurs:
| Grundsatz | Bedeutung | Beispiel |
|---|---|---|
| Minimale Funktionalität | Nur installieren und starten, was gebraucht wird | Druckwarteschlange auf einem Server ohne Drucker deaktivieren |
| Minimale Rechte (Least Privilege) | Jedes Konto bekommt nur, was es für seine Aufgabe braucht | Das Backup-Dienstkonto ist nicht Domänen-Admin |
| Mehrere Schutzschichten (Defense in Depth) | Fällt eine Schicht, hält die nächste | Ein Patch fehlt, aber der Dienst ist nur intern erreichbar und wird überwacht |
| Sicher als Standard | Neue Systeme starten gehärtet, Ausnahmen müssen begründet werden | Neue Server landen automatisch in einer OU mit Baseline-GPO |
Auf dem neuen Fileserver der EW Rheintal läuft die Druckwarteschlange, obwohl über diesen Server nie gedruckt wird. Welcher Grundsatz spricht am direktesten dafür, sie zu deaktivieren?
Die Angriffsfläche sichtbar machen
Bevor du etwas abschaltest, misst du. Die wichtigste Frage lautet: Welche Dienste lauschen auf welchen Ports, und von wo sind sie erreichbar?
Unter Linux zeigt ss die lauschenden Sockets. Die Optionen bedeuten: -t TCP, -u UDP, -l nur lauschende Sockets, -n Zahlen statt Namen, -p den zugehörigen Prozess (braucht root).
sudo ss -tulnpUnter Windows liefert PowerShell dasselbe für TCP:
Get-NetTCPConnection -State Listen |
Select-Object LocalAddress, LocalPort,
@{ Name = 'Prozess'; Expression = { (Get-Process -Id $_.OwningProcess).ProcessName } } |
Sort-Object LocalPortEntscheidend ist die lokale Adresse:
| Lokale Adresse | Bedeutung | Erreichbar von |
|---|---|---|
0.0.0.0 oder * | alle IPv4-Schnittstellen | jedem Netz, mit dem der Server verbunden ist |
[::] bzw. :: | alle IPv6-Schnittstellen, oft auch IPv4 | ebenso |
127.0.0.1 bzw. [::1] | nur Loopback | nur Programme auf demselben Server |
10.10.20.15 | eine bestimmte Schnittstelle | nur über dieses Netz |
Ein Dienst auf 127.0.0.1 ist für einen Angreifer im Netz unsichtbar. Ein Dienst auf 0.0.0.0 ist so weit erreichbar, wie die Firewall es zulässt. Deshalb gilt: Was nur lokal gebraucht wird, bindest du an 127.0.0.1. Was gar nicht gebraucht wird, entfernst du.
Schritt für Schritt: Erste Bestandesaufnahme auf dem Intranet-Server
Mara beginnt mit srv-intra01, einem Debian-Server mit dem Intranet der EW Rheintal. Laut Dokumentation sollen nur SSH und der Webserver laufen.
Schritt 1: Lauschende Ports auflisten.
$ sudo ss -tlnp
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
LISTEN 0 128 0.0.0.0:22 0.0.0.0:* users:(("sshd",pid=812,fd=3))
LISTEN 0 80 0.0.0.0:3306 0.0.0.0:* users:(("mariadbd",pid=901,fd=21))
LISTEN 0 511 *:80 *:* users:(("apache2",pid=1001,fd=4))
LISTEN 0 4096 127.0.0.1:631 0.0.0.0:* users:(("cupsd",pid=700,fd=7))
LISTEN 0 128 [::]:22 [::]:* users:(("sshd",pid=812,fd=4))
LISTEN 0 64 0.0.0.0:111 0.0.0.0:* users:(("rpcbind",pid=455,fd=4))Schritt 2: Jede Zeile bewerten.
| Port | Dienst | Bindung | Gebraucht? | Entscheid |
|---|---|---|---|---|
| 22 | SSH | alle | ja, für die Administration | bleibt, wird in Lektion 4 gehärtet |
| 80 | Apache | alle | ja, Intranet | bleibt, später auf HTTPS umstellen |
| 3306 | MariaDB | alle | nur vom Webserver auf demselben Host | an 127.0.0.1 binden |
| 631 | CUPS (Drucken) | lokal | nein, der Server druckt nie | deinstallieren |
| 111 | rpcbind | alle | nein, kein NFS im Einsatz | deinstallieren |
Schritt 3: Laufende Dienste gegenprüfen. Manche Dienste lauschen nicht auf dem Netz und sind trotzdem überflüssig.
systemctl list-units --type=service --state=runningSchritt 4: Unnötiges entfernen. Deinstallieren ist besser als nur deaktivieren, denn was nicht installiert ist, muss auch nicht gepatcht werden.
sudo apt purge cups rpcbind
sudo apt autoremove --purgeSchritt 5: Datenbank nur lokal erreichbar machen. In /etc/mysql/mariadb.conf.d/50-server.cnf hat jemand bind-address = 0.0.0.0 eingetragen. Mara setzt die Zeile zurück und startet den Dienst neu:
sudo sed -i 's/^bind-address.*/bind-address = 127.0.0.1/' /etc/mysql/mariadb.conf.d/50-server.cnf
sudo systemctl restart mariadbSchritt 6: Nachher messen und dokumentieren. Erneut sudo ss -tlnp: Jetzt lauschen nur noch 22 und 80 auf allen Schnittstellen, 3306 nur noch auf 127.0.0.1. Das Intranet funktioniert weiterhin, weil Apache die Datenbank lokal anspricht. Mara notiert Vorher und Nachher im Härtungsprotokoll. Dieser Nachweis ist im Kompetenznachweis Gold wert.
Jetzt automatisierst du Schritt 2 mit Python: Ein Prüfskript liest die Ausgabe von ss und meldet alle Ports, die von aussen erreichbar sind und nicht auf der Freigabeliste stehen.
Code-Labor: Angriffsfläche aus der ss-Ausgabe
Du bekommst die Ausgabe von sudo ss -tlnp als Liste von Zeilen. Die Hilfsfunktion parse_zeile ist schon fertig: Sie macht aus einer Zeile ein Tupel (adresse, port, prozess) und gibt für die Kopfzeile None zurück.
Schreibe zwei Funktionen:
extern_erreichbar(zeilen)gibt eine Liste von(port, prozess)zurück für alle Dienste, die auf allen Schnittstellen lauschen (Adresse inALLE, also0.0.0.0,*,[::]oder::). Keine Duplikate (SSH lauscht oft auf IPv4 und IPv6), aufsteigend sortiert.unerwartet(zeilen, erlaubte_ports)gibt die aufsteigend sortierte Liste der Ports zurück, die von aussen erreichbar sind, aber nicht inerlaubte_portsstehen.
Dienste auf 127.0.0.1 oder [::1] sind nur lokal erreichbar und gehören nicht dazu.
Typische Fehler
- Abschalten, ohne zu messen. Wer nach Bauchgefühl Dienste stoppt, legt Anwendungen lahm oder übersieht den eigentlichen Risikodienst. Zuerst auflisten, dann bewerten, dann ändern, dann erneut messen.
- «Ist doch nur intern». Ein Datenbankport auf
0.0.0.0ist für jeden Client im Netz erreichbar. Nach einem erfolgreichen Phishing sitzt der Angreifer genau dort, also intern. - Nur deaktivieren statt deinstallieren. Deaktivierte Pakete bleiben auf dem System, tauchen in Scans auf und werden bei Updates oder von Kollegen leicht wieder aktiviert. Was nie gebraucht wird, kommt weg.
- IPv6 vergessen. Ein Dienst auf
[::]ist oft auch über IPv4 erreichbar, und eine Firewall, die nur IPv4-Regeln kennt, lässt IPv6 eventuell offen. - Keinen Vorher-Zustand festhalten. Ohne Vorher-Messung kannst du später weder beweisen, was du verbessert hast, noch nachvollziehen, warum etwas nicht mehr läuft.
Zusammenfassung
- Angriffe laufen als Kette ab: Erstzugang, Festsetzen, Rechte ausweiten, seitlich bewegen, Daten abziehen, verschlüsseln. Jede Härtungsmassnahme bricht oder beleuchtet ein Glied.
- Die Angriffsfläche besteht aus offenen Ports, Software, Konten, Konfiguration und physischem Zugang.
- Vier Grundsätze: minimale Funktionalität, minimale Rechte, mehrere Schutzschichten, sicher als Standard.
ss -tulnp(Linux) undGet-NetTCPConnection -State Listen(Windows) zeigen, welche Dienste lauschen.0.0.0.0,*und[::]heissen «von überall»,127.0.0.1heisst «nur lokal».- Das Vorgehen ist immer gleich: messen, bewerten, ändern, erneut messen, dokumentieren.
Mit deiner eigenen KI vertiefen
Kopiere einen Prompt in Claude, ChatGPT oder Claude Code. Er macht die KI zur Lernbegleitung statt zum Lösungsautomaten.
Angriffskette und Gegenmassnahmen verstehen Chat-KI
Wenn du sehen willst, wie ein Angriff Schritt für Schritt abläuft und wo jede Härtungsmassnahme ansetzt. Die KI erklärt und prüft danach dein Verständnis.