2017年11月8日水曜日

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

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

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

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

·         MINIX: Intel's hidden in-chip operating system | ZDNet

·         MINIX — The most popular OS in the world, thanks to Intel | Network World

タイトルを見ると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.

WikiLeaksvault7文書では、ほとんどのPCやラップトップで使われているUEFIUnified 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.

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

Replace Your Exploit-Ridden Firmware with Linux

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

GoogleRonald Minnich氏。

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

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

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

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

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

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

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

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

私は実に怖い

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

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

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

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

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

それがNERFNon-Extensible Reduce Firmware)です。

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