side-channelの内容について、自分なりに理解した自分メモを記録として残しておきます。以下、基本的に1次情報であるProjectZeroの報告の自分なりの和訳&要約です。分岐予測は、分岐ターゲットを予測し、プロセッサが、分岐真の実行パスが分かるずっと前の命令の実行を開始することを可能にする。P6以降のプロセッサには「暗黙的キャッシング」がある暗黙のキャッシングは、通常のフォンノイマンシーケンスでアクセスされたことはないが、メモリ要素が潜在的にキャッシュ可能にされたときに発生する。積極的なプリフェッチ、分岐予測、およびTLBミス処理のために、暗黙のキャッシングがP6以降のプロセッサフ​​ァミリで発生します。既存のIntel386、Intel486、およびPentiumプロセッサー・システムの動作を拡張したものです。これらのプロセッサー・ファミリーで実行されるソフトウェアも、命令プリフェッチの動作を確定的に予測できませんでした。キャッシュされていない場合、プロセッサはこの分岐を解決する前に、arr1->data[untrusted_offset_from_caller]を投機的にロードすることができる。以下のコードには問題がある。ロードにかかる時間を計測すると、いずれか一方はキャッシュにのっているためアクセスが早く、もう片方はキャッシュにのっていないためアクセスが遅いとなり、攻撃者は投機実行中のindex2を推測でき、arr1->data[untrusted_offset_from_caller]の最下位ビットが0か1かを推測できる。実際にこれを攻撃に転用するには、攻撃対象の環境で上記の様なコードを実行させる必要がある。JITコンパイラなどが考えられる。JITエンジンを使用した。これはカーネルに組み込まれており通常のユーザーからアクセス可能。2のための我々のPoCの理論背景を説明する。約1500bytes/secondでホストのカーネルメモリーを読むことができる、というもの先行研究[*1]で、別々のセキュリティコンテキスト内のコードがお互いの分岐予測に影響を与える可能性があることがわかっている。この問題はこれまで、コードがどこにあるかを推測するためにのみ使用されていた。leakこれ?http://inaz2.hatenablog.com/entry/2014/05/02/231433この攻撃の基本的な考え方は、ターゲットアドレスがメモリからロードされ、ターゲットアドレスを含むキャッシュラインをメインメモリにフラッシュする間接分岐を含むターゲットコードをターゲットにすること。CPUが間接分岐に達すると、ジャンプの真の宛先がわからず、キャッシュラインのCPUへのロードが終了するまで真の宛先を計算できなくなる(その間、数百サイクル)。したがって、典型的には100サイクルを超える時間ウィンドウがあり、CPUは分岐予測に基づいて命令を投機的に実行する。(CVE-2017-5754)詳細は以下を参照https://cyber.wtf/2017/07/28/negative-result-reading-kernel-memory-from-user-mode/要約すると、この問題のこの亜種を使用した攻撃は、カーネルコードの制御フローを誤って指示することなく、ユーザー空間からカーネルメモリを読み込もうとします。用されたコードパターンを使用することによって機能します。基本的な考え方は、アドレスへのアクセスチェックが、メモリからレジスタへのデータ読み取りのクリティカルパス上にない可能性があります。この場合、パーミッションチェックがパフォーマンスに大きな影響を与える可能性があります。生するようにするリオーダ・バッファにフラグを設定する。CPUでは命令はマイクロコードへ分割され、マイクロコード単位で扱うことで内部的にはRISC的に振る舞えるようになっている。その際、マイクロコードはリオーダーバッファというバッファへ格納され、その中で命令間の依存関係を崩さない範囲で、高速化を目的とした命令順の入れ替えが行われる。「リオーダーバッファ内で発生した例外は、一連のリオーダーバッファの実行が完了したあとで処理されるのではないか」という仮説である。1と同様の挙動が考えられる。1同様にL1キャッシュにはデータが残っているため、ロールバックした後であっても、データアクセスにかかる時間を比較することで上記命令列でカーネルアドレスからロードしたraxの最下位ビットは推測できてしまう。上記記事の筆者はより確度を上げるために以下の取り組みをしている。prefetcht0命令を使用して、アドレスがL1にロードされる確率を向上させます。Grussら[4]は、プリフェッチ命令がアクセス権を持たないにもかかわらずキャッシュをロードする可能性があると結論付けた。ntellのTomasuloアルゴリズム(リオーダーバッファ内の実行のアルゴリズム)の実装について私が作ったいくつかの前提があります。「サイドチャネルに弱い」ことは示されてしまった(投機的実行をしてしまっている以上、実行した命令がメモリアクセスを含むならキャッシュへのロードも行われてしまっている)。読者になる検索リンクはてなブログブログをはじめる週刊はてなブログはてなブログPro最新記事コミックマーケット97(C97)で「バイナリ生物学入門」出します!技術書典7で「x86_64機械語入門」本出します!コミックマーケット96(C96)で「マルチコア本」出します!技術書典6で自作NICドライバ本「ぼくらのイーサネットフレーム!」出します!はてなブログへ移行しました月別アーカイブはてなブログをはじめよう!cupnesさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。