JP6272875B2 - データ・プロセッサ内の異なる操作ドメイン間を切り替える安全な手段 - Google Patents

データ・プロセッサ内の異なる操作ドメイン間を切り替える安全な手段 Download PDF

Info

Publication number
JP6272875B2
JP6272875B2 JP2015533687A JP2015533687A JP6272875B2 JP 6272875 B2 JP6272875 B2 JP 6272875B2 JP 2015533687 A JP2015533687 A JP 2015533687A JP 2015533687 A JP2015533687 A JP 2015533687A JP 6272875 B2 JP6272875 B2 JP 6272875B2
Authority
JP
Japan
Prior art keywords
instruction
domain
data
safety
guard
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
JP2015533687A
Other languages
English (en)
Other versions
JP2015534689A (ja
Inventor
クリストファー グロカット、トーマス
クリストファー グロカット、トーマス
ディヴィッド バイルズ、スチュアート
ディヴィッド バイルズ、スチュアート
ジョン クラスク、サイモン
ジョン クラスク、サイモン
Original Assignee
エイアールエム リミテッド
エイアールエム リミテッド
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by エイアールエム リミテッド, エイアールエム リミテッド filed Critical エイアールエム リミテッド
Publication of JP2015534689A publication Critical patent/JP2015534689A/ja
Application granted granted Critical
Publication of JP6272875B2 publication Critical patent/JP6272875B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/60Protecting data
    • G06F21/62Protecting access to data via a platform, e.g. using keys or access control rules
    • G06F21/629Protecting access to data via a platform, e.g. using keys or access control rules to features or functions of an application
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/14Protection against unauthorised use of memory or access to memory
    • G06F12/1458Protection against unauthorised use of memory or access to memory by checking the subject access rights
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/52Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/52Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow
    • G06F21/54Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow by adding security routines or objects to programs
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/55Detecting local intrusion or implementing counter-measures
    • G06F21/554Detecting local intrusion or implementing counter-measures involving event detection and direct action
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/70Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer
    • G06F21/71Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer to assure secure computing or processing of information
    • G06F21/74Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer to assure secure computing or processing of information operating in dual or compartmented mode, i.e. at least one secure mode
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30072Arrangements for executing specific machine instructions to perform conditional operations, e.g. using predicates or guards
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2221/00Indexing scheme relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F2221/21Indexing scheme relating to G06F21/00 and subgroups addressing additional information or applications relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F2221/2105Dual mode as a secondary aspect

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Mathematical Physics (AREA)
  • Health & Medical Sciences (AREA)
  • Bioethics (AREA)
  • General Health & Medical Sciences (AREA)
  • Storage Device Security (AREA)

Description

本発明は、データ処理の分野に関し、詳細には、安全性の異なるドメインを使用するデータ処理装置及び方法に関する。
多くのデータ処理システム及びアーキテクチャは、機密データ及びコードのセクションを、権限のない人又は処理によるアクセスから隔離して保護する方法を提供する。安全性を提供できることは重要であるが、この保護に関連付けられる性能及び回路領域にオーバーヘッドがある。
データ及びコードを安全に維持する1つの方法は、TrustZone(登録商標)アーキテクチャを有する英国、ケンブリッジのARM(登録商標)によって提供され、TrustZoneアーキテクチャでは、安全状態と非安全状態とが存在し、状態間を移行するために例外命令が使用され、例外ハンドラは安全側の安全性を保護する。この手法は高度な安全性を提供するが、安全性状態を変更するためにソフトウェア例外ハンドラの形で相当なソフトウェア介入を行う必要があり、ソフトウェア介入は、システムの性能を低下させるとともに、すべての呼出しが例外ハンドラを通じてプロキシされなければならないため、安全ソフトウェア用の外部アプリケーション・プログラム・インターフェースAPIを開発するために必要な労力量を増加させる。
マイクロコントローラなどの小型システムの場合、TrustZoneシステムに存在するオーバーヘッドは許容できない場合があり、したがって、安全性を損なうことなく性能の向上を提供する、状態間を移行するための異なる方法を見つける必要がある。
低安全ドメインから、オーバーヘッドが比較的低く、安全状態への複数のエントリ・ポイントを可能にする、高安全ドメインへ切り替える1つの方法は、パブリック・ドメインからプライベート・ドメイン内の関数に分岐する分岐命令を使用する。関数は、開始時に、それを呼び出している処理が、関数を呼び出すことを許可する十分な特権を有することを確認する安全性確認ルーチンを含むことができ、したがってパスワードがあってもよく、他の確認が実行されてもよい。
この確認を回避する1つの方法は、安全性確認ルーチンを越えたポイントでコードに分岐することであろう。別の攻撃は、関数の終わりに向かってプライベート関数に分岐することを含む場合があるが、これは関数がパブリック側に分岐して戻る前に1つ又は2つの命令の実行をもたらすにすぎない場合がある。しかしながら、これを複数回実行することができる場合、関数は、リターン指向プログラミングと呼ばれるものの中に構築することができる。
英国、ケンブリッジのARM Ltdに与えられた米国特許第8010772号は、関数の先頭に配置される許容命令(permitted instruction)を利用してそのような関数の途中にジャンプする攻撃者の能力を阻害する方法を開示しており、処理回路は、低安全ドメインからの分岐命令が、高安全ドメインに分岐する場合、この許容命令に分岐することを確認する。このシステムの欠点は、プロセッサが、許容命令に送信した命令は、低安全ドメインからの分岐命令であったことが分かることを必要とすることである。
米国特許第8010772号
図1は、パブリック側から、プライベート側の許容命令PGへの分岐があるプログラム・コードの実例を示している。図1に示されるように、分岐命令と許容命令との間に例外が発生し、これはPG命令の前に実行されるべき例外ハンドリング・コードを生じさせるので、プロセッサは、どの命令がそれを分岐させたかを、どのような直接的な方法でも決定することができなくなる。この時点で発生した例外の問題に対処する1つの方法は、たとえ例外が発生しても、後の命令が、低安全ドメインからの分岐が先に生じており、まだ確認されていないことが分かるようにするために、分岐命令が実行されるときに設定され得るフラグを使用することである。しかしながら、フラグ自体が改ざんされる可能性があるので、これは潜在的な安全性への影響につながる。
効率的な処理方法で、状態間の切替えの安全性を向上することが望ましい。
第1の態様から見ると、本発明は、
プログラム命令に応答して、データ処理操作を実施するための処理回路であって、異なる安全レベルを有する操作の複数のドメインを有し、安全ドメイン及びさらなる異なる安全ドメインを備え、前記安全ドメイン内で動作するときに、前記さらなる異なる安全ドメインではアクセスすることができない少なくともいくつかのデータにアクセスすることができる処理回路と、
データと命令とを格納するためのデータ・ストアであって、各領域が操作の前記複数のドメインのうちの1つに対応する複数の領域を備え、また、前記安全ドメイン内で動作している前記データ処理回路によってアクセスすることができ、前記さらなる異なる安全ドメイン内で動作している前記データ処理回路によってアクセスすることができない、機密データを格納するための少なくとも1つの安全領域と、機密性の低いデータを格納するための低安全領域とを備えるデータ・ストアとを備える、データ処理装置を提供し、
前記処理回路は、
実行されるべきプログラム命令のために、前記プログラム命令を格納している前記データ・ストアの領域が、前記処理回路の操作の現在のドメインに対応することを検証し、
前記処理回路の操作の前記現在のドメインに対応しない前記データ・ストアの領域に前記プログラム命令が格納されていることを検出することに応答して、
前記プログラム命令がガード命令を備えるかどうかを検証し、
前記プログラム命令が前記ガード命令を備える場合、操作の前記ドメインを、前記プログラム命令を格納している前記データ・ストアの前記領域に対応するドメインに切り替え、
前記プログラム命令が前記ガード命令を備えない場合、安全性違反表示を生成するように構成されている。
本発明は、異なる安全ドメイン間で処理を切り替えるときに生じる安全性への影響を認識し、そのうちのいくつかは異なる安全レベルを有する場合がある。この点で、多くの処理回路は、異なる安全レベルを有するドメイン内で動作し、高安全ドメイン内で動作しているときにのみ利用可能であるいくつかの機密データにアクセスする。異なるドメインは異なるレベルの安全性を有していてもよく、同じレベルの安全性を有しているが、相互から分離されている、兄弟ドメインであってもよい。一般的に、高安全ドメインにおける処理操作は、メモリの低安全領域内のデータにアクセスすることができ、またそれに対応して、メモリの安全領域内のデータにアクセスすることができる。異なるが、同じ安全レベルを有する、兄弟ドメインが存在する場合、それらは両方とも、データ・ストアの同じ低安全領域にアクセスすることができるが、それらのドメインに対応しないが、兄弟ドメインに対応する、安全レベルのメモリの領域に格納された同じ機密性のデータにアクセスすることはできない。処理されているプログラム命令は、データ・ストアの異なる安全領域にも格納され、現在実行されている命令が格納されているデータ・ストアの領域の安全レベルが格納され、一般的に操作の現在のドメインの安全レベルに対応する。この点で、兄弟ドメインに対応するメモリの領域もある。したがって、処理回路が、実行されるべき命令が、異なるドメインに対応する領域から、操作の現在のドメインの領域に取り出されたと決定する場合、これは、問題がある、又は、取り出された命令がガード命令である場合はドメイン切替えが発生するべきであるという表示である。
この点で、操作の現在のドメインの安全レベルよりも高安全であるデータ・ストアの領域に格納された機密データは、処理回路にとってアクセス可能ではなく、高安全領域、又は安全兄弟領域に格納された命令がフェッチされ得ることができる点に留意されたい。これは、命令フェッチはデータ・アクセスが提示するものと同じ安全性への影響を提示せず、命令フェッチはソフトウェアにとって不可視であるので、データ・アクセスと命令フェッチとでは、アクセス許可が異なるように設定されているためである。高安全領域、又は異なる安全領域に格納されたフェッチ命令に関連付けられる安全性への影響はない可能性があるが、それらを実行することに関連付けられる安全性への影響がある可能性がある。
したがって、命令をフェッチする際に、それがフェッチされたデータ・ストアの領域が操作の現在のドメインに対応するか確認するために、確認が行われる。対応しない場合、プログラム命令がガード命令か否かが決定される。プログラム命令がガード命令である場合、処理回路は、ガード命令が取り出されたデータ・ストアの領域に対応する操作のドメインに切り替えて、プログラム命令がガード命令ではない場合、安全性違反表示が生成される。
このように、分岐によってトリガされる、異なるドメイン内の命令へのドメイン切替えは、ガード命令を介してのみ許可される。これによって、ドメイン内の切替えは、ガード命令に到着する方法についての何らかの知識を有することを処理回路が必要とすることを回避しながら、ガード命令だけで生じることが確実になる。処理回路は、単に、操作の現在のドメイン、及び実行されるべき次の命令が格納されている領域に対応するドメインを知るだけでよい。これは、ガード命令がアクセスされる後までドメイン切替えが発生しないのでうまくいき、したがって、切替え前の操作のドメインは、それが操作の現在のドメインであるので知られており、ガード命令の存在は、切替えが許容可能であることを示すのに十分である。さらに、命令の確認をトリガするのは、操作の現在のドメインに対応しないメモリの領域からの命令のフェッチ、及びそれがガード命令である場合は可能なドメイン変更なので、確認及びドメイン変更は、単一の原子操作(atomic operation)として実行され、それは、操作は途中で中断することができないことを意味する。
異なるドメインに対応する領域内にあり、またガード命令ではない命令がアクセスされると、安全性違反表示が生成される。
これは、ドメイン及びデータ・ストアは対応する安全レベルを有する場合があるが、1対1の関係がない場合がある点に留意されたい。この点で、処理回路の操作のドメイン内よりも、データ・ストア領域内に高安全レベルが存在し得る。しかし、各領域はドメインに対応し、したがって、パブリック・ドメインとプライベート・ドメインの2つの処理ドメイン、並びにパブリック・ドメインに対応するパブリック領域、及びそれぞれプライベート・ドメインに対応する、異なる安全性レベルを有するメモリの3つの異なる安全領域のデータ・ストアの4つの領域があってよく、プライベート領域のうちのいずれかに格納されたガード命令が、プライベート・ドメイン内の処理の切替えをトリガする。
ある実施例では、さらなる異なる安全ドメイン及び安全ドメインは、同じ安全レベルを有する兄弟ドメインでよく、他の実施例では、すべてのドメインが異なる安全レベルを有し、前記さらなる異なる安全ドメインは、前記安全ドメインよりも低安全であるドメインを備える。
いくつかの実施例では、前記処理回路は、前記処理回路の操作の現在のドメインの前記安全レベルよりも高安全レベルを有する前記データ・ストアの領域に前記プログラム命令が格納されていることを検出することだけに応答して、前記プログラム命令がガード命令を備えるかどうかを検証するように構成されている。
いくつかの実施例では、操作の現在のドメインの前記安全レベルよりも低安全レベルであるドメインに対応する前記データ・ストアの領域に格納されている前記プログラム命令に応答して、前記処理回路は、前記命令が前記ガード命令を備えるかどうかにかかわらず、操作の前記ドメインを、前記低安全レベルに切り替えるように構成されている。
一般的に、ガード命令は、異なる安全レベル間の切替えを制御するために使用され得るが、いくつかの実施例では、ガード命令は、低安全ドメインから高安全ドメインに切り替えるときにのみ使用される。安全性問題は、低安全ドメインから高安全ドメインに切り替えるときに、より頻繁に発生することは明らかであり、したがって、この切替えでは、実行する必要があるあらゆる安全性確認を実行できるようにするために、あらかじめ定められたポイントで切り替えることが重要である。したがって、低安全ドメインから高安全ドメインへの切替えを制御するために、ガード命令は特に有用であり、場合によっては、命令の領域が高安全レベルであり、低安全レベルへのドメイン切替えが常に許可される場合、処理回路だけがガード命令を確認する。
しかしながら、特に3つ以上のドメインがある他の場合では、低安全ドメインか高安全ドメインのいずれかから非常に安全であるドメインへの切替えは、同じ方法で実行される場合、すなわちガード命令を介する場合、効率的に管理される。この対称性があれば、そのような切替えを制御するためのソフトウェアの書込みをより簡単にし、コードをより効率的にする。
いくつかの実施例では、例外を生成して、フォールト・ハンドリング・コードを実行するために、前記処理回路が前記安全性違反表示に応答する。
異なるドメインに対応するデータ・ストアの領域からの命令がガード命令ではない場合、異なる安全操作が実行され得る。たとえば、例外が生成されてよく、次いで、現在実行されているソフトウェアがおそらく攻撃ソフトウェアであり、プロセッサの安全側へのアクセスを許可するべきではないことを認識するフォールト・ハンドリング・コードが起動されてよい。高安全システムでは、プロセッサのシャット・ダウン、又は、極端な場合では、回路自体の破壊などの、他の操作が実行されてよい。
いくつかの実施例では、前記処理回路は、異なる長さの命令を有する命令セットからプログラム命令を実行するように構成され、前記処理回路によって必要とされる命令アドレス整列は前記異なる長さに依存し、前記ガード命令の長さは、ガード命令の先頭が前記プログラム命令のうちの1つの中の前記アドレス整列ポイントのサブセットのうちの少なくとも1つに配置されている場合、前記ガード命令の一部が次の命令の先頭と重複するほどの長さである。
他のコードを使用して、ガード命令を誤って模倣することができないことは、明らかに重要である。命令セットが異なる長さの命令を有する場合、処理回路は、異なる長さの命令によって支配される、あるアドレス整列ポイントで命令にアクセスすることができる。命令は、これらのアドレス整列ポイントのうちの1つの途中でアクセスされることがあり、これは、長さが異なるために命令内で時々発生する。これは、命令セットは、ガード命令が他の命令と比較して一意のコードを有するように書かれていることがあるが、ある命令の一部と比較すると一意ではない場合があるので、問題を引き起こす場合がある。これは命令の先頭ではないアドレス整列ポイントのうちの1つで命令に分岐することによって、異なる安全ドメインに不注意なエントリ・ポイントを提供することがある。リターン指向プログラミング攻撃を実行する際に、命令に意図的に分岐することによって有用なコード・シーケンスを見つけることは、一般的な技法である。
ガード命令を模倣することができない隣接する命令の部分の命令の組合せのどの部分も、ガード命令のために大量の符号化空間が予約されることを必要とする場合があることを保証する。この潜在的な問題は、十分に長いガード命令を提供することによって対処されるので、別の命令内で開始する場合、次の命令の先頭と重複することがある。このように、不注意に模倣されないようにするためにガード命令のために予約されなければならない符号化空間の量が減少する。
ある実施例では、たとえばいくつかのアドレス整列が符号化制約のために模倣ハザードをもたらさない場合、考慮されなければならないのはアドレス整列ポイントのサブセットだけでよいが、他の実施例では、別の命令内で開始する際に次の命令との重複を保証するためにガード命令の必要な長さを決定する際に考慮されなければならないのはすべてのアドレス整列ポイントでよい。
場合によっては、これは、ガード命令の長さが、命令セットからの最長プログラム命令の長さと等しいことを意味する。
上記は、たとえば、2つの長さの命令があり、一方は他方の2倍であるケースの可能性がある。そのような場合、命令が命令の先頭と正確に整列しない場合、常に次の命令と重複することを保証するために、最長プログラム命令の長さを有する必要がある。
いくつかの実施例では、前記処理回路によって必要とされる前記アドレス整列と整列する場合、前記命令セットから別の命令と重複し得る前記ガード命令の任意の部分の値は、前記命令セットからの他の任意の命令の有効な操作コードでもなく、操作コードの先頭でもない。
不注意な模倣を回避する1つの方法は、別の命令と重複し得るガード命令の任意の部分の値が、命令セットからの他の任意の命令からの有効な操作コードでもなく、操作コードの先頭でもないことを保証することによるものである。ガード命令のために予約される必要がある符号化空間の量は、そのよう場合、ガード命令と重複する操作コードの一部だけがあり、したがって、この部分も、ガード命令を不注意に模倣しないように予約される必要がある場合があるので、命令の非整列可能性とともに増加する。
これに対処する1つの方法は、命令アドレス整列ポイント間の最小距離の長さと等しい部分のガード命令を符号化して、次いでこれらの部分に同じ値を提供することである。他の命令と重複するのはこの値なので、同じ値が使用される場合、他の命令の操作コード又は操作コードの先頭として使用するために回避される必要があるのはこの値だけである。このように、ガード命令のために予約される符号化空間の量が減少する。
場合によっては、2つの命令長を有し、一方は他方の2倍である場合があり、ガード命令は2つの部分を備え、実際には対称であり、2つの部分における値は、命令セットにおける他の命令のうちのいずれかの操作コード又は操作コードの先頭によって使用される値ではない値である。
いくつかの実施例では、前記同じ値は、前記命令セットからの他の任意の命令の有効な操作コードでもなく、操作コードの先頭セグメントでもない。
前述のように、この同じ値は、前記命令セットの他の任意の命令の有効な操作コードであるべきではなく、実際には、操作コードの先頭セグメントであるべきでもない。
いくつかの実施例では、前記データ・ストアは、ガード命令と同じ値を有するプログラム・コード内のリテラルとして、どのデータ値も格納しないように構成されている。
命令セットからの命令の操作コードが、ガード命令を不注意に模倣することを停止することが1つであるが、いくつかのプログラム・コードでは、データ値はリテラルとしてプログラム・コード内に格納され、これらのリテラルは、コード内の命令によってアクセスされる様々なアドレスに格納されている。この種類のプログラム・コードでは、リテラルも攻撃の間の分岐のターゲットでよく、したがって、これらのリテラルもガード命令を不注意に模倣しないことが重要である。したがって、いくつかの実施例では、どのデータ値も、ガード命令と同じ値を有するプログラム・コード内にリテラルとして格納されないことを保証するための処理がある。
いくつかの実施例では、一致するリテラルの生成は、コード生成時間で回避され得る。たとえば、コンパイラは、リテラル・プール内の一致するリテラル値を放出する要件を削除するために、リテラル・アクセスが一致するリテラルをフェッチして、生成されたコードを変更するケースを検出するように構成され得る。ある実施例では、コンパイラは、データ処理操作を使用して、いくつかの非一致リテラル・アクセスの値を結合することによって、プロセッサ・レジスタ内に所望の値を形成することができる。たとえば、一致するリテラルが4の場合、これを2×2に変更することができる。別の実施例では、コンパイラは、即時移動(move immediate)のシーケンス及びデータ処理操作を使用することによって、所望の値を形成することができる。
いくつかの実施例では、実行可能なプログラムは、ガード命令と同じ値を有するリテラル値を検出するために、スキャンされたポスト・ジェネレーションでよい。いくつかの実施例では、スキャニング処理は、プログラム開発処理の一部でよく、ソフトウェアを配布する前に確認として使用されてよい。他の実施例では、スキャニング処理は、実行するためにロードされた、一致するリテラル値が発見されると、プログラムが実行されることを防止する効果を有する、実行可能な処理として実行されてよい。
いくつかの実施例では、前記データ処理装置は、前記データ・ストアの少なくとも1つのあらかじめ定められたセクションが、前記ガード命令を有効に格納することを許可されるように前記データ・ストアをセグメント化するように構成されており、前記データ処理回路は、前記少なくとも1つのあらかじめ定められたセクションではない、前記データ・ストアのセグメント内に配置された前記ガード命令を検出することに応答して、安全性違反表示を生成するように構成されている。
ガード命令が不注意に模倣されることを防止する別の方法は、データ・ストアをセグメント化して、あらかじめ定められたセクションだけに格納することである。これが行われると、ガード命令を不注意に格納していないことを確認するために監視される必要があるのはこれらのセクションだけである。ガード命令に分岐する際、アクセスされるデータ・ストアの領域があらかじめ定められたセクションであることを確認するために確認が行われ、あらかじめ定められたセクションではない場合、安全性違反表示が生成される。これによって、リテラルの形態でガード命令を格納しないが、データ・ストアをセグメント化して、このセグメント化を何らかの方法で示す必要性のオーバーヘッドを有することを保証するために確認される必要があるコードの量が減少する。
いくつかの実施例では、低安全コードによって呼び出すことができる前記プログラム・コードの一部は、前記少なくとも1つのあらかじめ定められたセクションに格納されている。
ガード命令は、コードのある部分でのみ発生する。ガード命令が、低安全ドメインから高安全ドメインへ切り替えるためだけに使用されるいくつかの実施例では、コードのこの部分は、低安全関数によって呼び出すことができるコードである。この場合は、コードのこれらの部分をあらかじめ定められたセクション内に格納することは、ガード命令がこれらのセクション内に常に配置されていることを意味する。
代替で、及び/又はさらに、前記データ・ストアは、前記少なくとも1つのあらかじめ定められたセクションに命令だけを格納するように構成されている。
前述のように、命令がガード命令を不注意に模倣することを回避することは非常に簡単であるが、データ・リテラルは任意の値を有することができるので、データ・リテラルがガード命令を不注意に模倣することを回避することはより困難である。したがって、これに対処する1つの方法は、データ・ストアを、ガード命令を発見することができ、命令だけが格納され得る、あらかじめ定められたセクションにセグメント化することである。言い換えれば、データ・リテラルはこれらのコードのセクションでは許可されない。内部にデータ・リテラルを有することを回避するためにコードをコンパイルすることは、コードのサイズ及び速度に著しい影響がある。しかしながら、このようにコンパイルする必要があるガード命令を含むことができるのがコードのあるセクションだけの場合、性能及びコード・サイズへの全体的な効果は低い。
いくつかの実施例では、前記データ処理装置は、前記データ・ストアへのアクセスを制御するためのメモリ・アクセス制御回路を備え、前記メモリ・アクセス制御回路は、前記メモリ・アクセス制御回路内のメモリ属性マーカを設定することによって、前記データ・ストアの少なくとも1つのあらかじめ定められたセクションを示すように構成されている。
あらかじめ定められたセクションをマークする1つの方法は、メモリ・アクセス制御回路内の属性マーカでマークすることによる。一般的に、メモリ・アクセス制御回路は、データ・ストアの異なる安全セクションへのアクセスを制御するために存在し、データ・ストアのセクションの属性は、アクセス要求のアドレスと様々な領域のアドレスとを比較して、特定のアドレスが有しているのはどの属性か、及びアクセスが許可されるべきか否かを決定する、メモリ・アクセス制御回路内に格納されている。さらなるメモリ属性マーカは、データ・ストアの特定のセクションが、ガード命令を格納することを許可された、あらかじめ定められたセクションであることを示すために使用され得る。
あらかじめ定められたセクションをマークする別の方法は、メモリ・アクセス制御回路を、あらかじめ定められたセクションとしてマッピングされたアドレス空間の領域を有する固定されたアドレス・マップで構成することである。いくつかの実施例では、前記処理回路は、前記ガード命令をドメイン切替え命令として処理し、前記ガード命令に応答して、操作の前記ドメインを、前記ガード命令を格納している前記データ・ストアの前記領域に対応するドメインに切り替えるように構成されている。
処理回路は、処理回路の操作の現在のドメインとは異なるドメインに対応するデータ・ストアの領域に格納されている適切な値を有する命令を検出することに応答してドメインを切り替えるように構成することができるが、場合によっては、実行されると、ドメインを、それが格納された領域のドメインに切り替えるよう処理回路を制御する制御信号を生成するのは、ガード命令自体である。
本発明の第2の態様は、
プログラム命令に応答してデータ処理操作を実施するための処理回路であって、異なる安全レベルを有する操作の複数のドメインを有し、安全ドメイン及びさらなる異なる安全ドメインを備え、前記安全ドメイン内で動作するときに、前記さらなる異なる安全ドメインではアクセスすることができない少なくともいくつかのデータ、並びにデータ及び命令を格納するためのデータ・ストアにアクセスすることができ、前記データ・ストアが複数の異なる安全領域を備え、各領域が操作の前記複数のドメインのうちの1つに対応する、処理回路を備える、装置のためのデータ処理方法を提供し、前記方法は、
実行されるべきプログラム命令のために、前記プログラム命令を格納している前記データ・ストアの領域のドメインが、前記処理回路の操作の現在のドメインに対応することを検証するステップと、
前記処理回路の操作の前記現在のドメインに対応しない前記データ・ストアの領域に前記プログラム命令が格納されていることを検出することに応答して、
前記プログラム命令がガード命令を備えるかどうかを検証するステップと、
前記プログラム命令が前記ガード命令を備える場合、操作の前記ドメインを、前記プログラム命令を格納している前記データ・ストアの前記領域に対応するドメインに切り替えるステップと、
前記プログラム命令が前記ガード命令を備えない場合、安全性違反表示を生成するステップとを備える。
本発明の第3の態様は、
プログラム命令に応答してデータ処理操作を実施するための処理手段であって、異なる安全レベルを有する操作の複数のドメインを有し、安全ドメイン及びさらなる異なる安全ドメインを備え、前記安全ドメイン内で動作するときに、前記さらなる異なる安全ドメインではアクセスすることができない少なくともいくつかのデータにアクセスすることができる処理手段と、
データと命令とを格納するためのデータ格納手段であって、それぞれが操作の前記複数のドメインのうちの1つに対応する複数の領域を備え、また、前記安全ドメイン内で動作している前記データ処理手段によってアクセスすることができ、前記さらなる異なる安全ドメイン内で動作している前記データ処理手段によってアクセスすることができない、機密データを格納するための少なくとも1つの安全領域と、機密性の低いデータを格納するための低安全領域とを備えるデータ格納手段と
を備えるデータ処理装置であって、
前記処理手段が、
実行されるべきプログラム命令のために、前記プログラム命令を格納している前記データ格納手段の領域が、前記処理手段の操作の現在のドメインに対応することを検証し、
前記プログラム命令が、前記処理手段の操作の前記現在のドメインに対応しない前記データ格納手段の領域に格納されていることを検出することに応答して、
前記プログラム命令がガード命令を備えるかどうかを検証し、
前記プログラム命令が前記ガード命令を備える場合、操作の前記ドメインを、前記プログラム命令を格納している前記データ格納手段の前記領域に対応するドメインに切り替え、
前記プログラム命令が前記ガード命令を備えない場合、安全性違反表示を生成するためのものである、データ処理装置を提供する。
本発明を、ほんの一例として、添付の図面に示される本発明の実施例を参照してさらに説明する。
従来技術における、ドメインの切替えを示す命令ストリームを示す図である。 本発明のある実施例による、データ処理装置を示す図である。 処理ドメインの3つの異なる安全レベルを示す図である。 本発明のある実施例による、メモリ保護ユニットを示す図である。 本発明のある実施例による、メモリ・アドレス空間のセグメント化を示す図である。 命令が、複数の長さを有する命令と正しく整列されない方法を示す図である。 2者間の切替えがある、パブリック・ドメイン及びプライベート・ドメイン内で実行しているコードを示す図である。 本発明のある実施例による、方法におけるステップを示す流れ図である。 操作の異なるドメインの実例を示す図である。 メモリ属性確認フローを示す流れ図である。
図2は、本発明のある実施例によるデータ処理装置10を示しており、たとえばマイクロコントローラでよい。データ処理装置10は、命令を処理するための処理回路20と、処理回路20によって処理されるデータを格納するための、及び処理回路20が実行するプログラム・コードを格納するためのデータ・ストア30とを備える。
プログラム・コードはコンパイルされたコードでもよく、コンパイラ(図示せず)によって処理装置上でコンパイルされたコードでもよい。プログラム・コードは、異なるタスクを実行するために処理回路20を制御するプログラム命令で構成されている。
この実施例では、処理回路20は、命令フェッチ段階22、命令復号段階24、及び命令実行段階26を有するパイプラインの形態である。理解されるように、これは簡略図であり、レジスタ・リネーミング段階などのさらなる段階があってよい。処理回路は、安全である、又は低安全である操作のドメインを有し、この実施例では、これは一般的に、実行されているコードが格納されているデータ・ストア領域の安全性レベルによって決定される。
データ・ストア30は、安全領域32と低安全領域34の、安全性の異なる2つの領域を有する。安全領域32に格納されたデータは、実行する際に、低安全領域34に格納されたコードにとってアクセスすることはできない。しかしながら、安全領域32に格納された命令は、命令はソフトウェアには不可視であるので、低安全ドメイン内で動作するときに、処理回路20のフェッチ段階22によってフェッチすることができ、したがって、ドメインを横切る命令へのアクセスが許可される。
データ・ストアは単一のブロックとして示されているが、多くの場合、データは異なるレベルのキャッシュ及びメイン・メモリなどの異なるヒエラルキを有する複数のタイプのデータ・ストレージで構成されている。これらのストアのそれぞれは、安全領域又は低安全領域にデータを格納する。
データ処理装置10は、アクセス許可のこのセグメント化を制御するメモリ保護ユニットMPU(memory protection unit)40も有する。この制御は、図示されるように、中央メモリ保護ユニットを通じて行うことができるが、他の実施例では、現在実行及び格納されている領域コードを監視して、これに依存してメモリの異なる領域へのアクセスを制御する、処理装置内の回路によって、より分散された方式で行うことができる。
この実施例では、MPUは2つのセクションを有し、1つがデータ・ストア30に格納された命令へのアクセスを制御し、1つがデータへのアクセスを制御する。前述のように、安全部分に格納された命令への命令フェッチは、低安全ドメイン内で実行している処理回路から許可される。
この実施例では、データ処理の間に使用される汎用レジスタを有するレジスタ・バンク50がある。これらの汎用レジスタは、どの命令が次に実行されるべきかを示すプログラムカウンタPCと、分岐命令のリターン・アドレスを格納するためのリンク・レジスタなどの特定の機能を有する他のレジスタとを含む。
レジスタ・バンク50内には、処理されているデータ値を格納するためのデータ・レジスタもある。或いは、いくつかの実施例では、レジスタはデータ値を格納するために使用されず、値はスタックに格納されて、レジスタのうちの1つに格納されるスタック・ポインタを介して間接的にアクセスされる。これは、明らかに領域節約(area saving)になるが、パフォーマンス・ヒットがない。
前述のように、この実施例では、処理回路20が実行しているドメインは、一般的に現在実行されているコードが格納されている領域から決定される。したがって、安全データ・ストア32に格納された安全プログラム・コードは、一般的に安全ドメインで実行される。実行のドメインは、処理回路20によって設定されるドメイン・フラグ44によって示され、アクセス許可を決定するためにMPU40によってアクセスされる。
処理回路20が実行するための命令をフェッチして、ドメイン・フラグが、それは処理回路が現在実行されていないドメインからであると示すと、処理回路20が、命令がガード命令であることを検証するための確認を実行する。処理回路20は、ガード命令の知られている操作コードに対してフェッチされた命令の操作コードを確認することによってこれを行う。それがガード命令である場合、これは復号化されて実行され、これは、ドメインを、ガード命令がフェッチされたメモリの領域に対応するドメインに切り替えるために、ドメイン・フラグ44を更新するために処理回路を制御する。したがって、たとえば、処理回路20が、低安全ドメイン内で現在動作しており、メモリの安全領域32からのガード命令がフェッチされるように分岐が実行される場合、処理回路は安全ドメイン内での実行に切り替える。
ガード命令は、安全領域への許可されたエントリ・ポイントに配置され、ガード命令に従って実行されるコードは、安全ドメインへの呼出しが有効であることを検証するために安全確認ルーチンを備えてよく、これは、パスワードの確認、又は供給される他の関数の引数の有効性の確認を含み得る。
フェッチされた命令がガード命令ではなく、操作の現在のドメインとは異なるドメインを有する安全領域からである場合、安全性違反表示が生成される。これは、生成されている例外、及び実行されているフォールト・ハンドリング・ルーチンの形態をとることができる。
図3は、最低安全ドメイン、安全ドメイン、及び最高安全ドメインの、非常に概略的な3つの処理ドメインを示している。これらのドメインのそれぞれの中で、プログラミング・コードが実行されて、ドメインに応じて、データ・ストアからの異なるレベルの安全データがアクセスされ得る。データへのアクセス許可は、実行のドメインの安全性レベル、及びデータが格納されているメモリの領域の安全性レベルに応じて与えられる。この実施例では、ドメイン間のどの切替えも、この実例ではPGとして示されるガード命令を介して実行される。場合によっては、ガード命令は、低安全ドメインから高安全ドメインに切り替えるときにのみ必要とされるが、この切替え要件が対称的に実行される場合、高安全領域から低安全領域に行くときに転送もガード命令を介して実行されるように、システムを実装することがより効率的である場合がある。したがって、異なる安全ドメイン内でルーチンを呼び出す場合、これは、ルーチンの先頭に配置されたガード命令をフェッチすることによって行われる。
この実施例では、3つのドメインが異なる安全レベルを有するものとして示されているが、いくつかの実施例では、ドメインのうちの少なくとも2つは、同じ安全レベルを有しているが、相互から分離されている、兄弟ドメインでよい点に留意されたい。したがって、安全ドメイン、及び最高安全ドメインは、実際には安全1及び安全2でよく、これらの2つの安全ドメインにおける処理操作は、メモリの最低安全領域内のデータ、及びそれら自体のドメインに対応するメモリの安全領域にアクセスすることができるが、それらの兄弟ドメインにアクセスすることはできない。
図4は、図2のメモリ保護ユニット40をより詳細に示している。メモリ保護ユニットMPU40は、処理回路20からデータ・ストア30へのアクセスを制御して、適切な属性を有するデータ・ストア30の領域だけがアクセスすることができることを保証する。
この実施例では、データ・アクセス及び命令アクセスは、異なるポートで受信されて、並列に処理され得る。比較器41及び42は、データ・アクセスのアクセス・アドレス及び命令アクセスを、それぞれコンフィギュレーション・レジスタ43から取り出された領域のアドレスと比較する。コンフィギュレーション・レジスタ43は、データ・ストア30の異なる領域の詳細を格納する。すなわち、コンフィギュレーション・レジスタ43は、領域のアドレス、領域のサイズ、及び領域の属性を格納する。これらの属性は、安全性レベル又は領域、領域が読出し専用領域又は書込み専用領域かどうか、などを示す。したがって、アクセスが対象としているのはメモリのどの領域かを比較器が一旦決定すると、属性確認ブロック45は、アクセスが許可されるか否かを決定するために、コンフィギュレーション・レジスタ43に格納されたその領域の属性を使用する。属性確認ブロック45は、ドメイン・フラグ44にアクセスすることができ、アクセスが許可されるべきか否かを決定するときに、処理回路20の操作の現在のドメインの安全レベルを決定することができる。データ・アクセスが有効なアクセスであると決定されると、メモリにアクセスすることができ、データ・アクセスが有効なアクセスではないと決定されると、フォールトが生成される。
この点で、命令アクセスが、ドメイン・フラグ44によって示されたドメインに対応しないメモリの領域内の命令へのアクセスである場合、属性確認はこれを決定して、命令を返すときにこれを処理回路20に信号で伝える。
この信号に応答して、処理回路は、返された命令がガード命令かどうかを確認する。返された命令がガード命令である場合、ドメイン・フラグ44は、命令がフェッチされたデータ・ストア30の領域のドメインに対応するドメインに更新され、返された命令がガード命令ではない場合、処理回路20によって安全性違反表示が生成される。
ガード命令が検出された場合のみドメイン間の切替えが許可されるので、このガード命令を模倣し得る、分岐され得る不注意な符号化がないことが重要である。1つだけの命令サイズを有する命令セットでは、他の任意の命令によって使用されないガード命令の一意の操作コードを単に有することが十分な場合がある。しかしながら、プログラム・コード内で符号化されたリテラルがある場合、たとえ単一の命令長であっても、ガード命令の符号化がプログラム・コード・セクションにリテラルとして不注意に格納されないよう注意しなければならない。
これが生じることを回避するために、ガード命令を符号化していないことを確認するために、格納されるすべてのリテラルへの確認があってよい。或いは、メモリの特定のセクションだけがガード命令を含むことを許可されるようにするために、メモリがセグメント化されてよい。これらのセクションは、データ・リテラルを格納することを禁止される場合があり、或いは、このセクションに格納されるすべてのデータ・リテラルが確認され得る。
図5は、このようにセグメント化されたデータ・ストア30を概略的に示している。したがって、予約されたセクション、低安全セクション34、及びガード命令を格納することができる単一のセクション35を有する安全セクション32がある。このセクションは、メモリ保護ユニット40内のコンフィギュレーション・レジスタにおいて、この特定の属性を有するものとしてマークされ得る。したがって、ガード命令が識別されて、データ・ストア内の別の場所に格納されると、これは安全性違反表示を生成する。
このようにメモリをセグメント化することによって、ガード命令を不注意に符号化していないことを確認せずに、リテラルをメモリ内の別の場所に格納することができるようになる。本システムは、リテラルがここに格納されないようにするために、実行専用コードだけがセクション35に格納されるように構成され得る。コードをコンパイルするときに、リテラル・プールを削除することができるが、これはコード・サイズ及び処理速度に著しい影響を及ぼす。しかしながら、このようにコンパイルされるのがコードの小さな部分だけである場合、全体的な効果及び性能、並びにコード・サイズは非常に小さい。セクション35のサイズ及び配置は、初期化時に設定されてもよく、現在実行されているコードに応じて処理回路によって設定されてもよい点に留意されたい。
このセクションに格納されているコードのタイプを制限する別の可能な方法は、低安全関数から呼び出すことができるあらゆるコードをここに格納することである。ガード命令は、ドメイン間で移動する際に使用され、またいくつかの実施例では、高安全ドメインと低安全ドメインとの両方の間で移動するために使用され得るが、低安全ドメインから高安全ドメインに移動するときの方が明らかにより重要であり、場合によっては、使用されるのはこれらのインスタンスにおいてのみである。そのような場合、低安全関数から呼び出すことができるのはコードのみであり、そのコードはその中にガード命令を有する場合があり、したがって、このコードの格納をセクション35に制限することによって、ガード命令が別の場所で見つかると、これはフォールトであり、不注意な符号化に違いないことを保証する。
データ・リテラルからのガード命令の模倣は、回避することが明確に非常に難しい問題であるが、命令による不注意な符号化は対処することが比較的容易である。しかしながら、場合によっては、また具体的には、異なる長さの命令がある場合、これ自体が何らかの問題を提起する場合がある。
たとえば、図6は、32ビット命令と16ビット命令の2つの長さの命令を有する命令ストリームの実例を示している。命令の先頭が配置されなければならない、処理回路によって必要とされるアドレス整列ポイントがあり、これらは16ビットごとに発生し、この場合は最小命令長に対応する。各命令は、命令の関数を決定する操作、又は操作コードで開始し、この実例では、宛先レジスタが識別されて、データ値又は即値が提供される、さらなる部分がある。
リターン指向プログラミング攻撃を実行する際に、命令の途中に意図的に分岐することによって有用なコード・シーケンスを見つけようとすることは、一般的な技法である。したがって、どの命令もガード命令を模倣しないことだけでなく、正しく整列されない符号化が偶然ガード命令を模倣しないことが重要である。この場合、命令長が2つだけあり、ガード命令のあらゆる不注意な模倣を回避するために、ガード命令は最大長を有するように作成されて、それぞれが同じ値を有する2つの部分と対称的に作成される。このように、たとえ正しく整列されない場合でも、後半の部分は次の命令の先頭、したがってその操作コードと重複するので、各部分は他の任意の命令の操作コード、又は操作コードの先頭セクションを有してはならない。したがって、部分内のガード命令を等しい値で符号化することによって、操作コード内で使用されることから除外されるのはこの値だけであり、したがって、ガード命令専用にする必要がある符号化空間の量が減少する。
想像できるように、必ずしも相互の直接倍数ではない、より長い長さの命令を有する場合、アドレス整列ポイントは、命令内の異なる可能な位置でより頻繁になってよい。そのような場合、ガード命令が、命令内で開始する場合、次の命令と重複することが重要である。このように、重複する部分は、操作コードの少なくとも一部に位置しており、この部分が、他の任意の操作コード、又は他の操作コードの開始と比較して無効である場合、たとえ分岐が命令の先頭をターゲットとしなくても、命令セット内のどの命令によってもガード命令を模倣することはできない。
図7は、実行されているプログラム・ストリームを概略的に示している。まず、パブリック・メモリに格納されたコードがパブリック処理ドメインで処理され、この実行の間、以前のリンク・レジスタ値がスタックに保存され、次いで、分岐命令が実行されて、これによって、プライベート・メモリに格納されたコードへの処理回路の分岐、及びリンク・レジスタへの新しい分岐リターン・アドレスの格納が生じる。この実例では、プライベート・メモリからフェッチされた命令はガード命令であり、これは処理回路が依然としてパブリック・ドメイン内で動作している間にフェッチされる。したがって、ドメイン・フラグがパブリック・ドメインを示して、MPUは、処理回路がパブリック・ドメインで実行していても、取り出された命令がプライベート・メモリに格納されていることを検出する。MPUが、現在のドメインの安全レベルよりも高安全である領域内の命令がフェッチされたことを処理回路に示す。
これによって、フェッチされた命令がガード命令であることを確認して、ガード命令であることを検証する際に、プライベート・メモリに格納された後続の命令を実行できるようにするために、プライベート・ドメインを示すためにドメイン・フラグを設定することによって処理ドメインを切り替えるように、処理回路がトリガされる。次いで、関数呼出しが有効であることを保証する安全性確認ルーチンから開始する後続のコードが実行されて、次いでプライベート関数が実行される。
このように、安全性確認ルーチンが回避されることを許可するプライベート関数の途中で命令への分岐は発生できない。これは、現在動作しているドメインの安全レベルよりも高安全であるメモリの領域からフェッチされている命令に応答して発生する命令確認が、フェッチされた命令はガード命令ではないことを示し、安全性違反表示が生成されるためである。
図8は、本発明の実施例の方法によるステップを示す流れ図を示している。まず、命令がフェッチされて、フェッチされるメモリの領域が、処理回路の現在処理しているドメインに対応するかどうかが決定される。これは、図2に示されるドメイン・フラグ44を見ることによって行われる。
対応するドメインを有している場合、命令が実行されて、次の命令がフェッチされる。異なるドメインに対応する場合、命令がガード命令か否かが決定される。命令がガード命令ではない場合、安全性違反があり、安全性違反表示がアサートされる。命令がガード命令である場合、処理ドメインが、ガード命令を格納したデータ・ストアの領域に対応する処理ドメインに切り替えられ、この場合、次の命令をフェッチする前に処理回路もガード命令を実行する。このように、ドメインの切り替えは、ガード命令が見つかったときのみ発生する。
この詳細は、異なるドメイン間の切替えがガード命令を必要とする、非常に一般的な方法であるが、図7に関して開示されるものなどのいくつかの実施例では、ガード命令は、低安全ドメインから高安全ドメインに切り替える場合のみ必要であり、最初の評価が、処理ドメインの安全レベルよりも高安全である命令を格納しているデータ・ストアの領域の安全レベルであり、それがガード命令であるか否かを検証するために命令が確認される場合のみあてはまり、ガード命令ではない場合は命令が単に実行される点に留意されたい。
特定の実施例のいくつかのさらなる詳細を以下で説明する。
注:いくつかのレジスタはパブリック状態とプライベート状態との間にバンクされており、以下の命名規約は、レジスタのどのバージョンがアクセスされるべきかを定義するために使用される:
・<register name>−特定のバージョンは指定されず、現在の状態に関連付けられるバージョンが使用される。この通知は、バンクされていないレジスタのためにも使用される。
・<register_name>_P−レジスタのプライベート・バージョンが使用される。
・<register_name>_NP−レジスタの非プライベート/パブリック・バージョンが使用される。
プライベート状態
図9に示されるように、既存のスレッド/ハンドラ・モードに直交するコア(及びより広範なシステム)に、新しいプライベート状態が追加される。システムがパブリック状態のうちの1つで実行しているときに、プライベートとしてマークされているリソースにアクセスしようとすることは、障害をもたらす。
プロセッサが実行しているのはこれらの4つの状態のうちのどれかは、既存のスレッド/ハンドラ・ロジックと、ソフトウェアにとって直接には不可視である新しいアーキテクチャ・フラグとの組合せによって定義される。擬似コードでは、このフラグはCurrentStateと呼ばれる変数によって表わされ、以下のように定義される:
enumeration PrivacyState {PrivacyState_Public,PrivacyState_Private};
PrivacyState CurrentState;
アドレス空間保護
プライベートとしてマークされ得るすべてのメモリ、及び周辺にマッピングされた他のメモリは、チップ上にあると仮定され、したがってそれらを保護するための暗号化は必要ない。アドレス空間への任意のアクセスは、トランザクションをパブリック又はプライベートとしてマークするために使用される、新しい属性P−Attrを含む。P−Attrの伝達は、処理系定義(implementation defined)である。
プライベートとしてマークされたすべてのアドレス範囲は、それらの開始及び終了アドレスを32バイト境界に整列する必要がある。
資産保護拡張は、以下を必要とする:
・プライベートとしてマークされたアドレス空間の領域は、プライベートに設定されたP−Attrを有するトランザクションによってのみアクセス可能でなければならない。パブリックに設定されたP−Attrを有するプライベートアドレスへのどのアクセスも、要求を生成したコンポーネントに報告されるエラーをもたらさなければならない。
・プロセッサは、アドレスのプライバシー状況を決定することができ、これは以下のオプションのうちの1つによって達成される:
・A PAU(privacy attribution unit)
資産保護拡張は、新しいP−Req属性も定義する。新しいP−Req属性は、データ・トランザクションが実行されるようコアが要求するプライバシー状態を定義し、そうでない場合は、指定されたP−Reqはコアのプライバシー状態と等しい。
MPU拡張
資産保護拡張は、以下の方法でMPU機能性を拡張する:
・MPUコンフィギュレーション・レジスタが、プライバシーでバンクされる。MPUメモリ属性及び特権確認は、現在プライバシー状態を実行しているプロセッサに対応するコンフィギュレーション・レジスタを使用する。
・プライバシー属性ユニット(PAU)−この新しいブロックは、パブリック又はプライベートのいずれかとしてメモリ領域を帰属することを担当する。
プライバシー属性ユニット
プライバシー属性ユニット(PAU)が以下の機能を実行する:
・トランザクションの早期スクリーニング。これによって、プライバシー侵害を早期に(すなわち、メモリ・アクセスが実行される前に)捕えて、BusFaultとして報告される代わりに、有意義な形で報告することができるようになる。
・命令がフェッチされる、プライバシー・ドメインについての情報を提供する。
PAUコンフィギュレーションはいくつかのメモリ領域を定義し、領域の数はIMPLEMENTATION DEFINEDであり、PAU_TYPE.PREGIONフィールドを読むことによって発見可能である。これらの領域はPAU_REGIONnと名付けられ、nは0からPAU_TYPE.PREGION−1への数である。これらの領域に関連付けられるコンフィギュレーション・フィールドに直接アクセスすることはできないが、代わりに、以下の表に示されるウインドウ・レジスタを介して間接的にアクセスする:
メモリ・アクセスが実行されると、PAUが照会される。アドレスが、PAUで定義された領域のうちの1つに一致する場合(すなわち、PAU_REGIONn.BADDR<=Address<PAU_REGIONn.LADDR)、メモリが、PAU_CTRL.RMNPビットによって定義されたプライバシー状態でマークされる。PrivateFaultは、プライバシー侵害が検出されると(たとえば、パブリックに設定されたP−Reqを有するプライベート・メモリへのアクセス)生成される。PrivateFaultを生成させる要求は、実行されているメモリ・アクセスをもたらさず、同様に、そのようなアクセスは、MPUコンフィギュレーションに関わらず、MemManageフォールトの生成をもたらさない。PFSR(Private Fault Status Register)で報告されるシンドローム情報に加えて、フォールトを生じさせたトランザクションのアドレスを格納するためにMMFARレジスタのプライベート・バージョンが使用される。このフォールトは、プライベート状態のプライバシーを侵害する試みを示すのでMemManageフォールトとは異なり、したがって異なるように処理される必要があり、したがってファームウェア・ベンダはこれらの2つのフォールトに異なる優先順位を割り当てたい場合がある。プロセッサの現在の状態に対応するMPUコンフィギュレーションは、PrivateFaultを生成しないアクセスの特権確認及びメモリ属性を実行するために使用される(図10を参照)。
PAU_CTRL.ENABLEフィールドを消去することによって、以下のPAU行動がもたらされる:
・データ・アクセスのためにP−AttrがP−Reqに設定され、命令フェッチのためにプライベートに設定される。
・命令フェッチの目的で、アドレス空間全体がプライベートであると報告される。これによって、ブート処理の間にプロセッサが不注意にパブリック状態に移行することを防止する。
PAUに関連付けられるコンフィギュレーション・レジスタは、プライベート特権状態からのみアクセス可能であり、他の任意の段階からのアクセスはBusFaultを生成する。
PAU_CTRL
プライバシー属性ユニット制御レジスタ、アドレス0xE000EDD0、0×0又はIMPLEMENTATION DEFINEDにリセットする(以下のメモを参照)

ENABLE(ビット[0])1に設定される場合、PAUは使用可能である
RMNP(ビット[1])非プライベートとしてマークされた領域、このビットが、メモリの領域が領域によってマークされる方法を制御する。
0:領域が、メモリの領域をプライベートとしてマークし、領域のいずれとも一致しないアドレスがパブリックとしてマークされる。
1:領域が、メモリの領域をパブリックとしてマークし、領域のいずれとも一致しないアドレスがプライベートとしてマークされる。
PAU_TYPE
プライバシー属性ユニット・タイプ・レジスタ、アドレス0xE000EDD4、読出し専用

PREGION(ビット[7:0])実装されたPAU領域の数。このフィールドがゼロとして読める(reads−as−zero)場合、プロセッサはPAUを実装しない。
PAU_RNR
プライバシー属性ユニット領域ベースのアドレス・レジスタ、アドレス0xE000EDD8、UNKNOWNにリセットする

REGION(ビット[7:0])PAU_RBAR及びPAU_RASRレジスタによって現在アクセスされている領域を選択する。
PAU_RBAR
プライバシー属性ユニット領域ベースのアドレス・レジスタ、アドレス0xE000EDDC、UNKNOWNにリセットする

REGION(ビット[7:0])どの領域が修正されるべきかを選択する。
VALID(ビット[4])0に設定される場合、REGIONフィールドが無視されて、どの領域が修正されるべきかを定義するためにPAU_RNRレジスタにおける値が使用される。
BADDR(ビット[31:5])領域のベース・アドレスのビット31:5、注:ベース・アドレスのビット[4:0]は、0×0として定義される。
PAU_RLAR
プライバシー属性ユニット領域のリミット・アドレス・レジスタ、アドレス0xE000EDE0、UNKNOWNにリセットする

REGION(ビット[7:0])どの領域が修正されるべきかを選択する
VALID(ビット[4])0に設定される場合、REGIONフィールドが無視されて、どの領域が修正されるべきかを定義するためにPAU_RNRレジスタにおける値が使用される。
LADDR(ビット[31:5])領域のリミット・アドレスのビット31:5、注:ベース・アドレスのビット[4:0]は、0×0として定義される。
PAU_RAR
プライバシー属性ユニット領域の属性レジスタ、アドレス0xE000EDE4、UNKNOWNにリセットする

REGION(ビット[7:0])どの領域が修正されるべきかを選択する
VALID(ビット[4])0に設定される場合、REGIONフィールドが無視されて、どの領域が修正されるべきかを定義するためにPAU_RNRレジスタにおける値が使用される。
NPC(ビット[31])非プライベート呼出し可能。NPCが1に設定されると、領域は他のプライバシー状態から呼出し可能とマークされる。NPCが1に設定された領域をターゲットとしないプライバシー状態に移行を生じさせる任意の分岐は、生じているフォールトをもたらす。これによって、PGガード命令にさらなるレベルの保護を提供し、リテラル・プールに存在しているガード命令操作コードに関連付けられるリスクを排除するために使用され得る。必要なPAU領域の数を減らすために、プライベート・コードへのすべてのエントリ・ポイントを単一の領域内にグループ化することが好都合である。この領域内のコードは、実行専用としてコンパイルすることができるので、どのようなリテラル・プールも含まない。
CPU生成されたトランザクション
データ
データ・アクセスは、以下のように設定されたP−Attrで生成される:
・P−Reqがパブリックに設定される場合(たとえば、プロセッサがパブリック状態である)、P−Attrもパブリックに設定される。
・PAUを有するプロセッサの場合−P−Reqがプライベートに設定される場合(たとえば、プロセッサがプライベート状態である)、また、アドレスがPAU内の領域のうちの1つに一致する場合、P−AttrはPAU_CTRL.RMNPに設定され、アドレスがPAU領域に一致しない場合、P−Attrは逆プライバシー状態のPAU_CTRL.RMNPに設定される。
これによって、PAUを有するより容易な統合M−profileコアをTrustZone対応システムに提供しながら、パブリック・コードが、プライベートとマークされた位置から読み取られる/そこに書き込まれることを防止する。
命令フェッチ
命令フェッチ行動は、プロセッサがPAUを含むかどうかに依存する:
・PAUを含む場合−アドレスがPAU領域のうちの1つに一致する場合、命令は、PAU_CTRL.RMNPに設定されたP−Attrとともにフェッチされる。このP−Attr値は、プロセッサのプライバシー状態を決定するためにも使用される。
注:命令操作コードが保護ドメイン間の境界にまたがる場合、PrivateFaultが生じる。
状態移行
命令が実行されるべきプライバシー状態は、命令がフェッチされた位置のプライバシー状況から推測される。結果として、パブリック状態でプライベート・コードを実行すること、又はプライベート状態でパブリック・コードを実行することは不可能である。しかしながら、攻撃(リターン指向プログラミング)を防ぐために、プライバシー状態へのエントリは以下のメカニズムによって厳密に制御される:
・プロセッサの状態にかかわらず、すべての命令フェッチが、メモリ・アクセスによっていかなるプライバシー違反も生成されないように設定されたP−Attrで実行される。
・命令がフェッチされた位置のプライバシー状態が、PCがパブリック・コードに移動したことを示す場合、以下の動作のうちの1つが発生する。
○分岐がドメイン・クロッシングとしてマークされる場合、コアがパブリック状態に移行する。
○そのようにマークされない場合、PrivateFaultが生じる。この状況は、プライベート・コードがクラッシュすると発生する場合があり、フォールトの発生によってあらゆるプライベート・レジスタがパブリック・ドメインにさらされることを防止することができる。
・プライベート状態への移行は、PGガード命令の存在によって有効なエントリ・ポイントとしてマークされたプライベート・メモリ位置に分岐することによって行われる。パブリック・メモリ内のPGへの分岐は、プライベート状態への移行を生じさせない。
ガード命令は、パブリック・コードが、プライベート・コード・ベース内の任意の位置にジャンプすることを防止する。このガード命令の存在は以下の擬似コードによって確認され、これは各命令の実行の前に実行されるべきである。詳細は以下のセクションで説明する:
//PrivateEntryPointCheck()
//==========================
PrivateEntryPointCheck()
instState=InstMemState();
CurrentState!=instPrivateの場合、
//例外、リニア・コード・フロー、又は分岐のいずれかによってプライベート・コードに移行している場合、新しい命令が有効なエントリ・ポイント(すなわち、PG)か確認する。
InstState==PrivacyState_Private&&OpCode!=0xE97FE97Fの場合、
ExceptionEntry(PrivateFault TRUE);
return;
//パブリック状態に移行した場合、プライベート状態からの制御されない出口がある。したがってフォールトが生じる。
instState==PrivacyState_Publicの場合、
ExceptionEntry(PrivateFault TRUE);
return;
この手法は、ドメイン間の高速/効率的な呼出しを可能にし、プライベート・コードへの任意の数のエントリ・ポイントを許可する。概念的な資産保護は、特権状態/特権状態の間に既に存在するものと類似する、プライベート状態/パブリック状態間の特徴を提供し、以下の違いがある(詳細は後続のセクションで概要を述べる):
・エントリは、SVC例外ではなく、PG命令によってゲートされる。
○実行優先順位に変更なし−割込み優先計画に織り込まれる必要はない
○単一のエントリ・ポイントに限定されない−ルーティング/プロキシ・オーバーヘッドがない
○引数はレジスタを介して渡すことができる(SVC命令とSVC例外ハンドラとの間に発生する例外の可能性のために、SVCでは不可能である)
○必要に応じて(たとえば、5以上の引数がある場合)、複数の条件付きMRS命令がスタック・ポインタを取得せずに、スタックを介して引数を渡すことを迅速に行うことができる
・各エントリ・ポイントは、パブリック状態とプライベート状態の両方から呼び出すことができる。
この手法は、プライベート外部API関数のいくつかの特別な処理を必要とするが、プライベート・ドメイン内のコードの大部分、及びパブリック・ドメイン内のすべてのコードはどのような修正も必要としない。後方互換性の増加に加えて、これによって、まだ更新されていないレガシー・ライブラリ、又はコンパイラも、パブリック・コード・ベースの全体のために使用されるこれらの拡張(たとえば、GCC)をサポートすることが可能になる。特別な処理を必要とするプライベート境界関数が、単純なアセンブリ・ラッパー関数(潜在的に、いくつかのスクリプトで自動的に生成し得る)として実装され得ることは、注目に値する。これによって、特別なコンパイラ・サポートなしに資産保護拡張を使用できるようになる。
ターゲット状態ビット
いくつかの状況では、プロセッサが、新しいドメインから第1の命令をフェッチする前に、どの状態に移行するかを知っている場合、アーキテクチャを単純化する。ARMv7−Mアーキテクチャは、ARM命令セットを含まず(また、将来それを必要とする可能性は極めて低く)、したがって、分岐ターゲット・アドレスのそのようなビット・ゼロ(ARMv7−ARアーキテクチャにおいてARM/Thumb相互作用ビットとして使用される)は現在使用されない。資産保護拡張は、プライベート状態における分岐のターゲット状態を信号で通知するために、このビットを以下のように再使用する:
・ターゲット・アドレス[0]=1、分岐のターゲット状態はプライベートである。Thumb命令セットを指定するために、以前に使用されている。
・ターゲット・アドレス[0]=0、分岐のターゲット状態はパブリックである。ARM命令セットを指定するために、以前に予約されている。
プロセッサはプライベート状態を起動し、またThumb命令セットだけがサポートされるので、アーキテクチャは、LSBが1に設定されたアドレスに分岐するレガシー・コードと下位互換性がある。パブリック状態で実行する場合、target_addr[0]を0に設定した位置への分岐はINVSTATE UsageFaultを発生させ、target_addr[0]=1である分岐は通常の分岐として行動し、プライベート状態への移行を生じさせず、この手法は以下の利点を有する。
・パブリック・コードがこのビットを潜在的な攻撃ベクタとして利用する(use leverage)ことを防止する。
・LSBが1に設定されたアドレスに分岐する、レガシー・ライブラリ、又はレガシー・ツールでコンパイルされたコードの既存の行動を保存する。
要約すると、パブリック・コードを呼び出すプライベート関数だけが、呼出しアドレスのLSBを0に設定する必要がある。
プライベート・コードへの関数呼出し
何らかの分岐(又は、リニア・コード・フロー)がパブリック・コードからプライベート・コードへの移行を生じさせる場合、プライベート・コードの第1の命令はPG命令でなければならない。
図7は、ドメイン移行が発生している場所を強調しているプライベート関数を呼び出しているパブリック・コードの単純な実例を示している。PG命令が実行されるまでプロセッサはパブリック状態のままなので、レジスタ状態(LRを含む)は信用できないものと扱われ、したがって、BLとPGとの間にパブリック割込みが発生した場合は保護する必要はない。別の主な特徴は、BXNP LR命令の後に、プロセッサがパブリック状態に戻ることである。これによって、次の命令がパブリック・ドメインにない場合に、又は別のPG命令がプライベート・ドメイン内にある場合に、例外を生成させることによって、リターン攻撃を防止する。BXNP lr命令は、LRレジスタのLSBを調べることによって、事前にターゲットのプライバシー状態を決定することができる。PG命令はリターン・アドレスを自動的にサニタイズするので、この時点でLRレジスタのLSBを信用することができる。
さらなる命令
PG
プライベート・ゲートウェイ。このガード命令は、アドレスが、非プライベート・コードからの分岐にとって有効な分岐ターゲットであることを示すために使用される。注:この命令は、LDRD(リテラル)のTl符号化におけるUNPREDICTABLE空間にフィットする。ARM ARMv7−M issue D section A7.7.50を参照されたい。この符号化は、上位及び下位の16ビットの語が同じ値を有し、ちょうど上部16ビットが命令を現在のISAにおけるUNPREDICTABLEとしてマークするので、意図的に選ばれる。これは、たとえ32ビット命令の中間で分岐が実行されても、このビット・パターンが通常コード内で見つかる可能性を極めて低くする。
符号化T1 資産保護拡張
PG

InITBlock()の場合、UNPREDICTABLE;
instState = InstMemState();
LR=CurrentState==PrivacyState_Privateの場合、LR<31:1>:‘1’
そうではない場合、LR<31:1>:‘0’;
CurrentState=instState;
この命令の唯一の副作用は、命令がフェッチされた位置と一致するために、LR[0]を修正すること、及びプロセッサのプライバシー状態を更新することである。したがって、この命令はパブリック状態から実行可能であると定義される。
例外
ベクトル・テーブル
資産保護拡張は、新しいVTORPレジスタによって指摘された、現在のVTORレジスタと同様のセマンティックを有し、既存のVTORレジスタと同じアドレス(プライベート状態からVTORPにアクセスする)でバンクされる、第2のベクトル・テーブルを追加する。プライベート状態をターゲットとするあらゆる例外は、ベクトル・テーブルのベース・アドレスを決定するために、VTORではなくVTORPレジスタを使用する。プライベート・ベクトル・テーブルを保護するために、VTORPが、プライベートとしてマークされており、したがってパブリック状態からアクセスすることができないメモリの領域を指摘することが重要である。以下のルールは、例外がターゲットとするのはどの状態かを決定するために使用される:
・例外数<16:一般的に、ほとんどの低い数値の例外は、CurrentState変数によってとして決定されるように、プロセッサが現在入っている状態をターゲットとする。以下の例は、一般的なルールから逸脱する:
○PrivateFault−常にプライベート状態をターゲットとする
PrivateFault
例外数が7である、新しいPrivateFault例外が定義される。この例外は、実行される様々な安全性確認によってトリガされる(たとえば、パブリック・コードから、有効なエントリ・ポイントとしてマークされていないプライベート・コード内のアドレスにジャンプするときに)。この例外を生成することができるすべてのケースの完全な詳細は、本明細書を通じて擬似コードにおいて見ることができる。
PrivateFaultの優先順位は、SHPR1レジスタ内のPRI_7フィールドを使用して構成することができる。したがって、このフィールドはパブリック状態からアクセスされるときに、RAZ/WIと定義される。
PrivateFaultは、常にプライベート状態をターゲットとし、したがって、パブリックベクトル・テーブル内の例外数7が予約される。
PFSR
プライベート・フォールト・ステータス・レジスタ、アドレス0xE000ED8C、UNKNOWNにリセットする、ARMv6−Mに存在しないレジスタ
利用制限:
・対応するフォールトを消去するために、レジスタビットに1を書く。
・フォールト・ビットは付加的である;すなわち、複数のフォールトが発生すると、すべての関連ビットが1に設定される。
・プライベート特権状態からのみアクセス可能であり、他の状態からのアクセスはBusFaultを生成する。

INVEP(ビット[0])無効なエントリ・ポイント。パブリック状態からの関数呼出し又は例外が、プライベート状態における非PG命令をターゲットとする場合、このビットが設定される。
INVMS(ビット[1])無効なマジック・シグネチャ。アンスタッキング操作中に、例外スタック・フレーム内のマジック・シグネチャが無効であることが分かった場合、このビットが設定される。
INVER(ビット[2])無効な例外リターン。パブリック状態の例外から戻るときにEXC_RETURN.SCRSが0であったことを示す。
PAUVIOL(ビット[3])PAU違反。パブリックに設定されたトランザクションのためにP−Reqでプライベートとしてマークされたアドレス空間の一部にアクセスする試みが行われたことを示す。
INVALIGN(ビット[4])無効な整列。この例外は、命令がプライベート・ドメイン境界に整列していない場合に発生する。すなわち、命令は境界を横切る。
INVTRAN(ビット[5])無効な移行。この例外は、ドメイン・クロッシングとしてフラグ付けされていない分岐が、プライベート・メモリからパブリック・メモリに移行を生じさせるときに発生する。
Misc PseUdo code
InstMemState()
この擬似コード関数は、現在の命令がフェッチされたメモリのPrivacyStateに戻る。
本発明の様々なさらなる態様及び特徴は、添付の特許請求の範囲において定義される。説明される前に、本発明の範囲から逸脱することなしに、本明細書の実施例に様々な修正が行われてよい。

Claims (23)

  1. プログラム命令に応答して、データ処理操作を実施するように構成された処理回路であって、異なる安全レベルを有する複数の操作ドメインを有し、安全ドメイン及びさらなる異なる安全ドメインを備え、前記安全ドメイン内で動作するときに、前記さらなる異なる安全ドメインではアクセスすることができない少なくともいくつかのデータにアクセスすることができる処理回路と、
    データと命令とを格納するためのデータ・ストアであって、それぞれの領域が操作の前記複数のドメインのうちの1つに対応する複数の領域を備え、また、前記安全ドメイン内で動作している前記データ処理回路によってアクセスすることができ、前記さらなる異なる安全ドメイン内で動作している前記データ処理回路によってアクセスすることができない、機密データを格納するための少なくとも1つの安全領域と、機密性の低いデータを格納するための低安全領域とを備えるデータ・ストアとを備える、データ処理装置であって、
    前記処理回路が、
    実行されるべきプログラム命令のために、前記プログラム命令を格納している前記データ・ストアの領域が、前記処理回路の操作の現在のドメインに対応することを検証し、
    前記処理回路の操作の前記現在のドメインに対応しない前記データ・ストアの領域に前記プログラム命令が格納されていることを検出することに応答して、
    前記プログラム命令がガード命令を備えるかどうかを検証し、
    前記プログラム命令が前記ガード命令を備える場合、操作の前記ドメインを、前記プログラム命令を格納している前記データ・ストアの前記領域に対応するドメインに切り替え、
    前記プログラム命令が前記ガード命令を備えない場合、安全性違反表示を生成するように構成されている、データ処理装置。
  2. 前記さらなる異なる安全ドメインが、前記安全ドメインよりも低安全であるドメインを備える、請求項1に記載のデータ処理装置。
  3. 前記処理回路が、前記処理回路の操作の現在のドメインの前記安全レベルよりも高安全レベルを有する前記ドメインのうちの1つに対応する前記データ・ストアの領域に前記プログラム命令が格納されていることを検出することだけに応答して、前記プログラム命令がガード命令を備えるかどうかを検証するように構成されている、請求項1又は2に記載のデータ処理装置。
  4. 操作の現在のドメインの前記安全レベルよりも低安全レベルである前記ドメインのうちの1つに対応する前記データ・ストアの領域に格納されている前記プログラム命令に応答して、前記処理回路が、前記命令が前記ガード命令を備えるかどうかにかかわらず、操作の前記ドメインを、前記低安全レベルに切り替えるように構成されている、請求項3に記載のデータ処理装置。
  5. 例外を生成して、フォールト・ハンドリング・コードを実行するために、前記処理回路が前記安全性違反表示に応答する、請求項1から4までのいずれか一項に記載のデータ処理装置。
  6. 前記処理回路が、異なる長さの命令を有する命令セットからプログラム命令を実行するように構成され、前記処理回路によって必要とされる命令アドレス整列が前記異なる長さに依存し、前記ガード命令の長さが、前記ガード命令の先頭が前記プログラム命令のうちの1つの中の前記命令アドレス整列ポイントの少なくとも1つサブセットのうちの1つに配置されていたとしたら、前記ガード命令の一部が次の命令の先頭と重複し、常に前記命令を超えるほどの長さである、請求項1から5までのいずれか一項に記載のデータ処理装置。
  7. 前記命令アドレス整列ポイントの少なくとも1つのサブセットが、前記命令アドレス整列ポイントのすべてを備える、請求項6に記載のデータ処理装置。
  8. 前記ガード命令の前記長さが、前記命令セットからの最長プログラム命令の長さと等しい、請求項6又は7に記載のデータ処理装置。
  9. 前記ガード命令が複数の部分で構成され、前記複数の部分のうちの少なくとも2つが、前記処理回路によって必要とされる前記命令アドレス整列間の最小距離の長さを有し、前記複数の部分のうちの前記少なくとも2つが同じ値を有する、請求項6から8までのいずれか一項に記載のデータ処理装置。
  10. 前記ガード命令が前記2つの部分を備える、請求項9に記載のデータ処理装置。
  11. 前記同じ値が、前記命令セットからの他の任意の命令の有効な操作コードでもなく、操作コードの先頭セグメントでもない、請求項9又は10に記載のデータ処理装置。
  12. 前記処理回路によって必要とされる前記アドレス整列と整列する場合、前記命令セットからの別の命令と重複し得る前記ガード命令の任意の部分の値が、前記命令セットからの他の任意の命令の有効な操作コードでもなく、操作コードの先頭でもない、請求項6から11までのいずれか一項に記載のデータ処理装置。
  13. 前記データ・ストアが、前記ガード命令と同じ値を有するプログラム・コード内のリテラルとして、どのデータ値も格納しないように構成されている、請求項1から12までのいずれか一項に記載のデータ処理装置。
  14. 前記データ・ストアの少なくとも1つのあらかじめ定められたセクションが、前記ガード命令を有効に格納することを許可されるように前記データ・ストアをセグメント化するように構成されており、前記少なくとも1つのあらかじめ定められたセクションではない、前記データ・ストアのセグメント内に配置された前記ガード命令を検出することに応答して、安全性違反表示を生成するように構成されている、請求項1から13までのいずれか一項に記載のデータ処理装置。
  15. 前記少なくとも1つのあらかじめ定められたセクションが、前記ガード命令と同じ値を有するどのデータ値も格納しないように構成されている、請求項14に記載のデータ処理装置。
  16. 前記データ・ストアの低安全領域に格納されたプログラム・コードによって呼び出すことができる前記プログラム・コードの一部が、少なくとも1つのあらかじめ定められたセクションに格納されている、請求項14又は15に記載のデータ処理装置。
  17. 前記データ・ストアが、前記少なくとも1つのあらかじめ定められたセクション内の命令だけを格納するように構成されている、請求項14から16までのいずれか一項に記載のデータ処理装置。
  18. 前記データ・ストアへのアクセスを制御するためのメモリ・アクセス制御回路を備え、前記メモリ・アクセス制御回路が、前記メモリ・アクセス制御回路内の少なくとも1つのメモリ属性マーカを設定することによって、前記データ・ストアの少なくとも1つのあらかじめ定められたセクションを示すように構成されている、請求項14から17までのいずれか一項に記載のデータ処理装置。
  19. 前記処理回路が、前記ガード命令をドメイン切替え命令として処理し、前記ガード命令に応答して、操作の前記ドメインを、前記ガード命令を格納している前記データ・ストアの前記領域に対応するドメインに切り替えるように構成されている、請求項1から18までのいずれか一項に記載のデータ処理装置。
  20. 前記処理回路が、操作の前記現在のドメインを示しているドメイン・フラグから、操作の前記現在のドメインを決定するように構成されている、請求項1から19までのいずれか一項に記載のデータ処理装置。
  21. 分岐命令のリターン・アドレスを格納するように構成されたリンク・レジスタを備え、
    前記リンク・レジスタに格納された前記リターン・アドレスに分岐するための、前記少なくとも1つの安全領域に格納された分岐命令の実行に続き、前記処理回路が、操作の前記現在のドメインを前記さらなる異なる安全ドメインに切り替えるように構成されている、請求項1から20までのいずれか一項に記載のデータ処理装置。
  22. プログラム命令に応答してデータ処理操作を実施するための処理回路であって、異なる安全レベルを有する操作の複数のドメインを有し、安全ドメイン及びさらなる異なる安全ドメインを備え、前記安全ドメイン内で動作するときに、前記さらなる異なる安全ドメインではアクセスすることができない少なくともいくつかのデータにアクセスすることができる処理回路と、データと命令とを格納するためのデータ・ストアであって、複数の異なる領域を備え、各領域が操作の前記複数のドメインのうちの1つに対応する、データ・ストアと
    を備える装置のためのデータ処理方法であって、
    (i)実行されるべきプログラム命令のために、前記プログラム命令を格納している前記データ・ストアの領域が、前記処理回路の操作の現在のドメインに対応することを検証するステップと、
    (ii)前記処理回路の操作の前記現在のドメインに対応しない前記データ・ストアの領域に前記プログラム命令が格納されていることを検出することに応答して、
    (iii)前記プログラム命令がガード命令を備えるかどうかを検証するステップと、
    (iv)前記プログラム命令が前記ガード命令を備える場合、操作の前記ドメインを、前記プログラム命令を格納している前記データ・ストアの前記領域に対応するドメインに切り替えるステップと、
    (v)前記プログラム命令が前記ガード命令を備えない場合、安全性違反表示を生成するステップとを備える、データ処理方法。
  23. プログラム命令に応答してデータ処理操作を実施するための処理手段であって、異なる安全レベルを有する操作の複数のドメインを有し、安全ドメイン及びさらなる異なる安全ドメインを備え、前記安全ドメイン内で動作するときに、前記さらなる異なる安全ドメインではアクセスすることができない少なくともいくつかのデータにアクセスすることができる処理手段と、
    データと命令とを格納するためのデータ格納手段であって、それぞれが操作の前記複数のドメインのうちの1つに対応する複数の領域を備え、また、前記安全ドメイン内で動作している前記データ処理手段によってアクセスすることができ、前記さらなる異なる安全ドメイン内で動作している前記データ処理手段によってアクセスすることができない、機密データを格納するための少なくとも1つの安全領域と、機密性の低いデータを格納するための低安全領域とを備えるデータ格納手段と
    を備えるデータ処理装置であって、
    前記処理手段が、
    実行されるべきプログラム命令のために、前記プログラム命令を格納している前記データ格納手段の領域が、前記処理手段の操作の現在のドメインに対応することを検証し、
    前記プログラム命令が、前記処理手段の操作の前記現在のドメインに対応しない前記データ格納手段の領域に格納されていることを検出することに応答して、
    前記プログラム命令がガード命令を備えるかどうかを検証し、
    前記プログラム命令が前記ガード命令を備える場合、操作の前記ドメインを、前記プログラム命令を格納している前記データ格納手段の前記領域に対応するドメインに切り替え、
    前記プログラム命令が前記ガード命令を備えない場合、安全性違反表示を生成するためのものである、データ処理装置。
JP2015533687A 2012-10-01 2013-09-17 データ・プロセッサ内の異なる操作ドメイン間を切り替える安全な手段 Active JP6272875B2 (ja)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
GB1217531.1 2012-10-01
GB201217531A GB201217531D0 (en) 2012-10-01 2012-10-01 ARMv7-M Asset Protection Proposal
GB1313869.8A GB2506501A (en) 2012-10-01 2013-08-02 A secure mechanism to switch between different domains of operation
GB1313869.8 2013-08-02
PCT/GB2013/052423 WO2014053806A1 (en) 2012-10-01 2013-09-17 A secure mechanism to switch between different domains of operation in a data processor

Publications (2)

Publication Number Publication Date
JP2015534689A JP2015534689A (ja) 2015-12-03
JP6272875B2 true JP6272875B2 (ja) 2018-01-31

Family

ID=47225487

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2015533687A Active JP6272875B2 (ja) 2012-10-01 2013-09-17 データ・プロセッサ内の異なる操作ドメイン間を切り替える安全な手段

Country Status (12)

Country Link
US (1) US9122890B2 (ja)
EP (2) EP2888691B1 (ja)
JP (1) JP6272875B2 (ja)
KR (2) KR102160916B1 (ja)
CN (1) CN104756129B (ja)
AR (1) AR092752A1 (ja)
GB (2) GB201217531D0 (ja)
IL (2) IL237180B (ja)
IN (1) IN2015DN01188A (ja)
MY (2) MY176723A (ja)
TW (1) TWI607342B (ja)
WO (2) WO2014053802A1 (ja)

Families Citing this family (18)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20160314296A1 (en) * 2013-12-17 2016-10-27 Sequitur Labs ,Inc. Method and System for Dynamic Runtime Selection and Modification of Conditional Expressions in Computations
US9703733B2 (en) * 2014-06-27 2017-07-11 Intel Corporation Instructions and logic to interrupt and resume paging in a secure enclave page cache
CN105988713B (zh) * 2015-01-29 2019-01-08 深圳市硅格半导体有限公司 存储装置及存储方法
US9747218B2 (en) * 2015-03-20 2017-08-29 Mill Computing, Inc. CPU security mechanisms employing thread-specific protection domains
US9870466B2 (en) * 2015-09-26 2018-01-16 Mcafee, Inc. Hardware-enforced code paths
CN111651202B (zh) * 2016-04-26 2023-09-22 中科寒武纪科技股份有限公司 一种用于执行向量逻辑运算的装置
US20180004946A1 (en) * 2016-07-01 2018-01-04 Intel Corporation Regulating control transfers for execute-only code execution
US10650156B2 (en) 2017-04-26 2020-05-12 International Business Machines Corporation Environmental security controls to prevent unauthorized access to files, programs, and objects
GB2562102B (en) * 2017-05-05 2019-09-04 Advanced Risc Mach Ltd An apparatus and method for managing use of capabilities
CN109754062B (zh) * 2017-11-07 2024-05-14 上海寒武纪信息科技有限公司 卷积扩展指令的执行方法以及相关产品
US11914726B2 (en) 2018-08-30 2024-02-27 Micron Technology, Inc. Access control for processor registers based on execution domains
US11182507B2 (en) * 2018-08-30 2021-11-23 Micron Technology, Inc. Domain crossing in executing instructions in computer processors
GB2577878B (en) * 2018-10-08 2020-11-11 Advanced Risc Mach Ltd Transition disable indicator
CN111353595A (zh) * 2018-12-20 2020-06-30 上海寒武纪信息科技有限公司 运算方法、装置及相关产品
CN111339060B (zh) * 2018-12-19 2024-03-12 上海寒武纪信息科技有限公司 运算方法、装置、计算机设备和存储介质
CN111400341B (zh) * 2019-01-02 2022-12-09 上海寒武纪信息科技有限公司 标量查找指令处理方法、装置及相关产品
GB2589895B (en) * 2019-12-11 2022-03-16 Advanced Risc Mach Ltd Intermodal calling branch instruction
GB2589897B (en) * 2019-12-11 2022-03-23 Advanced Risc Mach Ltd Domain transition disable configuration parameter

Family Cites Families (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4087856A (en) * 1976-06-30 1978-05-02 International Business Machines Corporation Location dependence for assuring the security of system-control operations
US7383587B2 (en) * 2002-11-18 2008-06-03 Arm Limited Exception handling control in a secure processing system
GB0226875D0 (en) * 2002-11-18 2002-12-24 Advanced Risc Mach Ltd Control of access to a memory by a device
GB0226874D0 (en) * 2002-11-18 2002-12-24 Advanced Risc Mach Ltd Switching between secure and non-secure processing modes
US20040168047A1 (en) * 2003-02-24 2004-08-26 Matsushita Electric Industrial Co., Ltd. Processor and compiler for creating program for the processor
CN101076778A (zh) * 2004-12-14 2007-11-21 皇家飞利浦电子股份有限公司 可编程信号处理电路和交织方法
US8621607B2 (en) * 2006-05-18 2013-12-31 Vmware, Inc. Computational system including mechanisms for tracking taint
US8136091B2 (en) * 2007-01-31 2012-03-13 Microsoft Corporation Architectural support for software-based protection
GB2448149B (en) * 2007-04-03 2011-05-18 Advanced Risc Mach Ltd Protected function calling
US8578483B2 (en) * 2008-07-31 2013-11-05 Carnegie Mellon University Systems and methods for preventing unauthorized modification of an operating system
GB2482701C (en) * 2010-08-11 2018-12-26 Advanced Risc Mach Ltd Illegal mode change handling
US9798873B2 (en) * 2011-08-04 2017-10-24 Elwha Llc Processor operable to ensure code integrity

Also Published As

Publication number Publication date
IL237280A0 (en) 2015-04-30
IN2015DN01188A (ja) 2015-06-26
TWI607342B (zh) 2017-12-01
KR102186675B1 (ko) 2020-12-04
TW201415287A (zh) 2014-04-16
MY168636A (en) 2018-11-16
KR20150065735A (ko) 2015-06-15
AR092752A1 (es) 2015-04-29
EP2888691A1 (en) 2015-07-01
US9122890B2 (en) 2015-09-01
EP2888691B1 (en) 2018-11-21
WO2014053806A1 (en) 2014-04-10
GB201217531D0 (en) 2012-11-14
GB201313869D0 (en) 2013-09-18
CN104756129A (zh) 2015-07-01
EP2885738B1 (en) 2016-10-26
KR102160916B1 (ko) 2020-09-29
CN104756129B (zh) 2017-11-28
MY176723A (en) 2020-08-19
KR20150064069A (ko) 2015-06-10
WO2014053802A1 (en) 2014-04-10
IL237280B (en) 2018-04-30
IL237180B (en) 2018-06-28
JP2015534689A (ja) 2015-12-03
US20140075581A1 (en) 2014-03-13
GB2506501A (en) 2014-04-02
EP2885738A1 (en) 2015-06-24

Similar Documents

Publication Publication Date Title
JP6272875B2 (ja) データ・プロセッサ内の異なる操作ドメイン間を切り替える安全な手段
Shanbhogue et al. Security analysis of processor instruction set architecture for enforcing control-flow integrity
JP5000573B2 (ja) 保護された関数呼び出し
US20120216281A1 (en) Systems and Methods for Providing a Computing Device Having a Secure Operating System Kernel
KR102192835B1 (ko) 데이터 처리장치에서의 소프트웨어 라이브러리들의 보안 보호
US10210349B2 (en) Data processing apparatus and method using secure domain and less secure domain
TWI811456B (zh) 用於驗證堆疊指標的設備、方法、電腦程式及電腦可讀取儲存媒體
US20220366037A1 (en) Domain transition disable configuration parameter
EP4073635B1 (en) Intermodal calling branch instruction
TW202343257A (zh) 記憶體管理

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20160909

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20170823

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20170830

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20170907

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20171212

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20180104

R150 Certificate of patent or registration of utility model

Ref document number: 6272875

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250