Überprüfung der Abhängigkeitsauthentizität in Maven POM-basierten automatisierten Build-Systemen

8

Ich wurde gerade auf einen sehr interessanten Artikel zu einem Sicherheitsproblem hingewiesen Cross Build Injektion (XBI). Im Grunde ist es ein fantastischer Name für das Schmuggeln von schlechtem Code über automatisierte Build-Systeme wie Ameise, Maven oder Efeu in eine Anwendung zur Build-Zeit.

Das Problem könnte durch die Einführung einer kryptografischen Signaturvalidierung für Abhängigkeiten gemildert werden, wie sie derzeit bei vielen Betriebssystemen zum Herunterladen von Paketen vorhanden ist.

Um es klar zu sagen: Ich bin nicht über die Bereitstellung von md5- oder sha1-Hashes für die Artefakte. Das ist bereits geschehen, aber diese Hashes werden am selben Ort wie die Artefakte gespeichert. Sobald also ein böswilliger Hacker das Repository kompromittiert und das Artefakt ersetzen kann, können sie auch die Hashes ersetzen.

Was nun tatsächlich benötigt wird, ist eine Art von PKI, die es den Entwicklern erlaubt, ihre Artefakte und Maven zu signieren, um diese Signaturen zu verifizieren. Da die Signatur mit dem privaten Schlüssel des Entwicklers erstellt wird, kann sie nicht manipuliert werden, wenn nur das Repository kompromittiert ist.

Kennt jemand den Zustand dieses in maven?

    
er4z0r 22.07.2010, 08:47
quelle

4 Antworten

4

Update: Die unten genannten Prüfsummen sind in der Tat nur für Integritätsprüfungen und werden tatsächlich mit den Artefakten gespeichert, so dass sie die Frage nicht beantworten.

Eigentlich braucht man, um Artefakte zu unterzeichnen PGP mit ihnen zu einem Repository zu laden, die mit zentraler ( synchronisiert Maven GPG Plugin kann für diesen Schritt helfen). Um Signaturen zum Download zu überprüfen, werden Sie aufgefordert, einen Repository-Manager zu verwenden, der diese Funktion unterstützt. Von So erstellen Sie PGP-Signaturen mit Maven :

  

Wenn Sie ein Tool verwenden, das herunterlädt   Artefakte aus dem Central Maven   Repository, müssen Sie sicherstellen, dass   Sie bemühen sich zu validieren   dass diese Artefakte einen gültigen PGP haben   Signatur, gegen die verifiziert werden kann   ein öffentlicher Schlüsselserver. Wenn du es nicht tust   Signaturen validieren, dann haben Sie keine   garantiere, was du bist   Herunterladen ist das Originalartefakt.   Eine Möglichkeit, Signaturen zu überprüfen   Artefakte ist ein Repository zu verwenden   Manager wie Nexus Professional. Im   Nexus Professional, das Sie konfigurieren können   die Procurement Suite, um alle zu überprüfen   heruntergeladenes Artefakt für ein gültiges PGP   Unterschrift und validiere die Unterschrift   gegen einen öffentlichen Schlüsselserver.

     

Wenn Sie Software mit Hilfe von entwickeln   Maven, du solltest ein PGP generieren   Unterschrift für Ihre Veröffentlichungen.   Releasing Software mit gültigen   Signaturen bedeutet, dass Ihre Kunden   kann das ein Software-Artefakt verifizieren   wurde vom ursprünglichen Autor erstellt   und dass es nicht von geändert wurde   jemand auf der Durchreise. Die meisten großen OSS   schmiedet wie die Apache Software   Foundation benötigt alle Projekte   veröffentlicht von einem Release-Manager, dessen   Schlüssel wurde von anderen Mitgliedern unterzeichnet   von der Organisation, und wenn Sie wollen   um Ihre Softwareartefakte zu synchronisieren   nach Maven Central müssen Sie    ​​bietet PGP-Signaturen .

Siehe auch

Die Maven installieren Plugin Integrität Prüfsummen erstellen (MD5, SHA-1) und Sie können eine Prüfsummenrichtlinie pro Repository konfigurieren (siehe checksumPolicy ).

Maven Repository Manager können / sollten auch damit umgehen können. Siehe zum Beispiel:

Pascal Thivent 22.07.2010, 14:16
quelle
4

tl; dr :

Nicht vorhandene Verifizierungsmechanismen in Maven und fehlende Sprachkonstrukte in der POM-DSL sind eine ernsthafte Sicherheitsbedrohung. Bis MNG-6026 angesprochen wird, verwenden Sie etwas wie Gradle Witness .

Einführung

