Untersuchen des GitHub-Pushschutzes

Abgeschlossen

Während der Geheimnis-Scan bereits in Ihrem Repository vorhandene Zugangsdaten erkennt, verhindert der Pushschutz, dass Geheimnisse erst gar nicht in Ihr Repository gelangen. Dieser proaktive Ansatz stoppt Sicherheitsrisiken, bevor sie zu Vorfällen werden, die Eine Korrektur erfordern.

Was ist Pushschutz?

GitHub-Pushschutz ist ein präventives Sicherheitsfeature, das verhindert, dass Commits, die erkannte Geheimnisse enthalten, in ein Repository gepusht werden. Wenn Sie versuchen, Code mit einem geheimen Schlüssel mit hoher Vertrauenswürdigkeit zu pushen, beendet GitHub den Pushvorgang und zeigt eine Fehlermeldung an, die die erkannten Anmeldeinformationen identifiziert.

Stellen Sie sich den Pushschutz als Sicherheitstor zwischen Ihrer lokalen Umgebung und dem Remote-Repository vor. Er prüft jeden Commit, bevor er ihn durchlässt, blockiert alle Commits, die Geheimnisse enthalten, und setzt voraus, dass Sie das Problem lokal beheben, bevor Sie fortfahren.

Funktionsweise des Pushschutzes

Push-Schutz lässt sich nahtlos in den standard Git-Workflow integrieren und bietet gleichzeitig eine robuste Erkennung von Zugangsdaten.

Der Push-Schutz-Prozess

Wenn Sie Commits in einem Repository mit aktiviertem Pushschutz committen:

  1. Pushinitiierung: Sie führen git push aus, um Commits auf GitHub hochzuladen.

  2. Analyse vor dem Empfang: GitHub analysiert alle Commits im Push auf geheime Muster.

  3. Erkennung: Ein geheimes Geheimmuster mit hoher Vertrauenswürdigkeit wird identifiziert.

  4. Push-Ablehnung: Der Push wird mit einer Fehlermeldung abgelehnt:

    • Geheimer Typ (z. B. "Stripe-API-Schlüssel").
    • Dateipfad und Zeilennummer.
    • Optionen zur Behebung oder zum Umgehen.

Die Pushablehnung erfolgt, bevor Commits zum Remoterepository hinzugefügt werden, um sicherzustellen, dass das Geheimnis niemals in den Verlauf des Repositorys gelangt.

Beispiel für Pushschutzantwort

Wenn der Pushschutz ein Geheimnis erkennt, wird eine Ausgabe angezeigt, die ähnlich wie die folgende aussieht:

$ git push origin main
remote: 
remote: —————— GitHub Push Protection ——————
remote: 
remote: Secret found in the following locations:
remote: 
remote:   • src/PaymentProcessor.cs:15
remote:     - Secret type: Stripe API Key
remote:     - Detected: sk_live_51Abc123...
remote: 
remote: Push protection has blocked this push.
remote: 
remote: To push these commits, you must:
remote:   1. Remove the secret from the commits (recommended)
remote:   2. Request a bypass (requires justification)
remote: 
To https://github.com/user/repo.git
 ! [remote rejected] main -> main (push declined due to secret scanning)
error: failed to push some refs to 'https://github.com/user/repo.git'

Erkennungskriterien

Der Pushschutz verwendet dieselben geheimen Muster wie geheime Scans, wendet jedoch strengere Kriterien an:

  • Nur Muster mit hoher Konfidenz: Erkennt Geheimnisse mit klar definierten, überprüfbaren Mustern, um falsch positive Ergebnisse zu minimieren.
  • Aktive Überprüfung: Überprüft, ob Muster mit legitimen Anmeldeinformationsformaten übereinstimmen.
  • Kontextanalyse: Berücksichtigt den umgebenden Code, um echte Geheimnisse von Testdaten zu unterscheiden.

Dieser konservative Ansatz konzentriert sich darauf, eindeutige Offenlegungen von Anmeldeinformationen zu verhindern, während die Geheimnisüberprüfung nach dem Commit Muster mit niedrigerer Konfidenz erfasst.

Verfügbarkeit von Pushschutz

Die Verfügbarkeit von Pushschutz variiert je nach Repository-Sichtbarkeit und GitHub-Abonnementebene.

Öffentliche Repositorys

Für öffentliche Repositorys:

  • Standardmäßig aktiviert: Alle neuen öffentlichen Repositorys verfügen automatisch über aktivierten Pushschutz (ab 2024).
  • Kostenlos: Keine Kosten, die dem Feature zugeordnet sind.
  • Global verfügbar: Funktioniert für alle Benutzer mit öffentlichen Repositorys.

Private Repositorys

