ニュース
既存のx86/ARM CPUほぼ全てに通用するJavaScript攻撃が発見される
~アドレス空間配置のランダム化を突破
2017年2月17日 13:24
アムステルダム自由大学(VU)内のセキュリティグループVUSecは、JavaScriptを用いて「アドレス空間配置のランダム化(Address Space Layout Randomization: ASLR)」を無効化する攻撃を公開した。
ASLRは、仮想アドレス空間内のアプリケーションのコードおよびデータ(exeデータやモジュールなど)の場所をランダム化してクラッキングを困難にする技術で、バッファオーバーフロー攻撃などに有効な対策として知られている。
これまで、ネイティブコードを実行できるローカルからの攻撃などにより、カーネルレベルのASLRを無効化できることが分かっていたものの、Webブラウザなどの環境では、優れた防御策であるとされてきた。
今回発見された新たな攻撃方法は、現行の多くのプロセッサが行なっているメモリ管理を利用したもので、ソフトウェアに依存せず、JavaScriptからASLRの完全な非ランダム化を実現する。VUSecは、ASLRというセキュリティ技術そのものの限界を示すものであるとしている。
最新プロセッサのメモリ管理ユニット(MMU)は、ページテーブルウォークの性能を向上させるため、プロセッサのキャッシュ階層を使用しており、効率的なコードの実行を実現するための基本的な実装となっている。
VUSecでは、このキャッシュ階層が、ブラウザで実行されているJavaScriptコードなど、信頼できないアプリケーションでも共有されている点に着目し、EVICT+TIMEキャッシュと呼ばれるサイドチャネル攻撃を構築。これは、MMUによって実行されるページテーブルウォークの間に、ページテーブルページのどの位置にアクセスされるかを検出することができるという。
例えば、x86_64アーキテクチャでは、4つのページテーブルページのそれぞれについて、MMUによってアクセスされるオフセットを検出でき、各ページ内のオフセットは9bitのエントロピーを破壊するため、36bitのエントロピーを備えた“完全なASLR”の実装でも安全ではないとしている。
VUSecは、「ASLR Cache(AnC)」と称するこの攻撃を、ネイティブコードおよびJavaScriptで実装。検証では、ネイティブ版を使用して、22種のマイクロアーキテクチャでMMUの信号観測を行ない、JavaScript版を使用して、FirefoxとChromeでコードとヒープポインタの検索を行なっている。
その結果、Intel/AMD/ARMの22個のプロセッサ全てで、MMU信号が観測されたという。
CPU | アーキテクチャ | 年 |
---|---|---|
Intel Xeon E3-1240 v5 | Skylake | 2015 |
Intel Core i7-6700K | Skylake | 2015 |
Intel Celeron N2840 | Silvermont | 2014 |
Intel Xeon E5-2658 v2 | Ivy Bridge EP | 2013 |
Intel Atom C2750 | Silvermont | 2013 |
Intel Core i7-4500U | Haswell | 2013 |
Intel Core i7-3632QM | Ivy Bridge | 2012 |
Intel Core i7-2620QM | Sandy Bridge | 2011 |
Intel Core i5 M480 | Westmere | 2010 |
Intel Core i7 920 | Nehalem | 2008 |
AMD FX-8350 8-Core | Piledriver | 2012 |
AMD FX-8320 8-Core | Piledriver | 2012 |
AMD FX-8120 8-Core | Bulldozer | 2011 |
AMD Athlon II 640 X4 | K10 | 2010 |
AMD E-350 | Bobcat | 2010 |
AMD Phenom 9550 4-Core | K10 | 2008 |
Allwinner A64 | ARM Cortex A53 | 2016 |
Samsung Exynos 5800 | ARM Cortex A15 | 2014 |
Samsung Exynos 5800 | ARM Cortex A7 | 2014 |
Nvidia Tegra K1 CD580M-A1 | ARM Cortex A15 | 2014 |
Nvidia Tegra K1 CD570M-A1 | ARM Cortex A15; LPAE | 2014 |
またVUSecは、AnC攻撃を実現するため、Webブラウザが設けているJavaScriptタイマーのブロック回避と、プロセッサごとに異なるページテーブルキャッシュのリバースエンジニアリングを行なっており、それらもブラウザ上の既知のキャッシュ攻撃や、Rowhammer問題(DRAMスケーリングの課題と打開策)を用いたページテーブルを操作する攻撃など、動作にキャッシュのフラッシュを必要とする攻撃に応用できるとしている。
実際にJavaScriptによるAnC攻撃では、100秒未満という現実的な時間でFirefoxで64bitエントロピーのランダマイズ無効化を達成している。
VUSecでは、ページテーブルキャッシュをリバースエンジニアリングするライブラリとして、AnCのネイティブバージョンをgithub上で公開している。
悪意ある攻撃者によるAnCを用いた攻撃を防ぐため、JavaScriptバージョンのAnCを公開する予定はないとしているが、高度な技術レベルを持つ攻撃者であれば、公開された論文を基に、数週間でAnC攻撃用のJavaScriptを再現できるとの予測を示している。
VUSecでは、AnCはハードウェアの実装を悪用しているため、ユーザーができる対策としては「NoScript」などのプラグインを使用してJavaScriptをブロックし、信頼できないJavaScriptコードが実行されるのを防ぐなどの対処を行なうしかないとしている。