
公開された"Spectre"脆弱性 (CVE-2017-5753 および CVE-2017-5715) の利用例
2018年1月2日に公開された「Spectre」エクスプロイトの使用例(CVE-2017-5753 および CVE-2017-5715)
Spectreは異なるアプリケーション間の隔離を破ります。これにより攻撃者は、ベストプラクティスに従ったエラーのないプログラムを欺いて、秘密を漏洩させることができます。実際、そのベストプラクティスの安全性チェックは攻撃対象領域を増やし、アプリケーションをSpectreに対してより脆弱にする可能性があります。
C言語、使用ライブラリ:
メモリにテキスト「The Magic Words are Squeamish Ossifrage.」を配置し、エクスプロイトを使ってそれを読み取ろうとします。システムが脆弱であれば、出力に同じテキストがメモリから読み取られた状態で表示されます。
このコードでは、victim_function() 内のコンパイル済み命令が厳密なプログラム順序で実行されていた場合、array1のサイズが16であるため、関数は array1[0..15] からのみ読み取ります。しかし、投機的に実行された場合、範囲外読み取りが可能になります。readMemoryByte() 関数は victim_function() を数回トレーニング呼び出しして、分岐予測子にxの有効な値を期待させ、その後範囲外のxで呼び出します。条件付き分岐が予測を誤り、その後の投機的実行が範囲外のxを使って秘密のバイトを読み取ります。投機的コードは次に array2[array1[x] * 512] から読み取り、array1[x] の値をキャッシュ状態に漏洩させます。攻撃を完了するために、単純なflush+probeを使用して、array2 内のどのキャッシュラインがロードされたかを特定し、メモリ内容を明らかにします。攻撃は複数回繰り返されるため、ターゲットバイトが最初はキャッシュされていなくても、最初の反復でキャッシュに持ち込まれます。
最適化されていないコードは、i7 Surface Pro 3上で約10KB/秒の読み取り速度です。