Arm

Armv8-Mで強化されたセキュリティ機能について:組み込みシステムの未来を読み解く

<span id="hs_cos_wrapper_name" class="hs_cos_wrapper hs_cos_wrapper_meta_field hs_cos_wrapper_type_text" style="" data-hs-cos-general-type="meta_field" data-hs-cos-type="text" >Armv8-Mで強化されたセキュリティ機能について:組み込みシステムの未来を読み解く</span>

組み込みシステムにおけるセキュリティの重要性が高まる中、Armv8-Mアーキテクチャが提供する新しいセキュリティ機能に注目が集まっています。本記事では、2024年12月に開催されたウェビナー「Armv8-Mで強化されたセキュリティ機能」の内容を基に、組み込みシステムのセキュリティ強化について解説します。 

組み込み業界のトレンドとセキュリティの進化 

2010年代には「機能安全」が組み込み業界の主要なトレンドでしたが、2020年代に入り「セキュリティ」が最重要課題となっています。IEC 62443などのセキュリティ規格の登場により、組み込みシステムにおいても、データの暗号化、CPUコアの保護、メモリのアクセス制限といった対策が必須となりました。 

特に、IoTデバイスのような自律的に動作し、屋外など多様な環境に設置される機器では、外部からの物理的・論理的攻撃に対する強固な防御が必要です。この防御の起点となるのが「ルートオブトラスト(RoT)」であり、セキュアブートやセキュアアップデートを実現するための基盤となります。 

Armv8-Mが提供する主要なセキュリティ機能 

Armv8-Mアーキテクチャは、RoTの実現を可能にするための画期的なセキュリティ機能を提供しています。 

  1. TrustZone(トラストゾーン)

TrustZoneは、デバイスを「セキュア状態」と「ノンセキュア状態」の2つの動作状態に分離する機能です。これにより、OSや重要なセキュリティ機能(暗号鍵など)をセキュア領域に配置し、アプリケーションをノンセキュア領域で動作させることで、セキュリティを高めます。 

  • セキュアとノンセキュアの分離: メモリ領域もセキュア、ノンセキュア、NSC(Non-secure callable)の3種類に設定し、ノンセキュアなプログラムからセキュアな領域へのアクセスを厳しく制限します。 
  • セキュアブートとセキュアアップデート: デバイス起動時にOSやアプリケーションの改ざんを検証したり、アップデートの正当性を確認したりすることで、システム全体の完全性を保証します。 
  • 状態遷移の仕組み: 
  • セキュアからノンセキュアへの移行: 起動時や処理の移行時にセキュア領域からノンセキュア領域へ状態を切り替えます。この際、CMSE_NS_CALLABLEなどのキーワードを使用することで、コンパイラがレジスタの自動クリアなど、安全な遷移をサポートします。 
  • ノンセキュアからセキュアな関数呼び出し: アプリケーションから暗号化などのセキュアな処理を依頼する際には、ノンセキュアからセキュアな関数を呼び出します。この際、NSC領域に配置されたSG(Secure Gateway)命令とB(Branch)命令が使われ、安全に状態を切り替えて処理を実行します。ここでも、コンパイラが適切なコードを自動生成するため、開発者の負担を軽減します。 
  • スタックの分離: セキュアとノンセキュアで独立したスタックを使用し、ノンセキュア側からのリターンアドレス改ざんを防ぐことで、強固なセキュリティを維持します。 
  1. PAC/AUTおよびBTI命令

これらの命令は、ROP(Return-Oriented Programming)やJOP(Jump-Oriented Programming)といった高度なセキュリティ攻撃に対応するために導入されました。 

  • PAC/AUTPointer Authentication Code/AUT henticate link register)命令: 関数の戻りアドレスを認証することで、スタック上の戻りアドレスが改ざんされていないかを検出します。これにより、攻撃者が不正なコードを実行することを防ぎます。 
  • BTI(Branch Target Identification)命令: ジャンプ命令の飛び先を制限することで、不正なジャンプを検出します。これにより、予期せぬ場所へのコード実行を防ぎ、システムの堅牢性を高めます。 

これらの命令はArmv8.1-Mで採用されており、専用のレジスタ設定で有効化することで利用可能です。 

  1. スタックリミットチェック

Armv8-Mでは、MSP_LIMIT(Main Stack Pointer Limit)とPSP_LIMIT(Process Stack Pointer Limit)レジスタが追加されました。これにより、スタックのオーバーフローをハードウェアレベルで検出することが可能になり、実行時のオーバーヘッドなしにセキュリティを強化できます。 

開発におけるコンパイラの活用 

これらの新しいセキュリティ機能を効果的に活用するためには、IAR Embedded Workbenchのような開発ツールの支援が不可欠です。手動でのコーディングでは、レジスタの初期化や安全な状態遷移の保証が難しく、セキュリティホールを生むリスクが高まります。コンパイラが提供するキーワードやオプションを利用することで、複雑な処理を自動化し、安全かつ効率的な開発が可能になります。 

まとめ 

Armv8-Mアーキテクチャは、TrustZoneによるセキュア/ノンセキュア分離、PAC/AUT /BTI命令による高度な攻撃への対応、そしてスタックリミットチェックによるハードウェアレベルでの保護など、組み込みシステムのセキュリティを大幅に強化する機能を提供しています。今後、IoTデバイスの普及に伴い、これらの機能への理解と活用は、より安全なシステムを構築する上で不可欠となるでしょう。