Safariを使用してインターネットからアプリをダウンロードしました。実行すると、macOSはアプリが身元不明の開発者からのものであることを通知します。
macOSはこの情報をどのように判断できますか?アプリの署名メタデータはどこに保存されますか?
Safariを使用してインターネットからアプリをダウンロードしました。実行すると、macOSはアプリが身元不明の開発者からのものであることを通知します。
macOSはこの情報をどのように判断できますか?アプリの署名メタデータはどこに保存されますか?
回答:
情報は拡張属性内に格納され、追加の情報がアプリケーション内に埋め込まれる可能性があります。
この検疫情報は、拡張属性として保存されます。xattr
ツールを使用して、ファイルまたはアプリケーションに関連付けられた属性を表示します。
このメッセージの原因となっている属性はcom.apple.quarantine
です。
Mac OS Xでファイルの「拡張属性」を削除する方法を参照してください。詳細については、身元不明の開発者によるものであるため、アプリを開くことができません。
拡張属性はmacOS上のGatekeeperによって使用され、com.apple.quarantine属性を設定(復元)する方法で説明されています。
アプリケーション内に埋め込まれたオプションのデジタル署名は、アプリケーションの開発者を決定するために使用されます。署名が見つからない場合、macOSはアプリケーションを身元不明の開発者からのものとして提示します。
実際、「不明な開発者...」というメッセージは、両方のタスクの組み合わせの結果です。実際の署名ステータスは、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つの異なる機関が表示されています。
これは、アプリが開発者証明書で署名され、Appleの中間開発者機関によって公開および署名され、それ自体がAppleのルートCAによって公開および署名されることを意味します。
このチェーンは、Google(またはより正確にはチーム/ユニットGoogle、Inc.(EQHXZ8M8AV))をAppleが特定した開発者として認定します。
自分で、または別の中間/ルート認証局からのコード署名証明書を使用してアプリにコード署名することもできますが、これはGatekeeperを克服することはできません。
これで、ゲートキーパーが有効になっていると想定して、4つの順列が可能です(ただし、自己署名/エイリアン署名は考慮されていません)。
最初の2つのケースでは、アプリは単に起動します。3番目のケースでは、Unindentified Developerメッセージが表示されます。これは、拡張属性xattr -d com.apple.quarantine *
(=ケース1)を削除することで解決できます。4番目のケースでは、「*はインターネットからダウンロードされました。開きますか?」
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