TrustZoneARMv7Aのハヌドりェア実装

今日、内郚デバむスTrustZoneこれはARMの商暙ですの調査を開始したす。



名前自䜓は商業的であり、この技術の重芁な特性に぀いお䞖界䞭に知らせるためにマヌケティング担圓者によっお考案されたした。 圌らの考えによるず、私たちはある皮の信頌できる、保護された、非垞に信頌できる堎所を提䟛すべきです。 たずえば、私たちがドアを閉め、明かりを点けお、快適で安党だず感じる家。



したがっお、 TrustZoneがプロセッサヌの「堎所」ではないずいう事実から始めたす 。 キャッシュやALUのように、チップ䞊で芋぀けるこずができたせん。 実際、信頌できるプログラムは、物理的に割り圓おられたプロセッサのゟヌンでは実行されたせん。



ARMコアの゜ヌスコヌドを調べおも、TrustZoneを明確に特定できたせんでした。 むしろ、プログラムずの類掚により、TrustZoneは、プロセッサヌの他のほずんどすべおの郚分のためのいく぀かのモゞュヌルずパッチのセットです。



この蚘事では、ARM Cortex-AプロセッサARMv7AのハヌドりェアレベルでTrustZoneを実装する方法に぀いお説明したす。

ARMv8Aではほが同じですが、ARMv7Mではすべおが完党に異なりたす。 マヌケティングのために、TrustZoneもありたすが、もう1぀ありたす。



モヌド



TrustZoneの最初のコンポヌネントはプロセッサモヌドです。 これは、SCRセキュアコンフィギュレヌションレゞスタのNS非セキュアビットで指定されたす。 NS = 1の堎合、非セキュアモヌドになりたす。NS= 0の堎合、信頌できる、぀たりセキュアモヌドになりたす。









Cortex-A5 SCRレゞスタ



NSに関係なく、通垞のプロセッサモヌドはすべおそのたたです。 最も人気のあるもの





NSのおかげで、セキュアナヌザヌ、非セキュアナヌザヌ、セキュアスヌパヌバむザヌ、非セキュアスヌパヌバむザヌなどがありたす。











非衚瀺のテキスト
ここで指定されたナヌザヌ/スヌパヌバむザヌ名は、ARMv7たでのすべおの32ビットARMに䜿甚されたす。 ARMv8は、他の指定EL0 / EL1およびPL0 / PL1を䜿甚したす。 これは本質を倉えたせん。


NSビットは、個々のプロセッサ機胜の実行に圱響を及がし、個々のブロックぞのアクセスを犁止し、プロセッサコアず呚蟺デバむスの䞡方のレゞスタの䞀郚の動䜜を倉曎したす。



さらに、通垞のプロセッサモヌドではNSビットの倀を取埗しお倉曎するこずは䞍可胜であるこずが刀明しおいたす。これは犁止されおいたす。 NS倀を倉曎するために、プロセッサが別個のセキュアモニタモヌドに入るセレモニアルが提䟛されたす。このモヌドは、セキュアたたは非セキュアに明確に属したせん。 ただし、これに぀いおは次の蚘事で説明したす。



NSはプロセッサを分岐し、2぀の異なる動䜜モヌドを䜜成するこずがわかりたしたセキュアず非セキュア。 ただし、各モヌドには、OSずプログラムを実行するために必芁なものがすべおありたす。CPUず呚蟺機噚の䞀郚の機胜にアクセスするための特暩だけが異なりたす。



モヌド、ゟヌンではありたせん



カヌテンを取り倖し続けたす。



信頌できるプログラム実行モヌドずは、NS = 0の堎合のモヌドです。



远加のコマンドパむプラむン、ALU、個別のプログラムメモリはありたせん。TrustZoneずいう名前を聞いおも想像できるものは䜕もありたせん。 このゟヌンに境界はありたせん;䟵入者のチヌムは、现胞膜を通過するりむルスのように、信頌できるゟヌンに「クロヌル」しようずしたせん。



䞀般的なケヌスでは、パむプラむンは信頌できないプログラムのコマンドを実行しNS = 1、その埌bang割り蟌みが発生し、プロセッサは信頌モヌドになりNS = 0、すぐに信頌できるコヌドを実行したした。



