Spoofing des Commit-Autors
Jeder Commit kann Ihren Namen beanspruchen. Nur eine Unterschrift beweist es.
Was ist Spoofing des Commit-Autors?
Git zeichnet den Autorennamen und die E-Mail-Adresse wörtlich aus der lokalen Konfiguration auf. Sie werden durch nichts überprüft, sodass sich jeder wie jeder andere verpflichten kann, und das Feld „Autor“ ist eher eine Bezeichnung als ein Beweis. Nur eine GPG- oder SSH-Signatur verknüpft einen Commit mit einem Schlüssel, den jemand besitzt. Sie übernehmen den Namen und die E-Mail-Adresse eines Betreuers aus dem Verlauf des Repositorys, legen sie lokal fest und führen eine Änderung durch, die einen Webhook-Signaturvergleich auf acht Zeichen verkürzt. Dann finden Sie das Abzeichen „Unverifiziert“, erfordern signierte Commits ohne Administratorumgehung und sehen, dass der Push abgelehnt wurde.
Was Sie lernen in Spoofing des Commit-Autors
- Erkennen, dass Autorenname und E-Mail-Adresse eines Commits eine selbst gesetzte lokale Git-Konfiguration sind, die jeder ändern kann — das Autorenfeld ist damit ein Etikett und kein Identitätsnachweis
- Sehen Sie, wie ein gefälschter Autor den Namen eines vertrauenswürdigen Betreuers ausleiht, damit eine böswillige Änderung im Branch-Protokoll, das ein Prüfer vor der Auslieferung scannt, als Routine gelesen wird
- Beachten Sie, dass Autoren-E-Mails in jedem Commit veröffentlicht werden und mit jedem Klon übertragen werden, sodass ein Angreifer die Identität, um sich auszugeben, direkt aus dem Repository lesen kann
- Einen als Verified gekennzeichneten Commit mit kryptografischer Signatur von einem Unverified-Commit unterscheiden, dessen Autorenfeld unbelegt ist
- Wenden Sie den Fix an: Erfordern Sie signierte Commits für freigegebene Branches ohne Administratorumgehung, sodass der Server nicht signierte Arbeiten ablehnt, anstatt sich darauf zu verlassen, dass jemand einen Ausweis bemerkt
Spoofing des Commit-Autors — Trainingsschritte
-
Der Branch, zu dem er bereits pushen kann
Heute nimmt Bob Voxmere ins Visier, ein Zahlungsinfrastrukturunternehmen, bei dem er als Auftragnehmer arbeitet. Sein Vertrag gewährt ihm Push-Zugriff auf den gemeinsamen Integrations-Branch von Ledger-Core, was normal ist: Dort leisten Mitwirkende ihre Arbeit. Was er nicht hat, ist eine Möglichkeit, irgendjemanden dazu zu bringen, ihm zu vertrauen. Nichts auf der Integration wird versendet, bis ein Betreuer das Branch-Protokoll liest und es in den Haupt-Branch hochstuft.
-
Klonen Sie den Dienst
Bob klont Ledger-Core, den Dienst, der alle Abwicklungs-, Rückerstattungs- und Versöhnungspfade bei Voxmere abwickelt. Als Auftragnehmer verfügt er über Lesezugriff, es handelt sich also um eine normale Arbeitskasse.
-
Lesen Sie die Namen aus der Geschichte vor
Bob benötigt die genaue Identität des Autors des Betreuers und muss diese nicht erraten oder fälschen. Jeder jemals getätigte Commit trägt den Namen und die E-Mail-Adresse seines Autors und das Protokoll druckt sie auf Anfrage aus. Ein Name wiederholt sich weitaus häufiger als die anderen. Dara Whitlock ist die Betreuerin, deren Änderungen ohne Argumente durchgehen, daher ist es ihre Identität wert, ausgeliehen zu werden.
-
Leihen Sie sich den Namen aus
Bob richtet seine lokale Git-Konfiguration auf Dara Whitlock. Es gibt keine Herausforderung, keine Überprüfung und keine Bestätigung: Der Befehl legt eine Zeichenfolge fest und Git glaubt daran.
-
Leihen Sie sich die Adresse aus
Jetzt die E-Mail. Dies ist wichtiger als der Name: Die Plattform ordnet die E-Mail-Adresse des Autors eines Commits einem Benutzerkonto zu, sodass Bobs Commits ab diesem Zeitpunkt mit Daras Profil und ihrem daran angehängten Avatar gerendert werden.
-
Der Webhook-Verifizierer
Bob öffnet die Akte, wegen der er gekommen ist. Jedes Zahlungsereignis, das das Hauptbuch erreicht, kommt als vom Prozessor signierter Webhook an, und diese Funktion entscheidet, ob diese Signatur gut ist. Im Moment wird der vollständige Digest in konstanter Zeit verglichen. Es ist richtig.
-
Verkürzen Sie den Vergleich
Bob ändert eine Zeile. Der Vergleich wird immer noch ausgeführt, verwendet immer noch denselben Helfer und sieht immer noch wie eine Signaturüberprüfung aus. Es stoppt einfach nach den ersten acht Zeichen. Er schreibt es als Leistungsoptimierung, denn so sieht es aus.
-
Was acht Zeichen kosten
Eine vollständige Signatur besteht aus vierundsechzig Hexadezimalzeichen. Wenn man acht davon vergleicht, bleiben zweiunddreißig Bits übrig, was ein paar Sekunden Raten erfordert. Jeder, der den Webhook-Endpunkt erreichen kann, kann dann beliebige Zahlungsereignisse signieren, und das Hauptbuch akzeptiert jedes einzelne davon als echt.
-
Unter dem geliehenen Namen verpflichten
Bob verpflichtet sich. Er übergibt kein Flag, überschreibt nichts und verwendet keinen speziellen Befehl: Die Identität, die er vor zwei Schritten festgelegt hat, ist einfach das, was Git auf den Commit stempelt.
-
Lesen Sie es noch einmal
Bob überprüft seine Arbeit. Der Commit, den er gerade durchgeführt hat, nennt Dara Whitlock als Autorin, mit ihrer Adresse daneben. Es gibt nichts in der Ausgabe, das es als ungewöhnlich kennzeichnet, da aus Git-Sicht nichts Ungewöhnliches passiert ist. Es zeichnete die Identität auf, die ihm gegeben wurde.
Abdeckung der Sicherheits-Frameworks
CWE
- CWE-345 Insufficient Verification of Data Authenticity
- CWE-347 Improper Verification of Cryptographic Signature
MITRE ATT&CK
- T1036 Masquerading
CIS Controls
- CIS 16 Application Software Security
NIST CSF
- PR.AT-02 Individuals in specialized roles are provided with awareness and training so that they possess the knowledge and skills to perform relevant tasks with cybersecurity risks in mind
- PR.PS Platform Security