スマートフォン解析 top

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

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

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

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

前回はMaster Key脆弱性の原因について書きました。今回はMaster Key脆弱性の影響についてです。特に、Master Key脆弱性を利用したroot化の方法について詳しく紹介します。


最初に、Master Key脆弱性を利用して攻撃者のコードをsystem権限で実行する方法です。
Androidでは、実行するアプリのセキュリティに関してはuidとPermissionをベースにしたセキュリティモデルを採用しています。

個々のアプリは基本的にはユニークなuidで動作するため、互いに影響を与えられないようになっていますが、sharedUserIdを使うと複数のアプリで同一のuidを共有することができます。

sharedUserIdを使っている例は/system/app以下にインストールされているsystemアプリです。
これらのアプリはsharedUserIdとしてandroid.uid.systemを共有していて一般のアプリよりも高いsystem権限を持っています。

また、これらはAndroid環境をビルドする際に使用されたplatform keyで署名されているため、ユーザ自身が環境をビルドしたのでなければsystemアプリを新たに作ることは困難です。


systemアプリを作ることが難しければ、Master Key脆弱性を利用してsystemアプリを改竄すれば良い、ということになります。systemアプリを調達する方法はいくつかあります。

1. platformベンダから入手
2. /system/appをあさる
3. サードパーティから入手

3つのうち2.と3.の方法を検討してみます。

2.ですが、前回のレポートで書きましたが、Androidアプリはインストールの際にdexoptの処理を通過します。/system/app以下のアプリはodexに変換済みの状態でインストールされているため、ここからapkを得るのは難しそうです。

3.ですがplatformベンダ以外にもベンダのB2Bパートナーからsystemアプリをリリースすることがあるようです。例えばCiscoの場合はSamsungをはじめとするベンダ向けにAnyConnectというVPNアプリを提供しています。

と、いうわけで3.の方法が使えそうです。


以下は、AnyConnectに含まれる証明書とManifest.xmlを表示したものです。証明書はCiscoではなくSamsungのものになっています。
スライドより抜粋

このアプリを改竄すればsystem権限でコードを実行できるはずです。ここからroot権限を獲得するには、root化のよく知られた手法が使えます。

Androidの起動時に読み込まれる設定ファイル/data/local.propにro.kernel.qemu=1を書き込む、という方法です。ここに書かれた設定は/system配下にあるbuild.propとdefault.propの設定を上書きします。
property_service.cより抜粋

ro.kernel.qemuはadbdの権限を決定するために使われるプロパティの一つです。
この値を1に設定しておくとAndroidをemulater上で動作している場合と同様にroot権限でshellを起動できるようになります。通常は、uid=shellで起動します。
adb.cより抜粋

/dataの所有者はsystemなので改竄したアプリから書き込み可能です。
まず、アプリ起動時に実行される以下のコードをコンパイルしてclasses.dexを生成します。
スライドより抜粋

生成したdexを使ってすでに入手したAnyConnectのapkファイルを改竄します。改竄後の名前はevil.apkとします。このアプリを実行して再起動するとadb shellがroot権限で実行されます。
スライドより抜粋

以上が、Master Key脆弱性を利用したroot権限取得までの手順です。
このように脆弱性を自分自身のために利用することは問題ないですが、攻撃者が悪用すればsystem権限で動作するマルウェアを配布する危険性があります。

対策は参考情報[1]のpdfを参照してください。ベンダやキャリアが対応している場合はファームウェアを最新にアップデートするのが最も確実な方法です。


参考情報:
[1] Black Hat USA 2013 | Archives
http://www.blackhat.com/us-13/archives.html#Forristal


次回は、もうひとつの署名回避の脆弱性について記載したいと思います。お楽しみに!


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