8 Min

Das OSI Referenzmodell

Das OSI-Modell (Open Systems Interconnection Model) ist ein Referenzmodell, das die Funktionsweise von Netzwerken in sieben Schichten strukturiert und beschreibt, wie Daten zwischen verschiedenen Systemen in einem Netzwerk kommuniziert werden. Es wurde von der Internationalen Organisation für Normung (ISO) entwickelt, um die Kommunikation in Netzwerken zu standardisieren und zu vereinfachen.

Die sieben Schichten des OSI-Modells

  1. Schicht 1: Physikalische Schicht (Physical Layer)
    • Funktion: Zuständig für die Übertragung von Rohdaten (Bits) über ein physisches Medium, wie Kabel oder Funkwellen. Sie definiert mechanische, elektrische und funktionale Spezifikationen für die Aktivierung, Wartung und Deaktivierung physischer Verbindungen.
    • Beispiele: Netzwerkkabel (Ethernet), Funktechnologien (WLAN, Bluetooth), Signalverstärker.
  2. Schicht 2: Sicherungsschicht (Data Link Layer)
    • Funktion: Stellt die zuverlässige Übertragung von Datenrahmen (Frames) über eine physische Verbindung sicher, erkennt und korrigiert Fehler auf der physikalischen Schicht und sorgt für die Kontrolle des Datenflusses.
    • Unterteilungen: Die Sicherungsschicht wird oft in zwei Teilschichten unterteilt:
      • MAC (Media Access Control): Verantwortlich für die physische Adressierung (MAC-Adressen) und den Zugang zum Übertragungsmedium.
      • LLC (Logical Link Control): Zuständig für die Steuerung des Datenflusses und die Fehlererkennung.
    • Beispiele: Ethernet, Switches, MAC-Adressen, Wi-Fi.
  3. Schicht 3: Netzwerkschicht (Network Layer)
    • Funktion: Verwaltet die Adressierung und das Routing von Datenpaketen durch verschiedene Netzwerke und sorgt für die korrekte Zustellung der Daten an den Zielort. Sie verwendet logische Adressen, wie IP-Adressen.
    • Beispiele: Router, IP (Internet Protocol), ICMP (Internet Control Message Protocol).
  4. Schicht 4: Transportschicht (Transport Layer)
    • Funktion: Gewährleistet eine zuverlässige Datenübertragung zwischen Endsystemen, steuert den Datenfluss, segmentiert Daten in kleinere Einheiten und sorgt für die Fehlerkorrektur und Wiederherstellung von verlorenen Daten. Sie bietet entweder eine verbindungsorientierte (z.B. TCP) oder verbindungslosere Kommunikation (z.B. UDP).
    • Beispiele: TCP (Transmission Control Protocol), UDP (User Datagram Protocol).
  5. Schicht 5: Sitzungsschicht (Session Layer)
    • Funktion: Stellt Verbindungen (Sitzungen) zwischen zwei Endsystemen her, verwaltet diese und sorgt für die Synchronisierung des Datenflusses. Sie sorgt auch für die Wiederaufnahme von unterbrochenen Sitzungen.
    • Beispiele: Sitzungsverwaltung in Remote-Verbindungen (z.B. SMB, NFS, RPC).
  6. Schicht 6: Darstellungsschicht (Presentation Layer)
    • Funktion: Übersetzt die Daten in ein standardisiertes Format und sorgt dafür, dass die Daten von beiden Kommunikationspartnern verstanden werden können, indem sie unterschiedliche Kodierungen und Datenformate (wie Text, Binärdaten, Multimedia) konvertiert. Sie kümmert sich auch um die Verschlüsselung und Kompression.
    • Beispiele: Verschlüsselung (SSL/TLS), Datenkompression, Zeichensatzkodierung (z.B. ASCII, Unicode).
  7. Schicht 7: Anwendungsschicht (Application Layer)
    • Funktion: Diese Schicht stellt direkte Schnittstellen für Anwendungen bereit, um mit dem Netzwerk zu kommunizieren. Hier erfolgen die Interaktionen zwischen der Software des Endbenutzers und den Netzwerkdiensten.
    • Beispiele: HTTP, FTP, SMTP, DNS, POP3.