Für private Repositorys erfordert Pushschutz GitHub Advanced Security:

  • GitHub Enterprise Cloud: Verfügbar mit Advanced Security-Lizenz.
  • GitHub Enterprise Server: Verfügbar mit Advanced Security-Lizenz.
  • Kontrolle auf Organisationsebene: Administratoren aktivieren den Schutz auf Organisation oder Repositoryebene.

Ausführliche Anweisungen zum Aktivieren des Pushschutzes finden Sie in der Dokumentation zum Pushschutz von GitHub.

Behandeln von Blockierungen durch den Pushschutz

Wenn der Pushschutz einen Push blockiert, haben Sie drei Optionen für die Auflösung.

Der sichere Ansatz besteht darin, das Geheimnis aus Ihren Commits zu entfernen.

  1. Identifizieren Sie den geheimen Schlüssel: Überprüfen Sie die Fehlermeldung, um die Datei und Zeile zu suchen, die den geheimen Schlüssel enthält.

  2. Entfernen Sie den geheimen Schlüssel lokal: Bearbeiten Sie die Datei, um die hartcodierten Anmeldeinformationen zu entfernen:

    // Before (blocked by push protection)
    private const string StripeKey = "sk_live_51Abc123...";
    
    // After (reads from environment variable)
    private readonly string _stripeKey = Environment.GetEnvironmentVariable("STRIPE_API_KEY");
    
  3. Ändern Sie den Commit: Wenn sich das Geheimnis in Ihrem letzten Commit befindet:

    git add .
    git commit --amend --no-edit
    
  4. Verlauf für ältere Commits neu schreiben: Wenn das Geheimnis in früheren Commits ist, verwenden Sie das interaktive Rebase:

    git rebase -i HEAD~5  # Adjust number based on how far back the commit is
    

    Markieren Sie die problematischen Commits zur Bearbeitung, entfernen Sie das Geheimnis, und setzen Sie den Rebasevorgang fort.

  5. Erfolgreiche Pushvorgänge: Führen Sie nach Entfernen des Geheimnisses den Pushvorang erneut aus:

    git push origin main
    

Durch diesen Ansatz wird sichergestellt, dass keine Geheimnisse Teil der Repository-Historie werden.

Umgehungsschutz (Mit Vorsicht verwenden)

Unter bestimmten Umständen müssen Sie möglicherweise den Push-Schutz umgehen. Zu den gültigen Gründen gehören:

  • Falsch positive Ergebnisse: Das erkannte Muster ist kein Geheimnis (z. B. Testdaten, Beispieldokumentation).
  • Bereits bekannte Offenlegung: Das Geheimnis wurde bereits an anderer Stelle offengelegt, und die Rotation wird separat geplant.
  • Migration von Legacy-Code: Verschieben von vorhandenem Code mit Geheimnissen (Beheben von Geheimnissen in einem separaten Prozess).

Um den Pushschutz zu umgehen, bietet GitHub beim Anzeigen des blockierten Pushfehlers eine Umgehungsoption. Sie müssen eine Begründung für die Umgehung angeben.

Von Bedeutung

Das Umgehen des Pushschutzes schließt die Warnung der Geheimnisüberprüfung nicht. Das Geheimnis ist weiterhin im Reiter "Sicherheit" markiert und erfordert Abhilfe. Verwenden Sie Umgehungen nur bei Bedarf, und stellen Sie sicher, dass umgangene Geheimnisse weiterhin rotiert und ordnungsgemäß geschützt werden.

Muster zulassen

Wenn Ihre Organisation zulässige Muster konfiguriert (Ausnahmen für Testanmeldeinformationen, bekannte sichere Beispiele oder bestimmte Dateipfade), ist das Muster möglicherweise automatisch zulässig. Wenden Sie sich an das Sicherheitsteam Ihrer Organisation, wenn Sie der Ansicht sind, dass der Liste zugelassener Benutzer ein Muster hinzugefügt werden soll.

Interaktion zwischen Geheimnisüberprüfung und Pushschutz

Geheimes Scannen und Pushschutz arbeiten als ergänzende Ebenen des Schutzes von Anmeldeinformationen zusammen:

  • Pushschutz (proaktiv): Verhindert von vornherein, dass Geheimnisse ins Repository gelangen.
  • Geheimnisüberprüfung (Detektormodus): Erfasst Geheimnisse, die den Pushschutz umgehen oder vorhanden sind, bevor der Pushschutz aktiviert wurde.

Häufige Szenarien

Wenn Sie verstehen, wie diese Features interagieren, können Sie entsprechend reagieren.

Beide aktiviert, neue geheime Schlüssel

