ところで、冒頭挙げた3つのテーマのうち、2つ目でセキュリティ強化の話が出ていたわけだが、今回そのセキュリティ強化で加わる機能として示されたのが、ポインタ認証とBTIの実装、メモリタギング、それとSecure-EL2の3つである。先述のリストにもあるように、ポインタ認証はArm v8.3-Aの機能であり、ROP(Return Oriented Program:スタックを書き換えることで、関数の戻り先を異なるアドレスに切り替える手法)を防ぐもので、スタックに戻り先アドレスを格納する際に、ポインタのアドレスの一部をPAC(Pointer Authentification Code)に置き換える。これにより、仮にスタックが書き換えられた場合でも直ちに検出できるという手法だ。
BTIは、あらかじめBranch Targetの対象となるアドレスを含むページにマークを追加しておくことで、飛び先アドレスが書き換えられた場合には、そのページにマークがないということで異常を検出できる。
Arm v8.5-Aで追加されたメモリタギングは、メモリ管理単位(恐らくはページ単位)に4ビットのタグ領域を追加し、アプリケーションは自分の持つタグIDと一致したメモリ領域のみにアクセスできるようにする機能だ。4ビットだからIDが16種類しかないわけで、十分複雑か? といわれると微妙だが、それでも他のアプリケーションからメモリアドレスを盗み見ることがかなりの確率で防止できるとする。もっとタグ領域を増やせばより安全性が増すのだろうが、このあたりはインプリメント上の都合(複雑さと安全性のバーター)だったのかもしれない。
そして最後がArm v8.4-Aで追加されたSecure EL2である。ELはException Levelの略で、EL0が一番保護レベルの低い、アプリケーションが稼働するレベル、EL1がOSの動くレベル、EL2が仮想マシンあるいはハイパーバイザーが動くレベル、そして一番保護レベルの高いEL3はTrustZoneのモニターが動作するレベルである。EL3に関しては、基本Armからハードウェア(というかIP)やソフトウェアが提供され、当然セキュアに動作する。またEL1についてもセキュアモードが存在しており、これを利用することでOSレベルでのセキュリティが担保される。ところがハイパーバイザーや仮想マシンが動作するEL2にはセキュアモードが存在しておらず、これが穴になる可能性がある。そこで、この問題に対応するためEL2にもセキュアモードを追加するというものだ。
最後のSecure EL2については、単にCPU側にその機能を搭載するだけではなく、ハイパーバイザーなり仮想マシンなりが正しくこれを実装する必要がある。それもあってか、PSA(Platform Security Architecture)の枠組みを適用することを考えているようだ。具体的には、MCU向けと同様に、PSA Certifiedの要件をSecure EL2向けに定義し、第三者認証機関を利用してこれに適合するハイパーバイザーなり仮想マシンなりにPSA Certifiedを与えるといった形になるのではないかと思う。恐らくこれらは全て、Matterhornが出てくる2021年ごろから利用可能になっていくのではないかと思われる。
ちなみにここまでの話はCortex-Aを対象にしたが、当然Neoverse向けも同じ仕組みが取り込まれてゆくと考えられる。地味ではあるがかなり重要度の高いロードマップをArmは示したというわけだ。
Copyright © ITmedia, Inc. All Rights Reserved.