Aikido

Secrets detection: Ein praktischer Leitfaden zum Auffinden und Verhindern geleakter Anmeldeinformationen

Verfasst von
Ruben Camerlynck

SecretsAPI-Schlüssel, Passwörter, Zertifikate — sind das digitale Äquivalent von Flüstern auf dem Spielplatz: Sie sind für einen vertrauenswürdigen Empfänger bestimmt, nicht für die Öffentlichkeit. In moderner Software werden Secrets programmatisch verwendet, was sie sowohl allgegenwärtig als auch fragil macht. Bleiben sie unkontrolliert, sind sie häufig der Ausgangspunkt für größere Sicherheitsverletzungen. Dieser Leitfaden erklärt, wo Secrets lecken, warum ihre Erkennung schwieriger ist, als es scheint, was eine gute Erkennung tatsächlich leistet und wie man sie implementiert, um versehentliche Lecks zu stoppen, bevor sie zu Incidents werden.

Was gilt in Software als „Secret“?

Ein Secret ist jede Anmeldeinformation, die Zugriff auf Systeme oder Dienste gewährt: API-Schlüssel, Datenbankpasswörter, OAuth-Tokens, SSH-Schlüssel, TLS-Zertifikate und Ähnliches. Da Secrets programmatisch genutzt werden, durchlaufen sie Quellcode, CI-Pipelines, Entwickler-Maschinen und Backups – wodurch eine große Angriffsfläche entsteht.

Wie Secrets typischerweise lecken

Einer der häufigsten Leak-Vektoren ist die Versionskontrollhistorie. Das typische Szenario:

  1. Ein Entwickelnder erstellt einen Feature-Branch und hardcodiert eine Anmeldeinformation, um schnell etwas zu testen.
  2. Sobald dies verifiziert ist, ersetzen sie die Anmeldeinformation durch eine Umgebungsvariable oder einen Vault-Aufruf und pushen die Änderungen zur Überprüfung.
  3. Die Code-Review betrachtet nur den aktuellen Diff; das temporäre Secret bleibt in der Branch- oder Commit-Historie verborgen.
Diagramm der Git-Historie mit Commit C auf dem Dev-Branch, beschriftet mit 'API-Schlüssel hardcodiert (das Secret)'.
Commit C auf dem Dev-Branch zeigt einen hardcodierten API-Schlüssel — ein Secret, das in der Historie verbleibt.

Sofern Sie die Git-Historie nicht umschreiben (was störend und riskant ist), bleibt dieses Secret bestehen. Erlangt ein Angreifer Zugriff auf Ihr Repository — selbst ein privates — kann er die Historie scannen und Anmeldeinformationen (Creds) sammeln, um sich zu höherwertigen Zielen vorzuarbeiten.

Wie verbreitet ist das Problem?

Öffentliche Studien zeigen, dass dies keineswegs selten ist. Groß angelegte Scans von GitHub offenbaren Millionen exponierter Secrets und eine überraschend hohe Prävalenz selbst in privaten Repositories. Tatsächliche Sicherheitsverletzungen belegen das Risiko: Geleakte Quellcode-Dumps haben Tausende von Anmeldeinformationen zutage gefördert, darunter Cloud-Tokens und Zahlungsschlüssel.

Folie mit der Aufschrift '23.770.171 neue Secrets in öffentlichen GitHub-Commits im Jahr 2024' mit unterstützenden Statistiken
GitGuardian: 23.770.171 neue Secrets in öffentlichen GitHub-Commits im Jahr 2024 — ein klares Maß für das Ausmaß.

Warum SAST allein nicht ausreicht

Statische Anwendungssicherheitstests (SAST) eignen sich hervorragend, um Dinge wie SQL-Injection oder Path Traversal in der aktuellen Codebasis zu finden, aber sie scannen typischerweise den neuesten Snapshot, nicht die gesamte Commit-Historie. Secrets sind anders: Ein Secret in jedem Commit, Branch oder Tag stellt ein Kompromittierungsrisiko dar. Das bedeutet, dass die Erkennung die gesamte Historie und mehrere Repositories, in denen diese Historie existiert, berücksichtigen muss.

Terminalausgabe 'Scan Summary' mit Scan-Ergebnissen und der Meldung, dass der Scan auf von Git verfolgte Dateien beschränkt war, mit eingeblendetem Präsentator
Scan-Zusammenfassung mit Ergebnissen und einem Hinweis, dass der Scan auf von Git verfolgte Dateien beschränkt war.

