macOSは、インターネットからダウンロードしたアプリの署名ステータスをどのように識別しますか?


8

Safariを使用してインターネットからアプリをダウンロードしました。実行すると、macOSはアプリが身元不明の開発者からのものであることを通知します。

macOSはこの情報をどのように判断できますか?アプリの署名メタデータはどこに保存されますか?


Safariでダウンロードしたアプリケーションは、Appleが知っている開発者によって署名されていなかったため、ご質問を理解できれば、この警告が表示されます。プログラムxyzがコンピューターのどこにあるか尋ねていますか?
Jake3231

回答:


13

情報は拡張属性内に格納され、追加の情報がアプリケーション内に埋め込まれる可能性があります。

拡張属性

この検疫情報は、拡張属性として保存されますxattrツールを使用して、ファイルまたはアプリケーションに関連付けられた属性を表示します。

このメッセージの原因となっている属性はcom.apple.quarantineです。

Mac OS Xでファイルの「拡張属性」を削除する方法を参照してください詳細については、身元不明の開発者によるものであるためアプリを開くことができません

ゲートキーパーとコード署名

拡張属性はmacOS上のGatekeeperによって使用され、com.apple.quarantine属性を設定(復元)する方法で説明されています。

アプリケーション内に埋め込まれたオプションのデジタル署名は、アプリケーションの開発者を決定するために使用されます。署名が見つからない場合、macOSはアプリケーションを身元不明の開発者からのものとして提示します。


5
これは正しくありません。検疫データは、ダウンロードされたファイルのソースを追跡するために使用されますが、署名は別の場所にあります。
duskwuff -inactive- 2018

1
@duskwuffは正しいです。検疫によりポップアップ「XXXがインターネットからダウンロードされました。開きますか?」
Barmar

1
すべてのファイルとアプリケーションがコード署名されているわけではありません。多くのアプリケーションはそうではないので、それらの場合、埋め込まれた署名は存在しません。これは、「身元不明の開発者」メッセージの場合です。
Graham Miln

7

実際、「不明な開発者...」というメッセージは、両方のタスクの組み合わせの結果です。実際の署名ステータスは、com.apple.quarantine属性コード署名リソース(* / Contents / _CodeSignature / CodeResources内)をチェックします。* / CodeResourcesによってのみ決定されます。

次のように入力して、拡張属性を取得できます。

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

コード署名情報にアクセスするには、次のように入力します。

$ codesign -dvvv /Applications/*.app

例:

$ 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

最も重要な部分は、証明書チェーン(および信頼のチェーン)です。

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

ここでは、3つの異なる機関が表示されています。

  1. ルート証明書:Apple Root CA
  2. 中間のApple開発者証明書:開発者ID証明機関
  3. 開発者証明書:Google、Inc.(EQHXZ8M8AV)

これは、アプリが開発者証明書で署名され、Appleの中間開発者機関によって公開および署名され、それ自体がAppleのルートCAによって公開および署名されることを意味します。

このチェーンは、Google(またはより正確にはチーム/ユニットGoogle、Inc.(EQHXZ8M8AV))をAppleが特定した開発者として認定します。

自分で、または別の中間/ルート認証局からのコード署名証明書を使用してアプリにコード署名することもできますが、これはGatekeeperを克服することはできません。

これで、ゲートキーパーが有効になっていると想定して、4つの順列が可能です(ただし、自己署名/エイリアン署名は考慮されていません)。

  • com.apple.quarantine属性なし/ Apple Developer証明書なし(例:brew caskがインストールされたApache CouchDB
  • com.apple.quarantine属性なし/ Apple Developer証明書(例:brew caskインストール済みGoogle Chrome
  • com.apple.quarantine属性/ Apple Developer証明書なし(例:Webサイトからzipをダウンロードし、解凍したアプリを/ Applications /にコピーしてインストールされたApache CouchDB
  • com.apple.quarantine属性/ Apple Developer証明書(例:Webサイトからdmgをダウンロードしてアプリを/ Applications /にコピーしてインストールされたGoogle Chrome

最初の2つのケースでは、アプリは単に起動します。3番目のケースでは、Unindentified Developerメッセージが表示されます。これは、拡張属性xattr -d com.apple.quarantine *(=ケース1)を削除することで解決できます。4番目のケースでは、「*はインターネットからダウンロードされました。開きますか?」


5

macOSはこの情報をどのように判断できますか?アプリの署名メタデータはどこに保存されますか?

署名はアプリケーションバイナリ自体に格納され、アプリケーションバンドル(ファイル内Contents/_CodeSignature/CodeResources)に追加のデータが含まれます。

コマンドラインユーティリティを使用して、署名に関するいくつかの情報を取得できますcodesign-たとえば:

# 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
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.