JP2020140689A - 計算機、オペレーティングシステム及び方法 - Google Patents

計算機、オペレーティングシステム及び方法 Download PDF

Info

Publication number
JP2020140689A
JP2020140689A JP2019150048A JP2019150048A JP2020140689A JP 2020140689 A JP2020140689 A JP 2020140689A JP 2019150048 A JP2019150048 A JP 2019150048A JP 2019150048 A JP2019150048 A JP 2019150048A JP 2020140689 A JP2020140689 A JP 2020140689A
Authority
JP
Japan
Prior art keywords
space
kernel
switching
secret
user
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.)
Pending
Application number
JP2019150048A
Other languages
English (en)
Inventor
弘樹 葛野
Hiroki Kuzuno
弘樹 葛野
利宏 山内
Toshihiro Yamauchi
利宏 山内
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.)
Secom Co Ltd
Original Assignee
Secom Co Ltd
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 Secom Co Ltd filed Critical Secom Co Ltd
Publication of JP2020140689A publication Critical patent/JP2020140689A/ja
Pending legal-status Critical Current

Links

Images

Landscapes

  • Storage Device Security (AREA)

Abstract

【課題】計算機のカーネル空間を改竄する攻撃に対するセキュリティ機構を提供する。【解決手段】設定手段20は、オペレーティングシステムの起動時にカーネル空間及びユーザ空間とは別の仮想記憶空間としてユーザ空間との切り替えが禁止される秘密空間を設ける処理を行うと共に、監視処理を記述した監視コード、及びカーネル空間の監視対象についての検証用データを秘密空間に記憶させる処理を行う。切替手段22は設定手段20による処理の後、所定のタイミングにて、カーネルが利用する仮想記憶空間をカーネル空間から秘密空間へ切り替える第一切替処理を行う。監視実行手段24は第一切替処理に伴い秘密空間にて監視コードを実行し、監視処理として、現時点の監視対象を検証用データと比較してカーネル空間の改竄を検出する処理と、当該改竄検出処理後に、カーネルが利用する仮想記憶空間を秘密空間からカーネル空間へ切り替える第二切替処理とを行う。【選択図】図1

Description

