Computer Security Symposium 201521 - 23 October 2015

プロセス情報不可視化のための仮想計算機モニタよるメモリアクセス制御
佐藤 将也

山内 利宏

谷口 秀夫

岡山大学 大学院自然科学研究科
700-8530 岡山県岡山市北区津島中 3-1-1{sato, yamauchi, tani}@cs.okayama-u.ac.jp
あらまし 重要なソフトウェアが攻撃の対象となり無力化されると，攻撃による被害が拡大する可能性がある．そこで，攻撃者から重要なソフトウェアの識別を困難にする攻撃回避手法を提案した．また，攻撃回避を実現するために，プロセス情報を置換することでプロセス情報を偽装する手法を提案した．しかし，この方法は，プロセス情報の継続的な監視により，攻撃対象のプロセスを特定される可能性がある．そこで，本稿では，仮想計算機モニタを用いたアクセス制御により，プロセス情報の参照を制限する手法を提案する．これにより，本来のプロセス情報を攻撃者から参照を困難にし，プロセスの特定をより困難にする．

Memory Access Control using Virtual Machine Monitor forProcess Information Hiding
Masaya Sato

Toshihiro Yamauchi

Hideo Taniguchi

Graduate School of Natural Science and Technology, Okayama University
3-1-1 Tsushima-naka, Kita-ku, Okayama 700-8530, JAPANAbstract Attacks for essential software may enlarge damages. To prevent this type of attack
and to mitigate damages, we proposed an attack avoiding method that complicates process
identiﬁcation from attackers. To complicate process identiﬁcation, we employed a replacement
method for process information. However, this method have a problem that enable adversaries
to identify an attack target process by monitoring process information continuously. To address
this problems, this paper proposes a memory access control mechanism using virtual machinemonitor. This mechanism hides original process information and provides much more diﬃculty
for process identiﬁcation.

はじめにスと呼ぶ．重要サービスは，攻撃者にとって不都合である場合が多いことから，攻撃の対象と計算機への攻撃の防止は重要な研究課題とななり，無力化される可能性がある．攻撃を行うっており，被害を防ぐために，攻撃防止のためのソフトウェアが研究開発されている．また， ソフトウェアのなかには，重要サービスを停止または無効化する機能を持つものがある．重要プログラムの動作を記録し，解析するプログラサービスを停止または無効化されると，システムが開発されている．以降，攻撃による被害のムへのマルウェア感染や被害の拡大を招く．こ防止や解析を行うプログラム，およびシステムのため，重要サービスへの攻撃による被害の拡の管理において重要なプログラムを重要サービ

1－ 855 －大を防止することが重要である．
重要サービスへの攻撃を防止するために仮想計算機モニタ (Virtual Machine Monitor, VMM)を利用する方法 [1, 2] が提案されている．しかし，重要サービスを提供する既存ソフトウェアを改変なしには利用できない問題がある．また，プログラムを停止させる API 呼び出しを監視し，重要サービスの停止を防止する手法 [3] が提案されているものの，カーネルレベルでの攻撃により無効化される可能性がある．
そこで，文献 [4, 5] において，これらの問題に対処するために，プロセス特定困難化のためのプロセス情報の置換による攻撃回避手法を提案した．本手法は，重要サービスを提供するプロセス（以降，重要プロセス）を攻撃者から隠ぺいするために，重要プロセスの情報を偽の情報に置換し，攻撃者による重要プロセスの特定を困難化することで攻撃を回避する．重要プロセスの情報の置換は，VMM により行う．これにより，重要プロセスの情報を置換する機構自体の安全性を向上している．しかし，重要プロセスの情報を置換するだけでは，カーネル空間におけるプロセスの情報の継続的な監視により，重要プロセスを特定される可能性がある．
本稿では，この問題に対処するために，プロセス情報へのアクセス制御による攻撃回避手法
について述べる．提案手法は，重要プロセスの情報への参照を制限することで，カーネル空間におけるプロセス情報の継続的な監視による重要プロセスの特定を困難にする．重要プロセスの情報へのアクセス制御は，VMM により実現する．これにより，攻撃者がカーネルモードで動作する攻撃コードを実行可能な場合においても，重要プロセスの情報の参照を制限し，重要プロセスの特定を困難にする．

