(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2023-12-15
(45)【発行日】2023-12-25
(54)【発明の名称】不正なメモリダンプ改変を防ぐシステムおよび方法
(51)【国際特許分類】
G06F 21/56 20130101AFI20231218BHJP
G06F 21/62 20130101ALI20231218BHJP
【FI】
G06F21/56
G06F21/62
【外国語出願】
(21)【出願番号】P 2020215245
(22)【出願日】2020-12-24
【審査請求日】2022-08-22
(32)【優先日】2020-01-10
(33)【優先権主張国・地域又は機関】US
(32)【優先日】2020-12-07
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】313015247
【氏名又は名称】アクロニス・インターナショナル・ゲーエムベーハー
(74)【代理人】
【識別番号】110002147
【氏名又は名称】弁理士法人酒井国際特許事務所
(72)【発明者】
【氏名】ウラジミール ストローゴフ
(72)【発明者】
【氏名】アレクセイ ドッド
(72)【発明者】
【氏名】セルゲイ ベロウソフ
(72)【発明者】
【氏名】スタニスラフ プロタソフ
【審査官】上島 拓也
(56)【参考文献】
【文献】特開平02-125344(JP,A)
【文献】国際公開第2012/004854(WO,A1)
【文献】特表2003-515218(JP,A)
【文献】国際公開第2019/151013(WO,A1)
【文献】特開2012-185558(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 21/56
G06F 21/62
(57)【特許請求の範囲】
【請求項1】
不正なメモリダンプ改変を防ぐ方法であって、
コンピューティングデバイスのハードウェアプロセッサによって、前記コンピューティングデバイスのメモリダンプを作成することと、
前記ハードウェアプロセッサによって、前記メモリダンプを作成するのに使用された現在のカーネル関数を特定することと、
前記ハードウェアプロセッサによって、前記コンピューティングデバイスのディスク上のカーネルイメージと、前記コンピューティングデバイスのメモリ内のカーネルイメージとを比較し、
前記ハードウェアプロセッサによって、前記比較に基づいて、前記メモリダンプの作成に関わる改変されたカーネル断片を特定し、
前記ハードウェアプロセッサによって、前記改変されたカーネル断片が、マルウェアに起因するものであると判断することにより、
前記ハードウェアプロセッサによって、前記現在のカーネル関数が前記メモリダンプを作成することを許可されていないと判断することと、
前記現在のカーネル関数が前記メモリダンプを作成することを許可されていないと判断することに応じて、
前記ハードウェアプロセッサによって、前記作成されたメモリダンプが改変されたと判断することと、
前記ハードウェアプロセッサによって、呼び出しツリーを解析して、メモリダンプを作成することを許可されている元のカーネル関数を特定することと、
前記ハードウェアプロセッサによって、真正のメモリダンプを作成するために前記元のカーネル関数を呼び出すことと、
を含む、方法。
【請求項2】
前記現在のカーネル関数が前記メモリダンプを作成することを許可されていないと判断することは、
前記ハードウェアプロセッサによって、メモリダンプをするカーネル関数を指し示すディスパッチテーブル内のエントリが改変されたと判断することを含む、請求項1に記載の方法。
【請求項3】
前記エントリが改変されたと判断することは、
前記ハードウェアプロセッサによって、初回の前記ディスパッチテーブル内のシステムコール番号に関連付けられたアドレスが、2回目の前記システムコール番号に関連付けられたアドレスと一致しないと判断することを含む、請求項2に記載の方法。
【請求項4】
前記現在のカーネル関数が前記メモリダンプを作成することを許可されていないと判断することは、
前記ハードウェアプロセッサによって、前記現在のカーネル関数のアドレスが前記コンピューティングデバイスのオペレーティングシステムカーネル範囲内にないという判断に基づく、請求項
1に記載の方法。
【請求項5】
前記呼び出しツリーを解析して、前記元のカーネル関数を特定することは、
前記ハードウェアプロセッサによって、前記呼び出しツリーのコンテンツに基づいて、前記元のカーネル関数を示すオフセットを判断することを含む、請求項1に記載の方法。
【請求項6】
不正なメモリダンプ改変を防ぐシステムであって、前記システムは、ハードウェアプロセッサを備え、前記ハードウェアプロセッサは、
コンピューティングデバイスのメモリダンプを作成し、
前記メモリダンプを作成するのに使用された現在のカーネル関数を特定し、
前記コンピューティングデバイスのディスク上のカーネルイメージと、前記コンピューティングデバイスのメモリ内のカーネルイメージとを比較し、
前記比較に基づいて、前記メモリダンプの作成に関わる改変されたカーネル断片を特定し、
前記改変されたカーネル断片が、マルウェアに起因するものであると判断することにより、
前記現在のカーネル関数が前記メモリダンプを作成することを許可されていないと判断し、
前記現在のカーネル関数が前記メモリダンプを作成することを許可されていないと判断することに応じて、
前記作成されたメモリダンプが改変されたと判断し、
呼び出しツリーを解析して、メモリダンプを作成することを許可されている元のカーネル関数を特定し、
真正のメモリダンプを作成するために前記元のカーネル関数を呼び出す、
ように構成される、システム。
【請求項7】
前記ハードウェアプロセッサは、メモリダンプをするカーネル関数を指し示すディスパッチテーブル内のエントリが改変されたと判断することによって、前記現在のカーネル関数が前記メモリダンプを作成することを許可されていないと判断するように構成される、請求項
6に記載のシステム。
【請求項8】
前記ハードウェアプロセッサは、初回の前記ディスパッチテーブル内のシステムコール番号に関連付けられたアドレスが、2回目の前記システムコール番号に関連付けられたアドレスと一致しないと判断することによって、前記エントリが改変されたと判断するように構成される、請求項
7に記載のシステム。
【請求項9】
前記ハードウェアプロセッサは、前記現在のカーネル関数のアドレスが前記コンピューティングデバイスのオペレーティングシステムカーネル範囲内にないという判断に基づいて、前記現在のカーネル関数が前記メモリダンプを作成することを許可されていないと判断するように構成される、請求項
6に記載のシステム。
【請求項10】
前記ハードウェアプロセッサは、前記呼び出しツリー内のエントリのコンテンツに基づいて前記元のカーネル関数を示すオフセットを判断することによって、前記呼び出しツリーを解析して、前記元のカーネル関数を特定するように構成される、請求項
6に記載のシステム。
【請求項11】
不正なメモリダンプ改変を防ぐためのコンピュータ実行可能命令を記憶している非一時的なコンピュータ可読媒体であって、
コンピューティングデバイスのメモリダンプを作成することと、
前記メモリダンプを作成するのに使用された現在のカーネル関数を特定することと、
前記コンピューティングデバイスのディスク上のカーネルイメージと、前記コンピューティングデバイスのメモリ内のカーネルイメージとを比較し、
前記比較に基づいて、前記メモリダンプの作成に関わる改変されたカーネル断片を特定し、
前記改変されたカーネル断片が、マルウェアに起因するものであると判断することにより、
前記現在のカーネル関数が前記メモリダンプを作成することを許可されていないと判断することと、
前記現在のカーネル関数は前記メモリダンプを作成することを許可されていないと判断することに応じて、
前記作成されたメモリダンプが改変されたと判断することと、
呼び出しツリーを解析して、メモリダンプを作成することを許可されている元のカーネル関数を特定することと、
真正のメモリダンプを作成するために前記元のカーネル関数を呼び出す、
命令を含む、非一時的なコンピュータ可読媒体。
【請求項12】
前記現在のカーネル関数が前記メモリダンプを作成することを許可されていないと判断する命令は、メモリダンプをするカーネル関数を指し示すディスパッチテーブル内のエントリが改変されたと判断する命令をさらに含む、請求項
11に記載の非一時的なコンピュータ可読媒体。
【請求項13】
前記エントリが改変されたと判断する命令は、初回の前記ディスパッチテーブル内のシステムコール番号に関連付けられたアドレスが、2回目の前記システムコール番号に関連付けられたアドレスと一致しないと判断する命令をさらに含む、請求項
12に記載の非一時的なコンピュータ可読媒体。
【請求項14】
前記現在のカーネル関数が前記メモリダンプを作成することを許可されていないと判断する命令は、前記現在のカーネル関数のアドレスが前記コンピューティングデバイスのオペレーティングシステムカーネル範囲内にないと判断する命令をさらに含む、請求項
11に記載の非一時的なコンピュータ可読媒体。
【請求項15】
前記呼び出しツリーを解析して、前記元のカーネル関数を特定する命令は、前記呼び出しツリー内のエントリのコンテンツに基づいて前記元のカーネル関数を示すオフセットを判断する命令をさらに含む、請求項
11に記載の非一時的なコンピュータ可読媒体。
【発明の詳細な説明】
【技術分野】
【0001】
本開示は、デジタルフォレンジックの分野に関し、より具体的には、不正なメモリダンプ改変を防ぐシステムおよび方法に関する。
【背景技術】
【0002】
システムメモリのライブダンプを取得することに関連するデジタルフォレンジックの主な方法の1つが、例えば、マルウェア攻撃、システムに侵入する侵入者、データ窃盗、改変(例えば、暗号化)などのデジタル犯罪を調査するために使用される場合がある。とりわけ、ライブダンプはメモリで動作する処理に関する情報を含み、そのライブダンプによって、そのような情報を解析することができる。
【0003】
ライブダンプは、動作中のシステムで作成され、他のタイプのダンプとは異なり、かかるライブダンプを受け取ったあとでもシステムが停止せず、システムクラッシュ時に作成され、かつクラッシュする前のシステムの最後の状態の情報を直ちに保存するといった特徴があるものである。ライブダンプは、オペレーティングシステムの組み込みツールを使用して作成され、その組み込みツールは、その機能の目的のために用いられる特別な方法および関数を含んでいる。
【0004】
ライブダンプには有益な特性があるものの、ルートキットなどの悪意あるプログラムがメモリダンプの情報を置き換えることにより、デジタル調査の処理を複雑にしたり、処理を不可能にしたりすることがある。ルートキットは、ライブダンプを作成するシステムコールの制御を奪う。その結果、「偽」ダンプは改変されたデータを含み、その改変されたデータでは、いかなる侵入者およびマルウェアの動作の痕跡も完全に消し去られている。
【0005】
したがって、悪意あるプログラムによるメモリダンプの改ざんを防ぐことができるシステムおよび方法が必要である。
【発明の概要】
【発明が解決しようとする課題】
【0006】
これらの課題に対処するために、本開示の例において、不正なメモリダンプ改変を防ぐ方法およびシステムを記載する。
【課題を解決するための手段】
【0007】
一例では、方法は、コンピューティングデバイスのメモリダンプを作成することと、前記メモリダンプを作成するのに使用された現在のカーネル関数を特定することとを含んでもよい。前記現在のカーネル関数は前記メモリダンプを作成することを許可されていないと判断することに応じて、前記方法は、前記作成されたメモリダンプが改変されたと判断することと、呼び出しツリーを解析して、メモリダンプを作成することを許可されている元のカーネル関数を特定することと、真正のメモリダンプを作成するために前記元のカーネル関数を呼び出すことと、を含んでよい。
【0008】
一部の例では、前記現在のカーネル関数が前記メモリダンプを作成することを許可されていないと判断することは、メモリダンプをするカーネル関数を指し示すディスパッチテーブル内のエントリが改変されたと判断することを含む。
【0009】
一部の例では、前記エントリが改変されたと判断することは、初回のディスパッチテーブル内のシステムコール番号に関連付けられたアドレスが、2回目の前記システムコール番号に関連付けられたアドレスと一致しないと判断すること、を含む。
【0010】
一部の例では、前記現在のカーネル関数がメモリダンプを作成することを許可されていないと判断することは、前記現在のカーネル関数のアドレスが前記コンピューティングデバイスのオペレーティングシステムカーネル範囲内にないという判断に基づく。
【0011】
一部の例では、前記呼び出しツリーを解析して、前記元のカーネル関数を特定することは、前記呼び出しツリー内のエントリのコンテンツに基づいて、前記元のカーネル関数を示すオフセットを判断することを含む。
【0012】
一部の例では、前記現在のカーネル関数が前記メモリダンプを作成することを許可されていないと判断することは、前記コンピューティングデバイスのディスク上のカーネルイメージと、前記コンピューティングデバイスのメモリ内のカーネルイメージとを比較することと、前記比較に基づいて、前記メモリダンプを作成するのに使用された改変されたカーネル断片を特定することと、前記改変されたカーネル断片が、マルウェアに起因するものであると判断することと、をさらに含む。
【0013】
上記の方法は、ハードウェアプロセッサを含むシステムに実装される場合があるという点に留意すべきである。あるいは、方法は、非一時的コンピュータ可読媒体のコンピュータ実行可能命令を使用して実行されてもよい。
【0014】
例示的態様の簡略化された上記概要は、本開示の基本的な理解をもたらすために提供される。本概要は、全ての企図された態様の広範な概要ではなく、また全ての態様の主要なまたは重要な要素を特定することも、本開示のいずれかまたは全ての態様の範囲を描写することも意図していない。その唯一の目的は、1つまたは複数の態様を、以下の本開示のより詳細な説明の序文として、簡略化した形で示すことである。上記の目的を達成するために、本開示の1つまたは複数の態様は、特許請求の範囲で説明され、かつ例示的に示される特徴を含む。
【図面の簡単な説明】
【0015】
本明細書に組み込まれ、かつ本明細書の一部を構成する添付図面は、発明を実施するための形態と共に本開示の1つまたは複数の例示的態様を示すものであり、それらの原理および実装形態を説明するために提供される。
【
図1】不正なメモリダンプ改変を防ぐシステムを示す図である。
【
図3】不正なメモリダンプ改変を防ぐ方法のフロー図である。
【
図4】本開示の例が実装され得る汎用コンピュータシステムの一例を示す図である。
【発明を実施するための形態】
【0016】
例示的態様について、不正なメモリダンプ改変を防ぐシステム、方法およびコンピュータプログラム製品の文脈で本明細書に記載する。以下の説明は単なる例示であり、決して限定的なものではないことを当業者であれば理解されるであろう。本開示の効果を用いることで、その他の態様も当業者によって容易に連想されるであろう。添付図面に示される例示的な態様の実装形態に、参照番号が項目ごとに付与される。図面および以下の説明を通して可能な範囲で同じ参照番号が使用され、同じ参照番号は、同一または類似の項目であることを意味する。
【0017】
メモリダンプを作成することは、ランダムアクセスメモリ(Random Access Memory:RAM)内の情報を全て取り出すことと、その情報をストレージドライブに書き込むこととを含む。開発者は、クラッシュ後のトラブルシューティング目的で、メモリダンプを使用して診断情報を収集する。オペレーティングシステムの組み込みカーネル関数を使用するのと同時に、本明細書に記載されるシステムおよび方法は、ライブメモリダンプ(具体的には、未処理ダンプおよびシステムダンプ)を作成することと、元の「良い」カーネル関数が「悪い」カーネル関数と置き換えられた場合に元の「良い」カーネル関数を見つけてダンプを手に入れることによって悪意ある改変を防ぐことと、を含む。
【0018】
図1は、メモリダンプの改ざんを防ぐためのシステム100を示すブロック図である。システム100は、コンピューティングデバイス102を含み、該コンピューティングデバイス102は、パーソナルコンピュータ、サーバなどを含んでもよく、該コンピューティングデバイス102は、コンピュータ処理装置(「Computer Processing Unit:CPU」)およびメモリを備え、該メモリは、種々のタスクを行うソフトウェア(例えば、オペレーティングシステム(Operating System:OS)ソフトウェア、アプリケーションソフトウェアなど)を備えてもよい。コンピューティングデバイス102のデータは、デバイス自体のメモリ、およびサーバ104、コンパクトディスク、フラッシュドライブ、光ディスクなどの他の外部デバイスに記憶されてよい。
【0019】
本開示においては、コンピューティングデバイス102のメモリから送出されるメモリダンプ106は、ネットワーク108を介してサーバ104に伝送される。ネットワーク108は、インターネット、モバイルフォンネットワーク、データネットワーク(例えば、4GまたはLTEネットワーク)、ブルートゥース(登録商標)、またはこれらの任意の組み合わせであってもよい。例えば、サーバ104は、インターネットを介してアクセスされるクラウドコンピューティング環境の一部であるか、またはコンピューティングデバイス102を伴うローカルネットワーク(Local Area Network:LAN)の一部である場合がある。サーバ104とコンピューティングデバイス102とをネットワーク108へ接続するラインは、通信経路を意味し、この通信経路は、自由空間接続(例えば、ワイヤレス信号用の)と物理的接続(例えば、光ファイバーケーブル)との任意の組み合わせを含んでもよい。一部の例では、ダンプ106は、個別のエンティティとしてサーバ104に転送されてよく、バックアップアーカイブに含まれてもよく、ローカルに記憶されるか、またはクラウドに転送されてもよい。
【0020】
複数のサーバ104が存在する可能性があるが、図面を過度に複雑にすることを回避するために、
図1には1つのみを示していることに留意する必要がある。例えば、サーバ104は、分散したクラウドクラスタ内にある複数のサーバを意味する場合がある。サーバ104は、(例えば、
図4に示すような)任意の数の物理的コンポーネントを備えていてもよい。例えば、サーバ104は、プロセッサ、物理ブロック記憶デバイス(例えば、ハードディスクドライブ(Hard Disk Drives:HDD)、ソリッドステートドライブ(Solid State Drives:SSD)、フラッシュドライブ、SMRディスクなど)、またはメモリ(例えば、ランダムアクセスメモリ(RAM))、I/Oインターフェースコンポーネントなどのいくつかの物理的コンポーネントを備えていてもよい。
【0021】
メモリダンプ106は、システムデータ、ユーザデータ、アプリケーション、システムファイル、基本設定、文書、メディアなどを含む任意のタイプのデータであってもよい。コンピューティングデバイス102は、バックアップスケジュールに従ってメモリダンプ106をサーバ104の記憶装置に送信してもよく、該バックアップスケジュールは、メモリダンプ106に含まれる特定のデータ、およびデータがバックアップされる必要がある頻度を示すものである。
【0022】
前述したように、バックアップデータによって、システム(例えば、コンピューティングデバイス102)の情報を保存することは可能であるが、メモリダンプは侵入者によって改ざんされやすい。改ざんは、データ窃盗および不正なデータ改変(例えば、暗号化、悪意あるエージェントをメモリダンプに埋め込むことなど)を伴う場合がある。したがって、デジタルフォレンジックエージェント110が、デジタルフォレンジック用のデータの収集、および、その後に続く処理を管理するように構成される。デジタルフォレンジックエージェント110は、独立したプログラム、またはアンチウイルスソフトウェアの一部であってもよい。一部の例では、デジタルフォレンジックエージェント110は、シンクライアントとしてコンピューティングデバイス102上に、およびシッククライアントとしてサーバ上にインストールされる。
図1で論じる例では、デジタルフォレンジックエージェント110は、コンピューティングデバイス102にインストールされている。
【0023】
デジタルフォレンジックエージェント110は、フォレンジック監視モジュール112とアンチフォレンジック保護モジュール114の2つのコンポーネントを備える。フォレンジック監視モジュール112は、ライブダンプを作成するカーネルAPIを呼び出すように構成されてよい。一部の例では、モジュール112は、(例えば、ユーザから)要求を受信することに応じて、またはデジタルフォレンジック調査で使用される必要があるコンピューティングデバイス102のデータ(例えば、メモリダンプ106に含まれることになるデータ)を監視および検出することに基づいて、カーネルAPIを呼び出してもよい。アンチフォレンジック保護モジュール114は、マルウェア動作の痕跡を消し去ることを阻止するように構成されたドライバであってもよい。このドライバは、メモリダンプ106のデータが、マルウェアによって改変または破壊されたかどうかを判断し、元の損なわれていないデータを見つけて、復元する。
【0024】
メモリダンプを取得するための2つのアプローチについて論ずる。第1アプローチは、システムサービス記述子テーブル(System Service Descriptor Table:SSDT)を介するものであり、第2アプローチは、未処理ダンプを使用するものである。本開示で提示する例は、Windows(登録商標)オペレーティングシステムに関連する。しかし、当業者であれば、どのオペレーティングシステムにも該技術を適用できることを理解されるであろう。
【0025】
第1アプローチでは、SSDTなどの内部ディスパッチテーブルを考慮に入れる。SSDTは、システムコールをディスパッチするためにWindows(商標)オペレーティングシステムによって使用されるカーネル関数ポインタのテーブルである。具体的には、SSDTの各エントリが、特定のシステムコールに対するカーネル関数を指し示す。一シナリオでは、コンピューティングデバイス102のソフトウェアアプリケーション/プロセスは、システムコール要求を使用してシステムコールを呼び出してよい。要求に応じて、コンピューティングデバイス102のCPUは、ユーザモードからカーネルモードに切り替え、システムコール番号を読み出すシステムコールディスパッチ関数を実行する。システムコール番号は、一意の整数であり、オペレーティングシステムの各システムコールに割り当てられている。x86では、システムコール番号は、eaxレジスタを介してカーネルに提供される(例えば、ユーザ空間が、eaxに所望のシステムコールに対応する番号を入れる)。ディスパッチ関数は、SSDTのインデックスとして呼び出し番号を使用する。SSDTからポインタ値を読み出すことに応じて、ディスパッチ関数は、エントリに関連するカーネル内のカーネル関数に実行を転送する。
【0026】
SSDTは、主要なカーネル関数の重要なメモリアドレスを含んでいるので、SSDTは、ルートキットなどの悪意あるエンティティによってフッキングされる一般的なターゲットである。フッキングとは、関数呼び出し、イベント、メッセージなどをインターセプトすることによって、ソフトウェア(例えば、アプリケーション、オペレーティングシステムなど)を変更することを意味する。例えば、ルートキットは、それ自体のアドレスと既存のカーネル関数を置き換えることがある。このようにして、アプリケーションが特定のカーネル関数に対してシステムコールを呼び出すときに、ルートキットコードが代わりに読み込まれる。
【0027】
より具体的な例を提示する。SSDT構造に対するポインタは、(コンピューティングデバイス102のオペレーティングシステムによっては)KeServiceDescriptorTableであってもよい。Windowsでは、WinDbgを使用して、コマンド「dd dwo(KeServiceDescriptorTable) L100」によって、SSDT構造の初めの100個のDWORDがリスト化される。DWORDとは、ダブルワードのことであり、レジストリエディタによって取り扱われる5つの主要なデータタイプの中の1つである。DWORD値は、最大32ビットを保持することができ、それは、レジストリによって10進数または16進数の値で表される。説明を簡単にするために、ごく少ないアドレスのみを選んで、下記に例として示す。ルートキットが作動していない場合(例えば、最初は)、出力は、
…80501dcc 80607ac8 8056f074 805b3de0 8056f3ca…
である場合がある。
しかし、ルートキットが作動している場合(例えば、その後)、コマンドの出力は、
…80501dcc 80607ac8 f7c38486 805b3de0 8056f3ca…
である場合がある。
これらの2つの出力を比較すると、明らかにメモリアドレス「8056f074」が、「f7c38486」に置き換えられたことが分かる。システムコール番号は、どちらのアドレスも同じ(例えば、55)である。したがって、システムコール番号を参照することによって、「f7c38486」に置き換わったカーネル関数が呼び出される。
【0028】
したがって、デジタルフォレンジックエージェント110のアンチフォレンジック保護モジュール114は、メモリダンプを作成するカーネル関数(例えば、NtSystemDebugControl)を指し示すSSDT内のエントリが改変されたかどうかをチェックする。
【0029】
先の例を参照すると、NtSystemDebugControlは、メモリアドレス「8056f074」に関連付けられている可能性がある。メモリアドレス「f7c38486」は、未知のカーネル関数「MalwarePatch」に対応している可能性がある。アンチフォレンジック保護モジュール114は、未知のカーネル関数「MalwarePatch」を特定して、そのカーネル関数がNT系OSカーネル範囲内のものであるかどうかを判断することによって、カーネル関数の真偽をチェックする。カーネル関数がNT系OSカーネル範囲内のものであるかどうかを判断することは、NT系OSカーネル(例えば、一部の例では、複数の範囲)の開始および終了アドレスをチェックすることと、そのカーネル関数アドレスが、それらの範囲のうち1つの中のものであるかどうかをチェックすることと、を含む。
【0030】
一部の例では、アンチフォレンジック保護モジュール114は、NtSystemDebugControlに対応するSSDTエントリが上述したような「MalwarePatch」ではなく真正のカーネルコードを本当に指し示しているかどうかを確認してもよい。改変がSSDTにおいて検出され、カーネル関数が真正のものではない(すなわち、NT系OSカーネル範囲内にない)と見なされる場合、真のカーネル関数NtSystemDebugControlを見つけ出すために、オフセット(例えば、オフセットのメモリコンテンツが真のカーネル関数を指し示しているサービスの呼び出し番号)がアンチフォレンジック保護モジュール114によって使用される。アンチフォレンジック保護モジュール114は、所定の深さの呼び出しツリーを構築して、ツリーを通して元のカーネル関数を見つけ出すことによって真のカーネル関数を明確に見つけ出す(詳細は
図2で説明する)。
【0031】
メモリダンプを取得する第2アプローチは、未処理ダンプを取得することを伴う。このアプローチでは、フォレンジック監視モジュール112は、物理的メモリの範囲と、メモリダンプ内のデータのコンテンツとの両方を取得する。フォレンジック監視モジュール112は、WindowsNT系OSカーネルの「MmGetPhysicalMemoryRanges」のようなインターフェースを使用して、その範囲を取得してよい。第1アプローチと同様に、アンチフォレンジック保護モジュール114は、コンピューティングデバイス102のオペレーティングシステムカーネルにアクセスして、現在のカーネル関数(すなわち、メモリダンプを作成したもの)を見つけ出し、かつ、そのカーネル関数が、元のカーネル関数(すなわち、真正のカーネル関数)であるかどうかを判断する。一部の例では、アンチフォレンジック保護モジュール114は、ディスク上のカーネルイメージと、メモリ内のカーネルイメージとを比べて、偽のダンプを作成するマルウェアによって改変されたカーネル断片を検出してもよい。例えば、アンチフォレンジック保護モジュール114は、メモリ内のMmGetPhysicalMemoryRangesと、NT系OSkrnl.exe(または別のNT系OSカーネル主要モジュール)内のMmGetPhysicalMemoryRangesとを比べてもよい。
【0032】
改ざんが検出されない場合、カーネル関数が呼び出される。そうでない場合、アンチフォレンジック保護モジュール114は、動的な逆アセンブルを使用して呼び出しツリーを取得し、元の「良い」カーネル関数に対応するメモリの断片を見つけ出す。動的な逆アセンブルとは、実行の間の、デバッガ、ファイルなどの外部ツールによる監視を指す。元のカーネル関数は、改ざんされていない真正のメモリダンプを作成するために呼び出される。カーネル関数のアドレスは、開始アドレス、および呼び出しツリーの頂点である。
【0033】
マルウェアパッチングの別の技術としては、悪意あるソフトウェアによってNtSystemDebugControlに施されることがある「スプライシング」がある。スプライシングでは、悪意あるソフトウェアは、SSDT内のポインタを変更することなく、空間内のNtSystemDebugControlの真のコードをパッチする。アンチフォレンジック保護モジュール114は、MmGetPhysicalMemoryRanges呼び出しシーケンスの保護に関して上述したのと同じ方式で、そのような攻撃を検出してもよく、それは、メモリ内のNtSystemDebugControlコードに一致する断片と、ディスクからのカーネルレトリーバのイメージ内のNtSystemDebugControlコードに一致する断片を比べることによって行われる。例えば、アンチフォレンジック保護モジュール114は、カーネルデバッガコマンド「dd nt!ZwSystemDebugControl」を使用してメモリ内のNtSystemDebugControlの位置を見つけ出し、一定の命令が可変的なオフセットおよび調節を含むことを考慮に入れながら、バイト範囲を比べてもよい。なお、ZwSystemDebugControlは、NtSystemDebugControlに対するエントリに対応する出力されたカーネル名であるという点に留意すべきである。
【0034】
図2は、呼び出しツリー200を示すブロック図である。アンチフォレンジック保護モジュール114は、呼び出しツリーを解析して、メモリダンプを作成することを許可されている元のカーネル関数を特定する。ライブダンプキャプチャ経路上の元のカーネル関数を見つけ出して使用するために、呼び出しツリー200を走査する例を考察する。この例では、NtSystemDebugControlが、SSDTを介してフックされて、元のNtSystemDebugControl内のDbgkCaptureLiveDumpに対する呼び出しが、HookedDbgkCaptureLiveDumpに対する呼び出しと置き換えられると仮定する。
【0035】
アンチフォレンジック保護モジュール114は、破線で示されている呼び出しツリー200の経路に沿ってSSDTから開始して、メモリダンプが作成されたときにそのメモリダンプがフックされたカーネル関数から生成されたものかどうかを確認してもよい。例えば、呼び出しツリー200の経路は、NtSystemDebugControlに対する呼び出しを含むHookedNtSystemDebugControlで開始する。元のNtSystemDebugControlがフックされたために、NtSystemDebugControlは、DbgkCaptureLiveDumpではなくHookedDbgkCaptureLiveDumpを呼び出す。HookedDbgkCaptureLiveDumpは、メモリダンプを作成するように元のDbgkCaptureLiveDumpを呼び出す。次いで、関数ForgedLiveDumpPostProcessを使用して、HookedDbgkCaptureLiveDumpはメモリダンプを改変する。HookedDbgkCaptureLiveDumpのその改ざんの完了によって、(元の)NtSystemDebugControlがその実行を完了して、HookedNtSystemDebugControlがForgedDumpPostProcessを呼び出すが、このForgedDumpPostProcessは、キャプチャしたダンプを改ざん/改悪することがある別の悪意ある関数である。上記のことから分かるように、元のカーネル関数は、DbgkCaptureLiveDumpであり、かつ、現在のカーネル関数は、HookedDbgkCaptureLiveDumpであるが、この現在のカーネル関数は、メモリダンプを作成することを許可されていないものである。
【0036】
より詳細には,アンチフォレンジック保護モジュール114は、SSDTから元の内部呼び出しまでの呼び出しチェーンを走査してもよい。アンチフォレンジック保護モジュール114は、メモリとディスクを比べることによって、インストールされたフックの場所を検出してもよい。例えば、メモリ内のカーネルイメージに従って、NtSystemDebugControlは、DbgkCaptureLiveDumpではなくHookedDbgkCaptureLiveDumpを呼び出す。ディスク上のカーネルイメージでは、NtSystemDebugControlは、呼び出すのに適したDbgkCaptureLiveDumpを代わりに呼び出す場合がある。アンチフォレンジック保護モジュール114は、次いで、ディスクイメージから元の呼び出しを復元する呼び出し経路を再構築してもよい。呼び出しツリー200の経路の復元に基づいて、SSDT内のHookedNtSystemDebugControlに対するポインタは、NtSystemDebugControlに置き換えられ(最初の星印を参照)、HookedDbgkCaptureLiveDumpに対する呼び出しは、DbgkCaptureLiveDumpに置き換えられる(2つめの星印を参照)。このようにして、HookedNtSystemDebugControlがスキップされるので、HookedDbgkCaptureLiveDumpは呼び出されない。最後に、アンチフォレンジック保護モジュール114は、元のカーネル関数を使用して、(呼び出しツリー200の実線矢印に沿って)真正のメモリダンプの作成を促進することができる。
【0037】
図3は、不正なメモリダンプ改変を防ぐ例示的方法300のフロー図を示す。302で、フォレンジック監視モジュール112は、コンピューティングデバイス(例えば、コンピューティングデバイス102)のメモリダンプを作成する。304で、アンチフォレンジック保護モジュール114は、メモリダンプを作成するのに使用された現在のカーネル関数を特定する。306で、アンチフォレンジック保護モジュール114は、現在のカーネル関数がメモリダンプを作成することを許可されているかどうかを判断する。現在のカーネル関数が許可されているという判断に応じて、方法300は終了する。現在のカーネル関数は許可されていないと判断することに応じて、方法300は、308に進み、アンチフォレンジック保護モジュール114は、メモリダンプが改変されたと判断する。310で、アンチフォレンジック保護モジュール114は、呼び出しツリーを解析して、メモリダンプを作成することを許可されている元のカーネル関数を特定する。312で、フォレンジック監視モジュール112は、真正のメモリダンプを作成するために元のカーネル関数を呼び出す。314で、フォレンジック監視モジュール112は、真正のメモリダンプを受け取る。
【0038】
図4は、例示的態様による、不正なメモリダンプ改変を防ぐシステムおよび方法が実装されてよいコンピュータシステム20を示すブロック図である。コンピュータシステム20は、例えば、デスクトップコンピュータ、ノートブックコンピュータ、ラップトップコンピュータ、モバイルコンピューティングデバイス、スマートフォン、タブレットコンピュータ、サーバ、メインフレーム、埋め込み型デバイスなどの複数のコンピューティングデバイスの形態または単一のコンピューティングデバイスの形態、およびコンピューティングデバイスの他の形態、であってもよい。
【0039】
示すように、コンピュータシステム20は、中央演算処理装置(CPU)21、システムメモリ22、および、中央演算処理装置21に関連するメモリを含む種々のシステムコンポーネントを接続しているシステムバス23を含む。システムバス23は、バスメモリまたはバスメモリコントローラ、周辺バス、および任意の他のバスアーキテクチャと相互作用することが可能なローカルバスを含んでもよい。バスの例としては、PCI、ISA、PCI-Express、HyperTransport(商標)、InfiniBand(商標)、シリアルATA、I
2C、およびその他の好適なインターコネクトなどを挙げてよい。中央演算処理装置21(プロセッサとも称される)は、単一または複数のコアを有する単一または複数のプロセッサのセットを含んでもよい。プロセッサ21は、本開示の技術を実装する1つまたは複数のコンピュータ実行可能コードを実行してもよい。例えば、
図1から2にて論じた任意のコマンド/ステップは、プロセッサ21によって実施されてよい。システムメモリ22は、本明細書で用いられるデータおよび/またはプロセッサ21によって実行可能なコンピュータプログラムを記憶する任意のメモリであってよい。システムメモリ22としては、ランダムアクセスメモリ(RAM)25などの揮発性メモリ、および読取り専用メモリ(Read-Only Memory:ROM)24、フラッシュメモリなどの不揮発性メモリ、またはこれらの任意の組み合わせを挙げてもよい。基本入出力システム(Basic Input/Output System:BIOS)26は、例えば、ROM24を使用してオペレーティングシステムをロードするときなど、コンピュータシステム20の各要素間の情報の伝送のための基本手順を記憶していてもよい。
【0040】
コンピュータシステム20は、1つまたは複数のリムーバブル記憶デバイス27、1つまたは複数の非リムーバブル記憶デバイス28、またはこれらの組み合わせなどの1つまたは複数の記憶デバイスを含んでもよい。1つまたは複数のリムーバブル記憶デバイス27および非リムーバブル記憶デバイス28は、記憶インターフェース32を介してシステムバス23に接続される。一例では、記憶デバイスおよび対応するコンピュータ可読記憶媒体は、コンピュータシステム20のコンピュータ命令、データ構造、プログラムモジュール、および他のデータの記憶装置向けの電力独立型モジュールである。システムメモリ22、リムーバブル記憶デバイス27および非リムーバブル記憶デバイス28は、種々のコンピュータ可読記憶媒体を使用してもよい。コンピュータ可読記憶媒体の例としては、例えば、キャッシュ、SRAM、DRAM、ゼロコンデンサRAM、ツイントランジスタRAM、eDRAM、EDO-RAM、DDR-RAM、EEPROM、NRAM、RRAM(登録商標)、SONOS、PRAMなどのマシンメモリ、ソリッドステートドライブ(SSD)またはフラッシュドライブのようなフラッシュメモリまたはその他のメモリ技術、ハードディスクドライブまたはフロッピー(登録商標)ディスクのような磁気カセット、磁気テープ、および磁気ディスク記憶装置、コンパクトディスク(Compact Disks Read Only Memory:CD-ROM)またはデジタル多用途ディスク(Digital Versatile Disks:DVD)のような光記憶装置、および所望のデータを記憶するために使用することができ、かつコンピュータシステム20によってアクセス可能な任意の他の媒体が挙げられる。
【0041】
コンピュータシステム20のシステムメモリ22、リムーバブル記憶デバイス27、および非リムーバブル記憶デバイス28は、オペレーティングシステム35、追加のプログラムアプリケーション37、他のプログラムモジュール38およびプログラムデータ39を記憶するために使用されてよい。コンピュータシステム20は、例えば、キーボード、マウス、スタイラス、ゲームコントローラ、音声入力デバイス、タッチ入力デバイスなどの、入力デバイス40からのデータを通信するための周辺インターフェース46、または、例えばシリアルポート、パラレルポート、ユニバーサルシリアルバス(USB)または他の周辺インターフェースなどの1つまたは複数のI/Oポートを介した、プリンタまたはスキャナなどの他の周辺デバイスを含んでもよい。例えば1つまたは複数のモニタ、プロジェクタまたは統合ディスプレイなどのディスプレイデバイス47は、例えばビデオアダプタなどの出力インターフェース48を通してシステムバス23に接続されてもよい。ディスプレイデバイス47に加えて、コンピュータシステム20は、例えばスピーカおよび他の音響映像デバイスなどの他の周辺出力デバイス(図示せず)を搭載してもよい。
【0042】
コンピュータシステム20は、1つまたは複数のリモートコンピュータ49へのネットワーク接続を使用して、ネットワーク環境で動作してよい。(1つまたは複数の)リモートコンピュータ49は、コンピュータシステム20の特徴で記載した上述の各要素のほとんどまたは全てを備えるローカルコンピュータ・ワークステーションまたはサーバであってもよい。例えば、ルータ、ネットワーク局、ピアデバイスまたは他のネットワークノードなどのその他のデバイスが、コンピュータネットワーク内に存在する場合があるが、これらに限定されない。コンピュータシステム20は、ローカルエリアコンピュータネットワーク(LAN)50、広域コンピュータネットワーク(Wide-Area computer Network:WAN)、イントラネットおよびインターネットなどの1つまたは複数のネットワークを介して、リモートコンピュータ49と通信するための1つまたは複数のネットワークインターフェース51またはネットワークアダプタを含んでもよい。ネットワークインターフェース51の例としては、イーサネット(登録商標)インターフェース、フレームリレーインターフェース、SONETインターフェースおよび無線インターフェースを挙げてもよい。
【0043】
本開示の態様は、システム、方法、および/またはコンピュータプログラム製品であってもよい。コンピュータプログラム製品は、プロセッサに本開示の態様を実行させるコンピュータ可読プログラム命令を有する、コンピュータ可読記憶媒体(またはメディア)を含んでもよい。
【0044】
コンピュータ可読記憶媒体は、命令またはデータ構造の形態でプログラムコードを保持し、記憶することができる有形デバイスであってもよく、コンピューティングシステム20などのコンピューティングデバイスのプロセッサによってアクセス可能なものである。コンピュータ可読記憶媒体は、電子記憶デバイス、磁気記憶デバイス、光記憶デバイス、電磁記憶デバイス、半導体記憶デバイス、またはこれらの任意の好適な組み合わせであってもよい。例として、このようなコンピュータ可読記憶媒体は、ランダムアクセスメモリ(RAM)、読取り専用メモリ(ROM)、EEPROM、ポータブルコンパクトディスク読取り専用メモリ(CD-ROM)、デジタル多用途ディスク(DVD)、フラッシュメモリ、ハードディスク、ポータブルコンピュータ・ディスケット、メモリースティック、フロッピーディスク、あるいは、例えば命令が記録された、パンチカードまたは溝内の隆起構造などの、機械的にコード化されたデバイスが挙げられる。本明細書で使用する場合、コンピュータ可読記憶媒体とは、それ自体が、例えば、電波またはその他の自ら伝搬する電磁波、導波管または伝送媒体を通して伝搬する電磁波、あるいは有線によって伝送される電気信号などの一時的な信号であると、解釈されるものではない。
【0045】
本明細書に記載されるコンピュータ可読プログラム命令は、コンピュータ可読記憶媒体から対応するコンピューティングデバイスに、もしくは、例えば、インターネット、ローカルエリアネットワーク、広域ネットワークおよび/または無線ネットワークなどのネットワークを介して外部コンピュータまたは外部記憶デバイスにダウンロードされ得る。ネットワークは、銅製の伝送ケーブル、光伝送ファイバ、ワイヤレス伝送、ルータ、ファイアウォール、スイッチ、ゲートウェイコンピュータおよび/またはエッジサーバを含んでもよい。各コンピューティングデバイスのネットワークインターフェースは、ネットワークからコンピュータ可読プログラム命令を受信して、対応するコンピューティングデバイス内部のコンピュータ可読記憶媒体の記憶領域に、コンピュータ可読プログラム命令を転送する。
【0046】
本開示の動作を実行するためのコンピュータ可読プログラム命令は、組み立て命令、命令セットアーキテクチャ(Instruction-Set-Architecture:ISA)命令、機械命令、機械依存命令、マイクロコード、ファームウェア命令、ステート設定データ、あるいはソースコードまたはオブジェクトコードであってもよく、これらの命令は、オブジェクト指向プログラミング言語、および従来の手続き型プログラミング言語などの、1つまたは複数のプログラミング言語の任意の組み合わせで書き込まれる。コンピュータ可読プログラム命令は、全面的にユーザのコンピュータで、部分的にユーザのコンピュータで、スタンドアロンソフトウェアパッケージとして、部分的にユーザコンピュータと部分的にリモートコンピュータとで、もしくは全面的にリモートコンピュータまたはサーバで、実行されてよい。後半のシナリオでは、リモートコンピュータは、LANまたはWANなどの任意のタイプのネットワークを通してユーザのコンピュータに接続されているか、または、接続は、外部コンピュータに対して(例えば、インターネットを通して)構築されてもよい。一部の実施形態では、例えば、プログラマブル論理回路、フィールドプログラマブルゲートアレイ(Field-Programmable Gate Arrays:FPGA)またはプログラマブル・ロジックアレイ(Programmable Logic Arrays:PLA)などの電子回路は、本開示の態様を実施するために、コンピュータ可読プログラム命令の状態情報を利用して、コンピュータ可読プログラム命令を実行し、電子回路をパーソナライズしてもよい。
【0047】
種々の態様では、本開示に記載されるシステムおよび方法は、モジュールとして扱われる場合がある。本発明で使用する場合、用語「モジュール」は、例えば、特定用途向け集積回路(Application Specific Integrated Circuit:ASIC)またはFPGAなどのハードウェアを使用して、または、ハードウェアとソフトウェアとの組み合わせとして、例えば、マイクロプロセッサシステム、および(実行中に)マイクロプロセッサシステムを特殊目的デバイスに変換するモジュール機能を遂行する命令のセットによって、実装される実世界デバイス、コンポーネント、またはコンポーネントの機構を意味する。モジュールはまた、単独でハードウェアによって促進される特定の機能と、ハードウェアとソフトウェアとの組み合わせによって促進される他の機能との、2つの組み合わせとして実装されてもよい。特定の実装形態では、少なくとも一部、および場合によっては、全てのモジュールは、コンピュータシステムのプロセッサで実行されてよい。したがって、各モジュールは、様々な好適な構成で実現される可能性があり、本明細書に例示されるいずれの特定の実装にも限定されるべきではない。
【0048】
説明の明瞭さのために、態様の決まりきった特徴の全てを本明細書に開示してはいない。本開示のいずれかの実際の実装形態を開発する際に、開発者の特定の目的の達成のために、非常に多くの実装形態固有の決定が行われる必要があり、これらの特定の目的は、異なる実装形態および異なる開発者によって変更されることを理解されるであろう。このような開発作業は、複雑であり、かつ時間がかかる可能性があるが、それでも本開示の効果を用いる当業者にとって、そのような作業は、日常的技術的業務であるものと理解される。
【0049】
さらに、本明細書で用いる表現や用語は説明上のものであって、限定されることを意図しておらず、本明細書の用語や表現は、当業者の知見と組み合わされて、本明細書で提示する教示および指導に照らして当業者によって解釈されるものと理解すべきである。加えて、明示的な記載がない限り、本明細書または特許請求の範囲におけるいかなる用語も、一般的でない、あるいは特別な意味を持つものと見なされることを意図していない。
【0050】
本明細書に開示される様々な態様は、例として本明細書で言及される公知のモジュールの、現在および将来における均等物を包括する。さらに、態様および応用例を示し、かつ説明したが、本明細書に開示された発明の概念から逸脱することなく、上記よりも多くの変更が可能であることは、本開示の利益を用いる当業者には明らかであろう。