mbed OSのセキュリティ

続いてはmbed OSのセキュリティについて。ARMは、2014年11月に米国で開催したTechConで、IoTデバイスのための組み込みOSであるmbed OSを発表した。これは現在開発中で、特定開発者向けのプレビューが行われているところだが、2015年11月のTechConのタイミングで、Ver.3.0として正式公開される予定だ。

mbed OSはイベント駆動型のOSで、基本はオープンソース(一部、外部ライセンスなどの関係でバイナリ提供のみになる部分を含む)だ。また、IoT向けの通信スタックを持ち、さまざまな物理層の上で複数のIoT向けのプロトコルが利用できる。

図7:mbed OSは、Cortex-M系列で動作するイベント駆動型のOSで、通信機能が充実しており、何らかの通信機能が必要となるIoTデバイスを作りやすい

インターネット接続が可能な機器と通信可能な無線LANといったの汎用的な物理層を持つ機器や、BluetoothなどでスマートフォンやPCを中継に利用できる機器が構築可能だ。

こうしたIoT機器の管理用にARMは、mbed Device Serverを用意している。こちらは、Linuxなどの汎用OSの上で動作する。今回のアップデートでは、これらに対して、Linuxなどの上で動作し、mbed OSアプリケーションを実行可能なmbed Clientが加わった。

図8:mbed Device Serverは、mbed OSが動作するデバイスを管理するためのソフトウェア。mbed OSとの通信スタックを持ち、セキュリティやデバイス、データ管理などをおこなえる

図9:mbed Clientは、既存のLinuxなどの上でmbed OS用アプリを動作させるための環境。これによりCortex-Aなどの他のプロセッサでもmbed OSアプリの利用が可能になる

これは、LinuxやリアルタイムOSなどの上でmbedアプリケーションを実行可能なライブラリ、ランタイムのようなもの。これを使うことで、既存のLinuxなどを使った組み込み機器をmbed対応とすることも可能になる。また、mbed Device Serverと接続が可能であり、mbed OS機器と合わせて同じように管理が可能だ。

ARMは、IoTの時代では、組み込み系のセキュリティが重要であるとし、mbed OSに組み込まれたセキュリティ機能の説明を行った。簡易なリアルタイムOSなどを使ったこれまでの組み込み系アプリケーションは、通信関連の機能をアプリケーション内に含んでいるため、開発者のノウハウや技量がセキュリティ強度に大きく関係しており、一部の開発者だけが高度なセキュリティを実現できていたという。

これに対してmbed OSは、通信部分をOS内に持つだけでなく、暗号化や暗号化通信などの機能を持つ。これにより、アプリケーション側は、セキュリティ関連のコードを開発したり、他社から購入して組み込む必要がなくなったという。

mbed OSを使った機器のセキュリティは、 「デバイス」自体のセキュリティ、「通信」のセキュリティ、そして、ファームウェアアップデートなどの「ライフサイクル」のセキュリティに分類できる。

図10:mbedでは、セキュリティを大きく3つに分類している。1つはmbed OSが動作するデバイス自体、もう1つはデバイスが行う通信、そしてデバイスのファームウェアアップデートなどのライフタイムでのセキュリティ

「通信」に関するセキュリティは、mbed OSが備える通信機能と、TLS(Transport Layer Security。SSLをベースに定義されたプロトコル)のmbd TLSライブラリによって保たれる。

図11:mbed OSは、X.509証明書を利用可能な簡易版ではないTLSを使って通信のセキュリティを保つ

デバイスに関するセキュリティだが、mbed OSでは、「パブリック」部分と、外部からはアクセスできない「プライベート」部分が分離されているため、従来の組み込み系デバイスに比べると攻撃に対する耐性が高い。

図12:mbed OSを使わないフラットな組み込みシステムでは、攻撃可能なポイントが分散していてセキュリティを高めるのが難しかったが、mbed OSでは、公開、プライベート領域が分離され、プライベート領域は、公開領域からのアクセスが制限される

mbed OSでのセキュリティは、内部にある「μvisor」が制御を行う。ハードウェアには、「特権アクセス制御」(特権を持つコードのみがアクセスできる)、メモリ分割(他のプログラムからアクセスできないメモリ領域を作る。ただし、メモリ保護ユニットはハードウェアオプションであるため、これを持たないプロセッサもある)、暗号化ハードウェア(構成による)などがあり、μvisorがこれを利用してプライベート領域を保護する。μvisorは、割り込みの応答速度などを考慮し、低遅延でシステム負荷が高くならないように作られている。

図13:mbed OSには、μvisorと呼ばれるモジュールがあり、ここがハードウェアのセキュリティ機能(アクセス権やメモリ分割)を制御して、公開、プライベート領域を分離する

また、mbed OSは、このμvisorを利用して、安全な「鍵」保管領域や暗号化機能、乱数発生などの機能を提供している。これにより、デバイス自体のデッドコピーを防ぎ、サーバーなどから受け取るセキュリティ関連の情報(アクセストークンなど)を保護する。また、通信に利用するTLS関連の機能もμvisorにより保護される。

さらに、IoTではソフトウェアの複雑化から、ユーザーによるファームウェアアップデートが不可避だとして、フラッシュメモリのアップデートに対するセキュリティ機能を持つ。これは、mbed Device Serverと組み合わせて行われる「ライフサイクル」のセキュリティだ。

図14:mbed OSデバイスは、mbed Device Serverと連携することで、デバイスの登録やファームウェアアップデートなどのライフサイクルを管理できる

mbed OS側には、フラッシュアップデートセキュリティレイヤーがあり、電子署名のあるコードのみを受け付ける。また、こうしたアップデート作業は、mbed device Serverが管理を行う。mbed Device Serverは、デバイス制御のアプリケーションとIoTデバイスの間に入ることで、セキュリティを確保する。

mbed Device Serverには、webインターフェース(HTTPSサーバー機能)があり、エンドユーザーアプリ、JavaSDKにより開発されたアプリやユーティリティなどは、ここに接続してmbed Device Server経由でデバイスを管理する。

図15:デバイスは、mbed Device Serverとだけ通信し、管理側のアプリケーションもmbed Device Serverと接続する

高性能なシステムで実行されるmbed Device Serverであれば、セキュリティの負荷は問題にならない。mbed Device Serverは、mbed OS搭載デバイス(IoTデバイス)とは、データグラムTLS(UDPなどのデータグラム型プロトコル上のTLS)を使うCoAPトランスポート(Constrained Application Protocol:機械同士の通信を想定したHTTPを簡易化したプロトコル)を利用する。

mbed OSは、2015年11月に正式出荷予定だが、すでに特定開発者向けのプレビューは開始されている。いまのところ、まだmbed OSを搭載したIoTデバイスは登場していおらず、当初は開発ボードのみだろうが、2016年ぐらいからは、搭載製品が登場するのではないかと考えられる。ただ、mbed OSの対応範囲は多岐にわたるため、必ずしもコンスーマー製品とは限らず、目にする機会も少ないかもしれない。