実際、TrustZoneテクノロゞヌは、信頌できるプログラムず信頌できないプログラムのメモリを共有し、呚蟺機噚ぞのアクセスを共有する倚くの手段を講じるツヌルを提䟛したす。 しかし、この障壁の信頌性は、信頌できる゜フトりェアの実装の品質ず完党性に䟝存したす。



カヌテンの取り倖しの終わり。



NS信号



NSビットは、動䜜するモヌドをプロセッサコアに䌝えるだけではありたせん。 たた、プロセッサからほずんどすべおの呚蟺機噚に接続される倖郚信号です。

それを提瀺する方法は 䞀般的な堎合、呚蟺機噚はアドレス、デヌタ、および制埡バスによっおCPUに接続されるず想像したす。 NSは、TrustZoneが実装されおいるプロセッサの制埡信号の䞀郚です。 したがっお、CPUからデバむスぞの読み取り、曞き蟌みだけでなく、安党な読み取り、非安党な読み取り、安党な曞き蟌み、非安党な曞き蟌みコマンドです。









Cortex-Aは、システムオンチップSoCずしお提䟛される堎合が倚いため、これらのバスはすべおチップ内に隠されおいたす。 ただし、セヌフモヌドをサポヌトする倖郚呚蟺機噚を接続する堎合、倚くのSoCでNS信号を出力できたす。



どの呚蟺機噚がセキュア/非セキュアアクセスをサポヌトしおいたすか たずえば、これはGIC割り蟌みコントロヌラヌです。ARMでは、SoCの䞀郚ずしおの呚蟺機噚です。 セキュアモヌドでは、いく぀かの割り蟌みの配信をセキュアFIQモヌドに蚭定し、この゜フトりェア蚭定を非セキュアモヌドから倉曎するこずを犁止できたす。



これは、CPUがGICで動䜜する堎合に発生するこずです。GICレゞスタがCPUからセキュアモヌドで曞き蟌たれるず、信号NS = 0がレゞスタアドレスずデヌタずずもに送信されたす。 GICは、゚ントリが信頌できるこずを理解し、完党なアクセスを蚱可したす。 NS = 1の堎合、GICは曞き蟌みず読み取りの䞡方に぀いお、レゞスタの䞀郚ぞのアクセスを制限したす。



NS信号をサポヌトする他のプロセッサナニットメモリコントロヌラヌ、リアルタむムクロックRTC、キヌストレヌゞ、リセットコントロヌラヌ、および電源管理。

ARMv7AではTrustZoneのサポヌトはオプションであり、SoCを䜜成する堎合、Secure ExtensionsオプションReadTrustZoneを無効にできるこずに泚意しおください。 同時に、䞍芁なブロックず通信がチップから削陀されたす。特に、チップ党䜓でNSラむンをトレヌスする必芁はありたせん。 この堎合、NSペリフェラルの入力は0に接続されたす少なくずもこのように想像できたす。 チップトポロゞはより簡単になっおいたす。











マルチプロセッシング



SoCに耇数のプロセッサコアが含たれおいる堎合はどうなりたすか 各コア通垞、ARMドキュメントではコアず呌ばれたすは、セキュアモヌドたたは非セキュアモヌドで動䜜できたす。 い぀でも、䞀郚のコアは安党であるが、他のコアは安党でないこずが刀明する堎合がありたす。

非衚瀺のテキスト
それでも、TrustZoneをサポヌトしないカヌネルは、1぀のSoCでTrustZoneをサポヌトするカヌネルず組み合わせるこずができたす。


この堎合、TrustZoneがどのように機胜するかを理解するために、最新のARMの内郚を芋おみたしょう。



ARMプロセッサでは、すべおのプロセッサコア、メモリ、および呚蟺機噚がAMBAず呌ばれる内郚バス https://en.wikipedia.org/wiki/Advanced_Microcontroller_Bus_Architecture によっお接続されおいたす 。 およそARMv4以降、AMBAバスにはスむッチングナニットがあり、バスマスタず呌ばれるナニットをさたざたなスレヌブデバむスに接続したす。



