11 Layer 7 - Die Anwendungsschicht

11.1 Einführung: Die Schnittstelle zum Benutzer

Die Anwendungsschicht (Layer 7) ist die oberste Schicht im OSI-Referenzmodell und im TCP/IP-Protokollstapel. Sie stellt die direkte Schnittstelle zwischen den Netzwerkdiensten und den Anwendungen bereit, mit denen die Benutzer interagieren. Während die unteren Schichten für den Transport und die Weiterleitung von Daten zwischen Geräten sorgen, definiert Layer 7 die Protokolle und Dienste, die von Anwendungen zur Kommunikation genutzt werden.

11.2 Hauptaufgaben von Layer 7

  1. Anwendungsdienste: Bereitstellung standardisierter Dienste wie E-Mail, Dateiübertragung, Webzugriff
  2. Benutzerschnittstelle: Interaktion mit dem Benutzer über Anwendungen
  3. Datenformatierung: Definition von Formaten für Datenübertragung zwischen Anwendungen
  4. Sitzungsmanagement: Verwaltung von Benutzersitzungen und -kontexten
  5. Authentifizierung: Identitätsprüfung und Zugriffskontrolle

11.3 Wichtige Anwendungsschichtprotokolle

11.3.1 Hypertext Transfer Protocol (HTTP/HTTPS)

HTTP ist das Fundament des World Wide Web und ermöglicht den Zugriff auf Webinhalte.

11.3.1.1 HTTP-Grundlagen

11.3.1.2 HTTP-Anfragen (Requests)

GET /index.html HTTP/1.1
Host: www.example.com
User-Agent: Mozilla/5.0
Accept: text/html

Wichtige HTTP-Methoden:

11.3.1.3 HTTP-Antworten (Responses)

HTTP/1.1 200 OK
Date: Mon, 23 May 2023 22:38:34 GMT
Content-Type: text/html; charset=UTF-8
Content-Length: 138

<!DOCTYPE html>
<html>
<head>
  <title>Beispielseite</title>
</head>
<body>
  <h1>Hallo Welt!</h1>
</body>
</html>

Wichtige HTTP-Statuscodes:

11.3.1.4 HTTPS (HTTP Secure)

HTTPS ist die sichere Variante von HTTP, die Daten mittels TLS/SSL verschlüsselt.

11.3.1.5 HTTP/2 und HTTP/3

11.3.2 Domain Name System (DNS)

DNS übersetzt Domainnamen in IP-Adressen und ist essenziell für die Navigation im Internet.

11.3.2.1 DNS-Grundlagen

11.3.2.2 DNS-Abfrageprozess

  1. Client sendet Anfrage an lokalen DNS-Resolver
  2. Falls nicht im Cache, fragt der Resolver die Root-Nameserver
  3. Root-Server verweist auf zuständige TLD-Nameserver
  4. TLD-Server verweist auf autoritativen Nameserver für die Domain
  5. Autoritativer Server liefert die IP-Adresse

11.3.2.3 DNS-Eintragstypen

11.3.2.4 DNS-Beispielabfragen mit dig

$ dig example.com A

; <<>> DiG 9.16.1 <<>> example.com A
;; ANSWER SECTION:
example.com.        86400   IN  A   93.184.216.34
$ dig example.com MX

; <<>> DiG 9.16.1 <<>> example.com MX
;; ANSWER SECTION:
example.com.        86400   IN  MX  0 .

11.3.3 Simple Mail Transfer Protocol (SMTP) und E-Mail-Protokolle

11.3.3.1 SMTP-Grundlagen

11.3.3.2 E-Mail-Übertragungsprozess

  1. Absenden: Mail-Client sendet E-Mail per SMTP an den Ausgangsserver
  2. Weiterleitung: Ausgangsserver sendet E-Mail per SMTP an den Zielserver
  3. Abruf: Empfänger holt E-Mail per POP3 oder IMAP vom Zielserver ab

11.3.3.3 E-Mail-Zustellprotokolle

11.3.3.4 SMTP-Kommunikationsbeispiel

C: telnet mail.example.com 25
S: 220 mail.example.com ESMTP Postfix
C: HELO client.example.org
S: 250 Hello client.example.org
C: MAIL FROM:<sender@example.org>
S: 250 Ok
C: RCPT TO:<recipient@example.com>
S: 250 Ok
C: DATA
S: 354 End data with <CR><LF>.<CR><LF>
C: Subject: Test E-Mail
C: 
C: Dies ist eine Test-E-Mail.
C: .
S: 250 Ok: queued as 12345
C: QUIT
S: 221 Bye

11.3.4 File Transfer Protocol (FTP)

FTP ermöglicht die Übertragung von Dateien zwischen Client und Server.

