Basics to Pro - Die Kurzfassung

Basics to Pro - Die Kurzfassung
Photo by Jordan Harrison / Unsplash

Wie man aus Netzwerkpaketen auf installierte Software schließen kann, oder eventuelle Probleme identifiziert... oder: Wie funktioniert ein Portscanner und welche Eigenschaften werden dabei ausgenutzt?

Das OSI-Model

Das OSI-Modell (Open Systems Interconnection) ist eine theoretische Grundlage zur Beschreibung von Netzwerkarchitekturen. Es besteht aus sieben Schichten, die die verschiedenen Funktionen eines Kommunikationssystems abdecken:

  1. Physikalische Schicht (Layer 1): Definiert die physische Verbindung zwischen den Geräten und die Übertragung von Bits über das physikalische Medium. Das kann mit Spannungen definiert sein (0V und 5V). Man könnte Eins und Null auch mit Skat-Karten definieren, wobei Rot einer Eins und schwarze Karten einer Null entsprechen könnte.
  2. Datenverbindungsschicht (Layer 2): Verantwortlich für den Zugriff auf das physische Medium, die Fehlererkennung und -korrektur auf der Bit-Ebene sowie die Adressierung von Netzwerkknoten.
  3. Netzwerkschicht (Layer 3): Bietet Routing-Funktionen und bestimmt den besten Weg für Datenpakete durch das Netzwerk. Hier erfolgt die IP-Adressierung.
  4. Transportschicht (Layer 4): Verwaltet den Datenfluss, stellt sicher, dass Daten korrekt ankommen und regelt den Verbindungsaufbau und -abbau. Beispiele sind TCP (Transmission Control Protocol) und UDP (User Datagram Protocol).
  5. Sitzungsschicht (Layer 5): Ermöglicht die Einrichtung, Aufrechterhaltung und Beendigung von Sitzungen zwischen Anwendungen.
  6. Darstellungsschicht (Layer 6): Kümmert sich um die Umwandlung von Daten in ein für die Anwendung verständliches Format, einschließlich Verschlüsselung und Komprimierung.
  7. Anwendungsschicht (Layer 7): Stellt Netzwerkdienste für Anwendungen bereit, ermöglicht den Datenaustausch zwischen Anwendungen und koordiniert die Kommunikation auf höherer Ebene.

Welches Protokoll wo angesiedelt ist, kann man hier gut erkennen:

Wenn aus dieser Definition nun Daten über das Netz transportiert werden sollen, werden die einzelnen Aufgaben ineinander geschachtelt:

Nachdem also geklärt ist, wie ein Bit definiert ist (Glasfaser oder Kupfer - Licht oder Spannung...) müssen wir definieren, wie wir Geräte in diesem Netz finden können.

ARP

Das ARP-Protokoll (Address Resolution Protocol) ermöglicht die Zuordnung von IP-Adressen zu physischen MAC-Adressen in einem lokalen Netzwerk. Hier ist eine kurze Erklärung, wie es funktioniert:

  1. Anfrage (ARP Request): Ein Gerät, das die MAC-Adresse eines anderen Geräts mit einer bestimmten IP-Adresse benötigt, sendet einen ARP-Anfrage-Broadcast ins Netzwerk. Diese Anfrage enthält die Ziel-IP-Adresse, für die die passende MAC-Adresse gesucht wird.
  2. Antwort (ARP Reply): Das Gerät, das die angeforderte IP-Adresse besitzt, antwortet auf die ARP-Anfrage und sendet seine eigene MAC-Adresse als Antwort zurück. Dies geschieht als ARP-Reply und wird an die ursprünglich anfragende MAC-Adresse gesendet.
  3. Aktualisierung der ARP-Tabelle: Das anfragende Gerät empfängt die ARP-Antwort und aktualisiert seine ARP-Tabelle, die eine Zuordnung von IP-Adressen zu den dazugehörigen MAC-Adressen enthält. Diese Tabelle dient dazu, zukünftige Kommunikation im Netzwerk zu beschleunigen, da das Gerät nun die MAC-Adresse des Zielgeräts kennt.