2
2.1

研究背景
ウィルス対策ソフトウェアへの攻撃

ログ収集プログラムを停止するマルウェアとして，t0rnkit や dica がある．これらは，自身の隠ぺいを行うツール群を含み，自身や関連するプログラムのインストール時に，インストールの過程をシステム管理者から隠ぺいするために，ログ収集プログラムである syslog デーモンを停止することで，インストール過程におけるログ生成を防止する．
このように，マルウェアには，侵入後の活動の妨げとなるソフトウェアの停止や無効化を行う機能を持つものがある．重要サービスが攻撃を受けて停止または無効化された場合，攻撃の検知や対処が遅れ，システムへの被害が拡大する．このため，重要サービスへの攻撃によるシステムへの被害を抑制することが求められる．

2.2

重要サービスへの攻撃を防止する研究として，ホスト型侵入検知システム（以降，IDS）を VMM により実現した VMwatcher [1] がある．VMwatcher は，オペレーティングシステム（以降，OS）よりも攻撃が困難な VMM により IDS を実現することで，IDS への攻撃を困難にする．VMM を用いてカーネルレベルルートキットの実行を防止する手法として，NICKLE[2] が提案されている．NICKLE は，カーネルコードの実行を VMM により監視し，認証したカーネルコード以外の実行を防止する手法である．これらの手法は，既存手法では検知や防止が困難に VMM を用いて対処している．
攻撃者からセキュリティソフトウェアの停止を防止する手法として ANSS[3] が提案されている．ANSS は，プロセスを停止させるシステムコール呼び出しを検知し，セキュリティソフトウェアの停止を防止する．ANSS は，Windowsにおいてカーネルモードで動作するドライバとして実現されている．

2.3

ウィルス対策ソフトウェアを攻撃するマルウェ
アとして，Agobot がある．Agobot は，プロセスの一覧からプロセスの実行ファイル名を検査し，ウィルス対策ソフトウェアに利用されているプログラム名が含まれている場合は，そのプロセスを停止する機能を持つ．

既存手法

既存手法の問題点

既存手法には，重要サービスを提供する既存ソフトウェアを修正なしに利用できない問題がある．これまでにマルウェア対策やシステム管理のために多くのソフトウェアが開発されている．これらのソフトウェアは，そのソフトウェ－ 856 －

ア自身が安全な環境においては有用である．しかし，これらのソフトウェアが攻撃された場合には，システム管理者はその機能を利用できな
い．2.2 節で述べた手法のうち，既存のソフトウェアと同様の機能を VMM により実現する手法は，VMM の特徴により，攻撃による被害を受けにくい利点がある．しかし，既存ソフトウェアを VMM により再実装する工数は大きい．
このように，VMM を用いた有効な手法は提案されているものの，既存研究の多くは，既存ソフトウェアを修正なしには利用できず，その有用性を活用できていない．また，既存ソフトウェアの機能を VMM に実現するのは工数が大きい．さらに，応用プログラム（以降，AP）やカーネルとして動作する既存ソフトウェアの取得できる情報と VMM から取得できる情報にはセマンティックギャップがあるため，既存ソフトウェアと同等の機能を実現するのは難しい．

3
3.1

プロセス情報の不可視化による攻撃回避手法
目的

2.3 節の問題に対処するために，本研究は，以下を目的とする．
(1) 重要サービスへの攻撃の回避(2) 既存ソフトウェアの改変なしの利用
本研究では，攻撃の防止ではなく，重要サービスへの攻撃を回避することを目的とする．また，既存のソフトウェアと同等の機能を VMMにより実現する工数は大きい．このため，既存ソフトウェアの改変なしの利用を目的とする．

