MCP-Sicherheit: Was ich nach 95 Produktionsausfällen gelernt habe

Ich dachte, Sicherheit sei einfach. Abhängigkeiten aktualisieren. HTTPS verwenden. Keine Secrets hartcodieren.

Ich habe mich geirrt.

Nach 95 Produktionsausfällen und 1.800 Entwicklungsstunden habe ich gelernt, dass die Sicherheit des Model Context Protocol (MCP) anders ist. Sie ist nicht wie die Standard-REST-API-Sicherheit.

MCP schafft neue Risiken, da der Client ein LLM ist und kein Mensch.

Hier ist das, was Sie wissen müssen, um Ihren MCP-Server sicher zu halten.

1. Das MCP-Bedrohungsmodell

Bei REST wissen Sie genau, wer Ihre API aufruft. Bei MCP fungiert das LLM als Vermittler. Das ändert alles:

  • LLMs können Tool-Aufrufe oder Parameter halluzinieren.
  • Benutzer rufen Tools nicht direkt auf. Sie sprechen mit dem LLM, und das LLM spricht mit Ihrem Server.
  • Böswillige Clients können Ihren Server während der Discovery nach versteckten Tools durchsuchen.

Ihre größte Bedrohung ist nicht nur ein Hacker. Es ist ein gutmeinendes LLM, das einen versehentlichen Fehler macht, der Ihr System zum Absturz bringt.

2. API-Key-Management

Viele Entwickler übergeben API-Keys in Query-Parametern, um es sich einfach zu machen. Das ist ein Fehler. Query-Parameter erscheinen in jedem Server-Log und Proxy.

Folgen Sie diesen Regeln:

  • Verwenden Sie Header-Authentifizierung (Authorization: Bearer).
  • Vermeiden Sie die Übergabe von Keys im JSON-Body.
  • Erstellen Sie für jeden Client einen eigenen API-Key. Dies hilft Ihnen, die Nutzung zu verfolgen und den Zugriff zu entziehen, ohne alles lahmzulegen.

3. Strikte Input-Validierung

LLMs werden falsch raten. Sie werden falsche Typen und zusätzliche Parameter senden. Sie müssen jeden Aufruf validieren:

  • Prüfen Sie zuerst, ob der Tool-Name in Ihrer Liste existiert.
  • Lehnen Sie Aufrufe mit zusätzlichen Parametern ab. Ignorieren Sie diese nicht einfach.
  • Stimmen Sie die Parametertypen exakt überein. Führen Sie keine Typumwandlungen (Coercion) durch.
  • Legen Sie strikte Größenbeschränkungen für Strings und Arrays fest, um Speicherabstürze zu verhindern.
  • Bereinigen (Sanitize) Sie alle Dateipfade, um Directory Traversal zu verhindern.

4. Gestaffeltes Rate Limiting

Ein einziger Benutzer-Prompt kann zehn Tool-Aufrufe gleichzeitig auslösen. Dies kann Ihren Connection Pool in Sekundenschnelle erschöpfen.

Nutzen Sie drei Verteidigungsebenen:

  • Limits pro API-Key, um die Client-Nutzung zu kontrollieren.
  • Limits pro IP, um Brute-Force-Angriffe zu stoppen.
  • Limits für gleichzeitige Verbindungen, um Ihren Server bei Lastspitzen am Laufen zu halten.

5. Risiken durch Prompt Injection

Ein Benutzer kann ein LLM dazu verleiten, ein destruktives Tool aufzurufen. Wenn ein Benutzer dem LLM sagt, es solle alle Notizen löschen, wird das LLM dies möglicherweise tatsächlich tun.

Schützen Sie sich:

  • Trennen Sie Lese- und Schreibvorgänge.
  • Erfordern Sie eine manuelle Bestätigung durch den Benutzer für jede Lösch- oder Aktualisierungsaktion.
  • Verwenden Sie das Prinzip der geringsten Berechtigung (Principle of Least Privilege) für Ihren Datenbank-User.

Sicherheit ist ein fortlaufender Prozess. Beginnen Sie mit einem besseren Key-Management und strikter Validierung. Diese Schritte lösen die meisten Probleme.

Quelle: https://dev.to/kevinten10/mcp-security-what-i-learned-securing-my-mcp-server-after-95-production-outages-3hc0

Optionale Lern-Community: https://t.me/GyaanSetuAi