ロウハンマー
プロセスに割り当てられていないメモリへのアクセスを防止するメモリ保護は、最新のオペレーティングシステムの背後にある概念の1つである。 プログラム(や一般にコンピュータシステム)は特定のタスクを実行するために要求される限られた権限を持つ各部分であるプロセスに分割されるが、リングプロテクションなど他のセキュリティ機構とメモリ保護を組み合わせることで、プロセス間の特権分離(英語版)が達成できる。 特権分離を使うと、コンピュータセキュリティに対する攻撃の効果をシステムの特定の部分に制限することにより、潜在的な被害の範囲を小さくすることもできる 。
外乱エラー(→#概要)は、基盤にあるメモリのハードウェアを直接操作するユニークな攻撃経路(英語版)を実質的に作ることで、プロセスがメインメモリの任意の部分を変更できるようになり、メモリ保護のさまざまな層をとても低いハードウェアレベルで「短絡する」ことにより効果的に打ち破ってしまう 。 これと比較して、バッファオーバーフローのような「従来の」攻撃経路は、プログラムのさまざまなミスを悪用して保護機構をソフトウェアのレベルで迂回し、他の方法ではアクセスできないメインメモリの内容を変更することを狙っている 。
ロウハンマーに関する最初の研究は2014年6月に出版され、外乱エラーの性質と潜在的な攻撃方法を示していたが、実際に動作する攻撃例は 載っていなかった 。 続く2014年10月の研究論文では、ロウハンマー効果に起因するセキュリティ問題の存在に触れていなかった 。
2015年3月9日、GoogleのProject Zero(英語版)はロウハンマー効果に基づく実際に動作する特権昇格(英語版)の2つの悪用例を明らかにし、x86-64 アーキテクチャにおける脆弱性を実証した。 ひとつはサンドボックスでx86-64 機械語命令の制限されたサブセットを実行する Google Native Client (NaCl) 機構を標的にしたもので、ロウハンマー効果を悪用してサンドボックスから脱出し、システムコールを直接発行する可能性を増大させている。 この NaCl の脆弱性(CVE-2015-0565)は、効果的なロウハンマー攻撃を組み立てるために必要だと以前は考えられていた clflush機械語命令(キャッシュラインをフラッシュする) ) を許さないように NaCl を修正することで緩和された 。
2つめはx86-64アーキテクチャ上のLinuxの特権を持たないプロセスとして実行され、コンピュータに実装されているすべての物理メモリに制限なくアクセスするためにロウハンマー効果を悪用した。外乱エラーとヒープスプレー(英語版)を組み合わせることで、この悪用例では 仮想メモリシステムで仮想アドレスと物理アドレスのマッピングに使われるページテーブルエントリー (page table entry, PTE) の変更を可能にしており、結果として制限のないメモリアクセスが可能になっている 。