Datenfluss durch das OSI-Modell

Wenn Daten von einem Sender zu einem Empfänger übertragen werden, durchlaufen sie in einem Schicht-für-Schicht-Prozess die verschiedenen Ebenen des OSI-Modells:

  • Beim Sender: Die Daten werden von der Anwendungsschicht (Schicht 7) bis zur physikalischen Schicht (Schicht 1) verarbeitet und in Pakete, Segmente, Frames und schließlich in Bits umgewandelt, die über das physische Medium übertragen werden.
  • Beim Empfänger: Die empfangenen Bits durchlaufen den umgekehrten Prozess und werden von der physikalischen Schicht zurück bis zur Anwendungsschicht weitergereicht, wobei die Daten in ihre ursprüngliche Form umgewandelt werden.

Vorteile des OSI-Modells

  1. Standardisierung: Das OSI-Modell bietet ein standardisiertes Schema, um die Kommunikation zwischen verschiedenen Netzwerkgeräten und -technologien zu erleichtern.
  2. Modularität: Jede Schicht hat klar definierte Aufgaben und kann unabhängig von anderen Schichten weiterentwickelt werden.
  3. Fehlerbehebung: Durch die Trennung in Schichten wird die Fehlerdiagnose einfacher, da klar ist, welche Schicht für welchen Aspekt der Kommunikation verantwortlich ist.
  4. Interoperabilität: Es ermöglicht Geräten unterschiedlicher Hersteller und Technologien, miteinander zu kommunizieren.

Vergleich zum TCP/IP-Modell

Das TCP/IP-Modell, welches im Internet dominiert, ist ähnlich, jedoch einfacher strukturiert. Es besteht aus nur vier Schichten (Netzzugang, Internet, Transport und Anwendung) und ist weniger formal und flexibler als das OSI-Modell.


Wie jede OSI-Schicht angegriffen werden kann

Im OSI-Modell gibt es auf jeder Schicht potenzielle Angriffsvektoren, die von Cyberkriminellen ausgenutzt werden können. Hier ist eine Erklärung zu jeder Schicht des Modells mit einem entsprechenden Cyberangriff und ggf. Python-Code-Snippets, um die Angriffe zu verdeutlichen.

1. Angriff physikalische Schicht (Physical Layer)

Angriff: Jamming (Signalstörung)

  • Beschreibung: Ein Angreifer stört die physikalischen Übertragungen, indem er Funksignale stört oder das Netzwerk überflutet. Dies geschieht oft bei drahtlosen Netzwerken (z. B. WLAN), um den legitimen Datenverkehr zu unterbrechen.
  • Beispiel: Es gibt keine direkte Python-Implementierung, da physikalische Angriffe spezielle Hardware erfordern. Allerdings kann in drahtlosen Netzwerken die Signalstärke überwacht und Angriffe erkannt werden.

Verteidigung:

  • Frequenzsprungverfahren: Drahtlose Systeme können auf ein anderes Frequenzband wechseln, um Störungen zu vermeiden.
  • WLAN-Sicherheitstools: Tools wie WIDS (Wireless Intrusion Detection Systems) können verdächtige Aktivitäten erkennen und den Netzwerkschutz erhöhen.
  • Physische Sicherheit: Einschränkung des Zugangs zu Funkfrequenz-Hardware und Schutz wichtiger Infrastrukturen vor physischem Zugriff.

Angriff: MAC-Spoofing

  • Beschreibung: Der Angreifer ändert seine MAC-Adresse, um die Identität eines anderen Geräts im Netzwerk vorzutäuschen und Zugriff auf Netzwerkressourcen zu erhalten.
  • Beispiel in Python: Mit einer Bibliothek wie Scapy kann man MAC-Adressen manipulieren.
from scapy.all import *
def spoof_mac(interface, new_mac):
    # Setzt die MAC-Adresse des angegebenen Netzwerkschnittstelle
    os.system(f"ifconfig {interface} down")
    os.system(f"ifconfig {interface} hw ether {new_mac}")
    os.system(f"ifconfig {interface} up")
    print(f"MAC-Adresse von {interface} wurde auf {new_mac} geändert.")
    
spoof_mac("eth0", "00:11:22:33:44:55")

