IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ 三菱電機株式会社の特許一覧

特許7558460プログラム処理装置、プログラム処理方法、およびプログラム処理プログラム
<>
  • 特許-プログラム処理装置、プログラム処理方法、およびプログラム処理プログラム 図1
  • 特許-プログラム処理装置、プログラム処理方法、およびプログラム処理プログラム 図2
  • 特許-プログラム処理装置、プログラム処理方法、およびプログラム処理プログラム 図3
  • 特許-プログラム処理装置、プログラム処理方法、およびプログラム処理プログラム 図4
  • 特許-プログラム処理装置、プログラム処理方法、およびプログラム処理プログラム 図5
  • 特許-プログラム処理装置、プログラム処理方法、およびプログラム処理プログラム 図6
  • 特許-プログラム処理装置、プログラム処理方法、およびプログラム処理プログラム 図7
  • 特許-プログラム処理装置、プログラム処理方法、およびプログラム処理プログラム 図8
  • 特許-プログラム処理装置、プログラム処理方法、およびプログラム処理プログラム 図9
  • 特許-プログラム処理装置、プログラム処理方法、およびプログラム処理プログラム 図10
  • 特許-プログラム処理装置、プログラム処理方法、およびプログラム処理プログラム 図11
  • 特許-プログラム処理装置、プログラム処理方法、およびプログラム処理プログラム 図12
  • 特許-プログラム処理装置、プログラム処理方法、およびプログラム処理プログラム 図13
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-09-19
(45)【発行日】2024-09-30
(54)【発明の名称】プログラム処理装置、プログラム処理方法、およびプログラム処理プログラム
(51)【国際特許分類】
   G06F 12/14 20060101AFI20240920BHJP