Wenn beide Features aktiv sind und Sie versuchen, ein neues Geheimnis einzubinden, verhindert der Push-Schutz das Problem vollständig.

  1. Sie versuchen, einen Commit mit einem Geheimnis zu pushen.
  2. Die Push-Schutzvorrichtung blockiert den Push.
  3. Sie entfernen das Geheimnis, und der Pushvorgang ist erfolgreich.
  4. Es wird keine Warnung bei der Geheimnisüberprüfung generiert (Geheimnis nie ins Repository übertragen).

Push-Schutz umgangen

Wenn Sie den Pushschutz umgehen, erstellt Secret Scanning weiterhin eine Warnung, die eine Korrektur erfordert.

  1. Sie umgehen den Pushschutz mit Begründung.
  2. Der Commit gelangt in das Repository.
  3. Die Secret-Scanning-Funktion generiert eine Warnung auf der Registerkarte "Sicherheit".
  4. Sie müssen das offengelegte Geheimnis dennoch beheben.

Geheimnis wurde vor der Aktivierung des Schutzes committet.

Historische Geheimnisse erfordern eine manuelle Bereinigung auch nach dem Aktivieren des Pushschutzes:

  1. Pushschutz ist neu aktiviert.
  2. Bei der Geheimnisüberprüfung wird das historische Geheimnis ermittelt.
  3. Warnung wird auf der Registerkarte "Sicherheit" angezeigt.
  4. Sie müssen das Geheimnis aus der Git-Historie entfernen.

Muster mit niedrigem Vertrauen

Jedes Sicherheitsfeature behandelt mehrdeutige Muster unterschiedlich und stellt eine Mehrschichterkennung bereit:

  1. Sie committen Code mit einem mehrdeutigen Muster.
  2. Der Pushschutz erlaubt den Push, blockiert jedoch nur Geheimnisse mit hoher Sicherheit.
  3. Ein Geheimnisüberprüfung generiert u. U. eine Warnung zur Überprüfung.
  4. Sie beurteilen, ob es sich um ein echtes Geheimnis handelt.

Bewährte Methoden

So maximieren Sie die Effektivität des Schutzes:

  • Aktivieren Sie beide Features: Der maximale Schutz erfordert sowohl geheimen Scan- als auch Pushschutz.
  • Verlassen Sie sich nicht auf die Umgehung: Behandeln Sie die Umgehung als außergewöhnliche Aktion, die Dokumentation erfordert.
  • Bereinigen historischer Geheimnisse: Durch Aktivieren des Push-Schutzes werden vorhandene Geheimnisse nicht rückwirkend bereinigt. Verwenden Sie Warnungen der Geheimnisüberprüfung, um die Bereinigung anzuweisen.
  • Markieren Sie Testdaten eindeutig: Kommentieren Sie Testberechtigungsnachweise, damit beide Systeme sie von echten Geheimnissen unterscheiden können.

Einschränkungen und Überlegungen

Das Verständnis der Einschränkungen von Pushschutz kann Ihnen helfen, umfassende Sicherheit zu implementieren:

Bereichseinschränkungen

Pushschutz funktioniert nur zur Pushzeit:

  • Kein lokaler Schutz: Geheimnisse in lokalen Commits bleiben bis zum Pushen unerkannt.
  • Musterbasierte Erkennung: Benutzerdefinierte oder proprietäre Anmeldeinformationsformate, die für GitHub unbekannt sind, werden möglicherweise nicht erkannt.
  • Kein Schutz für Nicht-Git-Workflows: Verhindert keine geheimen Schlüssel in manuellen Dateiuploads oder API-basierten Repositoryänderungen.

Auswirkungen des Workflows

Pushschutz erfordert sofortige Maßnahmen:

  • Blockierte Pushs müssen aufgelöst werden: Sie können die Korrektur nicht wie bei Benachrichtigungen nach dem Commit zurückstellen.
  • Potenzielle Workflowunterbrechungen: Entwickler, die mit der geheimen Verwaltung nicht vertraut sind, könnten Blöcke frustrierend finden.

Durch die Bereitstellung guter Dokumentationen und Schulungen werden Workflowunterbrechungen minimiert, während die Sicherheit beibehalten wird.

Ergänzende Praktiken

Verwenden Sie neben Push Protection auch andere Tools.

  • Hooks vor dem Commit: Fangen Sie Geheimnisse lokal ab, bevor Sie versuchen, zu pushen.
  • Vorlagen für Umgebungsvariablen: Stellen Sie .env.example Dateien bereit, die erforderliche Variablen ohne tatsächliche Werte anzeigen.
  • Geheime Verwaltungsbibliotheken: Verwenden Sie azure Key Vault SDK, Amazon Web Services (AWS) Secrets Manager SDK oder ähnliche Tools.
  • Codeüberprüfung: Schulen Sie Prüfer darauf, auf hartcodierte Anmeldeinformationen zu achten.