インテルx86マシンの奥深くでは人知れず「MINIX 3」が動作しており、脆弱性を作り出している。Googleらはそれを排除しようとしている

2017年11月8日

インテルのx86プロセッサを用いたシステムでは、その奥深くで人知れずMINIX 3を含む2つほどのカーネルがプロセッサ上で稼働しているOSとは別に作動しており、それが脆弱性を作り出しているとGoogleのエンジニアらが警告し、それを取り除こうという動きを見せています。

それが、10月23日から26日までチェコ共和国のプラハで行われたOpen Source Summit EuropeでGoogleのRonald Minnich氏のセッション「Replace Your Exploit-Ridden Firmware with Linux」(脆弱性にまみれたファームウェアをLinuxで置き換える)のセッションで説明されたことでした。

これを、海外のメディアが次のように取り上げています。

タイトルを見るとMINIXが強調されていますが、Open Source Summit Europeの公式ページのセッション概要では、以下のようにUEFIに焦点が当たっています。

With the WikiLeaks release of the vault7 material, the security of the UEFI (Unified Extensible Firmware Interface) firmware used in most PCs and laptops is once again a concern. UEFI is a proprietary and closed-source operating system, with a codebase almost as large as the Linux kernel, that runs when the system is powered on and continues to run after it boots the OS (hence its designation as a “Ring -2 hypervisor"). It is a great place to hide exploits since it never stops running, and these exploits are undetectable by kernels and programs.

WikiLeaksのvault7文書では、ほとんどのPCやラップトップで使われているUEFI(Unified Extensible Firmware Interface)へのセキュリティの懸念が再燃しています。UEFIはプロプライエタリかつクローズドソースのOSであり、コードベースはほぼLinuxカーネルと同じほどの大きさがあります。これはシステム起動時に作動を開始し、OSブート後も作動しています(“リング -2のハイパーバイザとして作られている)。これは脆弱性(エクスプロイト)が隠れるのに最適な場所で、というのも決して止まらず、しかもカーネルやプログラムからは検出できないのです。

Our answer to this is NERF (Non-Extensible Reduced Firmware), an open source software system developed at Google to replace almost all of UEFI firmware with a tiny Linux kernel and initramfs. The initramfs file system contains an init and command line utilities from the u-root project (http://u-root.tk/), which are written in the Go language.

これに対する私たちの答えがNERF(Non-Extensible Reduced Firmware)です。Googleで開発されたオープンソースで、UEFIファームウェアのほとんどすべてを小さなLinuxカーネルとinitramfsで置き換えます。このinitramfsファイルシステムはinitとu-rootプロジェクトのコマンドラインユーティリティを含んでおり、Go言語で記述されています。

Replace Your Exploit-Ridden Firmware with Linux

セッションのスライド動画がともに公開されていますので、それらを見てみるとUEFI、MINIX3のいずれもが対象となっているようです。その部分の概要を見ていきましょう。

GoogleのRonald Minnich氏。

fig

まず冒頭で、このセッションの内容はMinnich氏だけではなく、彼を含むGoogleの4人に加え、シスコやTwo Sigmaなど複数のエンジニアが関わったものと紹介されます。

Minnich氏は、現在のx86プラットフォームではLinuxとハードウェアのあいだに少なくとも2個半のカーネルが存在し、その部分に脆弱性の可能性があると指摘。

fig

その構造を示した図が下記です。通常、OSの特権モデルとしてユーザーランドの「リング3」、カーネルが実行される「リング0」があるとされています。この図では、その下に存在する仮想化ハイパーバイザを便宜上「リング -1」(リングマイナス1)と表現。

Minnich氏はさらにその下のリングがあると指摘します。

「リング -2」(リングマイナス2)には、カーネルと半カーネルが存在し、CPU全体をコントロールしています。SMM(System Mangement Mode)半カーネルは8086の16ビットモードをトラップ。一方のUEFIカーネルは64ビットページモードで実行されています。

そして問題の「リング -3」(リングマイナス3)カーネルにはインテル独自のManagement Engine、ISH(Integrated Sensor Hub)、IE(Innovation Engine)がMINIX 3で実行されていると説明。

(追記:Management EngineはCPUとは別にチップセット内にあるマイコンで動作しているとのこと。これに合わせてタイトルを変えました)

Minnich氏はこの「リング -3」について「誰もが心配している」と指摘します。

fig

私は実に怖い

「リング -2」「リング -3」では、IPスタック、ファイルシステム、Webサーバなど、さまざまなコンポーネントが存在します。

fig

こうしたx86マシンの内部に隠された2個半のカーネルには脆弱性の可能性があり、非常に怖い存在だとするとMinnich氏。

fig

「もしあなたが怖くないのだとしたら、私の説明がよくなかったのだろう。私は実に怖い」(Minnich氏)

「リング -2」「リング -3」を置き換えるNERF

前述のセッション概要ではUEFIに対する懸念が焦点として示されていましたが、セッション全体としては「リング -2」「リング -3」の両方に対する脆弱性の可能性が示され、その全体を置き換える提案がなされています。

fig

それがNERF(Non-Extensible Reduce Firmware)です。

fig

ここからNERFの解説が行われるのですが、詳しくはぜひスライドや動画などでご確認ください。


あわせて読みたい

OS




タグクラウド

クラウド
AWS / Azure / Google Cloud
クラウドネイティブ / サーバレス
クラウドのシェア / クラウドの障害

コンテナ型仮想化

プログラミング言語
JavaScript / Java / .NET
WebAssembly / Web標準
開発ツール / テスト・品質

アジャイル開発 / スクラム / DevOps

データベース / 機械学習・AI
RDB / NoSQL

ネットワーク / セキュリティ
HTTP / QUIC

OS / Windows / Linux / 仮想化
サーバ / ストレージ / ハードウェア

ITエンジニアの給与・年収 / 働き方

殿堂入り / おもしろ / 編集後記

全てのタグを見る

Blogger in Chief

photo of jniino

Junichi Niino(jniino)
IT系の雑誌編集者、オンラインメディア発行人を経て独立。2009年にPublickeyを開始しました。
詳しいプロフィール

Publickeyの新着情報をチェックしませんか?
Twitterで : @Publickey
Facebookで : Publickeyのページ
RSSリーダーで : Feed

最新記事10本