アカウント名:
パスワード:
この論文 [mit.edu]で提案されている Spectre 1.1 と 1.2 の共通点は、投機的実行パスにおいて脆弱性を“仮想的に”突くことで、本来読めないデータを読めるようにするというものです。特に Spectre 1.2 は実際にリードオンリーに設定されたデータを書き換えるというわけではなく、投機的実行パス (のみ) において読み取り専用のデータを書き換え、投機的実行パスを任意のものに置き換えることによって本来読めないメモリ等を読み取ろうとする (サンドボックス等におけるコードの制約を回避する?) 攻撃のようです。
これが成り立つのは、オリジナルの Spectre の一部バリアントでもそうですが投機的実行パスにおいて多くの権限チェックを飛ばすことに起因しており、普通は実行できないコードが投機的には実行されてしまうことで、その結果を間接的に推測できてしまうということにあります。
ここのとこ、意味がよくわからない
…実際にリードオンリーに設定されたデータを書き換えるというわけではなく、投機的実行パス (のみ) において読み取り専用のデータを書き換え…
投機実行中のプロセッサはメモリアクセスの権限チェックをさぼり、読み取り専用領域へのストアもストアバッファに格納し、ロードはそっちを優先的に参照してしまうので、投機実行中のプログラムはあたかも(書き込み禁止であるはずの)データを書き換えたかのように振る舞う特に分岐テーブルなどは通常は読み取り専用領域に格納されているが、これを書き換えて本来ならあり得ない先に分岐したかのように投機実行中は振る舞うことができる投機失敗が判明すると投機実行の痕跡は跡形もなく消去され、なにごともなかったことになるが、キャッシュやTLBや分岐予測器などにごくわずかな痕跡が残ってしまうので脆弱性となる
プロセッサはどういう命令を実行すると投機実行モードに入るのかというと・条件分岐命令・間接分岐命令・メモリアクセス例外、算術例外、特権例外などを起こす命令なので、整数演算以外の大半は投機実行の要因となります実際、プロセッサはほとんどは投機実行モードで動いているので、権限チェックをさぼって後でまとめて解決するとおいしい富士通のプロセッサはそこをきちんと理解した上でさぼらなかったのでしょう実にすばらしい
ページング方式でメモリアクセス例外を検出するには、アクセスされる実効仮想アドレスを計算し、それに基づきページテーブルエントリを取得し、エントリの属性を見る必要があるほぼすべてのOoOプロセッサはメモリアクセス命令は実効アドレスの計算とロード/ストア操作の2つのuopに分解して実行するセグメント方式であれば、メモリアクセス命令を修飾しアクセス対象のセグメントを指定するストア命令をフェッチした時点でストア対象のセグメントの属性を取得し直ちに例外を起こすことができるページングでなにもかもやろうとしたunixの汚い部分がモロに出ましたな
unixよりはページングの方が古いんじゃないの?
ページングは1960年代に現れたそうな。UNIX以前ね。そして、オリジナルのUNIX(AT&T系)はページングじゃなくてスワッピング。UNIX界隈でのページングはBSDが初出かな。
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
※ただしPHPを除く -- あるAdmin
実際の書き換えではない (スコア:2)
この論文 [mit.edu]で提案されている Spectre 1.1 と 1.2 の共通点は、投機的実行パスにおいて脆弱性を“仮想的に”突くことで、本来読めないデータを読めるようにするというものです。特に Spectre 1.2 は実際にリードオンリーに設定されたデータを書き換えるというわけではなく、投機的実行パス (のみ) において読み取り専用のデータを書き換え、投機的実行パスを任意のものに置き換えることによって本来読めないメモリ等を読み取ろうとする (サンドボックス等におけるコードの制約を回避する?) 攻撃のようです。
これが成り立つのは、オリジナルの Spectre の一部バリアントでもそうですが投機的実行パスにおいて多くの権限チェックを飛ばすことに起因しており、普通は実行できないコードが投機的には実行されてしまうことで、その結果を間接的に推測できてしまうということにあります。
Re: (スコア:0)
ここのとこ、意味がよくわからない
…実際にリードオンリーに設定されたデータを書き換えるというわけではなく、
投機的実行パス (のみ) において読み取り専用のデータを書き換え…
Re:実際の書き換えではない (スコア:0)
投機実行中のプロセッサはメモリアクセスの権限チェックをさぼり、読み取り専用領域へのストアもストアバッファに格納し、ロードはそっちを優先的に参照してしまうので、投機実行中のプログラムはあたかも(書き込み禁止であるはずの)データを書き換えたかのように振る舞う
特に分岐テーブルなどは通常は読み取り専用領域に格納されているが、これを書き換えて本来ならあり得ない先に分岐したかのように投機実行中は振る舞うことができる
投機失敗が判明すると投機実行の痕跡は跡形もなく消去され、なにごともなかったことになる
が、キャッシュやTLBや分岐予測器などにごくわずかな痕跡が残ってしまうので脆弱性となる
Re: (スコア:0)
プロセッサはどういう命令を実行すると投機実行モードに入るのかというと
・条件分岐命令
・間接分岐命令
・メモリアクセス例外、算術例外、特権例外などを起こす命令
なので、整数演算以外の大半は投機実行の要因となります
実際、プロセッサはほとんどは投機実行モードで動いているので、権限チェックをさぼって後でまとめて解決するとおいしい
富士通のプロセッサはそこをきちんと理解した上でさぼらなかったのでしょう
実にすばらしい
Re: (スコア:0)
ページング方式でメモリアクセス例外を検出するには、アクセスされる実効仮想アドレスを計算し、それに基づきページテーブルエントリを取得し、エントリの属性を見る必要がある
ほぼすべてのOoOプロセッサはメモリアクセス命令は実効アドレスの計算とロード/ストア操作の2つのuopに分解して実行する
セグメント方式であれば、メモリアクセス命令を修飾しアクセス対象のセグメントを指定する
ストア命令をフェッチした時点でストア対象のセグメントの属性を取得し直ちに例外を起こすことができる
ページングでなにもかもやろうとしたunixの汚い部分がモロに出ましたな
Re: (スコア:0)
unixよりはページングの方が古いんじゃないの?
Re: (スコア:0)
ページングは1960年代に現れたそうな。UNIX以前ね。
そして、オリジナルのUNIX(AT&T系)はページングじゃなくてスワッピング。
UNIX界隈でのページングはBSDが初出かな。