11.3.4.1 FTP-Grundlagen

11.3.4.2 FTP-Befehle

11.3.4.3 SFTP und FTPS

11.3.5 Secure Shell (SSH)

SSH ermöglicht sichere Fernzugriff und Kommandoausführung auf entfernten Systemen.

11.3.5.1 SSH-Grundlagen

11.3.5.2 SSH-Verbindungsbeispiel

$ ssh benutzer@server.example.com
The authenticity of host 'server.example.com' can't be established.
ECDSA key fingerprint is SHA256:abcdef1234567890.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'server.example.com' (ECDSA) to the list of known hosts.
benutzer@server.example.com's password: 
Last login: Wed Jul 12 14:23:45 2023 from 192.168.1.10
server$

11.3.5.3 SSH-Schlüsselverwaltung

# Schlüsselpaar generieren
$ ssh-keygen -t rsa -b 4096

# Öffentlichen Schlüssel auf Server kopieren
$ ssh-copy-id benutzer@server.example.com

# SSH-Agent starten und Schlüssel hinzufügen
$ eval $(ssh-agent)
$ ssh-add ~/.ssh/id_rsa

11.3.6 Network Time Protocol (NTP)

NTP synchronisiert die Uhren von Computersystemen über Netzwerke.

11.3.6.1 NTP-Grundlagen

11.3.6.2 NTP-Konfigurationsbeispiel

# NTP-Status abfragen
$ ntpq -p
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
*ntp1.example.org .GPS.            1 u   17   64  377    0.371    0.033   0.038
+ntp2.example.org .PPS.            1 u   14   64  377    0.625    0.037   0.035
-ntp3.example.org .ATOM.           1 u   11   64  377    0.308    0.064   0.039

11.3.7 Simple Network Management Protocol (SNMP)

SNMP ermöglicht die Überwachung und Verwaltung von Netzwerkgeräten.

11.3.7.1 SNMP-Grundlagen

11.3.7.2 SNMP-Operationen

11.3.7.3 SNMP-Abfragebeispiel

# Systeminformationen abfragen
$ snmpget -v2c -c public 192.168.1.1 sysDescr.0
SNMPv2-MIB::sysDescr.0 = STRING: RouterOS RB3011

# Mehrere Objekte durchlaufen
$ snmpwalk -v2c -c public 192.168.1.1 ifDescr
IF-MIB::ifDescr.1 = STRING: ether1
IF-MIB::ifDescr.2 = STRING: ether2
IF-MIB::ifDescr.3 = STRING: ether3

11.4 Anwendungsprotokolle und Microservices

11.4.1 REST (Representational State Transfer)

REST ist ein Architekturstil für verteilte Hypermedia-Systeme wie das Web.

11.4.1.1 REST-Grundprinzipien

11.4.1.2 REST-API-Beispiel

# Ressource abrufen
GET /api/users/123 HTTP/1.1
Host: api.example.com
Accept: application/json

# Antwort
HTTP/1.1 200 OK
Content-Type: application/json

{
  "id": 123,
  "name": "Max Mustermann",
  "email": "max@example.com"
}

11.4.2 GraphQL

GraphQL ist eine Abfragesprache für APIs, die es Clients ermöglicht, genau die benötigten Daten anzufordern.

11.4.2.1 GraphQL-Beispiel

# Anfrage
query {
  user(id: "123") {
    name
    email
    posts {
      title
      publishedAt
    }
  }
}

# Antwort
{
  "data": {
    "user": {
      "name": "Max Mustermann",
      "email": "max@example.com",
      "posts": [
        {
          "title": "GraphQL verstehen",
          "publishedAt": "2023-06-15T14:00:00Z"
        },
        {
          "title": "APIs der Zukunft",
          "publishedAt": "2023-07-22T09:30:00Z"
        }
      ]
    }
  }
}

11.4.3 gRPC

gRPC ist ein modernes RPC-Framework (Remote Procedure Call) von Google, das auf HTTP/2 und Protocol Buffers basiert.

11.4.3.1 gRPC-Charakteristika

11.4.3.2 gRPC-Dienstdefinition (Protocol Buffers)

syntax = "proto3";

service UserService {
  rpc GetUser (UserRequest) returns (UserResponse);
  rpc ListUsers (ListUsersRequest) returns (stream UserResponse);
}

message UserRequest {
  string user_id = 1;
}

message UserResponse {
  string user_id = 1;
  string name = 2;
  string email = 3;
}

message ListUsersRequest {
  int32 page_size = 1;
  string page_token = 2;
}

11.5 Anwendungsschichtanalyse unter Linux

11.5.1 Netzwerktraffic auf Anwendungsebene analysieren