3.2

重要サービスを提供するプロセスに関する情報の不可視化VM
㔜せ䝥䝻䝉䝇

㏻ᖖ䝥䝻䝉䝇㔜せ䝥䝻䝉䝇䝁䞁䝔䜻䝇䝖䝇䜲䝑䝏䝁䞁䝔䜻䝇䝖䝇䜲䝑䝏 䝴䞊䝄✵㛫䜹䞊䝛䝹✵㛫(A-2) ഇ䛾᝟ሗ䛻⨨᥮(B-2) ᚟ඖ(A-1) ㏥㑊

(B-1) ㏥㑊ഇ䛾䝥䝻䝉䝇᝟ሗᮏ᮶䛾䝥䝻䝉䝇᝟ሗVMM

図 1 コンテキストスイッチ発生時におけるプロセス情報の置換

1 に示すとおり，提案手法は，コンテキストスイッチを契機とし，VMM によりプロセス情報を置換する．提案手法は，重要プロセスの走行中は本来のプロセス情報を利用させ，重要プロセスが走行中でない場合は，重要プロセスのプロセス情報を偽の情報に置換する．このため，重要プロセスの走行中は本来のプロセス情報を参照可能であり，プロセスの動作を妨げない．
3.3

プロセス情報の置換手法の問題

攻撃者は，カーネル空間でコードを実行可能な場合，プロセス情報の継続的な監視によりプロセス情報の置換を検出できる．これは，プロセス情報の置換手法は重要サービスを動作させるために，重要サービスの走行中は本来のプロセス情報を復元するためである．このため，プロセス情報の置換による重要サービスの不可視化は，プロセス情報の継続的な監視により，攻撃者から重要サービスを特定される可能性がある．そこで，本稿では，プロセス情報へのアクセス制御により，継続的な監視による重要サービスの特定を困難にする手法を提案する．

4

プロセス情報へのアクセス制御

プロセスに関する情報（以降，プロセス情報） 4.1 基本方式の不可視化を実現する手法として，プロセス情提案方式は，重要プロセスのプロセス情報へ報の置換手法を提案した．図 1 にプロセス情報のアクセスを監視し，アクセス元に応じて本来の置換手法を示す．プロセス情報の置換では， の情報を返却するか偽の情報を返却するかを制
重要プロセスの特定に利用されるプロセス情報御する．提案手法は，VMM を用いて実現する．
を偽の情報に置換することで，プロセス情報をこれは，カーネル空間でコードを実行する攻撃もとにした重要プロセスの特定を困難にし，重への対処である．VMM はその性質からカーネ要プロセスへの攻撃を回避する．重要プロセス
ルよりも攻撃を受けにくく，また，仮想計算機以外のプロセスを通常プロセスとした場合，図 （Virtual Machine，以降，VM）のメモリを管－ 857 －理していることから，メモリへのアクセスを制御するのに適している．また，本研究の目的は既存ソフトウェアの改変なしの利用であることから，完全仮想化を用いる．完全仮想化環境では，VM 上で動作する OS は，仮想化に対応したカーネルを用いる必要はない．このため，既存のソフトウェアを改変なしに利用できる可能性が高い．

