Google は、2016年3月18日(米国時間)、ルート権限取得(ルート化)用アプリに利用される深刻な脆弱性「CVE-2015-1805」について「Android Security Advisory」で公表しました。この脆弱性は当時危険度評価で中程度と認識されていたもので、2014年4月に Linuxカーネルにおいて修復されたはずでした。しかしその後、2015年2月、この脆弱性の深刻度により、「CVE-2015-1805」として CVE識別番号が割り当てられることになりました。2016年2月には、この脆弱性を突くエクスプロイトコードが確認され、いまだ攻撃に利用可能であることが判明。こうした背景から最も高い危険度へと修正され、Google は、3月16日、この脆弱性に対応する更新プログラムを公開しました。なお、同社は問題の脆弱性を利用するルート化アプリについても削除対応しています。
「CVE-2015-1805」は、カーネルバージョン3.18未満の Android端末すべてに影響を与えます。現在、デスクトップ用の Linuxカーネルの最新版は4.5です。これに対し、Android OS では、最新版の Marshmallow のみがカーネルバージョン3.18を使用しており、それ以前のバージョンではすべて3.18未満のカーネルを使用しています。つまり、Android OS を最新版の Marshmallow に更新していない端末は影響を受けることになります。Google が公表している3月7日時点での Android のバージョン別シェアによれば、Marshmallow のシェアは全体の2.3%に過ぎません。この状況は、Android端末の OS およびハードウェアの更新は、端末ベンダーに大きく依存し、更新プログラムを簡単に適用できない、提供開始までに時間がかかるなどの課題を鑑みると非常に困難な状況と言えるでしょう。
弊社は、3月8日、Snapdragonプロセッサ搭載の Android に利用された場合、同様にルート化が可能になる複数の脆弱性について報告しました。ルート権限を取得する「TowelRoot(CVE-2014-3153)」や「PingPongRoot(CVE-2015-3636)」のようなルート化を利用する攻撃が確認されている中でも、この新しく確認された脆弱性はサイバー犯罪者が狙いやすい大きな穴を呈しています。既にこの脆弱性を突くためのさまざまなエクスプロイトコードが確認されており、このような脆弱性は、ルート化アプリの開発者にエクスプロイトコードを作成する機会を与えてしまいます。
■ 脆弱性CVE-2015-1805の詳細
この脆弱性は、競合状態において I/Oベクタ「iovec」の配列オーバーランを起こす危険性があります。しかし、特別に構成された iovec の構造体があれば、カーネルへの任意の書き込みが可能になります。
図1:ルート化アプリ、ダウンロード数1,500万達成
悪名高いルート化アプリ作成チームは、Android に脆弱性が存在することに気付き、ルート化ツール「PingPongRoot」が利用できなくなった後、それに代わるルート化ツールとして実装しました。弊社では現在、存在するエクスプロイトコードを監視しており、さらに他の今回の脆弱性を利用する攻撃が発生すると予測しています。
図2:関数「pipe_iov_copy_from_user」の再実行を起こす競合状態
図3:書き込み宛先カーネルアドレスを iovec構造体にマーキングする
脆弱性の起因は Linuxカーネルファイル “fs/pipe.c” のpipe関数、「pipe_iov_copy_to_user」にたどることができます。「pipe_iov_copy_to_user」に失敗した場合、関数は同じソースバッファを用い、コピーに失敗した位置の後にコピーを再実行します。これにより最初にコピーされたデータの長さの、宛先バッファ iovec配列のオーバーランが作成されます。
図4:iovec配列オーバーラン
上述のオーバーランの状態は、未定義のメモリアクセスが原因で、「Denial of Service(DoS、サービス拒否)攻撃」を引き起こします。しかしここで、この脆弱性を利用するエクスプロイトコードは、システムクラッシュを回避する手法を使います。例えば、iovec の配列の全長を、デフォルトが4,096バイトの PIPE_BUF であるソースバッファよりも長く設定した場合、再実行の際にオーバーランを回避することができるのです。
図5:再実行によるクラッシュを回避する方法
エクスプロイトコードは残っているデータをコピーするため3度目の繰り返しとなる「pipe_iov_copy_to_user」を実行します。そして今度は、宛先カーネルアドレスに設定した iovec と iov_base でマーキングした iovec バッファの最後部にアクセスし、オーバーランを起こします。再実行時と違い、この段階では、カーネルメモリ領域への任意の書き込みのため、保護用の「copy_to_user」ではなく、「_copy_to_user_inatomoc」を利用します。これが、再実行の際にはオーバーランを起こさなかった理由です。
図6:脆弱性を抱えたコード
■ トレンドマイクロの対策
この脆弱性は、DoS攻撃を引き起こす脆弱性とされていますが、問題の脆弱性を利用するエクスプロイトコードが出回ってしまうと、Android端末のセキュリティに影響を与える危険性があります。サイバー犯罪者は、ルート権限を得ることにより Android端末上で様々な不正な活動を実行できます。端末を保護するために、アプリは公式の GooglePlay のサイトからダウンロードし、インストールしてください。また、トレンドマイクロの個人利用者向け「ウイルスバスター モバイル」および法人向け「Trend Micro Mobile Security」は、問題の脆弱性を利用するエクスプロイトコードを利用する不正アプリを検出することができます。
参考記事:
- 「Critical ‘CVE-2015-1805’ Vulnerability Allows Permanent Rooting of Most Android Phones」
byVeo Zhang (Mobile Threats Analyst)
翻訳:室賀 美和(Core Technology Marketing, TrendLabs)