https://upload.wikimedia.org/wikipedia/commons/f/fd/ARP_und_Routing.png

ARP stellt also eine Zuordnung zwischen der gerufenen IP-Adresse und der MAC-Adresse des Gerätes dar, dem das Paket als nächstes zugestellt werden soll.

Und so sieht das dann aus. Oben die Erzeugung des Datenverkehrs und unten die Netzanalyse mittels tcpdump und gesetzten Filtern auf das ARP-Protokoll:

0:00
/

Man kann gut erkennen, dass vor dem Ping herausgefunden werden muss, wer mit wem kommunizieren soll.

Das lässt sich auch leicht zum Scannen nach Geräten im lokalen Netz nutzen. Man schickt einfach ARP-Anfragen an alle Geräte und beobachtet die Antworten. Diese bekommt man auch dann, wenn eine lokale Firewall die Prüfung per Ping verbietet:

0:00
/

Um die Erreichbarkeit eines Hosts zu prüfen, wird häufig der Befehl ping genutzt. Er zieht das ICMP-Protokoll heran.

ICMP

ICMP (Internet Control Message Protocol) ist ein Netzwerkprotokoll, das in IP-Netzwerken verwendet wird, um Fehlermeldungen und Steuerungsinformationen über den Zustand des Netzwerks zu übertragen. Es wird oft für Diagnose- und Fehlerbehebungszwecke eingesetzt, insbesondere bei der Kommunikation zwischen Netzwerkkomponenten wie Routern und Hosts. ICMP-Nachrichten umfassen beispielsweise "Ping"-Anfragen und -Antworten für die Überprüfung der Netzwerkkonnektivität.

Auch hier können wir wieder direkt auf dem Kabel zuschauen, was genau passiert:

0:00
/

Doch IP-Adressen sind schwer zu merken. Wie funktioniert die Zuordnung zwischen Hostnamen und IP-Adressen?

DNS

Um die IP-Adresse zu einem Hostnamen herauszufinden, muss der Client einen Nameserver fragen. Meist weist die heimische Fritzbox dem Client zu, wo er nachzufragen hat - was meist die Fritzbox selbst ist. Sie leitet dann die Anfrage an einen Nameserver weiter und liefert dessen Antwort an den Client zurück.

In unserem Beispiel fragen wir nach www.google.de. Der Nameserver liefert verschiedene Adressen zurück, aus denen der Client wählen kann:

0:00
/

Das Zusammenspiel

Was passiert, wenn wir www.heise.de anpingen wollen? Dabei müssen alle bisher genannten Aktionen ausgeführt werden:

  • Um den Namen auflösen zu können, muss der Nameserver erreicht werden. Er hat die 10.0.0.254. Daher muss als erstes seine MAC-Adresse ermittelt werden.
  • Dann kann die Frage nach www.heise.de an ihn gerichtet werden.
  • Der Nameserver antwortet mit der 193.99.144.85.
  • Jetzt endlich kann der Client sein ICMP-Paket Richtung 193.99.144.85 schicken
  • Schließlich erhält er eine Antwort von www.heise.de zurück.

Stimulus And Response

Wie funktioniert nun normaler Datentransfer? Und wie signalisieren sich die Maschinen, wenn es zu Problemen kommt? Das schauen wir uns etwas genauer an.

TCP

In Dokumentationen findet man meist nur die Rede vom 3-Way-Handshake.

Doch wie sieht dieser in der Praxis aus? Wir stellen das einmal nach und beobachten, was genau auf dem Kabel zu sehen ist. Dabei ist oben der Client, der eine Anfrage stellen möchte. In der Mitte ist der Server, der den Service zur Verfügung stellt. Unten sehen wir, was im Netz passiert:

0:00
/

