Reverse Engineering the Embedded OpenType Decompression」より
June 25,2008 posted by Moti Joseph,Security Researcher

 我々セキュリティ研究者は,常日ごろから多種多様なファイルを分析している。これまで目にしたことのないファイル形式は,自分なりに時間をかけて探ることが重要だ。そうすれば,見慣れないファイル形式を使った悪意ある攻撃に備えられる。

 我々が最近調べた珍しいファイル形式の一つが「Embedded OpenType(EOT)」である。オンライン百科事典「Wikipedia」では,EOTを次のように説明している。

 Embedded OpenType(EOT)フォントは,OpenTypeファイルをコンパクトに格納した形式で,米マイクロソフトが開発した。Webページの組み込みフォントとして用いられる。一般的に拡張子「.eot」を使用する。

 基本的に,EOTファイルはWebページ向けの特別なフォント・ファイルだ。EOTフォント生成ツールは,サブセット化や使用制限の設定をEOTファイルに組み込めるようになっている。このため,ファイルの複製やリバース・エンジニアリングは難しい(詳細は後述)。これらの基本的事実を基にして,いくつか興味深い点を調べてみよう。

 EOTファイルを解析してOpenTypeフォントそのものを出力するツールをWebで探してみたが,見つからなかった(このようなツールを見かけたら一報してほしい)。当記事では,EOTファイルからOpenTypeフォントを読み出す方法に焦点を当てる。手はじめに,EOTファイルを利用したWebサイトがどのように表示されるか見てみよう。


[画像のクリックで拡大表示]

 Internet Explorer(IE)はWebページのフォントをレンダリングする際,EOTファイルを伸張してOpenTypeフォントを抽出する。おそらく読者は,我々がこれから何をしようとしているか既に察しがついているはずだ。IEの伸張エンジンをフックし,実行時にOpenTypeフォントを取得しようと考えているのである。

 まず,IEがEOTファイル伸張に使うモジュールを把握しなければならない。EOTファイルを使用したWebページを解析する際にIEのモジュール・イベントを監視すると,IEがファイル「T2EMBED.DLL」のロードとアンロードを行っていることが判明した(Windows XP SP3とIE 7を使用した場合)。

 T2EMBED.DLLモジュールでEOTファイルを伸張することが判明したら,次はどの関数にフックを設ければ埋め込み前のOpenTypeフォントを入手できるか見極める。我々はこの作業で逆アセンブラ「IDA Pro」を使った。数時間の動的分析により,「T2OSSvcDecompressFontBuffer」という名の興味深い関数を見つけた。


[画像のクリックで拡大表示]

 T2OSSvcDecompressFontBuffer関数を動的および静的に分析したところ,EOTファイルからOpenTypeフォントを伸張する関数であることが分かった。あとはこの関数の呼び出しをフックすればよい。T2OSSvcDecompressFontBufferの呼び出し後,戻り値がOpenTypeフォントへのポインタとなる。これでフォントをファイルにダンプできる。

 以下に示すのは,デバッグ・ツール「DebugView」で,T2OSSvcDecompressFontBufferのフックとOpenTypeバッファのダンプを出力したものと,ダンプしたOpenTypeフォントである。


[画像のクリックで拡大表示]


[画像のクリックで拡大表示]

 これで今回のゲームは終了だ。この記事がEOTファイルの研究をしている人の役に立てばよいと思う。少しでも役立ったなら,コメントを残していってほしい。


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