Grundsätzlich bedeutet Ad-hoc-Signierung in diesem Zusammenhang, dass die Binärdatei überhaupt ohne kryptografischen Beweis signiert wird.
Im Wesentlichen werden Binärdateien normalerweise durch Hinzufügen eines sogenannten CMS (einer kryptografischen Nachricht) signiert, wobei der Hash des CodeDirectory die Nachricht ist, die von der signierenden Identität signiert wird. Dies bedeutet, dass ein Außenstehender überprüfen kann, ob der Code tatsächlich von jemandem signiert wurde, der den privaten Schlüssel für diese Identität besitzt.
Beim Ausführen von Programmen kann das macOS-System überprüfen, ob diese Signaturen gültig sind und ob es der Signaturidentität vertraut. Wenn dies der Fall ist, führen Sie das Programm aus. Dies sind die Grundlagen der GateKeeper-Funktionalität.
Ad-hoc-signierte Binärdateien unterscheiden sich erheblich, da sie kein solches CMS enthalten. Stattdessen enthält es einfach den SHA-1-Hashwert des CodeDirectory ohne einen kryptografischen Nachweis seiner Gültigkeit und keinen Pfad für Zertifikate / Identitäten, anhand dessen überprüft werden kann.
Das CodeDirectory ist ein Objekt, das eine bestimmte Instanz von statischem Code beschreibt, indem es Hash-Werte für verschiedene Codeteile enthält, aus denen die Anwendung besteht. Indem Sie sicherstellen, dass das CodeDirectory durch Überprüfen der kryptografischen Signatur nicht manipuliert wird und dass die verschiedenen Codebits der Anwendung mit den im Verzeichnis gespeicherten Hashwerten übereinstimmen, können Sie sicherstellen, dass der Code nicht manipuliert wurde.
Ohne den kryptografischen Nachweis kann diese "nicht manipulierte" Prüfung nicht auf normale Weise durchgeführt werden.
Stattdessen werden ad-hoc signierte Binärdateien überprüft, indem der SHA-1-Hashwert mit einer Liste von "bekannt gut" -Hashwerten verglichen wird, die im statischen Vertrauenscache im Kernel gespeichert sind.
Im Wesentlichen bedeutet dies, dass die "erheblichen Einschränkungen" für jede Anwendung, die Sie selbst ad-hoc unterschreiben, darin bestehen, dass sie nirgendwo eine Überprüfung besteht. Es ist im Grunde dasselbe wie eine nicht signierte Binärdatei.
Wenn Sie jedoch Apple sind, können Sie Anwendungen erstellen, die nicht wie gewohnt codiert sind und stattdessen vom Kernel explizit als vertrauenswürdig eingestuft werden. Wenn Apple beispielsweise sicherstellen möchte, dass eine Anwendung nicht manipuliert wird, wenn sie in einem frühen Stadium des Systemstarts ausgeführt wird, in dem die vollständige Überprüfung der Signaturidentität nicht ausgeführt wird (oder nicht verfügbar ist), kann die Ad-hoc-Signatur verwendet werden. Diese Anwendungen können immer vom statischen Vertrauenscache überprüft werden, unabhängig davon, ob Ihr Zertifikat-Repository abgespritzt ist oder ähnliches.
In der Praxis ist das Erstellen von ad-hoc signierten Binärdateien nur für Apple-Entwickler von praktischem Wert.
Eine kleinere Dokumentation zur Ad-hoc-Signatur finden Sie im Entwicklerbereich von Apple. Zum Beispiel:
https://developer.apple.com/documentation/security/seccodesignatureflags/kseccodesignatureadhoc
Sie können aber auch Ausschnitte von Dokumenten im Quellcode für das Dienstprogramm Codesign selbst und im Quellcode für libsecurity finden.
codesign -dv --verbose=4 /path/to/the.app
. Sie erhalten eine Zeile mit der Aufschrift "Signature=adhoc
Ad-hoc-Signatur". Bemerkenswerterweise fehlen andere Schlüssel, die normalerweise in einer regelmäßig signierten iOS-Anwendung vorhanden sind, wie z. B.Authority
undTeamIdentifier