2018年 01月 09日 ( 1 )

最近話題の脆弱性

細かいところまでは理解していないけれど説明を試みます。
かしこい人の突込みがあることを期待しつつ…

今回話題となっているような高性能なCPUには
1 プログラムを正しく実行するための記憶
2 プログラムを高速に実行するための記憶
の2種類の記憶があります。1番目の記憶には同じプログラムを実行したらいつでも同じ情報が乗っているはずなのですが、2目の記憶には場合によってはごみが乗っている可能性もあります。その場合でも実行結果には影響はないのですが、実行時間に違いが出ます。で、今話題の脆弱性は、2目の記憶にあえて読めないはずの情報を乗せて、実行時間の違いから読めないはずの情報の中身を言い当てるというものらしいです。
ちょっと詳しい人のために言うと、2目の記憶としてのキャッシュメモリや分岐予測に使う履歴情報が攻撃に使えるようです。

じゃあ、どうやって読めないはずの情報を2番目の記憶に乗せるのか?
高速なCPUは投機実行という方法を使ってプログラムを高速に実行します。簡単にいうと、本当は実行していいのかどうか良く分からないけど、とりあえず実行を進めておいて、ダメだったら後でなかったことにしようというやり方です。なかった事にする時に、1番目の記憶は正しい状態に戻すのですが、2番目の記憶にごみを残します。ここで、なかった事にされる命令で意図的に読めないはずの情報を読み出し、2番目の記憶に残骸(読めないはずの情報)を残して先の手法で内容を推測するというもののようです。

ちなみにもうちょっと正確に言うと、2目の記憶に読めないはずの情報そのものを残しても攻撃できるわけではありません。2番目の記憶に情報を推測するために必要なヒントを乗せて攻撃します。情報を別のメモリアクセスのアドレスに乗っけたり、条件分岐の成否判定に乗っけたりして、2目の記憶に痕跡を残すと攻撃可能なようです。実際にこんな方法で情報を盗み取れるのか疑問ですが、理屈的には不可能ではないというレベルの話に見えますね。


[PR]
by tom01h | 2018-01-09 20:22 | Trackback | Comments(0)