Verteidigung:

  • Port Security: Viele Switches unterstützen die MAC-Port-Sicherheit, die den Netzwerkzugriff auf bestimmte MAC-Adressen beschränkt. Unbekannte oder gefälschte MAC-Adressen werden blockiert.
  • Network Access Control (NAC): Verwendet, um Geräte anhand von Richtlinien zu authentifizieren, bevor sie Zugang zum Netzwerk erhalten. Ein gefälschtes Gerät wird nicht als vertrauenswürdig anerkannt.
  • Überwachung und Erkennung: Kontinuierliches Monitoring von MAC-Adressen und Alarmierung bei verdächtigen Änderungen kann helfen, Angriffe frühzeitig zu erkennen.

3. Angriff Netzwerkschicht (Network Layer)

Angriff: IP-Spoofing

  • Beschreibung: Bei IP-Spoofing ändert ein Angreifer seine IP-Adresse, um sich als vertrauenswürdiger Benutzer auszugeben. Dies wird oft verwendet, um Firewalls zu umgehen oder für DDoS-Angriffe.
  • Beispiel in Python: Wiederum kann Scapy verwendet werden, um IP-Pakete mit gefälschten IP-Adressen zu senden.
from scapy.all import *

# Sendet ein IP-Paket mit einer gefälschten Quell-IP-Adresse
packet = IP(src="1.2.3.4", dst="8.8.8.8") / ICMP()
send(packet)

Verteidigung:

  • Ingress- und Egress-Filterung: Internet Service Provider (ISP) und Netzwerkadministratoren können Filter einrichten, um gefälschte IP-Adressen zu blockieren (z. B. BCP 38). Nur gültige IP-Adressen werden durchgelassen.
  • Intrusion Detection Systems (IDS): Systeme wie Snort können verdächtigen Netzwerkverkehr analysieren und IP-Spoofing erkennen.
  • Authentifizierung auf höherer Ebene: Protokolle wie IPsec bieten eine sichere Authentifizierung und Verschlüsselung, die sicherstellt, dass Daten von der richtigen Quelle stammen.

4. Angriff Transportschicht (Transport Layer)

Angriff: SYN-Flood

  • Beschreibung: Ein Angreifer überflutet ein Zielsystem mit einer großen Anzahl an SYN-Anfragen, ohne die Verbindung abzuschließen, um die Ressourcen des Servers zu erschöpfen und legitimen Benutzern den Zugriff zu verweigern.
  • Beispiel in Python: Ein SYN-Flood kann mithilfe von Scapy simuliert werden.
from scapy.all import *

# SYN-Flooding-Angriff
def syn_flood(target_ip, target_port):
    for _ in range(1000):
        ip = IP(src=RandIP(), dst=target_ip)
        tcp = TCP(sport=RandShort(), dport=target_port, flags="S")
        packet = ip/tcp
        send(packet)

syn_flood("192.168.1.1", 80)

Verteidigung:

  • SYN-Cookies: Ein Mechanismus, der es Servern ermöglicht, keine Ressourcen für halboffene Verbindungen zu reservieren, indem SYN-Pakete ohne Speichern des Zustands behandelt werden.
  • Verbindungslimits: Firewalls und Lastverteiler können eingerichtet werden, um die Anzahl der ausstehenden TCP-Verbindungen zu begrenzen.
  • DDoS-Schutzdienste: Dienste wie Cloudflare und Akamai bieten Schutz gegen solche Angriffe, indem sie den Verkehr auf verteilte Server umleiten und filtern.

5. Angriff Sitzungsschicht (Session Layer)

Angriff: Session Hijacking

  • Beschreibung: Ein Angreifer übernimmt eine aktive Sitzung eines Benutzers, um Zugriff auf dessen Kommunikation und Daten zu erhalten. Dies geschieht oft durch das Abfangen von Sitzungstokens.
  • Beispiel in Python: In Python kann ein einfacher Sniffer verwendet werden, um Sitzungstoken abzufangen.
from scapy.all import *

def sniff_sessions(interface):
    sniff(iface=interface, prn=lambda x: x.show(), filter="tcp")

sniff_sessions("eth0")

Dieser Code fängt TCP-Pakete ab, die auch Sitzungstokens enthalten können. Der Angreifer würde dann versuchen, das Token zu stehlen und zu verwenden.

