故Steve Jobs氏の好物だったという「刺身蕎麦」。日本人にとっては微妙な(実際に食した人の評価も)組み合わせに聞こえますが、本人が満足ならそれでいいのです。蕎麦好きだった彼のこと、来日時には東京で御三家とされるお店の蕎麦も食べていたのですかね? 更科とか藪とか……。

さて、今回は「サンドボックス」について。セキュリティの基盤部分に位置する技術であり、ふだんは意識せず利用されているが、今夏リリース予定のMountain Lionでは「Gatekeeper」が新たに導入されるなど、その存在がクローズアップされることになる。サンドボックスの概念を理解することで、OS Xにおけるアプリの未来像も見えてくるはずだ。

What's sandbox?

OS Xにおける「サンドボックス」とは、保護された環境下でプログラムを動作させるためのセキュリティモデルのこと。子どもの砂場のように外部と隔離された状況を作り出し、その範囲内でのみプログラムを動作させることで、プログラムの誤動作やマルウェア発生による被害が外部に及ばなくなる。Leopard以降段階的に導入され、QuickLookやSpotlightなど一部のシステムプログラムに利用されていたが、Lionの現在では一般的なアプリケーションに適用範囲が拡大されている。

サンドボックスの概念図

サンドボックス上で動作するアプリケーションは、ファイルの読み書きやネットワーク機能など、特定の処理に制限を設けることができる。Lionでは、Safari(WebKit2)やPreview.appなど標準装備のアプリケーションの一部が、サンドボックス対応を果たしている。

OS Xのサンドボックス機構は、アプリケーションを起動するときに「セキュリティポリシー」を参照する。それは拡張子「.sb」のファイルとして、/System/Library/Sandbox/Profilesおよび/usr/share/sandboxディレクトリに多数保存されている。今後Mac App Storeで提供されるアプリケーションは、サンドボックス対応が義務づけられているため、現在はカラッポの/Library/Sandbox/Profilesディレクトリも、いずれ「.sb」ファイルで賑わうのかもしれない。

試しに、「アクティビティモニタ」を起動してみよう。メニューバーから[表示]→[表示項目]を選び「サンドボックス」をチェックすると、どのアプリケーションがサンドボックス上で動作しているか、一目瞭然だ。

「アクティビティモニタ」を利用すれば、アプリケーションがサンドボックス上で動作しているかどうかを確認できる

サンドボックスの効果を体感する

上記の説明でピンとこない場合には、Terminalで「sandbox-exec」コマンドを試すと話が早いかもしれない。論より証拠、百聞は一見にしかずというわけで、サンドボックスの世界を実体験してみよう。

sandbox-execコマンドは、引数として与えられたコマンドラインをサンドボックス上で実行する。書式は以下のとおりで、sudoコマンドをイメージするといいだろう。そのコマンド用のセキュリティポリシーファイル(*.sb)があれば参照されるが、オプションで任意のファイルを参照することもできる。

sandbox-exec [option ...] command ...

まずは以下のコマンドラインを実行してほしい。「-n」オプションは、定義済プロファイル(表1)を参照するためのもので、ここではファイルシステムへの書き込みを禁止する「no-write」を指定している。そして実行するコマンドはシェルのbash、こうして起動されたシェルでは、一切のファイル保存が禁止されるというしくみだ。

$ sandbox-exec -n no-write /bin/bash
表1:sandbox-execコマンドで指定できるプロファイル
no-internet インターネットへの接続を許可しない
no-network (ソケット単位の)すべての通信を許可しない
no-write ファイルへの書き込みを許可しない
no-write-except-temporary /var/tmpなど一部の領域以外の書き込みを許可しない
pure-computation すべてのOSリソース/サービスの利用を許可しない

「sandbox-exec -n no-write /bin/bash」として起動したシェルから、リダイレクトを使いファイルを書き出そうとしているが、「Operation not permitted」となった

「-n no-internet」とすれば、インターネットへの接続を禁止(TCP/IPスタックの使用禁止)できる。以下のとおり、このオプションで起動したシェルからpingコマンドを実行すると、ファイルの書き込みを禁じたときと同様に「Operation not permitted」と表示され、処理に失敗する。curlやftpなどのインターネットへの接続を前提するコマンドも同様に失敗するので、時間があれば試してほしい。

インターネット接続を禁止したシェルからpingコマンドを実行しても、「Operation not permitted」という結果に終わる

関連記事
OS Xの最新版「Mountain Lion」がデベロッパプレビューに - リリースは今夏(2012年2月16日)
【コラム】新・OS X ハッキング! 第35回 番外編:夏登場の「Mountain Lion」、ココに注目(2012年2月20日)
【コラム】新・OS X ハッキング! 目次