するための関数やマクロの処理を改変し，呼び出し元のコードに応じて処理を変更する．呼び出し元のコードは，カーネルスタックに積まれた戻りアドレスを参照することで取得できる．
例えば，Linux においては，全プロセスを走査する for_each_process マクロや，構造体の先頭アドレスを算出する container_of マクロを改変することで，プロセス情報へのアクセスのうち一部を検知できる．
4.2 プロセスの識別に利用される情報ページテーブルの属性の指定は，ページテー
本研究では，VM 上で動作する OS（以降，ゲブルエントリの属性を変更し，特定のページのスト OS）として Linux を想定した場合，プロセ読み込みを制限する．重要プロセスの配置されス制御ブロック，カーネルスタック，ハードウェたページの読み込みを制限した場合，そのペーアコンテキスト，ページテーブル，および，プジの読み込みにより例外が発生するため，このロセスの利用するメモリ領域をプロセス情報と例外を検知し，ページの内容の読み込み可否をする．これらすべての情報を不可視化すること判断する．ただし，プロセス情報のサイズがペーでプロセス情報をもとにしたプロセスの特定をジサイズと異なる，またはページ境界で整列さ困難にできる．しかし，ハードウェアコンテキれていない場合は，読み込みを禁止したページ
スト，ページテーブル，およびプロセスの利用には，重要プロセスのプロセス情報だけでなく，するメモリ領域は，情報の参照や参照した情報他のプロセス情報も配置されている可能性があからプロセスを特定することが困難である．そる．この場合，重要プロセスのプロセス情報以こで，本研究では，主に，プロセス制御ブロック外を読み込む場合でも例外が発生するため，不とカーネルスタックをプロセス情報として扱う．
要な例外が発生し，必要以上に性能が低下する
これらの情報には，プロセスの利用するソケッ可能性がある．
トやファイルディスクリプタを含む．ネットワー
プロセス情報を参照する関数のフックは，実ク通信やファイルアクセスを監視することで，現が容易であり，かつアクセス制御により生じ攻撃者は，プロセスの処理内容を容易に推測でる性能低下を抑えられる．しかし，プロセス情きる．しかし，ネットワーク通信やファイルア報が配置されたメモリ領域のアドレスが攻撃者
クセスに関する情報をプロセスと対応付けるににとって既知の場合は，直接そのアドレスを参は，プロセス制御ブロックやカーネルスタック照することで，プロセス情報を攻撃者に参照さを参照する必要がある．このため，これらをプれる可能性がある．一方，ページテーブルの属ロセス情報として扱い，アクセスを制御する．
性の変更では，読み込みを禁止したページへの偽のプロセス情報は，文献 [5] で述べた情報をアクセスごとに必ず例外が発生する．このため，用いる．
プロセス情報の読み込みをもれなく検知できる．
メモリアクセスの制御
4.3
このことから，本稿における提案手法では，ペー4.3.1 メモリアクセスの検知
ジテーブルの属性の変更により，重要プロセスのプロセス情報が配置されたメモリの読み込み
プロセス情報が配置されたページへのアクセを制御する．
スを制御する方法として，以下の 2 通りの手法が考えられる．
4.3.2 プロセス情報の読み込みの制御
重要プロセスのプロセス情報へのアクセスを検知した後に，アクセスを許可したコードからの読み込みに対しては，図 2 に示すとおり，本プロセス情報を参照する関数のフックでは，来のプロセス情報を返し，アクセスを許可してカーネル内において，プロセス情報にアクセス(1) プロセス情報を参照する関数のフック(2) ページテーブルの属性の変更－ 858 －䝥䝻䝉䝇㛵㐃᝟ሗ䠄ㄞ䜏㎸䜏⚗Ṇ䠅䝔䜻䝇䝖㒊ㄞ䜏㎸䜏䜢チྍ(1) 䝥䝻䝉䝇᝟ሗ䛾䝕䞊䝍ᵓ㐀䜢䝨䞊䝆༢఩䛷㓄⨨䛧䛯ሙྜ䝥䝻䝉䝇᝟ሗ䝟䝕䜱䞁䜾(2) 㔜せ䝥䝻䝉䝇䛸㏻ᖖ䝥䝻䝉䝇䛷䝥䝻䝉䝇᝟ሗ䛾㓄⨨ሙᡤ䜢ኚ᭦䛧䛯ሙྜ