Beim Verbindungsaufbau sind die erwarteten Pakete gut zu erkennen:

Doch was passiert, wenn der Dienst nicht gestartet wurde? Wie kann der Server das dem Client mitteilen?

TCP closed Port

In der Dokumentation heißt es, der Server antwortet mit einem RST Paket, falls der Service nicht gestartet ist:

Auch das wollen wir in der Praxis sehen. Wir starten daher keinen Service auf dem Server und rufen trotzdem vom Client aus. Was dabei im Netz zu sehen ist, sehen wir hier:

0:00
/

Deutlich zu sehen sind wieder das SYN-Flag [S] und das RST-Flag [R]. Der Punkt repräsentiert jeweils die Bestätigung, daß das vorangegangene Paket empfangen wurde ACK:

Sollte man auf einer Firewall also RST-Pakete sehen, wird man den Kunden sicherlich sofort die Frage stellen, ob er auf dem Server seinen Service überhaupt gestartet hat.

Doch wie verhält es sich bei anderen Protokollen, die vielleicht keine Flags besitzen?

UDP

UDP (User Datagram Protocol) ist ein einfach strukturiertes Transportprotokoll für die Übertragung von Daten über ein IP-Netzwerk. Es arbeitet auf der Transportschicht des OSI-Modells und bietet eine verbindungslose Kommunikation ohne Aufbau einer vorherigen Verbindung. UDP überträgt Daten in Form von Datagrammen, wobei die Pakete unabhängig voneinander versendet werden und keine Bestätigung des Empfangs erfolgt. Es eignet sich gut für Anwendungen, bei denen eine gewisse Paketverlusttoleranz akzeptabel ist, wie bei Echtzeit-Streaming, Voice-over-IP (VoIP) und DNS. Da UDP weniger Overhead hat als TCP, ist es effizienter, aber es bietet keine Garantien bezüglich der Reihenfolge oder Zuverlässigkeit der Übertragung. Man würde sich in einem Video daher wenig daran Stören, wenn für eine fünfundzwanzigstel Sekunde ein Pixel etwas heller wäre.

Doch wie sieht das im Netz aus? Wir betrachten wieder erst eine normale Verbindung. Da UDP jedoch keine eigene Signalisierung besitzt, können Pakete nur auf den Weg gebracht werden. Ob sie ankommen wird nicht zurückgemeldet:

0:00
/

Der Client kann offensichtlich nicht erkennen, ob das Paket angekommen ist, oder vielleicht durch eine Firewall geblockt wurde. Die Pakete laufen nur in eine Richtung. Es scheint auch, dass die Länge der übertragenen Nachricht immer um eins größer ist. Doch der Zeilenumbruch CR ist ja auch ein Zeichen :-)

UDP closed Port

Doch was, wenn wir einen Nameserver erreichen wollen? Man stelle sich vor, der Service läuft garnicht auf dem Server. Dann muss der Server dem Client irgendwie Bescheid geben, dass der Dienst nicht zur Verfügung steht.

Dazu behilft sich der Server durch Nutzung von ICMP. Er meldet zurück, das der Port nicht erreichbar ist:

0:00
/

Wir können im Netz sehen, dass die Antwort udp port unreachable am Client durch Connection refused angezeigt wird.

Portscanner

All diese Erkenntnisse können wir nun nutzen, um in Erfahrung zu bringen, welche Dienste auf einem Rechner gestartet sind. Wir wissen ja, dass auf ein SYN Paket drei Antworten möglich sind:

  • SYN/ACK: Der gerufene Dienst läuft
  • RST: Der gerufene Dienst läuft nicht
  • Keine Antwort: Vielleicht droppt eine Firewall das Paket, oder der Server kennt den Rückweg nicht.

Auch im Falle von UDP können wir erkennen, wenn der Dienst nicht läuft. Anhand folgender Antworten:

  • Keine Antwort: Das ist normal. Der Dienst läuft. Oder aber: Er wurde von einer Firewall gedroppt. Beides wäre möglich.
  • port unreachable: Der Dienst läuft definitiv nicht.
