インテルの「欠陥」、影響はどこまで広がるのか コンピューターの基本的な安全性を脅威にさらすバグ

 

 インテル製のプロセッサーに内在するバグによって、秘匿性の高い情報がハッキングされるリスクが明らかになった。グーグルやアマゾン、マイクロソフトといった企業は迅速に対応に動き始めたが、どこまで影響が広がる可能性があるのか。その仕組みとともに改めて考える。

PHOTO: JOAN CROS/NURPHOTO/GETTY IMAGES

コンピューターセキュリティの基本に「隔離」という考え方がある。他人が書いた怪しげなコードは信頼せず、きちんと閉鎖された制限のある環境で実行することをいう。そうしないと、ほかのプロセスを盗聴したり、コンピューター全体を調べ回ったりするおそれがあるからだ。

仮にそうした防護壁が、コンピューターの基盤となるハードウェアに潜む欠陥によって破られることがあったとしよう。そうなればコンピューターの拠り所でもある最も基本的な保護機能が無効化され、あらゆる産業にとっての緊急事態が訪れる。

セキュリティ研究者は2018年早々、LinuxやWindowsの開発者が深刻なセキュリティホールに対するアップデートのベータ版として公開し始めた一連の更新情報に注目した。インテルのチップにあった“バグ”により、低い権限レヴェルで実行されているプロセスが、コンピューター上の聖域ともいえるカーネル(OSの中核をなすソフトウェア)が使用するメモリ領域にアクセスできるというのだ。

悪意あるプログラムが秘匿性の高い情報を盗み出す

このバグは、インテルが処理を高速化するために採用した手法に由来するとされる。このバグを突いた攻撃によって理論的には、悪意のあるソフトウェアがコンピューターやスマートフォン上のほかのプロセスやデータに深く入り込み、監視できる可能性がある。

さらに、Google Cloud ServicesやAmazon Web Servicesで動くサーヴァーのように複数のユーザーが利用するコンピューターでは、ハッカーが特定のユーザーのプロセスだけでなく、同一の共有サーバ上で実行されているほかのプロセスの中身までのぞくことさえできるようになる可能性がある。

1月3日(米国時間)の夜、グーグルの「Project Zero」、グラーツ工科大学、ペンシルヴェニア大学、アデレード大学(オーストラリア)などの大学、Cyberus、Rambusなどのセキュリティ企業からなる大規模な研究チームが、この欠陥に由来する2種類の脆弱性の詳細について発表した。この脆弱性は、「Meltdown」「Spectre」と名付けられた。

「ハードウェアのバグによって、コンピューター上で処理されているデータをプログラムが盗み出すことができます」と、研究者が立ち上げたウェブサイトでは、この攻撃について説明されている。「通常のプログラムは、ほかのプログラムのデータを読むことを許可されていませんが、悪意のあるプログラムがMeltdownとSpectreを利用することにより、実行中のほかのプログラムがメモリーに記憶している秘匿性の高い情報を入手できてしまうのです」

いずれの攻撃も基本的には同じ原因によるものである。Meltdownは悪意のあるプログラムによって、メモリー領域にある本来より高い権限レヴェルの情報を読み出せるようにする。これに対してSpectreは、コンピューター上で実行されているほかのアプリケーションのメモリー領域からデータを盗み出す点で異なっている。そして研究者たちによれば、Meltdownはインテル製チップに特有のバグだが、SpectreについてはAMDやARMのプロセッサーでも確認されているという。

アムステルダム自由大学のセキュリティ研究者で、チップレヴェルのハードウェアセキュリティの専門家であるベン・グラスによると、攻撃は根深く深刻なセキュリティ侵害を引き起こすという。「この脆弱性を利用し、攻撃者が何らかの方法でコードを実行できるとすれば、それはもはや手に負えません」と、グラスは指摘する。「信頼されていない、隔離されて実行されるどんなプロセスに関しても、安全性は失われてしまいました。すべてのプロセスがほかのすべてのプロセスを監視し、OSのカーネル内の秘密情報にアクセスできてしまうのです」

鍵を握る「投機的実行」

3日にMeltdownとSpectreについて公式に発表される前のことだ。アムステルダム自由大学のVUSECというセキュリティグループに所属するグラスの同僚、エリック・ボスマンは「投機的実行」と呼ばれるチップの機能を利用し、インテル製チップに対する攻撃の再現に成功した。

最近のインテル製プロセッサーは、コードの実行中にアルゴリズムが入力データ(例えば、口座に取り引きに必要な残高があるか否か)に基づいて2つに分岐するポイントに来ると、「投機的に」分岐先の処理を実行し、処理時間を高速化している。言い換えれば、当てずっぽうであらかじめ命令を実行しているのだ。間違った道を進んでいたことがわかるとプロセッサは分岐点まで戻り、投機的に実行していた結果を破棄する。