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

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

▶ インターナショナル・ビジネス・マシーンズ・コーポレーションの特許一覧

特許7546602オペレーティング・システム・カーネルの分離されたアドレス空間におけるシステム・コールの実行
<>
  • 特許-オペレーティング・システム・カーネルの分離されたアドレス空間におけるシステム・コールの実行 図1
  • 特許-オペレーティング・システム・カーネルの分離されたアドレス空間におけるシステム・コールの実行 図2
  • 特許-オペレーティング・システム・カーネルの分離されたアドレス空間におけるシステム・コールの実行 図3
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-08-29
(45)【発行日】2024-09-06
(54)【発明の名称】オペレーティング・システム・カーネルの分離されたアドレス空間におけるシステム・コールの実行
(51)【国際特許分類】
   G06F 21/55 20130101AFI20240830BHJP
   G06F 12/14 20060101ALI20240830BHJP
【FI】
G06F21/55
G06F12/14 510D
【請求項の数】 15
(21)【出願番号】P 2021568575
(86)(22)【出願日】2020-05-15
(65)【公表番号】
(43)【公表日】2022-08-03
(86)【国際出願番号】 EP2020063618
(87)【国際公開番号】W WO2020234155
(87)【国際公開日】2020-11-26
【審査請求日】2022-10-21
(31)【優先権主張番号】16/416,229
(32)【優先日】2019-05-19
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】390009531
【氏名又は名称】インターナショナル・ビジネス・マシーンズ・コーポレーション
【氏名又は名称原語表記】INTERNATIONAL BUSINESS MACHINES CORPORATION
【住所又は居所原語表記】New Orchard Road, Armonk, New York 10504, United States of America
(74)【代理人】
【識別番号】100112690
【弁理士】
【氏名又は名称】太佐 種一
(72)【発明者】
【氏名】ラポポート、マイケル
(72)【発明者】
【氏名】ニーダー、ジョエル、ケリー
(72)【発明者】
【氏名】ボトムリー、ジェームス
【審査官】青木 重徳
(56)【参考文献】
【文献】米国特許出願公開第2013/0024646(US,A1)
【文献】中国特許出願公開第101315608(CN,A)
【文献】小田 逸郎,Linuxカーネル2.6解読室 第10回 プロセス空間の管理,UNIX USER,日本,ソフトバンクパブリッシング株式会社,2005年03月01日,第14巻,第3号,pp.117-132
【文献】末安 泰三,マンスリーレポート [Android Watch] SElinuxによる保護の有効化などAndroid 4.4 のセキュリティ強化点,日経コミュニケーション,日本,日経BP社,2013年12月01日,第599号,pp. 48-49
【文献】Daniel Gruss et al.,KASLR is Dead: Long Live KASLR,LNCS, ESSoS 2017: Engineering Secure Software and Systems,2017年06月24日,Vol. 10379,pp. 161-176
(58)【調査した分野】(Int.Cl.,DB名)
G06F 21/55
G06F 12/14
JSTPlus/JMEDPlus/JST7580(JDreamIII)
IEEE Xplore
THE ACM DIGITAL LIBRARY
(57)【特許請求の範囲】
【請求項1】
コンピュータが実行する方法であって、
テンプレート・システム・コール・ページ・テーブルを作成することであって、
システム・コールの実行時にカーネル・モードへのエントリを実行するために必要なカーネル・コードおよびカーネル・データと、システム・コール・ハンドラへのポインタを有するテーブルと、各システム・コール・ハンドラのエントリ・コードとのマッピングと、
カーネル・エントリ・ページ・テーブルと、
空のユーザ空間ページ・テーブルと、を含む、
前記テンプレート・システム・コール・ページ・テーブルを作成することと、
ユーザ空間プロセスが作成されることに応答して、前記テンプレート・システム・コール・ページ・テーブルをプロセス状態表現にコピーして、前記ユーザ空間プロセスについてのオペレーション・システム・コール・ページ・テーブルを生成し、前記オペレーション・システム・コール・ページ・テーブルの前記空のユーザ空間ページ・テーブルに、ユーザ空間マッピングを入力することと、
前記ユーザ空間プロセスによって前記システム・コールを実行することと、
前記カーネル・モードに移行し、汎用システム・コール・エントリ・ルーチンを呼び出すことであって、前記汎用システム・コール・エントリ・ルーチンは、前記オペレーション・システム・コール・ページ・テーブルを使用するため、および前記オペレーション・システム・コール・ページ・テーブルの前記システム・コール・ハンドラを実行するために、ページ・テーブル・ポインタ・レジスタを切り替える、呼び出すことと、
前記システム・コール・ハンドラがカーネル空間の前記カーネル・コードまたは前記カーネル・データあるいはその両方を含むメモリへのアクセスを試行することに応答して、ページ・フォールトを発生させることと、
前記メモリへの前記アクセスが許可されているかどうかを判定することと、
前記アクセスが許可されているという判定に応答して、前記メモリのマッピングを前記オペレーション・システム・コール・ページ・テーブルに追加することと、
前記システム・コール・ハンドラの実行が終了することに応答して、制御を汎用システム・コール・エントリ・ルーチンに戻すことと、
を含む、方法。
【請求項2】
前記コンピュータのオペレーティング・システムがLinuxオペレーティング・システムである、請求項1に記載の方法。
【請求項3】
前記オペレーション・システム・コール・ページ・テーブルが、カーネル・コードの実行およびカーネル・データへのアクセスを許可する複数のカーネル空間アドレス範囲を含む、請求項1または2に記載の方法。
【請求項4】
前記アクセスが許可されていないと判定されたことに応答して前記カーネル空間の前記メモリへのアクセスを試行した前記システム・コールを行った前記ユーザ空間プロセスの実行を終了することをさらに含む、請求項1から請求項3のいずれか一項に記載の方法。
【請求項5】
前記システム・コール・ハンドラの実行が終了することに応答して、前記システム・コール・ハンドラの実行中に前記オペレーション・システム・コール・ページ・テーブルに追加された前記マッピングを除去することをさらに含む、請求項1から請求項4のいずれか一項に記載の方法。
【請求項6】
プロセッサと、前記プロセッサによってアクセス可能なメモリと、前記メモリに格納されたコンピュータ・プログラム命令とを含むシステムであって、
前記コンピュータ・プログラム命令が、
テンプレート・システム・コール・ページ・テーブルを作成することであって、
システム・コールの実行時にカーネル・モードへのエントリを実行するために必要なカーネル・コードおよびカーネル・データと、システム・コール・ハンドラへのポインタを有するテーブルと、各システム・コール・ハンドラのエントリ・コードとのマッピングと、
カーネル・エントリ・ページ・テーブルと、
空のユーザ空間ページ・テーブルと、を含む、
前記テンプレート・システム・コール・ページ・テーブルを作成することと、
ユーザ空間プロセスが作成されることに応答して、前記テンプレート・システム・コール・ページ・テーブルをプロセス状態表現にコピーして、前記ユーザ空間プロセスについてのオペレーション・システム・コール・ページ・テーブルを生成し、前記オペレーション・システム・コール・ページ・テーブルの前記空のユーザ空間ページ・テーブルに、ユーザ空間マッピングを入力することと、
前記ユーザ空間プロセスによって前記システム・コールを実行することと、
前記カーネル・モードに移行し、汎用システム・コール・エントリ・ルーチンを呼び出すことであって、前記汎用システム・コール・エントリ・ルーチンは、前記オペレーション・システム・コール・ページ・テーブルを使用するため、および前記オペレーション・システム・コール・ページ・テーブルの前記システム・コール・ハンドラを実行するために、ページ・テーブル・ポインタ・レジスタを切り替える、呼び出すことと、
前記システム・コール・ハンドラがカーネル空間の前記カーネル・コードまたは前記カーネル・データあるいはその両方を含むメモリへのアクセスを試行することに応答して、ページ・フォールトを発生させることと、
前記メモリへの前記アクセスが許可されているかどうかを判定することと、
前記アクセスが許可されているという判定に応答して、前記メモリのマッピングを前記オペレーション・システム・コール・ページ・テーブルに追加することと、
前記システム・コール・ハンドラの実行が終了することに応答して、制御を汎用システム・コール・エントリ・ルーチンに戻すことと、
を実行するように、前記プロセッサによって実行可能である、システム。
【請求項7】
前記システムのオペレーティング・システムがLinuxオペレーティング・システムである、請求項に記載のシステム。
【請求項8】
前記オペレーション・システム・コール・ページ・テーブルが、カーネル・コードの実行およびカーネル・データへのアクセスを許可する複数のカーネル空間アドレス範囲を含む、請求項または請求項7に記載のシステム。
【請求項9】
前記コンピュータ・プログラム命令が前記アクセスが許可されていないと判定されたことに応答して前記カーネル空間の前記メモリへのアクセスを試行した前記システム・コールを行った前記ユーザ空間プロセスの実行を終了することをさらに実行するように、前記プロセッサによって実行可能である、請求項6から請求項8のいずれか一項に記載のシステム。
【請求項10】
前記コンピュータ・プログラム命令が、前記システム・コール・ハンドラの実行が終了することに応答して、前記システム・コール・ハンドラの実行中に前記オペレーション・システム・コール・ページ・テーブルに追加された前記マッピングを除去することをさらに実行するように、前記プロセッサによって実行可能である、請求項6から請求項9のいずれか一項に記載のシステム。
【請求項11】
テンプレート・システム・コール・ページ・テーブルを作成することであって、
システム・コールの実行時にカーネル・モードへのエントリを実行するために必要なカーネル・コードおよびカーネル・データと、システム・コール・ハンドラへのポインタを有するテーブルと、各システム・コール・ハンドラのエントリ・コードとのマッピングと、
カーネル・エントリ・ページ・テーブルと、
空のユーザ空間ページ・テーブルと、を含む、
前記テンプレート・システム・コール・ページ・テーブルを作成することと、
ユーザ空間プロセスが作成されることに応答して、前記テンプレート・システム・コール・ページ・テーブルをプロセス状態表現にコピーして、前記ユーザ空間プロセスについてのオペレーション・システム・コール・ページ・テーブルを生成し、前記オペレーション・システム・コール・ページ・テーブルの前記空のユーザ空間ページ・テーブルに、ユーザ空間マッピングを入力することと、
前記ユーザ空間プロセスによって前記システム・コールを実行することと、
前記カーネル・モードに移行し、汎用システム・コール・エントリ・ルーチンを呼び出すことであって、前記汎用システム・コール・エントリ・ルーチンは、前記オペレーション・システム・コール・ページ・テーブルを使用するため、および前記オペレーション・システム・コール・ページ・テーブルの前記システム・コール・ハンドラを実行するために、ページ・テーブル・ポインタ・レジスタを切り替える、呼び出すことと、
前記システム・コール・ハンドラがカーネル空間の前記カーネル・コードまたは前記カーネル・データあるいはその両方を含むメモリへのアクセスを試行することに応答して、ページ・フォールトを発生させることと、
前記メモリへの前記アクセスが許可されているかどうかを判定することと、
前記アクセスが許可されているという判定に応答して、前記メモリのマッピングを前記オペレーション・システム・コール・ページ・テーブルに追加することと、
前記システム・コール・ハンドラの実行が終了することに応答して、制御を汎用システム・コール・エントリ・ルーチンに戻すことと、
をコンピュータに実行させる、コンピュータ・プログラム。
【請求項12】
前記コンピュータのオペレーティング・システムがLinuxオペレーティング・システムである、請求項11に記載のコンピュータ・プログラム。
【請求項13】
前記オペレーション・システム・コール・ページ・テーブルが、カーネル・コードの実行およびカーネル・データへのアクセスを許可する複数のカーネル空間アドレス範囲を含む、請求項11または請求項12に記載のコンピュータ・プログラム。
【請求項14】
前記アクセスが許可されていないと判定されたことに応答して前記カーネル空間の前記メモリへのアクセスを試行した前記システム・コールを行った前記ユーザ空間プロセスの実行を終了することをさらにコンピュータに実行させる、請求項11から請求項13のいずれか一項に記載のコンピュータ・プログラム。
【請求項15】
前記システム・コール・ハンドラの実行が終了することに応答して、前記システム・コール・ハンドラの実行中に前記オペレーション・システム・コール・ページ・テーブルに追加された前記マッピングを除去することをさらにコンピュータに実行させる、請求項11から請求項14のいずれか一項に記載のコンピュータ・プログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、専用アドレス空間でシステム・コールを実行することにより、オペレーティング・システム・カーネル自体の内部に追加のセキュリティ機構を提供して、悪意のあるアプリケーションに可視であるためこのアプリケーションによって悪用可能な共有リソースの量を削減する技術に関する。
【背景技術】
【0002】
システム・コールは、ユーザ空間アプリケーションに公開される、Linuxなどのオペレーティング・システムのカーネル・アプリケーション・バイナリ・インタフェース(ABI)の重要な部分である。システム・コールが実行されると、CPUは非特権モード(x86のRing-3など)からスーパユーザ・モード(x86のRing-0など)に移行し、システム・コールの実行中に呼び出されるルーチンは、最高の特権レベルを有するため、システム・リソースにアクセスしてこれを変更することができる。悪意のあるユーザ空間アプリケーションは、システム・コール実装の脆弱性を悪用して、これらのシステム・リソースにアクセスし、システムをクラッシュさせ、機密情報を読み取り、またはスーパユーザ特権を得ることがある。
【0003】
マイクロカーネルは、スーパユーザ・モードで実行されるコードの量を最小限にし、分離されたアドレス空間でユーザ権限を用いてオペレーティング・システム・サービスのほとんどを実行することによって、特権状態の広範囲にわたる公開を回避する。マイクロカーネル手法の主な欠点は、プロセス間通信に関連するパフォーマンス・コストと、システムの様々なコンポーネント間のインタフェースの複雑さである。
【0004】
メルトダウンの脆弱性の軽減として、ユーザとカーネル・アドレス空間とを完全に分離するページ・テーブル分離(PTI)機構が、Linuxカーネルに追加された。しかしながら、PTIを使用しても、カーネル・コード全体が同一のアドレス空間を共有し、いずれかのシステム・コール・ハンドラにおける悪用によってシステム全体が脆弱になる。
【0005】
したがって、オペレーティング・システム・カーネル自体の内部に追加のセキュリティ機構を提供する技術に対する必要性が生じる。
【発明の概要】
【0006】
本システムおよび方法の実施形態は、専用アドレス空間でシステム・コールを実行することにより、オペレーティング・システム・カーネル自体の内部に追加のセキュリティ機構を提供して、悪意のあるアプリケーションに可視であるためこのアプリケーションによって悪用可能な共有リソースの量を削減することができる。
【0007】
実施形態において、ユーザ空間アプリケーションがシステム・コールを実行するときに、カーネル・エントリ・コードは、その特定のシステム・コールの実行に適したアドレス空間を選択することができる。システム・コールの実行が、そのアドレス空間の外部のメモリへのアクセスを試行すると、ページ・フォールトが発生する。ページ・フォールト・ハンドラは、要求されたメモリ範囲が、システム・コール・ハンドラ・ルーチンによってアクセス許可されているかどうかを検証し、アクセス許可されていれば、この範囲を専用アドレス空間に追加することができる。システム・コールの完了時に、アドレス空間定義を元の状態に戻すことができる。
【0008】
例えば、実施形態において、プロセッサと、プロセッサによってアクセス可能なメモリと、メモリに格納され、プロセッサによって実行可能なコンピュータ・プログラム命令とを含み得るコンピュータに実装された方法は、ユーザ・プロセスがシステム・コールを行うときに、カーネル・モードに切り替え、ユーザ・プロセスのためのシステム・コール・ページ・テーブルを使用してシステム・コール・ハンドラを実行することと、システム・コール・ハンドラが、マップされていないカーネル空間メモリへのアクセスを試行するときに、ページ・フォールトを発生させることと、マップされていないカーネル空間メモリに対して試行されたアクセスが許可されているかどうかを判定することによって、ページ・フォールトを処理することとを含むことができる。
【0009】
実施形態において、コンピュータ・システムのオペレーティング・システムはLinuxオペレーティング・システムであってよい。システム・コール・ページ・テーブルは、カーネル・コードの実行およびカーネル・データへのアクセスを許可する複数のカーネル空間アドレス範囲を含むことができる。システム・コール・ページ・テーブルは、システム・コールの実行時にカーネル・モードへのエントリを実行するために必要なカーネル・コードおよびデータ、システム・コール・ハンドラへのポインタを有するテーブル、ならびに各システム・コール・ハンドラのエントリ・コードのマッピングを含むテンプレート・システム・コール・ページ・テーブルを作成することと、ユーザ・プロセスが作成されたときに、ユーザ・プロセスのためのテンプレート・システム・コール・ページ・テーブルのコピーをプロセス状態表現で作成し、プロセスごとのエントリ・ページ・テーブルに元のテンプレートと共にユーザ空間マッピングを入力することと、ページ・フォールトが許可されると判定されたときに、カーネル空間メモリへのアクセスを試行したシステム・コール・ハンドラの実行を許可するカーネル空間アドレス範囲のマッピングを追加することとによって作成され得る。方法は、ページ・フォールトが許可されていないと判定されたときに、カーネル空間メモリへのアクセスを試行したシステム・コールを行ったユーザ・プロセスの実行を終了することをさらに含むことができる。方法は、システム・コール・ハンドラの実行が終了したときに、システム・コール・ハンドラの実行中に追加されたカーネル空間アドレス範囲のマッピングを除去することをさらに含むことができる。
【0010】
実施形態において、システムは、プロセッサと、プロセッサによってアクセス可能なメモリと、メモリに格納されたコンピュータ・プログラム命令とを含むことができ、コンピュータ・プログラム命令は、ユーザ・プロセスがシステム・コールを行うときに、カーネル・モードに切り替え、ユーザ・プロセスのためのシステム・コール・ページ・テーブルを使用してシステム・コール・ハンドラを実行することと、システム・コール・ハンドラが、マップされていないカーネル空間メモリへのアクセスを試行するときに、ページ・フォールトを発生させることと、マップされていないカーネル空間メモリに対して試行されたアクセスが許可されているかどうかを判定することによって、ページ・フォールトを処理することとを実行するように、プロセッサによって実行可能である。
【0011】
実施形態において、コンピュータ・プログラム製品は、プログラム命令が具現化された非一過性のコンピュータ可読記憶媒体を含むことができ、プログラム命令は、ユーザ・プロセスがシステム・コールを行うときに、カーネル・モードに切り替え、ユーザ・プロセスのためのシステム・コール・ページ・テーブルを使用してシステム・コール・ハンドラを実行することと、システム・コール・ハンドラが、マップされていないカーネル空間メモリへのアクセスを試行するときに、ページ・フォールトを発生させることと、マップされていないカーネル空間メモリに対して試行されたアクセスが許可されているかどうかを判定することによって、ページ・フォールトを処理することとを含み得る方法をコンピュータに実行させるように、コンピュータによって実行可能である。
【0012】
本発明の詳細は、その構造および動作の両方に関して、添付図面を参照することによって最もよく理解することができる。図中、同一の参照符号および名称は同一の要素を指す。
【図面の簡単な説明】
【0013】
図1】本システムおよび方法の実施形態によるシステム・メモリ空間の例示図である。
図2】本システムおよび方法の実施形態の動作のプロセスの例示的なフロー図である。
図3】本明細書に記載の実施形態に関与するプロセスが実装され得る、コンピュータ・システムの例示的なブロック図である。
【発明を実施するための形態】
【0014】
本システムおよび方法の実施形態は、専用アドレス空間でシステム・コールを実行することにより、オペレーティング・システム・カーネル自体の内部に追加のセキュリティ機構を提供して、悪意のあるアプリケーションに可視であるためこのアプリケーションによって悪用可能な共有リソースの量を削減することができる。単一のアドレス空間のみでコードを実行するLinuxカーネルなどの従来のモノリシック・オペレーティング・システム・カーネルは、セキュリティ強化のために複数のアドレス空間でコードを実行するように変更され得る。セキュリティを強化するために、追加の特性を使用することができる。例えば、システム・コール環境において、複数のアドレス空間のコードをカーネル(特権)モードで実行することができ、これを使用して、システム・コールを実行するエンティティがその許可されたアドレス空間の外部へのアクセスを試行した場合に、試行されたアクセスを検出して安全に処理できるようにすることを保証することができる。アドレス空間は、ユーザ・プロセスごとに作成することができ、ユーザ・プロセスに対するセキュリティ特性を強化するために使用することができる。
【0015】
実施形態において、ユーザ空間アプリケーションがシステム・コールを実行するときに、カーネル・エントリ・コードは、その特定のシステム・コールの実行に適したアドレス空間を選択することができる。システム・コールの実行が、そのアドレス空間の外部のメモリへのアクセスを試行すると、ページ・フォールトが発生する。ページ・フォールト・ハンドラは、要求されたメモリ範囲が、システム・コール・ハンドラ・ルーチンによってアクセス許可されているかどうかを検証し、アクセス許可されていれば、この範囲を専用アドレス空間に追加することができる。システム・コールの完了時に、アドレス空間定義を元の状態に戻すことができる。
【0016】
システム・メモリ空間100の例示図を図1に示す。この例は、カーネル・ページ・テーブル102、システム・コール・ページ・テーブル104、およびユーザ・ページ・テーブル106を示す。さらに、後述するテンプレート・システム・コール・ページ・テーブル126が存在し得る。この例では、カーネル・ページ・テーブル102は、特定のユーザ・プロセスに関連付けることができ、ユーザ空間エントリ108、カーネル・エントリ・ページ・テーブル110、およびカーネル空間エントリ112を含むことができる。ユーザ空間エントリ108は、システムがカーネル(特権)・モードで実行されているときに使用するユーザ空間アドレス・マッピングを含むことができる。カーネル空間エントリ112は、システムがカーネル(特権)・モードで実行されているときに使用するカーネル空間アドレス・マッピングを含むことができる。カーネル・エントリ・ページ・テーブル110は、非特権モードからカーネル(特権)・モードへの切替えを実行するために必要な構造をマップするCPUエントリ領域を含むことができる。ユーザ・ページ・テーブル106は特定のユーザ空間プロセスに関連付けることができ、ユーザ空間エントリ114は、ユーザ空間プロセスによって使用されるユーザ空間マッピングのみを含むことができる。カーネル・エントリ・ページ・テーブル116は、非特権モードからカーネル(特権)・モードへの切替えを実行するために必要な構造をマップするCPUエントリ領域を含むことができる。カーネル・エントリ・ページ・テーブル110、116、120を含むページ・テーブルをこのように分離させると、セキュリティの脆弱性を軽減することができる。
【0017】
ユーザ・プロセスは、通常、非特権モードで実行され、ユーザ空間エントリ114およびカーネル・エントリ・ページ・テーブル116のみを含むユーザ・ページ・テーブル106にアクセスできる。従来であれば、ユーザ・プロセスがシステム・コールを行うときに、システムは非特権モードからカーネル(特権)・モードに切り替え、プロセスは、ユーザ空間エントリ108、カーネル・エントリ・ページ・テーブル110、およびカーネル空間エントリ112を含むカーネル・ページ・テーブル全体にアクセスできるだろう。しかしながら、本システムおよび方法の実施形態においては、ユーザ・プロセスがシステム・コールを行うときに、システムは非特権モードからカーネル(特権)・モードに切り替えることができ、プロセスはシステム・コール・ページ・テーブル104にアクセスできる。システム・コール・ページ・テーブル104は、追加のシステム・コール(syscall)エントリ・ページ・テーブル122を用いてユーザ・プロセスの可視マッピングを拡大することができる。Syscallエントリ・ページ・テーブル122は、ユーザ・プロセスが、制限されたカーネル空間アドレス範囲にアクセスして、非特権モードからカーネル(特権)・モードへの切替え後に、コードの制限された追加部分またはデータへのアクセスを実行することを許可することができる。Syscallエントリ・ページ・テーブル122は、カーネル・コードおよびデータへの悪意のあるアクセスを防止するのに十分に制限されたコードの部分へのアクセスを提供し、しかもユーザ空間エントリ118からアクセス可能なコードよりも多くのコードへのアクセスを提供することができる。syscallエントリ・ページ・テーブル122を通じてコードにアクセスするとき、セキュリティ・コード・ブロック124は、行われるいずれのアクセスも安全であることを検証することができる。実施形態において、様々な検証のうちのいずれかをセキュリティ・コード・ブロック124によって行うことができる。例えば、実施形態において、セキュリティ・コード・ブロック124は、既知の記号のみに対してアクセスが行われることを検証することができる。
【0018】
本システムおよび方法の実施形態の動作200のプロセスの例示的なフロー図を図2に示す。図1と組み合わせると最適に見られる。プロセス200は202から始まり、Linuxカーネルの初期化中に、図3に示す追加のテンプレート・システム・コール・ページ・テーブル126を作成することができる。テンプレート・システム・コール・ページ・テーブル126を使用して、分離されたアドレス空間におけるシステム・コール・ハンドラの実行のために機能的なシステム・コール・ページ・テーブル104を作成することができる。テンプレート・システム・コール・ページ・テーブル126は、システム・コールの実行時にカーネル(特権)・モードへのエントリを実行するために必要なカーネル・コードおよびデータ、システム・コール・ハンドラへのポインタを有するテーブル、ならびにsyscallエントリ・ページ・テーブル122の各システム・コール・ハンドラのエントリ・コードのマッピング128を有することができる。さらに、テンプレート・システム・コール・ページ・テーブル126は、入力されたカーネル・エントリ・ページ・テーブル120と空のユーザ空間ページ・テーブル118とを有することができる。
【0019】
204において、プロセスが作成されると、テンプレート・システム・コール・ページ・テーブル126をプロセス状態表現にコピーして、オペレーション・システム・コール・ページ・テーブル104を形成することができる。入力されたカーネル・エントリ・ページ・テーブル120およびsyscallエントリ・ページ・テーブル122を含む元のテンプレートに加えて、プロセスごとのシステム・コール・ページ・テーブル104の空のユーザ空間ページ・テーブル118に、通常のプロセス・ページ・テーブルと同様の方法でユーザ空間マッピングを入力することができる。
【0020】
206において、ユーザ空間プロセスはシステム・コールを実行することができる。CPUはカーネル(特権)・モードに移行することができ、汎用システム・コール・エントリ・ルーチンを呼び出すことができる。このルーチンは、CPUページ・テーブル・ポインタ・レジスタを切り替えて、そのプロセスについてシステム・コール・ページ・テーブル104を使用することができ、特定のシステム・コール・ハンドラにジャンプすることができる。
【0021】
208において、システム・コール・ハンドラの実行中に、カーネル空間カーネル・コードまたはデータあるいはその両方へのアクセスが、ページ・フォールトを引き起こすことがある。セキュリティ・ブロック124のページ・フォールト・ハンドラは、要求されたメモリ・アクセスが安全であるかまたは許可されているかどうかを検証することができる。アクセスが安全であるまたは許可されているとわかった場合、要求されたメモリ範囲のマッピングをプロセスごとのシステム・コール・ページ・テーブル104に追加することができる。アクセスが安全でないと考えられるまたは許可されていない場合、ユーザ空間プロセスを終了させることができ、または他のセキュリティ動作を行うことができ、あるいはその両方を行うことができる。
【0022】
210において、システム・コール・ハンドラの実行が終了すると、制御を汎用システム・コール・エントリ・ルーチンに戻すことができる。このルーチンは、プロセスごとのシステム・コール・ページ・テーブル104をクリーン・アップし、システム・コール・ハンドラの実行中に追加されたマッピングを除去することができる。
【0023】
本明細書に記載の実施形態に関与するプロセスが実装され得る、コンピュータ・システム300の例示的なブロック図を図3に示す。コンピュータ・システム300は、埋込みプロセッサ、システム・オン・チップ、パーソナル・コンピュータ、ワークステーション、サーバ・システム、およびミニコンピュータまたはメインフレーム・コンピュータなどの1つまたは複数のプログラムされた汎用コンピュータ・システムを使用して、または分散ネットワーク・コンピューティング環境において実装され得る。コンピュータ・システム300は、1つまたは複数のプロセッサ(CPU)302A~302N、入出力回路304、ネットワーク・アダプタ306、およびメモリ308を含むことができる。CPU302A~302Nは、現在の通信システムおよび方法の機能を実行するためにプログラム命令を実行する。通常、CPU302A~302Nは、INTEL CORE(R)プロセッサなどの1つまたは複数のマイクロプロセッサである。図3は、コンピュータ・システム300が単一のマルチプロセッサ・コンピュータ・システムとして実装され、複数のプロセッサ302A~302Nが、メモリ308、入出力回路304、およびネットワーク・アダプタ306などのシステム・リソースを共有する実施形態を示す。しかしながら、本通信システムおよび方法はまた、コンピュータ・システム300が複数のネットワーク化コンピュータ・システムとして実装される実施形態を含み、これは、シングルプロセッサ・コンピュータ・システム、マルチプロセッサ・コンピュータ・システム、またはこれらの組合せであってよい。
【0024】
入出力回路304は、コンピュータ・システム300にデータを入力する、またはコンピュータ・システム300からデータを出力する機能を提供する。例えば、入出力回路として、キーボード、マウス、タッチパッド、トラックボール、スキャナ、アナログ・デジタル・コンバータなどの入力デバイス、ビデオ・アダプタ、モニタ、プリンタなどの出力デバイス、およびモデムなどの入出力デバイスが挙げられる。ネットワーク・アダプタ306は、デバイス300をネットワーク310とインタフェースする。ネットワーク310は、インターネットを含むがこれに限定されない任意の公衆または専用LANまたはWANであってよい。
【0025】
メモリ308は、コンピュータ・システム300の機能を実行するためにCPU302によって実行されるプログラム命令、およびCPU302によって使用され処理されるデータを格納する。メモリ308として、例えば、ランダム・アクセス・メモリ(RAM)、読取り専用メモリ(ROM)、プログラマブル読取り専用メモリ(PROM)、電気的に消去可能なプログラマブル読取り専用メモリ(EEPROM)、フラッシュ・メモリなどの電子メモリ・デバイス、および磁気ディスク・ドライブ、テープ・ドライブ、光ディスク・ドライブなどの電気機械メモリが挙げられ、これらは、インテグレーテッド・ドライブ・エレクトロニクス(IDE)・インタフェース、または拡張IDE(EIDE)もしくはウルトラダイレクト・メモリ・アクセス(UDMA)などのその変形もしくは拡張、またはスモール・コンピュータ・システム・インタフェース(SCSI)・ベースのインタフェース、またはファスト-SCSI、ワイド-SCSI、ファスト・アンド・ワイド-SCSIなどのその変形もしくは拡張、またはシリアル・アドバンスト・テクノロジ・アタッチメント(SATA)、またはその変形もしくは拡張、またはファイバ・チャネル・アービトレーテット・ループ(FC-AL)・インタフェースを使用することができる。
【0026】
メモリ308の内容は、コンピュータ・システム300が実行するようにプログラムされている機能に応じて変化し得る。図3に示す例において、前述したプロセスの実施形態についてのルーチンおよびデータを表す例示的なメモリ内容が示されている。しかしながら、これらのルーチンは、それらのルーチンに関連したメモリ内容と共に、1つのシステムまたはデバイスに含まれていなくてもよく、周知の工学的考慮事項に基づいて複数のシステムまたはデバイス間に分散させることができることを、当業者は認識するだろう。本通信システムおよび方法は、このような配置のすべてを含むことができる。
【0027】
図3に示す例において、メモリ308は、カーネル空間312、ユーザ空間314、セキュリティ・ブロック・ルーチン324、および他のオペレーティング・システム・ルーチン322を含むことができる。カーネル空間312は、昇格されたシステム状態に存在するコードおよびデータを含むことができ、保護されたメモリ空間およびハードウェアへのフルアクセスを含むことができる。カーネル空間312は、カーネル・ページ・テーブル316、システム・コール(syscall)ページ・テーブル318、およびテンプレート・システム・コール・ページ・テーブル320を含むことができる。カーネル・ページ・テーブル316は、図1に示し前述したように、特定のユーザ・プロセスに関連付けることができ、ユーザ空間ページ・テーブル108、カーネル・エントリ・ページ・テーブル110、およびカーネル空間ページ・テーブル112を含むことができる。システム・コール・ページ・テーブル318は、図1に示し前述したように、追加のsyscallエントリ・ページ・テーブル122を用いてユーザ・プロセスの可視マッピングを拡大することができる。テンプレート・システム・コール・ページ・テーブル320を使用して、前述したように、分離されたアドレス空間におけるシステム・コール・ハンドラの実行のために機能的なシステム・コール・ページ・テーブル104を作成することができる。ユーザ空間314は、ハードウェアおよびソフトウェアの利用可能なリソースのサブセットのみにアクセス可能な低い権限で実行され得る、ユーザ・アプリケーション、プログラム、タスク、プロセスなどを含むことができる。ユーザ空間314は、ユーザ空間の非特権アクセスにマップし得るユーザ・ページ・テーブル322を含むことができる。セキュリティ・ブロック・ルーチン324は、システム・コール・ページ・テーブル318を使用して行われたアクセスが安全であるまたは許可されていることを検証することができる。他のオペレーティング・システム・ルーチン322は、追加のシステム機能を提供することができる。
【0028】
図3に示すように、本通信システムおよび方法は、マルチプロセッサ、マルチタスク、マルチプロセス、またはマルチスレッド・コンピューティング、あるいはその組合せを提供する1つまたは複数のシステム上の実装と、シングル・プロセッサ、シングル・スレッド・コンピューティングのみを提供するシステム上の実装とを含むことができる。マルチプロセッサ・コンピューティングは、複数のプロセッサを使用してコンピューティングを実行することを伴う。マルチタスク・コンピューティングは、複数のオペレーティング・システム・タスクを使用してコンピューティングを実行することを伴う。タスクとは、オペレーティング・システムの概念であり、実行中のプログラムと、オペレーティング・システムによって使用されるブックキーピング情報との組合せを指す。プログラムが実行されるたびに、オペレーティング・システムはそのための新しいタスクを作成する。タスクは、プログラムのための封筒のようなものであり、プログラムをタスク番号で識別し、他のブックキーピング情報をプログラムに付加する。Linux(R)、UNIX(R)、OS/2(R)、およびWindows(R)を含む多くのオペレーティング・システムは、多くのタスクを同時に実行することができ、マルチタスク・オペレーティング・システムと呼ばれる。マルチタスクは、オペレーティング・システムが複数の実行可能ファイルを同時に実行する能力である。各実行可能ファイルは、それ自体のアドレス空間で実行され、すなわち、実行可能ファイルがそれらのメモリのいずれをも共有することはできないことを意味する。このことは、いかなるプログラムも、システム上で実行中の他のプログラムのうちのいずれかの実行に損害を与えることが不可能であるため、有利である。しかしながら、プログラムは、オペレーティング・システムを介して(またはファイル・システムに格納されているファイルを読み取ることによる)以外にいかなる情報も交換することができない。タスクとプロセスという用語はしばしば互換的に使用されるため、マルチプロセス・コンピューティングは、マルチタスク・コンピューティングと同様であるが、一部のオペレーティング・システムではこれら2つを区別する。
【0029】
本発明は、任意の可能な統合の技術的詳細レベルにおけるシステム、方法、またはコンピュータ・プログラム製品、あるいはその組合せであってよい。コンピュータ・プログラム製品は、プロセッサに本発明の態様を実行させるためのコンピュータ可読プログラム命令を有する1つ(または複数)のコンピュータ可読記憶媒体を含むことができる。コンピュータ可読記憶媒体は、命令実行デバイスによって使用されるように命令を保持し格納することができる有形のデバイスであってよい。
【0030】
コンピュータ可読記憶媒体は、例えば、電子ストレージ・デバイス、磁気ストレージ・デバイス、光学ストレージ・デバイス、電磁ストレージ・デバイス、半導体ストレージ・デバイス、またはこれらの任意の適切な組合せであってよいが、これらに限定されない。コンピュータ可読記憶媒体のより具体的な例の非網羅的なリストには、以下のもの、すなわち、携帯型コンピュータ・ディスケット、ハード・ディスク、ランダム・アクセス・メモリ(RAM)、読取り専用メモリ(ROM)、消去可能なプログラマブル読取り専用メモリ(EPROMもしくはフラッシュ・メモリ)、スタティック・ランダム・アクセス・メモリ(SRAM)、携帯型コンパクト・ディスク読取り専用メモリ(CD-ROM)、デジタル多用途ディスク(DVD)、メモリ・スティック、フロッピ(R)・ディスク、パンチカードもしくは命令が記録されている溝内の隆起構造などの機械的に符号化されたデバイス、およびこれらの任意の適切な組合せが含まれる。本明細書で使用されるコンピュータ可読記憶媒体は、電波もしくは他の自由に伝搬する電磁波、導波路もしくは他の伝送媒体を伝搬する電磁波(例えば光ファイバ・ケーブルを通過する光パルス)、または電線を介して伝送される電気信号などの、一過性の信号自体であると解釈されるべきではない。
【0031】
本明細書に記載のコンピュータ可読プログラム命令は、コンピュータ可読記憶媒体からそれぞれのコンピューティング/処理デバイスにダウンロードすることができ、または、ネットワーク、例えばインターネット、ローカル・エリア・ネットワーク、ワイド・エリア・ネットワーク、または無線ネットワーク、あるいはその組合せを介して外部コンピュータもしくは外部ストレージ・デバイスにダウンロードすることができる。ネットワークは、銅伝送ケーブル、光伝送ファイバ、無線伝送、ルータ、ファイアウォール、スイッチ、ゲートウェイ・コンピュータ、またはエッジ・サーバ、あるいはその組合せを含むことができる。各コンピューティング/処理デバイスにおけるネットワーク・アダプタ・カードまたはネットワーク・インタフェースが、ネットワークからコンピュータ可読プログラム命令を受信し、それらのコンピュータ可読プログラム命令を、それぞれのコンピューティング/処理デバイス内のコンピュータ可読記憶媒体に格納するために転送する。
【0032】
本発明の動作を実行するためのコンピュータ可読プログラム命令は、アセンブラ命令、命令セット・アーキテクチャ(ISA)命令、マシン命令、マシン依存命令、マイクロコード、ファームウェア命令、状態設定データ、集積回路の構成データ、あるいはSmalltalk(R)、C++などのオブジェクト指向プログラミング言語および「C」プログラミング言語もしくは同様のプログラミング言語などの手続き型プログラミング言語を含む、1つまたは複数のプログラミング言語の任意の組合せで書かれたソース・コードまたはオブジェクト・コードであってよい。コンピュータ可読プログラム命令は、全体的にユーザのコンピュータ上で、一部がユーザのコンピュータ上で、独立型ソフトウェア・パッケージとして、一部がユーザのコンピュータ上かつ一部がリモート・コンピュータ上で、または全体的にリモート・コンピュータもしくはサーバ上で実行することができる。後者のシナリオにおいて、リモート・コンピュータは、ローカル・エリア・ネットワーク(LAN)もしくはワイド・エリア・ネットワーク(WAN)を含む任意の種類のネットワークを介してユーザのコンピュータに接続することができ、または(例えば、インターネット・サービス・プロバイダを使用してインターネットを介して)外部コンピュータに接続することができる。一部の実施形態において、本発明の態様を実行するために、例えば、プログラマブル論理回路、フィールド・プログラマブル・ゲート・アレイ(FPGA)、またはプログラマブル・ロジック・アレイ(PLA)を含む電子回路が、コンピュータ可読プログラム命令の状態情報を利用して電子回路をパーソナライズすることにより、コンピュータ可読プログラム命令を実行することができる。
【0033】
本発明の実施形態による方法、装置(システム)、およびコンピュータ・プログラム製品のフローチャート図またはブロック図あるいはその両方を参照しながら、本発明の態様について本明細書で説明する。フローチャート図またはブロック図あるいはその両方の各ブロック、およびフローチャート図またはブロック図あるいはその両方におけるブロックの組合せは、コンピュータ可読プログラム命令によって実装できることが理解されよう。
【0034】
これらのコンピュータ可読プログラム命令は、コンピュータまたは他のプログラマブル・データ処理装置のプロセッサを介して実行される命令が、フローチャートまたはブロック図あるいはその両方の1つまたは複数のブロックに指定される機能/動作を実施する手段を作り出すべく、汎用コンピュータ、専用コンピュータ、または他のプログラマブル・データ処理装置のプロセッサに提供されてマシンを作り出すものであってよい。これらのコンピュータ可読プログラム命令は、命令が格納されたコンピュータ可読記憶媒体が、フローチャートまたはブロック図あるいはその両方の1つまたは複数のブロックに指定される機能/動作の態様を実施する命令を含んだ製品を含むべく、コンピュータ可読記憶媒体に格納されて、コンピュータ、プログラマブル・データ処理装置、または他のデバイス、あるいはその組合せに特定の方式で機能するように指示できるものであってもよい。
【0035】
コンピュータ可読プログラム命令は、コンピュータ、他のプログラマブル装置、または他のデバイスで実行される命令が、フローチャートまたはブロック図あるいはその両方の1つまたは複数のブロックに指定される機能/動作を実施するように、コンピュータによって実行されるプロセスを作り出すべく、コンピュータ、他のプログラマブル・データ処理装置、または他のデバイスにロードされ、コンピュータ、他のプログラマブル装置、または他のデバイス上で一連の動作ステップを実行させるものであってもよい。
【0036】
図中のフローチャートおよびブロック図は、本発明の様々な実施形態によるシステム、方法、およびコンピュータ・プログラム製品の可能な実装形態のアーキテクチャ、機能、および動作を示す。これに関して、フローチャートまたはブロック図の各ブロックは、指定された論理機能を実施するための1つまたは複数の実行可能命令を含む、命令のモジュール、セグメント、または部分を表すことができる。一部の代替実装形態において、ブロックに示す機能を、図示する順序以外で行うことができる。例えば、連続して示す2つのブロックを、実際には略同時に実行することができ、または、関与する機能に応じて、それらのブロックを時として逆の順序で実行することができる。また、ブロック図またはフローチャート図あるいはその両方の各ブロック、およびブロック図またはフローチャート図あるいはその両方におけるブロックの組合せは、指定された機能もしくは動作を実行する、または専用ハードウェア命令とコンピュータ命令との組合せを実行する専用ハードウェア・ベースのシステムによって実装することができることにも留意されたい。
【0037】
本発明の特定の実施形態について説明したが、説明した実施形態と均等な他の実施形態が存在することが当業者には理解されるだろう。したがって、本発明は特定の例示した実施形態によって限定されるものではなく、添付の特許請求の範囲によってのみ限定されるものであることを理解されたい。
図1
図2
図3