本発明は、カーネル空間とユーザ空間とを分離して設ける仮想記憶方式の計算機に関し、特にカーネル空間の改竄を検知する技術に関する。
近年、計算機のオペレーティングシステム(OS)の脆弱性を悪用した攻撃への対策が重要となっている。多くの攻撃では仮想記憶空間のうちOSのカーネルが管理する領域(以下、「カーネル空間」という)にルートキットを感染させる。ルートキットとは、計算機へ侵入した痕跡、攻撃プログラムの存在、及び自身の存在を隠蔽する機能などを持つ不正プログラムである。そのため、利用者は計算機にルートキットに感染したことに気付くことが困難であるため攻撃の検知が遅れ、計算機への被害が拡大する問題があった。
このような問題に対して、カーネル空間の改竄を検知するセキュリティ機構が提案されている(下記非特許文献1)。当該従来技術では、ルートキットに悪用される可能性の高いシステムコール(監視対象システムコール)の発行を監視し、監視対象システムコールの発行時におけるカーネル空間の情報と、ルートキット感染前のカーネル空間の情報とを比較することにより、カーネル空間の不正な改竄を検知する。
池上祐太、山内利宏、「カーネルスタックの比較によるカーネルレベルルートキット検知システム」、情報科学技術フォーラム講演論文集、第12巻、第4号、第1〜6頁、2013年8月
しかし、従来技術におけるセキュリティ機構では、カーネル空間の改竄を監視する監視コード自体もカーネル空間内に記憶されているため、当該セキュリティ機構自体をバイパス(回避)される危険性があった。
本発明は上記問題点を解決するためになされたものであり、カーネル空間の改竄を検知するセキュリティ機構であって、攻撃者によるバイパスが困難化されるものを提供することを目的とする。
(1)本発明に係る計算機は、カーネルモードで使用するカーネル空間とユーザモードで使用するユーザ空間とを分離して設ける仮想記憶方式の計算機であって、オペレーティングシステムの起動時に前記カーネル空間及び前記ユーザ空間とは別の仮想記憶空間として前記ユーザ空間との切り替えが禁止される秘密空間を設ける処理を行うと共に、監視処理を記述した監視コード、及び前記カーネル空間の監視対象についての検証用データを前記秘密空間に記憶させる処理を行う設定手段と、前記設定手段による処理の後、所定のタイミングにて、カーネルが利用する仮想記憶空間を前記カーネル空間から前記秘密空間へ切り替える第一切替処理を行う切替手段と、前記第一切替処理に伴い前記秘密空間にて前記監視コードを実行し、前記監視処理として、現時点の前記監視対象を前記検証用データと比較して前記カーネル空間の改竄を検出する改竄検出処理と、当該改竄検出処理の後に、カーネルが利用する仮想記憶空間を前記秘密空間から前記カーネル空間へ切り替える第二切替処理とを行う監視実行手段と、を有する。
(2)上記(1)に記載の計算機において、前記切替手段は、前記監視対象を変更するシステムコール又は当該システムコールによって呼び出される所定の関数の実行指示を検出した場合に前記第一切替処理を行う構成とすることができる。
(3)上記(2)に記載の計算機において、前記監視対象は、ロードされたカーネルモジュールのモジュール名リストであり、前記切替手段は、前記監視対象を変更するシステムコールが発行された後、前記カーネルモジュールをロードする際に用いられる初期化関数が呼ばれる前に前記第一切替処理を行う構成とすることができる。
(4)上記(1)から(3)に記載の計算機において、前記監視実行手段は、前回の前記改竄検出処理の実行後から所定期間経過している場合に前記改竄検出処理を実行する構成とすることができる。
(5)上記(1)から(4)に記載の計算機において、前記監視実行手段は、前記第一切替処理が所定回数行われるごとに前記改竄検出処理を実行する構成とすることができる。
(6)上記(1)から(5)に記載の計算機において、前記設定手段は、前記オペレーティングシステムの起動時に前記検証用データ及び前記監視コードを前記カーネル空間に記憶させ、前記秘密空間を当該カーネル空間の複製として生成する構成とすることができる。
(7)上記(1)から(6)に記載の計算機において、認証情報の入力に用いる入力手段と、前記切替手段により前記第一切替処理が行われた場合に、前記認証情報に基づいて前記監視対象の更新権限の有無を判定する権限判定手段と、を更に有し、前記設定手段は、前記オペレーティングシステムの起動後に、現時点の前記監視対象を前記検証用データと比較して改変が検出され、且つ、前記権限判定手段により前記更新権限が有ると判定された場合には、前記改変が検出された前記監視対象で前記秘密空間の前記検証用データを更新する構成とすることができる。
(8)上記(1)に記載の計算機において、前記設定手段は、前記カーネルモードで使用する空間として、前記カーネル空間及び前記秘密空間とは別に、前記ユーザ空間からの切り替え先として設定される位置に中継用空間をさらに設け、前記切替手段は、前記ユーザモードから前記カーネルモードへの遷移時に前記ユーザ空間から切り替えられた前記中継用空間において当該中継用空間から前記カーネル空間への切替処理を行い、また、前記第一切替処理では、一旦、前記カーネル空間から前記中継用空間へ切り替え、当該中継用空間において前記秘密空間への切替処理を行う構成とすることができる。
(9)上記(8)に記載の計算機において、前記設定手段は、ユーザプロセスごとに生成される前記ユーザ空間それぞれに対応して前記中継用空間及び前記カーネル空間を設ける一方、複数の前記ユーザプロセスに対して共通の前記秘密空間を設ける構成とすることができる。
(10)上記(8),(9)に記載の計算機において、前記切替手段は、前記カーネルモードから前記ユーザモードへの遷移を、前記中継用空間から前記ユーザ空間への切替処理により行う構成とすることができる。
(11)本発明に係るオペレーティングシステムは、カーネルモードで使用するカーネル空間とユーザモードで使用するユーザ空間とを分離して設ける仮想記憶方式の計算機に用いられるオペレーティングシステムであって、当該計算機を、当該オペレーティングシステムの起動時に前記カーネル空間及び前記ユーザ空間とは別の仮想記憶空間として前記ユーザ空間との切り替えが禁止される秘密空間を設ける処理を行うと共に、監視処理を記述した監視コード、及び前記カーネル空間の監視対象についての検証用データを前記秘密空間に記憶させる処理を行う設定手段、前記設定手段による処理の後、所定のタイミングにて、カーネルが利用する仮想記憶空間を前記カーネル空間から前記秘密空間へ切り替える第一切替処理を行う切替手段、及び、前記第一切替処理に伴って前記監視コードを実行し、前記監視処理として、現時点の前記監視対象を前記検証用データと比較して前記カーネル空間の改竄を検出する改竄検出処理と、当該改竄検出処理の後に、カーネルが利用する仮想記憶空間を前記秘密空間から前記カーネル空間へ切り替える第二切替処理とを行う監視実行手段、として機能させる。
(12)上記(11)に記載のオペレーティングシステムにおいて、前記設定手段は、前記カーネルモードで使用する空間として、前記カーネル空間及び前記秘密空間とは別に、前記ユーザ空間からの切り替え先として設定される位置に中継用空間をさらに設け、前記切替手段は、前記ユーザモードから前記カーネルモードへの遷移時に前記ユーザ空間から切り替えられた前記中継用空間において当該中継用空間から前記カーネル空間への切替処理を行い、また、前記第一切替処理では、一旦、前記カーネル空間から前記中継用空間へ切り替え、当該中継用空間において前記秘密空間への切替処理を行う構成とすることができる。
(13)本発明に係る方法は、カーネルモードで使用するカーネル空間とユーザモードで使用するユーザ空間とを分離して設ける仮想記憶方式の計算機を制御する方法であって、オペレーティングシステムの起動時に前記カーネル空間及び前記ユーザ空間とは別の仮想記憶空間として前記ユーザ空間との切り替えが禁止される秘密空間を設ける処理を行うと共に、監視処理を記述した監視コード、及び前記カーネル空間の監視対象についての検証用データを前記秘密空間に記憶させる処理を行う設定ステップと、前記設定ステップの後、所定のタイミングにて、カーネルが利用する仮想記憶空間を前記カーネル空間から前記秘密空間へ切り替える第一切替処理を行う切替ステップと、前記第一切替処理に伴って前記監視コードを実行し、前記監視処理として、現時点の前記監視対象を前記検証用データと比較して前記カーネル空間の改竄を検出する改竄検出処理と、当該改竄検出処理の後に、カーネルが利用する仮想記憶空間を前記秘密空間から前記カーネル空間へ切り替える第二切替処理とを行う監視実行ステップと、を有する。
(14)上記(13)に記載の方法において、前記設定ステップは、前記カーネルモードで使用する空間として、前記カーネル空間及び前記秘密空間とは別に、前記ユーザ空間からの切り替え先として設定される位置に中継用空間をさらに設け、前記切替ステップは、前記ユーザモードから前記カーネルモードへの遷移時に前記ユーザ空間から切り替えられた前記中継用空間において当該中継用空間から前記カーネル空間への切替処理を行うステップと、前記第一切替処理にて、一旦、前記カーネル空間から前記中継用空間へ切り替え、当該中継用空間において前記秘密空間への切替処理を行うステップと、を含む構成とすることができる。
本発明によれば、カーネル空間からのアクセスを制限した仮想記憶空間として秘密空間を設け、当該秘密空間からカーネル空間を監視するセキュリティ機構により、攻撃者によるセキュリティ機構のバイパスを困難化し、カーネル空間の改竄を好適に検知するセキュリティ機構が得られる。
本発明の実施形態に係る計算機の概略の構成図である。 仮想アドレスから物理アドレスへの変換を説明する模式図である。 本発明の第1の実施形態における仮想記憶空間のレイアウトを示す模式図である。 本発明の第1の実施形態に係る計算機において生成される仮想記憶空間について説明する模式図である。 カーネル空間及び秘密空間の構造を説明する模式図である。 本発明の第1の実施形態に係る計算機における秘密空間による監視の開始を説明する概略のフロー図である。 本発明の第1の実施形態に係る計算機における監視動作を説明する模式図である。 本発明の第1の実施形態に係る計算機における秘密空間による監視を説明する概略のフロー図である。 攻撃側の概略のシーケンス図である。 本発明の第1の実施形態に係る計算機における秘密空間を用いた監視シーケンスを示す図である。 本発明の第2の実施形態に係る計算機の概略の構成図である。 本発明の第2の実施形態に係る計算機において生成される仮想記憶空間について説明する模式図である。 本発明の第2の実施形態における仮想記憶空間の切替処理を説明する模式図である。 本発明の第2の実施形態における仮想記憶空間の切替処理の監視の対象領域を示す模式図である。 カーネル脆弱性を利用した仮想記憶空間の切替処理への攻撃の例と本発明の第2の実施形態における検出例を説明する模式図である。
[第1の実施形態]
以下、本発明の第1の実施の形態(以下実施形態という)である計算機2について、図面に基づいて説明する。
図1は、実施形態に係る計算機2の概略の構成図である。計算機2はいわゆるコンピュータであり、主装置4、入力装置6及び出力装置8を含んで構成される。例えば、計算機2はインターネットなどのコンピュータネットワークに接続され、他のコンピュータなどと通信可能とされる。
主装置4はCPU(Central Processing Unit)10、主記憶装置12、補助記憶装置14及びバス16などを含んで構成される。
CPU10はプログラムを実行して各種の機能を提供する装置であり、例えば、後述する本発明の設定手段20、切替手段22、監視実行手段24及び権限判定手段26として機能する。主記憶装置12はいわゆるメインメモリ、一次記憶装置であり、バス16を介してCPU10に接続される。主記憶装置12は例えば、RAM(Random Access Memory)などの半導体メモリからなる。補助記憶装置14は二次記憶装置であり、バス16を介してCPU10に接続される。補助記憶装置14は例えば、ハードディスク装置などで構成され、主記憶装置12より大きな記憶容量を有する。例えば、補助記憶装置14は、CPU10にて実行される各種プログラムやCPU10での処理にて使用されるデータを記憶する。
入力装置6は、キーボード、マウスなどであり、ユーザが主装置4への操作を行うために用いる。
出力装置8は、ディスプレイ、プリンタなどであり、主装置4による処理結果などを画面表示、印刷等によりユーザに示す等に用いられる。
計算機2は仮想記憶方式で動作する。本実施形態では、計算機2のOSをLinux(登録商標)、また、CPUアーキテクチャをx86_64とし、プロセスごとに仮想記憶空間を管理する多重仮想記憶方式を実装した例を説明する。
CPU10上での仮想記憶空間における仮想アドレスを物理メモリにおける物理アドレスに変換するためには多層のページテーブルが使われ得る。図2は仮想アドレスから物理アドレスへの変換を説明する模式図である。計算機2における物理メモリは主記憶装置12であり、図2において物理ページ40は主記憶装置12の記憶領域を固定サイズで区画した複数のページの1つである。仮想アドレス42は、ページテーブル44が4階層からなることに対応して、4つのページテーブル44-1〜44-4それぞれにおけるオフセット(PML4オフセット、PDPオフセット、PDオフセット、PTオフセット)と、物理ページ40におけるオフセットとを含む。
カーネルがCR3制御レジスタ46に最上位のページテーブル44-1(PML4テーブル)のベースアドレスを設定する。これによりページテーブル44-1が指定され、当該テーブルにてPML4オフセットで指定されるアドレスから次の階層のページテーブル44-2のベースアドレスが取り出され、ページテーブル44-2が指定される。以下、同様にして、ページテーブル44-2及びPDPオフセットを用いてページテーブル44-3が指定され、ページテーブル44-3及びPDオフセットを用いてページテーブル44-4が指定され、さらに、ページテーブル44-4及びPTオフセットを用いて物理ページ40が指定され、そして、当該物理ページ40と仮想アドレス42に格納された物理ページでのオフセットとを用いて物理アドレスが定まる。
具体的には、仮想アドレス42から物理アドレスへの変換は、メモリ管理ユニット(Memory Management Unit:MMU)及びトランスレーション・ルックアサイド・バッファ(Translation Lookaside Buffer:TLB)を利用して行われる。
仮想記憶空間に配置されるデータのレイアウトはOS及びCPUアーキテクチャごとに異なる。図3は、本実施形態における仮想記憶空間50のレイアウトを示す模式図であり、カーネル領域52とユーザ領域54とが設けられる。ちなみに、Linux x86_64における仮想記憶空間は48ビットの仮想アドレスにより256TBytesとなり、カーネル領域52、ユーザ領域54はそれぞれ128TBytesである。カーネル領域52には複数の領域がそれぞれ予め決められたアドレス範囲に配置され、例えば、Module mapping space(領域56)、Kernel text mapping(領域58)が設定される。
計算機2は、ユーザアプリケーションを実行するユーザモードとカーネルの動作を行うカーネルモードとで別々の仮想記憶空間を用いる。ユーザモードでの仮想記憶空間をユーザ空間、カーネルモードでの仮想記憶空間をカーネル空間と称する。具体的には、LinuxではKPTI(Kernel Page Table Isolation)にてユーザモードとカーネルモードの間で仮想記憶空間が分離する手法が実装されている。
さらに計算機2においては、上述したカーネル空間の改竄という課題を解決するために、カーネルモードについてカーネル空間とは別の仮想記憶空間を用意する。当該仮想記憶空間を秘密空間と称することにする。計算機2は、不正なモジュールやカーネル脆弱性を用いた攻撃によるカーネル空間の書き換えによる影響を回避するため、所定のタイミングにおいてカーネルの仮想記憶空間をカーネル空間から秘密空間に切り替え、秘密空間上において監視を行ってカーネル空間への不正操作を検出する。これにより、カーネルの脆弱性を利用されて特権ユーザが奪取された後、意図しないカーネルモジュール(以下、モジュール)が挿入されたことを検出できる。ちなみに、カーネルの脆弱性を利用されてカーネル空間の書き換えが起こったとしても、秘密空間上のセキュリティ機構は別の仮想記憶空間に存在するため、書き換えの影響を受けない。
CPU10は設定手段20、切替手段22、監視実行手段24、権限判定手段26として機能することにより当該セキュリティ機構を実現する。
設定手段20は、OSの起動時にカーネル空間及びユーザ空間とは別に秘密空間を設ける処理を行う。後述するように、カーネル空間及びユーザ空間のうち、秘密空間の切り替え相手の仮想記憶空間はカーネル空間に制限される。また、設定手段20は監視処理を記述した監視コード、及びカーネル空間に関しての監視対象について初期状態を秘密空間に記憶させる処理を行う。
切替手段22は、カーネルモードでの動作時における所定のタイミングにて、カーネルが利用する仮想記憶空間をカーネル空間から秘密空間へ切り替える処理(第一切替処理)を行う。例えば、切替手段22は、監視対象を変更するシステムコール又は当該システムコールによって呼び出される所定の関数を検出した場合に第一切替処理を行う。
監視実行手段24は、第一切替処理に伴い秘密空間にて監視コードを実行し、監視処理として、現時点の監視対象を、秘密空間に保存されている監視対象の初期状態と比較してカーネル空間の改竄を検出する改竄検出処理と、当該改竄検出処理の後に、カーネルが利用する仮想記憶空間を秘密空間からカーネル空間へ切り替える処理(第二切替処理)とを行う。
権限判定手段26は、切替手段22により第一切替処理が行われた場合に、例えば入力装置6からユーザが入力する認証情報に基づいて監視対象の更新権限の有無を判定する。例えば、認証情報を入力したユーザが、正規ユーザやシステム管理者であることを認証情報に基づいて判定する。権限判定手段26により更新権限が有ると判定された場合には、設定手段20は秘密空間に保存される監視対象の初期状態の改変を、監視対象と検証用データとの比較によって検出し、検出された改変の内容で更新する。この検出は改竄検出処理のコードを流用して行えばよい。
図4は計算機2において生成される仮想記憶空間について説明する模式図である。上述したように、KPTIによりカーネル及びプロセスごとに仮想記憶空間が2つ作成される。さらに、本発明では秘密空間が1つ作成される。具体的には、OSが起動されると、仮想記憶空間ごとにページテーブル44が生成される。LinuxのページテーブルはPGD、PUD、PMD、PTEの4階層で構成され、物理メモリ60でのその位置は最上位であるPGDテーブルのベースアドレスで特定され、mm_struct構造体のpgd変数がそれを指すポインタとなる。ちなみに、Linuxのページテーブルの階層は、上述したx86アーキテクチャのページテーブルのPML4、PDP、PD、PTという4階層に対応している。図4では物理メモリ60にカーネル空間70のページテーブル62、ユーザ空間72のページテーブル64、及び秘密空間74のページテーブル66が設定され、カーネル空間70、ユーザ空間72及び秘密空間74からなる仮想記憶空間の組76が生成される。
また、1つのプロセスの生成に対応してカーネル空間及びユーザ空間が追加生成される。例えば、プロセスIDがkであるプロセスに対応して、物理メモリ60にはページテーブル62-k,64-kが設定され、仮想記憶空間の組76-kとしてカーネル空間70-k及びユーザ空間72-kが生成される。
一方、秘密空間74はプロセスが追加されても追加されず、基本的には1つの秘密空間74を複数のプロセスで共用することができる。
例えば、組76の3つの仮想記憶空間それぞれのページテーブルの物理アドレスは、カーネル空間70についてはmm_struct構造体のinit_mm変数が持つpgd変数とし、ユーザ空間72についてはinit_mm変数が持つpgd変数に1ページサイズ分(x86_64では4Kbytes)を論理和した値とし、秘密空間74についてはinit_mm変数が持つpgd変数に4ページサイズ分を論理和した値とすることができる。
カーネル空間70、ユーザ空間72、秘密空間74は基本的には互いに複製の関係にあり、図3にて説明したようにそれぞれの上半分はカーネル領域52であり、下半分はユーザ領域54である。一方、ユーザ空間72のページテーブルのうちカーネル領域52に対応する部分には基本的にカーネルページはマップされず(Kernel Unmap)、SYSCALL発行に必要な最小限のカーネルページだけが含まれる。また、Supervisor Mode Execution Prevention(SMEP)及びSupervisor Mode Access Prevention(SMAP)というx86アーキテクチャが提供するメモリ保護機能により、カーネルモードで利用されるカーネル空間70及び秘密空間74のユーザ領域54のコードは実行できず、またアクセスできない。
ユーザアプリケーションの実行に際してはシステムコールにより仮想記憶空間をユーザ空間72とカーネル空間70との間で切り替えることができ、これによりカーネルの機能を利用することができる。一方、秘密空間74はカーネル空間70との間でしか切り替えられない。つまりユーザ空間72と秘密空間74とは直接には切り替えられない。また、カーネル空間70から秘密空間74への切り替えも第一切替処理を行う切替手段を介した場合のみに制限される。つまり、カーネル空間70とは別の仮想記憶空間として秘密空間74を設けることで、カーネル空間70における監視対象となるカーネルコードが実行中に利用する仮想アドレスからは秘密空間74にはアクセスすることができない。これらの点についてはさらに後述する。
組76-kのカーネル空間70-k及びユーザ空間72-kの位置、構成は上述のカーネル空間70及びユーザ空間72と同様とすることができる。
図5はカーネル空間70及び秘密空間74の構造を説明する模式図である。上述したように、秘密空間74は基本的にはカーネル空間70からの複製である。よって、カーネル空間70のカーネルコード80a及びデータ82aが秘密空間74のカーネルコード80b及びデータ82bに複製される。また、本発明では、カーネル空間70には監視実行手段24が用いる監視コード86a及び検証用データ84aが定義され、これらが秘密空間74の監視コード86b及び検証用データ84bとして複製される。ここで、検証用データ84はカーネル空間70に関しての監視対象とするデータ(以下、監視対象データ)についての初期状態を表すものである。つまり、本実施形態では、設定手段20は、カーネル空間70に監視コード86a及び検証用データ84aを記憶させ、これを秘密空間74に複製することで、秘密空間74に監視コード86b及び検証用データ84bを記憶させる。なお、カーネル空間70の監視コード86a及び検証用データ84aはページテーブル上にてアクセス制限のフラグ操作を行い参照不可とする。例えば、設定手段20が当該操作を行う。なお、監視対象をデータのみならずプログラムとしてもよい。
具体的には、監視用ならびに仮想記憶空間の切り替えを行うカーネルコード86と検証用データ84はKernel text mapping(図3の領域58)に、また監視対象データはModule mapping space(図3の領域56)にそれぞれ配置する。既に述べたように秘密空間74はカーネル空間70からの複製であり、CoW(Copy on Write)を無効化することで、秘密空間74に仮想記憶空間を切り替えた後でもModule mapping spaceを参照可能とする。一方、カーネル空間70にて監視コード86a及び検証用データ84aが書き換えられることを防ぐため、PTE(Page Table Entry)にて読み書きをオフとし、参照不可能とする。
図6は計算機2における秘密空間74による監視の開始を説明する概略のフロー図である。OS(カーネル)はそのブート動作(ステップS5)にて、カーネル空間70の初期化処理(mm init関数)及びKPTIによるユーザ空間72の初期化処理(kaiser init関数)を行う。次に、カーネルは物理記憶空間に秘密空間74を確保し初期化処理を行う(ステップS10)。カーネルはモジュール読込処理(load default modules関数)を実行し、モジュールをロードする(ステップS15)。そして、カーネルはカーネル空間70において記憶した検証用データ84a及び監視コード86aを秘密空間74に複製させることで、それぞれ秘密空間74における検証用データ84b及び監視コード86bとして記憶させる(ステップS20)。本実施形態では監視対象データはカーネル空間70にロードされているモジュールに関するモジュール名リストとする。当該リストはModule mapping space及びKernel text mappingに基づいて生成され、ロードされているモジュールの変化に応じて更新されるが、ステップS20では、カーネルブート時での初期状態のモジュール名リストが検証用データ84として複製される。しかる後、秘密空間74にて監視コードによる監視が開始される(ステップS25)。
図7は計算機2における監視動作を説明する模式図であり、ユーザモードとカーネルモードとの遷移における仮想記憶空間の切り替わり、及びカーネルモードでのカーネル空間70と秘密空間74との切り替わりが示されている。
ユーザモードにおいては、割り込み(SYSCALL,IRQ Interrupt)や例外(Exception)を発生させ(処理A1)、カーネルモードへ遷移する(処理A2)。具体的には、ユーザ空間72のユーザ領域54にてアプリケーションプログラムによりSYSCALL等が発行されると、ユーザ空間72のカーネル領域52にマップされたSWITCH_KERNEL_CR3関数90を呼び出してカーネル空間70への切り替えが行われる。ちなみに、SWITCH_KERNEL_CR3関数90は図2に示したCR3制御レジスタ46にカーネル空間70のページテーブルを指し示すinit_mm変数のpgd変数を書き込み、これに対応してカーネルが仮想記憶空間をカーネル空間70に切り替える。
さらに本発明では、カーネルモードにてカーネル空間70から秘密空間74への切り替えが行われる(処理A3、第一切替処理)。つまり、CPU10が切替手段22として機能する。具体的には、本実施形態では、この秘密空間74への切り替えを行うために、カーネル空間70のカーネル領域52にカーネルコードとしてSWITCH_SECRET_CR3関数92を用意する。この関数は、init_mm変数のpgd変数が示す物理アドレスから4ページサイズのオフセット位置、つまり秘密空間74のページテーブルの位置を示す物理アドレスを計算してCR3制御レジスタ46に書き込み、これに対応してカーネルが仮想記憶空間を秘密空間74に切り替える。
当該切り替え後、秘密空間74におけるカーネルモードの動作は監視コードに基づいて行われ、CPU10は監視処理等を行う監視実行手段24として機能する。ここで、監視実行手段24の監視処理を行うか否かは以下の条件、(1)カーネル空間70を変更操作するシステムコールまたは関数の呼び出しがあったこと、(2)前回の監視処理における割り込み・例外の呼び出しが予め定められた回数に達したこと、(3)一定の時間周期が到来したこと、に基づいて決めることができる。すなわち、(2)は第一切替処理が所定回数行われるごとに改竄検出処理を実行することが代表例であり、(3)は前回の改竄検出処理の実行後から所定期間経過している場合に前記改竄検出処理を実行することが代表例である。なお、これら条件のうち特定の1つが満たされたときに監視処理を行う構成とすることができる。また、これら条件の任意の1つが満たされれば監視処理を行う構成とすることもできる。
カーネルは、監視処理の終了後(又は監視処理を行わないと判断した後)、SWITCH_ORIGINAL_CR3関数94において、current変数(task_struct構造体)の持つactive_mm構造体の持つpgd変数が示す物理アドレスをCR3制御レジスタ46に書き込み、これに対応して仮想記憶空間を、実行中プロセスでのカーネル空間70、すなわち秘密空間74への切り替え元のカーネル空間70に切り替える(処理A4)。つまり、CPU10が監視実行手段24として第二切替処理を実行する。それぞれのCR3制御レジスタへの書き込み後はTLBフラッシュを行って、仮想アドレスから物理アドレスへの変換キャッシュをクリアする。その後、カーネル空間70にてSWITCH_USER_CR3関数を呼び出してユーザ空間72に切り替え(処理A5)、割り込みの終了(SYSRET Interruptreturn)および例外終了(Exception exit)にてユーザモードに遷移する(処理A6)。
図8は計算機2における秘密空間74による監視を説明する概略のフロー図である。図8を用いて攻撃者によるモジュールの操作に対する切替手段22及び監視実行手段24の動作を説明する。
攻撃者はユーザ権限にてカーネル脆弱性を悪用した攻撃を実行し悪意のあるコードを書き込み(ステップS30)、当該悪意のあるコードにより特権を奪取する(ステップS35)。攻撃者は奪取した特権を利用して、不正なモジュールを挿入(sys_init_moduleシステムコール)、またはモジュールの除去(sys_delete_moduleシステムコール)を行う。カーネルは切替手段22として機能し、例えば、監視対象とするモジュール名リストを変更するモジュール関係のシステムコール発行を捕捉し(entry_SYSCALL_64関数内)(ステップS40)、当該システムコールの発行後、かつ次にモジュールの初期化関数(add_unformed_module関数)が呼ばれるよりも前に秘密空間74に切り替える(図7の処理A3)。
カーネルは秘密空間74の監視コードを実行して、現時点のモジュール名リスト(modules変数)と、検証用データ84bとして保存されている初期状態でのモジュール名リストとを比較する監視処理を行って(ステップS45)、不正なモジュールの検出を行う(ステップS50)。その後、実行中プロセスのcurrent変数(task_struct構造体)が参照するカーネル空間70へ切り替える(図7の処理A4)。
図9は攻撃側の概略のシーケンス図である。攻撃のシーケンスはユーザ空間72とカーネル空間70で起こる。攻撃者はユーザ空間72にてプログラムを実行しカーネルの脆弱性を利用して特権を奪取する(ステップS60)。具体的には、特権を奪取すると、攻撃者はinsmodコマンドを実行し、ルートキットなどの不正なモジュールを挿入するための処理を行う(ステップS65)。そして、insmodコマンドの中でsys_init_moduleシステムコールを発行してカーネルモードに遷移し(ステップS70)、カーネル空間70にてカーネルへのモジュール挿入が行われる。このモジュール挿入に伴い、監視対象データであるモジュール名リストの内容が改変される(ステップS75)。システムコールが終了してユーザモードに遷移する(ステップS80)。これにより、攻撃者はモジュールを利用した攻撃が可能となる(ステップS85)。
図10は計算機2における秘密空間74を用いた監視シーケンスを示す図である。カーネル空間70にて予め定めた注意イベントが発生すると(ステップS100)、カーネルモードの仮想記憶空間をカーネル空間70から秘密空間74へ切り替える(ステップS105)。注意イベントは例えば、図8のステップS40に関して述べたモジュール関係のシステムコール発行などとすることができる。
秘密空間74では図5に示す監視コード86b及び検証用データ84bを用いて監視処理が行われる。監視コードは、カーネル空間70から監視対象とするデータ(本実施形態ではモジュール名リスト)を読み取り(ステップS110)、これと検証用データ84bとの比較を行う(ステップS115)。検証用データ84bは、監視対象データの初期状態、つまり未改竄の状態で保存された正しいデータであり、監視コードは当該比較の結果により監視対象データの正否、つまり現状の監視対象データが不正か否かを判定する(ステップS120)。当該判定後、監視コードは元のカーネル空間70への切り替えを行う(ステップS125)。
ステップS125の判定結果に基づいて攻撃の検出を行うことができ、攻撃が検出された場合には、その旨を出力しユーザに知らせるなどの処理を行うことができる。なお、秘密空間74での監視処理は上述したように、特定のシステムコール、一定回数のシステムコール発行時、及び指定された時間周期などにて開始を判定することができる。
上述の実施形態では、検証用データ84は監視対象データの初期状態であり、図6の説明にて述べたように、OSのブート時に保存している。そして、当該初期状態から監視対象データが改変されることを以て攻撃を検出する。一方、OSの起動後にシステム管理者が計算機2にドライバを追加するといったシステム構成の変更を行う際などにも監視対象データは変更され得る。そのような正常な改変は上述したように、権限判定手段26により更新権限を確認することにより可能とする。その際、正規ユーザやシステム管理者等に要求する認証情報は例えば、予め定めたパスワードとすることができる。
切替手段22による第一切替処理は、上述したように、監視対象を変更するシステムコール等を検出したタイミングにて行うことができ、そのために本実施形態では、モジュール名リストを変更するシステムコール発行を捕捉する。ここで、既に述べたようにルートキットは計算機へ進入した痕跡、攻撃プログラムの存在、及び自身の存在を隠蔽する機能を有し得る。そのため、モジュール名リストは、不正モジュールの追加によって初期状態から変更される一方、ルートキットの隠蔽機能により追加モジュール名を削除され再び初期状態に戻り得る。この隠蔽は追加モジュールにて初期化関数を用いることで行われる。そこで、上記実施形態では、モジュール名が追加された後であって、かつモジュールをロードする際に用いられる初期化関数が呼ばれるよりも前に秘密空間74に切り替え、監視処理を実行することとし、これにより隠蔽を図る攻撃も検出することができる。
また、本発明は上述のLinux、x86_64以外の、カーネル空間とユーザ空間を分離して設ける仮想記憶方式の計算機、例えばWindows(登録商標)などにも適用可能である。本発明により、意図しないカーネルモジュール挿入をカーネルの仮想記憶空間の不正な書き換えとして検出することができる。カーネルの仮想記憶空間は、ユーザモードからカーネルモードに遷移した後においてのみ読み書き、実行が可能である。このため、カーネルの仮想記憶空間の不正な書き換えはカーネルモードでのカーネルコードの実行中に発生する。そこで、本発明では、カーネルモードにおいてカーネルの仮想記憶空間の監視を行うために、秘密空間74として上述したように、カーネルコードから参照されない記憶領域を確保し、当該領域にて監視を実行する。
[第2の実施形態]
第2の実施形態に係る計算機の構成要素のうち、第1の実施形態と基本的に同一の構成要素には同一の符号を付して第1の実施形態での説明を援用しここでの説明の簡素化を図ることとする。
第2の実施形態に係る計算機2の概略の構成図は第1の実施形態の図1と共通である。第2の実施形態に係る計算機2は、第1の実施形態と同様、仮想記憶方式で動作するが、CPU10で行われる仮想記憶空間の切替処理に関し、第1の実施形態との相違点を有する。以下、主に当該相違点について説明する。
図11はカーネルモードで使用する仮想記憶空間に関する模式図である。カーネルにて複数の仮想記憶空間を用いた攻撃困難化手法として、第1の実施形態では、当該仮想記憶空間として互いに分離したカーネル空間70と秘密空間74とを設ける構成を説明したが、第2の実施形態では、カーネル空間70及び秘密空間74とは分離して中継用空間78をさらに設ける。
物理メモリ60には、カーネル空間70、秘密空間74及び中継用空間78それぞれに対応してページテーブル62,66,68が設定され、これらページテーブルに基づいてカーネルモードで使用する3種類の仮想記憶空間が生成される。
カーネルモードで行われる処理はカーネルにおいて適切な仮想記憶空間に切り替えた後に行われる。カーネル機能の多くはカーネル空間70に配置する一方、カーネルに備えるセキュリティ機構への攻撃を困難化するため、当該セキュリティ機構は専ら秘密空間74又は中継用空間78に配置する。これにより、セキュリティ機構の無効化を目的としたカーネルへの攻撃に対して、セキュリティ機構のうちの改竄可能範囲をカーネル空間70に配置された部分に限定することができる。つまり、秘密空間74ならびに中継用空間78に配置されたカーネルコード・データへの攻撃を困難化し、セキュリティ機構への影響を低減する。
具体的には、カーネル空間70は、システムコールからの要求、割込み要求などのカーネル機能を処理する。ここで、カーネル空間70で処理されるカーネルコードには、カーネル脆弱性を利用した攻撃の対象となるもの(脆弱カーネルコード100)が含まれ得る。脆弱カーネルコード100は攻撃を受けて改竄され、カーネル空間70の他のカーネルコード、データに有害な作用101を及ぼし得る。
秘密空間74はカーネルのセキュリティ機能110を実行する仮想記憶空間であり、セキュリティ機能データ111、セキュリティ機能コード112にはそれぞれ第1の実施形態で述べた検証用データ84b、監視コード86bが記憶される。監視コードの実行により、監視処理としてカーネル空間70に対してその改竄を検出する改竄検出処理113がなされる。
中継用空間78はユーザモードとカーネルモードとの間の遷移時、ならびにカーネル空間70、秘密空間74の切り替え先となる仮想記憶空間である。
図11にて点線で囲む範囲120が本実施形態のセキュリティ機構が存在する部分である。当該セキュリティ機構では、カーネルの仮想記憶空間はカーネル空間70、秘密空間74、ならびに中継用空間78の間で切り替えを行う。ユーザモードからカーネルモードへの遷移とカーネル提供機能の処理との関連により、以下の切り替えパターンが挙げられる。
パターン1:システムコール発行や割り込み要求時におけるユーザモードからカーネルモードへの遷移時に、ユーザ空間から中継用空間78に切り替え(切替動作C0)、当該中継用空間78を経由してカーネル空間70に切り替え(切替動作C1)、対応するカーネルコードを実行する。
パターン2:カーネルモードからユーザモードへの遷移時に、カーネル空間70から中継用空間78を経由して(切替動作C1)ユーザ空間に切り替える。
パターン3:改竄検出処理の開始に際し、システムコール処理前にあっては中継用空間78から秘密空間74に切り替え(切替動作C2)、また、カーネル処理中またはシステムコール処理後にあってはカーネル空間70から中継用空間78を経由して(切替動作C1)秘密空間74に切り替えて(切替動作C2)、監視処理のカーネルコードを実行する。
仮想記憶空間の切替処理(切替動作C1,C2)は第1の実施形態で述べたような、各仮想記憶空間に配置した専用のSWITCH関数130〜132にて管理する。ちなみに、切替動作C1に対応して、ページテーブル62とページテーブル68との切り替え135が行われ、切替動作C2に対応して、ページテーブル66とページテーブル68との切り替え136が行われる。
ここで、中継用空間78からはカーネル空間70ならびに秘密空間74へ切り替え可能であるが、カーネル空間70ならびに秘密空間74からは中継用空間78へのみ切り替え可能とする。また、カーネルモードとユーザモードとの間の遷移時は、中継用空間78とユーザ空間との間でのみ切り替えを行う。すなわち、秘密空間は、第1の実施形態と同様、ユーザ空間との切り替えを禁止される。ちなみに、第1の実施形態では秘密空間の切り替え相手はカーネル空間70に制限される。これに対し、第2の実施形態では秘密空間74の切り替え相手は中継用空間78に制限され、カーネル空間70から秘密空間74への切り替え(第一切替処理)と秘密空間74からカーネル空間70への切り替え(第二切替処理)とは中継用空間78を経由して行われる。
さて、カーネルモードにて脆弱性を突く攻撃は、当該脆弱性を含むカーネルコードと同一の仮想記憶空間上にのみ影響を及ぼす。従って、カーネル機能に脆弱性の存在を想定した場合、当該脆弱性を利用した攻撃はカーネル空間70で行われ、カーネル空間70に配置されたカーネルコード・データのみ攻撃可能となる。ここで、カーネル空間70への攻撃により、カーネル空間70から秘密空間74への第一切替処理を無効化された場合、カーネル処理中およびシステムコール処理後の秘密空間74での監視コードの実行を回避されてしまう。この点に対して、秘密空間74及び中継用空間78はカーネル空間70に対する攻撃の影響は受けない。そこで、本実施形態の監視実行手段24は第一切替処理が行われる場合だけでなく、システムコールの処理前など、秘密空間74、中継用空間78のみでカーネル空間70を介さないタイミングでセキュリティ機能を実行することで、カーネル空間70への攻撃に対処することを可能とする。
本実施形態の計算機2は第1の実施形態と同様、仮想記憶方式で動作する。また、OSはKPTIを備えSCI(System Call Isolation)を導入したLinuxとし、CPUアーキテクチャはx86_64とする。
図12は本実施形態の計算機2において生成される仮想記憶空間について説明する模式図である。第1の実施形態と同様、秘密空間74が1つ生成されると共に、プロセスごとにカーネル空間70及びユーザ空間72が生成される。また、本実施形態では、プロセスごとに中継用空間78も作成される。例えば、プロセスIDがkであるプロセスに対応して、物理メモリ60にはカーネル空間、中継用空間、ユーザ空間のページテーブルが設定され、カーネル空間70-k、中継用空間78-k及びユーザ空間72-kからなる1組の仮想記憶空間が生成される。
これら複数種類の仮想記憶空間の構築を具体的に説明する。KPTIはプロセスごとにユーザおよびカーネルの仮想記憶空間を作成し、SCIはプロセスごとにシステムコール処理用の仮想記憶空間を作成する。KPTIで作成されるユーザの仮想記憶空間はユーザ空間72となり、カーネルの仮想記憶空間は中継用空間78として利用する。SCIにより追加されるカーネルの仮想記憶空間はカーネル空間70として利用する。さらにこれらとは別に、最初のプロセスの生成時に秘密空間74が作成され、これは追加生成される他プロセスと共有する。
例えば、KPTIでのカーネルの仮想記憶空間であるinit_mm構造体のpgd変数を中継用空間78の初期値とする。ユーザ空間72のページテーブルはinit_mm構造体のpgd変数に1ページサイズ(x86_64では4Kbytes)を論理積して得られる物理アドレスに配置する。秘密空間74は、init_mm構造体のpgd変数に4ページサイズ(x86_64では16Kbytes)を論理積して得られる物理アドレスに配置する。カーネルの仮想記憶空間は、SCIにてtask_struct構造体に追加されるmm_struct構造体のkernel_pgd変数とする。
プロセス生成時に作成される仮想記憶空間は中継用空間78-k、カーネル空間70-k、ユーザ空間72-kである。current変数のtask_struct構造体に含まれるmm_struct構造体のpgd変数を中継用空間78-k、kernel_pgd変数をカーネル空間70-kとし、pgd変数の物理アドレスに1ページサイズを論理積した物理アドレスをユーザ空間72-kとし、それぞれ初期値より複製する。
図13は仮想記憶空間の切替処理を説明する模式図である。本実施形態でのカーネルの仮想記憶空間の切り替えはそれぞれの仮想記憶空間に配置されたカーネルコードにより行う。上述した各切り替えパターンについて本実施形態での実現方式を説明する。
パターン1:ユーザモードからカーネルモードへの遷移後(処理B1)、ユーザ空間72のSWITCH_KPTI_CR3関数140にて、ユーザ空間72の物理アドレスに1ページサイズ排他的論理和した値をCR3制御レジスタに書込み、中継用空間78に切り替える(切替動作C0)。さらに中継用空間78のSWITCH_KERNEL_CR3関数141にて、current変数のkernel_pgd物理アドレスをCR3制御レジスタに書込み、カーネル空間70に切り替える(切替動作C1)。
パターン2:カーネルモードからユーザモードへの遷移の前に、カーネル空間70のSWITCH_KERNEL_CR3関数142にて、current変数に含まれるpgd変数の物理アドレスをCR3制御レジスタに書込み、中継用空間78に切り替える(切替動作C1)。中継用空間78のSWITCH_KPTI_CR3関数143にて、中継用空間78の物理アドレスに1ページサイズを論理積した値をCR3制御レジスタに書込み、ユーザ空間72に切り替える(切替動作C0)。しかる後、カーネルモードからユーザモードへ遷移する(処理B2)。
パターン3:システムコール処理前におけるセキュリティ機能の実行に関しては、中継用空間78のSWITCH_SECURITY_CR3関数144にて、init_mm構造体のpgd変数に4ページサイズを論理積した物理アドレスをCR3制御レジスタに書込み、秘密空間74に切り替える(切替動作C2)。カーネル処理中およびシステムコール処理後におけるセキュリティ機能の実行に関しては、まず、カーネル空間70のSWITCH_KERNEL_CR3関数142にて、中継用空間78に切り替え(切替動作C1)、その後、中継用空間78のSWITCH_SECURITY_CR3関数144により秘密空間74に切り替える(切替動作C2)。
本実施形態におけるセキュリティ機構は仮想記憶空間の切替処理の監視を含む。つまり、本実施形態の計算機2は、SELinux(Security-Enhanced Linux)等の強制アクセス制御を提供するためのLSM(Linux Security Module)という従来の仕組みに加え、カーネルの仮想記憶空間における仮想記憶空間の切替処理を監視し保護対象とする。図14は、当該監視の対象領域を示す模式図であり、Monitored Data(ハッチングを施した部分)が監視対象領域である。当該監視は秘密空間74の領域150に記憶された監視コード及び検証用データを用いて行われる。ちなみに、領域150に記憶されるデータ、コードは、図11のセキュリティ機能110のセキュリティ機能データ111、セキュリティ機能コード112に当たり、これらは上述したように第1の実施形態の検証用データ84b、監視コード86bに相当する。なお、これらデータ、コードは仮想記憶空間を複製により生成することによりカーネル空間70及び中継用空間78の領域151,152にも存在するが、これら領域151,152はアクセス制限されている。
本実施形態の監視は、基本的には第1の実施形態にて図6を用いて説明した手順と同様にして開始される。つまり、Linuxカーネルの起動時、kaiser_init関数の終了後において、KPTIのユーザ、カーネルの仮想記憶空間が作成され、カーネルコード・データの仮想アドレスの位置を定める。その後、中継用空間78、秘密空間74の領域を物理記憶空間に確保し、カーネルの仮想記憶空間上に配置される、監視に利用する検証用データとして、カーネル空間70のモジュール名リスト、LSM及び仮想記憶空間の切替処理を行うSWITCH_KERNEL_CR3関数の仮想アドレスが秘密空間74の領域150に複製される。
本実施形態のセキュリティ機構におけるカーネル監視を行うタイミングは、システムコールの実行前と実行後、およびカーネルの処理中における任意のタイミングとしている。監視処理においては、秘密空間74に切り替え後、カーネルモジュール、LSMを呼出すカーネルコードの仮想アドレス、ならびに仮想記憶空間の切替処理の仮想アドレスに対して改竄の有無を検証用データと比較することで判断する。
仮想記憶空間の切替処理への攻撃を受けた際の計算機2の動作について説明する。上述したように、中継用空間78はSWITCH_KPTI_CR3関数143、SWITCH_SECURITY_CR3関数144、SWITCH_KERNEL_CR3関数141、ならびに割り込みや例外捕捉関連のカーネルコードを実行することができる。秘密空間74はSWITCH_SECURITY_CR3関数145、ならびに監視処理用のカーネルコードを実行することができる。カーネル空間70は、SWITCH_KERNEL_CR3関数142、ならびにその他のカーネル機能を提供するカーネルコードを実行することができる。
カーネルモードの処理毎に仮想記憶空間を分離して管理し、カーネルコード・データはそれぞれの配置された仮想記憶空間にて実行・読み書きする。カーネルコードに脆弱性が存在する場合、該当する仮想記憶空間上にマッピングされているカーネルコード・データのみ攻撃対象となる。本実施形態においては、殆どのカーネル機能はカーネル空間70にマッピングされるため、セキュリティ機能の回避のためにカーネル脆弱性を利用した攻撃による攻撃対象は、カーネル空間70上にある仮想記憶空間の切り替えを行うSWITCH_KERNEL_CR3関数142となる。
ここで、セキュリティ機構の監視回避として、カーネル空間70に配置されるSWITCH_KERNEL_CR3関数142に対して攻撃を巧妙に行なった場合、カーネル空間70から直接、ユーザ空間72に切り替え、ユーザモードに遷移することは可能といえる(後述の図15の点線160f)。カーネル空間70のSWITCH_KERNEL_CR3関数142を改竄した場合、セキュリティ機構の監視のうちカーネル処理中、ならびにシステムコール処理後の監視処理は回避される。しかしながら、中継用空間78、秘密空間74は攻撃の影響を受けないため、システムコール処理前の監視処理は回避されない。
本実施形態では、カーネルへの攻撃に対し、秘密空間への切替処理に対する改竄を困難とし、部分的な保護を実現している。本実施形態のカーネル監視機構の行う監視タイミングにおいても攻撃による全ての監視処理の回避は行えない。攻撃によるSWITCH_KERNEL_CR3関数142の改竄により、カーネル空間70においてカーネルパニック等を発生した際は、カーネルモードからユーザモードに遷移できず攻撃は失敗する。
図15はカーネル脆弱性を利用した仮想記憶空間の切替処理への攻撃と検出例を説明する模式図である。eBPF(extended Berkeley Packet Filter)のカーネル脆弱性を利用した攻撃におけるフローを点線160a〜160fで示している。また、改竄検出におけるフローを点線162a〜162cで示している。
当該攻撃では、ユーザモードのプロセス170から攻撃の起点となるカーネルコード172(kernel/bpf/verifier.c)の存在する仮想記憶空間の任意の仮想アドレスに対して、本来は許可されていない読み書きを可能とする。
本実施形態の計算機2において当該カーネル脆弱性を利用して攻撃を試みる場合、カーネルコード172の実行はカーネル空間70となり、同一の仮想記憶空間にある仮想記憶空間の切替処理を行うSWITCH_KERNEL_CR3関数142を改竄可能である(点線160e)。
カーネル空間70における攻撃時には、中継用空間78および秘密空間74の仮想アドレスは指定できないため、それらの仮想記憶空間に配置されるカーネルコード・データの改竄は困難である。このため、攻撃後に新たなシステムコールが発行される際(点線162a)には、システムコール処理前の状態のままであるカーネル監視機構180(図11のセキュリティ機能110)による監視処理は回避されない。よって、中継用空間78から秘密空間74に切り替え(点線162b)、監視処理(点線162c,図11の改竄検出処理113)を実行することでカーネル空間70に存在するSWITCH_KERNEL_CR3関数142を呼び出すカーネルコードの改竄有無は検出可能である。
2 計算機、4 主装置、6 入力装置、8 出力装置、10 CPU、12 主記憶装置、14 補助記憶装置、16 バス、20 設定手段、22 切替手段、24 監視実行手段、26 権限判定手段、40 物理ページ、42 仮想アドレス、44 ページテーブル、46 CR3制御レジスタ、50 仮想記憶空間、52 カーネル領域、54 ユーザ領域、60 物理メモリ、70 カーネル空間、72 ユーザ空間、74 秘密空間、78 中継用空間、84 検証用データ、86 監視コード。