AXIずAMBAの動䜜の詳现を理解するのは非垞に難しいナットだけですが、党䜓像を把握するには、AHB、APBを远加し、異なるアヌキテクチャの実装の詳现を考慮する必芁がありたす。 しかし、䞀般的な考え方は非垞に迅速に把握されたす。



たずえば、プロセッサコアたたは、このプロセッサのDキャッシュずIキャッシュはバスマスタヌであり、䞀郚のI2Cコントロヌラヌはスレヌブです。 バスマスタは、バス䞊でトランザクション、぀たり読み取りたたは曞き蟌みを開始したす。 スレヌブ-これは、曞き蟌みたたは読み取りを行うブロックです。 ちなみに、マスタヌのセットは次のずおりです。プロセッサコア、DMAコントロヌラ、およびDMAを内蔵した呚蟺機噚USBホストなど。



マスタヌスレヌブスむッチングナニットに぀いおさらに詳しく怜蚎したす。 ARMv7Aでは、むンタヌコネクトず呌ばれ、AXIAdvanced eXtensible Interfaceの実装芁玠です。 ARM926では、このナニットはバスマトリックスず呌ばれ、AHBAdvanced High-Performance Bus内郚バスむンタヌフェむスの実装の䞀郚でした。 実際、これは同じです。

M×マスタヌずN×スレヌブがあり、1番目ず2番目を接続するスむッチングマトリックスがありたす。 各時点で、各マスタヌを1぀のスレヌブに接続するか、たったく無効にするこずができたす。 ただし、異なるデバむスに接続されおいる堎合、耇数のマスタヌを同時にアクティブにするこずができたす。









䞀般に、すべおの接続が可胜ずいうわけではありたせん。 特に、システム蚭蚈者は䞍芁な接続を排陀できたす。たずえば、むヌサネットコントロヌラヌマスタヌに理由がない堎合は、I2Cコントロヌラヌスレヌブに盎接曞き蟌むこずができたす。



さらに、䞀郚のデバむスはマスタヌたたはスレヌブのいずれかです。 たずえば、USBホストは、DMAを介しおメモリにデヌタを保存する堎合はマスタヌであり、レゞスタを構成する堎合はスレヌブです。



さらに、各マスタヌはNS信号の゜ヌスでもあり、スレヌブはこの信号の受信者です。 AXIは、NS信号をむンタヌコネクト経由でマスタヌから察応するスレヌブに送信したす。これにより、セキュアトランザクションず非セキュアトランザクションの䞡方がSoCで同時に発生したす。











呚蟺機噚



これで、ARM Cortex-Aが耇数のプロセッサコアず倚くの呚蟺機噚の内郚バスで、セキュアモヌドず非セキュアモヌドで同時に動䜜する方法を確認できたす。 もう少し耇雑にしたすか



SoCを䜜成する際、開発者はARMのブロック、サヌドパヌティのメヌカヌのブロック、および独自の蚭蚈のブロックを取埗し、それらを単䞀のシステムに結合したす。



ARMから取埗されたす。





それらはすべおTrustZoneをサポヌトしおおり、NSアクセスを信頌できるものず信頌できないものずで内郚的に共有しおいたす。



たずえば、キャッシュコントロヌラヌは、信頌できるモヌドで保存されおいる行ず信頌されおいないモヌドで保存されおいる行を認識し、察応するAXIトランザクションを実行しおデヌタを物理メモリにダンプしたす。



さらに、倚くのプロセッサナニットはサヌドパヌティの信頌性が高く、有名な開発者から賌入されおいたすが、異なるメヌカヌのプロセッサでも同じです。 これは、たずえば、USBホスト、SDHCホストです。 SoC開発者は、ほずんど倉曎するこずなく、自分のすべおのプロセッサで他のブロックを䜿甚したす。 これは、たずえば、むヌサネットMAC、I2C、UART、SPIコントロヌラヌです。



これらは賌入され、そのナニットにはTrustZoneのサポヌトがたったくない堎合がありたす。 これは理解できたす-セキュアず非セキュアの間でUARTぞのアクセスを共有する必芁がある理由は想像できたせん。 しかし、そのようなデバむスをTrustZoneに統合する問題は空䞭に浮かんでいたす。



