Technical Analysis on iPhone Jailbreaking」より
Aug 6、2010 posted by Matt Oh

 iPhoneには、パソコンとUSB接続することなく、単体で遠隔地から脱獄(米アップルが設けた保護機構を無効化すること)させる方法が存在する。具体的には、iPhoneのWebブラウザー「Safari」で「jailbreakme」というWebサイトにアクセスすれば、わずか数段階の作業で脱獄できてしまう。当然この方法は、全世界で利用されているiPhoneを攻撃しようと企んでいる悪人たちにも使われる。この脱獄方法を分析したところ、何者かに悪用されるのは時間の問題であると理解した。今回は、我々が見つけた情報を整理してみた。

図1●iPhoneにあるセキュリティホール2件を使う脱獄の手順

 この脱獄手順は、まずPDFのCompact Font Format(CFF)に存在するセキュリティホール(CVE-2010-1797)を利用する(関連記事:iPhoneやiPadに危険な脆弱性、Webアクセスでウイルス感染の恐れ)。驚いたことに、このセキュリティホールの実体はスタックのバッファオーバーフローに過ぎない。このセキュリティホールでは、攻撃者の制御用の$pcで終わる非常に長いCFF charStingエントリーが使われる。複雑な処理を行うための、完成度の低い方法としてReturn Oriented Programming(ROP)を思い浮かべる人が多いだろう。ところがjailbreakmeのシェルコードは、合計150回以上のAPIを実行する目的でROPを使っている。つまり、メモリーからのプログラム実行を禁止したとしても、こうしたメモリー改変攻撃を防ぐことはできない。iPhone悪用を目的とする今回のROPの使い方は、非常に洗練されていて、確実性が高いように思える。

 このROPのペイロードは、アップルのIOSurfaceコンポーネント内にある、カーネル部の未公開セキュリティホールを使う。悪用することで、通常レベルのプロセスに書き込み可能なカーネルメモリーアクセス権を付与できる。こうしてカーネルメモリー内のデータを改変してセキュリティ検査機構を回避した後、「setuid(0)」をコールしてroot権限でアクセスできるようにする。これで脱獄処理はほとんど終わったようなものだ。この時点でSafariのプロセスはrootユーザー権限で動いており、何でも好きな処理が行える。

 続いてjailbreakmeは、共有ライブラリー「installui.dylib」を送り込んでロードさせ、ライブラリー内の関数「iui_go」を実行させる。これでiPhoneの画面にユーザーインタフェース(UI)メッセージを表示し、脱獄処理を先へ進めるかどうかユーザーに確認する。次にjailbreakmeから「wad.bin」というファイルをダウンロードし、そこから「install.dylib」などの処理に使うファイルを取り出して、典型的な脱獄作業を行う関数「do_install」を起動する。これらの処理はカーネルのセキュリティホールを悪用するのだが、Safariのプロセスは必要なrootアクセス権限を持っているのですべて問題なく実行できてしまう。

 脱獄処理では、システム用ディレクトリーを移動したり、「/etc/fstab」といった重要なファイルを改変したりする。さらに「/dev/kmem」デバイスに直接アクセスして、カーネルのフラグやコードにパッチを当てる。最後に「Cydia」のインストーラーパッケージをインストールし、「uicache」コマンドでSpringBoardを再起動する。

 この事例から分かるように、jailbreakmeで提供されているPDFペイロードを改変して、本来の目的以外の処理を行うようにすることなど極めて簡単に実行できる。今はこの種の攻撃からiPhoneを守れるよい方法がないので、攻撃がすぐ目に付くようになり、大きな被害を与える可能性がある。これからは、iPhoneのWebブラウザーで怪しいリンクをクリックしない方がよい。問題のセキュリティホールに対策が施されないうちは、iPhoneでメールのPDF添付ファイルを確認してはいけない。修正パッチは近々リリースされるだろう。入手可能になったら、必ずインストールしてほしい。


Copyrights (C) 2010 Websense, Inc. All rights reserved.
本記事の内容は執筆時点のものであり,含まれている情報やリンクの正確性,完全性,妥当性について保証するものではありません。
◆この記事は,ウェブセンスの許可を得て,米国のセキュリティ・ラボの研究員が執筆するブログWebsense Security Labs Blogの記事を抜粋して日本語化したものです。オリジナルの記事は,「Technical Analysis on iPhone Jailbreaking」でお読みいただけます。