CPUの脆弱性[Spectre/Meltdown] の概要をプログラマー小飼弾が解説「キーワードは、アウト・オブ・オーダー実行、投機的実行、キャッシュの3つ」
今回の脆弱性は、昔からよく起きていたエラーだった?
山路:
草履の話や、『HUNTER×HUNTER』を本棚からテーブルへ持ってきた例で言うと、頻繁に起こりそうな感じがするじゃないですか? 今までだれも気付かなかったんですか?
小飼:
すでにある程度の心配や懸念はされていました。そういった脆弱性、要はカーネル空間がユーザー空間から見えてしまうというエラーそのものは、ちょくちょく見つかっています。
例えば、カーネルでやったほうがいいことをユーザーでもやっていた時期というのがあったわけです。MS-DOS【※】のころは、画面というのもユーザーランド【※】のプログラムで、じかに読み書きが出来たんです。でも今はカーネルにお願いするんです。
※MS-DOS
Microsoft社のOS。黒い背景に白い文字の画面が印象
※ユーザーランド
OSが動作するのに必要な、カーネル以外の部分。ファイルシステムやファイル操作コマンド、シェルなどの基本的なソフトウェア群を指す。
山路:
画面に表示してくれというのが、全部OSの仕事になっていると。
小飼:
だから実メモリには1バイトも触らせないというのが、今のOSのポリシーなんですけれども、そういった仕分けというのは、やっぱり余計な手間がかかります。かつてコンピューターの性能が十分でなかったころは、そういうことに片目をつぶっていた時期というのがあったわけです。
山路:
現代の最新OSであれば、そうならなくはなっていたはずなのに。
小飼:
直接ハードウェアに触ることというのは、カーネルのほうにも全部追いやっていたはずなんです。ところが今の実際のCPUがあって、その中にL1、L2、L3キャッシュがあって、やっとメモリが来るという構成と、CPUに注文できるソフトウェアというのは、実はかなり乖離しているんですよね。
山路:
どういうことですか?
CPUとメモリの距離は思ったより遠い
小飼:
普通のプログラムから見たら、情報を入れて置くところというのはレジスタ【※】とRAM【※】しかないんです。
山路:
つまり、CPUがカーネルのほかのプログラムを制御している、動作しているみたいなことは全然見えなくなっていて。
小飼:
少なくともプログラムを書くときには、キャッシュメモリのどこかという指定はできないんです。あくまでも、テーブルにあるはずの『HUNTER×HUNTER』32巻。実はアセンブリ【※】のレベルで見ても抽象化されていて、実際の振る舞いとは異なる。
※レジスタ
プロセッサなどが内蔵する一時的な記憶回路。データの読み書きが高速で、比較的小さな装置。
※RAM(ラム)
コンピューターが処理に使う一時的な記憶領域。任意で読み書きできるメモリであり、電源が切れるとデータが失われるため、大部分は揮発性メモリと呼ばれる。
※アセンブリ
プログラミング言語の一種。アセンブリ言語は低水準言語と呼ばれ、機械語を人間にわかりやすい形で記述している。
山路:
直接そのCPUに命令する言語ですら、ユーザーのプログラムからは指定できないようになっている。しかし、よく今回みたいな脆弱性が見つかったなというのは驚きですね。
小飼:
よく見つけてくれたという感じです。これはキャッシュメモリがないと、投機的実行だけでも成り立たないし、またある程度キャッシュメモリが大きくないと、すぐキャッシュメモリが消去されちゃうので成り立ちません。
この脆弱性は10年前から存在していた
山路:
ちなみに『Meltdown』と『Spectre』というのは、どう違うんですか?
小飼:
『Meltdown』というのは、プログラムがさっきのカーネルのメモリの一部のキャッシュを通して、ほかのプログラムを見ることができるという、対ユーザープログラムなんですよ。
山路:
ユーザープログラムが、ほかのユーザープログラムのやっていることを覗けるということ。
小飼:
『Spectre』もそうですね。ただ、よりデバッグしにくい。『Spectre』は、x86【※】、Intel版のAMD64【※】だけではなくて、ARM64【※】も影響を受ける。
山路:
ARM64というのは、つまりスマホなんかに使われている64ビットCPUですね。それ以前の、つまり32ビットのARMに、影響は受けないんですか?
小飼:
影響は受けようがないと言うか、そうやるためには投機的実行もしょぼければ、アウト・オブ・オーダー実行しないものすら珍しくもなく、ましてやキャッシュなんていうのは笑う程度の量しかなかった。
山路:
だから、IoT時代の脆弱性というと言い過ぎだと。
小飼:
IoTデバイスなどに使われているCPUは、いい意味で非力だから大丈夫。例えば、Raspberry Pi【※】。
※x86、AMD64、ARM64
いずれもマイクロプロセッサの命令セットアーキテクチャ。x86はIntel製、AMD64はAMD社製、ARM64はARM社製。
※Raspberry Pi(ラズベリーパイ)
ARMプロセッサを搭載したシングルボードコンピュータ。比較的安価で組み立てられ、超小型PCと呼ばれる。
山路:
「今、パソコン買い替えても大丈夫?」(コメント)
パソコン買わないほうがいいのか、という質問が出ていますね。
小飼:
そこまで深刻にならなくてもいいとは思います。こういったバグというのは、10年来のものなんですよ。ずっと抱えていて、半年前くらいにGoogleの中の人が見つけたんですけれども、いまだにプルーフ・オブ・コンセプト【※】止まりです。これを悪用したり、乱用したりというプログラムは今のところはまだ見つかっていません。
※プルーフ・オブ・コンセプト(POC)
概念実証と訳される。新たな発見や概念について実現できるかどうかを実証すること。
―関連記事―
4億円詐欺のスパコンベンチャー『PEZY Computing』はどんな会社? 社長の人物像は? プログラマー小飼弾が解説「技術的には平凡なもの」
経営者が『AI』になることはあるのか。「為替トレーダー600人中598人クビ」を受けてプログラマーが言及