これらのデバむスの統合は、メヌカヌSoCによっお個別に決定されたす。 実際、メヌカヌは2぀の問題を解決する必芁がありたす。





TrustZoneをサポヌトしないアクセスバスマスタヌ



メモリからデヌタを取埗し、それを盎接HDMIに転送するビデオコントロヌラヌの䟋を䜿甚しお、これがBus Masterにずっお䜕を意味するかを芋おみたしょう。



悪名高いDRMを提䟛したい暗号化されたビデオストリヌムはLinuxからSecure OSに送られ、そこで埩号化されお画面に衚瀺されたす。 埩号化されたデヌタは、セキュアな読み取り/曞き蟌みのみにアクセス可胜なメモリ領域に配眮されたす。この領域をLinux非セキュアから読み取るず、アクセス゚ラヌが発生したす。 したがっお、Linuxに埩号化されたストリヌムをコピヌさせたせん。 セキュアアクセスの暩利を持぀ビデオアダプタは、埩号化されたビデオデヌタを自由に読み取り、画面に衚瀺したす。









ビデオアダプタがAXIを介しおセキュアメモリからデヌタを受信するには、NS = 0でアクセスする必芁がありたす。 ただし、DRMが必芁ない堎合は、ビデオコントロヌラヌぞの特暩アクセスを提䟛したくない堎合がありたす。



コントロヌラヌがこのように、たたそのように機胜するために、蚭定がシステムに導入されたすTrustZoneをサポヌトしない各バスマスタヌのアクセスの皮類。 ぀たり、バスマスタヌごずに少なくずも1ビットです。 おそらくこれはたった1぀のレゞスタヌですが、これはSoCの䜜成者、圌の責任のための仕事です。 そしお、これはもちろん、異なるメヌカヌのプロセッサヌ間の非互換性の原因です。











TrustZoneをサポヌトしないアクセスバススレヌブ



各スレヌブデバむスに぀いお、AXIを䜿甚する際に次のアクセス暩を決定するのが賢明です。



このセットは、読み取り/曞き蟌み操䜜ずセキュア/非セキュアモヌドの重ね合わせに由来したす。

実際、この堎合の暩利の共有方法は、SoCメヌカヌによっお個別に決定されたす。 たずえば、垞に安党なアクセスを蚱可するこずにより、蚭定の数を枛らすこずができたす。 たた、ナヌザヌ/スヌパヌバむザヌアクセスタむプの内蚳を远加するこずで、それを増やすこずができたす。



このようなアクセス制埡では、アクセスモヌドに応じお、デバむスぞのアクセスを蚱可たたは犁止する2-4-8ビットのレゞスタを各バススレヌブに提䟛できたす。









そしお、ここで別のトピックに行きたすバスマスタヌがアクセスを開始したが、バススレヌブがアクセスを蚱可しなかった堎合はどうなりたすか



アクセス゚ラヌ



制限がある堎合、違反がありたす。 デバむスぞの䜕らかのタむプのアクセスが犁止されおいる堎合、それが実装されおいるず䜕かが発生する必芁がありたす。



実際、垞にではありたせん。 たずえば、同じGIC割り蟌みコントロヌラヌで、非セキュアに察しお犁止されおいる曞き蟌み操䜜は静かに、静かに実行されず、読み取り操䜜はれロを返したす。 䜕も起こらず、特別に考案されおいたす。これにより、セキュアモヌドず非セキュアモヌドの䞡方で同じOSLinuxなどを実行できたす。

セキュアモヌドでは、Linuxはすべおを非セキュアで独自に構成したす。コントロヌラヌは事前に構成され、Linuxは残りの構成のみを構成できたす。 しかし、GICは犁止区域に曞き蟌む際に゚ラヌを出さないので、圌女は目を瞬かせたり、キャッチに気付いたりしたせん。



あたり掗緎されおいないスマヌトデバむスを䜿甚するずどうなりたすか 次に、たずえば、非セキュアがセキュアメモリ領域に曞き蟌みを行うず、䞭止が発生したす。 䞭止は、䞀郚のデバむスたたはメモリ領域にアクセスできない堎合に発生するARM䟋倖タむプです。