【FI】
G06F12/14 510D
【請求項の数】 9
(21)【出願番号】P 2024534203
(86)(22)【出願日】2022-09-15
(86)【国際出願番号】 JP2022034643
(87)【国際公開番号】W WO2024057507
(87)【国際公開日】2024-03-21
【審査請求日】2024-06-07
【早期審査対象出願】
(73)【特許権者】
【識別番号】000006013
【氏名又は名称】三菱電機株式会社
(74)【代理人】
【識別番号】110002491
【氏名又は名称】弁理士法人クロスボーダー特許事務所
(72)【発明者】
【氏名】梨本 翔永
【審査官】松平 英
(56)【参考文献】
【文献】特開2016-66860(JP,A)
【文献】特開2011-8778(JP,A)
【文献】特開2003-150450(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F12/14
21/00-21/88
G09C 1/00-5/00
H04K 1/00-3/00
H04L 9/00-9/40
(57)【特許請求の範囲】
【請求項1】
プログラムあるいはプログラムが使用するメモリについて物理アドレスと論理アドレスとを指定する設定データをもとにアドレスマスクテーブルを生成するアドレスマスクテーブル生成部と、
プログラムにコンテキストスイッチを行う関数であるコールラッパーを付与し、プログラムからコンテキストスイッチを行う遷移処理を特定し、前記遷移処理を前記コールラッパーが展開される物理アドレスを指定してジャンプする処理に置換する対策適用部と、
対策を適用したプログラムを実行する中で、前記アドレスマスクテーブルを参照してメモリを確保して論理アドレス割り当てを行い、前記遷移処理においてジャンプアドレスをそのまま取得する代わりに、前記アドレスマスクテーブルを参照して取得したジャンプアドレスを、設定された分離設定をもとにアンマスクしたものを使用するように変更する実行部と
を備えたプログラム処理装置。
【請求項2】
前記アドレスマスクテーブル生成部は、
前記設定データにおいて、プログラムあるいはプログラムが使用するメモリについて物理アドレスと論理アドレスにバリエーションを持たせて、複数の組み合わせで前記アドレスマスクテーブルを生成する請求項1に記載のプログラム処理装置。
【請求項3】
前記対策適用部は、プログラムの実行前に前記コールラッパーを静的に付与する代わりに、前記コールラッパーのリンク処理を追加し、
前記実行部は、プログラムの実行時には動的な前記リンク処理を実行することにより前記コールラッパーをリンクする請求項1または請求項2に記載のプログラム処理装置。
【請求項4】
前記アドレスマスクテーブル生成部は、
前記アドレスマスクテーブルをハッシュテーブルとして生成する請求項1または請求項2に記載のプログラム処理装置。
【請求項5】
プログラムあるいはプログラムが使用するメモリについて物理アドレスと論理アドレスを指定する設定データをもとにアドレスマスクテーブルを生成するアドレスマスクテーブル生成部と、
プログラムに、コンテキストスイッチを行う関数であるコールラッパーを付与し、プログラムからコンテキストスイッチを行う遷移処理を特定し、前記遷移処理を前記コールラッパーが展開される物理アドレスを指定してジャンプする処理に置換し、前記アドレスマスクテーブルにしたがって論理アドレスおよび物理アドレスを指定してメモリ確保して論理アドレス割り当てを行うプログラム対策適用部と、
セキュリティモニタのコンテキストスイッチを特定し、特定されたコンテキストスイッチの前に存在するジャンプアドレス取得処理を、前記アドレスマスクテーブルを参照してマスクされたジャンプアドレスをマスクジャンプアドレスとして取得し、取得したマスクジャンプアドレスを、設定された分離設定をもとにアンマスク処理してジャンプアドレスを計算する処理に変更するセキュリティモニタ対策適用部と
を備えたプログラム処理装置。
【請求項6】
コンピュータが、プログラムあるいはプログラムが使用するメモリについて物理アドレスと論理アドレスとを指定する設定データをもとにアドレスマスクテーブルを生成し、
コンピュータが、プログラムにコンテキストスイッチを行う関数であるコールラッパーを付与し、プログラムからコンテキストスイッチを行う遷移処理を特定し、前記遷移処理を前記コールラッパーが展開される物理アドレスを指定してジャンプする処理に置換し、
コンピュータが、対策を適用したプログラムを実行する中で、前記アドレスマスクテーブルを参照してメモリを確保して論理アドレス割り当てを行い、前記遷移処理においてジャンプアドレスをそのまま取得する代わりに、前記アドレスマスクテーブルを参照して取得したジャンプアドレスを、設定された分離設定をもとにアンマスクしたものを使用するように変更するプログラム処理方法。
【請求項7】
プログラムあるいはプログラムが使用するメモリについて物理アドレスと論理アドレスとを指定する設定データをもとにアドレスマスクテーブルを生成するアドレスマスクテーブル生成処理と、
プログラムにコンテキストスイッチを行う関数であるコールラッパーを付与し、プログラムからコンテキストスイッチを行う遷移処理を特定し、前記遷移処理を前記コールラッパーが展開される物理アドレスを指定してジャンプする処理に置換する対策適用処理と、
対策を適用したプログラムを実行する中で、前記アドレスマスクテーブルを参照してメモリを確保して論理アドレス割り当てを行い、前記遷移処理においてジャンプアドレスをそのまま取得する代わりに、前記アドレスマスクテーブルを参照して取得したジャンプアドレスを、設定された分離設定をもとにアンマスクしたものを使用するように変更する実行処理と
をコンピュータに実行させるプログラム処理プログラム。
【請求項8】
コンピュータが、プログラムあるいはプログラムが使用するメモリについて物理アドレスと論理アドレスを指定する設定データをもとにアドレスマスクテーブルを生成し、
コンピュータが、プログラムに、コンテキストスイッチを行う関数であるコールラッパーを付与し、プログラムからコンテキストスイッチを行う遷移処理を特定し、前記遷移処理を前記コールラッパーが展開される物理アドレスを指定してジャンプする処理に置換し、前記アドレスマスクテーブルにしたがって論理アドレスおよび物理アドレスを指定してメモリ確保して論理アドレス割り当てを行い、
コンピュータが、セキュリティモニタのコンテキストスイッチを特定し、特定されたコンテキストスイッチの前に存在するジャンプアドレス取得処理を、前記アドレスマスクテーブルを参照してマスクされたジャンプアドレスをマスクジャンプアドレスとして取得し、取得したマスクジャンプアドレスを、設定された分離設定をもとにアンマスク処理してジャンプアドレスを計算する処理に変更するプログラム処理方法。
【請求項9】
プログラムあるいはプログラムが使用するメモリについて物理アドレスと論理アドレスを指定する設定データをもとにアドレスマスクテーブルを生成するアドレスマスクテーブル生成処理と、
プログラムに、コンテキストスイッチを行う関数であるコールラッパーを付与し、プログラムからコンテキストスイッチを行う遷移処理を特定し、前記遷移処理を前記コールラッパーが展開される物理アドレスを指定してジャンプする処理に置換し、前記アドレスマスクテーブルにしたがって論理アドレスおよび物理アドレスを指定してメモリ確保して論理アドレス割り当てを行うプログラム対策適用処理と、
セキュリティモニタのコンテキストスイッチを特定し、特定されたコンテキストスイッチの前に存在するジャンプアドレス取得処理を、前記アドレスマスクテーブルを参照してマスクされたジャンプアドレスをマスクジャンプアドレスとして取得し、取得したマスクジャンプアドレスを、設定された分離設定をもとにアンマスク処理してジャンプアドレスを計算する処理に変更するセキュリティモニタ対策適用処理と
をコンピュータに実行させるプログラム処理プログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本開示は、プログラム処理装置、プログラム処理方法、およびプログラム処理プログラムに関する。
【背景技術】
【0002】
TEEは、プロセッサの有するメモリ保護機構を使用してアプリケーション間のアクセス制御を行うセキュアな実行環境である。TEEは、Trusted Execution Environmentの略語である。例えば、セキュリティにクリティカルなアプリケーションをTEE上で実行することで、ライブラリまたはアプリケーションに脆弱性が見つかったとしても、その脆弱性の影響がセキュリティにクリティカルなアプリケーションに伝搬することを防ぐことができる。
【0003】
TEEはソフトウェアによる攻撃を防ぐ仕組みである。一方、組込み機器のように物理アクセスが可能な機器でのTEE環境については、フォールト攻撃と呼ばれる物理攻撃の危険性が指摘されている。フォールト攻撃とは、プロセッサに対して能動的に作用し、命令スキップあるいはデータ誤りを生じさせ、一時的な計算あるいはデータの誤りを誘発する攻撃である。非特許文献1では、故障注入攻撃と呼ばれる物理的な攻撃方法によりメモリ保護機構のアクセス権限の設定を無効化し、本来は許可されないメモリアクセスが可能になることが示されている。
【先行技術文献】
【非特許文献】
【0004】
【文献】Nashimoto, Shoei, et al. “Bypassing Isolated Execution on RISC-V using Side―Channel―Assisted Fault―Injection and Its Countermeasure.” IACR Transactions on Cryptographic Hardware and Embedded Systems (2022): 28―68.
【発明の概要】
【発明が解決しようとする課題】
【0005】
例えば、TEEへの物理攻撃を防ぐために、エントリーポイントを保護対象の値、すなわちアクセス権限の設定値でマスクしておき、実行時にアンマスクして元のエントリーポイントを計算する方式がある。
【0006】
しかし、保護対象となるプログラムを動的にロードしマップするOSの場合、分離設定が実行の度に動的に変化するため、エントリーポイントのマスキングは利用できない。OSは、Operating Systemの略語である。保護対象となるプログラムを動的にロードしマップするOSとは、プログラムをメモリへ読み込み、物理メモリを確保して論理アドレスを割り当てることでプログラムを実行できるようにするOSのことである。
【0007】
本開示では、プログラムへの遷移を予め期待される分離設定の値でマスクされたジャンプアドレスをもとに計算することにより、許可されないメモリアクセスを防止することを目的とする。
【課題を解決するための手段】
【0008】
本開示に係るプログラム処理装置は、
プログラムあるいはプログラムが使用するメモリについて物理アドレスと論理アドレスとを指定する設定データと、
コンテキストスイッチを行う関数であるコールラッパーと、
前記設定データをもとにアドレスマスクテーブルを生成するアドレスマスクテーブル生成部と、
プログラムに前記コールラッパーを付与し、プログラムからコンテキストスイッチを行う遷移処理を特定し、前記遷移処理を前記コールラッパーが展開される物理アドレスを指定してジャンプする処理に置換する対策適用部と、
対策を適用したプログラムを実行する中で、前記アドレスマスクテーブルを参照してメモリを確保して論理アドレス割り当てを行い、前記遷移処理においてジャンプアドレスをそのまま取得する代わりに、前記アドレスマスクテーブルを参照して取得したジャンプアドレスを、設定された分離設定をもとにアンマスクしたものを使用するように変更する実行部とを備えた。
【発明の効果】
【0009】
本開示では、保護対象となるプログラムを動的にロードしマップするOS環境であっても、アドレスマスクテーブルを使用してプログラムをロードしマップすることで、分離設定とエントリーポイントおよびジャンプアドレスとを固定することができる。本開示では、プログラムへの遷移は予め期待される分離設定の値でマスクされたジャンプアドレスをもとに計算されるため、攻撃などにより分離設定が予期せぬ値になっている場合には正しく遷移が実行されず、攻撃は成立しない。よって、本開示に係るプログラム処理装置によれば、許可されないメモリアクセスを防止することができるという効果を奏する。
【図面の簡単な説明】
【0010】
図1】実施の形態1に係るプログラム処理装置の構成例を示す図。
図2】実施の形態1に係るアドレスマスクテーブルの構成例を示す図。
図3】実施の形態1に係るプログラム処理装置の動作を示すフロー図。
図4】実施の形態1に係るアドレスマスクテーブル生成部の動作を示すフロー図。
図5】実施の形態1に係るアクセス制御を実現するための分離設定の例を示す図。
図6】実施の形態1に係る対策適用部の動作を示すフロー図。
図7】実施の形態1に係る実行部の動作を示すフロー図。
図8】実施の形態1に係る分離設定の変更からジャンプアドレスアンマスク処理の実行を示す図。
図9】実施の形態2に係るプログラム処理装置100の構成例を示す図。
図10】実施の形態2に係るプログラム処理装置100の動作を示すフロー図。
図11】実施の形態2に係るアドレスマスクテーブル生成部の動作を示すフロー図。
図12】実施の形態2に係るプログラム対策適用部の動作を示すフロー図。
図13】実施の形態2に係るセキュリティモニタ対策適用部の動作を示すフロー図。
【発明を実施するための形態】
【0011】
以下、本実施の形態について、図を用いて説明する。各図中、同一または相当する部分には、同一符号を付している。実施の形態の説明において、同一または相当する部分については、説明を適宜省略または簡略化する。図中の矢印はデータの流れまたは処理の流れを主に示している。
【0012】
実施の形態1.
***構成の説明***
図1は、本実施の形態に係るプログラム処理装置100の構成例を示す図である。
プログラム処理装置100は、プロセッサ101と、主記憶メモリ102と、記憶装置103と、入出力インタフェース104と、ストレージ105とを備えるコンピュータである。これらのハードウェアは信号線を介して互いに接続されてる。
【0013】
プロセッサ101は、演算処理を行うICであり、他のハードウェアを制御する。
プロセッサ101は、演算レジスタを有し、演算レジスタに命令とデータとをロードして命令に従ったデータ処理を実行する。
例えば、プロセッサ101は、CPUあるいはFPGAである。
ICは、Integrated Circuitの略称である。
CPUは、Central Processing Unitの略称である。
FPGAは、Field Programable Gated Arrayの略称である。
プロセッサ101は、プロセッシングサーキットリとも呼ばれる。つまり、プログラム処理装置100の機能は、プロセッシングサーキットリにより実現される。
【0014】
主記憶メモリ102は、揮発性の記憶装置と不揮発性の記憶装置との少なくともいずれかである。揮発性の記憶装置の具体例は、RAMである。不揮発性の記憶装置の具体例は、ROM、HDDまたはフラッシュメモリである。
RAMは、Random Access Memoryの略称である。
ROMは、Read Only Memoryの略称である。
HDDは、Hard Disk Driveの略称である。
以下、アドレスとは、主記憶メモリ102のメモリアドレスをいう。
【0015】
記憶装置103は、データを保管する不揮発性の記憶装置である。不揮発性の記憶装置の具体例は、ROM、HDDまたはフラッシュメモリである。
【0016】
入出力インタフェース104は、入出力のためのインタフェースである。例えば、入出力インタフェース104は、シリアル通信インタフェースあるいはデバッグインタフェースである。シリアル通信インタフェースの具体例は、SPI、UARTまたはI2Cである。デバッグインタフェースの具体例は、JTAGまたはJWDである。
SPIは、Serial Peripheral Interfaceの略称である。
UARTは、Universal Asynchronous Receiver Transmitterの略称である。
I2Cは、Inter-Integrated Circuitの略称である。
JTAGは、Joint Test Action Groupの略称である。
SWDは、Serial Wire Debugの略称である。
【0017】
ストレージ105は、記憶装置である。
ストレージ105の具体例は、メモリ、または、レジスタである。
ストレージ105は、プロセッサ101によりアクセスされるデータを記憶する。
ストレージ105は、主記憶メモリ102の一部でも構わないし、記憶装置103の一部でも構わないし、プロセッサ101のレジスタでもよいし、独立した記憶デバイスでもよい。
【0018】
プロセッサ101は、メモリ監視部110、アドレスマスクテーブル生成部120、対策適用部130、実行部140といった要素を備える。
メモリ監視部110は、プロセッサに内蔵されるメモリ監視ユニットのようなハードウェアにより実現される。例えば、メモリ監視部110は、ソフトウェアが扱う論理アドレスとハードウェアが扱う物理アドレスとを変換するメモリ管理ユニットあるいはプログラムの不正なメモリアクセスを防止するためのメモリ保護ユニットである。
アドレスマスクテーブル生成部120、対策適用部130、および実行部140とはソフトウェアで実現される。
【0019】
メモリ監視部110とアドレスマスクテーブル生成部120と対策適用部130と実行部140の各部の「部」を「回路」、「工程」、「手順」、「処理」、あるいは「サーキットリー」に読み替えてもよい。プログラム処理プログラムは、メモリ監視処理とアドレスマスクテーブル生成処理と対策適用処理と実行処理を、コンピュータに実行させる。メモリ監視処理とアドレスマスクテーブル生成処理と対策適用処理と実行処理の「処理」を「プログラム」、「プログラムプロダクト」、「プログラムを記憶したコンピュータ読取可能な記憶媒体」、または「プログラムを記録したコンピュータ読取可能な記録媒体」に読み替えてもよい。また、プログラム処理方法は、プログラム処理装置100がプログラム処理プログラムを実行することにより行われる方法である。
プログラム処理プログラムは、コンピュータ読取可能な記録媒体に格納されて提供されてもよい。また、プログラム処理プログラムは、プログラムプロダクトとして提供されてもよい。
【0020】
記憶装置103には、プロセッサ101によって動作するUntrustedプログラム150と
単一あるいは複数のTrustedプログラム151と
アドレスマスクテーブル生成部120と対策適用部130と実行部140とを実行する対策プログラム152と
前記対策プログラム152が対策適用部130を実行することで生成された対策済みUntrustedプログラム153および対策済みTrustedプログラム154と、
前記対策プログラム152がアドレスマスクテーブル生成部120を実行することで生成されたアドレスマスクテーブル155と
前記対策済みUntrustedプログラム153および前記対策済みTrustedプログラム154を実行するために必要なメモリ監視部110の分離設定を変更するセキュリティモニタ156と
前記対策プログラム152がアドレスマスクテーブル生成部120、対策適用部130および実行部140を実行するために必要なコールラッパー157と
前記対策プログラム152がアドレスマスクテーブル生成部120を実行するために必要な設定データ158とが記憶されている。記憶装置103には、オペレーティングシステム、ネットワークドライバおよびストレージドライバが記憶されている。
図1に示すように、主記憶メモリ102には、記憶装置103に記憶されたソフトウェアとデータが読み込まれる。
【0021】
Untrustedプログラム150は、通常のOS上で実行される信頼できないプログラムである。
【0022】
Trustedプログラム151は、セキュアな環境(TEE)上で実行される信頼できるプログラムである。
Trustedプログラム151は、保護の対象となる保護対象プログラムである。
【0023】
対策済みUntrustedプログラム153および対策済みTrustedプログラム154は、対策プログラム152によって攻撃対策を施されたプログラムである。
【0024】
セキュリティモニタ156は、ストレージ105に保存される分離設定の変更および対策済みUntrustedプログラム153と対策済みTrustedプログラム154のコンテキストスイッチを主に行うプログラムである。
セキュリティモニタ156は、一般的に対策済みUntrustedプログラム153と対策済みTrustedプログラム154およびOSよりも高い権限で動作するプログラムである。
【0025】
本実施の形態のUntrustedプログラム150とTrustedプログラム151と対策プログラム152と対策済みUntrustedプログラム153と対策済みTrustedプログラム154とセキュリティモニタ156は、エグゼキュータブルな形式の実行モジュールである。
実行モジュールは、バイナリコードで記載されており、プロセッサ101が解釈できるマシンランゲージで記載されている。
図1は、プロセッサ101が、対策プログラム152を主記憶メモリ102に読み込み、実行部140を実行する直前の状態を示している。
【0026】
対策プログラム152は、Trustedプログラム151のセキュリティを強化するプログラムである。そのためには、Untrustedプログラム150も含めて対策を適用する。
対策プログラム152は、アドレスマスクテーブル生成部120と対策適用部130と実行部140の機能を実現するプログラムである。
【0027】
コールラッパー157は、エントリーポイントのアドレスを固定化するために付与するコンテキストスイッチを代理するラッパー(ある処理を抽象化して提供する)関数である。コールラッパー157は、端的には、セキュリティモニタ156を呼び出すための環境呼び出し例外命令を実行する。
コールラッパー157は、ライブラリなどの形式の実行モジュールである。
【0028】
ストレージ105は、分離設定を記憶する。分離設定とは、対策済みUntrustedプログラム153および対策済みTrustedプログラム154とセキュリティモニタ156とこれらのプログラムで共有される共有メモリが使用する物理メモリに対応付けられた値である。すなわち、これらの物理アドレスを対象として、コンテキスト状態に応じてメモリ監視部110がメモリアクセスの監視を行うための設定値である。例えば、保護対象となる物理アドレスとその範囲とアクセス権限を有する。アクセス権限とは、あるメモリに対して実行・読込・書込を行うための権限である。
【0029】
設定データ158は、アドレスマスクテーブル155を生成するための設定値である。
具体的には、
対策済みUntrustedプログラム153が実行するコールラッパー157をマップする論理アドレスと
対策済みTrustedプログラム154をマップする論理アドレスと
共有メモリで使用する物理アドレスと
共有メモリとして使用する可能性があるサイズのバリエーション(例えば、128MBあるいは1GBなど)とである。
【0030】
対策適用部130は、遷移特定部111と遷移処理置換部112と対策時リンク部113とを含む。これらは、対策適用部130を実現するための補助的な機能である。
【0031】
実行部140は、メモリ確保部141とロード部142とジャンプアドレスアンマスク部143と実行時リンク部144とを含む。これらは、セキュリティモニタ156あるいはOSの処理の一部を拡張して実行部140の機能を実現するための補助的な機能である。
【0032】
図2は、本実施の形態に係るアドレスマスクテーブル155の構成例を示す図である。
ここでは、動作の説明の前に、図2を用いてアドレスマスクテーブル155の具体的な利用方法例を説明する。
【0033】
図2では、アドレスマスクテーブル155と、アドレスマスクテーブル155を利用して対策済みUntrustedプログラム153と対策済みTrustedプログラム154を実行する時の主記憶メモリ102の状態を表している。
【0034】
アドレスマスクテーブル155では、番号(ID)とサイズ(size)を指定して、論理アドレス、物理アドレス、マスクエントリーポイント、マスクリターンアドレス、および用途とを参照することができる。論理アドレス、物理アドレス、マスクエントリーポイント、マスクリターンアドレス、および用途といった各情報をcontentともいう。論理アドレスは、対策済みUntrustedプログラム153が呼び出すコールラッパー157をマップする論理アドレス、あるいは対策済みTrustedプログラム154をマップする論理アドレスとして使用される。物理アドレスは、共有メモリが使用するベース物理アドレス(使用する物理メモリの先頭アドレス)を表す。
【0035】
主記憶メモリ102には、セキュリティモニタ156が展開済みである。
対策済みUntrustedプログラム153は実行時にロード・マップされるため、自動で物理アドレスおよび論理アドレスが割り当てられる。コールラッパー157は、アドレスマスクテーブル155のID=0の行から論理アドレスを参照して割り当てられる。物理アドレスは自動で確保された領域で良い。また、同行のマスクリターンアドレスをアンマスクした値はコールラッパー157の呼び出し元ルーチンへの復帰命令を示す。
【0036】
対策済みTrustedプログラム154は、対策済みUntrustedプログラム153が動作する中でアドレスマスクテーブル155を参照してロード・マップされる。対策済みUntrustedプログラム153と同様に、使用する物理アドレスは自動で確保された領域を、マップする論理アドレスはアドレスマスクテーブル155のID=1の行を参照して割り当てられる。同行のマスクエントリーポイントをアンマスクした値は、対策済みTrustedプログラム154の先頭に付与したコールラッパー157の先にあるエントリーポイントを表す。同様にマスクリターンアドレスをアンマスクした値は、同コールラッパー157の呼び出し元ルーチンへの復帰命令を示す。
【0037】
共有メモリは、物理アドレスを指定して領域を確保される。マップする論理アドレスは自動で確保されるもので良い。なお、共有メモリは対策済みUntrustedプログラム153の動作に応じてサイズにバリエーションを持つことを想定している。このため、対策済みTrustedプログラム154のマスクジャンプアドレスは複数のバリエーションを持っている。
【0038】
***動作の説明***
次に、本実施の形態に係るプログラム処理装置100の動作について説明する。プログラム処理装置100の動作手順は、プログラム処理方法に相当する。また、プログラム処理装置100の動作を実現するプログラムは、プログラム処理プログラムに相当する。
【0039】
図3は、本実施の形態に係るプログラム処理装置100の動作を示すフロー図である。
動作開始前には、セキュリティモニタ156は既に動作済みであり、設定データ158には値が設定されているものとする。
図3は、プログラム処理装置100が対策プログラム152を実行した時の動作を表す。
【0040】
ステップS110において、対策プログラム152は、アドレスマスクテーブル生成部120の機能を実行する。アドレスマスクテーブル生成部120は、プログラムあるいはプログラムが使用するメモリについて物理アドレスと論理アドレスとを指定する設定データ158をもとに、アドレスマスクテーブル155を生成する。アドレスマスクテーブル155の生成では、設定データ158とコールラッパー157を入力とし、アドレスマスクテーブル155を出力する。
【0041】
ステップS120において、対策プログラム152は、対策適用部130の機能を実行する。対策適用部130は、プログラムにコンテキストスイッチを行う関数であるコールラッパー157を付与し、プログラムからコンテキストスイッチを行う遷移処理を特定する。そして、対策適用部130は、遷移処理を、コールラッパー157が展開される物理アドレスを指定してジャンプする処理に置換する。対策の適用では、アドレスマスクテーブル155とコールラッパー157とUntrustedプログラム150とTrustedプログラム151とを入力とし、対策済みUntrustedプログラム153と対策済みTrustedプログラム154とを出力する。
【0042】
具体的には、対策時リンク部113が、プログラムにコールラッパー157を付与する。遷移特定部111が、プログラムからコンテキストスイッチを行う処理を特定する。遷移処理置換部112が、特定した遷移処理を、コールラッパー157が展開されるアドレスを指定してジャンプする処理に置換する。
【0043】
ステップS130において、対策プログラム152は、実行部140の機能を実行する。実行部140は、対策を適用したプログラムを実行する中で、アドレスマスクテーブル155を参照してメモリを確保して論理アドレス割り当てを行う。そして、実行部140は、遷移処理においてジャンプアドレスをそのまま取得する代わりに、アドレスマスクテーブル155を参照して取得したジャンプアドレスを、設定された分離設定をもとにアンマスクしたものを使用するように変更する。プログラムの実行では、アドレスマスクテーブル155とコールラッパー157と対策済みUntrustedプログラム153と対策済みTrustedプログラム154とを入力とし、対策済みUntrustedプログラム153と対策済みTrustedプログラム154の処理を実行する。なお、セキュリティモニタ156もフローチャートでは明示的に入力のように示しているが、先述のとおり事前に実行されていることを想定している。
【0044】
具体的には、メモリ確保部141およびロード部142が、対策を適用したプログラムを実行する中で、アドレスマスクテーブル155を参照してメモリ確保し論理アドレス割り当てを行う。ジャンプアドレスアンマスク部143が、コンテキストスイッチの遷移処理においてジャンプアドレスをそのまま取得する代わりに、アドレスマスクテーブル155を参照して取得したジャンプアドレスを、設定された分離設定をもとにアンマスクしたものを使用するように変更する。
通常は、どこかのメモリからジャンプアドレスを取得する。一方、本実施の形態における対策では、以下の処理が実施される。
1)アドレスマスクテーブルを参照してマスクされたジャンプアドレスを取得する。
2)設定された分離設定(具体的には後述するpmpcfg,pmpaddrといったレジスタ)をもとにアンマスクする。
以上により、通常と同じジャンプアドレスが復元される。ジャンプアドレスアンマスク部143では、このような処理が実施される。
【0045】
<アドレスマスクテーブル生成処理>
図4は、本実施の形態に係るアドレスマスクテーブル生成部120の動作を示すフロー図である。
図4に基づいて、アドレスマスクテーブル生成部120の動作(ステップS110)を説明する。
【0046】
アドレスマスクテーブル生成部120の目的は、図2に示したプログラム割り当てを実現するためのテーブルを生成することである。アドレスマスクテーブル生成部120は、プログラムあるいはプログラムが使用するメモリの物理アドレスおよび論理アドレスにバリエーションを持たせて、複数の組み合わせでアドレスマスクテーブル155を生成する。
設定データ158とは、図2に示す論理アドレスおよび物理アドレスと、共有メモリのサイズバリエーションである。すなわち、Untrustedプログラム150が呼び出すコールラッパー157をマップする論理アドレスと各Trustedプログラム151に割り当てる論理アドレスと共有メモリの物理アドレスおよびそのサイズバリエーションである。
【0047】
ステップS111において、アドレスマスクテーブル生成部120は、アドレスマスクテーブル155を初期化する。具体的には、図2に示したアドレスマスクテーブル155のすべての行を空にする。
【0048】
ステップS112において、アドレスマスクテーブル生成部120は、コールラッパーのサイズとリターンアドレスを計算する。
コールラッパーのサイズは、実行モジュールのサイズである。
リターンアドレスは、コールラッパーにおいて呼び出し元ルーチンへの復帰命令が配置されたアドレスである。例えば、プロセッサが持つリターンアドレスレジスタが指すアドレスへのジャンプ命令のような命令である。
【0049】
ステップS113において、アドレスマスクテーブル生成部120は、設定データ158で示された共有メモリサイズのサイズバリエーションの数だけ繰り返し処理を実行する。これは、イテレーションj=1からj=(サイズバリエーション数)まで処理を繰り返すことを意味する。
【0050】
ステップS114において、アドレスマスクテーブル生成部120は、セキュリティモニタ156の配置物理アドレスおよびプログラムサイズを取得する。これは、設定データ158とは別に、予め記憶装置に記憶しておいた値を想定する。セキュリティモニタ156は対策プログラム152の実行前に既に実行済みであり、かつ、メモリ監視部110により保護されていることから、本実施の形態の方式とは別に、既に実行される物理アドレスおよびプログラムサイズは決まっているものである。
【0051】
ステップS115において、アドレスマスクテーブル生成部120は、設定データ158を参照して共有メモリが使用する物理アドレスを取得する。
【0052】
ステップS116において、アドレスマスクテーブル生成部120は、分離設定からマスク値を計算する。
例として、RISC-Vアーキテクチャにおいては、保護対象となる物理ベースアドレスおよび保護サイズを表すpmpaddrレジスタ(アドレスレジスタ)とアクセス権限を決めるpmpcfgレジスタ(コンフィグレジスタ)で分離設定が決まる。これを保護対象プログラムの数だけ設定することになる。すなわち、一般的に、分離設定を決めるためには、物理アドレスとサイズとアクセス権限の情報が必要となる。
【0053】
図5は、本実施の形態に係るアクセス制御を実現するための分離設定の例を示す図である。
図5では、対策済みUntrustedプログラム153の動作時と対策済みTrustedプログラム154とが動作する時のアクセス制御状態を表す。また、そのために、アクセス制御対象に対して設定すべき分離設定、すなわち物理アドレス、サイズ、アクセス権限を表す。Unstrusted動作時には、アクセスしてはいけないプログラム(セキュリティモニタ156および対策済みTrustedプログラム154)を除き、全領域にアクセスできることを想定する。一方で、Trusted動作時には、対策済みTrustedプログラム154は、自身のメモリ領域と共有メモリを除いてアクセスが禁止されていると想定する。なお、明示的に権限が設定されていない場合はアクセスできないと想定する。
【0054】
このようなアクセス制御を実現するための分離設定は図5のとおりである。分離設定では、Untrusted動作時およびTrusted1動作時の物理アドレス、サイズ、権限を表す。
物理アドレスの「既定」とは、プログラム処理装置100として既定値が存在することを意味する。具体的には、セキュリティモニタ156あるいは主記憶メモリ102の全領域を表す場合である。物理アドレスの「未定」とは、実行時に決まることを意味する。例えば、対策済みTrustedプログラム154は、実行時に物理メモリが確保されてロード・マップされるため、基本的には物理アドレスとサイズは実行前には定まらない。物理アドレスの「設定」とは、設定データ158により規定されることを表す。共有メモリの物理アドレスが該当する。
【0055】
権限の「〇」は、実行・書込・読込のすべての権限を持つことを意味する。Untrusted動作時の全領域、Trusted1動作時の対策済みTrustedプログラム154の領域、および共有メモリはアクセス可能となっている。権限の「×」は、実行・書込・読込のすべての権限を持たないことを意味する。例えば、セキュリティモニタ156については、常にアクセスが禁じられている。
【0056】
以上をまとめると、セキュリティモニタ156のすべての分離設定、対策済みTrustedプログラム154の権限、その他(共有メモリなど)のUntrusted動作時のすべての分離設定、その他(共有メモリなど)の権限は、プログラムの実行前に定まることが分かる。さらに、設定データのサイズバリエーションを考慮すると、その他(共有メモリなど)のTrusted動作時のサイズも確定することが可能である。
【0057】
以上のことから、図5のような動作を想定した場合、マスク値算出に利用できる分離設定は、セキュリティモニタ156とその他(共有メモリなど)のすべての分離設定と対策済みTrustedプログラム154の権限である。すなわち、対策済みTrustedプログラム154の物理アドレスおよびサイズはマスク値算出には利用しない。
【0058】
以降では、物理アドレスとサイズを規定するアドレスレジスタをRegAddr、権限を規定するコンフィグレジスタをRegCfgと表現する。また、図5のとおり、n個のレジスタペア(これ以降、エントリと呼ぶ)に従って分離設定がなされると想定する。
【0059】
ステップS116に戻り、分離設定からマスク値を計算する方法を説明する。
マスク値は、次の式1のように計算できる。
【0060】
Mask[j]=Hash(RegAddr[0]||RegCfg[0]||RegCfg[1]||…||RegCfg[n―1]||RegAddr[n、j]||RegCfg[n]) 式(1)
Mask[j]は、j番目のサイズバリエーションに基づくマスク値、
Hash()は、ハッシュ関数、
||は、ビット列同士の結合、
RegAddr[i](i=1...n―1)は、i番目のアドレスレジスタ、
RegAddr[n、j](i=1...n)は、j番目のサイズバリエーションに基づくn番目のアドレスレジスタ、
RegCfg[i](i=1...n)は、i番目のコンフィグレジスタを表す。
【0061】
図5に示すとおり、Trusted動作時の共有メモリ設定はサイズバリエーションを考慮することでアドレスレジスタの設定が定まるため、RegAddr[n、j]のように、n番目のアドレスレジスタのみ、バリエーションを持つ。
【0062】
ステップS117において、設定データが持つ論理アドレスの数だけ繰り返し処理を実行する。これは、イテレーションi=1からi=(論理アドレスの数)まで処理を繰り返すことを意味する。
【0063】
ステップS118において、設定データ158を参照してi番目の論理アドレスを取り出す。
【0064】
ステップS119において、ステップS118で取得した論理アドレスとステップS116で計算したマスク値からマスクされた論理アドレスを計算する。計算すべきマスクされた論理アドレスには、図2に示すとおり、マスクエントリーポイントとマスクリターンアドレスの2種類がある。この計算は、式(2)のように表すことができる。
【0065】
AddrMask[i、j]=(Addr[i]+Offset)(+)Mask[j] 式(2)
AddrMask[i、j]は、i番目の論理アドレスをj番目のマスク値でマスキングしたマスクジャンプアドレス(エントリーポイントあるいはリターンアドレス)、
Offsetはエントリーポイントあるいはリターンアドレスを表すためのオフセット値、
(+)はXOR(eXclusive OR)演算を表す。
【0066】
Offsetは、ステップS112で計算したコールラッパーのサイズおよびリターンアドレスである。
Offsetがコールラッパーのサイズを表す場合、図2に示すとおりエントリーポイントとなる。
Offsetがコールラッパーのリターンアドレスを表す場合、図2に示すとおりリターンアドレスとなる。
なお、Untrustedプログラム150にはエントリーポイントが不要であるため、マスクリターンアドレスのみが計算される。
また、Untrustedプログラム150は、図5に示すとおりサイズバリエーションが不要である。そのため、j=1のサイズバリエーションは例外的にUntrustedプログラム150を処理することを表すこととし、ステップS117ではi=1のみを扱うことで、このような目的の動作を達成できる。逆に、j>1の場合は、ステップS117ではi=1を無視することで、目的の動作を達成できる。すなわち、図2に示すようなアドレスマスクテーブル155を構成できる。
【0067】
ステップS1110において、元の論理アドレス(Addr[i])とマスクした論理アドレス(AddrMask[i、j])をアドレスマスクテーブル155に登録する。ステップS117において取得した論理アドレスがTrustedプログラム151に対応するアドレスだった場合、マスクエントリーポイントとマスクリターンアドレスの両方が登録されることになる。
【0068】
ステップS1111において、ステップS117のイテレーションの終了判定が行われる。すなわち、iが論理アドレス数以上かを判定する。i<論理アドレス数の場合、ステップS117に進み、i>=論理アドレス数の場合、ステップS1112に進む。
【0069】
ステップS1112において、ステップS113のイテレーションの終了判定が行われる。すなわち、jが論理アドレス数以上かを判定する。j<サイズバリエーション数の場合、ステップS113に進み、j>=サイズバリエーション数の場合、ステップS1113に進む。
【0070】
ステップS1113において、ステップS115で取得した共有メモリの物理アドレスをアドレスマスクテーブル155に登録する。
以上の処理をもって、図2に示すようなアドレスマスクテーブル155を生成できる。
【0071】
<対策適用処理>
図6は、本実施の形態に係る対策適用部130の動作を示すフロー図である。
図6に基づいて、対策適用部130の動作(ステップS120)を説明する。
【0072】
ステップS121において、対策適用部130は、Untrustedプログラム150を解析し、Trustedプログラム151への遷移を特定する。
具体的には、環境呼び出し例外命令である。例えば、RISC-Vアーキテクチャの場合には、TrustedとUntrustedの切り替えには、環境呼び出し例外を用いてより権限の高いプログラム(セキュリティモニタ156)を呼ぶことが一般的である。すなわち、環境呼び出し例外命令ECALLの実行箇所を特定する。ステップS121は、例えば、対策適用部130の遷移特定部111による処理である。
【0073】
ステップS122において、対策適用部130は、アドレスマスクテーブル155を参照し、遷移処理をラッパー関数へのジャンプ命令に置換する。遷移先のジャンプアドレスは、図2に示すとおり、Untrustedプログラム150の場合も、Trustedプログラム151の場合も、アドレスマスクテーブル155の論理アドレスである。すなわち、このアドレスがコールラッパーのアドレス(関数へのエントリーポイント)を表す。ステップS122は、例えば、対策適用部130の遷移処理置換部112による処理である。
【0074】
ステップS123において、対策適用部130は、プログラムの実行前にコールラッパー157を静的に付与する代わりに、Untrustedプログラム150にコールラッパー157のリンク処理を追加する。これにより、対策済みUntrustedプログラム153の生成が完了する。ステップS123は、例えば、対策適用部130の対策時リンク部113による処理である。
【0075】
なお、この時点でコールラッパーを付与しない理由は、次のとおりである。コールラッパー157をUntrustedプログラム150の先頭に付与した場合はエントリーポイントが実行された場合にコールラッパー157が動作するため元の処理が実行されない。また、コールラッパー157をUntrustedプログラム150の末尾に付与した場合はプログラムサイズによってエントリーポイントが変化し、アドレスマスクテーブル155の論理アドレスがプログラム毎に変化する。すなわち、汎用的なアドレスマスクテーブル155を生成しつつ、処理の完全性を保証するために実行時にリンクする必要がある。
対策適用部130ではTrustedプログラムについては静的にコールラッパーを付与しておく。一方、Untrustedプログラムについては上記の理由によりコールラッパーを付与しない。
【0076】
ステップS124において、対策適用部130は、Trustedプログラム151の数だけ繰り返し処理を実行する。これは、イテレーションi=1からi=(Trustedプログラム151の数)まで処理を繰り返すことを意味する。
【0077】
ステップS125において、対策適用部130は、イテレーションiに対応するTrustedプログラム151を解析し、Unstrustedプログラムへの遷移を特定する。この処理はステップS121と同様である。
【0078】
ステップS126において、対策適用部130は、アドレスマスクテーブル155を参照し、遷移処理をラッパー関数へのジャンプ命令に置換する。この処理は、ステップS122と同様である。
【0079】
ステップS127において、対策適用部130は、Trustedプログラム151の先頭にコールラッパーを付与する。すなわち、ビット列として結合することを意味する。これにより、対策適用部130は、i番目の対策済みTrustedプログラム154の生成を完了する。
この時、対策適用部130は、コールラッパーのサイズに応じてプロセッサのビット幅に合わせて0パディングしてアラインメントしてもよい。その場合、ステップS112では、対策適用部130は、0パディングも考慮してコールラッパーのサイズを計算する。
【0080】
ステップS128において、ステップS124のイテレーションの終了判定が行われる。すなわち、iがTrustedプログラム数以上かを判定する。i<Trustedプログラム数の場合、ステップS124に戻り、i>=Trustedプログラム数の場合、処理を終了する。
【0081】
<実行処理>
図7は、本実施の形態に係る実行部140の動作を示すフロー図である。
図7に基づいて、実行部140の動作(ステップS130)を説明する。
【0082】
実行部140は、対策済みUntrustedプログラム153とセキュリティモニタ156と対策済みTrustedプログラム154とが交互に制御を持ち合って実行される。
【0083】
●対策済みUntrustedプログラム153
ステップ131において、実行部140は、対策済みUntrustedプログラム153を主記憶メモリ102にロードしマップして実行する。具体的には、実行部140は、物理メモリを確保して論理アドレスを割り当て、プログラムカウンタをエントリーポイントに設定する。これは、OSがバイナリプログラムを実行する時の通常の動作である。
【0084】
ステップS132において、実行部140は、プログラムの実行時には、ステップS123において追加された動的なリンク処理を動作し、コールラッパー157をリンクする。つまり、実行部140は、ステップ123で対策適用部130が付与した動的なリンク処理の動作により、コールラッパー157をロード・マップする。実行部140は、物理メモリを確保して論理アドレスを割り当てる。この時、割り当てるべき論理アドレスはアドレスマスクテーブル155を参照して決定する。具体的には、図2に示すとおり、ID=0の論理アドレスを採用する。
この処理はステップ123で対策適用部130が付与した動的なリンク処理である。
【0085】
ステップS133において、実行部140は、共有メモリの確保を行う。この時、OSが空き物理メモリを使用する処理の代わりに、メモリ確保部141が機能し、アドレスマスクテーブル155を参照して物理メモリを割り当てる。具体的には、ID=-1の物理アドレスを選択する。論理アドレスは自動で割り当てられるものを利用しても良い。
【0086】
ステップS134において、実行部140は、対策済みTrustedプログラム154のロードとマップを行う。この時、OSが空き物理メモリを使用してロードしマップする代わりに、ロード部142が機能し、空き物理メモリに対して割り当てる論理アドレスをアドレスマスクテーブル155から取得する。具体的には、ロードしマップする対策済みTrustedプログラム154の個数がIDに該当する。例えば、一つ目のプログラムであればID=1、n個目のプログラムであればID=nとする。
【0087】
ステップS135において、実行部140は、ステップS134でマップした対策済みTrustedプログラム154に遷移する。この処理は、ステップS122で置換した処理であり、コールラッパー157が呼び出される。すなわち、対策済みTrustedプログラム154への遷移の橋渡しとしてセキュリティモニタ156が呼ばれる。
【0088】
●セキュリティモニタ156
ステップS136において、実行部140は、セキュリティモニタ156が分離設定を変更する。すなわち、図5に示すとおり、UntrustedとTrustedの動作時のアクセス権限のとおり、設定を行う。
【0089】
ステップS137において、実行部140は、アドレスマスクテーブル155からジャンプアドレスを参照し、アンマスクしてジャンプする。この時、通常はセキュリティモニタ156が管理するアドレステーブルに従って対策済みTrustedプログラム154のエントリーポイントへ遷移するが、その代わりにジャンプアドレスアンマスク部143の機能により、このような処理に置き換えられる。
【0090】
図8は、本実施の形態に係る分離設定の変更からジャンプアドレスアンマスク処理の実行を示す図である。
図8に基づいて、ステップS136における分離設定の変更から、ステップS137におけるジャンプアドレスをアンマスクしてジャンプするジャンプアドレスアンマスク処理について説明する。
図8は、アドレスマスクテーブル155に従って、ジャンプアドレスアンマスク部143の機能が実行される様子を示している。
【0091】
100行目で、ジャンプアドレスアンマスク部143は、500行目を参照してデータを取得し、ストレージ105の分離設定を司るレジスタregに代入する。これにより、分離設定が変更される。
【0092】
110~150行目で、ジャンプアドレスアンマスク部143は、アドレスマスクテーブル155から対策済みTrustedプログラム154のマスクされたエントリーポイントを取得する。そのために、ベースアドレス、ID、サイズ、取得する内容(エントリーポイント、リターンアドレスなど)を指定してデータをロードする。
【0093】
ジャンプアドレスアンマスク部143は、160、170行目でアンマスク処理を行う。すなわち、ジャンプアドレスアンマスク部143は、ストレージ105に記録された分離設定を使用して、150行目でロードしたマスクされたアドレスをアンマスクする。この処理は、式(1)および(2)の逆の処理であり、以下の式(3)のように表すことができる。
【0094】
Addr=AddrMask(+)Hash(RegAddr[0]||RegCfg[0]||RegCfg[1]||…||RegCfg[n―1]||RegAddr[n]||RegCfg[n]) 式(3)
【0095】
このようにして得られた論理アドレスの値は、例えば、図8の170行目に示す「0x9000 0100」のような値である。すなわち、これは、後述するとおり、「0x9000 0000~0x9000 0100」をコールラッパーが使用しており、エントリーポイントは「0x9000 0100」から始まっていることを意味する。
【0096】
180行目でアンマスクして得られたアドレスにジャンプする。
以上の操作により、分離設定の変更からマスクされたジャンプアドレスをアンマスクして適切な処理に遷移することを実現できる。
【0097】
●対策済みTrustedプログラム154
図7に戻り、ステップS138において、実行部140は、対策済みTrustedプログラム154の処理を実行する。
【0098】
ステップS139において、実行部140は、対策済みUntrustedプログラム153に復帰する。この処理は、ステップS126で置換した処理であり、コールラッパー157が呼び出される。すなわち、対策済みUntrustedプログラム153への復帰の橋渡しとしてセキュリティモニタ156が呼ばれる。
【0099】
●セキュリティモニタ156
ステップS1310において、実行部140は、分離設定を変更する。この処理はステップS136と同様である。ただし、分離設定はUntrusted時の設定になる。
【0100】
ステップS1311において、実行部140は、アドレスマスクテーブル155からジャンプアドレスを参照し、アンマスクしてジャンプする。この処理はステップS137と同様である。ただし、アドレスマスクテーブル155から参照するアドレスはUntrustedプログラムのマスクされたリターンアドレスである。
【0101】
●対策済みUntrustedプログラム153
ステップS1312において、実行部140は、対策済みUntrustedプログラム153の処理に復帰し、残りの処理を実行する。
【0102】
以上がプログラム処理装置100の動作である。ただし、図7においては、各プログラムが持つ本来の処理は割愛し、コンテキストスイッチに関係する処理のみを抜き出して説明した。
【0103】
***特徴の説明***
本実施の形態に係るプログラム処理装置100では、図5を用いて説明したとおり、マスク値の計算に使用する分離設定を重要なものに絞って選択している。すなわち、あらゆる可能性を考慮した時に生じる組み合わせ爆発を防ぎ、現実的なサイズのアドレスマスクテーブル155を生成することができる。
また、ここでの分離設定の選択は、プログラムのサイズを制約しないことにもつながっている。具体的には、対策済みTrustedプログラム154が使用する物理アドレスはマスク値の計算に使用しないことで、予めプログラムサイズを規定しなければいけなくなることを防いでいる。
【0104】
コールラッパー157を利用することは、UntrustedおよびTrusted間のコンテキストスイッチにおけるリターンアドレスを一意に制限することに繋がっている。すなわち、ジャンプアドレスのマスキングを実現するためにリターンアドレスを固定化するだけでなく、アドレスマスクテーブル155のテーブルサイズを削減する効果も持つ。
【0105】
設定データ158にサイズバリエーションを持たせることで、共有メモリサイズに制限をかけることを防いでいる。これは対策済みTrustedプログラム154のプログラムサイズを規定しないことと同じ意味を持つが、共有メモリの物理アドレスのサイズに起因するアドレスレジスタはマスク値の計算に採用する必要がある。これは、図5に示したとおり、UntrustedとTrusted間のコンテキストスイッチにおいて、No.nのアドレスレジスタ(物理アドレスおよびサイズ)の設定が変化していることから分かるように、マスク計算に含めない場合にはこの値が破壊されたことに気付けないためである。
【0106】
アドレスマスクテーブル155のバリエーションは、図2の形式に限定されない。
例えば、一つ以上の対策済みTrustedプログラムの物理アドレスおよびそのサイズを制限する形でバリエーションを持たせ、アドレスマスクテーブル155を作成しても良い。その場合、アドレスマスクテーブル155のsizeの列が増え、組み合わせが掛け算で増える。その場合、実行部140の動作時に、ロード部142に加えてメモリ確保部141の機能も利用する必要がある。
あるいは、共有メモリが使用する物理アドレスのバリエーションを考慮せず、固定化しても良い。
【0107】
アドレスマスクテーブル155は共有メモリサイズのバリエーションを考慮して生成しているため、対策プログラム152により処理されて生成された対策済みUntrustedプログラム153と対策済みTrustedプログラム154での使用に限定されない。すなわち、別のUntrustedプログラム150およびTrustedプログラム151を与えて対策プログラム152を動作させた場合であっても、設定データ158が同じであれば、同じアドレスマスクテーブル155が生成される。
【0108】
対策プログラム152は、アドレスマスクテーブル生成(ステップS110)と対策適用(ステップS120)と実行(ステップS130)をシリアルに実行するように説明したが、いずれかのみを動作させても良い。
例えば、2度目以降の実行の際には、実行部140のみを実行しても良い。すなわち、生成された対策済みUntrustedプログラム153と対策済みTrustedプログラム154とアドレスマスクテーブル155を利用して、既存のコールラッパー157とセキュリティモニタ156とを動作させ、プログラムを実行することができる。
あるいは、設定データ158が変わらないという前提の下、新たなUntrustedプログラム150とTrustedプログラム151に対して、対策適用から実行しても良い。
【0109】
アドレスマスクテーブル155は、ハッシュテーブルとして実装しても良い。すなわち、図8に示すとおり、ID,size,contentを指定してハッシュを取った値が示すアドレスにID,size,contentを指定した時に本来参照できる値を格納しても良い。これにより、アドレスマスクテーブル155の参照処理においてフォールト攻撃が実施された場合であっても、意図しない値(例えば生の論理アドレス値)が露呈することを防ぐことができる。
【0110】
このような方法にしたがってアドレスマスクテーブル生成部120が生成したアドレスマスクテーブル155は、よりサイズが大きく、スパースなテーブルとなる。また、アドレスマスクテーブル155を参照する場合には、ID,size,contentをハッシュ化した値をキーとしてアドレスマスクテーブル155を参照するように変更する。ハッシュ化の例としては、以下の式(4)のとおりである。
Hash(ID||size||content) 式(4)
【0111】
***効果の説明***
本実施の形態に係るプログラム処理装置100では、設定データで指定された論理アドレスと物理アドレスとプログラムごとの分離設定をもとにマスク値を計算する。そして、プログラム処理装置100は、元の論理アドレスおよび物理アドレスとともにマスクされたジャンプアドレスが記載されたアドレスマスクテーブルを生成する。さらに、プログラム処理装置100は、実行対象プログラムのコンテキストスイッチ処理(UntrustedとTrustedが変化する処理)の遷移処理をコールラッパー呼び出しに置換する。また、プログラム処理装置100は、実行時に、アドレスマスクテーブルを参照して物理アドレスを確保したり論理アドレスを割り当てたりする。プログラム処理装置100は、コンテキストスイッチにおいてはアドレスマスクテーブルから取り出したマスクされたジャンプアドレスを、分離設定を用いてアンマスクし、遷移する。
以上の動作により、本実施の形態に係るプログラム処理装置100によれば、OS環境でも論理アドレスあるいは物理アドレスを部分的に固定してプログラムを実行することで、ジャンプアドレスのマスキングスキームを適用可能にする。
【0112】
本実施の形態に係るプログラム処理装置100では、アドレスマスクテーブル生成部120が、設定データをもとにエントリーポイントおよびリターンアドレスのマスク値、プログラムあるいは共有メモリが使用する論理アドレスおよび物理アドレスの一覧を記録したアドレスマスクテーブルを生成する。設定データには、TEEのアクセス権限の設定(分離設定)とプログラム(アプリケーション)が使用する論理アドレス・物理アドレス・共有メモリ、およびプログラムサイズのサイズバリエーションが記録されている。
また、対策適用部は、前記アドレスマスクテーブルに基づいてUntrustedおよびTrustedプログラムに対してコンテキストスイッチを代理処理するコールラッパーを実行前に付与する。
また、実行部は、前記アドレスマスクテーブルを用いて、前記コールラッパーを実行時に動的に付与し、前記対策済みUntrustedプログラム、Trustedプログラム、およびセキュリティモニタを実行する。
メモリ監視部は、設定された分離設定に基づいてメモリアクセスを監視する。
【0113】
本実施の形態に係るプログラム処理装置100によれば、OS環境のTEEであっても、プログラムあるいは共有メモリが配置される物理アドレス、あるいは割り当てられる論理アドレスを部分的に固定して実行することで、ジャンプアドレスをマスク・アンマスクすることができる。もしも分離設定が破壊された状態でコンテキストスイッチが生じる場合には、アンマスク処理において正しいジャンプアドレスを計算できず、異常なアドレスへのジャンプが生じる。このような動作はメモリ監視部110によって補足され、許可されないメモリアクセスを防止することができる。すなわち、プログラムが動作する時には正しい分離設定になっていることを保証できる。
【0114】
実施の形態2.
本実施の形態では、主に、実施の形態1と異なる点および実施の形態1に追加する点について説明する。
本実施の形態において、実施の形態1と同様の機能を有する構成については同一の符号を付し、その説明を省略する。
【0115】
***構成の説明***
図9は、本実施の形態に係るプログラム処理装置100の構成例を示す図である。
特に、図1に示すプログラム処理装置100の構成との違いを説明する。
【0116】
プロセッサ101は、アドレスマスクテーブル生成部210とプログラム対策適用部220とセキュリティモニタ対策適用部230といった要素を備える。プログラム対策適用部220は、遷移特定部111と遷移処理置換部112とアドレス指定部221とリンク部222を含む。セキュリティモニタ対策適用部230はコンテキストスイッチ特定部231とアンマスク処理追加部232を含む。
アドレスマスクテーブル生成部210とプログラム対策適用部220とセキュリティモニタ対策適用部230とはソフトウェアで実現される。
【0117】
記憶装置103には、プロセッサ101によって動作する対策プログラム152と対策プログラム152が使用するコールラッパー157とが記憶されている。
図9に示すように、主記憶メモリ102には、記憶装置103に記憶されたソフトウェアとデータが読み込まれ、対策プログラム152が生成したアドレスマスクテーブル155と対策済みプログラム240と対策済みセキュリティモニタ241とが記憶される。
【0118】
入出力インタフェース104を介して、Untrustedプログラム150とTrustedプログラム151とセキュリティモニタ156と設定データ250とが入力される。また、対策プログラム152が動作することにより、対策済みプログラム240と対策済みセキュリティモニタ241とが出力される。
【0119】
設定データ250は、論理アドレス、物理アドレス、メモリ確保処理指定を含む。論理アドレスおよび物理アドレスは実施の形態1の設定データ158と同様である。ただし、物理アドレスとして、セキュリティモニタ156の物理アドレスを含む。
設定データ250は、実施の形態1の設定データ158のようにサイズバリエーションを持たず、入力されたUntrustedプログラム150とTrustedプログラム151に適した形でマスクされたアドレスを計算する。そのために、設定データ250は、メモリ確保処理指定を持つ。すなわち、保護対象のUntrustedプログラム150が確保する共有メモリあるいはTrustedプログラム151のロードおよびマップ処理の箇所を指定することでそれらを解析できるようにし、ジャンプアドレスマスキングを適用できるように処理を置換する。
【0120】
本実施の形態のUntrustedプログラム150とTrustedプログラム151とセキュリティモニタ156はソースコードである。
対策済みプログラム240と対策済みセキュリティモニタ241とはエグゼキュータブルな実行モジュールである。
すなわち、プログラム処理装置100は、端的にはコンパイル装置である。また、コンパイル後のプログラムはメモリ監視部110を備えるプロセッサ上で動作させることを想定する。
【0121】
***動作の説明***
次に、本実施の形態に係るプログラム処理装置100の動作について説明する。プログラム処理装置100の動作手順は、プログラム処理方法に相当する。また、プログラム処理装置100の動作を実現するプログラムは、プログラム処理プログラムに相当する。
【0122】
図10は、本実施の形態に係るプログラム処理装置100の動作を示すフロー図である。
図10に基づいて、プログラム処理装置100の動作を説明する。
【0123】
ステップS210において、対策プログラム152は、アドレスマスクテーブル生成部210の機能を実行し、アドレスマスクテーブルを生成する。アドレスマスクテーブルの生成では、設定データ250とコールラッパー157とセキュリティモニタ156を入力として、アドレスマスクテーブル155を生成する。
【0124】
ステップS220において、対策プログラム152は、プログラム対策適用部220の機能を実行し、プログラムへの対策適用を行う。プログラム対策適用部220は、プログラムに、コンテキストスイッチを行う関数であるコールラッパー157を付与し、プログラムからコンテキストスイッチを行う遷移処理を特定する。そして、プログラム対策適用部220は、遷移処理を、コールラッパー157が展開される物理アドレスを指定してジャンプする処理に置換し、アドレスマスクテーブル155にしたがって論理アドレスおよび物理アドレスを指定してメモリ確保して論理アドレス割り当てを行う。
この時、設定データ250とコールラッパー157とセキュリティモニタ156とUntrustedプログラム150とTrustedプログラム151を入力として、対策済みプログラム240(対策済みUntrustedプログラム153と対策済みTrustedプログラム154)を生成する。
【0125】
具体的には、リンク部222が、プログラムにコールラッパー157を付与する。遷移特定部111が、プログラムからコンテキストスイッチを行う処理を特定する。遷移処理置換部112が、特定した遷移処理を、コールラッパー157が展開されるアドレスを指定してジャンプする処理に置換する。アドレス指定部221が、アドレスマスクテーブル155にしたがって論理アドレスおよび物理アドレスを指定してメモリ確保し論理アドレス割り当てを行う。
【0126】
ステップS230において、対策プログラム152は、セキュリティモニタ対策適用部230の機能を実行し、セキュリティモニタ156に対策を適用する。セキュリティモニタ対策適用部230は、セキュリティモニタ156のコンテキストスイッチを特定する。そして、セキュリティモニタ対策適用部230は、特定されたコンテキストスイッチの前に存在するジャンプアドレス取得処理を、以下の処理に変更する。すなわち、「アドレスマスクテーブル155を参照してマスクされたジャンプアドレスをマスクジャンプアドレスとして取得し、取得したマスクジャンプアドレスを、設定された分離設定をもとにアンマスク処理してジャンプアドレスを計算する処理」に変更する。この時、アドレスマスクテーブル155とセキュリティモニタ156を入力として、対策済みセキュリティモニタ241を出力する。
【0127】
具体的には、コンテキストスイッチ特定部231が、セキュリティモニタ156のコンテキストスイッチを特定する。そして、アンマスク処理追加部232が、特定されたコンテキストスイッチの前に存在するジャンプアドレス取得処理を次のように変更する。すなわち、アンマスク処理追加部232は、上記ジャンプアドレス取得処理を、「マスクされたジャンプアドレスをアドレスマスクテーブル155から取得し、ジャンプ処理が実行される時点の分離設定をもとにアンマスク処理を行い、ジャンプアドレスを計算する処理」に変更する。
【0128】
より具体的な例を用いて説明する。例えば、プログラム1のエントリーポイントにジャンプすることを想定する。
通常は以下の通りである。
通常:
RegJump<-Mem(entry_program1);
JUMP RegJump;
【0129】
本実施の形態に係るプログラム処理装置100では以下のようになる。
アンマスク処理追加:
RegTemporary<-Mem(address_mask_table+offset);
RegTemporary<-RegTemporary xor pmpaddr; RegTemporary<-RegTemporary xor pmpcfg;
RegJump<-RegTemporary;
JUMP RegJump;
【0130】
ここで、offsetは、ジャンプアドレステーブルの何番目、すなわち図8のIDのような意味を有する。ここに、entry_program1をマスクしておいたマスクアドレスが格納されている想定である。したがって、マスクアドレステーブルを作る時、すなわちマスク時には、「entry_program1 xor pmpaddr xor pmpcfg」を「address_mask_table+offset」のアドレスに置いておくことになる。
【0131】
図11は、本実施の形態に係るアドレスマスクテーブル生成部210の動作を示すフロー図である。
図11に基づいて、アドレスマスクテーブル生成(ステップS210)を説明する。
【0132】
ステップS211、ステップS212、およびステップS214~ステップS2111は、ステップS111、ステップS112、ステップS115~ステップS1111、およびステップS1113と同様である。
以下では、差異のあるステップについて説明する。
【0133】
ステップS213において、アドレスマスクテーブル生成部210は、設定データ250を参照してセキュリティモニタ156の配置物理アドレスを取得し、セキュリティモニタ156からプログラムサイズを取得する。これらの情報は、実施の形態1と同様に、ステップS215において、分離設定からマスク値を計算するために用いる。
なお、プログラムサイズの取得のために、1度ソースコードをコンパイルしても良い。あるいは、設定データ250としてセキュリティモニタ156のために使用するメモリサイズを与えても良い。
【0134】
図12は、本実施の形態に係るプログラム対策適用部220の動作を示すフロー図である。
図12に基づいて、プログラム対策適用(ステップS220)を説明する。
【0135】
ステップS221、ステップS222、およびステップS226~S2210は、ステップS121、ステップS122、およびステップS124~ステップS128と同様である。
以下では、差異のあるステップについて説明する。
【0136】
ステップS223において、プログラム対策適用部220は、Untrustedプログラム150にコールラッパー157を付与し、アドレスマスクテーブル155を参照してリンク処理を追加する。
先述したように、Untrustedプログラム150は最初に実行されOSが展開した後に実行されるため、先頭あるいは末尾にコールラッパーを付与しても適切に実行されない。そこで、一度Untrustedプログラム150にコールラッパー157を付与しておき、実行時に再配置する。
まず、Untrustedプログラム150に、コールラッパー157を追加する。次に、コールラッパー157をアドレスマスクテーブル155で示されるアドレスにコピーする処理をUntrustedプログラム150に追加する。
ステップS222において、遷移処理は上記のコピー先のアドレスに格納されていることを想定する関数を呼び出すように書き換えられているため、コールラッパー157の呼び出しに成功する。
【0137】
ステップS224において、まず、プログラム対策適用部220は、設定データ158で示されるメモリ確保処理指定を参照して、Trustedプログラム151のロードおよびマップ処理を特定する。次に、この時にマップする左記の論理アドレスとして、アドレスマスクテーブル155で示される論理アドレスを指定する。
【0138】
ステップS225において、まず、プログラム対策適用部220は、設定データ158で示されるメモリ確保処理指定を参照して、共有メモリの確保処理を特定する。次に、プログラム対策適用部220は、この時に確保する物理アドレスとして、アドレスマスクテーブル155で示される物理アドレスを指定する。
【0139】
ステップS2211において、これまでに生成した対策済みUntrustedプログラム153と対策済みTrustedプログラム154を結合し、対策済みプログラム240を生成する。
【0140】
図13に基づいて、セキュリティモニタ対策適用(ステップS230)を説明する。
【0141】
ステップS231において、セキュリティモニタ156にアドレスマスクテーブル155を付与する。例えば、2次元配列で示されるアドレスマスクテーブル155をそのままセキュリティモニタ156のソースコードに追加する。
【0142】
ステップS232において、コンテキストスイッチの箇所を特定する。例えば、RISC-Vアーキテクチャでは、環境呼び出し例外命令(ECALL)で呼び出されたセキュリティモニタ156は、例外リターン命令(MRET)を実行することで切り替えたコンテキスト先に遷移する。すなわち、このような命令の実行箇所を特定することで、コンテキストスイッチの箇所は特定できる。
【0143】
ステップS233において、アドレスマスクテーブル155を参照し、アンマスク処理を追加する。ステップS232において特定したコンテキストスイッチの前に、遷移先アドレスを設定する箇所が存在する。この処理を次のように置換する。
変更前:ジャンプアドレス(エントリーポイントあるいはリターンアドレス)を特定の箇所から取得し、遷移先に設定する。
変更後:ジャンプアドレスをアドレスマスクテーブル155から取得し、アンマスク処理してジャンプアドレスを計算し、遷移先に設定する。
アンマスク方法は実施の形態1と同様である。
【0144】
***効果の説明***
本実施の形態のプログラム処理装置100によれば、OS環境のTEEを想定した対策済みプログラム240と対策済みセキュリティモニタ241とを生成できる。すなわち、プログラムあるいは共有メモリが配置される物理アドレス、および割り当てられる論理アドレスを部分的に固定して実行することで、ジャンプアドレスをマスク・アンマスクすることができる。もしも分離設定が破壊された状態でコンテキストスイッチが生じる場合には、アンマスク処理において正しいジャンプアドレスを計算できず、異常なアドレスへのジャンプが生じる。このような動作はメモリ監視部110によって補足され、許可されないメモリアクセスを防止することができる。すなわち、プログラムが動作する時には正しい分離設定になっていることを保証できる。
【0145】
以上の実施の形態1および2では、プログラム処理装置の各部を独立した機能ブロックとして説明した。しかし、プログラム処理装置の構成は、上述した実施の形態のような構成でなくてもよい。プログラム処理装置の機能ブロックは、上述した実施の形態で説明した機能を実現することができれば、どのような構成でもよい。また、プログラム処理装置は、1つの装置でなく、複数の装置から構成されたシステムでもよい。
また、実施の形態1および2のうち、複数の部分を組み合わせて実施しても構わない。あるいは、これらの実施の形態のうち、1つの部分を実施しても構わない。その他、これら実施の形態を、全体としてあるいは部分的に、どのように組み合わせて実施しても構わない。
すなわち、実施の形態1および2では、各実施の形態の自由な組み合わせ、あるいは各実施の形態の任意の構成要素の変形、もしくは各実施の形態において任意の構成要素の省略が可能である。
【0146】
なお、上述した実施の形態は、本質的に好ましい例示であって、本開示の範囲、本開示の適用物の範囲、および本開示の用途の範囲を制限することを意図するものではない。上述した実施の形態は、必要に応じて種々の変更が可能である。例えば、フロー図あるいはシーケンス図を用いて説明した手順は、適宜に変更してもよい。
【符号の説明】
【0147】
100 プログラム処理装置、101 プロセッサ、102 主記憶メモリ、103 記憶装置、104 入出力インタフェース、105 ストレージ、110 メモリ監視部、120 アドレスマスクテーブル生成部、130 対策適用部、111 遷移特定部、112 遷移処理置換部、113 対策時リンク部、140 実行部、141 メモリ確保部、142 ロード部、143 ジャンプアドレスアンマスク部、144 実行時リンク部、150 Untrustedプログラム、151 Trustedプログラム、152 対策プログラム、153 対策済みUntrustedプログラム、154 対策済みTrustedプログラム、155 アドレスマスクテーブル、156 セキュリティモニタ、157 コールラッパー、158 設定データ、210 アドレスマスクテーブル生成部、220 プログラム対策適用部、221 アドレス指定部、222 リンク部、230 セキュリティモニタ対策適用部、231 コンテキストスイッチ特定部、232 アンマスク処理追加部、240 対策済みプログラム、241 対策済みセキュリティモニタ、250 設定データ。
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11
図12
図13