䝨䞊䝆䝃䜲䝈ㄞ䜏㎸䜏䜢⚗Ṇ䝥䝻䝉䝇᝟ሗ䜈䛾䜰䜽䝉䝇䜢チྍ䛧䛯㡿ᇦ㔜せ䝥䝻䝉䝇 ㏻ᖖ䝥䝻䝉䝇䝥䝻䝉䝇᝟ሗ䜈䛾䜰䜽䝉䝇䜢チྍ䛧䛶䛔䛺䛔㡿ᇦ㔜せ䝥䝻䝉䝇䛾䝥䝻䝉䝇᝟ሗ㏻ᖖ䝥䝻䝉䝇䛾䝥䝻䝉䝇᝟ሗ

図 2 プロセス情報の読み込みの制御いないコードからの読み込みに対しては，偽のプロセス情報を返す．これにより，本来のプロセス情報を攻撃者から隠ぺいする．アクセス元のコードがアクセスを許可したコードか否かの判定には，カーネルスタックを用いる．カーネルスタックには，カーネル内の関数の戻りアドレスが格納されている．このため，重要プロセスのプロセス情報の読み込みを検知した際に，カーネルスタックからすべての戻りアドレスを取得し，取得したすべてのアドレスがアクセスを許可した領域に含まれていた場合には，本来のプロセス情報の読み込みをエミュレートする．
そうでない場合には，偽のプロセス情報の読み込みをエミュレートする．

図 3 プロセス情報の配置方法

義し，ページサイズの N 倍になるようにパディングすることで，プロセス情報がページ単位で確保できる．また，重要プロセスと通常プロセスの確保する領域を変更し，重要プロセスのプロセス情報を特定の領域に配置することで，重要プロセスのプロセス情報とその他のデータが同じページに配置されることを防止できる．重
要プロセスのプロセス情報とその他のデータが同じページに配置されることを防止するには，重要プロセスのプロセス情報をページ境界で整列するように配置する必要がある．
上記 2 通りの方法について，プロセス情報のデータ構造をページ単位で配置する方法は，プ4.4 プロセス情報のメモリ配置の変更
ロセス情報とページが 1 対 1 対応となるため，ページ単位でメモリアクセスを制御する場合， 制御が容易になる．すなわち，特定のページにおいて例外が発生した場合にどのプロセスのププロセス情報がメモリ上にどのように配置されロセス情報の読み込みによる例外なのかの識別ているかが重要となる．ページ単位でアクセスが容易になる．一方で，データ構造がページ単制御をする場合，不要な性能低下を抑制するた位になるようにメモリを確保するため，本来はめには，重要プロセスのプロセス情報が配置さ不要な領域まで確保することになり，メモリのれるページにその他のデータが配置されないこ利用効率が低下する．重要プロセスと通常プロとが重要である．また，このためには，重要プセスでプロセス情報の配置場所を変更する方法
ロセスのプロセス情報をページ境界に整列しては，メモリの利用効率は高い．しかし，プロセ配置する必要がある．
ス情報を配置する領域を重要プロセスの領域か重要プロセスのプロセス情報が配置される
通常プロセスの領域かをプロセス情報を確保すページに他のデータを配置しないようにするにる際に決める必要があるため，重要プロセスかは，図 3 に示す 2 通りの方法が考えられる．
通常プロセスかをプロセス情報の確保時に攻撃(1) プロセス情報のデータ構造をページ単位で者から識別される可能性がある．また，プロセ
配置スの走行中に重要プロセスか通常プロセスかの(2) 重要プロセスと通常プロセスでプロセス情切り替えはできない．このため，プロセスを走報の配置場所を変更
行中に重要プロセスとして指定することはでき
プロセス情報のデータ構造をページ単位で定－ 859 －

