Mac業界の最新動向はもちろん、読者の皆様にいち早くお伝えしたい重要な情報、
日々の取材活動や編集作業を通して感じた雑感などを読みやすいスタイルで提供します。

Mac Fan メールマガジン

掲載日:

アップデートが相次ぐiOS、OS Xは大丈夫?

著者: 千種菊理

アップデートが相次ぐiOS、OS Xは大丈夫?

アップデートの必要性

今年7月にiOS 9.3.3が緊急公開され、続く8月にはiOS 9.3.4がこれまた緊急的に公開されました。いずれも、セキュリティ対応が主目的のリリースで、これは必ずアップデートすべきものです。

特に危険なのはiOS 9.3.3で修正された問題の1つである、TIFF形式の画像の処理に関するもの。ある種の細工をしたTIFFを表示しようとすると、システムの権限を乗っ取ることができてしまうのです。iMessageなどでTIFF画像を送りつければ自動的に表示されるので、リモートからでも(送りつけることさえできれば)攻撃が成立してしまいかねません。

また、iOS 9.3.4で修正されたのは、 「IOMobileFramebuffer」 と呼ばれるOS内部での処理に不都合があり、システムの権限を乗っ取ることができてしまう問題です。こちらは中国のジェイルブレイク作成者が使用していたのをアップルが見つけて修正したというものでした。

なぜ画像処理が狙われるのか

iOS 9.3.3では、これ以外にも画像処理関連での脆弱性の修正が数多く行われています。実はiOS 9.3.2でも、それ以前でも、画像処理関係の脆弱性の修正はアップデートの常連とも言えるのです。

なぜこうも画像処理が狙われるのでしょう? 実は画像、特に画面表示については狙い目が比較的多くあるうえ、悪意ある攻撃が成功したときに得られる「見返り」が大きいのです。

テキストや数値の処理のほとんどはOSに関わりのない、アプリケーションの権限で実行されます。たとえ脆弱性を見つけて乗っ取っても、アプリケーションの権限しか奪えない、それどころか「アップサンドボックス(AppSandbox)」によって、アプリケーションの権限は分割、制限されています。このため、攻撃が成功してもたいした権限は奪い取れないのです。

また、ファイルの読み書きはOSを呼び出して行われますが、この過程は30年以上、ほとんど変わっていません。十分実績のある処理になっているので隙がなく、不正なデータを用意してOSを乗っ取ろうとしても成功する可能性は極めて低い、実質的にはあり得ないといえます。

では画像処理はどうでしょう? 画像を扱うときには、ビット単位での細やかで、複雑な処理が多く行われます。こうした処理はどうしても複雑なコードになり、プログラムのミス(バグ)が入り込みやすくなります。また、新しい動画の方式が編み出されたりするなど、ほかの処理に比べ革新も多いことから日々更新されており、隙が多いのです。

しかも、画像処理、特に画面表示に関わる処理というものはコンピュータの性能のために、ある程度ハードウェアに近いところで、OSによる制約を緩めた形で実行されていたりもします。

OS Xは大丈夫なの?

OS X 10.0やOS X 10.1といった極めて初期のOS Xでは、画面表示はすべてソフトウェアベースで行っていたため、とても低速でした。OS X 10.2になって「クォーツ・エクストリーム(Quartz Extreme)」という、GPUを利用する機能が搭載され、だいぶマシになりましたが、ゲームを作るなんて夢のまた夢。その後、「コアグラフィックス(CoreGraphics)」や「ゲームキット(GameKit)」といったさまざまな機能により高速化が図られ、グラフィックスAPI「メタル(Metal)」により最新の高画質3Dのゲームにも耐えられるようになりました。しかし、その分GPUの操作をソフトウェアに明け渡したり、画面表示に使っていないVRAMの一部をフレームバッファとして解放し、表示高速化に使うなど、ハードウェアに対する操作を少しずつ解放してしまっている現状もあります。

もちろん、これによってMacが好き放題攻撃されるとまではいきませんが、この領域がまだ隙があることから、バグが潜んでいる可能性は無視できないというわけです。

たとえば、グラフィックスのデータをOSに渡してコピーさせるような処理を考えたときに、コピーされるデータのサイズが果たしてOSが想定しているサイズに収まっているでしょうか? 意図的に想定より大きなデータを渡して、コピー先の裏側にあるメモリを破壊することができてしまったら? もし、その後ろにOSのプログラムや何らかの重要なデータがあったら? などなど、細かいサイズチェック1つの抜けで、OSの中を壊して、別のプログラムやデータで上書きできてしまうのです。