Warum Secrets Detection schwieriger ist als „nur Regex“

Auf den ersten Blick könnte man denken: Eine Regex für „API_KEY=“ schreiben und fertig. In Wirklichkeit muss Secrets detection Präzision und Recall ausbalancieren, um Entwickelnde nicht in Rauschen zu ertränken:

  • High-Entropy-Strings (zufällig aussehende Werte) sind oft Secrets – aber nicht immer. Viele nicht-geheime Artefakte weisen ebenfalls eine hohe Entropie auf.
  • Platzhalter und Beispiele durchziehen Codebasen. Ein naives Kennzeichnen jedes schlüsselähnlichen Elements führt zu Fehlalarmen, die Workflows stören.
  • Provider-Muster variieren. Einige Dienste (Stripe, AWS, Twilio) verwenden identifizierbare Präfixe oder Formate; andere nicht.
Folie mit dem Titel 'Raw high-entropy string', die ein langes hex-ähnliches Token und einen roten 'Secret'-Indikator zeigt
Beispiel für einen High-Entropy-String, das veranschaulicht, was wie ein Secret aussieht.

Wie eine gute Secrets detection aussieht

Eine effektive Secrets detection-Lösung nutzt mehrere Signale, um Fehlalarme zu reduzieren und echte Leaks zu erkennen:

  • Musterabgleich für bekannte Anbieter. Identifizieren Sie Schlüssel, die anbieterspezifischen Formaten folgen (z. B. Stripe-Präfixe, AWS-Token-Formate).
  • Validierung, wo möglich. Versuchen Sie eine nicht-destruktive Validierung (existiert dieser AWS-Schlüssel? Ist er aktiv?), um zu bestätigen, ob ein Fund echt ist.
  • Entropie + Kontext. Nutzen Sie Entropiemaße, um Strings mit hoher Zufälligkeit zu finden, und prüfen Sie dann den umgebenden Code (Dateipfad, Variablennamen, Kommentare), um zu entscheiden, ob es sich um ein Secret handelt.
  • Anti-Dictionary-Checks. Filtern Sie Strings heraus, die englische Wörter oder offensichtliche Platzhalter enthalten, um das Rauschen zu reduzieren.
  • History-aware Scanning. Scannen Sie die gesamte Git-Historie über Branches, Tags und Mirrors hinweg – nicht nur den aktuellen Stand des Main-Branches.
  • Entwickelnden-zentrierte Bereitstellung. Führen Sie die Erkennung sowohl remote (zentrale Repos) als auch lokal (Pre-Commit-Hooks, IDE-Plugins) aus, um Leaks früher im Workflow zu stoppen.
Presenter an einem Mikrofon mit einer Folie, auf der steht: 'Identify all secrets by categories'
Secrets nach Kategorie identifizieren – ein praktisches Erkennungsziel.

Testen eines Secrets detection Tools (und die häufige Falle)

Bei der Evaluierung von Tools führen Teams oft einen einfachen Test durch: Sie hardcodieren offensichtliche Secret-ähnliche Strings und erwarten, dass der Scanner sie erkennt. Ironischerweise kann ein Tool, das jedes offensichtliche gefälschte Secret kennzeichnet, von geringer Qualität sein – es sind die rauschenden Tools, die in naiven Tests am besten aussehen.

Gute Tools ignorieren absichtlich triviale, nicht-reale Muster und Platzhalterwerte. Sie priorisieren die Validierung verdächtiger Funde, anstatt bei jedem zufälligen String Alarm zu schlagen.

Canarytokens Web-Dashboard, das Token-Typen zeigt (Web bug, DNS, AWS infra, Credit Card, QR code, MySQL, AWS keys, Fake App, Log4shell, Fast redirect)
Canarytokens Dashboard – erstellen Sie Honeytokens, um die Erkennung und Alarme sicher zu testen.

Wie man richtig testet:

  1. Verwenden Sie Honeytokens / Canary Tokens – echte, risikoarme API-Schlüssel, die Sie kontrollieren – die Sie sicher veröffentlichen können, um die Erkennung und Alarmierung zu testen.
  2. Führen Sie das Tool gegen historische Branches und vergessene Commits aus, nicht nur gegen frische gefälschte Schlüssel in aktuellen Dateien.
  3. Messen Sie False-Positive-Rate und Validierungserfolg: Kann das Tool das Rauschen reduzieren und dabei immer noch echte, umsetzbare Secrets aufdecken?

