Wie erkennt macOS den Signaturstatus einer aus dem Internet heruntergeladenen App?

8

Ich habe mit Safari eine App aus dem Internet heruntergeladen. Bei der Ausführung benachrichtigt macOS, dass die App von einem nicht identifizierten Entwickler stammt.

Wie kann macOS diese Informationen ermitteln? Wo werden die Signaturmetadaten für eine App gespeichert?

Novellizator
quelle
Wenn ich Ihre Frage verstehe, wird diese Warnung angezeigt, da eine in Safari heruntergeladene Anwendung nicht von einem Apple bekannten Entwickler signiert wurde. Fragen Sie, wo sich das Programm xyz auf Ihrem Computer befindet?
Jake3231

Antworten:

13

Die Informationen werden in erweiterten Attributen gespeichert, wobei zusätzliche Informationen möglicherweise in eine Anwendung eingebettet sind.

Erweiterte Attribute

Diese Quarantäneinformationen werden als erweitertes Attribut gespeichert . Verwenden Sie das xattrTool, um die Attribute anzuzeigen, die einer Datei oder Anwendung zugeordnet sind.

Das Attribut, das diese Nachricht verursacht, ist com.apple.quarantine.

Siehe Wie entferne ich die "erweiterten Attribute" einer Datei in Mac OS X? und App kann nicht geöffnet werden, da sie von einem unbekannten Entwickler stammt, um weitere Informationen zu erhalten.

Gatekeeper- und Codesignaturen

Das erweiterte Attribut wird von Gatekeeper unter macOS verwendet und wird unter Festlegen (Wiederherstellen) des Attributs com.apple.quarantine erläutert.

Eine optionale digitale Signatur, die in eine Anwendung eingebettet ist, wird verwendet, um den Entwickler der Anwendung zu bestimmen. Wenn keine Signatur gefunden wird, präsentiert macOS die Anwendung als von einem nicht identifizierten Entwickler stammend.

Graham Miln
quelle
5
Das ist nicht ganz richtig. Die Quarantänedaten werden verwendet, um die Quelle einer heruntergeladenen Datei zu verfolgen , die Signatur befindet sich jedoch an einer anderen Stelle.
Abenddämmerung -inaktiv-
1
@duskwuff ist korrekt. Quarantäne führt zum Popup "XXX wurde aus dem Internet heruntergeladen. Möchten Sie es wirklich öffnen?"
Barmar
1
Nicht alle Dateien und Anwendungen sind mit Code signiert. Viele Anwendungen sind dies nicht. In diesen Fällen ist keine eingebettete Signatur vorhanden. Dies ist bei Nachrichten mit "nicht identifizierten Entwicklern" der Fall.
Graham Miln
7

Tatsächlich ist die Meldung "Nicht identifizierter Entwickler ..." das Ergebnis einer Kombination beider Aufgaben: Überprüfen des Attributs com.apple.quarantine und der Codesignaturressourcen (in * / Contents / _CodeSignature / CodeResources), während der tatsächliche Signaturstatus lautet ausschließlich bestimmt durch * / CodeResources .

Sie können das erweiterte Attribut erhalten, indem Sie Folgendes eingeben:

$ xattr -p com.apple.quarantine /Applications/*.app

Auf die Codesignaturinformationen wird zugegriffen, indem Folgendes eingegeben wird:

$ codesign -dvvv /Applications/*.app

Beispiel:

$ codesign -dvvvv /Applications/Google\ Chrome.app/
Executable=/Applications/Google Chrome.app/Contents/MacOS/Google Chrome
Identifier=com.google.Chrome
Format=app bundle with Mach-O thin (x86_64)
CodeDirectory v=20200 size=273 flags=0x800(restrict) hashes=3+3 location=embedded
OSPlatform=36
OSSDKVersion=658432
OSVersionMin=657664
Hash type=sha256 size=32
CandidateCDHash sha1=bc8e3dffe7d9d5242e09ea80a220ed365d46fdf2
CandidateCDHash sha256=d7ae6211906bb17d593ce9c215d190a81f37e658
Hash choices=sha1,sha256
Page size=4096
CDHash=d7ae6211906bb17d593ce9c215d190a81f37e658
Signature size=8949
Authority=Developer ID Application: Google, Inc. (EQHXZ8M8AV)
Authority=Developer ID Certification Authority
Authority=Apple Root CA
Timestamp=20. Mar 2018 at 07:23:20
Info.plist entries=36
TeamIdentifier=EQHXZ8M8AV
Sealed Resources version=2 rules=7 files=203
Internal requirements count=1 size=240

Der wichtigste Teil ist die Zertifikatskette (und die Vertrauenskette):

Authority=Developer ID Application: Google, Inc. (EQHXZ8M8AV)
Authority=Developer ID Certification Authority
Authority=Apple Root CA

Hier sind drei verschiedene Behörden sichtbar:

  1. Stammzertifikat: Apple Root CA.
  2. Fortgeschrittenes Apple-Entwicklerzertifikat: Developer ID Certification Authority
  3. Entwicklerzertifikat: Google, Inc. (EQHXZ8M8AV)

Dies bedeutet, dass die App mit einem Entwicklerzertifikat signiert ist, das von Apples zwischengeschalteter Entwicklerbehörde veröffentlicht und signiert wurde. Dieses Zertifikat wird selbst von Apples Root-Zertifizierungsstelle veröffentlicht und signiert.

Diese Kette qualifiziert Google (oder genauer: das Team / die Einheit Google, Inc. (EQHXZ8M8AV)) als von Apple identifizierten Entwickler.

Sie können Apps auch selbst oder mit einem Codesign-Zertifikat einer anderen Zwischen- / Stammbehörde codieren, dies wird Gatekeeper jedoch nicht überwinden.

Jetzt sind vier Permutationen möglich, vorausgesetzt, Gatekeeper ist aktiviert (ohne Selbstsignierung / Aliensignatur):

  • Kein com.apple.quarantine-Attribut / kein Apple Developer-Zertifikat (Beispiel: Brühfass installiert Apache CouchDB )
  • Kein com.apple.quarantine-Attribut / ein Apple Developer-Zertifikat (Beispiel: Brühfass installiert Google Chrome )
  • Ein com.apple.quarantine-Attribut / kein Apple Developer-Zertifikat (Beispiel: Apache CouchDB wird installiert, indem die Zip-Datei von der Website heruntergeladen und die entpackte App nach / Applications / kopiert wird. )
  • Ein com.apple.quarantine-Attribut / ein Apple Developer-Zertifikat (Beispiel: Google Chrome wird installiert, indem das dmg von der Website heruntergeladen und die App in / Applications / kopiert wird. )

In den ersten beiden Fällen wird die App einfach gestartet. Im dritten Fall erhalten Sie die Meldung " Nicht identifizierter Entwickler" . Sie können dies beheben, indem Sie das erweiterte Attribut xattr -d com.apple.quarantine *(= Fall 1) entfernen . Im vierten Fall erhalten Sie die Meldung "* wurde aus dem Internet heruntergeladen. Möchten Sie sie wirklich öffnen?"

Klanomath
quelle
5

Wie kann macOS diese Informationen ermitteln? Wo werden die Signaturmetadaten für eine App gespeichert?

Die Signatur wird in der Anwendungsbinärdatei selbst gespeichert, mit einigen zusätzlichen Daten im Anwendungspaket (in der Datei Contents/_CodeSignature/CodeResources).

Mit dem Befehlszeilenprogramm können Sie einige Informationen zur Signatur abrufen codesign- zum Beispiel:

# codesign -dv /Applications/Preview.app
Executable=/Applications/Preview.app/Contents/MacOS/Preview
Identifier=com.apple.Preview
Format=app bundle with Mach-O thin (x86_64)
CodeDirectory v=20100 size=21314 flags=0x0(none) hashes=659+5 location=embedded
Platform identifier=4
Signature size=4485
Info.plist entries=35
TeamIdentifier=not set
Sealed Resources version=2 rules=13 files=2077
Internal requirements count=1 size=68
Dämmerung -inaktiv-
quelle