また、OSの中枢である「カーネル」は何の制限もなく、どんな命令でも実行できてしまいます。そこに悪意あるプログラムをうまく配置し、それを実行させてしまえば、OSが持つセキュリティをすべてすり抜けることができてしまいます。

もちろん、OS側もチェックを厳しくしたり、機能によっては、OSのプログラムをカーネルの外に出して、普通のソフトウェアと同程度の制約の下で実行させようとします。しかし、OSの外と中の処理の切り替えはそれなりにオーバーヘッド(余分にかかる処理時間)があるので、速度を争う画像処理では性能劣化を引き起こしかねません。

表示関係での性能と安全性のトレードオフは今に始まったことではなく、GUIを持つOSが普及を始めた80年代あたりからの悩みごとです。ともあれ、iOSでもOS XでもtvOSでも、アップデートは早め早めに確認、実行するようにしましょう。

ソフトウェアの処理とカーネルの関係

ソフトウェアの処理ごとに、カーネルとのつながりも異なります。グラフィックス処理の場合、グラフィックスAPIによってGPUの操作を明け渡したりなど、ハードウェアに対する操作を少しずつ解放してしまっており、隙がないとはいえません。

iOS 9.3.4の変更内容

IOMobileFrameBufferにて、カーネル(OSの中枢)の権限を奪われかねないことが記載されています。「CVE」から始まる番号は脆弱性に付けられる連番です。その後には通常報告者の名前が記載されますが、ここでは「Team Pangu」とジェイルブレイクの作成組織が記載されています。CVE番号に対応する脆弱性については下記のURLにて検索可能ですが、執筆時でなぜか「新しい脆弱性のために予約」となっており、問題が記載されていません。【URL】http://www.cve.mitre.org/

【 TIFF(Tagged Image File Format)】

TIFFは画像フォーマットの1つです。JPEGやGIFが特定の方式で圧縮された画像を格納するファイル形式であるのに対し、TIFFはいわゆるコンテナフォーマットの1つで、「どういった方式で圧縮されているか」を示したタグと実際に圧縮されたデータの組を複数格納することができます。たとえば16色の簡易データと数万色使ったJPEG圧縮のデータを合わせて入れておくなど柔軟な処理が可能です。その一方、タグで示される方式が乱立、TIFF対応のソフトウェアでもすべてのタグに対応していない、「同じTIFF画像なのに見える場合と見えない場合がある」という混乱が生じたのも事実です。初期のウィンドウズの標準画像で、Macでも一時期使われていましたが、やがてそれぞれ別の画像方式を標準とするようになりました。

【 表示関係での性能と安全性 】

表示関係での性能と安全性はトレードオフであり、この問題に悩んだのはアップルだけではありません。たとえばマイクロソフトのウィンドウズでも、初期のウィンドウズNT3ではグラフィック(GDI)は安全性のためソフトウェアと同じ権限に配置され、グラフィックドライバと分離されていましたが、NT4以降では性能上の理由からカーネルの中に移動されました。長らくこの状態は続き、ウィンドウズ・ビスタにて再びカーネルからグラフィック処理が切り離されました。ビスタの表示が遅かったのも、こうした事情にもよります。OS Xと同じく、チューニングと新しいAPIへのリプレイスによって、ウィンドウズ10ではもはや依然と遜色がない表示速度を実現しています。

【フレームバッファ】

フレームバッファとは画像を保存しておくメモリ領域のことです。IOMobileFramebufferはその名前から、iOS向けのI/Oキットにある、VRAMを管理/操作するためのクラスであることがわかります。

【コンテナ】

コンテナフォーマットとは、何らかの識別情報とそのデータの組み合わせで、さまざまなデータを格納できるファイル形式を指します。movやmp4もコンテナフォーマットで、どういった情報を最低限サポートすべきかがしっかり定義しているため、TIFFのようなことは起こりません。

文●千種菊理

本職はエンタープライズ系技術職だが、一応アップル系開発者でもあり、二足の草鞋。もっとも、近年は若手の育成や技術支援、調整ごとに追い回されコードを書く暇もなく、一体何が本業やら…。