特別編 Safariの脆弱性に学ぶBAHとusroリソースの働きUndocumented Mac OS X(3/3 ページ)

» 2007年11月21日 05時28分 公開
[白山貴之,ITmedia]
前のページへ 1|2|3       

Safariがスクリプトを実行してしまうまで

 さて、役者はそろったので脆弱性の流れを説明しよう。まず、実行させたいシェルスクリプトを用意する。そのファイル名に「.jpg」なり「.mov」なりの何か別のデータファイルに見えるような拡張子を付加する。なお、実行パーミッションを割り当てる必要はない。このままだと、ダブルクリックすると画像およびPDFビュワーの「プレビュー」やQuickTime Playerなど拡張子に対応するアプリケーションが実行され、ファイルが破損しているか間違っているといったエラーを表示するだけだろう。

 そこで、このファイルにusroリソースを割り当て、起動に使うアプリケーションに「ターミナル」を指定するのだ。すると、このファイルは一見jpgファイルやmovファイルに見えるが、ダブルクリックするとターミナルが起動し、スクリプトが実行されてしまう。

 最後に、このファイルをBAHを使って圧縮した上で、Webサイトに配置する。

 Safariを使っているユーザーがこのファイルをダウンロードすると、ZIPファイルは「“安全な”ファイル」と想定されているため自動的に展開され、アーカイブから展開されたjpgファイルやmovファイルもまた「“安全な”ファイル」と想定されているため、これを表示しようとする。そう、そこでターミナルで読み込まれてしまい、スクリプトが実行されてしまうのだ。

暫定的な対処法

 対処法は、この3つの要因のどれかを切ることだ。

ブラウザに関する対処

 一番簡単なのはSafariの「“安全な”ファイルを開く」のチェックを外すことだ。これによって、ダウンロードしたファイルを自動的に展開したり表示したりといった行為が抑制される。同様に「“安全な”ファイルを開く」のような機能を持たない別のブラウザに切り替えてしまうのも有効だ。

ZIPアーカイブに関する対処

 __MACOSXを理解しないソフトウェアでZIPアーカイブを展開するという手もある。わたしが試したところ、AladdinのStuffIt Expander 10はBAHと同じく__MACOSXが存在した場合その中の情報の結合を行ってしまう。フリーソフトのOpenUp.appは__MACOSXを解さないコマンドライン版のunzipを用いているため問題がない。そこで、ZIPファイルの展開に対応するアプリケーションをOpenUp.appに変更すれば最悪の事態は防げる。

 しかし、これらはあくまで暫定的な対処にすぎないという点に気をつけてほしい。自動的に開くことを防げても、ダウンロードしたZIPアーカイブをユーザー自身が無邪気に開いて、中のファイルをダブルクリックしてしまえば結局実行されてしまうからだ。「Safariじゃないから大丈夫」「メールで送られてきたファイルだから」「iChatで送られたものだから」と慢心していたら、そういった初歩的なミスを犯しかねない。

 また最初に述べたように、リソースフォークを保存する手段はZIPに限らない。tarやrsyncという手もあれば、HFS Plusファイルシステムを内包するディスクイメージのdmgや昔ながらのsitもある。ZIPだけを封じても万全ではないのだ。

usroリソースに関する対処

 usroリソースはパスに依存するため、ターミナルを削除したり場所を移すという手もある。Mac OS Xには、アプリケーションの初回起動時に本当に実行して良いか確認する機能がある。不正なアプリケーションをこっそり仕組まれ関連づけを悪用して起動するという問題への対処なのだが、つまりそのユーザーがターミナルを一度も起動したことがなければ、確認パネルが表示されるため実行を阻める。

 しかし、UNIX系ユーザーにとってターミナルが存在しないMac OS Xは、その価値を半減しかねないし、場所を移してしまったソフトウェアにはソフトウェアアップデートが適切に適用されなくなるリスクがある。そして、X11やAutomatorなど、スクリプトを実行しうる可能性のあるアプリケーションはターミナルだけとは限らない。そのすべてを消したり、場所を移したり、1度も使わないと操を立てるのは現実的とはいえないだろう。

 根源的な問題としては、usroリソースを使ったアプリケーションの指定ができること、そしてそれが外部から設定できてしまうことにある。残念ながら現状、これに対する有効な対処法はない*。怪しいファイルを開く前は必ず「情報を見る」を使い、どのアプリケーションが起動されるのか確認するしかない(図4)

図4 図4 Finderの情報パネル。「種類」や「このアプリケーションで開く」で指定されているアプリケーションがおかしいことが分かる

セキュリティアップデート 2006-001

 2006年3月1日、Appleよりセキュリティアップデートが公開された。Leap-AウイルスやPHPの脆弱性などの問題を解決するとともに、この「“安全な”ファイルを開く」の問題についても対処が行われている。

 具体的には、LaunchServicesの処理が追加され*、「“安全な”ファイル」かどうかというチェックがより細かく行われるようになった。ZIPなどのアーカイブ内のファイルもそれぞれチェックされ、そしてusroリソースの付いたファイルはもはや安全とは見なされず、警告が表示される。

 ただし、BAHなどがusroリソースフォークを保存してしまう点には変わりなく、外部からアーカイブをダウンロードし展開する際に注意が必要なことにも変わりはない。

このページで出てきた専門用語

これに対する有効な対処法はない

メモリ上のバイナリを改ざんするApplication Enhancerというソフトウェアを用いてLaunchServicesにパッチを当て、usroリソースがある場合を危険なファイルと判定、usroリソースの削除を試みるようにする方法が提案されている。確かにこの方法ならば根本的に問題が解決するが、実行中のソフトウェアにパッチを当てるApplication Enhancerという危険なソフトウェアに依存しているため万人には勧めがたい。

LaunchServicesの処理が追加され

そのためか、AladdinのStuffIt Expander 10で、ZIPファイルをアーカイブの中に含むZIPファイルを展開しようとするとエラーを表示するようになってしまった。おそらく、LaunchServicesのエラーチェックルーチンにアーカイブ中のZIPファイルのパスを渡し、安全性を問うたときに返ってくる戻り値が従来のものと異なる、新しい値が返ってきてしまうためと推測される。


本記事は、オープンソースマガジン2006年5月号「Undocumented Mac OS X」を再構成したものです。


前のページへ 1|2|3       

Copyright © ITmedia, Inc. All Rights Reserved.

注目のテーマ