Soll ich Open Source Code selbst signieren?

11

Ich verwende macOS 10.14 und bin auf ein Problem gestoßen, als ich versucht habe, ein Open Source-Plugin für Vim zu installieren, das ich auf Github gefunden habe. Ich habe den Quellcode heruntergeladen und selbst kompiliert, was gut funktioniert hat, aber als ich ihn ausgeführt habe, wurde die Ausführung unterbrochen, weil die "Codesignatur [der ausführbaren Datei] für die Verwendung im Prozess nicht gültig ist".

Dies hat mir viele Fragen gestellt, um die ich mich nicht kümmern kann:

Ich könnte es entweder selbst unterschreiben, aber würde das nicht den Zweck der Codesignatur ruinieren? Gibt es einen qualitativen Unterschied beim Signieren von Code aus dem Internet und beim Zulassen von Apps von nicht identifizierten Entwicklern im Dialogfeld "Diese App wurde aus dem Internet heruntergeladen"?

Wenn ich es nicht tue, wessen "Verantwortung" ist es dann zu unterschreiben? Der Repository-Betreuer? Die Mitwirkenden? Erwartet Apple, dass Open Source-Entwickler immer eine Apple Developer ID haben? Oder habe ich den Zweck der Codesignatur falsch verstanden?

Bearbeiten:

Zur Verdeutlichung ist meine Frage, wie ich mit nicht signiertem Quellcode umgehen soll, den ich selbst kompiliere, da ich nicht erwarte, dass Mitwirkende ihren Code immer signieren können oder sich daran erinnern können, insbesondere wenn es um winzige Beiträge zu Open Source-Projekten geht mit vielen Mitwirkenden.

Syntaxén
quelle

Antworten:

9

Ad-hoc-Codesignatur

Verwenden Sie für Anwendungen und Binärdateien von Drittanbietern, die Sie selbst kompilieren und für die eine Codesignatur erforderlich ist, eine Ad-hoc-Codesignatur .

  • Ich gehe davon aus, dass die Anwendung nicht ohne Signatur ausgeführt wird.
  • Ich gehe davon aus, dass der Antrag nicht verteilt wird.
  • Ich gehe davon aus, dass es Ihnen egal ist, ob die Identität der Unterschrift gültig ist.

Eine Ad-hoc-Signatur bietet keine zuverlässigen Sicherheitsvorteile. Es kann verwendet werden, um festzustellen, ob die Anwendung geändert wurde, und um Sicherheitsbeschränkungen wie Berechtigungen auf eine Anwendung anzuwenden.

Eine Ad-hoc-Signatur wird dagegen validiert, codesignjedoch nicht spctl. Dies kann abhängig von der zu signierenden Binärdatei von Bedeutung sein oder auch nicht. Für Anwendungen und ausführbare Dateien ist dies unwahrscheinlich, da sie spctlnicht auf lokal erstellten Binärdateien ausgeführt werden.

Warum Code Sign?

Zur verfeinerten Frage:

Wie ich mit nicht signiertem Quellcode umgehen soll, den ich selbst kompiliere, da ich nicht erwarte, dass Mitwirkende immer in der Lage sind oder sich daran erinnern, ihren Code zu signieren, insbesondere wenn es um winzige Beiträge zu Open Source-Projekten mit vielen Mitwirkenden geht.

Für die meisten selbst kompilierten Anwendungen ist keine Codesignatur erforderlich. Dies setzt voraus, dass Sie dem Code der Anwendung vertrauen. Unter macOS können Sie nicht vertrauenswürdige Anwendungen über den Finder öffnen. Weitere Informationen finden Sie unter Öffnen einer App von einem nicht identifizierten Entwickler durch Apple .

Wenn Sie dem Code oder den Entwicklern nicht vertrauen, kompilieren Sie die Anwendung nicht und führen Sie sie nicht aus.

Deine Verantwortung

Der Anbieter des Quellcodes hat keine Verantwortung oder Verpflichtung, vorgefertigte, mit Code signierte Binärdateien bereitzustellen. Alle Codesignaturen, die Sie selbst kompiliert haben, liegen in Ihrer Wahl und Verantwortung.

  • Apple verlangt, dass Einsendungen an ihre App Stores mit einem Code signiert werden.

  • Apple- Anforderungsentwickler außerhalb ihrer App Stores signieren ihren Code, dies ist jedoch noch nicht erforderlich.

In beiden Fällen werden nur die endgültigen Binärdateien signiert. Der ursprüngliche Quellcode und die Ressourcen sind nicht signiert.

Der Quellcode ist nicht signiert

Der Quellcode selbst kann für macOS nicht auf sinnvolle Weise signiert werden. Quelldateien und Code können wie jede andere Datei digital signiert werden. Dies hat jedoch keinen Einfluss darauf, wie die resultierende Anwendung oder Binärdatei von macOS behandelt wird.

Ad-hoc-Code Signieren einer Mac-Anwendung

Um eine Anwendung unter macOS mit einer Ad-hoc-Signatur zu codieren, setzen Sie das Identitätsflag -sauf -:

codesign --force -s - </path/to/application>

Alle anderen Regeln, Anforderungen und Permutationen des codesignBefehls bleiben gleich.

Das Flag --forcewird hier verwendet, um vorhandene Signaturen zu überschreiben.

Möglicherweise müssen Sie --deepdem codesignBefehl das Flag hinzufügen , um Unterressourcen wie Frameworks und eingebettete Dienste zu signieren.