Claims (14)

  1. カーネルモードで使用するカーネル空間とユーザモードで使用するユーザ空間とを分離して設ける仮想記憶方式の計算機であって、
    オペレーティングシステムの起動時に前記カーネル空間及び前記ユーザ空間とは別の仮想記憶空間として前記ユーザ空間との切り替えが禁止される秘密空間を設ける処理を行うと共に、監視処理を記述した監視コード、及び前記カーネル空間の監視対象についての検証用データを前記秘密空間に記憶させる処理を行う設定手段と、
    前記設定手段による処理の後、所定のタイミングにて、カーネルが利用する仮想記憶空間を前記カーネル空間から前記秘密空間へ切り替える第一切替処理を行う切替手段と、
    前記第一切替処理に伴い前記秘密空間にて前記監視コードを実行し、前記監視処理として、現時点の前記監視対象を前記検証用データと比較して前記カーネル空間の改竄を検出する改竄検出処理と、当該改竄検出処理の後に、カーネルが利用する仮想記憶空間を前記秘密空間から前記カーネル空間へ切り替える第二切替処理とを行う監視実行手段と、
    を有することを特徴とする計算機。
  2. 前記切替手段は、前記監視対象を変更するシステムコール又は当該システムコールによって呼び出される所定の関数の実行指示を検出した場合に前記第一切替処理を行うこと、を特徴とする請求項1に記載の計算機。
  3. 前記監視対象は、ロードされたカーネルモジュールのモジュール名リストであり、
    前記切替手段は、前記監視対象を変更するシステムコールが発行された後、前記カーネルモジュールをロードする際に用いられる初期化関数が呼ばれる前に前記第一切替処理を行うこと、
    を特徴とする請求項2に記載の計算機。
  4. 前記監視実行手段は、前回の前記改竄検出処理の実行後から所定期間経過している場合に前記改竄検出処理を実行すること、を特徴とする請求項1から請求項3のいずれか1つに記載の計算機。
  5. 前記監視実行手段は、前記第一切替処理が所定回数行われるごとに前記改竄検出処理を実行すること、を特徴とする請求項1から請求項4のいずれか1つに記載の計算機。
  6. 前記設定手段は、前記オペレーティングシステムの起動時に前記検証用データ及び前記監視コードを前記カーネル空間に記憶させ、前記秘密空間を当該カーネル空間の複製として生成すること、を特徴とする請求項1から請求項5のいずれか1つに記載の計算機。
  7. 認証情報の入力に用いる入力手段と、
    前記切替手段により前記第一切替処理が行われた場合に、前記認証情報に基づいて前記監視対象の更新権限の有無を判定する権限判定手段と、を更に有し、
    前記設定手段は、前記オペレーティングシステムの起動後に、現時点の前記監視対象を前記検証用データと比較して改変が検出され、且つ、前記権限判定手段により前記更新権限が有ると判定された場合には、前記改変が検出された前記監視対象で前記秘密空間の前記検証用データを更新すること、
    を特徴とする請求項1から請求項6のいずれか1つに記載の計算機。
  8. 前記設定手段は、前記カーネルモードで使用する空間として、前記カーネル空間及び前記秘密空間とは別に、前記ユーザ空間からの切り替え先として設定される位置に中継用空間をさらに設け、
    前記切替手段は、前記ユーザモードから前記カーネルモードへの遷移時に前記ユーザ空間から切り替えられた前記中継用空間において当該中継用空間から前記カーネル空間への切替処理を行い、また、前記第一切替処理では、一旦、前記カーネル空間から前記中継用空間へ切り替え、当該中継用空間において前記秘密空間への切替処理を行うこと、
    を特徴とする請求項1に記載の計算機。
  9. 前記設定手段は、ユーザプロセスごとに生成される前記ユーザ空間それぞれに対応して前記中継用空間及び前記カーネル空間を設ける一方、複数の前記ユーザプロセスに対して共通の前記秘密空間を設けること、を特徴とする請求項8に記載の計算機。
  10. 前記切替手段は、前記カーネルモードから前記ユーザモードへの遷移を、前記中継用空間から前記ユーザ空間への切替処理により行うこと、を特徴とする請求項8又は請求項9に記載の計算機。
  11. カーネルモードで使用するカーネル空間とユーザモードで使用するユーザ空間とを分離して設ける仮想記憶方式の計算機に用いられるオペレーティングシステムであって、当該計算機を、
    当該オペレーティングシステムの起動時に前記カーネル空間及び前記ユーザ空間とは別の仮想記憶空間として前記ユーザ空間との切り替えが禁止される秘密空間を設ける処理を行うと共に、監視処理を記述した監視コード、及び前記カーネル空間の監視対象についての検証用データを前記秘密空間に記憶させる処理を行う設定手段、
    前記設定手段による処理の後、所定のタイミングにて、カーネルが利用する仮想記憶空間を前記カーネル空間から前記秘密空間へ切り替える第一切替処理を行う切替手段、及び、
    前記第一切替処理に伴って前記監視コードを実行し、前記監視処理として、現時点の前記監視対象を前記検証用データと比較して前記カーネル空間の改竄を検出する改竄検出処理と、当該改竄検出処理の後に、カーネルが利用する仮想記憶空間を前記秘密空間から前記カーネル空間へ切り替える第二切替処理とを行う監視実行手段、
    として機能させることを特徴とするオペレーティングシステム。
  12. 前記設定手段は、前記カーネルモードで使用する空間として、前記カーネル空間及び前記秘密空間とは別に、前記ユーザ空間からの切り替え先として設定される位置に中継用空間をさらに設け、
    前記切替手段は、前記ユーザモードから前記カーネルモードへの遷移時に前記ユーザ空間から切り替えられた前記中継用空間において当該中継用空間から前記カーネル空間への切替処理を行い、また、前記第一切替処理では、一旦、前記カーネル空間から前記中継用空間へ切り替え、当該中継用空間において前記秘密空間への切替処理を行うこと、
    を特徴とする請求項11に記載のオペレーティングシステム。
  13. カーネルモードで使用するカーネル空間とユーザモードで使用するユーザ空間とを分離して設ける仮想記憶方式の計算機を制御する方法であって、
    オペレーティングシステムの起動時に前記カーネル空間及び前記ユーザ空間とは別の仮想記憶空間として前記ユーザ空間との切り替えが禁止される秘密空間を設ける処理を行うと共に、監視処理を記述した監視コード、及び前記カーネル空間の監視対象についての検証用データを前記秘密空間に記憶させる処理を行う設定ステップと、
    前記設定ステップの後、所定のタイミングにて、カーネルが利用する仮想記憶空間を前記カーネル空間から前記秘密空間へ切り替える第一切替処理を行う切替ステップと、
    前記第一切替処理に伴って前記監視コードを実行し、前記監視処理として、現時点の前記監視対象を前記検証用データと比較して前記カーネル空間の改竄を検出する改竄検出処理と、当該改竄検出処理の後に、カーネルが利用する仮想記憶空間を前記秘密空間から前記カーネル空間へ切り替える第二切替処理とを行う監視実行ステップと、
    を有することを特徴とする方法。
  14. 前記設定ステップは、前記カーネルモードで使用する空間として、前記カーネル空間及び前記秘密空間とは別に、前記ユーザ空間からの切り替え先として設定される位置に中継用空間をさらに設け、
    前記切替ステップは、
    前記ユーザモードから前記カーネルモードへの遷移時に前記ユーザ空間から切り替えられた前記中継用空間において当該中継用空間から前記カーネル空間への切替処理を行うステップと、
    前記第一切替処理にて、一旦、前記カーネル空間から前記中継用空間へ切り替え、当該中継用空間において前記秘密空間への切替処理を行うステップと、
    を含むことを特徴とする請求項13に記載の方法。
