メインコンテンツへスキップ
見出し画像

なぜ100万行のC言語を捨てて「300行のアセンブリ」へ置き換えたのか?──4,000億トークンの脆弱性探索とTinfoilが示した「AI時代のソフトウェア還元主義」

    【YouTube本編動画(34分14秒・全8枚スライド&音声解説)】

    https://youtu.be/WnTD91dVuME


    はじめに:100万行のレガシーファームウェアに数千億トークンでパッチを当て続けるべきか?

    もしあなたが社内のクラウド基盤や機密情報処理システムの安全性を設計する立場にあり、「世界中で20年間使われている100万行の標準オープンソースソフトウェアなら、多くのエンジニアの目で見られているから安全だ」と考えていたら、自律型AIの登場によってその前提が根底から逆転している事実に目を向ける必要があります。

    2026年10月25日、機密コンピューティング(Confidential Computing)基盤を開発するスタートアップ Tinfoil のエンジニアである Joe Lothan 氏、Jules Drean 氏、Mia Korennykh 氏の3名が、システムセキュリティのあり方を問い直す技術論文を公開しました。タイトルは "Less Is More: From 1M Lines of Firmware to 300 of Assembly"(少ないことは豊かである:100万行のファームウェアから300行のアセンブリへ)です。

    この論文が書かれた直接のきっかけは、その直前にフロンティアAI研究機関が公表した大規模なセキュリティ検証実験でした。同機関は、自社の最先端モデルを学習・推論させる機密環境を守るため、仮想マシンの起動を担う標準オープンソースファームウェア OVMF(Open Virtual Machine Firmware) に対して自律型エージェント群を投入しました。消費された計算量は 4,000億トークン、一般的なAPI利用料に換算すれば 800万ドルから2,000万ドル(日本円で約12億円から30億円相当) という前代未聞の規模です。その結果、約100万行のC言語で書かれたOVMFの中から、20年間誰も気づかなかった複数の未知の脆弱性(ゼロデイ)を発見し、修正パッチを提供しました。

    一見すると、「AIが長年の深層バグを見つけて直してくれた素晴らしい成果」に見えます。しかし、Tinfoilのエンジニアたちは、この成果に深い敬意を表しつつも、まったく逆の問いを立てました。

    「そもそも、なぜクラウドの仮想マシンを1つ起動するだけのプログラムに、100万行ものC言語が必要なのか?」

    そして彼らは、100万行のC言語ファームウェアにパッチを当て続ける路線を離れ、外部ライブラリに一切依存しない 「わずか約300行・サイズにして1ページ(4 KiB)のx86アセンブリ言語」 と、ビルド時にメモリ配置を確定させる IGVM(Independent Guest Virtual Machine) コンパイラへと完全に置き換えてしまったのです。

    本記事では、動画本編でお話しした内容をさらに深掘りし、以下の3点を一次資料と仕様書に基づいて徹底解説します。

    • 対象読者:クラウドインフラ・情報システム・セキュリティ設計の担当者、AI基盤やコンテナ基盤を運用するエンジニア、およびAI時代のソフトウェア品質評価基準を見直したい開発リーダーの方。

    • この記事を読んでできること:
      ・4,000億トークン(商業価格換算800万〜2,000万ドル相当)の脆弱性監査と、2026年10月22日公表のTianoCore EDK II PXEドライバ脆弱性(GHSA-99cj-7hg9-mp4m)の仕組みを一次資料で説明できるようになります。
      ・機密VM(AMD SEV-SNP / Intel TDX)におけるOVMFの「8系統のランタイム入力解析」と、Tinfoilが実装した「IGVM+約300行(4 KiB)のx86アセンブリ+2項目の境界検査」の構造的違いを理解できます。
      ・社内のコンテナ・VM・AIワークロードから「不要なランタイム処理」を削ぎ落とし、再現可能なビルド時確定へ移行するための具体的な実務手順と「反トークンマキシング(Anti-tokenmaxxing)」の評価基準を持ち帰ることができます。

    • 重要な大前提(誰も責めない建設的スタンス):4,000億トークンを投じてオープンソースに修正を還元したAI研究機関も、20年間にわたり約3,000ページのUEFI仕様(EDK II / OVMF)を実装・保守してきた開発者コミュニティも、またRust製最小BIOS「Stage0」を開発したGoogle Project Oakチームも、誰一人として責められるべきではなく、それぞれの用途と脅威モデルにおいて極めて重要な貢献を行っていること。

    • 技術解剖(OVMF 8系統のランタイム入力解析 vs. Tinfoil IGVM 2項目の境界検査):なぜ機密VM(Intel TDX / AMD SEV-SNP)では直下のハイパーバイザーが「信頼できない攻撃面」になるのか、そしてTinfoilがどのようにしてランタイムTCB(信頼計算基盤)を99.97%削減したのか。

    • 実務への還元(反トークンマキシングと3つの設計原則):2026年10月28日のTLDRニュースレターで報じられたAmazon社内の「反トークンマキシング(Anti-tokenmaxxing)」通達や、OpenSSFポッドキャスト第5回での当事者の肉声と合わせ、私たちが明日から現場で実践できる「ソフトウェア還元主義(Software Reductionism)」の具体的アクション。


    第1章:4,000億トークンの衝撃と「リーナスの法則(Linus's Law)」の逆転

    Slide 01
    Slide 01

    1.1 OVMF(Open Virtual Machine Firmware)とは何か?

    Slide 02
    Slide 02

    TianoCore公式ドキュメントが定義するとおり、OVMF とは、PCやサーバー用の標準UEFIファームウェア実装である EDK II(EFI Development Kit II) を、QEMU/KVMなどの仮想マシン向けに移植したオープンソースプロジェクトです。

    私たちが物理サーバーやPCの電源を入れると、LinuxやWindowsといったOSが起動するより前に、まずマザーボード上のUEFIファームウェアが起動します。UEFI仕様書は 約3,000ページ に達し、過去20年間にわたる多様なハードウェアとの互換性をすべて背負っています。そのため、OVMFのコードベースも 約100万行のC言語 という巨大な規模に膨れ上がっています。

    この100万行の中には、現代のクラウド上の単一目的VMでは一度も使われない機能も数多く含まれています。

    • 起動画面にビットマップ画像のロゴを描画する スプラッシュスクリーン機能

    • 起動設定を永続化する 仮想NVRAM変数ストア

    • ネットワーク経由でOSイメージをダウンロードして起動する PXE(Preboot Execution Environment)ネットワークブートスタック一式

    1.2 2026年10月22日公表のEDK II PXEドライバRCE(GHSA-99cj-7hg9-mp4m)

    その象徴的な実例が、Tinfoilの論文公開のわずか3日前である 2026年10月22日 に公開されたTianoCore EDK IIの公式セキュリティ勧告 GHSA-99cj-7hg9-mp4m です。

    この脆弱性は、EDK IIのネットワークパッケージに含まれるPXEブートドライバ(NetworkPkg/UefiPxeBcDxe)で発見された、OS起動前における遠隔コード実行(Pre-boot RCE)の欠陥です。

    具体的には、IPv4およびIPv6のICMPエラーパケットを処理する2つの関数(PxeBcIcmpErrorDpcHandle および PxeBcIcmp6ErrorDpcHandle)において、受信したパケットデータを Mode.IcmpError という 504バイト の固定長バッファへコピーする際、入力サイズの境界検査が欠落していたため、504バイトを超えるパケットを送りつけるだけでメモリ破壊(バッファオーバーフロー)が成立する構造になっていました。

    データセンターで何千台ものベアメタルサーバーを一括プロビジョニングする現場において、PXEブートは長年不可欠な機能であり、EDK IIのメンテナの方々は迅速にパッチを作成して公開しました。しかし、「そもそもネットワークブートを一切行わない機密クラウドVM」の中にまで、この巨大なC言語コードが常駐していること自体が構造的なリスクだったのです。

    1.3 機密VM(Confidential VM)における脅威モデルの逆転

    Slide 03
    Slide 03

    なぜ機密VMでは、ファームウェアの複雑さが致命傷になるのでしょうか。Tinfoilの公開ドキュメント(A Primer on Confidential Computing and Secure Enclaves)が整理しているとおり、通常のクラウドVMと機密VMでは 「ハイパーバイザーを信頼するかどうか」 が180度異なります。

    • クラウド事業者・ハイパーバイザーの位置づけ
      ・通常のクラウドVM:100%信頼できる管理者(Trusted Host)として扱います。
      ・機密VM(AMD SEV-SNP / Intel TDX):信頼できない相手(Untrusted Host)として扱います。

    • 守るべき対象の境界線
      ・通常のクラウドVM:外部ネットワークからの不正アクセスを防ぎます。
      ・機密VM(AMD SEV-SNP / Intel TDX):侵害されたホストOS・ハイパーバイザー・悪意ある管理者からのメモリ覗き見や改ざんを防ぎます。

    • ハードウェア保護機構の仕組み
      ・通常のクラウドVM:通常の仮想化分離(Intel VT-x / AMD-V)のみに依存します。
      ・機密VM(AMD SEV-SNP / Intel TDX):CPUによるゲスト物理メモリのハードウェア暗号化と、起動時イメージの暗号学的測定(Attestation)を強制します。

    • ファームウェアへのホスト入力の扱い
      ・通常のクラウドVM:「管理者が渡す正しい設定データ」としてそのまま処理します。
      ・機密VM(AMD SEV-SNP / Intel TDX):「攻撃者が自由に細工して流し込める攻撃面(Attack Surface)」へと変化します。

    通常のVMでは、直下のハイパーバイザー(QEMUやクラウド事業者のホストOS)が壊れたらすべて終わりなので、ハイパーバイザーからファームウェアへ渡される設定データ(ACPIテーブルやメモリマップなど)は「無条件に正しいもの」として扱われてきました。

    ところが、Intel TDXやAMD SEV-SNPを用いた機密VMは、「たとえハイパーバイザーが攻撃者に完全に乗っ取られても、ゲストVM内のAIモデルや機密データをハードウェア暗号化で守り抜く」ために存在します。すると、起動時にハイパーバイザーから設定データを受け取って解釈するOVMFの100万行のC言語コードは、「暗号化されたゲストVMの内部で、攻撃者(非信頼ホスト)からの細工された入力を最初に受け取る最前線のパーサー」 になってしまうのです。

    1.4 「リーナスの法則」の逆転と反トークンマキシング

    フロンティアAI研究機関が4,000億トークン(800万〜2,000万ドル相当)を投じてOVMFを徹底監査したことは、オープンソース界全体にとって大きな貢献でした。しかしTinfoilは、このアプローチには2つの越えられない壁があると指摘します。

    • 残存バグ不在の証明不能性:100万行のC言語に対して4,000億トークンを燃やして20個のバグを直しても、「21個目のバグが存在しないこと」は誰にも証明できません。

    • 経済的・計算資源的非対称性:世界中のほぼすべての企業・組織は、たった1つのファームウェア部品の監査に2,000万ドル相当のトークンを投じる余裕など持っていません。

    ここでTinfoilが提示したのが、オープンソースの有名な格言である 「リーナスの法則(Linus's Law:十分な目があれば、すべてのバグは浅い)」の逆転 です。

    かつて人間のレビュアーの目しか存在しなかった時代には、「多くの人が使っている有名な巨大ソフトウェア=多くの人間の目で見られている=安全」という相関が成り立っていました。

    しかし、自律型AIによるファジングや形式検証という 「人工の目(Artificial Eyeballs)」 が使えるようになった現代において、ソフトウェアの安全性は「人気度」とは相関しなくなりました。むしろ、「人工の目をどれだけ高密度に集中投下できるか=コードがいかに小さく、目的が単一で、状態空間が狭いか」 によって安全性が決まるようになったのです。

    この洞察は、2026年10月28日の TLDR Newsletter でTinfoilの論文と並んで報じられた Amazon社内の「反トークンマキシング(Anti-tokenmaxxing)」通達 とも深く共鳴しています。近年、一部の開発現場では「AIエージェントに何億トークンを消費させ、何万行のコードを自動生成させたか」を競う「トークンマキシング」が流行していました。しかしAmazonは、トークン消費量や生成コード行数ではなく、本番環境での確実なローンチと実質的な成果でエンジニアを評価する方針を明確にしました。セキュリティも開発生産性も、「トークン量による力押し」から「不要な複雑性を削ぎ落とす還元主義」へと舵が切られているのです。


    第2章:100万行のOVMFから300行のアセンブリへ──IGVMとビルド時コンパイルの技術解剖

    Slide 04
    Slide 04

    では、Tinfoilは具体的にどのような仕組みで、100万行のC言語ファームウェアを 「約300行・4 KiBのx86アセンブリ」 へ置き換えたのでしょうか。Tinfoilが公開した cvmimage リポジトリの設計文書(docs/launch.md)、MicrosoftのIGVM仕様、QEMUのIGVMドキュメント、およびLinuxカーネルのx86ブートプロトコル仕様書(boot.html / zero-page.html)を照合すると、その緻密な機構が浮かび上がります。

    2.1 OVMFがランタイム(起動時)に行っていた「8つの仕事」

    x86アーキテクチャの仮想マシンが電源オンになるとき、CPUは1978年のIntel 8086と同じ 16ビット・リアルモード で、ゲスト物理アドレス(GPA)0xFFFFFFF0(リセットベクタ)から命令を実行し始めます。そこから64ビットのLinuxカーネルを起動するまでに、従来のOVMFは実行時(ランタイム)に以下の 8系統の非信頼ホスト入力 を処理していました。

    • fw_cfg(QEMU Firmware Configuration)通信:I/OポートやDMA経由でホストから設定ファイルやカーネルデータを読み取るプロトコル。

    • ACPIテーブル・リンカ/ローダ:ホストが生成したACPI(電源・ハードウェア構成表)を読み込み、テーブル間のポインタを動的に書き換えて配置する処理。

    • ホスト作成AML(ACPI Machine Language)の受け渡し:ホスト側で書かれたバイトコード構造をゲストカーネルへ渡す経路。

    • SMBIOS(System Management BIOS)構造体の解析:仮想マシンのハードウェア識別情報のパース。

    • 仮想NVRAMフラッシュ(UEFI変数ストア):永続化変数の読み書きとフォーマット解析。

    • Intel TDXにおけるTD HOB(Hand-Off Block)解析:TDX起動時にホスト(VMM)から渡される初期設定リストのパース。

    • virtioブロック・ネットワークドライバ:ブートディスクやPXEネットワークからイメージを読むための複雑なドライバ群。

    • PCIバス走査とOption ROM実行:接続された仮想PCIデバイスの探索と拡張ROMコードの読み込み。

    これら8系統はすべて、「起動する瞬間まで、どんな仮想ハードウェア構成でどんなOSを起動するかわからない」 という汎用性を実現するために存在していました。しかし、その結果として8系統すべてが非信頼ホストからの攻撃面になっていたのです。

    2.2 コペルニクス的転回:IGVMとビルド時イメージコンパイラ「cvmc」

    Slide 05
    Slide 05

    Tinfoilのエンジニアたちは、自社の機密クラウドの前提条件をゼロから見つめ直しました。

    「私たちが動かすのは、QEMUの q35 マシンタイプ という完全に統一された仮想ハードウェア構成であり、起動するLinuxカーネルも初期RAMディスク(initrd)もカーネルコマンドラインも、イメージをビルドする時点で100%決まっている。ならば、起動時にホストとやり取りしてハードウェアを探す必要など一切ないはずだ」

    そこで彼らが採用したのが、Microsoftなどが策定しQEMUにも実装された IGVM(Independent Guest Virtual Machine) ファイル形式と、Tinfoil独自のビルド時イメージコンパイラ cvmc です。

    図解1:従来のOVMFランタイム解析とTinfoil IGVM直接起動の構造比較
    図解1:従来のOVMFランタイム解析とTinfoil IGVM直接起動の構造比較

    cvmc コンパイラは、仮想マシンを起動する前(ビルド時)に、以下のすべてのメモリ構造を1バイト単位で計算し、1つのIGVMファイルの中に静的に配置します。

    • Linuxカーネル本体 (vmlinux / bzImage)
      ・役割とビルド時確定の内容:fw_cfg やディスクから実行時に読み込むのではなく、ビルド時にIGVMの確定したゲスト物理アドレスへ直接配置し、起動時の暗号測定(ハッシュ計算)の対象に含めます。

    • 初期RAMディスク (initrd) および起動引数 (cmdline)
      ・役割とビルド時確定の内容:ルートファイルシステムとカーネルコマンドライン引数もすべてビルド時にメモリ番地を固定し、ハイパーバイザーによる起動引数の差し替えを防止します。

    • ACPIテーブル群 (RSDP, XSDT, FADT, MADT, MCFG)
      ・役割とビルド時確定の内容:ホスト(QEMU)から受け取ってリンクするのではなく、QEMU q35 マシンタイプ用の最小ACPIテーブルを cvmc コンパイラがビルド時に自ら生成してメモリへ静的に配置します。これにより、複雑なACPIリンカやホスト提供のAMLバイトコード解析が不要になります。

    • Linux boot_params(Zero Page / 4 KiB)と初期ページテーブル
      ・役割とビルド時確定の内容:Linuxカーネル公式仕様(arch/x86/zero-page.html および arch/x86/boot.html)が定める4 KiBの設定構造体(Zero Page)と、64ビット・ロングモード用の初期ページテーブル(PML4等)をビルド時に事前構築して配置します。

    • CPU初期状態(VMSA)と Reset Shim(4 KiB)
      ・役割とビルド時確定の内容:ゲスト物理アドレス 0xFFFFF000 のたった1ページ(4 KiB)に、外部ライブラリ依存ゼロの約300行のx86アセンブリ(Reset Shim)を配置します。

    これらすべてがIGVMファイルとして出力され、仮想マシンの起動時にCPUのセキュアプロセッサによって 暗号学的ハッシュ値(AMD SEV-SNPではLaunch Digest、Intel TDXではMRTD) が測定されます。もし悪意あるハイパーバイザーがカーネルやACPIテーブルや boot_params を1ビットでも書き換えれば、起動時のハッシュ値が変わるため、リモート検証(Attestation)で即座に検知・拒絶されます。

    2.3 ランタイムに残された「300行のアセンブリ」と2つの境界検査

    ビルド時にすべての配置が終わっているため、実際に仮想マシンが起動した瞬間(ランタイム)に 0xFFFFF000 のリセット・シム(約300行の依存ゼロx86アセンブリ)が行う仕事は、極限まで単純化されました。

    • 16ビットから64ビットへの即時移行:リセットベクタ(0xFFFFFFF0)からスタートし、ビルド時に事前計算されたページテーブルを読み込んで、16ビット・リアルモードから64ビット・ロングモードへ直線的に移行します。

    • ホスト入力チェック①:CPUコア数(1..=255)の境界検査:
      ハイパーバイザーから通知される起動CPU数(APIC ID)が 1個以上255個以下 の範囲にあるかだけを検査し、事前生成されたACPI MADT テーブル内の該当CPUエントリの有効ビット(1バイト)を 0 から 1 に立てます。複雑な構造体パースは一切行いません。

    • ホスト入力チェック②:メモリ配置形状(qemu_shapes、最大2,046 GiB)の照合:
      Tinfoilはあらかじめ、QEMU q35 が生成し得る有効なメモリマップ形状(最大 2,046 GiB、最大4つのメモリ領域まで)を定数テーブル qemu_shapes としてアセンブリ内に焼き込んでいます。実行時には、ホストが提示したメモリサイズが事前登録パターンと一致するかだけを照合し、Linuxの boot_params 内の E820 メモリマップへ書き込みます。

    • 遅延メモリ承認(Lazy Memory Acceptance)による高速起動:
      機密VMでは、ゲストがメモリページを使用する前にCPU命令(TDXの TDG.MEM.PAGE.ACCEPT やSEV-SNPの PSC / PVALIDATE)でメモリを「承認」する必要があります。数百GBのメモリを起動時にすべて承認すると数分の待ち時間が発生するため、この300行のアセンブリは ブートに必要な最初の低位メモリ(256 MB〜2 GB程度)だけをその場で承認 し、残りの大容量メモリはLinux標準の未承認メモリテーブル(LINUX_EFI_UNACCEPTED_MEM_TABLE_GUID)へ記録して、そのまま64ビットLinuxカーネルのエントリポイントへ直接ジャンプします。

    これにより、セキュリティ上もっとも重要な TCB(Trusted Computing Base:信頼計算基盤) が以下の2つに明確に分離されました。

    • ランタイムTCB(firmware/):非信頼ホストからの入力に直接晒される実行時コード。約100万行のC言語から、外部依存ゼロの約300行(4 KiB)のx86アセンブリへと99.97%削減 されました。

    • ビルド時TCB(compiler/ / cvmc):IGVMイメージを生成するコンパイラ。こちらは Nixによる再現可能ビルド(Reproducible Builds) によって管理されており、誰でも公開ソースコードから1ビットの狂いもなく同じIGVMハッシュ値を手元で再現・検証できます。


    第3章:海外ポッドキャスト肉声とProject Oak比較──汎用互換性と単一用途ミニマリズムの境界線

    Slide 06
    Slide 06

    ここで重要なのは、「ならばOVMFを監査したAI研究機関や、既存のファームウェア開発者は無駄なことをしていたのか?」という誤解を完全に解くことです。一次音声メディアの肉声と先行プロジェクトを比較すると、それぞれの取り組みが全く異なる制約条件と使命のもとで合理的だったことがわかります。

    3.1 OpenSSFポッドキャスト第5回における当事者の肉声

    Linux Foundation傘下のオープンソース・セキュリティ財団(OpenSSF)が配信する公式ポッドキャスト "What's in the SOSS?" Podcast 第5回 では、ゼネラルマネージャーの Omkhar Arasaratnam 氏がホストを務め、フロンティアAI研究機関でセキュリティ責任者(Head of Security)を務める Matt Knight 氏が出演し、AIとオープンソースセキュリティの交差点について語っています。

    番組の 06:45 付近で、「なぜセキュリティ分野にAIを適用するのか」という問いに対し、Matt Knight氏は世界中の防御側チームが直面している構造的な制約を次のように語っています。

    原文趣旨(06:45付近):
    「どのセキュリティチームも、突き詰めれば3つの要素によって制約されています。それは 『能力(Capabilities)』、『速度(Speed)』、そして『規模(Scale)』 です。私たちが守らなければならないソフトウェア群はあまりに巨大で複雑であり、人間の専門家だけでそのすべてを追いかけ続けることはできません。だからこそ、防御側の能力・速度・規模を拡張するためにAIの力を借りる必要があるのです」

    さらに番組の 13:00 付近では、オープンソースの重要ソフトウェアをC言語からメモリ安全な言語へ移行させる支援や、AIモデルの重みと推論データをハードウェアレベルで保護する 「GPU機密コンピューティング(GPU Confidential Computing)」 への深い投資について語られています。

    この肉声から浮かび上がるのは、極めて誠実なエコシステム全体の視点です。世界中のクラウド事業者やエンタープライズ企業が今この瞬間も動かしている何百万台もの仮想マシンは、多様なOSやハードウェア構成との互換性を保つために標準のOVMFを使っています。その「今動いている世界の共通土台」を守るためには、たとえ4,000億トークンを投じてでもOVMFの深層バグを掘り起こし、上流のオープンソースコミュニティへ修正パッチを還元する作業がどうしても不可欠だったのです。

    3.2 Google Project Oak「Stage0」との設計比較

    また、OVMFの肥大化という課題にいち早く取り組んだ先駆的プロジェクトとして、Googleがオープンソースで開発している機密コンピューティング基盤 Project Oak の最小BIOS 「Stage0」(github.com/project-oak/oak/tree/main/stage0)があります。

    図解2:機密VMファームウェア3方式の位置づけとトレードオフ比較
    図解2:機密VMファームウェア3方式の位置づけとトレードオフ比較

    Tinfoilのチームも論文の中で、最初にProject OakのStage0を検討し、その設計から多くの着想を得たことを明記しています。Stage0はC言語ではなくメモリ安全な Rust言語 で書かれており、OVMFの100万行に比べて数千行規模へと大幅にスリム化されています。

    それでもなお、TinfoilがStage0を採用せず「300行のアセンブリ+IGVM」を自作した理由は、Stage0の欠点ではなく 「どこまでを実行時(ランタイム)の柔軟性として残すか」 という用途の違いにありました。

    • 1. TianoCore OVMF (EDK II)
      ・実装言語と規模:約100万行(C言語)。約3,000ページのUEFI仕様を実装しています。
      ・カーネルと設定の取得方法:起動時に fw_cfg・virtioブロック・PXEネットワーク等から動的に取得・解析します。
      ・ACPI・PCIの処理:起動時にホスト提供テーブルを動的にリンクし、AML解析・PCIバス走査・Option ROM実行を行います。
      ・最適な適用領域:あらゆるゲストOS(Windows / Linux等)・動的デバイス構成・ベアメタルや汎用クラウド環境。

    • 2. Google Project Oak (Stage0)
      ・実装言語と規模:数千行規模(メモリ安全なRust言語)。
      ・カーネルと設定の取得方法:起動時に fw_cfg 経由でホストからカーネルや初期RAMディスクを読み込みます。
      ・ACPI・PCIの処理:起動時にRustコードでACPIテーブル構築やPCIバス走査を実施します。
      ・最適な適用領域:ランタイムでのカーネル差し替えや動的構成の柔軟性を保ちたい機密VM・エンクレーブ環境。

    • 3. Tinfoil IGVM + Reset Shim
      ・実装言語と規模:約300行 / 4 KiB(外部依存ゼロのx86アセンブリ)。
      ・カーネルと設定の取得方法:ビルド時に cvmc コンパイラでIGVMファイルへ全固定します(実行時の fw_cfg 通信はゼロ)。
      ・ACPI・PCIの処理:ビルド時にQEMU q35 用のACPIを生成済み。実行時はCPUコア数(1..=255)とメモリ形状(qemu_shapes、最大2,046 GiB)の2項目の境界検査のみを行います。
      ・最適な適用領域:単一構成(QEMU q35)に完全統一された高機密AI推論・学習基盤。

    このように、3つの方式は「優劣」ではなく「汎用性と最小TCBのスペクトラム(連続体)」の上に位置しています。汎用クラウドにはOVMFが必要であり、柔軟なRust製エンクレーブにはStage0が適しており、ハードウェア構成をQEMU q35 に完全統一できるTinfoilのような特化型機密クラウドでは「300行のアセンブリ」という究極の還元主義が成立するのです。


    第4章:【私なりの解釈】AI時代のシステム設計を救う「3つの構造的原則」と自宅ミニPCでの苦い失敗談

    Slide 07
    Slide 07

    ここからは、一次資料の事実を踏まえた 【私なりの解釈】 として、数十億円のトークン予算を持たない私たち一般の開発組織やインフラ現場が、今回の事例から引き出すべき3つの構造的原則を整理します。

    原則1:AIでバグを探す前に「そもそも動かなくていいコードパス」を消す

    AIによるコード生成や脆弱性監査が身近になると、私たちは無意識のうちに「多少システムが肥大化しても、AIに監視・テストさせれば大丈夫だろう」と考えがちです。しかし、100万行のコードをAIで守るには4,000億トークン(最大2,000万ドル相当)のコストがかかり、それでも完全な安全性は買えません。

    一方で、そもそも本番の業務に不要な機能モジュール(OVMFにおけるPXEブートやスプラッシュ画面に相当するもの)をビルド対象から外し、実行コードを300行に絞れば、人間もAIも数時間で全行の安全性を検証できます。「最強のセキュリティパッチとは、条件分岐を1行足すことではなく、不要なコードごと削除することである」 という原則を徹底する必要があります。

    原則2:攻撃者が触れられる「ランタイムTCB」から、検証可能な「ビルド時TCB」へ複雑性を逃がす

    Tinfoilの設計が優れている最大の理由は、「アセンブリ言語を使ったこと」以上に、「起動時に毎回行っていた8つの複雑な解析処理を、ビルド時のコンパイラ(cvmc)と不変フォーマット(IGVM)へ前倒ししたこと」 にあります。

    この「ランタイムからビルド時への複雑性シフト」は、机上の特殊な話ではなく、一般的なWebアプリケーションやクラウドインフラにもそのまま適用できます。

    • 本番コンテナが起動するたびに、外部から設定ファイルをダウンロードしたり、テンプレートを動的コンパイルしたり、プラグインを走査したりしていないでしょうか?

    • それらの処理をCI/CDのビルド時(再現可能なビルドパイプライン)で確定させ、暗号ハッシュ(ダイジェスト)が固定された不変(イミュータブル)なイメージとして出荷し、本番環境では最小限の起動チェックだけで動かす。この構造転換だけで、ランタイムの攻撃面は劇的に縮小します。

    原則3:「いつか使うかも」の万能テンプレートを捨て、単一目的の最小構成にする(自宅ミニPCでの失敗談)

    ここで、会社の仕事ではなく、私自身が以前に自宅のプライベート環境で痛感した苦い失敗談をお話しします。

    数年前、私は自宅で個人の勉強用プログラムとメディア整理を動かすために小型のミニPCを購入し、自宅サーバーを構築しました。その際、「最初からいろいろな機能が入っている全部入りの汎用サーバーイメージを入れておけば、将来やりたいことが増えたときに便利だろう」と考え、ファイル共有、プリンタ共有、ネットワーク起動補助、遠隔管理ダッシュボードなど、数十種類のデーモン(常駐サービス)が初期状態で有効になっている構成をそのまま動かしていました。さらにその上に、覚えたての自動化スクリプトを次々と継ぎ足して満足していたのです。

    ところが、ある休日の朝、自宅のネットワークが急に重くなり、ミニPCに画面を繋いで見て凍りつきました。私が一度も使ったことすらなかった「ネットワーク機器自動探索用の古い補助デーモン」が、自宅内のスマート家電からのブロードキャスト通信に反応して無限ループを起こし、毎秒何千行ものエラーログを吐き出し続けて、ミニPCのSSD容量を100%埋め尽くしてシステム全体が完全にフリーズしていたのです。

    結局、私が本当に使っていた機能は全体の5%にも満たないのに、残りの「いつか使うかもしれないと思って放置していた95%の不要なサービス」のせいで、休日を丸一日潰してOSをゼロから入れ直す羽目になりました。再構築した際は、本当に必要な最小限のパッケージだけを導入した結果、メモリ使用量は10分の1になり、その後2年間、一度も障害は起きませんでした。

    Tinfoilの「100万行から300行へ」という論文を読んだとき、私はあの休日のミニPCの前での徒労感を鮮明に思い出しました。「標準で入っているから」「いつか使うかもしれないから」と不要な窓口を開けっ放しにすることは、AI時代には最大のリスクになります。過去の機能を築いてきた先人たちに敬意を払いつつも、今の自分たちの用途に不要なものは勇気を持って削ぎ落とすことが不可欠です。


    第5章:結論──誰も責めずに明日から現場で実践できる「ソフトウェア還元主義」3つの実務手順

    Slide 08
    Slide 08

    最後に、明日から開発・インフラ現場で誰も責めずに実践できる具体的な3つの実務ステップを着手条件・確認方法・適用限界とともにまとめます。

    ステップ1:本番ランタイムで動いている不要なパーサー・待機機能の棚卸しと無効化

    • 着手条件:自社で運用している本番VMイメージ、Dockerコンテナイメージ、またはサーバー構成定義(Dockerfile / Ansible / Terraform等)にアクセスできること。

    • 具体的な手順:
      ・本番環境で稼働中のプロセス一覧(ps / ss -tulnp)およびコンテナ内のパッケージ一覧を出力し、「標準テンプレートに入っていたが一度も業務通信が発生していないサービス、管理ポート、デバッグエンドポイント、古い通信プロトコル」を洗い出します。
      ・特に外部ネットワークや非信頼領域からデータを受け取るC/C++製パーサー、画像変換ライブラリ、ネットワーク補助デーモンについて、ビルド設定で無効化するか、ランタイムにシェルやパッケージマネージャを含まない最小ベースイメージ(Distroless等)へ切り替えます。

    • 確認方法:変更後のイメージサイズ、常駐プロセス数、および開放ポート数が削減され、脆弱性スキャナ(Trivy等)で検出される対象パッケージ母数が減少していることを確認します。

    • 失敗時の対応と適用しない条件:レガシーシステムの保守でどの機能がどこから呼ばれているか不明な場合は、いきなりパッケージを削除せず、まずファイアウォールやシステムコール制限(seccomp / AppArmor)で通信経路を遮断して1〜2週間エラーログを観察します。

    ステップ2:「起動時の動的解釈」から「再現可能なビルド時確定(IGVM型設計)」への移行

    • 着手条件:CI/CDパイプライン(GitHub Actions / GitLab CI等)でアプリケーションやインフラのイメージをビルドしていること。

    • 具体的な手順:
      ・Tinfoilが8系統のホスト入力パーサーを廃止し、ビルド時コンパイラ(cvmc)+Nix再現ビルド+実行時2項目検査(CPU数1..=255・メモリ形状最大2,046 GiB)へ集約したように、本番環境の「起動スクリプト(entrypoint.shやcloud-init等)」で行っている動的処理(外部からの設定取得、パッケージの追加インストール、設定テンプレートの動的生成)を洗い出します。
      ・それらの処理をCI/CDのビルド段階へ前倒しし、設定とバイナリが完全に確定した不変(イミュータブル)なイメージを生成してSHA-256ダイジェストを記録します。
      ・起動時には「環境変数やリソース量が事前定義された境界内にあるか」という最小限のバリデーションだけを行ってメインプロセスへ直行させます。

    • 確認方法:ネットワーク遮断環境(外部リポジトリへ通信できない状態)でも本番イメージが数秒以内に決定論的に起動完了すること、および同一ソースから同じハッシュ値のアーティファクトが再現されることを確認します。

    • 適用しない条件:マルチテナント環境で起動後にテナントごとの動的プラグインを読み込む必要があるシステムでは、プラグイン読み込み機構自体を廃止するのではなく、署名検証済みのバンドルのみを許可する境界チェックを適用します。

    ステップ3:「反トークンマキシング(Anti-tokenmaxxing)」の評価文化をつくる

    • 具体的な手順:
      ・Amazonの社内通達が示したように、開発チームや委託先の評価において「AIを使って何億トークンを消費し、何万行のコードを生成したか」という物量指標(トークンマキシング)を使うのをやめます。
      ・コードレビューや設計レビューの評価軸に「この機能を実現するために、どれだけ少ないコード行数と少ない外部依存に抑えられたか」「不要になった古いコードパスや設定分岐をどれだけ安全に削除できたか」を組み込みます。

    • 確認方法:プルリクエスト(PR)の差分集計において、追加行数(+)だけでなく削除行数(-)と依存ライブラリ数の純減をチームの健全性指標として可視化します。


    第6章:よくある疑問と誤解(FAQ)

    • 疑問1:「OVMFから20件以上のゼロデイ脆弱性が見つかったということは、OVMFやEDK IIの設計がずさんだったということですか?」
      ・回答:いいえ、決してそうではありません。UEFI(EDK II / OVMF)は約3,000ページの仕様書に基づき、過去20年間にわたる多様なハードウェアやOSとの後方互換性を一手に引き受けてきたからこそ、現代のクラウドやデータセンターが成り立っています。問題は開発者の能力ではなく、「従来は100%信頼できていたハイパーバイザーが、機密VM(Intel TDX / AMD SEV-SNP)では『信頼できない攻撃面』に変わった」という脅威モデルの構造的な前提変化にあります。

    • 疑問2:「すべてのクラウドVMを今すぐOVMFから300行のアセンブリ(Tinfoil cvmimage)へ置き換えるべきですか?」
      ・回答:いいえ、用途によって明確に分かれます。Tinfoilの方式は「仮想ハードウェア構成をQEMU q35 に完全固定し、起動するLinuxカーネルや initrd もビルド時に確定している単一目的の機密VM」に特化しています。Windowsゲストを動かしたい場合や、起動時にディスクやネットワークから動的にOSを選択したい汎用クラウド環境では、引き続きパッチが適用された最新のOVMFや、Rust製のProject Oak「Stage0」が適しています。

    • 疑問3:「なぜTinfoilはRust(Stage0)ではなく、あえてx86アセンブリ言語でReset Shimを書いたのですか?」
      ・回答:ビルド時コンパイラ(cvmc)でACPIテーブルやページテーブル、Zero Page(boot_params)をすべて事前構築してしまえば、起動時(ランタイム)に残る処理は「16ビットから64ビットへのモード移行」「CPUコア数(1..=255)の1バイト有効化」「メモリ形状(最大2,046 GiB)の照合」「最初の低位メモリの承認とLinuxカーネルへのジャンプ」だけに絞られるからです。この規模であれば、高級言語のランタイムや外部クレート依存すら持たない約300行(1ページ=4 KiB)のアセンブリとして書く方が、コンパイラ最適化による意図しないコード生成を防ぎ、全命令を人間と形式検証ツールで1行残らず監査できるためです。


    第7章:関連する深掘り記事のご案内

    今回の「AIによる脆弱性探索とシステムの最小化・境界防御」に関連して、当noteで公開している以下の深掘り記事もあわせてご覧いただくと、AI時代のインフラ設計とセキュリティ統制の全体像がより立体的に繋がります。


    第8章:参照した一次資料・公式ドキュメント一覧(全12件)


    書き手の自己紹介とチャンネルのご案内

    普段は企業の経営企画や技術戦略の現場で、海外の一次資料や規制文書、技術仕様書を読み解きながら、現場の意思決定へ落とし込む仕事をしています。YouTubeチャンネル「コンサルオジ」とこのnoteでは、表面的なニュース見出しだけでは見えてこない「一次資料の裏側にある構造」を1テーマずつ深掘りしています。

    なぜこの発信を続けているのか、どのような基準で一次資料を検証しているのかについては、こちらの固定自己紹介記事にまとめていますので、よろしければあわせてご覧ください。

    https://note.com/consuloji_ch/n/n1975ecc3cf48


    #AI #サイバーセキュリティ #クラウド #Linux #オープンソース #システム設計 #エンジニアリング


     
     
    海外のAI・半導体・サイバーセキュリティの一次資料(論文・SEC決算・CISA勧告)を精読し、事実と解釈を分けて実務の判断材料へ整理します。動画番組「コンサルオジ」の長文記事版も公開中。まずは固定の自己紹介記事と3つのテーマ別無料マガジンをご覧ください。

    あなたへのおすすめ