0:00
/

Meist Antwortet der Server auch mit einem Banner, in dem er erklärt, welches Programm genau den Dienst erbringt. Daraus können wir dann ermitteln, welche Angriffe vielleicht Erfolg versprechen. Aus diesem Grund gehen Angriffen meist Portscans voraus:

0:00
/

Es ist daher klar zu erkennen: Das Anbieten ungewollter oder nicht notwendiger Dienste im Internet kann zu Sicherheitsrisiken führen, da Angreifer diese Dienste ausnutzen können, um unautorisierten Zugriff auf ein System zu erlangen. Hier besteht ein Zusammenhang mit Portscans:

Portscans:

  • Ein Portscan ist eine Methode, bei der ein Angreifer versucht, offene Netzwerkports auf einem Server oder einer Netzwerkressource zu identifizieren. Ein offener Port bedeutet, dass ein bestimmter Dienst auf diesem Port läuft und möglicherweise angreifbar ist.

Unerwünschte Dienste:

  • Wenn ungewollte Dienste aktiviert sind und auf bestimmten Ports laufen, erhöht dies die Angriffsfläche. Ein Angreifer kann durch einen Portscan leicht feststellen, welche Dienste auf einem System verfügbar sind.

Sicherheitslücken und Schwachstellen:

  • Unerwünschte Dienste können Sicherheitslücken oder Schwachstellen aufweisen, die von Angreifern ausgenutzt werden können, um Zugriff zu erlangen, Schadcode einzuschleusen oder andere schädliche Aktivitäten durchzuführen.

Prinzip des geringsten Privilegs:

  • Das Prinzip des geringsten Privilegs besagt, dass Systeme nur die Dienste und Funktionen aktivieren sollten, die unbedingt erforderlich sind. Das Deaktivieren unnötiger Dienste minimiert die potenzielle Angriffsfläche und erhöht die Sicherheit.

Firewall-Konfiguration:

  • Das Deaktivieren ungenutzter Dienste erleichtert auch die Verwaltung von Firewalls, da weniger Regeln konfiguriert werden müssen. Dies trägt dazu bei, den Datenverkehr zu steuern und zu überwachen.

Zusammenfassend ist es wichtig, nur die Dienste zu aktivieren, die für die Funktionalität und Sicherheit eines Systems notwendig sind, um das Risiko von Angriffen zu minimieren und eine bessere Kontrolle über die Netzwerksicherheit zu gewährleisten. Denn es ist nur eine Frage der Zeit, bis ein offener Service gefunden wird.

Gerade durch Analyse des Netzwerkverkehrs, in dem auch Usernamen und Passwörter enthalten sein können, können nicht nur Konfigurationsfehler identifiziert werden. Man sollte sich auch bewusst sein, dass die Daten nicht nur abgegriffen, sondern auch verändert werden könnten. An Proxies und Firewalls kann besonders leicht der Datenverkehr manipuliert werden.

tcpdump -i eth0 -l -w - port 8500 | sed 's/ACCEPTED/DENIED/g' | tcpreplay --fixcsum --fixlen -i eth0 -

Mit diesem Befehl kann auf einer Firewall dem Client vorgespielt werden, daß sein Antrag abgelehnt wurde, obwohl er eigentlich angenommen wurde. Mit ein wenig mehr Aufwand könnte man auch mathematische Änderungen vornehmen. Zum Beispiel bei GPS Daten oder Rückmeldungen über freien Festplattenplatz, um den Client davon abzuhalten, Daten zu übertragen...

Wie man sieht, sind die Möglichkeiten der Datenmanipulation nur von der Fantasie des Angreifers abhängig und seinen Möglichkeiten, auf ein Netz zuzugreifen. Und da eignen sich Firewalls besonders gut, da hier meist viele Netze angeschlossen sind...