Andrew "bunnie" Huang氏は先頃の第36回Chaos Communication Congress(36C3)で、ブログ記事"Can We Build Trustable Hardware?"の内容をテーマに、"ハードウェアの信頼性問題はオープンソースでは解決できない(Open Source is Insufficient to Solve Trust Problems in Hardware)"と題した講演を行った。講演の中心は、ハードウェアとソフトウェアではTOCTOU(Time-of-Check to Time-of-Use)の意味が大きく違っているため、脅威モデルにおける数々の潜在的攻撃の緩和にはさほど有用ではない、という主張だ。講演の最後に氏は、自身が現在手掛けている、プライベートなキーストレージを提供するセキュアなハードウェアプラットフォームのBetrustedを紹介し、その設計で使用されているユーザ認証メカニズムについて検証した。
Huang氏はまず、ソフトウェアの信頼性を高める方法について説明した。それによれば、ユーザが自身のマシン上で動作させようとするソフトウェアのハッシュを生成することで、それが期待するソフトウェアリリースのものであることを検証することが可能になる。すなわち、ソフトウェアのTOCTOUは極めて短いのだ。加えてオープンソースソフトウェア(OSS)には、ユーザが実行するソフトウェアをソースコード管理システム(gitなど)内のコードにまで遡ってトレースすることが可能である、というメリットもある。その上で氏は、次のように言う。
結論を言えば、オープンなハードウェアであっても、クローズドなハードウェアと信頼性はまったく同じである、ということになります。つまり、どちらも信頼するに値しない、ということなのです。オープンなハードウェアはクローズドなハードウェアに比べれば、より正確で透過的な設計意図を具現化して革新する余地がある、ということは言えると思います。ですが、ある程度の複雑性を持ったハードウェアであれば、オープンであってもクローズドであっても、現実問題として検証は難しいのです。
さらにHuang氏は、ハードウェアサプライチェーンや、それに伴って発生し得る無数の攻撃について話を進める。その中で氏は、ハードウェアにはハッシュのような簡便な手段が存在しないため、それが検証作業を極めて困難なものにしていることを示しながら、攻撃を検出することの難しさを検証している。ここから氏は、"信頼性の高いハードウェア構築のための3原則"を提唱する。
- 複雑性は検証の敵である
- コンポーネントだけではなく、システム全体を検証せよ
- エンドユーザによるハードウェアの検証と防御を可能にせよ
Betrustedプロジェクトは、3原則を行動に移すための指針を提供する。テキストやボイスチャット、2段階認証、ディジタル貨幣のストレージを対象とした、限定的な機能を提供するシンプルなもので、(制限されたハードウェア部分だけでなく)キーボードや画面を含むシステム全体が検証対象とすることができる。これによって、専門家の手を借りずとも、ユーザが自身でコンポーネントをチェックすることが可能になる。一方でBetrustedでは、現在使用可能なハードウェアに関して、いくつかの妥協が必要な制限のあることも認めている。中でもCPUは"最も問題のある部分"として認識されており、Xilinx Spartan-7 FPGAを使用することで、ハードウェア検証の相当部分をソフトウェアに移行可能にしている。Huang氏は、プロプライエタリなFPGAを使用することの問題点を認めた上で、いくつかの軽減策を示している。
このアプローチの問題点は、Spartan-7 FPGAがクローズドなソースを用いたシリコン部品であり、現時点ではプロプライエタリなコンパイラに依存していることです。ただし、シリコンやFPGAツールチェーンに悪意を持った部品や修正が行われる危険性を軽減する上で、実効性のある開発がいくつか行われています。具体的には、
Symbiflowプロジェクトでは、7シリーズのFPGA開発用のF/OSSツールチェーンを開発中です。これにより、対象デバイスのコードをコンパイルする上で、不透明なベンダ製ツールチェーンへの依存度を軽減することが可能になると期待されます。Prjxrayでは、7シリーズFPGAのビットストリームフォーマットを文書化しています。この進行中の作業が完了すれば、すべてのビットの意味を正確に理解することはできないとしても、少なくとも正しい機能がアクティベートされていることの検証は可能になります。これにより、従来非公開であったバックドアやFPGAの機能がアクティベートされたとしても、それに気付かないということはなくなるはずです。
ロジックをFPGAに置き換えることで、ソースコードに乱数シードを組み込んだランダム化が簡単にできるようになります。これによって、攻撃者がFPGA内の少数のロジックセルでバックドアを設置しても、事実上、無効にすることができます。それよりも広い効果を持ったシリコンレベルの攻撃がFPGAに行われれば、シリコンダイのサイズが大幅に変わるため、X-rayによって非破壊的に定量化することは簡単です。この軽減策の効果性はASLRに類似しています。防弾効果はありませんが、想定される攻撃を困難にするために、多額の費用を掛けて行う内容を、安価に実施することができるのです。
Huang氏はBetrustedの進展を楽観視しているようだが、最終的には信頼性の限界を見せることになるかも知れない。Oxideが提案しているようなサーバ用のオープンソースファームウェア(Rustなど安全性の高い言語で記述されている)が複雑さを軽減し、検証性に寄与することは間違いないが、それでもサーバの(PCやタブレットなども)複雑性そのものは、エンドユーザのハードウェアを検証能力や保護能力を大幅に越えているのだ。先日の"Fatal Fury"がESP32デバイスのeFuseに不正アクセスしたように、サプライチェーン攻撃のようなコストや複雑さを伴わないハードウェア侵害のケースもある。1984年にKen Thompson氏が発表した"Reflections on Trusting Trust"から長い月日が経ったが、複雑性の進行は、我々の検証や自己防衛の能力の向上速度を上回っているように思われる。