aki_iic’s blog

己の欲せざる処人に施す事無かれ、狂人の真似するは即ち狂人なり

How to Stop Bad Actors Reverse Engineering Your ASICs/SoCs and FPGAs

 EEJournalの記事より。

 古くて新しいハードエア系のリバースエンジニアリング対策について。

www.eejournal.com

悪意ある無名の人々の最大の目的は、設計を構成するネットリストを入手することです。このネットリストを汗水たらして手に入れれば、彼らはそれを解析し、設計の機能とその魔法の働きを解明することができます。そこで、私たちには2つの課題があります。1つ目は、彼らがネットリストにアクセスできないようにすること。2つ目は、たとえアクセスできたとしても、そこから有用な情報を引き出すことを可能な限り困難にすることです。

まず、ネットリストへのアクセス手順から見ていきましょう。さらに、より単純で、したがってクラックしやすいと考えられるFPGAから始めましょう。最新のFPGAのほとんどはSRAMベースであるため、電源を切ると設定が失われます。そのため、ビットストリームは外部、通常は別のフラッシュメモリバイスに保存する必要があります。残念ながら、これは、攻撃意欲、機会、そしてそれなりのツールセットを持つ悪意のある者にとって、格好の攻撃ベクトルとなります。

FPGA ビットストリーム形式は独自のものですが、コミュニティ主導のビットストリーム データベースがいくつか存在し ( Project X-RayProject Icestormなど)、ビットストリームからネットリストへの変換が可能です。

ここでの最善の防御策は、FPGA ベンダーのビットストリーム暗号化ツールを常に使用することです。このツールは、ビットストリームを外部フラッシュに保存する前に暗号化し、デバイスにロードされたときに FPGA でオンザフライで復号化します。

FPGA関連のもう一つの興味深い技術、「LifeLine CrossTalk Obfuscation」は配線レベルで実装されています。これは、長い相互接続配線の隣接性(明示的なネットリスト接続がない)を利用して、クロストークに基づく隠れたチャネルを作成するという考え方です。こうすることで、たとえハッカーがネットリストにアクセスできたとしても、これらの隠れた接続を見ることはできません。考えてみると、この技術はASIC/SoCにも応用できるかもしれません。

ASIC/SoCについて言えば、デバイスのネットリストを抽出するために、攻撃者はまず
カプセル化解除を行い、続いてデレイヤーリング(層分離)を行います。これは、チップを層ごとに分解する作業で、メタライゼーション層やビアから始まり、トランジスタなどのコンポーネントが実装されているポリシリコン層まで続きます。各層を画像化し、高度な画像処理を用いてそれらをつなぎ合わせて3Dモデルを作成し、そこからネットリストを抽出します。

もちろん、これは非常に時間と費用がかかりますが、中国、北朝鮮、ロシアのような国家が悪意を持って行う場合や、フランス、ドイツ、イスラエルアメリカ合衆国のような真実と正義のために行う場合であれば、十分に実行可能です。例えば、アメリカ合衆国の法医学研究所は、サプライチェーンの保証、トロイの木馬の検出、拡散防止を目的として、外国のチップのリバースエンジニアリングを日常的に行っています。

では、ネットリストを入手したら、どうすればいいのでしょうか?そのためには、HALのようなツールが役立ちます。HALは「ハードウェアアナライザー」の略称ですが、実際には映画『2001年宇宙の旅』に登場するコンピューターにちなんで名付けられています 

 

 

HALは、ネットリストのリバースエンジニアリングを行うためのフレームワークです。アナリストはHALにネットリストを読み込み、視覚的にもプラグインを使っても探索することができます。最初のステップは、現代のデバイスが持つ膨大なゲート(数千から数億に及ぶ)を管理することです。

次のステップは、高レベルレジスタ、加算器、
乗算器、その他の類似コンポーネントなどの基本ブロックを復元することです。これにより、ネットリストに初期構造を導入するのに役立ちます。これらの中間構成要素が完成したら、より高度なプラグインを使用(または開発)して、「この構成要素の集合は暗号化エンジンのように見え、このレジスタはおそらく鍵の保存に使用されている」といった高レベルの機能を認識・抽象化できるようになります。