ず，プロセスの起動時に重要プロセスを指定する必要がある．ページ単位でプロセス情報が配置されている場合には，この問題は発生しない．
以上より，制御の容易さと走行中プロセスを重要プロセスとして指定可能であるという利便性から，プロセス情報をページ単位で配置する手法を用いる．
プロセス情報をページ単位で配置するには，カーネルを改変する必要がある．プロセス情報としてプロセス制御ブロックを用いる場合を考えると，Linux においてプロセス制御ブロックは， kmem_cache_create 関数により確保された領域に配置される．そこで，この領域をはじめに確保する際に，ページ単位で整列するように領域を確保する．また，プロセス制御ブロックのサイズをページサイズにするために，本来のプロセス制御ブロックの後ろをパディングするよう，プロセス制御ブロックのデータ定義を変更する．これらにより，ページ単位でプロセス情報を確保し，かつページ境界にプロセス情報が配置されるようになる．

4.5

ページ単位のアクセス権限の設定

ページ単位でアクセス権限を設定するために，提案手法では，Extended Page Table （以降，EPT）を用いる．EPT を用いることで，ページ単位で読み込み，書き込み，および実行の権限を制御できる．そこで，ゲスト OS のプロセス情報が配置されたメモリの仮想アドレスをもとに，対応する EPT のエントリを探索し，読み込みビットを無効にする．これにより，ゲスト OS において当該ページの読み込みが発生した際に，処理が VMM に遷移する．
EPT のエントリの操作には，LibVMI[6] を用いる．LibVMI は，Virtual Machine Introspection のためのライブラリであり，管理 VM 上の応用プログラムから他の VM の情報取得やレジスタの操作が可能である．提案手法は，LibVMIを用い，VM 上の重要プロセスのプロセス情報に対応する EPT エントリの読み込みビットを無効にし，プロセス情報の読み込みを制限する．

4.6

重要プロセスの指定

4.5 節と同様，LibVMI を用いて重要プロセスを指定する．具体的には，管理 VM 上の応用
プログラムから，VM 上のプロセス一覧を取得し，一覧の中から重要プロセスを指定する．

5

おわりにプロセス情報へのアクセス制御による攻撃回避手法について述べた．提案手法は，重要プロセスのプロセス情報が配置されているページへのアクセスを検知し，許可したコードからのみ読み込みを可能にし，許可していないコードからのアクセスに対して偽のプロセス情報を返す．
これにより，カーネル空間におけるプロセス情報の継続的な監視に対しても，重要プロセスの識別を困難にし，攻撃対象の特定を困難にすることで，攻撃を回避する．残された課題として，提案手法の実現と評価がある．

参考文献[1] Jiang, X., Wang, X. and Xu, D.: Stealthy Malware Detection Through Vmm-based “Out-ofthe-box” Semantic View Reconstruction, Proc.
14th ACM Conference on Computer and Communications Security, pp. 128–138 (2007).
[2] Riley, R., Jiang, X. and Xu, D.: GuestTransparent Prevention of Kernel Rootkits
with VMM-Based Memory Shadowing, Recent Advances in Intrusion Detection, Lecture
Notes in Computer Science, Vol. 5230, pp. 1–20
(2008).
[3] Hsu, F.-H., Wu, M.-H., Tso, C.-K., Hsu, C.-H.
and Chen, C.-W.: Antivirus Software Shield
Against Antivirus Terminators, IEEE Transactions on Information Forensics and Security,
Vol. 7, No. 5, pp. 1439–1447 (2012).
[4] 佐藤将也，山内利宏: プロセス関連情報の不可視化によりプロセスの識別を困難にする攻撃回避
手法，コンピュータセキュリティシンポジウム
2013 (CSS2013) 論文集，pp. 1042–1049 (2013).
[5] Sato, M. and Yamauchi, T.: Complicating Process Identiﬁcation by Replacing Process Information for Attack Avoidance, The 9th International Workshop on Security (IWSEC2014),
Lecture Notes in Computer Science, Vol. 8389,
pp. 33–47 (2014).
[6] LibVMI Project:com/ (2015).

－ 860 －LibVMI, http://libvmi.