問題タブ [trust-zone]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
linux - セキュアモードはセキュア/非セキュアメモリにどのようにアクセスできますか?
CortexA プログ ガイドによると
また、TrustZone ハードウェアは、仮想プロセッサごとに 1 つずつ、合計 2 つの仮想 MMU を効果的に提供します。これにより、各ワールドが変換テーブルのローカル セットを持つことが可能になり、セキュア ワールド マッピングが非表示になり、ノーマル ワールドから保護されます。
ページ テーブルの説明には NS ビットが含まれます。これは、アクセスがセキュアまたは非セキュアの物理アドレス空間に対して行われるかどうかを決定するために使用されます。
ページ テーブル エントリ ビットはまだ存在しますが、ノーマル仮想プロセッサ ハードウェアはこのフィールドを使用せず、メモリ アクセスは常に NS = 1 で行われます。したがって、セキュア仮想プロセッサはセキュア メモリまたはノーマル メモリのいずれかにアクセスできます。キャッシュと TLB ハードウェアにより、Normal エントリと Secure エントリの共存が可能になります。
では、アドレス 0xA0000000 [NS] と 0xA0000000[S] にアクセスするために (セキュア モードで実行されている) コードを書き込む場合、どのようにコーディングするのでしょうか?
security - Cortex A8/DM3730 の特権コンテキストから安全な (TrustZone) 命令にアクセスする最も簡単な方法
やらなければならないかなり奇妙なことがあります。安全なコンテキストで実際に実行する必要がないことについて、いくつかの「安全な」指示にアクセスすることです。要するに、セキュア モードに入る必要がありますが、ハードウェア TPM のような機能が必要なためではありません。他の方法ではアクセスできない特定の指示にアクセスする必要があるだけです。
Gumstix Overo FireSTORM COM でこれを行っています。これらが安全に起動することは私の理解ですが、どこか(MLO?u-boot?)で非セキュアモードに切り替わりますが、間違っている可能性があります。要点は、これを確実に非セキュア(ただし特権、以下を参照) モードから実行しているということです。
(私が何をしようとしているのか知りたい場合は、A8 分岐予測子の GHB/BTB への直接アクセスに関するこの質問を作成しました:分岐予測子のグローバル履歴バッファー (GHB) または BTB に直接書き込みます) ARM Cortex A8 の? )
さて、これはすべて u-boot から行われるので (Overo FireSTORM COM があります)、幸運にも実行を「特権」しました。心配はいりません。そして、私は他の StackOverflow の質問を見てきましたが、セキュア モードに到達する正確な方法については何もないようです。私が本当にやりたいことは、いくつかの CP15 レジスタにアクセスしてから、非セキュア モードに戻ることです (そして、プロセスを繰り返す可能性があります)。
SMC命令を調べましたが、呼び出しを適切にトラップする方法/呼び出し先/設定方法などに関するドキュメントが見つかりません.
その情報はどこかにありますか?
要約すると、これが私がやりたいことです:
どんな助けでも大歓迎です!
@artlessnoise のおかげで、u-boot ソースで次のファイルを見つけました: /u-boot/arch/arm/cpu/armv7/nonsec_virt.S。
次のコードが含まれています。
おそらく、mcr p15 命令のマスクを変更すると、非セキュア モードへの移行を単純に「オフ」にすることができます。ただし、これはおそらく u-boot を強制終了します。
問題は、適切なベクトルを設定して、SMC 呼び出しを行ったときにセキュア モードに戻り、GHB/BTB をいじくり回すことができるようにするにはどうすればよいかということです。
その他のヘルプは大歓迎です!
security - ARM トラストゾーンの使用
ARM trustzone についていくつか質問したいと思います。
1.) だれか具体例を教えてもらえますか: trustzone が必要な場合と、それがセキュリティ問題の解決にどのように役立つか?
2.) FIQ は「安全な割り込み」として設定できると聞きました。FIQ ハンドラーが安全な場所に置かれるということですか?
3.) この FIQ セキュア/非セキュア構成はいつ実行されますか? 答えは GIC レジスターのどこかにあると思います。このレジスタを読んで、セキュア/非セキュア FIQ 構成を確認できますか?
ありがとう。
scheduling - TrustZone: 2 つの世界からのスケジューリング プロセス
TZ 対応デバイスにシングル コア CPU があり、2 つのプロセスが実行されている場合: 1 つはセキュア ワールドで、もう 1 つは非セキュア ワールドで実行されています。各プロセスに特定のタイムスライスが割り当てられるように?
assembly - smc 呼び出しの即値はどこに保存されますか?
私は、ARM1176JZF-S プロセッサを搭載したラズベリー pi B+ のトラスト ゾーン拡張に取り組んでいます。
ワールド間の切り替えに使用される smc (Secure Monitor Call) 命令の形式は次のとおりです。
"SMC #imm4" eg : smc #0
smc 例外ハンドラーからこの値を取得しようとしています。私の最初の仮定は、これが R0 レジスタに格納される可能性があるというものでした。しかし、私は渡したものとは異なる値を取得しています。では、この値はどこに保存されているのでしょうか?
security - ARM TrustZone の Secure/Normal world vs. OS のカーネル/ユーザー モードまたは x86 の Ring0/1/2/3?
このTrustZone Security Whitepaperのような文書を読みました。
CPU、メモリなどのすべてのリソースが、セキュア ワールドとノーマル ワールドで分割されていることが記述されています。ノーマル ワールドのプログラムは、セキュア ワールドのリソースにアクセスできません。ノーマル ワールドからセキュア ワールドに切り替える (モニター モードを通過する) には、特別な命令 SMC を呼び出す必要があります。
私が知っているように、Linux のような最近の OS はカーネル モードとユーザー モードを提供します。ユーザー プロセスは、カーネル空間にあるリソースにアクセスできませんが、システム コールを呼び出します。
また、x86 のRing0/1/2/3が、権限レベルの低いプロセスからの無効なアクセスからリソースを保護できることも知っています。
私の質問は、ARM TrustZone のSecure/Normal Worldとkernel/user modeの違いは何ですか。または、TrustZone と x86 の ring0/1/2/3 の違いは何ですか?
ありがとう
質問を編集: 私の質問で保護モードをRing0/1/2/3に置き換えます。
ご協力いただきありがとうございます。より多くのドキュメントを理解し、読むために時間を費やしました。要約すると、TZ は、バス、ペリフェラル、および CPU の NS ビット フラグによってリソースの分離を提供します。
arm - TrustZone 拡張機能を使用するために使用するボード
デュアル実行環境を実装するために、TrustZone テクノロジが有効になっているシングルコア ARM ベースのボードを見つけようとしています (私の TEE となる TrustZone で実行されるマイクロカーネルの横にあるリッチ OS)。インターネットで検索すると、TrustZone 拡張機能が ARM Cortex A8、A9、A15 で有効になっていることがわかりました。ただし、これらのプロセッサを使用するほとんどのボードでは、この拡張機能は有効になっていません。TrustZone が有効になっているボードの名前を教えてもらえますか??
android - QEMU で TrustZone をエミュレートする方法は?
Qemu で TrustZone 機能をエミュレートしようとしています。このプロセスを説明していると思われる 2 つのリンクを見つけました。
First Referenceには、TrustZone をサポートするイメージ カーネルが添付されていません (どこで見つけられますか?)
2 番目のリファレンスでは、カーネルをコンパイルする方法について説明していますが、最初の Web サイトに書かれている次のコマンド ラインでは開始されません。
TrustZone エミュレーターを実行する別の方法はありますか?