今回は、「GateKeeper」について。マルウェアや不正アプリからMacを保護するOS X Lion以来のセキュリティ機能だが、どのような方法でダウンロードしたファイルと判定しているのかなど、いまひとつわかりにくい点がある。今回は、そのしくみと設定方法を解説してみよう。

GateKeeperと隔離情報

GateKeeperはOSに組み込まれているというだけでなく、Appleが発行するデベロッパIDを確認するしくみを提供することで、インターネット経由でダウンロードしたアプリが無チェックで実行されることを防止する。機能名の記載はないが、システム環境設定「セキュリティとプライバシー」の「一般」タブにある「ダウンロードしたアプリケーションの実行許可」欄がそれだ。

GateKeeper導入以降のmacOSでは、WEBブラウザなどによりファイルがダウンロードされると、そのURLやダウンロードされた時刻、アプリケーション開発元などの情報がファイルの拡張属性(Extended Attribute)に記録される。そこには隔離情報も含まれており、その有無によりGateKeeperが反応するというしくみだ。

拡張属性に含まれる情報の一部は、Finderの情報ウインドウで確認できる。たとえば、ダウンロード元のURLは「詳細情報」欄を確認すればわかるし、隔離情報があることは初回起動時に現れる警告ダイアログでわかる。

インターネットから入手したデベロッパーIDを確認できない(未署名の)アプリケーションを起動すると、GateKeeperの機能によりこのようなダイアログが現れる

拡張属性に記録されたファイルの入手先URLは、Finderで情報ウインドウを表示すれば確認できる

拡張属性と隔離情報があることは、Terminalからxattrコマンドを実行しても確認可能だ。まずは、以下の要領でダウンロードしたファイルを引数に実行してみよう。通常は3行、ダウンロードされた日時が記録される「com.apple.metadata:kMDItemDownloadedDate」、ダウンロード元のURLが記録される「com.apple.metadata:kMDItemWhereFroms」、そして隔離情報が記録される「com.apple.quarantine」が表示されるはずだ。

$ xattr ~/Downloads/audacity-macosx-ub-2.1.0.dmg
com.apple.metadata:kMDItemDownloadedDate
com.apple.metadata:kMDItemWhereFroms
com.apple.quarantine

その「com.apple.quarantine」には、先頭から順に隔離タイプ、タイムスタンプ、隔離したエージェント名、そしてひも付けを行うためのUUIDが記録されている。隔離タイプの詳細は不明だが(公式資料が公開されていない)、タイムスタンプについては以下の要領でdateコマンドを実行すれば確認できる。GateKeeperがこの情報を参照して警告ダイアログを表示していることを、理解できるはずだ。

$ date -r 0x58c6c19f

「com.apple.quarantine」を調べれば、タイムスタンプなどの情報が記録されていることを確認できる

Sierraで「すべてのアプリケーションを許可」する

このように、ユーザに存在を意識させずセキュリティ向上に貢献しているGateKeeperだが、疎ましく感じてしまうことがあるのも確か。特にSierraからは、システム環境設定「セキュリティとプライバシー」の「一般」タブにある「ダウンロードしたアプリケーションの実行許可」欄から「すべてのアプリケーションを許可」という選択肢が消えてしまったため、GateKeeperをスルーして未署名のアプリケーションを実行することができなくなった。GateKeeperの運用が厳格化されたという理解でいいだろう。

Sierraでは「すべてのアプリケーションを許可」オプションが消えた

セキュリティの観点からはまったくお勧めできない話だが、Sierraで「すべてのアプリケーションを許可」を復活させる方法がある。spctlコマンドを「--master-disable」オプション付きで実行(sudoコマンドと組み合わせ管理者権限で実行)すると、「すべてのアプリケーションを許可」ラジオボタンが復活するのだ。これで、Sierra以前のようにダウンロードしたアプリケーションをノーチェックで実行できるようになる。

$ sudo spctl --master-disable

※:元へ戻すには「sudo spctl --master-enable」を実行する

spctlコマンドを実行すると、「すべてのアプリケーションを許可」オプションが復活する

ところで、spctlコマンドを利用すると、アプリケーションの入手ルートを調べることができる。以下の要領でコマンドを実行すると、macOSに標準装備のものであれば「Apple System」、Mac App Storeから入手したものであれば「Mac App Store」、AppleにデベロッパIDの登録があるものは「Developper ID」、それ以外で未署名のものは「rejected」と表示されるのだ。あわせて試してみよう。

spctlコマンドを利用すると、アプリケーションの入手ルートを調べることができる