Wo Secrets detection bereitgestellt werden sollte

Die Erkennung sollte auf mehreren Ebenen erfolgen:

  • Remote Git-Repositories (obligatorisch). Ihr zentrales Git-Hosting ist die kanonische Quelle der Wahrheit: Scannen Sie alle Repositories und die gesamte Historie. Jedes hier vorhandene Secret sollte als kompromittiert betrachtet werden.
Stilisiertes Diagramm eines lokalen Repositories (IDE und lokale Commits), das zu einem Remote-Repository pusht und einen neuen Pull Request sowie CI/CD-Phasen zeigt
Diagramm, das lokale und Remote-Repositories zeigt und wie Pushes Pull Requests erzeugen — wo Remote-Scanning hingehört.
  • Lokale Umgebung der Entwickelnden (dringend empfohlen). Nutzen Sie Pre-Commit-Hooks und IDE- oder Editor-Erweiterungen, um Secrets abzufangen, bevor sie jemals einen Push erreichen. Lokales Feedback vermeidet unnötigen Aufwand und gibt Entwickelnden Kontrolle.
  • CI/CD-Pipelines. Fügen Sie Prüfungen hinzu, um Merges oder Deployments zu blockieren, wenn ein validiertes Secret gefunden wird, wobei sichergestellt wird, dass Regeln Fehlalarme minimieren, die die Entwicklung behindern.
“Wenn ein Secret in [Ihr Remote-Repository] gelangt, müssen Sie es als kompromittiert betrachten.”

Schnelle Checkliste zur Behebung, wenn Sie ein geleaktes Secret finden

  1. Rotieren Sie das Secret sofort (Anmeldeinformationen rotieren, Tokens widerrufen).
  2. Umfang bewerten: Welche Systeme waren mit dem Schlüssel zugänglich?
  3. Entfernen Sie das Secret aus allen Commits und Branches — erwägen Sie das Umschreiben der Historie nur, wenn dies für Ihren Workflow notwendig und akzeptabel ist.
  4. Prüfen Sie auf ähnliche Leaks in anderen Repositories oder Backups.
  5. Verbessern Sie die Workflows der Entwickelnden und die Tools, um ein Wiederauftreten zu verhindern (IDE-Plugins, Pre-Commit-Hooks, Einführung von Vaults).

Zusammenfassung: Das Wesentliche

  • Secrets sind in der modernen Entwicklung allgegenwärtig und befinden sich oft in der Git-Historie.
  • SAST-Tools, die nur die Spitze des Baumes scannen, reichen für die Secrets detection nicht aus.
  • Eine gute Erkennung kombiniert Anbieter-Muster, Validierung, Entropie-/Kontextanalyse und Anti-Wörterbuch-Filter, um Rauschen zu reduzieren.
  • Setzen Sie die Erkennung sowohl zentral (Remote-Repositories) als auch lokal (IDE/Hooks) ein, um Leaks frühzeitig zu erkennen und ein Katz-und-Maus-Spiel zu vermeiden.
  • Testen Sie Scanner verantwortungsvoll mithilfe von Honeytokens und historischen Scans anstatt trivialer gefälschter Schlüssel.

Die Erkennung von Secrets ist ein kontinuierliches, Developer-First-Problem. Mit der richtigen Mischung aus Signalen und Platzierung können Sie das Risiko drastisch reduzieren, ohne Entwickelnde in Fehlalarmen zu ertränken. Beginnen Sie mit dem Scannen Ihrer Git-Historie, fügen Sie lokale Schutzmaßnahmen hinzu und machen Sie die Validierung zu einem Kernmerkmal jeder Secrets detection-Lösung, die Sie wählen. Testen Sie Aikido Security noch heute!

Teilen:

https://www.aikido.dev/blog/secret-detection-application-security

Abonnieren Sie Bedrohungs-News.

Starten Sie noch heute, kostenlos.

Kostenlos starten
Ohne Kreditkarte

Sicherheit jetzt implementieren

Sichern Sie Ihren Code, Ihre Cloud und Ihre Laufzeit in einem zentralen System.
Finden und beheben Sie Schwachstellen schnell und automatisch.

Keine Kreditkarte erforderlich | Scan-Ergebnisse in 32 Sek.