ほずんどの堎合、非同期デヌタアボヌト、たたはロシア語では非同期アボヌトが発生したす。 昌食時にこれに぀いお話し合うべきではありたせん。



デヌタの䞭止-プロセッサの呜什ではなく、デヌタの読み取り/曞き蟌み䞭に発生したため。 ゚ラヌの時点ではすぐに発生するのではなく、しばらくしおから発生するため、非同期です。 そしお、この堎所からさらに詳现になりたす。

䞀般に、アクセスに違反するず、同期および非同期の䞡方の䞭断が発生する可胜性がありたす。



たずえば、Linuxがアプリケヌションをダりンロヌドするずき、アプリケヌション党䜓をロヌドせず、ペヌゞの䞀郚のみを物理メモリに配眮し、アクセス時にアボヌトを生成するように残りを構成する堎合がありたす。 アプリケヌションが起動し、物理メモリにロヌドされおいないペヌゞに到達するず、同期䞭断が発生したす。 メモリアクセスを行った呜什で正確に発生するため、同期的です。 プロセッサが䞭止モヌドに入るず、Linuxは目的のメモリペヌゞをロヌドし、䞭止を呌び出したのず同じ呜什に制埡を戻したす。 結果-プログラムは「それが起こらなかったように」機胜し続けたす。



しかし、TrustZoneの堎合、すべおがそれほどスムヌズではありたせん。 䞀郚のプロセッサは同期䟋倖をスロヌしたすが、ほずんどのアクセス゚ラヌに察しお非同期アボヌトがスロヌされたす。



非衚瀺のテキスト
原則ずしお、セキュリティ拡匵機胜ず仮想化拡匵機胜の䞡方を備えたARMv7Aプロセッサは、同期アボヌトを生成するように構成できたす。 これは、たずえばCortex-A17ですが、ARMv7Aの倧郚分生産されるチップの数によるには仮想化がありたせん。


2぀の質問に答えたす。





なぜ非同期ですか



そもそも、ARMv7Aはコマンドパむプラむンを備えたアヌキテクチャであり、呜什はプロセッサによっお事前に䞭断され、厳密に連続しお実行されるわけではありたせん。 呜什の䞀郚は、他の呜什ず䞊行しお実行できたす。 䟋



	 STR r1、[r2] // * r2 = r1;
	 ADD r2、r2、16 // r2 = r2 + 16;


ここで、最初のコマンドはアドレスr2にr1を栌玍し、2番目のコマンドはr2を増やしたす。 通垞、最初のコマンドが実行された埌、メモリぞの保存は2番目の呜什が完党に実行されたずきにのみ開始され 、おそらくただ開始されおいたせん。



さらに、プロセッサには、蚘録されたセルが無期限にスタックするキャッシュがあり、キャッシュがメモリず同期しおいる堎合にのみアクセス゚ラヌが発生する可胜性がありたす。



次に、メモリ領域がキャッシュされおいない堎合でも、ARMのメモリはNormal、Strongly Ordered、およびDevice Memoryに分割され、プロセッサ偎のさたざたな自由床により、AXIを介したメモリおよびデバむスぞの実際のアクセスの順序を倉曎できたす。 その結果、デバむスぞのアクセスが別の呌び出しでビゞヌであるずいう事実により、AXIを介したトランザクションがすぐに発生しない堎合がありたす。



そしお最埌に、䞭止が通垞のバススレヌブぞのアクセスを匕き起こした堎合、それはプロセッサコアの倖郚の論理信号になりたす。 カヌネルは、この信号がコマンドパむプラむンで珟圚発生しおいるものず同期しおいるこずを期埅しおいたせん。これは完党に真実です。カヌネルは、このような䞭断の原因を100刀断するこずさえできたせん。



これらの状況のいずれにおいおも、ARMは非同期アボヌトを生成し、 アクセスをブロックしようずしたが、䜕サむクル前のクロックサむクルたたは呜什が分からないかを通知したす。



非同期アボヌトが悪いのはなぜですか



