ファームウェアセキュリティに適したメモリアーキテクチャの選択
接続されたIoTデバイスに関するサイバー事件が増加しているにもかかわらず、ファームウェアのセキュリティは常に後回しにされてきました。攻撃者がシステムスタックを通して侵入し、ブートプロセスや低レベルのハードウェア設定を標的とする中、メモリアーキテクチャの選択は、検証可能な信頼の連鎖を確立する上で重要な決定事項となっています。
したがって、ファームウェアの安全性を確保するためには、実行前に各コンポーネントを暗号的に検証する必要があります。その道筋は、メインファームウェアをロードし検証する不変のブートローダから始まります。しかし、各ステップで使用されるメモリ技術は、不正な改変に対するファームウェアの脆弱性を決定します。
内部フラッシュと外部フラッシュ
ファームウェアを保存するために使用される不揮発性メモリの物理的な位置は、デバイスの脅威モデルにおいて、最も重要な要素の1つです。ファームウェアエンジニアは、オンチップ組み込みフラッシュ(eFlash)か、SPIやQSPIなどのシリアルインターフェースを介して接続される外部フラッシュモジュールかを選択する必要があります。
組み込みフラッシュは通常、マイクロコントローラまたはSoCのダイに直接統合されます。このアーキテクチャは、攻撃者が操作できる外部バスが存在しないため、最高レベルの物理的セキュリティを提供します。内部フラッシュへのアクセスも、専用レジスタとロックビットによって制御されます。
さらに、eFlashは永久読み出し保護機能をサポートしています。専用のセキュリティヒューズを短絡させることで、開発者はJTAGまたはSWDデバッグインターフェースを無効にすることができ、ハッカーによるファームウェアイメージの改変を防ぐことができます。しかし、SoCがより小さなノードに移行するにつれて、この技術は重要な拡張性の課題に直面しています。
対照的に、外部フラッシュはホストプロセッサの外部に配置され、高速シリアルインターフェースを通じて通信します。このアーキテクチャの選択は、ストレージ容量の拡張を容易にしますが、システムの攻撃対象領域を拡大することにもなります。プロセッサと外部フラッシュ間を移動するデータは、本質的にスヌーピング、中間者攻撃、物理的改ざんに対して脆弱です。
これらのリスクに対処するために、ファームウェアエンジニアは、強固なハードウェアとソフトウェアの保護を実装しなければなりません。多くの外部NORフラッシュデバイスには、物理的な書き込み禁止ピンが付いています。このピンが特定の電圧に保持されると、チップの内部ロジックにより、消去コマンドや書き込みコマンドが実行されなくなります。
図1:通信チャンネルを高度に暗号化したWinbond Electronics W77Q32JWSSIR TRセキュアシリアルNORフラッシュメモリ。(画像提供:Winbond Electronics)
しかし、データを読み取ることができれば、単にフラッシュをロックするだけでは不十分です。攻撃者は実行中もアドレスバスやデータバスにアクセスできます。この脆弱性により、ハードウェアベースの信頼の基点(Root-of-Trust)メカニズム、暗号化された通信チャンネル、ロールバック攻撃を防ぐための単調カウンタを含む、特殊で安全なフラッシュデバイスが開発されるようになりました。
しかしながら、間違ったメモリアーキテクチャを選択した場合、ソフトウェアパッチでは完全には修正できない根本的な弱点をデバイスに残す可能性があります。たとえば、ファームウェアを外部EEPROMに保存し、暗号化も認証も行わない設計は、常にハードウェア攻撃者に対して脆弱です。逆に、あまりに制限の多いメモリを選ぶと、機能性が損なわれる可能性があります。
したがって、エンジニアは、メモリアーキテクチャを通じてファームウェアのセキュリティを最大化するためのベストプラクティスと設計上のヒントを理解することが不可欠です。
安全なファームウェアストレージ設計のベストプラクティス
ファームウェアエンジニアは、電源オンからランタイムまでのセキュアなファームウェアストレージパスを設計する際に、下記の原則に従わなければなりません。
1. ハードウェアベースの信頼の基点
実行は常に不変のメモリ領域から始めなければなりません。たとえば、ブートROMや恒久的にセキュアなフラッシュセクタは、他のすべてのファームウェアを検証するコードを含む必要があります。これにより、攻撃者が初期コードを改ざんして検証を回避することはできなくなります。
2. 暗号署名を使用する
信頼できる秘密鍵で署名されたファームウェアイメージのみを実行するセキュアブートローダを実装します。これにより、攻撃者がメモリにアクセスしてビットを改変できた場合でも、不正なコードから防御できます。機密性が懸念される場合は、ストレージ内のファームウェアを暗号化します。
3. ハードウェアのセキュリティ機能を活用する
システムアーキテクチャが外部メモリを使用する場合、エンジニアは内蔵パスワード保護や単純な暗号化など、ハードウェアセキュリティをサポートするデバイスを選択する必要があります。これらは完全なセキュアエレメントほど強力ではないかもしれませんが、もう1つの保護層を追加するものです。
図2:シリアルペリフェラルインターフェースをサポートするMacronix MX25L3233FM2I-08Q 32MbシリアルNORフラッシュメモリ。(画像提供:Macronix)
4. ファームウェアとデータを分離する
最も機密性の高いコードが分離されるように、メモリ領域を整理します。MCUでは、重要なルーチン命令をセキュアメモリセクションに置きます。ファームウェアでも、ハードウェアがサポートしていれば、特定のフラッシュメモリバンクを実行専用または読み取り専用としてマークします。
5. セキュリティファームウェア更新を計画する
更新プロセス自体が認証されていることを確認します(たとえば、署名された更新パッケージを要求します)。設計で更新のステージングに外部メモリを使用する場合、プライマリファームウェアストレージと同じセキュリティで扱います。
まとめ
ファームウェアに適切なメモリを選択することは、組み込みIoTデバイスのセキュリティを決定づける要素となります。保護機能のない外部ストレージのような安全でないメモリの選択は、攻撃者に門戸を開くことになります。対照的に、オンチップメモリとセキュアな外部ストレージおよび暗号制御を組み合わせたアーキテクチャをうまく選択することで、高度な攻撃に対する防御のための強力な基盤が得られます。
ファームウェアエンジニアにとって重要なポイントは、信頼の基点を改ざん防止メモリに維持すること、オフチップメモリを信頼できないものとして扱いそれに応じて対策を講じること、そして、最新のメモリ技術が提供するハードウェアセキュリティ機能を最大限活用することです。メモリ技術をデバイスのセキュリティ要件に合わせることで、最小規模のIoTセンサであってもファームウェアレベルの攻撃から保護することが可能となります。
Have questions or comments? Continue the conversation on TechForum, Digi-Key's online community and technical resource.
Visit TechForum