この知識を武器に、チップの別のコピー(最初のチップはもう存在しないため)を入手し、カプセルを開封して最上層のメタライゼーション層を露出させ、レーザーでプローブしながらデバイスを動作させることができます。これらのレーザーを使って、チップの動作中に既存の0と1を検出したり、独自の0と1を挿入してエラーを誘発し、セキュリティ上の脆弱性を発見したりすることができます。

では、HWREの悪党どもを困らせるにはどうすればいいのでしょうか? いい質問ですね。一つの方法は、論理合成によってネットリストが生成された後に、ゲートレベルで有限ステートマシン(FSM)を難読化することです。ダミーステートを挿入してステート空間を「膨らませる」、ステートを予測不可能に再エンコードする、到達不可能な、あるいは誤解を招くような遷移を追加する、ステートストレージを設計全体に分散させるといったことが可能です。チップの制御方法を理解すると多くの情報が明らかになるため、FSMを難読化することは良いアイデアです。実際、この方法は非常に有効で、Nils、Christof、そして彼らの同僚たちはFSMベースのハードウェア難読化に関する論文を執筆しています。

もう1つの手法は、HALのようなリバースエンジニアリングツールが構造に大きく依存しているという事実を活用します。レジスタは、暗号、状態変数、制御パス、データフロー境界で使用される重要なレジスタを明らかにするため、最初に再構築されることがよくあります。つまり、リバースエンジニアがどのフリップフロップが一緒になって高レベルレジスタを形成しているかを特定できないようにする必要があります。難読化手法には、隣接するフリップフロップが同じレジスタに属しているように「見えないように」構造を変更することが含まれます。これは、異なる種類のレジスタ要素の使用、典型的なパターンの破壊、ビットの順序変更、コンポーネントの分散、ダミーフロップの挿入などによって実現できます。

そして、本当に保護したいチップについては、「ゲートカモフラージュ」(トランジスタレベルの難読化を含む)まで踏み込むことができます。ここでの基本的な手法は、物理的レイアウトは同じだが内部接続が異なるスタンダードセルを使用することです。この場合、セルは上から見たときにNAND、XOR、またはANDのように見えるかもしれませんが、下層に隠された接続を知らなければ、どれなのかを見分けることはできません(実際には、ゲートをカモフラージュしたスタンダードセルライブラリを購入できます)。

より最近の(そしてより高度な)手法の代表例は、フロリダ大学のCovert Gatesです。研究者たちはダミー入力を持つゲートを設計しました。つまり、一見すると追加の接続があるように見えるセルですが、実際には接続はありません。この手法が特に興味深いのは、改変されたゲートはドーパントレベルでは走査型電子顕微鏡を用いても区別がつかず、検出が極めて困難になる点です。

引用おわり(機械翻訳)。

 リバースエンジニアリングは違法でない(違法であってもやる人はやる)ので上記の如き国家レベルで解析すれば理論上は可能だろうし、現実その事例に相当する(してると想定される)チップは、

 FTDIモドキとかSTM32モドキ(ああ、例えばの話ですよ、たとえばの:)等、

 権威主義体制(著作権法の上位法である憲法権威主義体制の下にあるので、実際ソ連ではソ連の法律では「合法」な8008等が製造されていたそうなので)では何ら躊躇無く、というか国家に貢献する事業としてのリバースエンジニアリングとコピーが公然と行われている(という話もあったりなかったりするかもしれません:)実情(それが現実)。

 無論、当業者の方はご承知の事柄かもしれませんが、BitStreamのAESでの暗号化程度しか知らない当方にとってはダミーゲートだのは興味深いし、FSMで難読化は応用しやすい気がしないでもない(自動生成してくれると有難いですな)。

 もっともウクライナ戦争で西側(日本含む)電子部品がロシアのUCAVに大量に使用されている状況から、一部の陰謀論者さんがお好きな?キルスイッチ的な物も状況によっては必要となってくるのかもしれません(まあ、デバイスアクセスに語長の長いキーを使う(これは常識かと思われますが)等、最低限の自衛は必要なのでしょうね。