Keine der Antworten scheint das Problem zu lösen. Das Signieren von Artefakten ist nur ein erster Schritt in die richtige Richtung. Aber die Bedingung, wenn ein Schlüssel, der zum Signieren des Artefakts verwendet wird, als vertrauenswürdig / gültig angesehen wird, ist sehr undurchsichtig. Zum Beispiel: Wie funktioniert pgpverify-maven-plugin oder Nexus Professional tatsächlich überprüfen, ob die Signatur für das Artefakt gültig ist? Nur das Abrufen des Schlüssels vom Schlüsselserver und das Überprüfen des Artefakts reichen nicht aus.

Sonatype erwähnt dies kurz in ihrem Blogpost :

  

PGP Signaturen: Eine andere Ebene

     

Auf der Verbrauchsseite können Sie die Beschaffung in Nexus Professional verwenden   um auf das Vorhandensein einer Signatur zu prüfen, und auf der Veröffentlichungsseite   Signieren Sie Ihre Releases mit einer PGP-Signatur und machen Sie PGP-Signaturen   auf einem öffentlichen Schlüsselserver verfügbar ist, wird den Leuten helfen, dies zu überprüfen   Artefakte und Prüfsummen sind konsistent. Hinweis: Ich denke, da ist mehr   Es muss daran gearbeitet werden, Tools zu erstellen, die die Verwendung von PGP-Schlüsseln fördern   und, noch wichtiger, geben Sie Repository-Administratoren eine gewisse Kontrolle   über welche Schlüssel vertrauenswürdig sind.

(Betonung meiner)

Erweitern des Project Object Model (POM) mit Vertrauensinformationen

Was wir brauchen, ist die Möglichkeit, eine Vertrauensbeziehung von Ihrem Projekt oder Artefakt zu den erklärten Abhängigkeiten zu modellieren. Wenn also alle Beteiligten eine solche Beziehung deklarieren, können wir eine "Vertrauenskette" von der Wurzel (z. B. dem Projekt) über ihre Abhängigkeiten bis zur allerletzten transitiven Abhängigkeit erzeugen. Das Project Object Model (POM) muss um eine & lt; verification / & gt; Element für Abhängigkeiten.

Aktuelle Situation

Im Moment haben wir etwas wie

%Vor%

harte Abhängigkeiten

Für harte Abhängigkeiten, & lt; Verifizierung / & gt; könnte die sha256sum von Artefakten und ihre POM-Datei enthalten:

%Vor%

Weiche Abhängigkeiten

Wenn weiche oder bereichsabhängige Abhängigkeiten verwendet werden, können wir den öffentlichen Schlüssel (oder mehrere) des Schlüsselpaars angeben, das zum Signieren der Artefakte verwendet wird

%Vor%

Und jetzt?

Dank Peter auslösenden mir, ich habe ein Feature-Request für Apache Maven angehoben: MNG -6026 . Mal sehen, was als nächstes passiert.

Andere Ansätze

Gradle Witness macht etwas Ähnliches für Großartiges. Aber es hat einige Nachteile:

  • Es ist auf der Oberseite von Gradle gebaut (und in POM gebaut)
  • Es erlaubt nur harte Abhängigkeiten, weil es Hashes verwendet.

Dasselbe scheint auch für das Maven Enforcer Plugin zu gelten.

pgpverify-maven-plugin folgt offenbar auch diesem Ansatz. Obwohl Dokumentation dort fehlt, ist ein Test für ein so genanntes keysMap Eigentum , die auch href="https://github.com/s4u/pgpverify-maven-plugin/blob/7dc1cb0f2c74352e7995c7cf1261dba040b7eb30/src/it/sigOkKeysMap/pom.xml#L46"> keysMapLocation .

    
Flow 14.01.2016 16:58
quelle
0

"Das Problem könnte durch die Einführung einer kryptografischen Signaturvalidierung für Abhängigkeiten gemildert werden, wie sie derzeit bei vielen Betriebssystemen zum Herunterladen von Paketen vorhanden ist."

Was Sie suchen, um Ihre JAR-Dateien zu signieren. Ссылка

Sie müssen Ihren privaten Schlüssel mit geeigneten Maßnahmen schützen. Aber wenn Sie über eine solche Gelassenheit paranoid sind, müssen Sie sich vielleicht über PKI, Public Key Infrastructures informieren.

    
Atilla Ozgur 29.07.2010 10:38
quelle
0

Es ist jetzt möglich, PGP-Signaturen in maven mit diesem Plugin zu validieren: Ссылка

So konfigurieren Sie es in Ihrem übergeordneten pom.xml :

%Vor%

Diese Konfiguration bindet die PGP-Prüfung an die Phase install .

Wenn Sie den Check nicht ständig ausführen möchten, entfernen Sie das Element <executions /> und führen Sie es wie folgt manuell aus:

%Vor%     
Val Blant 15.08.2014 00:19
quelle