Mac OS Xのセキュリティ機能「Gatekeeper」、Mavericksでどう変わったか

プラットフォーム「Mac OS X」のセキュリティ機能の 1つである「Gatekeeper」は、2012年に初めて発表され、旧バージョンの OS 「Lion」および「Mountain Lion」、そして最新バージョンの OS 「Mavericks」上で動作します。Gatekeeper は、プログラムがインターネット上からダウンロード、実行されると、まずそのプログラムのデジタル署名の認証を行い、ユーザの設定に基づきプログラムの実行を許可するかを選択します。Mavericks では、この機能がどう変わったのでしょうか。

まず Gatekeeper には、以下の 3つの設定があります。

  1. Apple の公式アプリストア「Mac App Store」からのアプリケーションのみ許可する設定
  2. すべてのアプリケーションを許可する設定
  3. Mac App Store からのアプリケーションおよび有効なデジタル署名が付与されたアプリケーションを許可する設定

有効なデジタル署名が付与されたアプリケーションとは、Apple が確認済みの開発元からのアプリケーションです。そして 3. の設定が、Mountain Lion での初期設定になっています。

Gatekeeper は、確認すべきファイルをどのように決定するのでしょうか。Gatekeeper は、拡張属性の「Quarantine(隔離)」を持つファイルでのみ動作するように設計されています。ファイルがダウンロードされると、ダウンロードを行うアプリケーション(通常はブラウザ)がそのプログラムの隔離属性を示します。プログラムの開発元およびダウンロードがされた時刻もこの拡張属性に保存されています(図1 参照)。

図1:ダウンロードされたアーカイブの拡張属性
図1:ダウンロードされたアーカイブの拡張属性

隔離属性は、アプリケーションがアーカイブやディスクイメージで保存された場合でも元のアーカイブやディスクイメージから複製されます。また隔離属性には、一意な識別子である「UUID」が含まれており、OS X がアーカイブやディスクイメージをソースファイルまで追跡し、情報をユーザに提供するために使用することが可能です。

図2:抽出ファイルに引き継がれた属性
図2:抽出ファイルに引き継がれた属性

ユーザが Gatekeeper で許可されていないアプリケーションを実行しようとすると、図3 の警告メッセージが表示されます。旧バージョンの OS では、警告メッセージで現在の Gatekeeper の設定を表示しますが、Mavericks では、表示されません。

図3:最新バージョンと旧バージョンの警告メッセージの違い
図3:最新バージョンと旧バージョンの警告メッセージの違い

ユーザが Gatekeeper によりブロックされたアプリケーションを実行させたい場合、いくつかの選択肢があります。Gatekeeper は、上述の「2. すべてのアプリケーションを許可する設定」を選択することで、事実上停止させることが可能です。また上級者は、隔離属性の削除やターミナルコマンド「spctl」を使用することで、ブロックされたアプリケーションを実行させることが可能でした。

図4:ターミナルコマンド「spctl」を使用したポリシーの変更
図4:ターミナルコマンド「spctl」を使用したポリシーの変更

Mavericks では、Gatekeeper機能によりブロックされたアプリケーションを実行させることが容易になっています。「環境設定」のパネル「セキュリティとプライバシー」で、「Open Anyway」という新たな選択肢をユーザに提供しています。この「Open Anyway」ボタンによりユーザは、最後にブロックされたアプリケーションを強制的に実行させることができます。これは、拡張属性の削除や新たな評価ポリシーの追加とは異なり、無署名のプログラムの実行を許可するより便利な方法です。

図5:新しい Mavericks の設定画面
図5:新しい Mavericks の設定画面

隔離属性内には、セミコロン「;」で分けられた「quarantine value(隔離値)」が保持されています。この値の最初の部分は、ファイルがどこから来たものかを表しています。図2 で、Safari が検証用プログラムをダウンロードし、値を「0002」に設定しました。ユーザがブロックされたプログラムを実行するため、図5 にあるボタン「Open Anyway」を選択すると、隔離値が変更され 3番目の数値が「6」に設定されます。Gatekeeper は、以前の値に関係なく、3番目の数値が「6」であるとアプリケーションの実行を許可します。

そしてこの隔離値は、ファイル内に保持されます。一旦「Open Anyway」機能により強制実行されたこのプログラムファイルが、互換ファイルシステムを使用し他の Mac へコピーされた場合、この隔離値も他の Mac に継承されます。

図6:許可されたプログラムの隔離値
図6:許可されたプログラムの隔離値

これは、Gatekeeper の機能を回避する攻撃の方法を浮き彫りにします。1人のユーザが自身の Mac 上で「Open Anyway」ボタンで無署名のプログラムの実行を許可した場合、その設定はプログラム内に保持され、他の Mac上でも有効となります。つまり、Getekeeper機能を回避し、他の Mac上でもいかなる警告メッセージも表示せずに起動することが可能となります。

ただし隔離値は、Mac OS のファイルシステム上でしか保持されません。攻撃者がこの設定により Gatekeeper機能を回避するためには、共有フォルダや USBフラッシュディスクといったこの属性を保持する方法を介して他の Mac へと拡散される必要があります。

図7:Gatekeeper によりアプリケーション実行が許可される
図7:Gatekeeper によりアプリケーション実行が許可される

Mavericks は、Gatekeeper の機能の例外を作成し、無署名のプログラムの実行をより簡単な方法でユーザに提供します。しかしながらこれは、他のユーザを危険にさらす可能性のある方法で行われました。たとえ、自身の Mac が危険にさらされたとしても、他の Mac までをも危険にさらすことは避けるべきでしょう。 Apple は、この機能をもっと異なった方法で実装するべきでした。

参考記事:

  • Gatekeeper on Mac OS X 10.9 Mavericks
    by Lawrence Lin (Targeted Attacks Analyst)
  • 翻訳:木内 牧(Core Technology Marketing, TrendLabs)