組込みシステムは、多くの現代技術の実現に貢献しています。自動車のアダプティブ・クルーズ・コントロールから、スマート冷蔵庫のWifiまで。サイバー攻撃の増加に伴い、これらのシステムを保護することが重要になっています。
組込み機器は、ハッキングの格好の標的となります。攻撃が成功すると、侵入者は機器が生成、受信、処理するデータにアクセスすることができます。このような攻撃は、組み込み機器を利用している大規模なシステムに深刻な影響を与える可能性があります。例えば、様々なカメラやセンサーからデータを収集するF-15戦闘機の組み込み機器が停止すると、戦闘機の防御力が著しく低下します。
この記事では、セキュアな組み込みシステムの開発を始めるために必要なものをすべて網羅しています。以下、その内容をご紹介します。
- エンベデッド・セキュリティとは?
- 組み込み型セキュリティの導入時に直面する課題
- 組込みシステムの「安全性」とは?
- エンベデッドエコシステムでエンドツーエンドのセキュリティが重要な理由。
- いくつかの組み込みセキュリティツール。
- 一般的な組み込みソリューションに欠けているものは何ですか?
- 組込みセキュリティの未来
エンベデッド・セキュリティとは?
組み込みセキュリティは、組み込み機器のソフトウェアおよびハードウェアを保護するためのツール、プロセス、およびベストプラクティスを提供します。
組込みシステムのハードウェアモジュールは小型であるため、さまざまなメモリやストレージの制限があります。そのため、セキュリティ対策を組み込むことは、設計上の大きな課題となります。しかし、それは困難であると同時に、時代の要請でもあります。
組み込み機器を搭載したガジェットや機械の多くは、インターネットに接続されています。これは、ハッカーがこれらの機器に不正にアクセスし、悪意のあるコードを実行できることを意味します。
組込み機器のハッキングは、多くの場合、接続されている他のコンポーネントにも波及し、システム全体を麻痺させてしまいます。例えば、ドライバーが車を自動操縦できるようにするための組み込み機器が攻撃者によって制御されたとします。この場合、ハッカーは車をオフロードや交通機関に誘導し、大きな損害を与える可能性があります。
組込みシステムのセキュリティに関する重要な課題
組込みシステムのセキュリティは、あまり注目されていません。その理由をいくつかご紹介します。
- 開発者の意識の低さ。
開発者は通常、安全な組込み機器を開発するためのベスト・プラクティスを知らない。これは、ポイント2の理由もありますが、組み込みアプリケーションが従来のソフトウェア・アプリケーションよりもはるかに複雑であるためです。セキュリティへの影響を理解し、すべてのユースケースに対して安全でパフォーマンスの高いコードを書くことは、制約の多いマイクロコンピュータ環境では難しいことです。
- 標準化されていないこと。
組込みシステムのサイバーセキュリティ基準が不足しています。しかし、自動車業界はこの状況を少しずつ変えようとしています。ここ数年、研究者たちは、スマートカーのサイバーセキュリティに関する考察をまとめた出版物を数多く発表しています。例えば、SAE J3061「Cybersecurity Guidebook for Cyber-Physical Vehicle Systems」やUNECE WP.29「Cyber Security and Software Update Processes」などが挙げられます。
- サードパーティ製コンポーネントの使用
多くの組込み機器は、機能するためにサードパーティ製のハードウェアやソフトウェアのコンポーネントを必要とします。多くの場合、これらのコンポーネントは、セキュリティ上の欠陥や脆弱性がないかどうかテストされることなく使用されます。
- 最新ではないソフトウェア
古くなったファームウェアには、一般的にバグや悪用可能な脆弱性が潜んでいます。小型の組み込み機器では、ファームウェアを定期的にアップデートすることが特に難しいのですが、これを無視することはできません。
- インターネットへの直接接続
多くの組込みシステムや機器は、インターネットに直接接続されています。そのため、ネットワーク攻撃を検知・防御するエンタープライズファイアウォールのような保護機能はありません。リソースが限られている中で、厳格なレベルのセキュリティを実現することは非常に困難です。
- アタック・アット・スケール
組込み機器は通常、大規模に生産されます。これは、一つの脆弱性や欠陥が、時には世界中の何百万もの機器に影響を及ぼす可能性があることを意味しています。そのため、組み込みシステムへの攻撃の影響を抑えることは、非常に大きな課題となります。
組込みシステムの安全性とは?
以下では、セキュアな組み込みシステムのソフトウェアおよびハードウェアの特徴を見ていきます。
ハードウェアセキュリティのベストプラクティス
セキュアな組み込みシステムには
TEE(Trusted Execution Environment)は、セキュリティ上重要な操作をハードウェアレベルで分離することができます。例えば、ユーザー認証を分離された領域で実行することで、機密情報をより安全に保護することができます。
プロセッサ、キャッシュ、メモリ、ネットワーク・インターフェースなどの異なるハードウェア・コンポーネントは、適切に分離され、それぞれの機能を可能な限り独立して提供する必要があります。これにより、あるコンポーネントで発生したエラーが他のコンポーネントに伝播するのを防ぐことができます。
実行可能領域保護(ESP)とは、特定のメモリ領域を実行不可能な領域としてマークすることである。マークされた領域内でコードを実行しようとすると、例外が発生します。
ソフトウェアセキュリティのベストプラクティス
組込みソフトウェアを構築する際には、以下のようなベストプラクティスを心がける必要があります。
組込み機器の起動時には、暗号アルゴリズムを用いてブートイメージの検証が行われます。これにより、ブートシーケンスが正しいこと、ソフトウェア(ファームウェアおよびその他の関連データ)が改ざんされていないことが確認されます。
マイクロカーネルOSは、従来のOSよりもはるかに小さく、その機能のサブセットを含んでいます。カーネル空間は小さく、多くのユーザーサービス(ファイルシステム管理など)はユーザー空間 と呼ばれる別の空間に置かれています。カーネルスペースで実行されるコードや操作が少ないため、攻撃対象が大幅に減少します。
- 適切にパッケージされたソフトウェアアプリケーションの使用
すべてのソフトウェアアプリケーションは、自己完結型であり、適切にパッケージ化されていなければなりません。例えば、アプリケーションがサードパーティの依存関係を必要とする場合、その依存関係をオペレーティングシステムにグローバルにインストールすべきではありません。むしろ、アプリケーションのパッケージ/コンテナの一部であるべきです。
外部の信頼できないソースから受信したすべてのデータは、重要なソフトウェアやハードウェアコンポーネントに渡される前に、適切にサニタイズおよび検証されなければなりません。
アプリケーションが外部のAPIインテグレーションからデータを取得し、それに基づいて何らかの設定を切り替える場合、設定を変更する前に、受信したデータを厳密に検証する必要があります。
組込み機器に保存されている機密性の高いソフトウェア、データ、設定ファイル、セキュアキー、パスワードなどはすべて保護する必要があります。これは通常、暗号化によって行われます。データを暗号化するための秘密鍵は、専用のセキュリティハードウェアに保存する必要があります。
セキュリティ・ピラミッド - 組込みシステムのEnd to Endセキュリティ
セキュリティが後回しにされていた時代は終わりました。非機能的な要件です。今日、セキュリティは本質的なものでなければなりません。デバイスは設計上、安全である必要があります。そのためには、組み込み環境でエンドツーエンドのセキュリティ要件を実装することが不可欠です。つまり、ハードウェアの選択時、システム・アーキテクチャの定義時、システムの設計時、そしてもちろんコードの記述時に、セキュリティについて考える必要があるのです。
ハードウェアから始める
いくらソフトウェアのセキュリティが強固であっても、ハードウェアが不足していれば攻撃を受けてしまいます。オンチップのセキュリティ技術は、セキュアブートや、暗号機能や秘密の効率的な管理を可能にします。また、ハードウェアコンポーネントによっては、システムコールの異常検知、ファイルシステムの暗号化、アクセスコントロールポリシーなど、さまざまなセキュリティ機能をOSに提供することができます。
フォールト・トレラント・システム
フォールト・トレラント・システムを構築する理由は数多くありますが、ディファレンシャル・フォールト・アナリシス攻撃を避けることはその一つに過ぎません。このような攻撃では、潜在的なハッカーがフォールト・インジェクション技術を使用して、組み込み機器にエラーを発生させようとします。しかし、このようなフォールトを検出し、防御する方法はいくつかあります。
- 最も重要な操作を再現することで、異なる出力をいつでも比較し、障害の発生を検知することができます。
- デフォルトで失敗する。複数の条件(If条件やスイッチブロック内)を処理する場合、常にデフォルトケース(他にマッチするものがない場合)で失敗します。
- ランダムな動作を導入する。重要な操作の前に、小さくてランダムな遅延を加えることで、そのタイミングを予測できないようにします。これは、ハッカーが操作のパターンを判断してタイミング攻撃を行うことが非常に困難になるため、侵入検知の鍵となります。
- 保護シールド。メーカーは、最も重要な部品をシールドで覆い、外部からの操作から保護する必要があります。
- 異常な変動を検知する。電圧や電流などの異常な変動を感知して、例外を発生させることができます。
アプリケーション...とOSの安全性を確保する
アプリケーションレベルでデバイスの防御力を高めるには
- 定期的なアップデートが可能な、テスト済みの信頼できるサードパーティ製ソフトウェアおよびハードウェアコンポーネントを選択すること。
- 組込みシステムのセキュリティに関するベスト・プラクティスを開発者に伝授する。
- マイクロカーネルのオペレーティングシステムを使用して、カーネル空間で実行される操作の数を最小限に抑えます。
- ウイルス、トロイの木馬、マルウェアなどのソフトウェア攻撃を監視し、防御する。
- 不要なサービスはすべて削除してください。ファームウェアは、絶対に必要なものだけを搭載すべきです。例えば、ファイルを転送したり、パケットをキャプチャしたりする必要がない場合は、ファイル転送プロトコルやtelnetなどのネットワークパッケージを無効にすることができます。
- SFTP、IPsec、SSL、TLS、SSH、DNSSECなどの安全なプロトコルを使用してください。
組み込みシステムのセキュリティのためのツール
ここでは、組み込みシステムのセキュリティ確保に役立つツールを網羅的に紹介します。
現代の組み込み型セキュリティソリューションに欠けているものは何でしょうか?
組込み機器のデバッグ、エクスプロイト、ペンテストを行うための様々なソリューションがあるにもかかわらず、それらは容易には利用されていません。デバイスを物理的に保護することには重点が置かれていますが、ソフトウェア関連の攻撃から保護することには十分な努力が払われていません。最も単純で回避しやすいアプリケーション・セキュリティ・リスクや脆弱性であっても、最新の組込み機器では依然として一般的です。
その大きな理由は、開発者の組み込みセキュリティに対する意識の低さにあります。Tripwire社が実施した調査によると、IT専門家の68%が、自社の従業員が潜在的な脆弱性について十分に認識していないと考えています。
開発者は、どのセキュリティプロトコルを選択すべきか、どのフレームワークを避けるべきか、どのハードウェアコンポーネントを分離すべきか、機密データをどのように扱うべきか、どの暗号化アルゴリズムが最も安全かをどのように判断すべきかなどを知りません。このような一般的な知識の欠如やベストプラクティスの無視は、組み込み機器上で動作するアプリケーションを危険にさらす可能性があります。
組込みセキュリティの未来
組み込みセキュリティ市場では、多くの取り組みが行われています。専門家は、2021年から2026年の間に、市場の年平均成長率(CAGR)が5.5%という数字に達する可能性があると考えています。IoTデバイスがますます増えていく中で、新たな組み込みセキュリティ標準が確立されることが期待されています。
また、ウェアラブル医療機器の導入が進むことで、信頼性の高い組み込みセキュリティソリューションの需要が高まると考えられます。機密性の高い医療データを格納して処理するためには、一定のセキュリティチェックリストに合格する必要があり、ベンダーやエンジニアがよりセキュリティに注力するようになることを期待しています。
将来的には、組み込み機器の主要なソフトウェアとハードウェアのコンポーネントをリモートで可視化、監視、制御できるソリューションも登場するかもしれません。これは、組み込みシステムのセキュリティの世界において、まさに革命的な出来事となるでしょう。
デジタル署名、データの暗号化、ファイアウォールの追加、アクセスコントロールの実装、操作のランダム化などは、最終的には限界があります。真に安全なデバイスを構築するためには、開発者が安全なコードを書くためのトレーニングを受ける必要があります。アプリケーションの設計段階で潜在的なセキュリティリスクを特定し、それを軽減することで、システムを本質的に安全な ものにすることができるのです。
Secure Code Warrior の支援方法
Secure Code Warrior の主力製品であるlearning platform には、開発者が安全な C/C++ コードを書くためのトレーニングに役立つ、数多くのインタラクティブな課題、courses 、および評価が用意されています。このプラットフォームのコンテンツは、フレームワークに特化しており、非常に魅力的なものとなっています。私たちのC/C++:Embedコーディングチャレンジは、MISRA C、AUTOSAR C++(MISRA C++)、IECの両方からインスピレーションを得ています。
開発者は、C/C++特有の脆弱性を発見し、さらにそのバグを修正する方法を学ぶという、個人的な学習の旅に出ることができます。この過程で、開発者は自分の進捗状況を把握して弱点を見つけたり、仲間と一緒にコーディングコンテストを楽しんだりすることもできます。当社のソリューションがどのように自動車・輸送業界を支援しているか、詳しくはこちらをご覧ください。
C/C++:Embedの課題がどれほどインタラクティブで、組込みに特化しているかを知りたいですか?learning platform でC/C++:Embed の課題をお試しください。