皆さん こんにちは STM32マイコン体験実習 セキュリティ編パート1ですSTM32のセキュリティ機能とトラストゾーンの概要を説明しますSTM32マイコンセキュリティを4つのパートで学習しますはじめに 組み込み市場でのセキュリティの考え方を話します次にSTM32が内蔵するセキュリティ機能を紹介しますSTM32がどんなセキュリティ機能を持っているかマイコンへの攻撃をどのように防げるかを説明します残り2つはアームトラストゾーンに対応したマイコンについての講義と演習ですまず アームコアテックスMトラストゾーンの概要を話しますその後 6つの演習でトラストゾーン対応マイコンを扱うための知識とスキルを習得しますパート1では1から3までを学習します動画の構成を説明しますパート1は講義のみになりますパート2ではSTM32エルゴの開発環境を整備して演習でキーポイントを体験するための準備をしますパート3ではトラストゾーン対応ファームやプロジェクトを正しく扱う知識とスキルを習得しますパート4ではトラストゾーンでアイソレーションしたリソースへアクセスするための方法であるセキュア呼び出しを習得しペリフェラルと割り込みのセキュリティ設定の仕方を習得しますパート5ではトラストゾーンを向こうにする方法を習得しSTの初期加工度生成ツールSTM32 CubeMXでトラストゾーン対応ファームやプロジェクトを作成する方法を習得します組み込みの分野でセキュリティが必要になる理由として少なくとも二つあるのではないかと思われます一つ目は海賊版の製造防止です製品からファームエアデータを読み取られてしまうとコピー品が作られてしまいます二つ目は製品の悪用防止です製品の機能を悪用されてしまうとその製品を製造販売している企業のイメージに影響が及ぶ可能性があると思われます普段何気なくセキュリティという言葉を使っているのではないでしょうかセキュリティという言葉の意味をより深く知ることでセキュリティを考える上でのヒントになるのではないかと思われますセキュリティを英話辞書で意味を調べると安全という日本語役が一番目にあります同じく安全と役されるセキュリティという言葉と区別がすきません英単語の意味を英語で解説するAE辞書を引くと違いが分かりますセキュリティという言葉には外部から機械が及ぼされない状態という意味があります一方でセキュリティという言葉には自分から外部に機械を及ぼさない状態という意味がありますこのスライドはセキュリティとセフティの説明を絵で表現した一つの例です必要に応じてご覧くださいセキュリティを考えるときは攻撃に着目すると良いということが分かったのではないかと思われます組み込みセキュリティで防御の対象となる攻撃は2種類があります1つ目はソフトウェアによる攻撃ですファームエアを書き換えたりメモリの空き領域に命令コードを仕込んで製品機能を悪用したりデータを勝手に外部に出力しますジェタグやブートローダーを使ってメモリからデータを読み出す操作もソフトウェアによる攻撃に該当します2つ目は物理攻撃です電圧グリッチという物理攻撃がありますコア電圧に低格外の電圧を一周入力して命令実行のご動作を引き起こす攻撃ですその他にサイドチャネルアタックという物理攻撃もありますSTM32などの汎用マイコンが内蔵しているセキュリティ機能の多くは1のソフトウェアによる攻撃に対する防御です2つ目の物理攻撃に対する対策はクレジットカードなどに使われるセキュアマイコンが有効ですアームトラストドーンは1つ目のソフトウェアによる攻撃に対する防御ですセキュリティアイソレーションという方法を使うとソフトウェアによる攻撃を防御できますアイソレーションとは隔離分離のことです勝手にアクセスされたくないものをアイソレーションして簡単にアクセスできないようにしますこのスライドで示しているモデルを元にアイソレーションがどんなものか説明しますあるマイコンがありクワッドSPIインターフェースに外付フラッシュメモリがつながっていますこの外部フラッシュメモリには他の外付デバイスを制御する命令コードが記録されていますこのモデルの正常動作を説明しますマイコンが外付フラッシュメモリから命令コードを読み出して実行します命令の実行により外部デバイスから重要なデータを読み出しますデータを読み出した後それを内部エスラム上で暗号化します最後に暗号化したデータを無線通信で送信します異常のように動作すると考えてください外付フラッシュメモリが市場で別なものに張り替えられてしまった場合を考えてみます張り替えた外付フラッシュメモリにはこの商品を攻撃するプログラムが仕込まれていますこの攻撃プログラムはまず外部デバイスの設定を書き換えて勝手に制御します次に外部デバイスから読み出したデータを暗号化しないで無線通信で後頻度で外部に送信します外部フラッシュメモリが張り替えられたことを知らないCPUコアが外部フラッシュメモリから命令を読み出して実行すると攻撃が実行されてしまいますこの攻撃には3つの要素が関係しています1つ目が外部デバイスとの通信インターフェースのアイスクラッシュです2つ目が無線通信シプトの通信インターフェースのSPIです3つ目が読み出しデータのバッファリングと暗号化に使う内部エスラム領域ですこの3つをアイソレーションしてあらかじめ決めてある手続きに従わないとこれらのハードウェアにアクセスできないようにしますこれによって攻撃が成立しなくなりますこれがセキュリティアイソレーションという仕組みですアームトラストドーンはこのセキュリティアイソレーションを柔軟に実現するための技術ですアイソレーションしたリソースにアクセスする場合アームコアテクセムトラストドーンの場合はセキュア呼び出しを使いますこの場合セキュア呼び出しがあらかじめ決めてある手続きになりますSTM32が内蔵しているセキュリティ機能とその使い道について説明しますこのスライドはマイコンを搭載した商品への攻撃手順の例を示していますまず商品の筐体を開封して基板が見えるようにします基板に線をハンダ付けするなどしてJタグを接続できるようにしますJタグが接続できるようになると攻撃が可能になりますマイコンへの攻撃をSTM32のセキュリティ機能で防御する例になりますタンパー建置機能でマイコンが搭載されている商品の筐体が開封されたことを建置できますJタグピンの無効化やRDP読み出し保護で商品基板へのJタグ接続を防げますフラッシュメモリの書き換や飽き領域への攻撃プログラムの書き込みはWRP書き込み保護で防げますメモリからのデータ読み出しはRDPの他にメモリアクセス制限機能で防げますメモリアクセスを制限する機能としてトラストゾーン、MPU、メモリプローテクションユニットセキュアーメモリなどがあります各セキュリティ機能について発足しますタイタンパー機能のうちパッシブタンパーは信号レベルのハイ、ローの変化で開封を建置しますアクティブタンパーは自分が出力するランダムな信号が基板上を巡り回った後問題なくそのまま自分に戻ってくるかどうかで基板への物理攻撃を建置しますどちらのタイタンパー機能もタンパーを建置するとバックアップレジスタという記憶領域やエスラムの内容を自動で消去しますジェタグピンの向こう側ジェタグ通信に使うピンを汎用入力や出力に設定を変えてジェタグを接続できなくしますWRP書き込み保護は内部フラッシュメモリをセクター単位で書き込み禁止にします一つのセクターサイズはマイコンによりますが数キロバイトになりますRDP読み出し保護は内部フラッシュメモリをジェタグ読み出し禁止にしますSTM32では内部エスラムの一部もジェタグ読み出し禁止にできますまたRDPが有効だとジェタグ接続を建置した時点でプログラムの実行を停止しますパワーオンリセットがかかるまで停止したままになりますセキュアメモリとは起動時のみ読み書きできるメモリ領域ですアプリケーションファームウェアにジャンプした後アクセスできなくなりますメモリプロテクションユニットとはアームコアテクセームコア内蔵のメモリアクセス制限機能ですアドレス空間に最大16個の仮想領域を作りそれぞれの領域ごとに読み書き、命令実行の許可禁止を設定できます各領域は重ねることができますこのスライドの例では起動時にセキュアブート処理を実行している最中に他の領域での命令実行を禁止していますこれにより外部から悪意のある行動メモリに入れ込まれても実行できないようになっていますHTM32マイコンセキュリティの機能いくつか紹介しましたこれらのセキュリティ機能をバラバラに使うと効果が薄くなります組み合わせて重ねて使うことでセキュリティを強めることができます仮に開封検知が破られたとしても次はこれで防ぐというように壁をいくつも用意することで攻撃に対して式を高くできますこのスライドの例では書き替えられたくないフラッシュメモリ領域にWRP書き込み保護をかけます悪意のある命令コードから読み取られたくないメモリ領域をトラストゾーンで保護します暗号鍵が記録してあるフラッシュ領域をセキュアユーザーメモリ領域にしてルート時に鍵を使うときだけCPUがアクセスできるようにしますメモリープロテクションユニットで今実行したい命令コードがある領域だけ実行可能にしますこのスライドはSTM32というマイコンがどのセキュリティ機能を内蔵しているかを示していますコアテックスM33を内蔵しトラストゾーンに使用しているマイコンは今のところSTM32L5マイコンのみとなりますトラストゾーンとはアドレス空間上にアクセスしにくい領域を2位の位置に2位の大きさで作る技術ですアドレス空間全体が保護対象になるのでメモリだけでなくペリフェラルがマッピングされているアドレス領域も保護対象になりますアドレス空間の中でメモリ領域に限定してトラストゾーンと似たようなことができればいいという場合はSTM32L0 L4マイコンのファイヤーウォールという機能をトラストゾーンの代わりに使いますまたマイコンによってはAESやハッシュなどのアンゴーハードウェアを持っていないものがありこれを補うためSTからアンゴーソフトウェアライブラリーを配布していますフラッシュメモリだけでなくSLAMにもRDP読み出しプロテクションをかけられるSTM32のマイコンはF7H7 L4L5 WBWL G0G4になりますPK-8はパブリック機アクセラレーターの略ですECDSAやRSAなどの公開鍵アンゴー処理の計算を一部ハードウェアで実行しますRSSはルートセキュリティサービスの略ですアンゴー化したファームウェアを工場で書き込む時に使いますOTF DECTOはON THE FLY DECRYPTERの略ですOCT SPI外付フラッシュメモリに記録されているアンゴー化してやる命令コードやデータをメモリー読み出しと同時に解除します以上でSTM32マイコンセキュリティの説明を終わりますここからはSTM32 L5トラストゾーンの概要を話しますARMトラストゾーンとは何かについて説明しますトラストゾーンとはアドレス空間上に簡単にアクセスできない領域を作る仕組みですアドレス空間上で簡単にアクセスできる領域とそうでない領域をアイソレーションしますARMコアテクセムトラストゾーンの場合は内部バス上の通信も監視して不正なアクセスを向こうにしますトラストゾーンが防御対象とする攻撃はソフトウェアによる攻撃になりますこのスライドはARMコアテクセムトラストゾーンのイメージ図ですトラストゾーンは2つの側面でアクセスを監視しアクセスを許可禁止しますまず最初に今の状態でアドレス空間上のそのバンチにアクセスしてもいいのか判定しますそのバンチにアクセスが許可されると次はそのバンチを読み書きすることで内部バスに通信が発生しますそのバスの通信を実行しても良いかどうか判定しますこのスライドはARM社が示すコアテクセムトラストゾーンのモデルです今の状態でアドレス空間上のそのバンチにアクセスしてもいいかはコアテクセム33などのARMコアが内蔵するSAU IDAUというブロックで判定します内部バスに発生する通信を実行しても良いかどうかはトラストゾーンコントローラーとAHBバスで判断しますバス通信の許可禁止についてはARM社は今までの内部バスに信号線を1本追加して対応していますこのスライドはSTM32 L5ではトラストゾーンがどのように実装されているか示していますCPUコアにはコアテクセム33を使います内部メモリやペリフェラルとバスの許可イメンをトラストゾーンコントローラーで監視します内部フラッシュメモリについては独自な実験をしていますフラッシュメモリにはファームエアコードが配置されていて電源投入直後からファームエアの実行攻撃から守る必要があるためですトラストゾーンコントローラーの内部には3つのサブブロックがありますTZICとはトラストゾーンイリーガルアクセスコントローラーの略ですペリフェラルやメモリに不正なアクセスがかかった時に割り込み起こしますMPCBBとはブロックベースとメモリープロゼクションコントローラーの略です内部エスラムのセキュリティ設定を管理しますTZSCとはトラストゾーンセキュリティコントローラーの略ですペリフェラルと外部メモリのセキュリティ設定を管理しますこのスライドはコアテクスM33とグローバルトラストゾーンコントローラーの大まかな役割分担を示していますコアテクスM33はアドレス空間とNVIC割り込みコントローラーのセキュリティを管理しますグローバルトラストゾーンコントローラーはアドレス空間に配置されている内部エスラムやペリフェラルのセキュリティを管理しますペリフェラルの中でもAHBバスにつながっているペリフェラルは単体でトラストゾーンに対応していますそのためAHBバスにつながっているペリフェラルはデバイスレジスターで個別にセキュリティ設定が必要になります該当するペリフェラルはこれらのペリフェラルになりますこれらをトラストゾーンアウェアペリフェラルと呼びますそれ以外のペリフェラルをセキュラブルペリフェラルと呼びますセキュラブルペリフェラルはAHB、APBブリッジでまとめて監視されていますSTM32エルゴマイコンでトラストゾーンが有効になっているときのアクセス許可のイメージですQuartex M33のSAUとIDAUがセキュアファーメイヤーノーマルファーメイヤーのアドレス空間へのアクセスをフィルタリングしますそのアドレスフィルタリングを通った後トラストゾーンコントローラーやナイブフラッシュメモリのセキュリティ設定でそのアクセスを許可するかどうか判定しますどちらも判定がOKのときだけアクセスが成立しますSTM32エルゴトラストゾーンについてソフトウェアの視点で説明しますこのスライドは今までのQuartex Mマイコンでの動作の要素を示していますリアルタイムOSなしでQuartex Mのコントロールレジスタにあるスレッドモードプリビュレッジレベルビットを変更しないままだとプログラムは常に特権モードで動作しますリアルタイムOSありの場合だとOSが起動時にQuartex Mコントロールレジスタのスレッドモードプリビュレッジレベルビットを変更して特権のないユーザーモードに変更してからスレッドの動作を開始します各スレッドは常にユーザーモードで動作して割り込みや例外が発生すると特権モードに切り替わりますハンドラーの処理が完了するとユーザーモードに切り替わります特権モードでないとアクセスできないQuartex Mコアのレジスタがあるためこのケースでは特権モードの領域はユーザーモードの領域から見てアクセスのしにくい領域になりますこのスライドは特権がないとできないことをまとめています特権がないとQuartex Mコアのレジスタの一部にアクセスできませんその結果システィックタイマーが制御できず割り込みや例外の許可禁止の設定や優先度の設定ができずシステムリセット命令を実行できずスリープモードになる命令も実行できませんまたリアルタイムOSのコンテキストスイッチを実現する時に必要な命令の実行が制限されますトラストゾーンなしの今まではアクセスのしにくさは実行レベルが特権レベルかユーザーレベルかの二段階だけでしたトラストゾーンではステートという新たな軸が追加されアクセスのしにくさが四段階になります四つの領域にどんな役割を任せるかどのようなルーチンやデータを配置するかなどをギン見するのがトラストゾーン対応マイコンのファーメアを設計する第一歩ですこのスライドはトラストゾーン対応マイコンでどのように実行モードとセキュリティステートは切り替わるかを示しています実行モードはこれまで通り例外や割り込みが起こると切り替わりますセキュリティステートの切り替わりは二パターンあります一つ目がハンドラーモードで他のステートの割り込みが起きた場合です二つ目がセキュア呼び出しもしくはノンセキュアコールバック呼び出しで他のステートに配置されている関数を実行した場合ですこのスライドは実行モードとセキュリティステートが一度に両方切り替わるパターンを示していますスレッドモードで他のステートの割り込みが起きるとモードとステートが自動で一度に切り替わります割り込み処理が終わると元のステートとモードに戻りますこのスライドはセキュアファームエアプロジェクトとノーマルファームエアプロジェクトの違いをまとめていますセキュアファームエアプロジェクトはこのエプション付きでビルドしますこの拡張オプションによってRMCMCSやST製ハルドライバーのビルド時にセキュアファームエアとノーマルファームエアが使うメモリやペリフェラルのベースアドレスが切り替わりますセキュアファームエアプロジェクトには新しい種類のシステムヘッダーファイルがありこのヘッダーファイルでSAUや割り込みのセキュリティを設定しますこのヘッダーファイルに技術された設定はリセット割り込みハンドラーでで呼び出されるシステムイニット 関数内部で使用されますセキュリティ関連の設定はセキュア ファームエアでしかできないようになっています メインループはセキュア ファームエアではなくノーマルファームエアにあります このスライド はトラストノーン対応マイコンでリアルタイムOSなしで動作 する例を示していますリセットで起動するとまずセキュア ステートの特権モードでファームエアの実行が始まります SAUや割り込み のセキュリティ設定はセキュアステートかつ特権モードの時にしか できません またSTM32エルゴの内部メモリやペリフェイラルのセキュリティ 設定はセキュアステートでしか実行できません このスライドの例では Quatex M33のコントロールレジスタにあるスレッドモードプリビレッジ レベルビットを設定せずにそのままノーマルファームエアにジャンプして 特権モードのノーマルステートでメインループが動作します このスライド はトラストノーン対応マイコンでリアルタイムOSありで動作 する例を示していますリセットがかかると特権レベル のセキュアステートでまず起動します 必要なセキュリティ を設定した後ノーマルステートにジャンプします Rトスが実行モード をユーザーモードに切り替えてOSスレッドを実行します OSスレッドは 特権のないユーザーレベルのノーマルステートで動作します 各スレッド がアイソレーションしたメモリやペリフェイラルにアクセスする 時はセキュア呼び出しを使いますトラストノーン対応ファームエア プロジェクトは2つのプロジェクトで構成しファームエアを開発 管理しますトラストノーン対応ファームエア の基本実行フローの例を示していますマイコンにリセットはかかるとリセット 割り込みがセキュア空間で発生しますセキュア空間のリセット割り込みハンドラー でSAUやNVICのセキュリティを設定します セキュア空間で動作 するセキュアファームエアのメイン関数が実行されます システムクロックを設定し内部エスラムやペリフェイラル のセキュリティを設定しますセキュアファームエアで使うペリフェイラル や割り込みがあればここで書き化します その後でノーマル空間 で動作するノーマルファームエアにジャンプします メインループ はノーマルファームエアで動作します メインループ実行中に セキュア空間に配置されている関数を呼び出すときはセキュア 呼び出すという手続きにしたがって呼び出さないと例外が発生します このスライドはセキュアステートとノーマルステートでどのような 違いがあるかをまとめていますセキュアステートでは予約領域 を除いてアドレス空間全体が見えてアクセスできます �ノーマルステート ではアドレス空間上で見えない領域がありそこにはアクセスできず 無理やりアクセスしようとすると例外が発生します また セキュアステートとノーマルステートはそれぞれ字枚のベクター テーブルシスティックタイマープロセススタックを持っています このスライドはセキュアステートとノーマルステートでアドレス空間 がどう見えるかを描いたものですノーマルステート時には灰色になっている 領域にはアクセスできませんセキュアステートのときペリペラル エスラム フラッシュメモリー領域は同じ大きさで内容も同じ 領域がふたすずつあります青い領域がセキュアステート でのみアクセスできる領域で赤い領域がノーマルステート でアクセスできる領域ですアドレス空間上にそれぞれ領域 がふたすずつありますがうつり的には一つです このスライド の右上の絵は内部エスラムを半分ずつセキュアステートとノーマル ステートに割り当てた例ですセキュアエスラム領域とノーマル エスラム領域のアドレス値は最上位ビットは異なるためアドレス 空間上ではこのようなアドレスマップになりますがうつり的には連続 していますセキュアエスラム領域を簡単にアクセス できないエスラム領域として使いノーマルエスラム領域を今まで通り 自由にアクセスできるエスラム領域として使います セキュア ファームエアを作成する際に青色の領域のアドレスを使う 必要がありますがアームCMCスドライバーやSTが提供 するハルドライバーを使って開発していれば特に気にしなくて 大丈夫ですファームエアのビルド時にそれぞれ の領域のベースアドレスが自動でケアされるようになっています 最後にまとめますセキュリティとは外部の攻撃や 脅威から機外を及ぼされない状態を意味する言葉です 攻撃はソフト エアによる攻撃と物理攻撃の2種類あります 汎用マイコンのセキュリティ機能は主にソフトエアによる攻撃 に対する防御ですSTM32の内蔵セキュリティ機能は 組み合わせて重ねて使うことでセキュリティを強化できます ソフト エアによる攻撃はセキュリティアイソレーションで防ぎます セキュリティアイソレーションを柔軟に実現するための技術 がアームトラストゾーンですSTM32トラストゾーンとはアドレス 空間上に簡単にアクセスできない領域を作る技術です このスライド はSTM32エルゴマイコンを取りやすかえるときのキーポイント を示しています 青く色の付いているキーポイントをパート3 パート4 パート5の演習で体験しますパート2でSTM32エルゴの開発 環境を整備して強化ボードを使うための準備をします オススメの アームV8Mトラストゾーンの参考文件の一覧です 必要に応じてご参照ください オススメのエルゴマイコンのアプリケーションノートの一覧です 必要に応じて ご参照くださいご視聴いただきましてありがとうございました