IOTセキュリティ
ますます多くのIoTデバイスが世界に進出し、管理されていない複雑でしばしば敵対的な環境に配備されるようになると、IoTシステムのセキュリティ確保は多くのユニークな課題をもたらします。Eclipse IoT Working Group's 2017 IoT developer surveyによると、セキュリティはIoT開発者の最大の関心事です。
IoTセキュリティに関する私のトップ10の課題について説明しますので、お付き合いください。
- 制約のあるデバイスのセキュリティ確保
- デバイスの認可と認証
- デバイスのアップデート管理
- 通信の確保
- データのプライバシーと整合性の確保
- Web、モバイル、クラウドアプリケーションの安全性確保
- 高可用性の確保
- 脆弱性の検出によるインシデントの防止
- 脆弱性の管理
- セキュリティ問題の予測と先取り
1 制約のあるデバイスの保護¶
多くのIoTデバイスは、ストレージ、メモリ、処理能力が限られており、バッテリーで動作する場合など、低消費電力で動作できることが必要な場合が多いです。
暗号化に大きく依存したセキュリティアプローチは、このような制約のあるデバイスには適していません。なぜなら、複雑な暗号化と復号化を迅速に行うことができず、リアルタイムにデータを安全に伝送することができないからです。
また、これらのデバイスは、これらのアルゴリズムをリバースエンジニアリングするために使用される電力解析攻撃などのサイドチャネル攻撃に対して脆弱であることが多い。その代わりに、制約のあるデバイスでは、通常、高速の「軽量暗号化アルゴリズム」(https://www.researchgate.net/publication/329072888_A_Survey_of_Lightweight_Cryptographic_Algorithms_for_IoT-Based_Applications_Proceedings_of_ICSICCS-2018)のみを採用しています。
IoTシステムでは、こうしたデバイスの制限を補うために、デバイスを別のネットワークに分離したり、ファイアウォールを使用したりするなど、複数の防御層を利用する必要があります。
2 デバイスの認証・許可の取得¶
多くのデバイスがIoTシステムに侵入する可能性があるため、デバイスの認証と承認はIoTシステムのセキュリティを確保する上で重要です。
デバイスは、ゲートウェイや上流のサービスやアプリにアクセスする前に、自分のアイデンティティを確立する必要があります。しかし、デバイス認証に関しては、弱い基本パスワード認証を使用していたり、デフォルト値から変更されていないパスワードを使用していたりと、失敗するIoTデバイスが多くあります。
デフォルトでセキュリティを提供するIoTプラットフォームを採用することで、二要素認証(2FA)を有効にしたり、強力なパスワードや証明書の使用を強制するなど、これらの問題を解決することができます。また、IoTプラットフォームは、各デバイスがシステム全体でアクセスできるサービス、アプリ、リソースを決定するためのデバイス認証サービスも提供します。
3 デバイスのアップデート管理¶
IoTデバイスやゲートウェイ上で動作するファームウェアやソフトウェアに、セキュリティパッチを含むアップデートを適用するには、多くの課題があります。例えば、どのアップデートが利用可能かを追跡し、様々な異なるネットワークプロトコルで通信する異種のデバイスが混在する分散環境に同期して適用する必要があります。また、アップデートが失敗した場合に備えて、グレースフルなロールバック戦略を導入する必要があります。
すべてのデバイスが無線によるアップデートやダウンタイムなしのアップデートをサポートしているわけではないため、アップデートを適用するためにデバイスに物理的にアクセスしたり、一時的に運用を停止したりする必要があります。また、すべてのデバイス、特に古いデバイスやメーカーのサポートが終了したデバイスでは、アップデートが利用できない場合があります。
また、アップデートが提供されていても、デバイスの所有者がアップデートの適用を拒否する場合もあるため、下位互換性の維持は重要です。デバイス管理の一環として、各デバイスに展開されているバージョンを把握し、アップデートが利用できなくなった後、どのデバイスが廃棄候補になるかを追跡する必要があります。
デバイスマネージャーシステムは、デバイスへのアップデートの自動配信や、アップデートプロセスが失敗した場合のロールバックの管理をサポートしています。また、デジタル署名を利用するなどして、正当なアップデートのみを適用することも可能です。
4 安全な通信¶
デバイス自体のセキュリティが確保されたら、次のIoTセキュリティの課題は、デバイスとクラウド・サービスやアプリケーションとの間のネットワーク上の通信の安全性を確保することです。
多くのIoTデバイスは、ネットワーク上でメッセージを送信する前に、メッセージを暗号化していません。しかし、ベスト・プラクティスは、トランスポート暗号化を使用し、TLSのような標準を採用することです。また、別のネットワークを使用してデバイスを分離することで、安全でプライベートな通信を確立し、送信されるデータの機密性を維持することができます。一般的な対策としては、ファイアウォールの使用、ゲートウェイ・デバイスへの物理的なアクセスの制限、ランダムに生成されるワンタイム・パスワードの使用、デバイスが必要としないOS機能のオフなどが挙げられます。
5 データのプライバシーと完全性の確保¶
ネットワークを介して送信されたデータがどこに送られても、安全に保存・処理されることも重要です。データのプライバシーを確保するには、機密データを保存する前に再編集したり、匿名化したり、データセパレーションを使って個人を特定できる情報をIoTデータのペイロードから切り離すなどの方法があります。また、不要になったデータは安全に廃棄する必要があり、データを保存する場合は、法規制の枠組みに準拠した状態を維持することも重要な課題です。データはデバイスのローカルにとどまり、機械学習の作業はエッジで行われ、学習結果/洞察のみがクラウドと共有されるような、Federated Machine Learningを可能にするシステムの開発に関心が集まっています。このようなシステムの本質は、すべてのデータがアルゴリズムに向かうという従来の方法ではなく、アルゴリズムがデータに向かうべきだということです。
データの整合性を確保するには、データが変更されていないことを確認するために、チェックサムやデジタル署名を採用する必要があります。ブロックチェーンは、IoTデータの分散型台帳として、IoTデータの整合性を確保するためのスケーラブルで回復力のあるアプローチを提供します。
IoTにとってのブロックチェーンの意味については、こちらのブログ記事をご覧ください。
6 ウェブ、モバイル、クラウドのアプリケーションを安全にする¶
ウェブ、モバイル、クラウドのアプリやサービスは、IoTデバイスやデータの管理、アクセス、処理に使用されるため、IoTセキュリティへの多層的なアプローチの一環として、これらも保護する必要があります。モバイル・アプリやウェブ・アプリのセキュリティを確保するための標準的なプラクティスはすべて遵守する必要があります。
IoTアプリケーションを開発する際には、OWASP top 10 vulnerabilitiesのような脆弱性を避けるために、安全なエンジニアリング・プラクティスを必ず適用してください。デバイスと同様に、アプリも、2FA や安全なパスワード回復オプションなどのオプションを提供することで、アプリ自体とアプリのユーザの両方に対して、安全な認証をサポートする必要があります。
7 高可用性の確保¶
日々の生活の中でIoTへの依存度が高まるにつれ、IoT開発者は、IoTデータやそのデータに依存するウェブやモバイルアプリの可用性、さらにはIoTシステムが管理する物理的なモノへのアクセスを考慮しなければなりません。接続性の停止やデバイスの故障の結果、あるいはサービス拒否攻撃のような攻撃の結果として生じる混乱の可能性は、単なる不便さにとどまりません。アプリケーションによっては、利用できないことによる影響は、収益の損失、機器の損傷、あるいは人命の損失を意味することもあります。
例えば、コネクテッドシティでは、IoTインフラが交通管制などの必須サービスを担っていますし、ヘルスケアでは、IoTデバイスがペースメーカーやインスリンポンプなどを担っています。高可用性を確保するためには、IoTデバイスをサイバー攻撃だけでなく、物理的な改ざんからも保護する必要があります。IoTシステムには、単一障害点をなくすための冗長性が必要であり、また、問題が発生したときに迅速に適応・回復できるように、回復力と耐障害性を備えた設計が必要です。ほとんどのIoTシステムは分散型であるため、留意すべき重要な点はCAP定理です(A distributed computer system can have at most two properties out of high availability, consistency, and tolerance to network partition)。
8 脆弱性を検知してインシデントを防ぐ¶
最善の努力をしても、セキュリティの脆弱性や違反は避けられません。IoTシステムが侵害されたかどうか、どうやって知ることができるでしょうか。大規模なIoTシステムでは、接続されているデバイスの数や、関係するデバイス、アプリ、サービス、通信プロトコルの種類の多さといったシステムの複雑さから、インシデントが発生した際の特定が困難になることがあります。脆弱性や侵害を検知するための戦略としては、ネットワーク通信やアクティビティログを監視して異常を検知すること、ペネトレーションテストや倫理的なハッキングに従事して脆弱性を暴くこと、security intelligence and analyticsを適用してインシデント発生時に特定して通知することなどが挙げられます。
[IoTデバイスをマルウェアの攻撃から守る]方法についてはこちら(/articles//iot-anatomy-iot-malware-attack/)をご覧ください。
9 脆弱性の管理¶
IoTシステムの複雑さは、脆弱性の影響を管理するために、脆弱性の影響や侵害の範囲を評価することを困難にしています。どのデバイスが影響を受けたのか、どのようなデータやサービスがアクセスまたは侵害されたのか、どのユーザーが影響を受けたのかを特定し、状況を解決するために即座に行動を起こすことが課題となります。
デバイスマネージャーは、デバイスの登録を維持し、パッチが適用されるまで影響を受けたデバイスを一時的に無効化または隔離するために使用することができます。この機能は、キーデバイス(ゲートウェイデバイスなど)にとって特に重要であり、デバイスが侵害された場合、偽のデータがシステムに氾濫するなど、被害や混乱を引き起こす可能性を制限することができます。アクションは、脆弱性管理ポリシーに基づいたルールを持つルールエンジンを使って自動的に適用することができます。
10 セキュリティ問題の予測と先取り¶
より長期的なIoTセキュリティの課題は、セキュリティ・インテリジェンスを、問題が発生したときの検出と緩和だけでなく、潜在的なセキュリティ脅威を予測し、事前に保護するために適用することです。脅威のモデリングは、セキュリティ問題を予測するために使用される1つのアプローチです。その他のアプローチとしては、監視・分析ツールを適用してイベントを相関させ、展開される脅威をリアルタイムに可視化することや、AIを適用して過去のアクションの効果に基づいて適用されるセキュリティ戦略を適応的に調整することなどが挙げられます。人手による継続的な検査はほとんど不可能なので、人の介入を最小限に抑え、できるだけ多くの作業をアルゴリズムに任せることが重要です。
結論¶
IoT開発において、マルチレイヤーのセキュリティ・バイ・デザイン・アプローチを採用することは、デバイス、データ、モバイルやクラウドベースのIoTアプリやサービスを安全に管理し、脅威や問題が発生した場合に対処するために不可欠です。IoTシステムのセキュリティをおろそかにすることの反動は、システムの故障や資本の損失、さらには損害につながります。
開発前、開発中、開発後を含めて、常にセキュリティ機能が最も安全な設定になっている「セキュリティ・バイ・デフォルト」を取り入れることで、データのプライバシーと整合性を維持しながら、可用性の高いIoTデータ、アプリ、サービスを提供することができます。