11.5.1.1 Mit tcpdump HTTP-Traffic erfassen

$ tcpdump -A -s 0 'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)'

Dieser Befehl zeigt den Payload von HTTP-Paketen im ASCII-Format an.

11.5.1.2 Mit Wireshark Anwendungsprotokolle analysieren

Wireshark bietet umfangreiche Möglichkeiten zur Analyse von Anwendungsprotokollen:

11.5.1.3 curl für HTTP-Analysen

# HTTP-Headers anzeigen
$ curl -I https://example.com

# Vollständige HTTP-Kommunikation anzeigen
$ curl -v https://example.com

# HTTP/2-Informationen anzeigen
$ curl --http2 -v https://example.com

11.5.2 Anwendungsdienste überwachen

11.5.2.1 Aktive Anwendungsverbindungen anzeigen

# Alle auf Ports lauschenden Prozesse anzeigen
$ sudo lsof -i -P -n | grep LISTEN
COMMAND     PID USER   FD   TYPE  DEVICE SIZE/OFF NODE NAME
nginx      1234 root   6u  IPv4   14995      0t0  TCP *:80 (LISTEN)
sshd       5678 root   3u  IPv4   12345      0t0  TCP *:22 (LISTEN)
mysqld     9012 mysql  12u IPv4   23456      0t0  TCP 127.0.0.1:3306 (LISTEN)

# Alle etablierten HTTP-Verbindungen anzeigen
$ sudo lsof -i :80 | grep ESTABLISHED
nginx      1235 www-data    7u  IPv4  15003      0t0  TCP server:80->client:40584 (ESTABLISHED)
nginx      1236 www-data    7u  IPv4  15004      0t0  TCP server:80->client:40585 (ESTABLISHED)

11.5.2.2 Anwendungsprotokolle überwachen

# Apache-Zugriffslogs in Echtzeit überwachen
$ tail -f /var/log/apache2/access.log | grep --line-buffered POST

# Syslog auf SMTP-Ereignisse überwachen
$ tail -f /var/log/mail.log | grep "postfix/smtp"

11.6 Anwendungssicherheit

11.6.1 TLS/SSL-Konfiguration überprüfen

# SSL/TLS-Konfiguration eines Servers testen
$ openssl s_client -connect example.com:443 -tls1_3

# Zertifikatsinformationen anzeigen
$ echo | openssl s_client -connect example.com:443 2>/dev/null | openssl x509 -text

11.6.2 Web-Anwendungssicherheit

11.6.2.1 OWASP Top 10 - Häufigste Angriffsvektoren

  1. Injection: SQL, NoSQL, OS-Kommandos
  2. Broken Authentication: Fehlerhafte Authentifizierungsmechanismen
  3. Sensitive Data Exposure: Unzureichende Verschlüsselung sensibler Daten
  4. XML External Entities (XXE): Unsichere XML-Verarbeitung
  5. Broken Access Control: Fehlerhafte Zugriffsberechtigungen
  6. Security Misconfiguration: Fehlerhafte Sicherheitseinstellungen
  7. Cross-Site Scripting (XSS): Einschleusen von schädlichem JavaScript
  8. Insecure Deserialization: Unsichere Deserialisierung von Objekten
  9. Using Components with Known Vulnerabilities: Verwendung veralteter Komponenten
  10. Insufficient Logging & Monitoring: Fehlende Protokollierung und Überwachung

11.6.2.2 HTTP Security Headers

# Wichtige Sicherheits-Header in einer HTTP-Antwort
HTTP/1.1 200 OK
Content-Security-Policy: default-src 'self'
X-Content-Type-Options: nosniff
X-Frame-Options: DENY
X-XSS-Protection: 1; mode=block
Strict-Transport-Security: max-age=31536000; includeSubDomains
Referrer-Policy: no-referrer-when-downgrade

11.6.3 DNS-Sicherheit

11.6.3.1 DNSSEC (DNS Security Extensions)

DNSSEC schützt vor DNS-Spoofing durch kryptografische Signierung von DNS-Daten:

# DNSSEC-Validierung prüfen
$ dig +dnssec example.com A

# DNSSEC-Schlüssel anzeigen
$ dig DNSKEY example.com +short

11.6.3.2 DNS over HTTPS (DoH) und DNS over TLS (DoT)

Beide Protokolle verschlüsseln DNS-Anfragen:

11.7 Die wichtigsten Fakten

Die Anwendungsschicht ist die sichtbarste Netzwerkschicht für Endbenutzer und stellt alle Dienste bereit, die für die tägliche Arbeit mit Netzwerken und dem Internet benötigt werden. Ein tiefes Verständnis dieser Schicht ist daher essenziell für jeden IT-Professional.