スマートフォン解析 top

TOP > タイガーチームセキュリティレポート > black hat USA 2013 テクニカルレポート ~その2(3)~

タイガーチームセキュリティレポート

black hat USA 2013 テクニカルレポート ~その2(3)~

BlackHat USA 2013のプレゼン紹介の第四弾です。前回に引き続きJeff Forristal氏のAndroidに関するプレゼンを紹介します。

前々回にレポートしたMaster Key脆弱性の原因はAndroidのZip実装、とくにZipFileクラス実装のバグによるものであることを書きましたが、Master Key脆弱性の後に再びZipFileクラス実装のバグから同様の署名回避の脆弱性が見つかっています。今回はそれについてレポートします。


zipの構造を再掲します。前々回はzipのCentral Directoryに注目しましたが、今回は個々のFile Entryの詳細に注目します。File Entryはそれぞれlocal file headerを持っています。

local file headerは13個のフィールドを持っていますがそのうちの最後の4つはfile name length (2 bytes)、extra field length (2 bytes)、file name、extra fieldです。最後の2つは可変長のフィールドとなっています。

次に、FileZipクラスのgetInputStreamメソッドですが、ここではFileEntryのdata部の先頭までInputStreamの位置を移動させるためにextra field lengthをshort型で読み込んで、extra fieldをスキップしています。

ZipFile.javaより抜粋

ここにバグがあります。extra field lengthは符号付きのshort型とみなされるため最上位bitが立っている場合は負数として扱われて、InputStreamの位置がうしろに戻ってしまうのです。


apkファイルのclasses.dexエントリに注目するとfile nameフィールドの末尾3バイトとdata部の先頭3バイトがともに"dex"(0x64, 0x65, 0x78)で一致していることに気が付きます。

攻撃者が改竄したいapkファイルがあってclasses.dexのファイルサイズが64KB以下だったとします。

このapkファイルのclasses.dexのextra field lengthの値をshort型の0xfffdつまり-3に改竄し、classes.dexをextra fieldの先頭から3バイトうしろに戻った位置にコピーします。
コピーしたclasses.dexの後ろにpaddingしてextra fieldのサイズが丁度65535バイトになるようにします。攻撃者が実行させたいclasses.dexはその直後に配置します。

この方法でapkファイル改竄するとJarVerifierクラスはコピーしたclasses.dexファイルを検証するため検証をパスしますが、dexoptで処理され最終的に実行されるのは末尾のclasses.dexです。

以上が、中国のbloggerによって公開されたapkファイル改竄の方法です。

このexploitにはclasses.dexのファイルサイズに関する非常に強い制限(64KB以下)があるため、前回のレポートで紹介した方法でsystem権限を取得するのは難しいかもしれません。

物語はこれでお終いではありません。iOSやGoogle Glass等のhackで知られるSaurik氏がこの制限を回避するexploitを公開しました。このexploitの詳細は参考情報[5]を見てください。


BlackHatのレポートは以上になります。

4回にわたって筆者が聴講したプレゼンの中から特に興味深くかつ多くの人にとって馴染み深いであろうと思われるものを選択して紹介しましたがBlackHatとDef Conではここで紹介した以外にも興味深い話題がたくさんありました。

特にDef Conでは古典的なlock pickingから最新のテクノロジーまであらゆるものがハッカーの興味の対象となりうることを教えてくれ、筆者のセキュリティに対する見方を大きく広げてくれる体験でした。

筆者にとって初のBlackHat & Def Con参加でしたが、いつかまたラスベガスに戻ってきたいという思いを強くして日本に帰りました。


参考情報:
[1] Black Hat USA 2013 | Archives
http://www.blackhat.com/us-13/archives.html#Forristal
[2] Zip (file format)
http://en.wikipedia.org/wiki/Zip_%28file_format%29
[3] Dalvik Executable Format | Android Developers
http://source.android.com/devices/tech/dalvik/dex-format.html
[4] Second Android signature attack disclosed
http://www.h-online.com/open/news/item/Second-Android-signature-attack-disclosed-1918061.html
[5] Android Bug Superior to Master Key
http://www.saurik.com/id/18


タイガーチームメンバー 塚本 泰三