system
上松 博志

2018.1.10システム開発 

システムエンジニア

上松 博志

[一般] <Spectre><Meltdown> CPUの脆弱性とは?

システムの上松です。

今回は、昨年Googleのセキュリティチームにより発見され、1月3日に発表されたCPUの脆弱性についてです。
ニュースサイトでも大々的に取り上げられた大ニュースでしたが、読んでみても「IntelのCPUだけに脆弱性が!」とか「AMDのCPUは大丈夫!」とか「メモリページング方式のCPUはNG!」などなど、情報が錯綜していて詳しい内容がよく分からないですね。

Googleの発表内容を見てみると、

Variant 1: bounds check bypass (CVE-2017-5753)
Variant 2: branch target injection (CVE-2017-5715)
Variant 3: rogue data cache load (CVE-2017-5754)

この3つが脆弱性となっているようです。
Variant 1」と「Variant 2」が「Spectre<スペクター>」、「Variant 3」がMeltdown<メルトダウン>と称されていますね。

大きな問題となっているのが、「Variant 3(不正データキャッシュ読込)<メルトダウン>ようです。
詳しい内容はGoogleの発表なりニュースサイトを巡っていただくとして、要約すると
キャッシュにカーネルメモリ領域を読み出す命令があった場合、それは権限違反なアクセスだから例外が出る。
例外が出るってことは、判断のためにキャッシュにカーネル情報が入ってるんじゃね?入ってました\(^o^)/
…こういうことのようです。

<メルトダウン>への対応は、結構バラバラのようです。
iOSはすでに対応済み、WindowsとAndroidはメーカー・キャリアの対応待ちのようです。

 

Variant 1」「Variant 2<スペクター>は、複合した脆弱性が影響しています。
結構難しい内容ですが、噛み砕いて解説すると以下のようになります。

Variant 1(配列の境界チェックバイパス)」は、
CPUの命令実行が順不同なことを利用し、ある命令で不正なメモリ領域を読みださせ、別の命令で『不正なメモリ領域が読み出せたか』をチェックすることで、アクセスしたメモリ領域の内容を推察できる。
推察できたら、ユーザーが使えるプログラムから内容を拾うことができる。
ということのようです。

Variant 2(分岐ターゲットインジェクション)」は、
CPUの命令分岐バッファが、『1CPU当たり1つしかない』ため、ここを監視すればどんなプロセスにメモリを割り当てたかが分かる。
分かったら、ユーザーが使えるプログラムから内容を拾うことができる。
ということのようです。

<スペクター>への対応は、「Variant 1」と「Variant 2」で別個に対応されているようです。
Variant 1」はOS側で対策が進んでおり、Variant 1単体での対応は進んでいるようです。
Variant 2」はIntelとARMのプロセッサでのみ影響ありらしく、割と対応がバラバラです。こちらも近い内にOSのアップデートで対応となるようです。
ニュースでは「全CPUに影響あり!」といった煽り文句で慌てがちになりますが、近日中に対策されるようです。
OSやプログラムの更新はよくチェックしておいたほうが良いでしょうね。
ちなみに、AMDのCPUは、古いモデルのみ「Variant 1」のみ影響があるようですが、「Variant 2」は影響なしなので問題極小です。
もう一つ言うと、僕はAMDのCPUを使っています。
僕はAMDのCPUを使っています。
大事なことなので二回言いました。

それでは。

システム開発サービスはこちら
ページTOPへ