Verteidigung:

  • Verschlüsselung (TLS/SSL): Der gesamte Datenverkehr sollte verschlüsselt werden, um das Abfangen von Sitzungstokens zu verhindern.
  • Sitzungs-Timeouts und -Erneuerung: Sessions sollten nach einer bestimmten Zeit ablaufen oder durch regelmäßige Erneuerung des Sitzungstokens gesichert werden.
  • Token-Schutzmaßnahmen: Implementieren von Secure Cookies und HttpOnly-Flags, um zu verhindern, dass Sitzungscookies von JavaScript oder über unsichere Verbindungen gestohlen werden.

6. Angriff Darstellungsschicht (Presentation Layer)

Angriff: SSL-Stripping

  • Beschreibung: Der Angreifer entfernt die Verschlüsselung, indem er den Benutzer dazu bringt, HTTP anstelle von HTTPS zu verwenden, und so sensible Daten unverschlüsselt abfangen kann.
  • Beispiel: SSL-Stripping erfordert spezielle Tools wie Bettercap oder SSLstrip. Python kann als Man-in-the-Middle-Proxy verwendet werden, um unverschlüsselte Daten zu stehlen. Der Code für SSL-Stripping ist jedoch komplex und erfordert eine manuelle Proxy-Konfiguration.

Verteidigung:

  • HTTP Strict Transport Security (HSTS): Websites sollten HSTS aktivieren, um sicherzustellen, dass der Browser immer HTTPS verwendet, auch wenn eine unsichere Verbindung versucht wird.
  • SSL/TLS-Zertifikate: Sicherstellen, dass alle Webanwendungen ein gültiges SSL/TLS-Zertifikat verwenden, und den Einsatz von Mixed Content (HTTP-Inhalte auf HTTPS-Seiten) vermeiden.
  • Benutzerschulung: Benutzer sollten darauf aufmerksam gemacht werden, immer nach dem HTTPS-Zertifikatssymbol in ihrem Browser zu suchen, bevor sie sensible Daten eingeben.

7. Angriff Anwendungsschicht (Application Layer)

Angriff: Cross-Site Scripting (XSS)

  • Beschreibung: Ein Angreifer injiziert bösartigen Code (meist JavaScript) in eine Webanwendung, die dann vom Browser des Opfers ausgeführt wird. So kann der Angreifer sensible Daten wie Cookies stehlen.
  • Beispiel in Python: Ein Beispiel für XSS in einem einfachen Web-Framework wie Flask.
from flask import Flask, request

app = Flask(__name__)

@app.route("/")
def index():
    name = request.args.get("name", "Guest")
    # Sicherheitslücke: Name wird ungefiltert in HTML eingefügt
    return f"<h1>Hello, {name}</h1>"

if __name__ == "__main__":
    app.run(debug=True)

Ein Angreifer könnte die URL manipulieren, um bösartiges JavaScript einzufügen: http://localhost:5000/?name=<script>alert('XSS')</script>. Dies würde das Skript im Browser des Opfers ausführen.

Verteidigung:

  • Eingabevalidierung: Alle Benutzereingaben sollten gründlich überprüft und gefiltert werden, um schädlichen Code zu verhindern. Benutze Bibliotheken wie DOMPurify, um HTML sicher zu bereinigen.
  • Ausgabe-Codierung: Alle Benutzereingaben sollten sicher in HTML oder JavaScript eingebettet werden, um sicherzustellen, dass sie als Text und nicht als Code ausgeführt werden.
  • Content Security Policy (CSP): CSP ist eine HTTP-Header-basierte Methode, die es ermöglicht, Quellen für Skripts, Bilder und andere Ressourcen zu beschränken, um das Ausführen von bösartigem JavaScript zu verhindern.

Fazit

Cyberangriffe können auf jeder Schicht des OSI-Modells stattfinden. Entwickler und Administratoren müssen auf jeder Ebene Maßnahmen ergreifen, um ihre Systeme zu schützen. Python kann verwendet werden, um viele Arten von Angriffen zu simulieren, aber es sollte verantwortungsvoll eingesetzt werden, um Schwachstellen zu testen und nicht auszunutzen.

Updated: