Bagaimana cara macOS mengidentifikasi status penandatanganan aplikasi yang diunduh dari Internet?

8

Saya mengunduh aplikasi dari Internet menggunakan Safari. Setelah menjalankannya, macOS memberitahukan bahwa aplikasi tersebut berasal dari pengembang yang tidak dikenal.

Bagaimana MacOS dapat menentukan informasi ini? Di mana metadata penandatanganan untuk aplikasi disimpan?

Novellizator
sumber
Jika saya memahami pertanyaan Anda, Anda mendapatkan lansiran ini karena aplikasi yang Anda unduh di Safari tidak ditandatangani oleh pengembang yang dikenal oleh Apple. Apakah Anda bertanya di mana program xyz berada di komputer Anda?
Jake3231

Jawaban:

13

Informasi disimpan dalam atribut yang diperluas, dengan informasi tambahan yang berpotensi tertanam dalam aplikasi.

Atribut yang Diperpanjang

Informasi karantina ini disimpan sebagai atribut yang diperluas . Gunakan xattralat untuk melihat atribut yang terkait dengan file atau aplikasi.

Atribut yang menyebabkan pesan ini adalah com.apple.quarantine.

Lihat Bagaimana cara menghapus "atribut diperluas" pada file di Mac OS X? dan Aplikasi tidak dapat dibuka karena berasal dari pengembang yang tidak dikenal untuk detail lebih lanjut.

Gatekeeper dan Code Signatures

Atribut diperluas digunakan oleh Gatekeeper pada macOS dan dibahas dalam Cara mengatur (mengembalikan) atribut com.apple.quarantine?

Tanda tangan digital opsional yang tertanam dalam aplikasi digunakan untuk menentukan pengembang aplikasi. Jika tanda tangan tidak ditemukan, macOS menyajikan aplikasi tersebut dari pengembang yang tidak dikenal.

Graham Miln
sumber
5
Ini tidak sepenuhnya benar. Data karantina digunakan untuk melacak sumber file yang diunduh, tetapi tanda tangannya ada di tempat lain.
duskwuff -inactive-
1
@duskwuff benar. Karantina menyebabkan popup "XXX diunduh dari Internet, Anda yakin ingin membukanya?"
Barmar
1
Tidak semua file dan aplikasi ditandatangani kode. Banyak aplikasi tidak, jadi dalam kasus itu tidak ada tanda tangan tertanam. Ini akan menjadi kasus untuk pesan "pengembang tidak dikenal".
Graham Miln
7

Sebenarnya pesan "Pengembang tidak dikenal ..." adalah hasil kombinasi dari kedua tugas: memeriksa atribut com.apple.quarantine dan sumber daya penandatanganan kode (di * / Konten / _CodeSignature / CodeResources) sementara status penandatanganan aktual adalah semata-mata ditentukan oleh * / CodeResources .

Anda bisa mendapatkan atribut yang diperluas dengan memasukkan:

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

Informasi penandatanganan kode diakses dengan memasukkan:

$ codesign -dvvv /Applications/*.app

Contoh:

$ 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

Bagian terpenting adalah rantai sertifikat (dan rantai kepercayaan):

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

Di sini tiga otoritas berbeda terlihat:

  1. Sertifikat root: Apple Root CA
  2. Sertifikat pengembang Apple perantara: Otoritas Sertifikasi ID Pengembang
  3. Sertifikat pengembang: Google, Inc. (EQHXZ8M8AV)

Ini berarti bahwa aplikasi ditandatangani dengan sertifikat pengembang, diterbitkan dan ditandatangani oleh otoritas pengembang menengah Apple, yang itu sendiri diterbitkan dan ditandatangani oleh Apple Root CA.

Rantai ini memenuhi syarat Google (atau lebih tepatnya: tim / unit Google, Inc. (EQHXZ8M8AV)) sebagai pengembang yang diidentifikasi Apple.

Anda juga dapat menggunakan appsign codesign sendiri atau dengan sertifikat pensignifikan dari otoritas perantara / root lain tetapi ini tidak akan mengatasi Gatekeeper.

Sekarang, empat permutasi dimungkinkan dengan asumsi Gatekeeper diaktifkan (tetapi tidak mempertimbangkan penandatanganan sendiri / penandatanganan asing):

  • Tidak ada atribut com.apple.quarantine / tidak ada sertifikat Pengembang Apple (Contoh: brew cask menginstal Apache CouchDB )
  • Tidak ada atribut com.apple.quarantine / sertifikat Pengembang Apple (Contoh: brew cask menginstal Google Chrome )
  • Atribut com.apple.quarantine / tidak ada sertifikat Pengembang Apple (Contoh: Apache CouchDB diinstal dengan mengunduh zip dari situs web dan menyalin aplikasi yang tidak di-zip ke / Aplikasi / )
  • Atribut com.apple.quarantine / sertifikat Pengembang Apple (Contoh: Google Chrome diinstal dengan mengunduh dmg dari situs web dan menyalin aplikasi di dalam ke / Aplikasi / )

Dalam dua kasus pertama aplikasi hanya akan diluncurkan. Dalam kasus ketiga Anda akan mendapatkan pesan Pengembang Tidak Diidentifikasi . Anda dapat menyelesaikan ini dengan menghapus atribut yang diperluas xattr -d com.apple.quarantine *(= case 1). Dalam kasus keempat Anda akan mendapatkan "* diunduh dari Internet, apakah Anda yakin ingin membukanya?"

klanomath
sumber
5

Bagaimana MacOS dapat menentukan informasi ini? Di mana metadata penandatanganan untuk aplikasi disimpan?

Tanda tangan disimpan dalam biner aplikasi itu sendiri, dengan beberapa data tambahan dalam bundel aplikasi (dalam file Contents/_CodeSignature/CodeResources).

Anda bisa mendapatkan beberapa informasi tentang tanda tangan menggunakan utilitas baris perintah codesign- misalnya:

# 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
duskwuff -inactive-
sumber