「Spectre」と「Meltdown」というプロセサのセキュリティホールが発見され、Intelの株価が下がるという事件になっている。しかし、なぜセキュリティホール(セキュリティの穴)なのか、なぜ10年以上もの間、これらに気が付かなかったのか、実際、どのような問題が生じるのかなどは、あまり報道されておりず、理解されていないと思われるので、分かり易く説明したい。

プロセサのセキュリティの仕掛け

現代のプロセサは、複数の仕事を並列に処理している。特にサーバの場合は、A社の仕事をしているときのデータを、同じプロセサで動いているB社の仕事から覗き見られてしまうのは困る。パーソナルユースの場合でも、個人情報やパスワードなどが盗まれてしまっては困る。

このA社の仕事とB社の仕事の分離は、次の図に示すように、OSという全体の管理を行うプログラムが使うメモリと、A社の仕事を処理するのに使うメモリとB社の仕事を処理するのに使うメモリを分離するというメカニズムで実現されている。

  • それぞれの仕事に使うメモリを分離する

    それぞれの仕事に使うメモリを分離する

A社の仕事をするプログラムはA社の仕事に使うメモリだけを使い、B社やC社の仕事のためのメモリを読み書きすることができなければ、B社やC社の情報が洩れることは防げる。

このメモリの分離は、ページテーブルというメカニズムで実現されている。メモリをページという単位で管理し、それぞれのプログラムが使えるページの一覧表を作り、ハードウェア的に、一覧表に載っているページのメモリは使えるが、一覧表に載っていないページのメモリは使えないという仕掛けが作られている。なお、一覧表は正式にはページテーブルというもので、各ページが物理メモリのどこのアドレスから始まっているか、そのページが特権状態だけで使えるのか、アプリケーションを実行するユーザ状態でも使用できるのかなどの情報も書かれている。

この一覧表であるが、A社の分もB社の分もC社の分も、すべてOSのメモリ領域に格納されており、OSはどこのメモリが使えるかを書き変えることができるが、各社の処理を行うプログラムは、自分の処理に使うメモリ領域を増減したりすることはできないようになっている。

なお、A社の仕事をするアプリケーションがもっと多くのメモリを必要とする場合には、OSにメモリの追加割り当てを依頼する。そうするとOSは新しいページを一覧表に追加してそのページをA社の仕事をするアプリケーションで使えるようにする。

  • OSは一覧表を書き換えられるが、アプリケーションは一覧表をアクセスできない

    OSは一覧表を書き換えられるが、アプリケーションは一覧表をアクセスできない

SpectreとMeltdownは、この分離メカニズムを突破して、他社の情報を盗み見することができる新しい仕掛けを見つけたというものである。このようなセキュリティホールは、これまでに10万件近く報告されているが、その多くは配列のサイズを超えるアクセスを許してしまうなど、ソフトウェアに欠陥があり、そこを突かれるというものであった。

しかし、SpectreとMeltdownは、「投機実行」という現代の高性能CPUがほとんど例外なく使っているマイクロアーキテクチャの隙を突くという新しいタイプの攻撃である。このため、欠陥のあるアプリケーションを実行する時だけの問題ではなく、IntelのCPUだけでなく、AMDやArmのCPUにも隙があり、そこを突かれると暗号鍵などの秘密の情報を盗まれてしまう可能性があることが分かっている。

(次回は1月17日に掲載します)