JPWO2008111382A1 - 情報処理装置、情報処理方法およびプログラム - Google Patents

情報処理装置、情報処理方法およびプログラム Download PDF

Info

Publication number
JPWO2008111382A1
JPWO2008111382A1 JP2009503951A JP2009503951A JPWO2008111382A1 JP WO2008111382 A1 JPWO2008111382 A1 JP WO2008111382A1 JP 2009503951 A JP2009503951 A JP 2009503951A JP 2009503951 A JP2009503951 A JP 2009503951A JP WO2008111382 A1 JPWO2008111382 A1 JP WO2008111382A1
Authority
JP
Japan
Prior art keywords
signal handler
signal
handler
attribute value
identifier
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.)
Granted
Application number
JP2009503951A
Other languages
English (en)
Other versions
JP5067723B2 (ja
Inventor
篤史 本田
篤史 本田
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
NEC Corp
Original Assignee
NEC Corp
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 NEC Corp filed Critical NEC Corp
Priority to JP2009503951A priority Critical patent/JP5067723B2/ja
Publication of JPWO2008111382A1 publication Critical patent/JPWO2008111382A1/ja
Application granted granted Critical
Publication of JP5067723B2 publication Critical patent/JP5067723B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • 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
    • G06F12/1491Protection against unauthorised use of memory or access to memory by checking the subject access rights in a hierarchical protection system, e.g. privilege levels, memory rings
    • 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
    • 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/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/542Event management; Broadcasting; Multicasting; Notifications
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2209/00Indexing scheme relating to G06F9/00
    • G06F2209/54Indexing scheme relating to G06F9/54
    • G06F2209/543Local
    • 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
    • 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/2113Multi-level security, e.g. mandatory access control

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Computer Security & Cryptography (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Multimedia (AREA)
  • Computer Hardware Design (AREA)
  • Storage Device Security (AREA)
  • Executing Machine-Instructions (AREA)

Abstract

課題 シグナルハンドラの不測の処理によってプロセスの正常な実行が妨げられることを防止する。解決手段 シグナルハンドラの不測の処理によってプロセスの正常な実行が妨げられる可能性のある関数1125に配置した命令1121を実行すると、プロセスのシグナルハンドラテーブルが変更され、関数1125の処理中に実行されるシグナルハンドラがシグナルハンドラフック関数となる。シグナルが発生し、シグナルハンドラフック関数が実行されると、プロセスのセキュリティレベルを不測の処理を実行できないセキュリティレベルに変更した上で、本来のシグナルハンドラを実行することで、シグナルハンドラの不測の処理を防ぐ。また、関数1125を終了する際は、第2の特定の命令1122を実行し、シグナルハンドラテーブルを元の状態に戻す。

Description

本発明はアプリケーションプロセスのセキュリティレベルを変更する機能を有する情報処理装置に関し、特にシグナルハンドラを実行する際にアプリケーションプロセスのセキュリティレベルを変更する方法と装置に関する。
近年、情報処理装置のセキュリティ確保を目的として、SE
Linuxのようにプロセス毎にセキュリティレベルを設定可能にしたセキュアOSが開発されている。また、特許文献1に記載されるように、アプリケーションプロセスのセキュリティレベルをそのプロセスの実行中に動的に変更することが行われている。ここで、セキュリティレベルとは、プロセスの属性の一つであり、当該プロセスが実行する命令やリソースに対するアクセス制御の判断に用いられる属性である。
また、情報処理装置では、プロセスの実行中にシグナルが発生すると、そのプロセスによって登録されたシグナルハンドラが実行されるようになっている。ここで、シグナルとは、プロセス間通信であり、ユーザや他プロセスが特定のイベントを起こした際に、その発生したイベントに応じた種別のシグナルが当該プロセスに送られる。また、シグナルハンドラとは、各プロセスが用意するルーチンであり、受信したシグナルの種別に応じて該当するシグナルハンドラを実行する。受信したシグナルに該当するシグナルハンドラをプロセスが定義していない場合は、OSが予め規定しておいた処理を実行する。このシグナルの種別とシグナルハンドラを組みとした集合をシグナルハンドラテーブルと呼び、プロセス毎に定義されている。シグナルが発生すると、OSはシグナル送信先プロセスのシグナルハンドラテーブルを参照し、送信されたシグナルの種別と組みとなるシグナルハンドラの実行を開始する。この時、そのプロセスのそれまで行っていた処理は一時中断される。
特開2001−249848号公報
プロセス毎にセキュリティレベルを設定することのできるOSによれば、改ざんの恐れがないため、信頼性の高い関数をプロセスが実行する際に、そのプロセスのセキュリティレベルを高めることで、当該関数内での特権命令の実行が可能となる。逆に信頼性の低いルーチンをプロセスが実行する際にはそのプロセスのセキュリティレベルを変更して不正な処理を防止するといった制御が可能である。
しかしながら、信頼性の高い関数の実行中にシグナルが発生し、プロセスに予め定義されたシグナルハンドラが実行される場合、セキュリティレベルが変更されずにシグナルハンドラが実行されていた。このため、シグナルハンドラの不測の処理によって関数の正常な実行が妨げられ、本来の処理を保証できず、場合によっては不正な処理を招いてしまう危険性があった。その理由は、シグナルによる関数の中断箇所およびシグナルハンドラ中で実行される特権命令の種類によっては、関数に定義された処理がその通りに正しく実行されない可能性があるためである。
このような不正な処理を防止するためには、プロセスのセキュリティレベルを変更してシグナルハンドラを実行することである。しかし、前述したセキュアOSには、プロセスがシグナルハンドラの実行を開始する地点および終了する地点を検出し、プロセスのセキュリティレベルを変更する機能は存在しない。このため、シグナルハンドラ実行中に限りプロセスのセキュリティレベルを変更することができなかった。
また、セキュリティレベルを変更して実行するシグナルハンドラは、シグナルハンドラによる不正な処理の影響を受ける区間を処理している最中に受信したシグナルによって実行されるシグナルハンドラだけ限定できれば都合がよい。その理由は、全てのシグナルハンドラを、セキュリティレベルを変更して実行すると、そのシグナルハンドラの処理が常に実行できない可能性があるため、セキュリティレベルを変更してのシグナルハンドラの実行は最低限に止めることが望まれるからである。しかし、シグナルハンドラを実行する際に、そのシグナルハンドラがプロセスのどの区間を処理している最中に受信したシグナルによって実行されるシグナルハンドラであるかを判定する仕組みは存在しなかった。このため、特定のシグナルハンドラの実行中に限りプロセスのセキュリティレベルを変更することはできなかった。
[発明の目的]
本発明の目的は、シグナルハンドラを実行する際にプロセスのセキュリティレベルを変更し得るようにすることにある。
また本発明の別の目的は、プロセスが特定の処理区間を実行している最中に受信したシグナルによって実行されるシグナルハンドラを検知し、この検知したシグナルハンドラをプロセスのセキュリティレベルを変更して実行することができようにすることにある。
本発明の第1の情報処理装置は、OSの制御の下にプロセスを実行する情報処理装置であって、シグナルハンドラの不測の処理によって正常な実行を妨げられる可能性のある処理区間の実行前に第1の特定の命令を実行し且つ処理区間の実行後に第2の特定の命令を実行する関数、第3の特定の命令を実行し且つ第3の特定の命令によって取得したアドレスから始まるシグナルハンドラを実行し且つ該シグナルハンドラの実行後に第4の特定の命令を実行するシグナルハンドラフック関数、シグナルハンドラ、プロセスの属性値、プロセスのシグナルハンドラテーブル、プロセスの属性値とシグナルハンドラテーブルとの組を退避するためのシグナルハンドラ記憶手段を保持する記憶装置を備え、プロセスが第1の特定の命令を実行した際、プロセスの識別子とシグナルハンドラテーブルとの組をシグナルハンドラ記憶手段に退避し、プロセスのシグナルハンドラテーブルに設定されているシグナルハンドラをシグナルハンドラフック関数に変更するシグナルハンドラ変更手段と、プロセスが第2の特定の命令を実行した際、プロセスのシグナルハンドラテーブルに設定されているシグナルハンドラフック関数を、シグナルハンドラ記憶手段に退避されているシグナルハンドラフック関数設定前のシグナルハンドラに戻すシグナルハンドラ復帰手段と、プロセスが第3の特定の命令を実行した際、シグナルハンドラ記憶手段を参照し、プロセスの識別子及びプロセスが受信したシグナルの種別と組みとなるシグナルハンドラを取得するシグナルハンドラ取得手段と、シグナルハンドラ取得手段によるシグナルハンドラの取得後、プロセスの属性値を変更するセキュリティレベル変更手段と、プロセスが第4の特定の命令を実行した際、プロセスの属性値を変更前の属性値に変更するセキュリティレベル復帰手段とを含む。
本発明の第2の情報処理装置は、OSの制御の下にプロセスを実行する情報処理装置であって、シグナルハンドラの不測の処理によって正常な実行を妨げられる可能性のある処理区間の実行前に第1の特定の命令を実行し且つ処理区間の実行後に第2の特定の命令を実行する関数、第3の特定の命令を実行し且つ第3の特定の命令によって取得したアドレスから始まるシグナルハンドラを実行し且つ該シグナルハンドラの実行後に第4の特定の命令を実行するシグナルハンドラフック関数、シグナルハンドラ、プロセスの属性値、複数のプロセスで共有されるシグナルハンドラテーブル、プロセスの識別子を含むプロセス識別子群とシグナルハンドラテーブルとの組を退避するためのシグナルハンドラ記憶手段を保持する記憶装置を備え、シグナルハンドラテーブルを共有する複数のプロセスのうちの特定のプロセスが第1の特定の命令を実行した際、他のプロセスの識別子を含むプロセス識別子群がシグナルハンドラ記憶手段に記憶されていなければ、特定のプロセスの識別子を含むプロセス識別子群とシグナルハンドラテーブルとの組をシグナルハンドラ記憶手段に退避した後、シグナルハンドラテーブルに設定されているシグナルハンドラをシグナルハンドラフック関数に変更し、他のプロセスの識別子を含むプロセス識別子群がシグナルハンドラ記憶手段に記憶されていれば、特定のプロセスの識別子を他のプロセスの識別子を含むプロセス識別子群に追加するとともに、シグナルハンドラテーブルに設定されているシグナルハンドラを追加したプロセス識別子群と組となるシグナルハンドラ記憶手段中のシグナルハンドラテーブルに追加した後、シグナルハンドラテーブルに設定されているシグナルハンドラをシグナルハンドラフック関数に変更するシグナルハンドラ変更手段と、特定のプロセスが第2の特定の命令を実行した際、他のプロセスの識別子を含むプロセス識別子群がシグナルハンドラ記憶手段に記憶されていなければ、特定のプロセスのシグナルハンドラテーブルにおいてシグナルハンドラフック関数が設定されているシグナルハンドラを、シグナルハンドラ記憶手段に退避されているシグナルハンドラフック関数設定前のシグナルハンドラに戻した後、シグナルハンドラ記憶手段から特定のプロセスの識別子を含むプロセス識別子群とシグナルハンドラテーブルとの組のデータを削除し、他のプロセスの識別子を含むプロセス識別子群がシグナルハンドラ記憶手段に記憶されていれば、特定のプロセスのシグナルハンドラテーブルに設定されているシグナルハンドラをプロセス識別子群と組となるシグナルハンドラ記憶手段中のシグナルハンドラテーブルに追加し、プロセス識別子群から特定のプロセスの識別子を削除するシグナルハンドラ復帰手段と、プロセスが第3の特定の命令を実行した際、シグナルハンドラ記憶手段を参照し、プロセスの識別子及びプロセスが受信したシグナルの種別と組みとなるシグナルハンドラを取得するシグナルハンドラ取得手段と、シグナルハンドラ取得手段によるシグナルハンドラの取得後に、プロセスの属性値を変更するセキュリティレベル変更手段と、プロセスが第4の特定の命令を実行した際、プロセスの属性値を変更前の属性値に変更するセキュリティレベル復帰手段とを含む。
本発明の第1の情報処理方法は、情報処理装置にて、OSの制御の下にプロセスを実行する情報処理方法であって、シグナルハンドラの不測の処理によって正常な実行を妨げられる可能性のある処理区間の実行前に第1の特定の命令を実行し且つ処理区間の実行直後に第2の特定の命令を実行する関数、第3の特定の命令を実行し且つ第3の特定の命令によって取得したアドレスから始まるシグナルハンドラを実行し且つ該シグナルハンドラの実行後に第4の特定の命令を実行するシグナルハンドラフック関数、シグナルハンドラ、プロセスの属性値、プロセスのシグナルハンドラテーブル、プロセスの属性値とシグナルハンドラテーブルとの組を退避するためのシグナルハンドラ記憶手段を記憶装置に保持し、プロセスが第1の特定の命令を実行した際、プロセスの識別子とシグナルハンドラテーブルとの組をシグナルハンドラ記憶手段に退避し、プロセスのシグナルハンドラテーブルに設定されているシグナルハンドラをシグナルハンドラフック関数に変更するシグナルハンドラ変更ステップと、プロセスの実行中に受信したシグナルに対応するシグナルハンドラをシグナルハンドラテーブルを参照して決定し、該決定したシグナルハンドラがシグナルハンドラフック関数である場合、シグナルハンドラフック関数を呼び出すシグナル処理ステップと、プロセスがシグナルハンドラフック関数の第3の特定の命令を実行した際、シグナルハンドラ記憶手段を参照し、プロセスの識別子及びプロセスが受信したシグナルの種別と組みとなるシグナルハンドラを取得するシグナルハンドラ取得ステップと、シグナルハンドラ取得ステップによるシグナルハンドラの取得後に、プロセスの属性値を変更するセキュリティレベル変更ステップと、プロセスがシグナルハンドラ取得ステップで取得したシグナルハンドラをシグナルハンドラフック関数において実行した後に第4の特定の命令を実行したときに、プロセスの属性値を変更前の属性値に変更するセキュリティレベル復帰ステップと、プロセスが関数の第2の特定の命令を実行したときに、プロセスのシグナルハンドラテーブルに設定されているシグナルハンドラフック関数を、シグナルハンドラ記憶手段に退避されているシグナルハンドラフック関数設定前のシグナルハンドラに戻すシグナルハンドラ復帰ステップとを含む。
本発明の第2の情報処理方法は、情報処理装置にて、OSの制御の下にプロセスを実行する情報処理方法であって、シグナルハンドラの不測の処理によって正常な実行を妨げられる可能性のある処理区間の実行前に第1の特定の命令を実行し且つ処理区間の実行直後に第2の特定の命令を実行する関数、第3の特定の命令を実行し且つ第3の特定の命令によって取得したアドレスから始まるシグナルハンドラを実行し且つ該シグナルハンドラの実行後に第4の特定の命令を実行するシグナルハンドラフック関数、シグナルハンドラ、プロセスの属性値、複数のプロセスで共有されるシグナルハンドラテーブル、プロセスの識別子を含むプロセス識別子群とシグナルハンドラテーブルとの組を退避するためのシグナルハンドラ記憶手段を記憶装置に保持し、シグナルハンドラテーブルを共有する複数のプロセスのうちの特定のプロセスが第1の特定の命令を実行した際、他のプロセスの識別子を含むプロセス識別子群がシグナルハンドラ記憶手段に記憶されていなければ、特定のプロセスの識別子を含むプロセス識別子群とシグナルハンドラテーブルとの組をシグナルハンドラ記憶手段に退避した後、シグナルハンドラテーブルに設定されているシグナルハンドラをシグナルハンドラフック関数に変更し、他のプロセスの識別子を含むプロセス識別子群がシグナルハンドラ記憶手段に記憶されていれば、特定のプロセスの識別子を他のプロセスの識別子を含むプロセス識別子群に追加するとともに、シグナルハンドラテーブルに設定されているシグナルハンドラを追加したプロセス識別子群と組となるシグナルハンドラ記憶手段中のシグナルハンドラテーブルに追加した後、シグナルハンドラテーブルに設定されているシグナルハンドラをシグナルハンドラフック関数に変更するシグナルハンドラ変更ステップと、プロセスの実行中に受信したシグナルに対応するシグナルハンドラをシグナルハンドラテーブルを参照して決定し、該決定したシグナルハンドラがシグナルハンドラフック関数である場合、シグナルハンドラフック関数を呼び出すシグナル処理ステップと、プロセスがシグナルハンドラフック関数の第3の特定の命令を実行した際、シグナルハンドラ記憶手段を参照し、プロセスの識別子及びプロセスが受信したシグナルの種別と組みとなるシグナルハンドラを取得するシグナルハンドラ取得ステップと、シグナルハンドラ取得ステップによるシグナルハンドラの取得後に、プロセスの属性値を変更するセキュリティレベル変更ステップと、特定のプロセスが第2の特定の命令を実行した際、他のプロセスの識別子を含むプロセス識別子群がシグナルハンドラ記憶手段に記憶されていなければ、第1のプロセスのシグナルハンドラテーブルにおいてシグナルハンドラフック関数が設定されているシグナルハンドラを、シグナルハンドラ記憶手段に退避されているシグナルハンドラフック関数設定前のシグナルハンドラに戻した後、シグナルハンドラ記憶手段から第1のプロセスの識別子を含むプロセス識別子群とシグナルハンドラテーブルとの組のデータを削除し、第2のプロセスの識別子を含むプロセス識別子群がシグナルハンドラ記憶手段に記憶されていれば、特定のプロセスのシグナルハンドラテーブルに設定されているシグナルハンドラをプロセス識別子群と組となるシグナルハンドラ記憶手段中のシグナルハンドラテーブルに追加し、プロセス識別子群から特定のプロセスの識別子を削除するシグナルハンドラ復帰ステップとを含む。
本発明の第1のプログラムは、シグナルハンドラの不測の処理によって正常な実行を妨げられる可能性のある処理区間の実行前に第1の特定の命令を実行し且つ処理区間の実行直後に第2の特定の命令を実行する関数、第3の特定の命令を実行し且つ第3の特定の命令によって取得したアドレスから始まるシグナルハンドラを実行し且つ該シグナルハンドラの実行後に第4の特定の命令を実行するシグナルハンドラフック関数、シグナルハンドラ、プロセスの属性値、プロセスのシグナルハンドラテーブル、プロセスの属性値とシグナルハンドラテーブルとの組を退避するためのシグナルハンドラ記憶手段を保持する記憶装置を備え、OSの制御の下にプロセスを実行する情報処理装置に、プロセスが第1の特定の命令を実行した際、プロセスの識別子とシグナルハンドラテーブルとの組をシグナルハンドラ記憶手段に退避し、プロセスのシグナルハンドラテーブルに設定されているシグナルハンドラをシグナルハンドラフック関数に変更するシグナルハンドラ変更処理と、プロセスが第2の特定の命令を実行した際、プロセスのシグナルハンドラテーブルに設定されているシグナルハンドラフック関数を、シグナルハンドラ記憶手段に退避されているシグナルハンドラフック関数設定前のシグナルハンドラに戻すシグナルハンドラ復帰処理と、プロセスが第3の特定の命令を実行した際、シグナルハンドラ記憶手段を参照し、プロセスの識別子及びプロセスが受信したシグナルの種別と組みとなるシグナルハンドラを取得するシグナルハンドラ取得処理と、シグナルハンドラ取得処理によるシグナルハンドラの取得後、プロセスの属性値を変更するセキュリティレベル変更処理と、プロセスが第4の特定の命令を実行した際、プロセスの属性値を変更前の属性値に変更するセキュリティレベル復帰処理を実行させる。
本発明の第1のプログラムは、シグナルハンドラの不測の処理によって正常な実行を妨げられる可能性のある処理区間の実行前に第1の特定の命令を実行し且つ処理区間の実行直後に第2の特定の命令を実行する関数、第3の特定の命令を実行し且つ第3の特定の命令によって取得したアドレスから始まるシグナルハンドラを実行し且つ該シグナルハンドラの実行後に第4の特定の命令を実行するシグナルハンドラフック関数、シグナルハンドラ、プロセスの属性値、複数のプロセスで共有されるシグナルハンドラテーブル、プロセスの識別子を含むプロセス識別子群とシグナルハンドラテーブルとの組を退避するためのシグナルハンドラ記憶手段を保持する記憶装置を備え、OSの制御の下にプロセスを実行する情報処理装置に、シグナルハンドラテーブルを共有する複数のプロセスのうちの特定のプロセスが第1の特定の命令を実行した際、他のプロセスの識別子を含むプロセス識別子群がシグナルハンドラ記憶手段に記憶されていなければ、特定のプロセスの識別子を含むプロセス識別子群とシグナルハンドラテーブルとの組をシグナルハンドラ記憶手段に退避した後、シグナルハンドラテーブルに設定されているシグナルハンドラをシグナルハンドラフック関数に変更し、他のプロセスの識別子を含むプロセス識別子群がシグナルハンドラ記憶手段に記憶されていれば、特定のプロセスの識別子を他のプロセスの識別子を含むプロセス識別子群に追加するとともに、シグナルハンドラテーブルに設定されているシグナルハンドラを追加したプロセス識別子群と組となるシグナルハンドラ記憶手段中のシグナルハンドラテーブルに追加した後、シグナルハンドラテーブルに設定されているシグナルハンドラをシグナルハンドラフック関数に変更するシグナルハンドラ変更処理と、特定のプロセスが第2の特定の命令を実行した際、他のプロセスの識別子を含むプロセス識別子群がシグナルハンドラ記憶手段に記憶されていなければ、特定のプロセスのシグナルハンドラテーブルにおいてシグナルハンドラフック関数が設定されているシグナルハンドラを、シグナルハンドラ記憶手段に退避されているシグナルハンドラフック関数設定前のシグナルハンドラに戻した後、シグナルハンドラ記憶手段から特定のプロセスの識別子を含むプロセス識別子群とシグナルハンドラテーブルとの組のデータを削除し、他のプロセスの識別子を含むプロセス識別子群がシグナルハンドラ記憶手段に記憶されていれば、特定のプロセスのシグナルハンドラテーブルに設定されているシグナルハンドラをプロセス識別子群と組となるシグナルハンドラ記憶手段中のシグナルハンドラテーブルに追加し、プロセス識別子群から特定のプロセスの識別子を削除するシグナルハンドラ復帰処理と、プロセスが第3の特定の命令を実行した際、シグナルハンドラ記憶手段を参照し、プロセスの識別子及びプロセスが受信したシグナルの種別と組みとなるシグナルハンドラを取得するシグナルハンドラ取得処理と、シグナルハンドラ取得処理によるシグナルハンドラの取得後に、プロセスの属性値を変更するセキュリティレベル変更処理と、プロセスが第4の特定の命令を実行した際、プロセスの属性値を変更前の属性値に変更するセキュリティレベル復帰処理を実行させる。
第1の効果は、シグナルハンドラの不測の処理によってプロセスの正常な実行が妨げられることを防止できることにある。
その理由は、第1の特定の命令で呼び出されるシグナルハンドラ変更手段によって、プロセスのシグナルハンドラがシグナルハンドラフック関数に変更され、第2の特定の命令で呼び出されるシグナルハンドラ復帰手段によって、シグナルハンドラフック関数に変更されたシグナルハンドラを元の状態に戻すことで、第1の特定の命令が実行されてから第2の特定の命令が実行される間に実行されるシグナルハンドラのみがシグナルハンドラフック関数となり、この間を処理している最中に実行されるシグナルハンドラは、シグナルハンドラフック関数内の第3の特定の命令で呼び出されるセキュリティレベル変更手段によって、プロセスの属性値が変更され、プロセスの正常な実行が妨げられるような命令及びリソースへのアクセスが禁止された状態で、シグナルハンドラ変更手段によってシグナルハンドラフック関数に変更される前のシグナルハンドラを実行するからである。
第2の効果は、本発明の実現のために、シグナルが発生してから、OSがシグナル送信先のシグナルハンドラを実行する間の処理に対して変更を加える必要がないことにある。
その理由は、第1の特定の命令で呼び出されるシグナルハンドラ変更手段によって、プロセスのシグナルハンドラをシグナルハンドラフック関数に変更し、シグナルハンドラフック関数内の第3の特定の命令で呼び出されるセキュリティレベル変更手段によって、シグナルハンドラの実行を検出し、プロセスの属性値を変更するからである。
本発明の情報処理装置のハードウェア構成例を示すブロック図である。 本発明の第1の実施の形態のブロック図である。 本発明の第1の実施の形態におけるシグナルハンドラ変更手段の処理例を示すフロー図である。 本発明の第1の実施の形態におけるシグナルハンドラ取得手段の処理例を示すフロー図である。 本発明の第1の実施の形態におけるセキュリティレベル変更手段の処理例を示すフロー図である。 本発明の第1の実施の形態におけるセキュリティレベル復帰手段の処理例を示すフロー図である。 本発明の第1の実施の形態におけるシグナルハンドラ復帰手段の処理例を示すフロー図である。 本発明の第2の実施の形態のブロック図である。 本発明の第2の実施の形態におけるセキュリティレベル変更手段の処理例を示すフロー図である。 本発明の第3の実施の形態のブロック図である。 本発明の第3の実施の形態におけるシグナルハンドラ取得手段の処理例を示すフロー図である。 本発明の第3の実施の形態におけるセキュリティレベル変更手段の処理例を示すフロー図である。 本発明の第4の実施の形態のブロック図である。 本発明の第4の実施の形態におけるシグナルハンドラ変更手段の処理例を示すフロー図である。 本発明の第4の実施の形態におけるシグナルハンドラ変更手段の処理例を示すフロー図である。 本発明の第4の実施の形態におけるシグナルハンドラ変更手段の処理例を示すフロー図である。 本発明の第4の実施の形態におけるシグナルハンドラ取得手段の処理例を示すフロー図である。 本発明の第4の実施の形態におけるシグナルハンドラ復帰手段の処理例を示すフロー図である。 本発明の第4の実施の形態におけるシグナルハンドラ復帰手段の処理例を示すフロー図である。 本発明の第4の実施の形態におけるシグナルハンドラ復帰手段の処理例を示すフロー図である。 本発明の第1の実施例のブロック図である。 本発明の第1の実施例のシグナルハンドラテーブル及びデフォルトシグナルハンドラテーブルの説明図である。 本発明の第2の実施例のブロック図である。 本発明の第2の実施例のシグナルハンドラテーブル及びデフォルトシグナルハンドラテーブルの説明図である。 本発明の第3の実施例のブロック図である。 本発明の第3の実施例のシグナルハンドラテーブル及びデフォルトシグナルハンドラテーブルの説明図である。 本発明の第4の実施例のブロック図である。 本発明の第4の実施例のシグナルハンドラテーブルの説明図である。 本発明の第4の実施例のデフォルトシグナルハンドラテーブルの説明図である。 本発明の第4の実施例におけるプロセスの動作シーケンスを示す図である。
次に、本発明を実施するための最良の形態について図面を参照して詳細に説明する。
<本発明の情報処理装置のハードウェア構成例>
図1を参照すると、本発明の情報処理装置のハードウェア構成の一例は、CPU1、ROM2、RAM3、表示部4、入力操作部5、ファイルシステム6およびこれらを相互に接続するバス7から構成されている。ROM2は、読み取り専用のメモリであり、CPU1で実行されるオペレーティングシステム(OS)、ライブラリ関数および固定データなどを記憶する。RAM3は、読み書き可能なメモリであり、CPU1で実行されるアプリケーションプロセスおよび可変データなどを一時的に記憶する。表示部4は、LCDなどで構成され、アプリケーション画面などを表示する。入力操作部5はキーボードなどで構成され、ユーザからのデータや指示を入力する。ファイルシステム6は、ハードディスクやSDカードなどで構成され、アプリケーションプログラムや各種データを記憶する。このようなハードウェア構成を有する情報処理装置の例としては、パーソナルコンピュータなどの一般的なコンピュータ、ゲーム端末、携帯電話などがある。
<第1の実施の形態>
図2を参照すると、本発明の第1の実施の形態は、記憶装置1100、OS1110、プロセス1120を含んで構成される。
記憶装置1100は、プロセス1120のセキュリティレベルを表す属性値1101、シグナルの値1102およびシグナルハンドラテーブル1103を記憶する。また、シグナルハンドラテーブル1103の退避域となるシグナルハンドラ記憶手段1104、属性値1101の退避域となるセキュリティレベル記憶手段1105を有する。
シグナルハンドラ記憶手段1104は、プロセスの識別子とシグナルハンドラテーブル1103とを組みとして記憶する。このシグナルハンドラ記憶手段1104に退避されているシグナルハンドラテーブル1103を、退避前のシグナルハンドラテーブル1103と区別するために、デフォルトシグナルハンドラテーブルと呼ぶ。
セキュリティレベル記憶手段1105は、プロセスの識別子とそのプロセスの属性値とを組みとして記憶する。
プロセス1120は、関数1125、シグナルハンドラフック関数1126およびシグナルハンドラ1127を含む。
プロセス1120の関数1125は、改ざんの恐れがない信頼性の高い関数であり、実行を保証する部分1128を有する。また関数1125は、実行を保証する部分1128を実行する直前の箇所に第1の特定の命令1121が挿入され、実行を保証する部分1128の実行直後の箇所に第2の特定の命令1122が挿入されている。
シグナルハンドラフック関数1126は、その実行開始直後の箇所に第3の特定の命令1123が挿入され、その実行終了直前の箇所に第4の特定の命令1124が挿入されている。また、第3の特定の命令1123の実行によって取得されたアドレスのシグナルハンドラ1127を実行する命令1129が、第3の特定の命令1123と第4の特定の命令1124の間の区間に挿入されている。
シグナルハンドラ1127には、特権命令1130が含まれている。
OS1110は、例えば、プロセス毎にセキュリティレベルを設定可能なセキュアOSである。
OS1110は、例えば、プロセス毎にセキュリティレベルを設定可能なセキュアOSである。OS1110は、プロセス1120の実行と、プロセス1120の属性値1101を管理している。属性値1101は、プロセスが実行する特権命令やリソース制御へのアクセスの可否の判断に用いられる属性値である。また、プロセス間通信の機能としてシグナルを管理し、プロセス1120に対するシグナル1131が発生すると、シグナル処理手段1116を呼び出す機能を備える。さらに、第1の特定の命令1121によってシグナルハンドラ変更手段1111を呼び出す機能、第2の特定の命令1122によってシグナルハンドラ復帰手段1112を呼び出す機能、第3の特定の命令1123によってシグナルハンドラ取得手段1113を呼び出す機能、第4の特定の命令1124によってセキュリティレベル復帰手段1115を呼び出す機能、特権命令1130によって特権命令実行制御手段1117を呼び出す機能を備える。また、シグナルハンドラ取得手段1113に挿入された命令1118によってセキュリティレベル変更手段1114を呼び出す機能を備える。
シグナルハンドラ変更手段1111は、プロセス1120の関数1125が第1の特定の命令1121を実行した際に呼び出され、プロセス1120の識別子とシグナルハンドラテーブル1103を組にして、シグナルハンドラ記憶手段1104に退避させ、元のシグナルハンドラテーブル1103に設定されているシグナルハンドラをシグナルハンドラフック関数1126に変更する機能を有する。
シグナル処理手段1116は、シグナル1131が発生したプロセス1120のシグナルハンドラテーブル1103を参照し、発生したシグナル1131に対応して設定されている関数(シグナルハンドラ1127の場合とシグナルハンドラフック関数1126の場合とがある)を実行する機能を有する。関数を実行する際には、発生したシグナル1131の値をその関数に渡す。
シグナルハンドラ取得手段1113は、プロセス1120がシグナル1131を受信したことで実行されたシグナルハンドラフック関数1126において、受信したシグナル1131の値を引数として実行する第3の特定の命令1123によって呼び出され、シグナルハンドラ記憶手段1104中のプロセス1120の識別子と組みとなるデフォルトシグナルハンドラテーブルからシグナル1131に対応するシグナルハンドラを取得し、命令1118によってセキュリティレベル変更手段1114を呼び出して、このセキュリティレベル変更手段1114の処理が終了した後に、前記取得したシグナルハンドラをシグナルハンドラフック関数1126に渡す機能を有する。
セキュリティレベル変更手段1114は、シグナルハンドラ取得手段1113中の命令1118によって呼び出され、プロセス1120の識別子とその属性値1101の組をセキュリティレベル記憶手段1105に退避した後、プロセス1120の元の属性値1101を変更する機能を有する。
セキュリティレベル復帰手段1115は、シグナルハンドラフック関数の第4の特定の命令1124によって呼び出され、プロセス1120の属性値1101を、セキュリティレベル記憶手段1105に退避されているプロセス1120の識別子と組みとなる属性値に変更し、セキュリティレベル記憶手段1105に記憶されているプロセス1120の識別子と属性値の組みを削除する機能を有する。
シグナルハンドラ復帰手段1112は、プロセス1120の関数1125が第2の特定の命令1122を実行した際に呼び出され、プロセス1120のシグナルハンドラテーブル1103にシグナルハンドラとして設定されているシグナルハンドラフック関数1126を、シグナルハンドラ記憶手段1104に退避されているプロセス1120の識別子と組みとなるデフォルトシグナルハンドラテーブルに設定されているシグナルハンドラに戻し、シグナルハンドラ記憶手段1104に退避されているプロセス1100の識別子とデフォルトシグナルハンドラテーブルの組みを削除する機能を有する。
特権命令実行制御手段1117は、プロセス1120が特権命令1130を実行した際に呼び出され、プロセス1120の属性値1101に基づいて特権命令1130の実行可否を制御する機能を有する。
次に、本実施の形態の全体の動作について詳細に説明する。
プロセス1120が関数1125を呼び出すと、関数1125に配置された第1の特定の命令1121が実行され、シグナルハンドラ変更手段1111が呼び出される。
図3を参照すると、シグナルハンドラ変更手段1111は、まず、プロセス1120の識別子と組にしてシグナルハンドラテーブル1103を、デフォルトシグナルハンドラテーブルとしてシグナルハンドラ記憶手段1104に記憶(退避)する(ステップA1)。次に、シグナルハンドラ変更手段1111は、シグナル探索番号iを初期値0に設定する(ステップA2)。次に、プロセス1120のシグナルハンドラテーブル1103のシグナルの値iのシグナルに対応して設定されているシグナルハンドラを参照し(ステップA3)、そのシグナルハンドラがプロセス1120が設定したシグナルハンドラであった場合(ステップA4のYES)、シグナルの値iのシグナルに対応するシグナルハンドラとしてシグナルハンドラフック関数1103を設定する(ステップA5)。そして、シグナル探索番号iに1をプラスする(ステップA6)。シグナルの値iのシグナルに対応してプロセス1120のシグナルハンドラが設定されていない場合(ステップA4でNO)、ステップA5をスキップし、シグナル探索番号iに1をプラスする(ステップA6)。
次に、シグナルハンドラ変更手段1111は、更新後のシグナル探索番号iが、OS1110が管理するシグナル番号の最大値Sより大きい値であれば(ステップA7のYES)、シグナルハンドラ変更処理を終える。これにより、第1の特定の命令1121の実行が終了し、プロセス1120の関数1125の処理が再開される。他方。更新後のシグナル探索番号iが、Sと等しい値または小さい値であれば(ステップA7のNO)、ステップA3に戻り、上述した処理と同様の処理を繰り返す。
次に、関数1125を実行しているプロセス1120が、第1の特定の命令1121の実行が終了した後に、シグナル1131を受信したとする。すると、OS1110により関数1125の実行が中断され、シグナル処理手段1116が実行される。シグナル処理手段1116は、プロセス1120のシグナルハンドラテーブル1103からシグナル1131の値に対応するシグナルハンドラを取り出し、それに制御を移す。今の場合、プロセス1120のシグナルハンドラテーブル1103にはシグナル1131に対応してシグナルハンドラフック関数1126が登録されているので、シグナルハンドラフック関数1126が実行されることになる。このとき、シグナル処理手段1116からシグナルハンドラフック関数1126にシグナル1131の値が渡される。
シグナルハンドラフック関数1126は、受信したシグナル1131の値を引数として第3の特定の命令1123を実行する。この第3の特定の命令1123の実行により、シグナルハンドラ取得手段1113が呼び出される。
図4を参照すると、シグナルハンドラ取得手段1113は、第3の特定の命令1123の引数であるシグナル1131の値を取得する(ステップB1)。次に、シグナルハンドラ記憶手段1104を参照し、自プロセス1120の識別子と組みとなるデフォルトシグナルハンドラテーブルを参照し(ステップB2)、シグナル1131の値に対応して設定されているシグナルハンドラ1127を取得する(ステップB3)。次に、命令1118を実行することにより、プロセス1120の識別子を通知してセキュリティレベル変更手段1114を呼び出し(ステップB4)、セキュリティレベル変更完了信号をセキュリティレベル変更手段1114から受信するまで待ち合わせる(ステップB5)。
図5を参照すると、セキュリティレベル変更手段1114は、シグナルハンドラ取得手段1113から呼び出されると、プロセス1120の識別子とその属性値1101の組をセキュリティレベル記憶手段1105に記憶(退避)させる(ステップC1)。次に、プロセス1120の属性値1101を変更し(ステップC2)、シグナルハンドラ取得手段1113にセキュリティレベル変更完了信号を送信し(ステップC3)、処理を終了する。ここで、プロセス1120の変更前の属性値1101の値をNx、変更後の値をNyと記す。変更後の値Nyは特権命令を実行することができないセキュリティレベルを示すものとする。
シグナルハンドラ取得手段1113は、セキュリティレベル変更完了信号を受信すると、ステップB3においてシグナルハンドラ記憶手段1104より取得したシグナルハンドラ1127をシグナルハンドラフック関数1126に渡し(ステップB6)、処理を終了する。
シグナルハンドラフック関数1126は、第3の特定の命令1123を通じてシグナルハンドラ取得手段1113より取得したシグナルハンドラ1127を実行する。このシグナルハンドラ1127の実行過程で、シグナルハンドラ1127に挿入された特権命令1130が実行されると、制御が特権命令実行制御手段1117に移る。特権命令実行制御手段1117は、特権命令1130を実行したプロセス1120の属性値1101を参照し、特権命令を実行することができるセキュリティレベルかどうかを判定する。今の場合、属性値1101は特権命令を実行できない値Nyに変更されているため、特権命令1130は実行されない。他方、属性値1101がNxである状況では、特許命令1130が実行されることになる。
シグナルハンドラ1127の実行が終わると、シグナルハンドラフック関数1126は第4の特定の命令1124を実行する。第4の特定の命令1124が実行されると、プロセス1120の識別子を伴ってセキュリティレベル復帰手段1115が呼び出される。
図6を参照すると、セキュリティレベル復帰手段1115は、セキュリティレベル記憶手段1105を参照し、プロセス1120の識別子と組みとなる属性値Nxを取得する(ステップD1)。次に、セキュリティレベル記憶手段1105に記憶されているプロセス1120の識別子と属性値Nxの組みからなるデータを削除する(ステップD2)。そして、プロセス1120の属性値1102をNyからNxに変更する(ステップD3)。これで、セキュリティレベル復帰手段1115の処理が終了し、制御がシグナルハンドラフック関数1126に戻され、第4の特定の命令1124の実行が終了する。第4の特定の命令1124の実行が終了すると、シグナルハンドラフック関数1126の処理は終了となる。シグナルハンドラフック関数1126の処理が終了すると、制御がシグナル処理手段1116を通じて関数1125に戻され、関数1125の処理が再開される。
関数1125の処理が再開し、その関数1125に配置された第2の特定の命令1122が実行されると、プロセス1120の識別子を伴ってシグナルハンドラ復帰手段1112が呼び出される。
図7を参照すると、シグナルハンドラ復帰手段1112は、シグナルハンドラ記憶手段1104を参照し、プロセス1120の識別子と組みとなるデフォルトシグナルハンドラテーブルを取得する(ステップE1)。次に、シグナルハンドラ復帰手段1112は、シグナル探索番号iを初期値0に設定する(ステップE2)。次に、プロセス1120のシグナルハンドラテーブル1103のシグナルの値iに対応して設定されているシグナルハンドラを参照する(ステップE3)。参照したシグナルハンドラがシグナルハンドラフック関数であった場合(ステップE4のYES)、シグナルの値iに対応してデフォルトシグナルハンドラテーブルに登録されているシグナルハンドラをプロセス1120のシグナルハンドラとして設定する(ステップE5)。シグナルハンドラの設定の終了または参照したシグナルハンドラにシグナルハンドラフック関数が設定されていなかった場合(ステップE4のNO)、シグナル探索番号iに1をプラスする(ステップE6)。シグナル探索番号iがその最大値Sより大きい値の場合(ステップE7のYES)、シグナルハンドラ記憶手段1104に記憶されているプロセス1120の識別子とデフォルトシグナルハンドラテーブルの組みからなるデータを削除する(ステップE8)。そして、第2の特定の命令1122の実行を終了し、関数1125の処理を続ける。シグナル探索番号iがSと等しい値または小さい値の場合(ステップE7のNO)、ステップE3に戻り、上述の処理と同様の処理を繰り返す。
次に、本実施の形態の効果について説明する。
本実施の形態によれば、同じシグナルハンドラ1127であっても、プロセス1120が特定の処理区間を実行している最中に受信したシグナルによって実行されるシグナルハンドラ1127とそれ以外のシグナルハンドラ1127とを論理的に区別し、前者のシグナルハンドラ1127についてはプロセス1120のセキュリティレベルを変更して実行することが可能となる。その理由は、プロセス1120が特定の処理区間を走行している間はシグナルハンドラをシグナルハンドラフック関数に変更することで、前者のシグナルハンドラの実行を検出し、セキュリティレベルを変更した上でシグナルハンドラを実行しているためである。
<第2の実施の形態>
図8を参照すると、本発明の第2の実施の形態は、記憶装置1100がセキュリティレベル変更規則記憶手段2001を有すること、OS1110がセキュリティレベル変更手段1114に代えてセキュリティレベル変更手段2002を有することで、図2に示した第1の実施の形態と相違する。
セキュリティレベル変更規則記憶手段2001は、プロセス1120の変更前の属性値と変更後の属性値との組を含む変更規則を予め記憶している。ここでは、プロセス1120の変更前の属性値1101をNx、変更後の属性値をNxxと記す。
セキュリティレベル変更手段2002は、シグナルハンドラ取得手段1113によって呼び出され、プロセス1120の識別子と属性値1101を取得し、セキュリティレベル記憶手段1105に組みとして記憶(退避)した後、セキュリティレベル変更規則記憶手段2001を参照し、変更前の属性値1101と組みとなる変更後の属性値Nxxを取得し、プロセス1120の属性値1101をこの取得した属性値Nxxに変更する。
次に、本実施の形態の全体の動作について説明する。本実施の形態の動作のうち、第1の実施の形態と相違する動作は、セキュリティレベル変更手段2002の動作のみであるため、以下、セキュリティレベル変更手段2002の動作を説明する。
図9を参照すると、セキュリティレベル変更手段2002は、シグナルハンドラ取得手段1113から呼び出されると、プロセス1120の識別子とその属性値1101の組をセキュリティレベル記憶手段1105に記憶(退避)させる(ステップC11)。次に、セキュリティレベル変更規則記憶手段2002を参照し、変更前の属性値1101(=Nx)と組みとなる変更後の属性値Nxxを取得し(ステップC12)、プロセス1120の属性値1101を取得した属性値Nxxに変更する(ステップC13)。そして、シグナルハンドラ取得手段1113にセキュリティレベル変更完了信号を送信する(ステップC14)。
次に、本実施の形態の効果について説明する。
本実施の形態によれば、第1の実施の形態の効果に加え、予め記憶しておいたセキュリティレベル変更規則により、プロセス1120のセキュリティレベルに応じてシグナルハンドラ実行時のプロセスのセキュリティレベルを変更することができる。
<第3の実施の形態>
図10を参照すると、本発明の第3の実施の形態は、記憶装置1100がセキュリティレベル変更規則記憶手段3001を有すること、OS1110がシグナルハンドラ取得手段1113およびセキュリティレベル変更手段1114に代えてシグナルハンドラ取得手段3002およびセキュリティレベル変更手段3003を有することで、図2に示した第1の実施の形態と相違する。
セキュリティレベル変更規則記憶手段3001は、プロセス1120が受信するシグナル1131の値とプロセス1120の属性値との組を含む変更規則を予め記憶している。ここでは、プロセス1120の変更前の属性値1101をNx、シグナル1131の値に対応する属性値をNxxと記す。
シグナルハンドラ取得手段3002は、プロセス1120がシグナル1131を受信したことで実行されたシグナルハンドラフック関数1126から、受信したシグナル1131の値を引数として実行する第3の特定の命令1123によって呼び出され、シグナルハンドラ記憶手段1104を参照し、プロセス1120の識別子と組みとなるシグナルハンドラテーブルからシグナル1131の値に対応するシグナルハンドラ1127を取得した後、セキュリティレベル変更手段3003を呼び出してシグナル1131の値を渡し、セキュリティレベル変更手段3003の処理が終了した後に、取得したシグナルハンドラ1127をシグナルハンドラフック関数1126に渡す。
セキュリティレベル変更手段3003は、シグナルハンドラ取得手段3002によって呼び出され、シグナル1131の値を受け取ると、プロセス1120の識別子と属性値1101の組をセキュリティレベル記憶手段3105に記憶(退避)した後、セキュリティレベル変更規則記憶手段3001を参照し、シグナル1131の値と組みとなる属性値Nxxを取得し、プロセス1120の属性値1101を属性値Nxxに変更する。
次に、本実施の形態の全体の動作について説明する。本実施の形態の動作のうち、第1の実施の形態と相違する動作は、シグナルハンドラ取得手段3002およびセキュリティレベル変更手段3003の動作のみであるため、以下、シグナルハンドラ取得手段3002およびセキュリティレベル変更手段2002の動作を説明する。
図11を参照すると、シグナルハンドラ取得手段3002は、シグナル1131の値を引数とする第3の特定の命令1123によってシグナルハンドラフック関数1126から呼び出されると、そのシグナル1131の値を取得する(ステップB11)。次に、シグナルハンドラ記憶手段1104を参照し、プロセス1120の識別子と組みとなるデフォルトシグナルハンドラテーブルを参照し(ステップB12)、シグナル1131の値に対応して設定されているシグナルハンドラ1127を取得する(ステップB13)。次に、命令1118を実行することにより、プロセス1120の識別子およびシグナル1131の値を通知してセキュリティレベル変更手段3003を呼び出し(ステップB14)、セキュリティレベル変更完了信号をセキュリティレベル変更手段3003から受信するまで待ち合わせる(ステップB15)。
図12を参照すると、セキュリティレベル変更手段3003は、シグナルハンドラ取得手段1113から呼び出されると、シグナル1131の値を取得し(ステップC21)、プロセス1120の識別子とその属性値1101の組をセキュリティレベル記憶手段1105に記憶(退避)させる(ステップC22)。次に、セキュリティレベル記憶手段1105に、プロセス1120の識別子と属性値1101の組を記憶(退避)させる(ステップC22)。次に、セキュリティレベル変更規則記憶手段3001を参照し、シグナルハンドラ取得手段3002より取得したシグナル1131の値と組みとなる属性値Nxxを取得し(ステップC23)、プロセス1131の属性値1101を取得した属性値Nxxに変更する(ステップC24)。そして、シグナルハンドラ取得手段3002にセキュリティレベル変更完了信号を送信する(ステップC25)。
シグナルハンドラ取得手段3002は、セキュリティレベル変更完了信号を受信すると、ステップB13においてシグナルハンドラ記憶手段1104より取得したシグナルハンドラ1127をシグナルハンドラフック関数1126に渡し(ステップB16)、処理を終了する。
次に、本実施の形態の効果について説明する。
本実施の形態によれば、第1の実施の形態の効果に加え、予め記憶しておいたセキュリティレベル変更規則により、シグナルハンドラ実行時のプロセスのセキュリティレベルを、発生したシグナル1131の値に応じて変更することができる。
<第4の実施の形態>
図13を参照すると、本発明の第4の実施の形態は、記憶装置1100がシグナルハンドラテーブル1103およびシグナルハンドラ記憶手段1104に代えて共有シグナルハンドラテーブル4001およびシグナルハンドラ記憶手段4002を有すること、OS1110がシグナルハンドラ変更手段1111、シグナルハンドラ復帰手段1112およびシグナルハンドラ取得手段1113に代えてシグナルハンドラ変更手段4003、シグナルハンドラ復帰手段4004およびシグナルハンドラ取得手段4005を有することで、図2に示した第1の実施の形態と相違する。
共有シグナルハンドラテーブル4001は、複数のプロセス1120で共有されるシグナルハンドラテーブルである。本実施の形態の場合、OS1110は、シグナルハンドラテーブルを共有しているプロセスを管理している。
シグナルハンドラ記憶手段4002は、共有シグナルハンドラテーブル4001を退避する記憶手段である。第1の実施の形態のシグナルハンドラ記憶手段1104は、1つのプロセス1120の識別子とシグナルハンドラテーブルの組を記憶したが、本実施の形態のシグナルハンドラ記憶手段4002は、プロセスの識別子群と共有シグナルハンドラテーブル4001を組みとして記憶する。ここで、プロセスの識別子群とは、1以上のプロセス識別子で、組みとなる共有シグナルハンドラテーブル4001を共有しているプロセスのプロセス識別子からなる集合である。
シグナルハンドラ変更手段4003は、プロセス1120の関数1125が第1の特定の命令1121を実行した際に呼び出されると、自プロセス1120と共有シグナルハンドラテーブル4001を共有している他のプロセスがあり且つ当該他のプロセスの識別子がシグナルハンドラ記憶手段4002のプロセス識別子群に記憶されていれば、そのプロセス識別子群に自プロセス1120のプロセス識別子を追加し、そのプロセス識別子群と組みとなるデフォルトシグナルハンドラテーブルに、自プロセス1120の共有シグナルハンドラテーブル4001に設定されているシグナルハンドラフック関数1126以外のシグナルハンドラを記憶(退避)する。そして、自プロセス1120の共有シグナルハンドラテーブル4001に設定されているシグナルハンドラをシグナルハンドラフック関数1126に変更する。
他方、自プロセス1120と共有シグナルハンドラテーブル4001を共有している他のプロセスがない場合、またはそのような他のプロセスがあっても、他のプロセスの識別子がシグナルハンドラ記憶手段4002のプロセス識別子群に記憶されていない場合、シグナルハンドラ変更手段4003は、プロセス1120の識別子をプロセス識別子群として、また共有シグナルハンドラテーブル4001をデフォルトシグナルハンドラテーブルとして、シグナルハンドラ記憶手段4002に記憶(退避)し、プロセス1120の共有シグナルハンドラテーブル4001に設定されているシグナルハンドラをシグナルハンドラフック関数1126に変更する。
シグナルハンドラ復帰手段4004は、プロセス1120の関数1125が第2の特定の命令1122を実行した際に呼び出されると、プロセス1120のプロセス識別子を含むシグナルハンドラ記憶手段4002中のプロセス識別子群を参照し、プロセス1120以外のプロセス識別子が存在した場合、そのプロセス識別子群と組みとなるデフォルトシグナルハンドラテーブルに、プロセス1120の共有シグナルハンドラテーブル4001に設定されているシグナルハンドラフック関数1126以外のシグナルハンドラを記憶(退避)する。そして、そのプロセス識別子群からプロセス1120の識別子を削除する。
他方、プロセス識別子群にプロセス1120の識別子以外のプロセス識別子が存在しない場合、シグナルハンドラ復帰手段4004は、プロセス1120の共有シグナルハンドラテーブル4001にシグナルハンドラとして設定されているシグナルハンドラフック関数1126を、シグナルハンドラ記憶手段4002にプロセス1120の識別子を含むプロセス識別子群と組にして記憶されているデフォルトシグナルハンドラテーブルに設定されているシグナルハンドラに変更する。そして、シグナルハンドラ記憶手段4002に記憶されているプロセス1120の識別子を含むプロセス識別子群とデフォルトシグナルハンドラテーブルの組みからなるデータを削除する。
シグナルハンドラ取得手段4005は、シグナルハンドラ取得手段1113とほぼ同様の手段である。すなわち、シグナルハンドラ取得手段4005は、プロセス1120がシグナル1131を受信したことで実行されたシグナルハンドラフック関数1126において、受信したシグナル1131の値を引数として実行する第3の特定の命令1123によって呼び出され、シグナルハンドラ記憶手段4002中のプロセス1120の識別子を含むプロセス識別子群と組みとなるデフォルトシグナルハンドラテーブルからシグナル1131に対応するシグナルハンドラを取得し、命令1118によってセキュリティレベル変更手段1114を呼び出して、このセキュリティレベル変更手段1114の処理が終了した後に、前記取得したシグナルハンドラをシグナルハンドラフック関数1126に渡す機能を有する。
次に、本実施の形態の全体の動作を説明する。本実施の形態の動作のうち、第1の実施の形態と相違する動作は、シグナルハンドラ変更手段4003、シグナルハンドラ復帰手段4004およびシグナルハンドラ取得手段4005の動作のみであるため、以下、シグナルハンドラ変更手段4003、シグナルハンドラ復帰手段4004およびシグナルハンドラ取得手段4005の動作を説明する。
プロセス1120が関数1125を呼び出し、その関数1125に配置された第1の特定の命令1121が実行されると、シグナルハンドラ変更手段4003が呼び出される。
図14〜図16を参照すると、シグナルハンドラ変更手段4003は、プロセス1120と共有シグナルハンドラテーブル4001を共有している他のプロセスがある場合(ステップA11のYES)、当該他のプロセスの識別子がシグナルハンドラ記憶手段4002のプロセス識別子群に記憶されているかを判断する(ステップA12)。シグナルハンドラ記憶手段4002のプロセス識別子群に、プロセス1120と共有シグナルハンドラテーブル4001を共有している他のプロセスの識別子が記憶されている場合(ステップA12のYES)、そのプロセス識別子群にプロセス1120のプロセス識別子を追加する(ステップA13)。
次にシグナルハンドラ変更手段4003は、そのプロセス識別子群と組みとなるデフォルトシグナルハンドラテーブルを参照する(ステップA14)。次に、シグナル探索番号iを初期値0に設定する(ステップA15)。次に、プロセス1120の共有シグナルハンドラテーブル4001のシグナルの値iに対応して設定されているシグナルハンドラを参照し(ステップA16)、参照したシグナルハンドラにシグナルハンドラフック関数1126以外のシグナルハンドラが設定されている場合(ステップA17のYES)、そのシグナルハンドラをデフォルトシグナルハンドラテーブルのシグナルの値iに対応するシグナルハンドラとして記憶(退避)し(ステップA18)、プロセス1120の共有シグナルハンドラテーブル4001のシグナルの値iに対応するシグナルハンドラとして、シグナルハンドラフック関数1126を設定する(ステップA19)。そして、シグナル探索番号iに1をプラスする(ステップA20)。また、参照したシグナルハンドラにシグナルハンドラフック関数1126以外のシグナルハンドラが設定されていなければ(ステップA17のNO)、ステップA18、A19をスキップして、シグナル探索番号iに1をプラスする(ステップA20)。
次にシグナルハンドラ変更手段4003は、シグナル探索番号iがシグナルの数の最大値Sより大きい値の場合(ステップA21のYES)、処理を終了する。これにより、第1の特定の命令1121の実行が終了し、関数1125の処理が再開される。他方、シグナル探索番号iがSと等しい値または小さい値の場合(ステップA21のNO)、ステップA16に戻り、上述した処理と同様の処理を繰り返す。
また、プロセス1120と共有シグナルハンドラテーブルを共有している他のプロセスがない場合(ステップA11のNO)、またはあっても当該他のプロセスの識別子がシグナルハンドラ記憶手段4002のプロセス識別子群に記憶されていない場合(ステップA12のNO)、シグナルハンドラ変更手段4003は、プロセス1120の識別子を含むプロセス識別子群と共有シグナルハンドラテーブル4001とを組にしてシグナルハンドラ記憶手段4002に記憶(退避)する(ステップA22)。
次にシグナルハンドラ変更手段4003は、シグナル探索番号iを初期値0に設定する(ステップA23)。次に、プロセス1120の共有シグナルハンドラテーブル4001のシグナルの値iに対応して設定されているシグナルハンドラを参照し(ステップA24)、この参照したシグナルハンドラがプロセス1120が設定したシグナルハンドラであれば(ステップA25のYES)、シグナルの値iに対応するシグナルハンドラとしてシグナルハンドラフック関数1126に変更する(ステップA26)。そして、シグナル探索番号iに1をプラスする(ステップA27)。参照したシグナルハンドラがプロセス1120が設定したシグナルハンドラでなければ(ステップA25でNO)、ステップA26をスキップし、シグナル探索番号iに1をプラスする(ステップA27)。
次にシグナルハンドラ変更手段4003は、シグナル探索番号iがSより大きい値の場合(ステップA28のYES)、処理を終了する。これにより第1の特定の命令1121の実行が終了し、関数1125の処理が再開される。他方、シグナル探索番号iがSと等しい値または小さい値の場合(ステップA28のNO)、ステップA24に戻り、上述した処理と同様の処理を繰り返す。
ここで、関数1125を実行しているプロセス1120が、第1の特定の命令1121の実行が終了した後に、シグナルハンドラフック関数1126がシグナルハンドラとして設定されているシグナル1131を受信したとする。すると、OS1110により関数1125の実行が中断され、シグナル処理手段1116を通じてシグナルハンドラフック関数1126が実行される。そして、シグナルハンドラフック関数1126では、受信したシグナル1131の値を引数として第3の特定の命令1123が実行され、これによりシグナルハンドラ取得手段4005が呼び出される。
図17を参照すると、シグナルハンドラ取得手段4005は、第3の特定の命令1123の引数であるシグナル1131の値を取得する(ステップB21)。次に、シグナルハンドラ記憶手段4002から、自プロセス1120の識別子を含むプロセス識別子群と組みとなるデフォルトシグナルハンドラテーブルを参照し(ステップB22)、シグナル1131の値に対応して設定されているシグナルハンドラ1127を取得する(ステップB23)。次に、命令1118を実行することにより、プロセス1120の識別子を通知してセキュリティレベル変更手段1114を呼び出し(ステップB24)、セキュリティレベル変更完了信号をセキュリティレベル変更手段1114から受信するまで待ち合わせる(ステップB25)。
図5を参照して説明したように、セキュリティレベル変更手段1114は、シグナルハンドラ取得手段4005から呼び出されると、プロセス1120の識別子とその属性値1101の組をセキュリティレベル記憶手段1105に記憶(退避)させ(ステップC1)、プロセス1120の属性値1101を変更し(ステップC2)、シグナルハンドラ取得手段4005にセキュリティレベル変更完了信号を送信し(ステップC3)、処理を終了する。ここで、本実施の形態の変形例として、セキュリティレベル変更手段1114は、プロセス1120の識別子が、シグナルハンドラ記憶手段4002中の何れかのプロセス識別子群に含まれているか否かを調べ、含まれている場合に限って(つまり当該プロセスが関数1125の第1の特定の命令1121を実行し、第2の特定の命令1122を実行していない状態)、プロセス1120の属性値1101を変更するようにしても良い。
シグナルハンドラ取得手段4005は、セキュリティレベル変更完了信号を受信すると、ステップB23においてシグナルハンドラ記憶手段4002より取得したシグナルハンドラ1127をシグナルハンドラフック関数1126に渡し(ステップB26)、処理を終了する。
シグナルハンドラフック関数1126は、第3の特定の命令1123を通じてシグナルハンドラ取得手段4005より取得したシグナルハンドラ1127を実行する。このシグナルハンドラ1127の実行過程で、シグナルハンドラ1127に挿入された特権命令1130が実行されると、制御が特権命令実行制御手段1117に移る。特権命令実行制御手段1117は、特権命令1130を実行したプロセス1120の属性値1101を参照し、特権命令を実行することができるセキュリティレベルかどうかを判定する。
シグナルハンドラ1127の実行が終わると、シグナルハンドラフック関数1126は第4の特定の命令1124を実行する。第4の特定の命令1124が実行されると、プロセス1120の識別子を伴ってセキュリティレベル復帰手段1115が呼び出される。
図6を参照して既に説明したように、セキュリティレベル復帰手段1115は、セキュリティレベル記憶手段1105を参照し、プロセス1120の識別子と組みとなる属性値を取得する(ステップD1)。次に、セキュリティレベル記憶手段1105に記憶されているプロセス1120の識別子と属性値の組みからなるデータを削除する(ステップD2)。そして、プロセス1120の属性値1101を元の属性値に戻す(ステップD3)。
ここで、本実施の形態の変形例として、セキュリティレベル変更手段1114は、プロセス1120の識別子が、シグナルハンドラ記憶手段4002中の何れかのプロセス識別子群に含まれているか否かを調べ、含まれていなければ、プロセス1120の属性値1101を元に戻す処理を実行せずに終了するようにしても良い。
セキュリティレベル復帰手段1115の処理が終了し、制御がシグナルハンドラフック関数1126に戻されると、第4の特定の命令1124の実行が終了する。第4の特定の命令1124の実行が終了すると、シグナルハンドラフック関数1126の処理は終了となる。シグナルハンドラフック関数1126の処理が終了すると、制御がシグナル処理手段1116を通じて関数1125に戻され、関数1125の処理が再開される。そして、関数1125の処理が再開し、その関数1125に配置された第2の特定の命令1122が実行されると、プロセス1120の識別子を伴ってシグナルハンドラ復帰手段4004が呼び出される。
図18〜図20を参照すると、シグナルハンドラ復帰手段4004は、プロセス1120のプロセス識別子を含むプロセス識別子群をシグナルハンドラ記憶手段4002中から参照し(ステップE11)、そのプロセス識別子群にプロセス1120以外の他のプロセスの識別子が存在した場合(ステップE12のYES)、そのプロセス識別子群と組みとなるデフォルトシグナルハンドラテーブルを参照する(ステップE13)。次に、シグナル探索番号iを初期値0に設定し(ステップE14)、プロセス1120の共有シグナルハンドラテーブル4001のシグナルの値iに対応するシグナルハンドラを参照する(ステップE15)。
参照したシグナルハンドラにシグナルハンドラフック関数1126以外のシグナルハンドラが設定されている場合(ステップE16のYES)、シグナルハンドラ復帰手段4004は、そのシグナルハンドラをデフォルトシグナルハンドラテーブルのシグナルの値iに対応するシグナルハンドラとしてシグナルハンドラ記憶手段4002に記憶(退避)する(ステップE17)。次に、参照しているプロセス1120の共有シグナルハンドラテーブル4001のシグナルの値iに対応するシグナルハンドラとして、シグナルハンドラフック関数1126を設定する(ステップE18)。そして、シグナル探索番号iに1をプラスする(ステップE19)。他方、参照したシグナルハンドラにシグナルハンドラフック関数1126が設定されていない場合(ステップE16のNO)、ステップE17、E18の処理をスキップし、シグナル探索番号iに1をプラスする(ステップE19)。
次にシグナルハンドラ復帰手段4004は、シグナル探索番号iがシグナルの数の最大値Sより大きい値の場合(ステップE20のYES)、シグナルハンドラ記憶手段4002に記憶されているプロセス識別子群からプロセス1120の識別子を削除する(ステップE21)。そして、シグナルハンドラ復帰手段4004の処理を終える。これにより、第2の特定の命令1122の実行が終了し、関数1125の処理が再開される。他方、シグナル探索番号iがSと等しい値または小さい値の場合(ステップE20のNO)、ステップE15に戻り、上述した処理と同様の処理を繰り返す。
また、プロセス識別子群にプロセス1120以外の他のプロセスの識別子が存在しない場合(ステップE12のNO)、シグナルハンドラ復帰手段4004は、シグナルハンドラ記憶手段4002に記憶されているプロセス1120の識別子を含むプロセス識別子群と組みとなるデフォルトシグナルハンドラテーブルを取得する(ステップE22)。次に、シグナルハンドラ復帰手段4004は、シグナル探索番号iを初期値0に設定し(ステップE23)、プロセス1120の共有シグナルハンドラテーブル4001のシグナルの値iに対応して設定されているシグナルハンドラを参照する(ステップE24)。
参照したシグナルハンドラがシグナルハンドラフック関数1126であった場合(ステップE25のYES)、シグナルハンドラ復帰手段4004は、シグナルの値iに対応するシグナルハンドラとしてデフォルトシグナルハンドラテーブルに登録されているシグナルハンドラをシグナルハンドラ記憶手段4002から読み出し、プロセス1120の共有シグナルハンドラテーブル4001におけるシグナルの値iに対応するシグナルハンドラとして設定する(ステップE26)。そして、シグナル探索番号iに1をプラスする(ステップE27)。他方、参照したシグナルハンドラがシグナルハンドラフック関数1126でなかった場合(ステップE25のNO)、ステップE26の処理をスキップし、シグナル探索番号iに1をプラスする(ステップE27)。
次にシグナルハンドラ復帰手段4004は、シグナル探索番号iがシグナルの数の最大値Sより大きい値の場合(ステップE28のYES)、シグナルハンドラ記憶手段4002に記憶されているプロセス1120の識別子を含むプロセス識別子群とデフォルトシグナルハンドラテーブルの組みからなるデータを削除する(ステップE29)。そして、シグナルハンドラ復帰手段4004の処理を終える。これにより、第2の特定の命令1122の実行が終了し、関数1125の処理が再開される。他方、シグナル探索番号iがSと等しい値または小さい値の場合(ステップE28のNO)、ステップE24に戻って上述した処理と同様の処理を繰り返す。
次に、本実施の形態の効果について説明する。
本実施の形態によれば、シグナルハンドラテーブルのシグナルハンドラを変更する際に、そのシグナルハンドラテーブルを共有しているプロセスに関する処理を行うことで、シグナルハンドラテーブルを複数のプロセス間で共有する機能を持ったOSにも対応することができる。
次に、本発明の第1の実施例を、図21及び図22を参照して説明する。かかる実施例は本発明の第1の実施の形態に対応するものである。
本実施例では、プログラム制御により動作するコンピュータ上で、OS1110とプロセスAとが動作する。
OS1110は、本実施例ではシグナルとして、シグナル0(シグナルの値0)と、シグナル1(シグナルの値1)と、シグナル2(シグナルの値2)を管理し、各プロセスのシグナルハンドラテーブルにはこれらシグナルの発生時に実行するシグナルハンドラの開始アドレスがシグナルの値と組みで記憶されており、シグナルが発生した際に、シグナル送信先プロセスのシグナルハンドラテーブルを参照し、シグナルの値と組みとなるシグナルハンドラの開始アドレスを取得し、そのシグナルハンドラを開始する。さらに、OS1110は、セキュアOSの機能を備えプロセス毎にセキュリティレベルが設定可能であり、本実施例では“Low”(非特権レベル)と“High”(特権レベル)にセキュリティレベルを設定可能である。“Low”となっているプロセスの属性値は1、“High”となっているプロセスの属性値は3と設定され、セキュリティレベル“Low”に設定されたプロセスは特権システムコールの実行が制限され、セキュリティレベル“High”に設定されたプロセスは特権システムコールの実行に制限はない。このようなOSには、例えばSE
Linuxがあるが、他の種類のOSであってもかまわない。
さらに、OS1110は、シグナルハンドラ変更手段1111と、シグナルハンドラ復帰手段1112と、シグナルハンドラ取得手段1113と、セキュリティレベル変更手段1114と、セキュリティレベル復帰手段1115と、シグナル処理手段1116と、特権命令実行制御手段1117と、シグナルハンドラ記憶手段1104と、セキュリティレベル記憶手段1105とを有する。さらに、OS1110は、システムコール命令として、第1の特定の命令としてシグナルハンドラ変更手段1111を呼び出すシステムコール1、第2の特定の命令としてシグナルハンドラ復帰手段1112を呼び出すシステムコール2、第3の特定の命令としてシグナルハンドラ取得手段1113を呼び出すシステムコール3、第4の特定の命令としてセキュリティレベル復帰手段1115を呼び出すシステムコール4を備える。セキュリティレベル変更手段1114は、プロセスの属性値を1(セキュリティレベル“Low”)に変更する機能を有する。セキュリティレベル復帰手段1115は、プロセスの属性値を3(セキュリティレベル“High”)に戻す機能を有する。
プロセスAは、関数1125と、シグナルハンドラフック関数1126と、シグナルハンドラAs0と、シグナルハンドラAs1とを含む。関数1125は、自関数で行われる処理のうち予め定められた特定の処理区間の実行前にシグナルハンドラフック関数1126の開始アドレスを引数とするシステムコール1が実行され、自関数で行われる処理のうち前記特定の処理区間の実行後にシグナルハンドラフック関数1126の開始アドレスを引数とするシステムコール2が実行されるようになっている。シグナルハンドラフック関数1126は、関数の先頭部分に受信したシグナルの値を引数として実行するシステムコール3が配置され、関数の終了部分にシステムコール4が配置される。また、システムコール3の直後には、システムコール3によって取得するシグナルハンドラの開始アドレスを基に、そのシグナルハンドラを実行する命令が配置されている。シグナルハンドラAs0は、シグナル0がプロセスAに送信された際に実行されるシグナルハンドラであり、シグナルハンドラAs1はシグナル1がプロセスAに送信された際に実行されるシグナルハンドラである。プロセスAでは、シグナル2に対するシグナルハンドラは設定されていない。プロセスAのシグナルハンドラテーブルを図22の状態1に示す。また、プロセスAの識別子は1、プロセスAの属性値は3(セキュリティレベル“High”)である。
今、プロセスAが関数1125を呼び出し、その関数1125に配置されたシステムコール1を、シグナルハンドラフック関数1126の開始アドレスを引数として実行する。システムコール1が実行されると、シグナルハンドラ変更手段1111が呼び出される。シグナルハンドラ変更手段1111では、プロセスAの識別子1とプロセスAのシグナルハンドラテーブルとを組みとして、シグナルハンドラ記憶手段1104に記憶する。シグナルハンドラ記憶手段1104に記憶されたシグナルハンドラテーブルをデフォルトシグナルハンドラテーブルAと呼ぶ。デフォルトシグナルハンドラテーブルAの内容を図22に示す。
次にシグナルハンドラ変更手段1111は、シグナル探索番号を初期値0に設定する。ここでOS1110は、シグナルの値0〜2のシグナルを管理しているため、シグナル探索番号の最大値は2である。そして、プロセスAのシグナルハンドラテーブルのシグナルの値0と組みとなるシグナルハンドラの開始アドレスを参照する。シグナルの値0はシグナルハンドラAs0の先頭アドレスが組みとして記憶されているため、シグナルハンドラフック関数1126の開始アドレスに変更する。そして、シグナル探索番号に1をプラスする。シグナル探索番号は1となったため、プロセスAのシグナルハンドラテーブルのシグナルの値1と組みとなるシグナルハンドラの開始アドレスを参照する。シグナルの値1はシグナルハンドラAs1の先頭アドレスが組みとして記憶されているため、シグナルハンドラフック関数1126の開始アドレスに変更する。そして、シグナル探索番号に1をプラスする。シグナル探索番号は2となったため、プロセスAのシグナルハンドラテーブルのシグナルの値2と組みとなるシグナルハンドラの開始アドレスを参照する。シグナルの値2にはシグナルハンドラの開始アドレスが設定されていないため、シグナル探索番号に1をプラスする。シグナル探索番号は3となり、シグナル探索番号の最大値より大きくなったため、システムコール1の処理を終了する。この時のプロセスAのシグナルハンドラテーブルを図22の状態2に示す。
関数1125を実行しているプロセスAが、システムコール1の実行を終了した後に、シグナル1を受信したとする。プロセスAのシグナル1のシグナルハンドラにはシグナルハンドラフック関数1126が設定されているため、関数1125の実行が中断され、シグナルハンドラフック関数1126が実行される。そして、シグナルハンドラフック関数1126では、受信したシグナル1のシグナルの値1を引数としてシステムコール3を実行する。システムコール3が実行されると、シグナルハンドラ取得手段1113が呼び出される。
シグナルハンドラ取得手段1113は、シグナルハンドラ記憶手段1104から、プロセスAの識別子1と組みとなるデフォルトシグナルハンドラテーブルAを参照し、シグナルの値1と組みとなるシグナルハンドラAs1の開始アドレスを取得する。そして、セキュリティレベル変更手段1114を呼び出し、セキュリティレベル変更完了信号を受信するまで待つ。
セキュリティレベル変更手段1114は、セキュリティレベル記憶手段1104に、プロセスAの識別子1と属性値3とを組みとして記憶させる。そして、プロセスAの属性値を1に変更し、シグナルハンドラ取得手段1113にセキュリティレベル変更完了信号を送信する。
シグナルハンドラ取得手段1113は、セキュリティレベル変更完了信号を受信すると、シグナルハンドラ記憶手段1104より取得したシグナルハンドラAs1の開始アドレスをシグナルハンドラフック関数1126に渡し、システムコール3の処理を終了する。
シグナルハンドラフック関数1126では、システムコール3を通じて取得したシグナルハンドラAs1の開始アドレスを基に、シグナルハンドラAs1を呼び出す。
シグナルハンドラAs1の実行が終わると、シグナルハンドラフック関数1126はシステムコール4を実行する。システムコール4が実行されると、セキュリティレベル復帰手段1115が呼び出される。
セキュリティレベル復帰手段1115は、セキュリティレベル記憶手段1105を参照し、プロセスAの識別子1と組みとなる属性値3を取得する。次に、セキュリティレベル記憶手段1105に記憶されているプロセスAの識別子1と属性値3の組みからなるデータを削除する。そして、プロセスAの属性値を3に変更し、システムコール4の処理を終了する。システムコール4の処理が終了すると、シグナルハンドラフック関数1126の処理は終了となる。シグナルハンドラフック関数1126の処理が終了すると、関数1125の処理が再開される。
関数1125の処理が再開し、その関数1125に配置されたシステムコール2がシグナルハンドラフック関数1126の先頭アドレスを引数として実行されると、シグナルハンドラ復帰手段1115が呼び出される。
シグナルハンドラ復帰手段1115は、シグナルハンドラ記憶手段1104を参照し、プロセスAの識別子1と組みとなるデフォルトシグナルハンドラテーブルAを取得する。次にシグナルハンドラ復帰手段1115は、シグナル探索番号を初期値0に設定する。ここでOS1110は、シグナルの値0〜2のシグナルを管理しているため、シグナル探索番号の最大値は2である。次に、プロセスAのシグナルハンドラテーブルのシグナルの値0と組みとなるシグナルハンドラの開始アドレスを参照する。シグナルの値0はシグナルハンドラフック関数の先頭アドレスが組みとして記憶されているため、デフォルトシグナルハンドラテーブルAでシグナルの値0と組みとなるシグナルハンドラAs0に変更する。次に、シグナル探索番号に1をプラスする。シグナル探索番号は1となったため、プロセスAのシグナルハンドラテーブルのシグナルの値1と組みとなるシグナルハンドラの開始アドレスを参照する。シグナルの値1はシグナルハンドラフック関数の先頭アドレスが組みとして記憶されているため、デフォルトシグナルハンドラテーブルAでシグナルの値1と組みとなるシグナルハンドラAs1に変更する。次に、シグナル探索番号に1をプラスする。シグナル探索番号は2となったため、プロセスAのシグナルハンドラテーブルのシグナルの値2と組みとなるシグナルハンドラの開始アドレスを参照する。シグナル2にはシグナルハンドラの開始アドレスが設定されていないため、シグナル探索番号に1をプラスする。シグナル探索番号は3となり、シグナル探索番号の最大値より大きくなったため、シグナルハンドラ記憶手段1104のプロセスAの識別子1とデフォルトシグナルハンドラテーブルAの組みからなるデータを削除し、システムコール2の処理を終了する。
次に、本発明の第2の実施例を、図23及び図24を参照して説明する。かかる実施例は本発明の第2の実施の形態に対応するものである。
本実施例は、コンピュータ上で動作するプロセスがプロセスBである点と、OS1110がセキュリティレベル変更規則記憶手段2001を有する点で、第1の実施例と相違する。また、OS1110は、本実施例ではシグナルとして、シグナル0(シグナルの値0)と、シグナル1(シグナルの値1)と、シグナル2(シグナルの値2)を管理し、各プロセスのシグナルハンドラテーブルにはこれらシグナル発生時に実行するシグナルハンドラの開始アドレスがシグナルの値と組みで記憶されており、シグナルが発生した際に、シグナル送信先プロセスのシグナルハンドラテーブルを参照し、シグナルの値と組みとなるシグナルハンドラの開始アドレスを取得し、そのシグナルハンドラを開始する。さらに、OS1110は、セキュアOSの機能を備えプロセス毎にセキュリティレベルが設定可能であり、本実施例では“Low”(非特権レベル)と“Mid”(通常権限レベル)と“High”(特権レベル)にセキュリティレベルを設定可能であり、“Low”となっているプロセスの属性値は1、“Mid”となっているプロセスの属性値は2、“High”となっているプロセスの属性値は3と設定され、セキュリティレベル“Low”に設定されたプロセスは特権システムコールの実行が制限され、セキュリティレベル“Mid”に設定されたプロセスは幾つかの特権システムコールの実行のみが制限され、セキュリティレベル“High”に設定されたプロセスは特権システムコールの実行に制限はない。このようなOSには、例えばSE
Linuxがあるが、他の種類のOSであってもかまわない。
さらに、セキュリティレベル変更規則記憶手段2001は、図24に示すような変更規則が記憶されている。
プロセスBは、関数1125と、シグナルハンドラフック関数1126と、シグナルハンドラBs0を含む。シグナルハンドラBs0は、シグナル0がプロセスBに送信された際に実行されるシグナルハンドラである。プロセスBは、シグナル1およびシグナル2に対するシグナルハンドラは設定されていない。プロセスBのシグナルハンドラテーブルを図24の状態1に示す。また、プロセスBの識別子は1、プロセスBの属性値は3(セキュリティレベル“High”)である。
今、プロセスBが関数1125を呼び出し、その関数に配置されたシステムコール1をシグナルハンドラフック関数1126の開始アドレスを引数として実行する。システムコール1が実行されると、シグナルハンドラ変更手段1111が呼び出される。
シグナルハンドラ変更手段1111は、プロセスBの識別子1とプロセスBのシグナルハンドラテーブルとを組みとして、シグナルハンドラ記憶手段1104に記憶する。シグナルハンドラ記憶手段1104に記憶されたシグナルハンドラテーブルをデフォルトシグナルハンドラテーブルBと呼ぶ。その内容は図24に示すようになっている。次に、シグナルハンドラ変更手段1111は、シグナル探索番号を初期値0に設定する。ここでOS1110は、シグナルの値0〜2のシグナルを管理しているため、シグナル探索番号の最大値は2である。次に、プロセスBのシグナルハンドラテーブルのシグナルの値0と組みとなるシグナルハンドラの開始アドレスを参照する。シグナルの値0はシグナルハンドラBs0の先頭アドレスが組みとして記憶されているため、シグナルハンドラフック関数1126の開始アドレスに変更する。そして、シグナル探索番号に1をプラスする。シグナル探索番号は1となったため、プロセスBのシグナルハンドラテーブルのシグナルの値1と組みとなるシグナルハンドラの開始アドレスを参照する。シグナルの値1にはシグナルハンドラの開始アドレスが設定されていないため、シグナル探索番号に1をプラスする。シグナル探索番号は2となったため、プロセスBのシグナルハンドラテーブルのシグナルの値2と組みとなるシグナルハンドラの開始アドレスを参照する。シグナルの値2にはシグナルハンドラが設定されていないため、シグナル探索番号に1をプラスする。シグナル探索番号は3となり、シグナル探索番号の最大値より大きくなったため、システムコール1の処理を終了する。この時のプロセスBのシグナルハンドラテーブルを図24の状態2に示す。
関数1125を実行しているプロセスBが、システムコール1の実行を終了した後に、シグナル0を受信したとする。プロセスBのシグナル0のシグナルハンドラにはシグナルハンドラフック関数1126が設定されているため、関数1125の実行が中断され、シグナルハンドラフック関数1126が実行される。
シグナルハンドラフック関数1126は、受信したシグナル0のシグナルの値0を引数としてシステムコール3を実行する。システムコール3が実行されると、シグナルハンドラ取得手段1113が呼び出される。
シグナルハンドラ取得手段1113は、シグナルハンドラ記憶手段1104から、プロセスBの識別子1と組みとなるデフォルトシグナルハンドラテーブルBを参照し、シグナルの値0と組みとなるシグナルハンドラBs0の開始アドレスを取得する。そして、セキュリティレベル変更手段2002を呼び出し、セキュリティレベル変更完了信号を受信するまで待つ。
セキュリティレベル変更手段2002は、セキュリティレベル記憶手段1105に、プロセスBの識別子1と属性値3を組みとして記憶させる。そして、セキュリティレベル変更規則記憶手段2001を参照し、変更前の属性値3(プロセスBの属性値)と組みとなる属性値2を取得する。そして、プロセスBの属性値を2に変更し、シグナルハンドラ取得手段1113にセキュリティレベル変更完了信号を送信する。
シグナルハンドラ取得手段1113は、セキュリティレベル変更完了信号を受信すると、シグナルハンドラ記憶手段1104より取得したシグナルハンドラBs0の開始アドレスをシグナルハンドラフック関数1126に渡し、システムコール3の処理を終了する。
シグナルハンドラフック関数1126は、システムコール3を通じて取得したシグナルハンドラBs0の開始アドレスを基に、シグナルハンドラBs0を呼び出す。そして、シグナルハンドラBs0の実行が終わると、シグナルハンドラフック関数1126はシステムコール4を実行する。
システムコール4が実行されると、セキュリティレベル復帰手段1115が呼び出される。セキュリティレベル復帰手段1115は、セキュリティレベル記憶手段1105を参照し、プロセスBの識別子1と組みとなる属性値3を取得する。そして、セキュリティレベル記憶手段1105に記憶されているプロセスBの識別子1と属性値3の組みからなるデータを削除する。そして、プロセスBの属性値を3に変更し、システムコール4の処理を終了する。システムコール4の処理が終了すると、シグナルハンドラフック関数1126の処理は終了となる。シグナルハンドラフック関数1126の処理が終了すると、関数1125の処理が再開される。
関数1125の処理が再開し、その関数に配置されたシステムコール2をシグナルハンドラフック関数1126の先頭アドレスを引数として実行する。システムコール2が実行されると、シグナルハンドラ復帰手段1112が呼び出される。
シグナルハンドラ復帰手段1112は、シグナルハンドラ記憶手段1104を参照し、プロセスBの識別子1と組みとなるデフォルトシグナルハンドラテーブルBを取得する。次に、シグナルハンドラ復帰手段1112は、シグナル探索番号を初期値0に設定する。ここでOSは、シグナルの値0〜2のシグナルを管理しているため、シグナル探索番号の最大値は2である。次に、プロセスBのシグナルハンドラテーブルのシグナルの値0と組みとなるシグナルハンドラの開始アドレスを参照する。シグナルの値0はシグナルハンドラフック関数1126の先頭アドレスが組みとして記憶されているため、デフォルトシグナルハンドラテーブルBでシグナルの値0と組みとなるシグナルハンドラBs0に変更する。そして、シグナル探索番号に1をプラスする。シグナル探索番号は1となったため、プロセスBのシグナルハンドラテーブルのシグナルの値1と組みとなるシグナルハンドラの開始アドレスを参照する。シグナルの値1にはシグナルハンドラの開始アドレスが設定されていないため、シグナル探索番号に1をプラスする。シグナル探索番号は2となったため、プロセスBのシグナルハンドラテーブルのシグナルの値2と組みとなるシグナルハンドラの開始アドレスを参照する。シグナルの値2にはシグナルハンドラが設定されていないため、シグナル探索番号に1をプラスする。シグナル探索番号は3となり、シグナル探索番号の最大値より大きくなったため、シグナルハンドラ記憶手段1104のプロセスBの識別子1とデフォルトシグナルハンドラテーブルBの組みからなるデータを削除し、システムコール2の処理を終了する。
次に、本発明の第3の実施例を、図25及び図26を参照して説明する。かかる実施例は本発明の第3の実施の形態に対応するものである。
本実施例は、コンピュータ上で動作するプロセスがプロセスCである点と、OS1110がセキュリティレベル変更規則記憶手段3001を有する点で、第1の実施例と相違する。また、OS1110は、本実施例ではシグナルとして、シグナル0(シグナルの値0)と、シグナル1(シグナルの値1)と、シグナル2(シグナルの値2)を管理し、各プロセスのシグナルハンドラテーブルにはこれらシグナル発生時に実行するシグナルハンドラの開始アドレスがシグナルの値と組みで記憶されており、シグナルが発生した際に、シグナル送信先プロセスのシグナルハンドラテーブルを参照し、シグナルの値と組みとなるシグナルハンドラの開始アドレスを取得し、そのシグナルハンドラを開始する。さらに、OS1110は、セキュアOSの機能を備えプロセス毎にセキュリティレベルが設定可能であり、本実施例では“Low”(非特権レベル)と“Mid”(通常権限レベル)と“High”(特権レベル)にセキュリティレベルを設定可能であり、“Low”となっているプロセスの属性値は1、“Mid”となっているプロセスの属性値は2、“High”となっているプロセスの属性値は3と設定され、セキュリティレベル“Low”に設定されたプロセスは特権システムコールの実行が制限され、セキュリティレベル“Mid”に設定されたプロセスは幾つかの特権システムコールの実行のみが制限され、セキュリティレベル“High”に設定されたプロセスは特権システムコールの実行に制限はない。このようなOSには、例えばSE
Linuxがあるが、他の種類のOSであってもかまわない。
さらに、OS1110は、シグナルハンドラ変更手段111と、シグナルハンドラ復帰手段1112と、シグナルハンドラ取得手段3002と、セキュリティレベル変更手段3003と、セキュリティレベル復帰手段1115と、シグナルハンドラ記憶手段1104と、セキュリティレベル記憶手段1105と、セキュリティレベル変更規則記憶手段3001とが配置され、さらに、第1の特定の命令としてシグナルハンドラ変更手段1111を呼び出すシステムコール1、第2の特定の命令としてシグナルハンドラ復帰手段1112を呼び出すシステムコール2、第3の特定の命令としてシグナルハンドラ取得手段3002を呼び出すシステムコール3、第4の特定の命令としてセキュリティレベル復帰手段1112を呼び出すシステムコール4を備える。セキュリティレベル変更規則記憶手段3001は、図26に示す内容の変更規則が記憶されている。
プロセスCは、関数1125と、シグナルハンドラフック関数1126と、シグナルハンドラCs0とを含む。関数1125は、自関数で行われる処理のうち予め定められた特定の処理を実行する部分の実行前にシグナルハンドラフック関数1126の開始アドレスを引数とするシステムコール1が実行され、自関数で行われる処理のうち前記特定の処理を実行する部分の実行後にシグナルハンドラフック関数1126の開始アドレスを引数とするシステムコール2が実行されるようになっている。シグナルハンドラフック関数1126は、関数の先頭部分に受信したシグナルの値を引数として実行するシステムコール3が配置され、関数の終了部分にシステムコール4が配置される。また、システムコール3の直後には、システムコール3によって取得するシグナルハンドラの開始アドレスを基に、そのシグナルハンドラを実行する命令が配置されている。シグナルハンドラCs0はシグナル0がプロセスCに送信された際に実行されるシグナルハンドラであり、プロセスCでは、シグナル1およびシグナル2に対するシグナルハンドラは設定されていない。プロセスCのシグナルハンドラテーブルを図26の状態1に示す。また、プロセスCの識別子は1、プロセスCの属性値は3(セキュリティレベル“High”)である。
今、プロセスCが関数1125を呼び出し、その関数1125に配置されたシステムコール1をシグナルハンドラフック関数1126の開始アドレスを引数として実行する。システムコール1が実行されると、シグナルハンドラ変更手段1111が呼び出される。
シグナルハンドラ変更手段1111は、プロセスCの識別子1とプロセスCのシグナルハンドラテーブルとを組みとして、シグナルハンドラ記憶手段1104に記憶する。シグナルハンドラ記憶手段1104に記憶されたシグナルハンドラテーブルをデフォルトシグナルハンドラテーブルCと呼ぶ。デフォルトシグナルハンドラテーブルCの状態は図26に示されている。
次にシグナルハンドラ変更手段1111は、シグナル探索番号を初期値0に設定する。ここでOSは、シグナルの値0〜2のシグナルを管理しているため、シグナル探索番号の最大値は2である。次に、プロセスCのシグナルハンドラテーブルのシグナルの値0と組みとなるシグナルハンドラの開始アドレスを参照する。シグナルの値0はシグナルハンドラCs0の先頭アドレスが組みとして記憶されているため、シグナルハンドラフック関数1126の開始アドレスに変更する。そして、シグナル探索番号に1をプラスする。シグナル探索番号は1となったため、プロセスCのシグナルハンドラテーブルのシグナルの値1と組みとなるシグナルハンドラの開始アドレスを参照する。シグナルの値1にはシグナルハンドラの開始アドレスが設定されていないため、シグナル探索番号に1をプラスする。シグナル探索番号は2となったため、プロセスCのシグナルハンドラテーブルのシグナルの値2と組みとなるシグナルハンドラの開始アドレスを参照する。シグナルの値2にはシグナルハンドラが設定されていないため、シグナル探索番号に1をプラスする。シグナル探索番号は3となり、シグナル探索番号の最大値より大きくなったため、システムコール1の処理を終了する。この時のプロセスCのシグナルハンドラテーブルを図26の状態2に示す。
関数1125を実行しているプロセスCが、システムコール1の実行を終了した後に、シグナル0を受信したとする。プロセスCのシグナル0のシグナルハンドラにはシグナルハンドラフック関数1126が設定されているため、関数1125の実行が中断され、シグナルハンドラフック関数1126が実行される。そして、シグナルハンドラフック関数1126では、受信したシグナル0のシグナルの値0を引数としてシステムコール3を実行する。システムコール3が実行されると、シグナルハンドラ取得手段3002が呼び出される。
シグナルハンドラ取得手段3002は、シグナルハンドラ記憶手段1104から、プロセスCの識別子1と組みとなるデフォルトシグナルハンドラテーブルCを参照し、シグナルの値0と組みとなるシグナルハンドラCs0の開始アドレスを取得する。次に、セキュリティレベル変更手段3003を呼び出し、シグナルの値0を渡す。そして、セキュリティレベル変更完了信号を受信するまで待つ。
セキュリティレベル変更手段3003は、セキュリティレベル記憶手段1105に、プロセスCの識別子1と属性値3を組みとして記憶させる。次に、セキュリティレベル変更規則記憶手段3001を参照し、シグナルの値0と組みとなる属性値1を取得する。そして、プロセスCの属性値を1に変更し、シグナルハンドラ取得手段3002にセキュリティレベル変更完了信号を送信する。
シグナルハンドラ取得手段3002は、セキュリティレベル変更完了信号を受信すると、シグナルハンドラ記憶手段1104より取得したシグナルハンドラCs0の開始アドレスをシグナルハンドラフック関数1126に渡し、システムコール3の処理を終了する。
シグナルハンドラフック関数1126では、システムコール3を通じて取得したシグナルハンドラCs0の開始アドレスを基に、シグナルハンドラCs0を呼び出す。そして、シグナルハンドラCs0の実行が終わると、シグナルハンドラフック関数1126はシステムコール4を実行する。システムコール4が実行されると、セキュリティレベル復帰手段1115が呼び出される。
セキュリティレベル復帰手段1115は、セキュリティレベル記憶手段1105を参照し、プロセスCの識別子1と組みとなる属性値3を取得する。次に、セキュリティレベル記憶手段1105に記憶されているプロセスCの識別子1と属性値3の組みからなるデータを削除する。そして、プロセスCの属性値を3に変更し、システムコール4の処理を終了する。システムコール4の処理が終了すると、シグナルハンドラフック関数1126の処理は終了となる。シグナルハンドラフック関数1126の処理が終了すると、関数1125の処理が再開される。
関数1125の処理が再開し、その関数に配置されたシステムコール2がシグナルハンドラフック関数1126の先頭アドレスを引数として実行されると、シグナルハンドラ復帰手段1112が呼び出される。
シグナルハンドラ復帰手段1112は、シグナルハンドラ記憶手段1104を参照し、プロセスCの識別子1と組みとなるデフォルトシグナルハンドラテーブルCを取得する。次に、シグナルハンドラ復帰手段1112は、シグナル探索番号を初期値0に設定する。ここでOSは、シグナルの値0〜2のシグナルを管理しているため、シグナル探索番号の最大値は2である。そして、プロセスCのシグナルハンドラテーブルのシグナルの値0と組みとなるシグナルハンドラの開始アドレスを参照する。シグナルの値0はシグナルハンドラフック関数1126の先頭アドレスが組みとして記憶されているため、デフォルトシグナルハンドラテーブルCでシグナルの値0と組みとなるシグナルハンドラCs0に変更する。そして、シグナル探索番号に1をプラスする。シグナル探索番号は1となったため、プロセスCのシグナルハンドラテーブルのシグナルの値1と組みとなるシグナルハンドラの開始アドレスを参照する。シグナルの値1にはシグナルハンドラの開始アドレスが設定されていないため、シグナル探索番号に1をプラスする。シグナル探索番号は2となったため、プロセスCのシグナルハンドラテーブルのシグナルの値2と組みとなるシグナルハンドラの開始アドレスを参照する。シグナルの値2にはシグナルハンドラが設定されていないため、シグナル探索番号に1をプラスする。シグナル探索番号は3となり、シグナル探索番号の最大値より大きくなったため、シグナルハンドラ記憶手段1104のプロセスCの識別子1とデフォルトシグナルハンドラテーブルCの組みからなるデータを削除し、システムコール2の処理を終了する。
次に、本発明の第4の実施例を、図27、図28、図29を参照して説明する。かかる実施例は本発明の第4の実施の形態に対応するものである。
本実施例では、プログラム制御により動作するコンピュータ上で、OS1110とプロセスD1、D2とが動作する。
OS1110は、本実施例ではシグナルとして、シグナル0(シグナルの値0)と、シグナル1(シグナルの値1)と、シグナル2(シグナルの値2)を管理し、各プロセスのシグナルハンドラテーブルにはこれらシグナル発生時に実行するシグナルハンドラの開始アドレスがシグナルの値と組みで記憶されており、シグナルが発生した際に、シグナル送信先プロセスのシグナルハンドラテーブルを参照し、シグナルの値と組みとなるシグナルハンドラの開始アドレスを取得し、そのシグナルハンドラを開始する。また、OS1110の下では、シグナルハンドラテーブルは複数のプロセス(スレッド)間で共有することができる。さらに、OS1110は、セキュアOSの機能を備えプロセス毎にセキュリティレベルが設定可能であり、本実施例では“Low”(非特権レベル)と“High”(特権レベル)にセキュリティレベルを設定可能であり、“Low”となっているプロセスの属性値は1、“High”となっているプロセスの属性値は3と設定され、セキュリティレベル“Low”に設定されたプロセスは特権システムコールの実行が制限され、セキュリティレベル“High”に設定されたプロセスは特権システムコールの実行に制限はない。このようなOSには、例えばSE
Linuxがあるが、他の種類のOSであってもかまわない。
さらに、OS1110は、シグナルハンドラ変更手段4003と、シグナルハンドラ復帰手段4004と、シグナルハンドラ取得手段4005と、セキュリティレベル変更手段1114と、セキュリティレベル復帰手段1115と、シグナルハンドラ記憶手段4002と、セキュリティレベル記憶手段1105とが配置され、さらに、第1の特定の命令としてシグナルハンドラ変更手段4003を呼び出すシステムコール1、第2の特定の命令としてシグナルハンドラ復帰手段4004を呼び出すシステムコール2、第3の特定の命令としてシグナルハンドラ取得手段4005を呼び出すシステムコール3、第4の特定の命令としてセキュリティレベル復帰手段1115を呼び出すシステムコール4を備える。セキュリティレベル変更手段1114は、プロセスの属性値を1(セキュリティレベル“Low”)に変更する機能を有する。
プロセスD1とプロセスD2は、同じプログラムのスレッドであり、シグナルハンドラテーブルを共有する。プロセスD1とプロセスD2は、関数1125と、シグナルハンドラフック関数1126と、シグナルハンドラDs0と、シグナルハンドラDs1と、シグナルハンドラDs2とを含む。関数1125は、自関数で行われる処理のうち予め定められた特定の処理を実行する部分の実行前にシグナルハンドラフック関数1126の開始アドレスを引数とするシステムコール1が実行され、自関数で行われる処理のうち前記特定の処理を実行する部分の実行後にシグナルハンドラフック関数1126の開始アドレスを引数とするシステムコール2が実行されるようになっている。また、関数1125のシステムコール2の直前には、シグナル1のシグナルハンドラとしてシグナルハンドラDs1を設定する命令が配置されている。シグナルハンドラフック関数1126は、関数の先頭部分に受信したシグナルの値を引数として実行するシステムコール3が配置され、関数の終了部分にシステムコール4が配置される。また、システムコール3の直後には、システムコール3によって取得するシグナルハンドラの開始アドレスを基に、そのシグナルハンドラを実行する命令が配置されている。シグナルハンドラDs0はシグナル0がプロセスD1またはプロセスD2に送信された際に実行されるシグナルハンドラである。プロセスD1とプロセスD2では、シグナル1とシグナル2に対するシグナルハンドラは設定されていない。プロセスD1およびプロセスD2のシグナルハンドラテーブルを図28の状態1に示す。また、プロセスD1の識別子は1、プロセスD2の識別子は2、プロセスD1とプロセスD2の属性値は3(セキュリティレベル“High”)である。
今、プロセスD1とプロセスD2が図30に示すような動きをしている状況を想定して、本実施例の動作を説明する。
まず、プロセスD1が関数1125を呼び出し、その関数に配置されたシステムコール1をシグナルハンドラフック関数1126の開始アドレスを引数として実行すると、シグナルハンドラ変更手段4003が呼び出される。
シグナルハンドラ変更手段4003は、プロセスD1がシグナルハンドラテーブルをプロセスD2と共有しているため、プロセスD2の識別子2がシグナルハンドラ記憶手段4002のプロセス識別子群に記憶されているかを判断する。今の例では、シグナルハンドラ記憶手段4002に識別子2を含むプロセス識別子群が記憶されていないため、プロセスD1の識別子1をプロセス識別子群とし、プロセスD1のシグナルハンドラテーブルと組みにして記憶する。シグナルハンドラ記憶手段4002に記憶したシグナルハンドラテーブルをデフォルトシグナルハンドラテーブルDと呼ぶ。この時点のデフォルトシグナルハンドラテーブルDは図29の状態1である。
次にシグナルハンドラ変更手段4003は、シグナル探索番号を初期値0に設定する。ここでOSは、シグナルの値0〜2のシグナルを管理しているため、シグナル探索番号の最大値は2である。そして、プロセスD1のシグナルハンドラテーブルのシグナルの値0と組みとなるシグナルハンドラの開始アドレスを参照する。シグナルの値0はシグナルハンドラDs0の先頭アドレスが組みとして記憶されているため、シグナルハンドラフック関数1126の開始アドレスに変更する。そして、シグナル探索番号に1をプラスする。シグナル探索番号は1となったため、プロセスD1のシグナルハンドラテーブルのシグナルの値1と組みとなるシグナルハンドラの開始アドレスを参照する。シグナルの値1にはシグナルハンドラの開始アドレスが設定されていないため、シグナル探索番号に1をプラスする。シグナル探索番号は2となったため、プロセスD1のシグナルハンドラテーブルのシグナルの値2と組みとなるシグナルハンドラの開始アドレスを参照する。シグナルの値2にはシグナルハンドラが設定されていないため、シグナル探索番号に1をプラスする。シグナル探索番号は3となり、シグナル探索番号の最大値より大きくなったため、システムコール1の処理を終了する。この時のプロセスD1およびプロセスD2で共有されるシグナルハンドラテーブルの状態を図28の状態2に示す。
プロセスD1でのシステムコール1の実行が終了した後、プロセスD2が、シグナル2のシグナルハンドラとしてシグナルハンドラDs2を登録し(図28の状態3)、関数1125を呼び出したとする。なお、この時、プロセスD1において関数1125内のシステムコール2は未だ実行されていない。プロセスD2は、関数に配置されたシステムコール1をシグナルハンドラフック関数1126の開始アドレスを引数として実行する。システムコール1が実行されると、シグナルハンドラ変更手段4003が呼び出される。
シグナルハンドラ変更手段4003は、プロセスD2がシグナルハンドラテーブルをプロセスD1と共有しているため、プロセスD1の識別子1がシグナルハンドラ記憶手段4002のプロセス識別子群に記憶されているかを判断する。シグナルハンドラ記憶手段4002には、識別子1を記憶しているプロセス識別子群があるため、そのプロセス識別子群にプロセスD2の識別子2を追加する。次に、そのプロセス識別子群と組みとなるデフォルトシグナルハンドラテーブルDを参照する。次に、シグナルハンドラ変更手段4003は、シグナル探索番号を初期値0に設定する。ここでOSは、シグナルの値0〜2のシグナルを管理しているため、シグナル探索番号の最大値は2である。そして、プロセスD2のシグナルハンドラテーブルのシグナルの値0と組みとなるシグナルハンドラの開始アドレスを参照する。シグナルの値0はシグナルハンドラフック関数1126の先頭アドレスが設定されているため、シグナル探索番号に1をプラスする。シグナル探索番号は1となったため、プロセスD2のシグナルハンドラテーブルのシグナルの値1と組みとなるシグナルハンドラの開始アドレスを参照する。シグナルの値1にはシグナルハンドラの開始アドレスが設定されていないため、シグナル探索番号に1をプラスする。シグナル探索番号は2となったため、プロセスD2のシグナルハンドラテーブルのシグナルの値2と組みとなるシグナルハンドラの開始アドレスを参照する。シグナルの値2には、シグナルハンドラDs2の先頭アドレスが記憶されているため、シグナルハンドラDs2をデフォルトシグナルハンドラDのシグナルの値2の組みとして記憶する。そして、プロセスD2のシグナルハンドラテーブルのシグナルの値2の組みは、シグナルハンドラフック関数1126の先頭アドレスに変更する。そして、シグナル探索番号に1をプラスする。シグナル探索番号は3となり、シグナル探索番号の最大値より大きくなったため、システムコール1の処理を終了する。
この時のプロセスD1およびプロセスD2で共有されるシグナルハンドラテーブルを図28の状態4に示す。またデフォルトシグナルハンドラテーブルDの内容を図29の状態2に示す。
ここで、プロセスD1がシグナル2を受信したとする。プロセスD1のシグナル2のシグナルハンドラにはシグナルハンドラフック関数1126が設定されているため、関数1125の実行が中断され、シグナルハンドラフック関数1126が実行される。そして、シグナルハンドラフック関数1126では、受信したシグナル2のシグナルの値2を引数としてシステムコール3を実行する。システムコール3が実行されると、シグナルハンドラ取得手段4005が呼び出される。
シグナルハンドラ取得手段4005は、シグナルハンドラ記憶手段4002から、プロセスD1の識別子1を記憶しているプロセス識別子群と組みとなるデフォルトシグナルハンドラテーブルDを参照し、シグナルの値2と組みとなるシグナルハンドラDs2の開始アドレスを取得する。そして、セキュリティレベル変更手段1114を呼び出し、セキュリティレベル変更完了信号を受信するまで待つ。
セキュリティレベル変更手段1114は、セキュリティレベル記憶手段1105に、プロセスD1の識別子1と属性値3を組みとして記憶させる。そして、プロセスD1の属性値を1に変更し、シグナルハンドラ取得手段4005にセキュリティレベル変更完了信号を送信する。
シグナルハンドラ取得手段4005は、セキュリティレベル変更完了信号を受信すると、シグナルハンドラ記憶手段4002より取得したシグナルハンドラDs2の開始アドレスをシグナルハンドラフック関数1126に渡し、システムコール3の処理を終了する。
シグナルハンドラフック関数1126は、システムコール3を通じて取得したシグナルハンドラDs2の開始アドレスを基に、シグナルハンドラDs2を呼び出す。そして、シグナルハンドラDs2の実行が終わると、シグナルハンドラフック関数1126はシステムコール4を実行する。システムコール4が実行されると、セキュリティレベル復帰手段1115が呼び出される。
セキュリティレベル復帰手段1115は、セキュリティレベル記憶手段1105を参照し、プロセスD1の識別子1と組みとなる属性値3を取得する。次に、セキュリティレベル記憶手段1105に記憶されているプロセスD1の識別子1と属性値3の組みからなるデータを削除する。次に、プロセスD1の属性値を3に変更し、システムコール4の処理を終了する。システムコール4の処理が終了すると、シグナルハンドラフック関数1126の処理は終了となる。シグナルハンドラフック関数1126の処理が終了すると、プロセスD1の関数1125の処理が再開される。
プロセスD1が関数1125の処理を再開し、その関数内に配置された、シグナル1のシグナルハンドラとしてシグナルハンドラDs1を設定する命令を実行した後(シグナルハンドラテーブルは図28の状態5になる)、システムコール2をシグナルハンドラフック関数1126の先頭アドレスを引数として実行したとする。なおこの時、プロセスD2の関数1125においてシステムコール2は未だ実行されていない。システムコール2が実行されると、シグナルハンドラ復帰手段4004が呼び出される。
シグナルハンドラ復帰手段4004は、プロセスD1の識別子1を含むプロセス識別子群を、シグナルハンドラ記憶手段4002から参照する。今の場合、そのプロセス識別子群に識別子1以外に識別子2が存在している。次にシステムハンドラ復帰手段4004は、そのプロセス識別子群と組みとなるデフォルトシグナルハンドラテーブルDを参照し、シグナル探索番号を初期値0に設定する。ここでOSは、シグナルの値0〜2のシグナルを管理しているため、シグナル探索番号の最大値は2である。そして、プロセスD1のシグナルハンドラテーブルのシグナルの値0と組みとなるシグナルハンドラの開始アドレスを参照する。シグナルの値0はシグナルハンドラフック関数1126の先頭アドレスが設定されているため、シグナル探索番号に1をプラスする。シグナル探索番号は1となったため、プロセスD1のシグナルハンドラテーブルのシグナルの値1と組みとなるシグナルハンドラの開始アドレスを参照する。シグナルの値1にはシグナルハンドラDs1の開始アドレスが設定されているため、シグナルハンドラDs1をデフォルトシグナルハンドラDのシグナルの値1の組みとして記憶する。そして、シグナル探索番号に1をプラスする。シグナル探索番号は2となったため、プロセスD1のシグナルハンドラテーブルのシグナルの値2と組みとなるシグナルハンドラの開始アドレスを参照する。シグナルの値2には、シグナルハンドラフック関数1126の先頭アドレスが記憶されているため、シグナル探索番号に1をプラスする。シグナル探索番号は3となり、シグナル探索番号の最大値より大きくなったため、シグナルハンドラ記憶手段4002のプロセスD1の識別子を含むプロセス識別子群より、識別子1を削除し、システムコール2の処理を終了する。この時のプロセスD1およびプロセスD2で共有されるシグナルハンドラテーブルを図28の状態6に示す。またデフォルトシグナルハンドラテーブルDの内容を図29の状態3に示す。
次に、プロセスD2が関数1125の処理を再開し、その関数内に配置された、シグナル1のシグナルハンドラとしてシグナルハンドラDs1を設定する命令を実行した後(シグナルハンドラテーブルは図28の状態5になる)、システムコール2をシグナルハンドラフック関数1126の先頭アドレスを引数として実行したとする。システムコール2が実行されると、シグナルハンドラ復帰手段4004が呼び出される。
シグナルハンドラ復帰手段4004は、シグナルハンドラ記憶手段4002を参照し、プロセスD1の識別子1を含むプロセス識別子群を、シグナルハンドラ記憶手段4002から参照する。今の場合、そのプロセス識別子群に識別子2以外に識別子は存在しない。システムハンドラ復帰手段4004は、プロセスD2の識別子2を含むプロセス識別子群と組みとなるデフォルトシグナルハンドラテーブルDを取得する。次に、シグナルハンドラ変更手段4003は、シグナル探索番号を初期値0に設定する。ここでOSは、シグナルの値0〜2のシグナルを管理しているため、シグナル探索番号の最大値は2である。プロセスD2のシグナルハンドラテーブルのシグナルの値0と組みとなるシグナルハンドラの開始アドレスを参照する。シグナルの値0はシグナルハンドラフック関数1126の先頭アドレスが組みとして記憶されているため、デフォルトシグナルハンドラテーブルDでシグナルの値0と組みとなるシグナルハンドラDs0に変更する。そして、シグナル探索番号に1をプラスする。シグナル探索番号は1となったため、プロセスD2のシグナルハンドラテーブルのシグナルの値1と組みとなるシグナルハンドラの開始アドレスを参照する。シグナルの値1にはシグナルハンドラDs1の開始アドレスが設定されているため、シグナル探索番号に1をプラスする。シグナル探索番号は2となったため、プロセスD2のシグナルハンドラテーブルのシグナルの値2と組みとなるシグナルハンドラの開始アドレスを参照する。シグナルの値2はシグナルハンドラフック関数1126の先頭アドレスが組みとして記憶されているため、デフォルトシグナルハンドラテーブルDでシグナルの値2と組みとなるシグナルハンドラDs2に変更する。そして、シグナル探索番号に1をプラスする。シグナル探索番号は3となり、シグナル探索番号の最大値より大きくなったため、シグナルハンドラ記憶手段4002のプロセスD2の識別子2を記憶しているプロセス識別子群とデフォルトシグナルハンドラテーブルDの組みからなるデータを削除し、システムコール2の処理を終了する。
なお、プロセスD1がシステムコール2を実行した時点からプロセスD2がシステムコール2を実行する時点までの区間に、シグナル2がプロセスD1で受信された場合、本実施例では、プロセスD1の属性値が非特権レベルに変更されて、システムハンドラDs2が実行される。また、前述した第4の実施の形態の変形例のように、セキュリティレベル変更手段1114が、プロセスD1の識別子が、シグナルハンドラ記憶手段4002中の何れかのプロセス識別子群に含まれているか否かを調べ、含まれている場合に限ってプロセスD1の属性値を変更し、含まれていなければ属性値を変更しない実施例では、プロセスD1がシステムコール2を実行した時点からプロセスD2がシステムコール2を実行する時点までの区間に、シグナル2がプロセスD1で受信された場合、プロセスD1の属性値が特権レベルのままシステムハンドラDs2が実行される。
本発明の実施の形態にあっては、プロセスが第1の特定の命令及び第2の特定の命令を含む関数を呼び出すと、その関数で処理を保証したい処理区間前に、第1の特定の命令が実行され、内部割込みが発生する。この内部割込みにかかわる処理において、シグナルハンドラ変更手段により、プロセスのシグナルハンドラテーブルがプロセスの識別子と組みにしてシグナルハンドラ記憶手段に記憶(退避)される。引き続き、シグナルハンドラ変更手段は、プロセスのシグナルハンドラテーブルを参照し、プロセスのシグナルハンドラテーブルに設定されているシグナルハンドラをシグナルハンドラフック関数に変更する。そして、第1の特定の命令を実行した関数を処理中に、シグナルハンドラフック関数を設定した種別のシグナルが発生すると、シグナルハンドラフック関数が呼び出される。シグナルハンドラフック関数では、第3の特定の命令が実行され、内部割込みが発生する。この内部割込みにかかわる処理において、シグナルハンドラ取得手段により、シグナルハンドラ記憶手段に記憶されているプロセスの識別子と組みとなるシグナルハンドラテーブルが参照され、参照したシグナルハンドラテーブルより、プロセスが受信したシグナルの種別と組みとなるシグナルハンドラが取得される。引き続き、シグナルハンドラ取得手段は、セキュリティレベル変更手段を呼び出す。セキュリティレベル変更手段では、プロセスの属性値を変更し、プロセスのセキュリティレベルを特権命令が実行できないように変更する。プロセスのセキュリティレベルが変更されると、シグナルハンドラ取得手段は、シグナルハンドラ記憶手段より取得したシグナルハンドラをシグナルハンドラフック関数に返す。シグナルハンドラフック関数では、取得したシグナルハンドラを実行する。このシグナルハンドラ内で特権命令を実行すると内部割り込みが発生し、特権命令実行制御手段によってプロセスの属性値に応じて特権命令の実行可否が判断される。ここでプロセスの属性値はセキュリティレベル変更手段によって変更されているため、特権命令は実行されず、エラーとなる。その後、シグナルハンドラの処理が終了すると、シグナルハンドラフック関数では、第4の特定の命令が実行され、内部割込みが発生する。この内部割込みにかかわる処理において、セキュリティレベル復帰手段によってプロセスの属性値が変更され、プロセスのセキュリティレベルがセキュリティレベル変更手段によって変更される前の状態に戻される。そして、シグナルハンドラフック関数の処理が終了し、再び第1の特定の命令及び第2の特定の命令を含む関数の処理が続行され、第2の特定の命令が実行され、内部割込みが発生する。この内部割込みにかかわる処理において、シグナルハンドラ復帰手段により、プロセスのシグナルハンドラテーブルが参照される。そして、シグナルハンドラテーブルに設定されているシグナルハンドラがシグナルハンドラフック関数であった場合、シグナルハンドラ記憶手段を参照し、プロセスの識別子と組みとなるシグナルハンドラテーブルからシグナルハンドラを取得し、プロセスのシグナルハンドラをシグナルハンドラフック関数に設定される以前のシグナルハンドラに変更する。これにより、目的を達成することができる。
以上好ましい実施の形態(及び実施例)を参照して本願発明を説明したが、本願発明は上記実施の形態(及び実施例)に限定されるものでない。本願発明の構成や詳細には、本願発明のスコープ内で当業者が理解し得る様々な変更をすることができる。
この出願は、2007年2月22日に出願された日本出願特願2007−041711を基礎とする優先権を主張し、その開示の全てをここに取り込む。
本発明によれば、信頼性が不明なシグナルハンドラの処理を含むプロセスを情報処理装置で安全に実行するといった用途に適用できる。ここで、情報処理装置はパーソナルコンピュータのようなものから、携帯電話やPDA等の移動体通信端末等の組み込みコンピュータ、ゲーム機器、及び多機能複写機等に至るまで適用できる。

Claims (20)

  1. OSの制御の下にプロセスを実行する情報処理装置であって、
    シグナルハンドラの不測の処理によって正常な実行を妨げられる可能性のある処理区間の実行前に第1の特定の命令を実行し且つ前記処理区間の実行後に第2の特定の命令を実行する関数、第3の特定の命令を実行し且つ第3の特定の命令によって取得したアドレスから始まるシグナルハンドラを実行し且つ該シグナルハンドラの実行後に第4の特定の命令を実行するシグナルハンドラフック関数、前記シグナルハンドラ、プロセスの属性値、プロセスのシグナルハンドラテーブル、プロセスの属性値とシグナルハンドラテーブルとの組を退避するためのシグナルハンドラ記憶手段を保持する記憶装置を備え、
    前記プロセスが前記第1の特定の命令を実行した際、前記プロセスの識別子と前記シグナルハンドラテーブルとの組を前記シグナルハンドラ記憶手段に退避し、前記プロセスの前記シグナルハンドラテーブルに設定されている前記シグナルハンドラを前記シグナルハンドラフック関数に変更するシグナルハンドラ変更手段と、
    前記プロセスが前記第2の特定の命令を実行した際、前記プロセスの前記シグナルハンドラテーブルに設定されている前記シグナルハンドラフック関数を、前記シグナルハンドラ記憶手段に退避されている前記シグナルハンドラフック関数設定前の前記シグナルハンドラに戻すシグナルハンドラ復帰手段と、
    前記プロセスが前記第3の特定の命令を実行した際、前記シグナルハンドラ記憶手段を参照し、前記プロセスの識別子及び前記プロセスが受信したシグナルの種別と組みとなるシグナルハンドラを取得するシグナルハンドラ取得手段と、
    前記シグナルハンドラ取得手段によるシグナルハンドラの取得後、前記プロセスの前記属性値を変更するセキュリティレベル変更手段と、
    前記プロセスが前記第4の特定の命令を実行した際、前記プロセスの前記属性値を変更前の属性値に変更するセキュリティレベル復帰手段とを備えたことを特徴とする情報処理装置。
  2. OSの制御の下にプロセスを実行する情報処理装置であって、
    シグナルハンドラの不測の処理によって正常な実行を妨げられる可能性のある処理区間の実行前に第1の特定の命令を実行し且つ前記処理区間の実行後に第2の特定の命令を実行する関数、第3の特定の命令を実行し且つ第3の特定の命令によって取得したアドレスから始まるシグナルハンドラを実行し且つ該シグナルハンドラの実行後に第4の特定の命令を実行するシグナルハンドラフック関数、前記シグナルハンドラ、プロセスの属性値、複数のプロセスで共有されるシグナルハンドラテーブル、プロセスの識別子を含むプロセス識別子群とシグナルハンドラテーブルとの組を退避するためのシグナルハンドラ記憶手段を保持する記憶装置を備え、
    前記シグナルハンドラテーブルを共有する複数のプロセスのうちの特定のプロセスが前記第1の特定の命令を実行した際、他のプロセスの識別子を含むプロセス識別子群が前記シグナルハンドラ記憶手段に記憶されていなければ、前記特定のプロセスの識別子を含むプロセス識別子群と前記シグナルハンドラテーブルとの組を前記シグナルハンドラ記憶手段に退避した後、前記シグナルハンドラテーブルに設定されている前記シグナルハンドラを前記シグナルハンドラフック関数に変更し、前記他のプロセスの識別子を含むプロセス識別子群が前記シグナルハンドラ記憶手段に記憶されていれば、前記特定のプロセスの識別子を前記他のプロセスの識別子を含むプロセス識別子群に追加するとともに、前記シグナルハンドラテーブルに設定されている前記シグナルハンドラを前記追加したプロセス識別子群と組となる前記シグナルハンドラ記憶手段中のシグナルハンドラテーブルに追加した後、前記シグナルハンドラテーブルに設定されている前記シグナルハンドラを前記シグナルハンドラフック関数に変更するシグナルハンドラ変更手段と、
    前記特定のプロセスが前記第2の特定の命令を実行した際、前記他のプロセスの識別子を含むプロセス識別子群が前記シグナルハンドラ記憶手段に記憶されていなければ、前記特定のプロセスの前記シグナルハンドラテーブルにおいて前記シグナルハンドラフック関数が設定されているシグナルハンドラを、前記シグナルハンドラ記憶手段に退避されている前記シグナルハンドラフック関数設定前の前記シグナルハンドラに戻した後、前記シグナルハンドラ記憶手段から前記特定のプロセスの識別子を含むプロセス識別子群と前記シグナルハンドラテーブルとの組のデータを削除し、前記他のプロセスの識別子を含むプロセス識別子群が前記シグナルハンドラ記憶手段に記憶されていれば、前記特定のプロセスの前記シグナルハンドラテーブルに設定されている前記シグナルハンドラを前記プロセス識別子群と組となる前記シグナルハンドラ記憶手段中のシグナルハンドラテーブルに追加し、前記プロセス識別子群から前記特定のプロセスの識別子を削除するシグナルハンドラ復帰手段と、
    前記プロセスが前記第3の特定の命令を実行した際、前記シグナルハンドラ記憶手段を参照し、前記プロセスの識別子及び前記プロセスが受信したシグナルの種別と組みとなるシグナルハンドラを取得するシグナルハンドラ取得手段と、
    前記シグナルハンドラ取得手段によるシグナルハンドラの取得後に、前記プロセスの前記属性値を変更するセキュリティレベル変更手段と、
    前記プロセスが前記第4の特定の命令を実行した際、前記プロセスの前記属性値を変更前の属性値に変更するセキュリティレベル復帰手段とを備えたことを特徴とする情報処理装置。
  3. 前記セキュリティレベル変更手段は、属性値の変更対象となる前記プロセスの識別子が前記シグナルハンドラ記憶手段のプロセス識別子群に含まれている場合に限って、前記プロセスの前記属性値を変更することを特徴とする請求項2記載の情報処理装置。
  4. 前記セキュリティレベル復帰手段は、属性値の復帰対象となる前記プロセスの識別子が前記シグナルハンドラ記憶手段のプロセス識別子群に含まれている場合に限って、前記プロセスの前記属性値を変更することを特徴とする請求項3記載の情報処理装置。
  5. 前記属性値が、前記プロセスのセキュリティレベルを示す属性値であることを特徴とする請求項1から4の何れか1項に記載の情報処理装置。
  6. 前記属性値が、前記プロセスのセキュリティレベルを示す属性値であり、且つ
    前記プロセスのセキュリティレベルによる権限チェックを行い、特権命令を実行する権限があるときは特権命令を実行する特権命令実行制御手段を有することを特徴とする請求項1または2記載の情報処理装置。
  7. 前記属性値を変更するルールを保持するセキュリティレベル変更規則記憶手段を備え、
    前記セキュリティレベル変更手段は前記セキュリティレベル変更規則記憶手段に記憶されたルールに基づいて前記属性値を変更することを特徴とする請求項1から6の何れか1項に記載の情報処理装置。
  8. 前記セキュリティレベル変更規則記憶手段には、前記属性値の変更前の属性値と変更後の属性値との組みが記憶され、
    前記セキュリティレベル変更手段は、前記プロセスの前記属性値を、前記セキュリティレベル変更規則記憶手段に記憶されている前記プロセスの前記属性値と等しい値の変更前の属性値と組みとなる変更後の属性値に変更することを特徴とする請求項7に記載の情報処理装置。
  9. 前記セキュリティレベル変更規則記憶手段には、シグナルの値と前記属性値との組が記憶され、
    前記セキュリティレベル変更手段は、前記プロセスの前記属性値を、前記セキュリティレベル変更規則記憶手段に記憶されている前記プロセスが受信したシグナルの値と組みとなる属性値に変更することを特徴とする請求項7に記載の情報処理装置。
  10. 情報処理装置にて、OSの制御の下にプロセスを実行する情報処理方法であって、
    シグナルハンドラの不測の処理によって正常な実行を妨げられる可能性のある処理区間の実行前に第1の特定の命令を実行し且つ前記処理区間の実行直後に第2の特定の命令を実行する関数、第3の特定の命令を実行し且つ第3の特定の命令によって取得したアドレスから始まるシグナルハンドラを実行し且つ該シグナルハンドラの実行後に第4の特定の命令を実行するシグナルハンドラフック関数、前記シグナルハンドラ、プロセスの属性値、プロセスのシグナルハンドラテーブル、プロセスの属性値とシグナルハンドラテーブルとの組を退避するためのシグナルハンドラ記憶手段を記憶装置に保持し、
    前記プロセスが前記第1の特定の命令を実行した際、前記プロセスの識別子と前記シグナルハンドラテーブルとの組を前記シグナルハンドラ記憶手段に退避し、前記プロセスの前記シグナルハンドラテーブルに設定されている前記シグナルハンドラを前記シグナルハンドラフック関数に変更するシグナルハンドラ変更ステップと、
    前記プロセスの実行中に受信したシグナルに対応するシグナルハンドラを前記シグナルハンドラテーブルを参照して決定し、該決定したシグナルハンドラが前記シグナルハンドラフック関数である場合、前記シグナルハンドラフック関数を呼び出すシグナル処理ステップと、
    前記プロセスが前記シグナルハンドラフック関数の前記第3の特定の命令を実行した際、前記シグナルハンドラ記憶手段を参照し、前記プロセスの識別子及び前記プロセスが受信したシグナルの種別と組みとなるシグナルハンドラを取得するシグナルハンドラ取得ステップと、
    前記シグナルハンドラ取得ステップによるシグナルハンドラの取得後に、前記プロセスの前記属性値を変更するセキュリティレベル変更ステップと、
    前記プロセスが前記シグナルハンドラ取得ステップで取得したシグナルハンドラを前記シグナルハンドラフック関数において実行した後に前記第4の特定の命令を実行したときに、前記プロセスの前記属性値を変更前の属性値に変更するセキュリティレベル復帰ステップと、
    前記プロセスが前記関数の前記第2の特定の命令を実行したときに、前記プロセスの前記シグナルハンドラテーブルに設定されている前記シグナルハンドラフック関数を、前記シグナルハンドラ記憶手段に退避されている前記シグナルハンドラフック関数設定前の前記シグナルハンドラに戻すシグナルハンドラ復帰ステップとを含むことを特徴とする情報処理方法。
  11. 情報処理装置にて、OSの制御の下にプロセスを実行する情報処理方法であって、
    シグナルハンドラの不測の処理によって正常な実行を妨げられる可能性のある処理区間の実行前に第1の特定の命令を実行し且つ前記処理区間の実行直後に第2の特定の命令を実行する関数、第3の特定の命令を実行し且つ第3の特定の命令によって取得したアドレスから始まるシグナルハンドラを実行し且つ該シグナルハンドラの実行後に第4の特定の命令を実行するシグナルハンドラフック関数、前記シグナルハンドラ、プロセスの属性値、複数のプロセスで共有されるシグナルハンドラテーブル、プロセスの識別子を含むプロセス識別子群とシグナルハンドラテーブルとの組を退避するためのシグナルハンドラ記憶手段を記憶装置に保持し、
    前記シグナルハンドラテーブルを共有する複数のプロセスのうちの特定のプロセスが前記第1の特定の命令を実行した際、他のプロセスの識別子を含むプロセス識別子群が前記シグナルハンドラ記憶手段に記憶されていなければ、前記特定のプロセスの識別子を含むプロセス識別子群と前記シグナルハンドラテーブルとの組を前記シグナルハンドラ記憶手段に退避した後、前記シグナルハンドラテーブルに設定されている前記シグナルハンドラを前記シグナルハンドラフック関数に変更し、前記他のプロセスの識別子を含むプロセス識別子群が前記シグナルハンドラ記憶手段に記憶されていれば、前記特定のプロセスの識別子を前記他のプロセスの識別子を含むプロセス識別子群に追加するとともに、前記シグナルハンドラテーブルに設定されている前記シグナルハンドラを前記追加したプロセス識別子群と組となる前記シグナルハンドラ記憶手段中のシグナルハンドラテーブルに追加した後、前記シグナルハンドラテーブルに設定されている前記シグナルハンドラを前記シグナルハンドラフック関数に変更するシグナルハンドラ変更ステップと、
    前記プロセスの実行中に受信したシグナルに対応するシグナルハンドラを前記シグナルハンドラテーブルを参照して決定し、該決定したシグナルハンドラが前記シグナルハンドラフック関数である場合、前記シグナルハンドラフック関数を呼び出すシグナル処理ステップと、
    前記プロセスが前記シグナルハンドラフック関数の前記第3の特定の命令を実行した際、前記シグナルハンドラ記憶手段を参照し、前記プロセスの識別子及び前記プロセスが受信したシグナルの種別と組みとなるシグナルハンドラを取得するシグナルハンドラ取得ステップと、
    前記シグナルハンドラ取得ステップによるシグナルハンドラの取得後に、前記プロセスの前記属性値を変更するセキュリティレベル変更ステップと、
    前記特定のプロセスが前記第2の特定の命令を実行した際、前記他のプロセスの識別子を含むプロセス識別子群が前記シグナルハンドラ記憶手段に記憶されていなければ、前記第1のプロセスの前記シグナルハンドラテーブルにおいて前記シグナルハンドラフック関数が設定されているシグナルハンドラを、前記シグナルハンドラ記憶手段に退避されている前記シグナルハンドラフック関数設定前の前記シグナルハンドラに戻した後、前記シグナルハンドラ記憶手段から前記第1のプロセスの識別子を含むプロセス識別子群と前記シグナルハンドラテーブルとの組のデータを削除し、前記第2のプロセスの識別子を含むプロセス識別子群が前記シグナルハンドラ記憶手段に記憶されていれば、前記特定のプロセスの前記シグナルハンドラテーブルに設定されている前記シグナルハンドラを前記プロセス識別子群と組となる前記シグナルハンドラ記憶手段中のシグナルハンドラテーブルに追加し、前記プロセス識別子群から前記特定のプロセスの識別子を削除するシグナルハンドラ復帰ステップとを含むことを特徴とする情報処理方法。
  12. 前記セキュリティレベル変更ステップにおいて、属性値の変更対象となる前記プロセスの識別子が前記シグナルハンドラ記憶手段のプロセス識別子群に含まれている場合に限って、前記プロセスの前記属性値を変更することを特徴とする請求項11記載の情報処理方法。
  13. 前記セキュリティレベル復帰ステップにおいて、属性値の復帰対象となる前記プロセスの識別子が前記シグナルハンドラ記憶手段のプロセス識別子群に含まれている場合に限って、前記プロセスの前記属性値を変更することを特徴とする請求項12記載の情報処理方法。
  14. 前記属性値が、前記プロセスのセキュリティレベルを示す属性値であることを特徴とする請求項10から13の何れか1項に記載の情報処理方法。
  15. 前記属性値が、前記プロセスのセキュリティレベルを示す属性値であり、且つ
    前記プロセスのセキュリティレベルによる権限チェックを行い、特権命令を実行する権限があるときは特権命令を実行する特権命令実行制御ステップを有することを特徴とする請求項10または請求項11記載の情報処理方法。
  16. 前記属性値を変更するルールを保持するセキュリティレベル変更規則記憶手段を備え、
    前記セキュリティレベル変更ステップにおいて、前記セキュリティレベル変更規則記憶手段に記憶されたルールに基づいて前記属性値を変更することを特徴とする請求項10から請求項15の何れか1項に記載の情報処理方法。
  17. 前記セキュリティレベル変更規則記憶手段には、前記属性値の変更前の属性値と変更後の属性値との組みが記憶され、
    前記セキュリティレベル変更ステップにおいて、前記プロセスの前記属性値を、前記セキュリティレベル変更規則記憶手段に記憶されている前記プロセスの前記属性値と等しい値の変更前の属性値と組みとなる変更後の属性値に変更することを特徴とする請求項16に記載の情報処理方法。
  18. 前記セキュリティレベル変更規則記憶手段には、シグナルの値と前記属性値との組が記憶され、
    前記セキュリティレベル変更ステップにおいて、前記プロセスの前記属性値を、前記セキュリティレベル変更規則記憶手段に記憶されている前記プロセスが受信したシグナルの値と組みとなる属性値に変更することを特徴とする請求項16に記載の情報処理方法。
  19. シグナルハンドラの不測の処理によって正常な実行を妨げられる可能性のある処理区間の実行前に第1の特定の命令を実行し且つ前記処理区間の実行直後に第2の特定の命令を実行する関数、第3の特定の命令を実行し且つ第3の特定の命令によって取得したアドレスから始まるシグナルハンドラを実行し且つ該シグナルハンドラの実行後に第4の特定の命令を実行するシグナルハンドラフック関数、前記シグナルハンドラ、プロセスの属性値、プロセスのシグナルハンドラテーブル、プロセスの属性値とシグナルハンドラテーブルとの組を退避するためのシグナルハンドラ記憶手段を保持する記憶装置を備え、OSの制御の下にプロセスを実行する情報処理装置に、
    前記プロセスが前記第1の特定の命令を実行した際、前記プロセスの識別子と前記シグナルハンドラテーブルとの組を前記シグナルハンドラ記憶手段に退避し、前記プロセスの前記シグナルハンドラテーブルに設定されている前記シグナルハンドラを前記シグナルハンドラフック関数に変更するシグナルハンドラ変更処理と、
    前記プロセスが前記第2の特定の命令を実行した際、前記プロセスの前記シグナルハンドラテーブルに設定されている前記シグナルハンドラフック関数を、前記シグナルハンドラ記憶手段に退避されている前記シグナルハンドラフック関数設定前の前記シグナルハンドラに戻すシグナルハンドラ復帰処理と、
    前記プロセスが前記第3の特定の命令を実行した際、前記シグナルハンドラ記憶手段を参照し、前記プロセスの識別子及び前記プロセスが受信したシグナルの種別と組みとなるシグナルハンドラを取得するシグナルハンドラ取得処理と、
    前記シグナルハンドラ取得処理によるシグナルハンドラの取得後、前記プロセスの前記属性値を変更するセキュリティレベル変更処理と、
    前記プロセスが前記第4の特定の命令を実行した際、前記プロセスの前記属性値を変更前の属性値に変更するセキュリティレベル復帰処理を実行させるプログラム。
  20. シグナルハンドラの不測の処理によって正常な実行を妨げられる可能性のある処理区間の実行前に第1の特定の命令を実行し且つ前記処理区間の実行直後に第2の特定の命令を実行する関数、第3の特定の命令を実行し且つ第3の特定の命令によって取得したアドレスから始まるシグナルハンドラを実行し且つ該シグナルハンドラの実行後に第4の特定の命令を実行するシグナルハンドラフック関数、前記シグナルハンドラ、プロセスの属性値、複数のプロセスで共有されるシグナルハンドラテーブル、プロセスの識別子を含むプロセス識別子群とシグナルハンドラテーブルとの組を退避するためのシグナルハンドラ記憶手段を保持する記憶装置を備え、OSの制御の下にプロセスを実行する情報処理装置に、
    前記シグナルハンドラテーブルを共有する複数のプロセスのうちの特定のプロセスが前記第1の特定の命令を実行した際、他のプロセスの識別子を含むプロセス識別子群が前記シグナルハンドラ記憶手段に記憶されていなければ、前記特定のプロセスの識別子を含むプロセス識別子群と前記シグナルハンドラテーブルとの組を前記シグナルハンドラ記憶手段に退避した後、前記シグナルハンドラテーブルに設定されている前記シグナルハンドラを前記シグナルハンドラフック関数に変更し、前記他のプロセスの識別子を含むプロセス識別子群が前記シグナルハンドラ記憶手段に記憶されていれば、前記特定のプロセスの識別子を前記他のプロセスの識別子を含むプロセス識別子群に追加するとともに、前記シグナルハンドラテーブルに設定されている前記シグナルハンドラを前記追加したプロセス識別子群と組となる前記シグナルハンドラ記憶手段中のシグナルハンドラテーブルに追加した後、前記シグナルハンドラテーブルに設定されている前記シグナルハンドラを前記シグナルハンドラフック関数に変更するシグナルハンドラ変更処理と、
    前記特定のプロセスが前記第2の特定の命令を実行した際、前記他のプロセスの識別子を含むプロセス識別子群が前記シグナルハンドラ記憶手段に記憶されていなければ、前記特定のプロセスの前記シグナルハンドラテーブルにおいて前記シグナルハンドラフック関数が設定されているシグナルハンドラを、前記シグナルハンドラ記憶手段に退避されている前記シグナルハンドラフック関数設定前の前記シグナルハンドラに戻した後、前記シグナルハンドラ記憶手段から前記特定のプロセスの識別子を含むプロセス識別子群と前記シグナルハンドラテーブルとの組のデータを削除し、前記他のプロセスの識別子を含むプロセス識別子群が前記シグナルハンドラ記憶手段に記憶されていれば、前記特定のプロセスの前記シグナルハンドラテーブルに設定されている前記シグナルハンドラを前記プロセス識別子群と組となる前記シグナルハンドラ記憶手段中のシグナルハンドラテーブルに追加し、前記プロセス識別子群から前記特定のプロセスの識別子を削除するシグナルハンドラ復帰処理と、
    前記プロセスが前記第3の特定の命令を実行した際、前記シグナルハンドラ記憶手段を参照し、前記プロセスの識別子及び前記プロセスが受信したシグナルの種別と組みとなるシグナルハンドラを取得するシグナルハンドラ取得処理と、
    前記シグナルハンドラ取得処理によるシグナルハンドラの取得後に、前記プロセスの前記属性値を変更するセキュリティレベル変更処理と、
    前記プロセスが前記第4の特定の命令を実行した際、前記プロセスの前記属性値を変更前の属性値に変更するセキュリティレベル復帰処理を実行させるプログラム。
JP2009503951A 2007-02-22 2008-02-22 情報処理装置、情報処理方法およびプログラム Expired - Fee Related JP5067723B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2009503951A JP5067723B2 (ja) 2007-02-22 2008-02-22 情報処理装置、情報処理方法およびプログラム

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
JP2007041711 2007-02-22
JP2007041711 2007-02-22
PCT/JP2008/053070 WO2008111382A1 (ja) 2007-02-22 2008-02-22 情報処理装置、情報処理方法およびプログラム
JP2009503951A JP5067723B2 (ja) 2007-02-22 2008-02-22 情報処理装置、情報処理方法およびプログラム

Publications (2)

Publication Number Publication Date
JPWO2008111382A1 true JPWO2008111382A1 (ja) 2010-06-24
JP5067723B2 JP5067723B2 (ja) 2012-11-07

Family

ID=39759324

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2009503951A Expired - Fee Related JP5067723B2 (ja) 2007-02-22 2008-02-22 情報処理装置、情報処理方法およびプログラム

Country Status (4)

Country Link
US (1) US20100325733A1 (ja)
JP (1) JP5067723B2 (ja)
CN (1) CN101617322B (ja)
WO (1) WO2008111382A1 (ja)

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101873640B (zh) * 2010-05-27 2013-04-24 华为终端有限公司 流量处理方法、装置和移动终端
US8429744B1 (en) * 2010-12-15 2013-04-23 Symantec Corporation Systems and methods for detecting malformed arguments in a function by hooking a generic object
DE102011005209B4 (de) 2011-03-07 2016-06-23 Infineon Technologies Ag Programmanweisungsgesteuerte Instruktionsflusskontrolle
US8844032B2 (en) * 2012-03-02 2014-09-23 Sri International Method and system for application-based policy monitoring and enforcement on a mobile device
EP2869145B1 (de) 2013-10-29 2016-04-27 dSPACE digital signal processing and control engineering GmbH Verfahren zur Beeinflussung eines Steuerprogramms eines Steuergerätes

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO1999023538A1 (en) * 1997-10-28 1999-05-14 Georgia Tech Research Corporation Adaptive data security system and method
IL132916A (en) * 1999-11-14 2004-02-08 Mcafee Inc Method and system for intercepting an application program interface
JP2004094837A (ja) * 2002-09-04 2004-03-25 Hitachi Ltd 状態遷移制御方法
US8656161B2 (en) * 2004-11-30 2014-02-18 Nec Corporation Information sharing system, information sharing method, group management program and compartment management program
GB2447154B (en) * 2005-10-04 2009-05-27 Nec Corp Information processing device, information processing method, and program
US7962911B2 (en) * 2007-02-02 2011-06-14 International Business Machines Corporation Method and apparatus for preventing undesired termination of a process in an information handling system

Also Published As

Publication number Publication date
CN101617322B (zh) 2013-01-02
US20100325733A1 (en) 2010-12-23
CN101617322A (zh) 2009-12-30
JP5067723B2 (ja) 2012-11-07
WO2008111382A1 (ja) 2008-09-18

Similar Documents

Publication Publication Date Title
US9201693B2 (en) Quota-based resource management
CN107704314B (zh) 用于迁移虚拟机的方法和装置
EP2443553B1 (en) Annotating virtual application processes
US10846124B2 (en) Communication method, apparatus and system for virtual machine and host machine
JP5067723B2 (ja) 情報処理装置、情報処理方法およびプログラム
US9189300B2 (en) Dynamic service discovery
CN107818023B (zh) 基于线程的消息处理方法、智能设备及存储介质
JP6026677B2 (ja) ソフトウェア・モジュールの並行動作
CN112256421A (zh) 通信处理方法、装置、存储介质及电子设备
CN108345496B (zh) 一种运行应用程序的方法及装置
JPH02153434A (ja) データ処理システム
JP4675891B2 (ja) タスクスケジューリング装置、タスクスケジューリング方法、タスクスケジューリングプログラム、記録媒体、及び伝送媒体
WO2019223095A1 (zh) 监控进程运行的方法、终端设备及计算机可读存储介质
CN106203087B (zh) 注入防护方法、系统、终端以及存储介质
JP2008537248A (ja) デジタルシグナルプロセッサ上でのマルチタスクの実施
JP2006331213A (ja) システムリソース管理装置、システムリソース管理方法及びプログラム
KR20110057297A (ko) 악성 봇 동적 분석 시스템 및 방법
US9418175B2 (en) Enumeration of a concurrent data structure
US9098356B2 (en) Hook re-entry prevention device and recording medium, in which program for executing method thereof in computer is recorded thereon
CN110989985A (zh) 基于Maven的依赖包的管理方法、装置、计算机设备及存储介质
CN116204336B (zh) 一种基于注册表回调机制的用户态核心态同步方法与系统
JP2009146206A (ja) マルチアプリケーション実行装置、マルチアプリケーション実行支援方法、およびプログラム
WO2022222809A1 (zh) 功能组件处理方法、介质、设备和操作系统
CN105893092B (zh) Com组件处理方法和装置
US20150047015A1 (en) Access control for hardware units

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20110114

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: 20120723

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20150824

Year of fee payment: 3

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20120805

LAPS Cancellation because of no payment of annual fees