JP2019150048A 2019-02-27 2019-08-19 計算機、オペレーティングシステム及び方法 Pending JP2020140689A (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
JP2019034577 2019-02-27
JP2019034577 2019-02-27

Publications (1)

Publication Number Publication Date
JP2020140689A true JP2020140689A (ja) 2020-09-03

Family

ID=72280494

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2019150048A Pending JP2020140689A (ja) 2019-02-27 2019-08-19 計算機、オペレーティングシステム及び方法

Country Status (1)

Country Link
JP (1) JP2020140689A (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114501516A (zh) * 2022-02-14 2022-05-13 成都市以太节点科技有限公司 一种车地无线通信切换室内测试方法及系统

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114501516A (zh) * 2022-02-14 2022-05-13 成都市以太节点科技有限公司 一种车地无线通信切换室内测试方法及系统
CN114501516B (zh) * 2022-02-14 2024-03-12 成都市以太节点科技有限公司 一种车地无线通信切换室内测试方法及系统

Similar Documents

Publication Publication Date Title
US8689007B2 (en) Integrity protection in data processing systems
US8239959B2 (en) Method and data processing system to prevent manipulation of computer systems
JP4759059B2 (ja) メモリページをプログラムに対応付けるページカラーリング
JP4556144B2 (ja) 情報処理装置、復旧装置、プログラム及び復旧方法
JP5581403B2 (ja) メモリのセキュア領域および非セキュア領域へのセキュアモードページテーブルデータの格納
US7043616B1 (en) Method of controlling access to model specific registers of a microprocessor
US7130977B1 (en) Controlling access to a control register of a microprocessor
CN111400702A (zh) 一种虚拟化的操作系统内核保护方法
US20080077767A1 (en) Method and apparatus for secure page swapping in virtual memory systems
JP2007304954A (ja) メモリ保護機能を有するコンピュータシステム
JP5619732B2 (ja) ハードウェアデータ保護装置
US20080263256A1 (en) Logic Device with Write Protected Memory Management Unit Registers
WO2011076464A1 (en) Method and system for protecting an operating system against unauthorized modification
US11354404B2 (en) Transition disable indicator
CN110532767B (zh) 面向sgx安全应用的内部隔离方法
JP7376571B2 (ja) 有界ポインタの使用を制御するための装置及び方法
WO2022105610A1 (zh) 一种数据保护的方法、装置、存储介质和计算机设备
JP5716824B2 (ja) マルチコアプロセッサシステム
JP2010186386A (ja) プロセッサ
JP2020140689A (ja) 計算機、オペレーティングシステム及び方法
JP6652669B2 (ja) 情報処理装置及び情報処理装置の制御方法
JP5920509B2 (ja) コントローラの制御プログラム、およびコントローラの制御方法
TW202418067A (zh) 堆疊指標切換有效性檢查
CN116635855A (zh) 基于执行上下文管理可执行代码对数据内存的访问的装置和方法
WO2023209323A1 (en) Exception return state lock parameter