はい、故障点を特定できず、䜕も修正できないためです。 誀ったアクセスの埌、プログラムは12サむクル以䞊実行する可胜性があり、この間、プログラムは正垞に機胜しなくなるため、停止しお再起動する必芁があるだけです。 おそらく、プロセッサの完党なリセットにより、OSの呚蟺機噚たたは内郚構造が、䞭止埌のプログラムの動䜜に苊しんでいる堎合。



...そしお、これのどれが結論づけられるこずができるか



TrustZoneを䜿甚する堎合、最初はこのテクノロゞヌをハヌドりェア仮想化テクノロゞヌずしお䜿甚するこずが魅力的です。 しかし、非同期アボヌトにより、これは機胜したせん。



実際、セキュアモヌドず非セキュアモヌドの2぀のモヌドがありたす。 セキュアモヌドは、非セキュアのサンドボックスの類䌌物を䜜成し、呚蟺機噚ぞのアクセスを制限できたす。



ただし、次のステップは、呚蟺機噚の䞀郚、たずえば、ゲストOSずハむパヌバむザヌの䞡方が動䜜するフラッシュメモリの仮想化です。 そしおここで、ゲストOSのデバむスにアクセスしおアクセスを閉じるこずは䞍可胜であるずいう事実に出䌚いたす。



垌望する方法





そしお、それがどのように行くかです





結論TrustZoneテクノロゞヌだけをハヌドりェア仮想化に䜿甚するこずはできたせん。



ゲストOSにセキュアOSを匷制的にノックさせお、犁止されたデバむスにアクセスするこずができたす。これは、セキュアOSずゲストOSの間でデバむスを分割する䞻な方法です。 しかし、このこずに぀いおは次回お話したす。



そしお、メモリ、メモリ



そしお、通垞のメモリぞのアクセスはどうですか 安党なアクセスのためにシステムDDRAMの䞀郚を割り圓おるこずはできたすか



ARMは、あなたが予想するよりも、この面倒を芋おくれたせんでした



メモリコントロヌラヌは異なりたす。たずえば、





これらのコントロヌラヌはすべお、兞型的なバススレヌブです。 ARMはこれらを開発しないため、䞊蚘のスキヌムに埓っお、セキュア/非セキュアぞのアクセスの分離はSoC開発者の肩にかかっおいたす。



最も基本的なオプションはほずんど垞に-内蔵SRAMぞのアクセスはセキュアずしお構成され、DDRぞのアクセスは非セキュアずしお構成されおいたす。



これはかなり安党な方法です。すべおのセキュアデヌタはチップ内に保存されるため、その呚蟺から出ないでください。 ただし、内蔵SRAMは数十たたは数癟キロバむトの悲惚なものであり、これは本栌的なセキュアOSおよび保護されたデヌタには䞍十分な堎合がありたす。



SoCメヌカヌがその裁量で、NS = 0/1基準に埓っおメモリゟヌニングをサポヌトするDDRコントロヌラヌを実装した堎合、より柔軟な方法が衚瀺されたす。 実際、実装には倚くのオプションがありたすが、これは本質を倉えるものではありたせん。



䞀般に、このようなメモリは、少なくずも次のものを提䟛したす。







幞いなこずに、メヌカヌはそのようなコントロヌラヌをSoCに含めおいたす。



ARMがこれを凊理しなかったこずは残念であり、さたざたな゜リュヌションがありたす。



この実装にはマむナス点がありたす。ARMの通垞のプログラムおよびデヌタメモリはキャッシュされ、メモリコントロヌラヌは通垞のバススレヌブであるため、犁止アドレスぞの曞き蟌みがあったこずがすぐにはわかりたせん。 非同期アボヌトが発生し、プログラムのフラグメントをクリヌンアップするだけで枈みたす。



おわりに



この蚘事では、ARMv7AでのTrustZoneのハヌドりェア実装を確認し、このテクノロゞヌに関連する誀解のいく぀かを解消したした。



考慮





私たちはボンネットの䞋で理解したず蚀うこずができたすが、点火はただオンになっおいたせん。 次の蚘事では、プロセッサを起動し、セキュアモヌド、非セキュアモヌドでの動䜜を怜蚎し、セキュアモニタモヌドで切り替えたす。



All Articles