ARMの最新のMCU向けアーキテクチャ「ARMv8-M」は、同社が提唱する「セキュアMCU」に向けたものとなっている。本稿では、このセキュアMCUの定義と、その実装について解説する。
ARMは、2015年11月に米国カリフォルニア州サンタクララで開催された「ARM TechCon 2015」において、「Secure MCU(以下、セキュアMCU)」のアーキテクチャである「ARMv8-M」を発表。そして2016年10月の「ARM TechCon 2016」では、このARMv8-Mを実装したプロセッサコア「Cortex-M23」と「Cortex-M33」(以下、Cortex-M23/33)を発表した。
ただ「そもそもセキュアMCUって何?」という疑問を抱かれる人も多いと思う。そこでちょっと原点に帰って、セキュアMCUというものの定義と、その実装をご紹介したいと思う。
図1は、一般的(?)なMCU(Micro Controller Unit、マイコン)の構成である。「MCUにキャッシュが入るのか?」と突っ込まれる方も居られようが、フラッシュメモリ(Flash Memory)の速度との兼ね合いになるため、一般論として動作周波数100MHz以上で駆動されるMCUの中にはキャッシュを搭載するものがちらちらと出始める。まぁこのあたりは速度との兼ね合いと考えて欲しい。あるいは、ここには入れてないが、スクラッチパッド(ScratchPad)あるいはTCM(Tightly Coupled Memory)といった、高速にアクセス可能なSRAM領域が別に搭載される場合もあるが、扱いとしてはSRAMと同じなので割愛する。
で、8ビットの低速なMCUだとインターコネクト(Interconnect)が1つだったりするが、ある程度高速なMCUだとプロセッサパイプライン(Processor Pipeline)とメモリ周りをつなぐ高速なインターコネクトと、周辺回路をつなぐ低速なインターコネクトが分離され、そこにさまざまな通信モジュールを含む周辺回路が接続される。また一部の周辺回路で高速にデータ転送を行うため、DMAC(DMA Controller)が用意される。
こうした全体の回路のメモリマップは、MPU(Memory Protection Unit)で管理される形だ。またこれとは別に、デバッグを行うためにJTAGインタフェースが搭載され、ICE(In-circuit Emulator)などを接続して、CPUの動作状況やメモリの内容、インターコネクトの状態などにアクセスできるようになっている。
さて、この図1のMCUだが、どんな脆弱性があるのか。それをまとめたのが図2である。ありがちな話では、こっそりとトロイの木馬的なプログラムを動かすことで、プログラムやデータを改ざんしたり、あるいはデータを盗んでどこかに送り出したりといったことが可能になる。そのためにはトロイの木馬をまず仕込む必要があるわけだが、これも山ほど手法はあり、プログラムを格納するフラッシュメモリそのものの改ざんとか、データを格納するSRAMの動的な改ざんなどが主なところだ。
SRAMの改ざんに関してはスタックアンダーフロー(Stack underflow)とかスタックオーバーフロー(Stack overflow)を発生させることで、SRAM中に送り込んだデータをコードとして実行させるが一般的だ。中にはキャッシュ(Cache)を改ざんして、不正コードを実行させるなんて例もある。
スタックアンダーフロー/オーバーフローそのものを発生させる主要因は、もともとのプログラムの不備であることが多い。副次的な要因としては、周辺回路からDMAC経由でメモリを改ざんする(この際に周辺回路の不具合を突くことが多い)手法があり、ついでにMPUの保護エリアも改ざんするといった念の入った手段が利用される。
別の方法としては、JTAGポートからICEなどを使って侵入、という方法も環境によってはかなり有効である。また昨今はMCUが外部と通信を行うのは一般的であるが、この通信の傍受、改ざんも当然可能である。要するに、既存のMCUはある意味脆弱性の塊といって良い。
Copyright © ITmedia, Inc. All Rights Reserved.