Graham Miln
quelle
Warum empfehlen Sie Ad-hoc-Signaturen? Die von Ihnen verknüpfte Antwort lautet: "In der Praxis ist das Erstellen von ad-hoc signierten Binärdateien nur für Apple-Entwickler von praktischem Wert."
Wowfunhappy
Das ergibt für mich keinen Sinn. Das Hinzufügen einer Ad-hoc-Signatur bedeutet, dass die Signaturüberprüfung fehlschlägt. Dies bringt Sie überhaupt nicht weiter - das Programm schlägt mit genau der gleichen Fehlermeldung fehl.
Jksoegaard
Ja, ich sehe, dass Sie den Link zu meiner Antwort bei der Ad-hoc-Unterzeichnung entfernt und die Annahmen hinzugefügt haben. Aber gelten diese Annahmen überhaupt? - Sie scheinen zu antworten, als ob es um das Ausführen einer Anwendung geht. Es ist nicht. Es geht darum, eine bereits signierte Anwendung zu haben, zu der das OP ein Plugin hinzufügen möchte. Das heißt, das Plugin muss die Bibliotheksvalidierung mit der ursprünglich signierten Anwendung (Vim) als Master bestehen.
Jksoegaard
Die ursprüngliche Frage wurde bearbeitet. Es ist ziemlich breit wie es ist. Der Fragesteller kann diese Antworten kommentieren, klären und ausprobieren, um zu sehen, was für ihn funktioniert. Diese Antwort versucht, die bearbeitete Frage zu beantworten und einen praktischen Ansatz zu bieten. Wenn es nicht hilft oder falsche Annahmen hat, kann der Fragesteller hoffentlich einschalten und seine Absicht klären.
Graham Miln
1
Diese Antwort war hilfreich. Meine Frage war ziemlich allgemein, weil ich fand, dass die Apple-Dokumente etwas schwer zu verstehen sind. Die Verwendung von Ad-hoc-Signaturen löste das spezifische Problem, das ich hatte.
Syntaxén
5

Das Signieren des Programms selbst ruiniert nicht den Zweck der Codesignatur. Der allgemeine Zweck der Codesignatur besteht darin, zu überprüfen, ob es sich bei dem Programm um eine unveränderte Kopie handelt, die ursprünglich von einer bestimmten Entität (Person oder Firma) erstellt wurde. Wenn Sie ein Programm selbst signieren, um es nur auf Ihrem Computer auszuführen, können Sie dem System ermöglichen, zu überprüfen, ob Sie tatsächlich die Binärdatei erstellt haben und ob sie nicht von anderen geändert wurde.

Der qualitative Unterschied zwischen dem Signieren der Anwendungsbinärdatei selbst und dem Zulassen von Apps von nicht identifizierten Entwicklern in GateKeeper besteht darin, dass Sie im ersten Fall die Ausführung einer einzelnen, spezifischen App zulassen. Im zweiten Fall öffnen Sie die Möglichkeit, dass Sie viele öffnen können verschiedene Apps, indem Sie mit der rechten Maustaste darauf klicken und Öffnen wählen. Das heißt, es ist restriktiver und daher etwas "sicherer", wenn Sie das spezifische Programm selbst signieren.

Die Verantwortung für die Unterzeichnung liegt ganz bei Ihnen. Der Open Source-Entwickler kann den Quellcode nicht signieren - es ist nur möglich, die kompilierten Binärdateien zu signieren. Wenn Sie die kompilierten Binärdateien selbst erstellen, müssen Sie sie signieren.

Sie können sich auf der Apple-Website für ein Entwicklerkonto anmelden, mit dem Sie ein Zertifikat erstellen können, das zum Signieren verwendet werden kann. Wenn Sie Entwickler sind und regelmäßig Binärdateien für Macs kompilieren, ist dies die bevorzugte Methode. Wenn dies eine einmalige Sache ist, die Sie wahrscheinlich nie wieder tun werden, ist es wahrscheinlich übertrieben, diesen Prozess zu durchlaufen. YMMV.

Andere Antworten auf Ihre Frage hier empfehlen, dass Sie Ad-hoc-Signierung für Ihre Binärdatei verwenden. Das wird nicht funktionieren. Sie müssen eine gültige Signatur generieren, damit die Binärdatei mit GateKeeper in der sichersten Einstellung ausgeführt wird.

jksoegaard
quelle
1

Soll ich Open Source Code selbst signieren?

Wenn Sie nicht der Entwickler sind, dann nein.

Kurz gesagt, die Codesignatur ist eine Methode, mit der Sie (der Entwickler) sagen, wer Sie sind und der Code hat sich seit Ihrer letzten Signierung nicht geändert.

Gibt es einen qualitativen Unterschied beim Signieren von Code aus dem Internet und beim Zulassen von Apps von nicht identifizierten Entwicklern im Dialogfeld "Diese App wurde aus dem Internet heruntergeladen"?

Es klingt wie Ihre verwirrende Codesignatur (was Entwickler benötigen, um Apps im App Store zu veröffentlichen) und Gatekeeper (was Ihren Mac vor der Installation von Software von nicht identifizierten Entwicklern schützt).

Wenn Sie Ihrem Mac erlauben, Software sowohl aus dem App Store als auch von identifizierten Entwicklern zu installieren, wird das Popup weiterhin darauf hingewiesen, dass Software installiert wird

Und wenn es von einem unbekannten Entwickler stammt, erhalten Sie dasselbe Popup mit einem "Warnsymbol".

Sie können die Software weiterhin installieren. Dies ist nur ein Mechanismus, der die Benutzerinteraktion dazu zwingt, die Software tatsächlich zu installieren, und Ihnen eine Sicherheitsebene gegen selbst installierte Malware bietet.

Allan
quelle
Vielen Dank, dies beantwortet einige, aber nicht alle Fragen. Ich habe meine Frage bearbeitet, um zu versuchen, genauer zu sein, was ich
frage