(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-09-05
(45)【発行日】2024-09-13
(54)【発明の名称】マルウェア検出システム
(51)【国際特許分類】
G06F 21/56 20130101AFI20240906BHJP
【FI】
G06F21/56 360
(21)【出願番号】P 2023547348
(86)(22)【出願日】2022-02-07
(86)【国際出願番号】 US2022015448
(87)【国際公開番号】W WO2022170170
(87)【国際公開日】2022-08-11
【審査請求日】2023-08-02
(32)【優先日】2021-02-08
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】523293965
【氏名又は名称】ヴァリ サイバー インコーポレイテッド
(74)【代理人】
【識別番号】110002321
【氏名又は名称】弁理士法人永井国際特許事務所
(72)【発明者】
【氏名】ガディエント,オースティン ジェームス
(72)【発明者】
【氏名】リーヴス,ドナルド ベンソン
(72)【発明者】
【氏名】ガディエント,アンソニー ジェームス
【審査官】辻 勇貴
(56)【参考文献】
【文献】特開2017-102823(JP,A)
【文献】特表2017-527931(JP,A)
【文献】特表2020-522808(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 21/56
(57)【特許請求の範囲】
【請求項1】
悪意のあるアクティビティを検出するための方法であって、
ユーザ空間において実行する挙動モニタによって、前記ユーザ空間において実行する複数のプロセスに対応する複数のフィルタを生成することと、
前記複数のプロセスのうちの第1のプロセスによって、カーネル空間における前記複数のフィルタのうちの対応するフィルタにシステムコールを送信することと、
前記複数のプロセスのうちの前記第1のプロセスによって、前記対応するフィルタから信号を受信することであって、前記信号は、前記第1のプロセスに、前記システムコールにおいて発行された引数を分析するように促す、受信することと、
前記受信することに応じて、前記第1のプロセスによって、前記システムコールにおいて発行された前記引数を分析することであって、前記引数を分析することは、
少なくとも1つのファイルおよび/またはデータが、前記第1のプロセス、または前記第1のプロセスに関連するプロセスによって、変更されたことを判定することを含み、
前記第1のプロセスによって、悪意のあるアクティビティに前記引数が関連付けられ得ると判定することと、
前記判定することに応じて、前記第1のプロセスによって、イベントを生成し、前記イベントを前記挙動モニタに送信することと、
前記挙動モニタによって、前記イベントを分析して、悪意のあるアクティビティに前記イベントが関連付けられているか否かを判定することであって、前記イベントを分析することは、
前記第1のプロセスによって変更される前に、前記少なくとも1つのファイルおよび/またはデータのコピーを生成することと、
前記少なくとも1つのファイルの前記コピーおよび/またはデータを、バックアップフォルダまたはシステムに保存することを含み、
悪意のあるアクティビティに前記イベントが関連付けられていると判定することに応じて、
前記挙動モニタによって、前記第1のプロセスに関連付けられたプロセスグループの実行を停止させることと、
前記挙動モニタによって、前記バックアップフォルダまたは前記システムから、前記少なくとも1つのファイルの、前のバージョンを復元することとを含む、方法。
【請求項2】
前記挙動モニタによって、前記第1のプロセスが変更したファイルおよび/またはデータのコピーを保存することをさらに含む、請求項1に記載の方法。
【請求項3】
前記挙動モニタによって、前記第1のプロセスが削除したファイルおよび/またはデータのコピーを保存することをさらに含む、請求項1に記載の方法。
【請求項4】
前記ユーザ空間において実行する前記挙動モニタによって、前記ユーザ空間において実行する前記複数のプロセスに対応する前記複数のフィルタを生成することは、
前記第1のプロセスの実行を一時停止することと、
前記第1のプロセスにコードを挿入することとを含み、前記コードは、前記第1のプロセス内にローカルハンドラを、前記カーネル空間に、前記対応するフィルタを生成する、請求項1に記載の方法。
【請求項5】
前記第1のプロセスに前記コードを挿入することは、
前記第1のプロセスに関連付けられたコードの少なくとも第1の部分を上書きすることと、
前記対応するフィルタが前記カーネル空間において生成された後、前記コードの前記第1の部分を復元することとを含む、請求項4に記載の方法。
【請求項6】
前記第1のプロセスは、コンテナにおいて実行する、請求項1に記載の方法。
【請求項7】
前記プロセスグループは、子/親関係を共有するプロセスの集合である、請求項1に記載の方法。
【請求項8】
1つまたは複数のプロセッサによって実行されると、コンピュータシステムに動作を実行させる命令を含む、非一時的なコンピュータ可読媒体であって、前記動作は、
ユーザ空間において実行する挙動モニタによって、前記ユーザ空間において実行する複数のプロセスに対応する複数のフィルタを生成することと、
前記複数のプロセスのうちの第1のプロセスによって、カーネル空間における前記複数のフィルタのうちの対応するフィルタにシステムコールを送信することと、
前記複数のプロセスのうちの前記第1のプロセスによって、前記対応するフィルタから信号を受信することであって、前記信号は、前記第1のプロセスに、前記システムコールにおいて発行された引数を分析するように促す、受信することと、
前記受信することに応じて、前記第1のプロセスによって、前記システムコールにおいて発行された前記引数を分析することであって、前記引数を分析することは、
少なくとも1つのファイルが、前記第1のプロセス、または前記第1のプロセスに関連するプロセスによって、変更されたことを判定することを含み、
前記第1のプロセスによって、悪意のあるアクティビティに前記引数が関連付けられ得ると判定することと、
前記判定することに応じて、前記第1のプロセスによって、イベントを生成し、前記イベントを前記挙動モニタに送信することと、
前記挙動モニタによって、前記イベントを分析して、悪意のあるアクティビティに前記イベントが関連付けられているか否かを判定することであって、前記イベントを分析することは、
前記第1のプロセスによって変更される前に、前記少なくとも1つのファイルおよび/またはデータのコピーを生成することと、
前記少なくとも1つのファイルおよび/またはデータの前記コピーを、バックアップフォルダまたはシステムに保存することを含み、
悪意のあるアクティビティに前記イベントが関連付けられていると判定することに応じて、
前記挙動モニタによって、前記第1のプロセスに関連付けられたプロセスグループの実行を停止させることと、
前記挙動モニタによって、前記バックアップフォルダまたは前記システムから、前記少なくとも1つのファイルおよび/またはデータの、前のバージョンを復元することとを含む、非一時的なコンピュータ可読媒体。
【請求項9】
前記挙動モニタによって、前記第1のプロセスが変更したファイルおよび/またはデータのコピーを保存することをさらに含む、請求項8に記載の非一時的なコンピュータ可読媒体。
【請求項10】
前記挙動モニタによって、前記第1のプロセスが削除したファイルおよび/またはデータのコピーを保存することをさらに含む、請求項8に記載の非一時的なコンピュータ可読媒体。
【請求項11】
前記ユーザ空間において実行する前記挙動モニタによって、前記ユーザ空間において実行する前記複数のプロセスに対応する前記複数のフィルタを生成することは、
前記第1のプロセスの実行を一時停止することと、
前記第1のプロセスにコードを挿入することとを含み、前記コードは、前記第1のプロセス内にローカルハンドラを、前記カーネル空間に、前記対応するフィルタを生成する、請求項8に記載の非一時的なコンピュータ可読媒体。
【請求項12】
前記第1のプロセスは、コンテナにおいて実行する、請求項8に記載の非一時的なコンピュータ可読媒体。
【請求項13】
前記第1のプロセスに前記コードを挿入することは、
前記第1のプロセスに関連付けられたコードの少なくとも第1の部分を上書きすることと、
前記対応するフィルタが前記カーネル空間において生成された後、前記コードの前記第1の部分を復元することとを含む、請求項11に記載の非一時的なコンピュータ可読媒体。
【請求項14】
前記プロセスグループは、子/親関係を共有するプロセスの集合である、請求項8に記載の非一時的なコンピュータ可読媒体。
【請求項15】
システムであって、
プロセッサと、
前記プロセッサによって実行されると、前記システムに対して動作を実行させる、格納されたプログラミング命令を有するメモリとを備え、前記動作は、
ユーザ空間において実行する挙動モニタによって、前記ユーザ空間において実行する複数のプロセスに対応する複数のフィルタを生成することと、
前記複数のプロセスのうちの第1のプロセスによって、カーネル空間における前記複数のフィルタのうちの対応するフィルタにシステムコールを送信することと、
前記複数のプロセスのうちの前記第1のプロセスによって、前記対応するフィルタから信号を受信することであって、前記信号は、前記第1のプロセスに、前記システムコールにおいて発行された引数を分析するように促す、受信することと、
前記受信することに応じて、前記第1のプロセスによって、前記システムコールにおいて発行された前記引数を分析することであって、前記引数を分析することは、
少なくとも1つのファイルが、前記第1のプロセス、または前記第1のプロセスに関連するプロセスによって、変更されたことを判定することを含み、
前記第1のプロセスによって、悪意のあるアクティビティに前記引数が関連付けられ得ると判定することと、
前記判定することに応じて、前記第1のプロセスによって、イベントを生成し、前記イベントを前記挙動モニタに送信することと、
前記挙動モニタによって、前記イベントを分析して、悪意のあるアクティビティに前記イベントが関連付けられているか否かを判定することであって、前記イベントを分析することは、
前記第1のプロセスによって変更される前に、前記少なくとも1つのファイルおよび/またはデータのコピーを生成することと、
前記少なくとも1つのファイルおよび/またはデータの前記コピーを、バックアップフォルダまたはシステムに保存することを含み、
悪意のあるアクティビティに前記イベントが関連付けられていると判定することに応じて、
前記挙動モニタによって、前記第1のプロセスに関連付けられたプロセスグループの実行を停止させることと、
前記挙動モニタによって、前記バックアップフォルダまたは前記システムから、前記少なくとも1つのファイルの、前のバージョンを復元することとを含む、システム。
【請求項16】
前記動作は、前記挙動モニタによって、前記第1のプロセスが変更したファイルのコピーを保存することをさらに含む、請求項15に記載のシステム。
【請求項17】
前記動作は、前記挙動モニタによって、前記第1のプロセスが削除したファイルおよび/またはデータのコピーを保存することをさらに含む、請求項16に記載のシステム。
【請求項18】
前記ユーザ空間において実行する前記挙動モニタによって、前記ユーザ空間において実行する前記複数のプロセスに対応する前記複数のフィルタを生成することは、
前記第1のプロセスの実行を一時停止することと、
前記第1のプロセスにコードを挿入することとを含み、前記コードは、前記第1のプロセス内にローカルハンドラを、前記カーネル空間に、前記対応するフィルタを生成する、請求項15に記載のシステム。
【請求項19】
前記第1のプロセスは、コンテナにおいて実行する、請求項15に記載のシステム。
【請求項20】
前記第1のプロセスに前記コードを挿入することは、
前記第1のプロセスに関連付けられたコードの少なくとも第1の部分を上書きすることと、
前記対応するフィルタが前記カーネル空間において生成された後、前記コードの前記第1の部分を復元することとを含む、請求項18に記載のシステム。
【発明の詳細な説明】
【技術分野】
【0001】
関連出願の相互参照
本出願は、2021年2月8日に出願された米国仮出願第63/146,975号に対する優先権を主張し、その全体が参照により本明細書に組み込まれる。
【0002】
本明細書で開示される実施形態は、一般に、マルウェア検出システムおよびその動作のための方法に関する。
【背景技術】
【0003】
マルウェアは、ユーザのコンピューティングシステムに侵入して、限定されないが、個人識別情報または財務情報などの特権情報をあわよくば盗むように開発され得る。マルウェア検出が進歩し続けるなかで、不正行為者は、悪意のある攻撃を阻止するために実施され得るメカニズムを切り抜ける手法を模索し続けている。この技術の多くはWindowsベースのオペレーティングシステムに特化してきたが、Unix(登録商標)/Linux(登録商標)などのUnix系のオペレーティングシステムへの進歩はあまりなかった。
【発明の概要】
【課題を解決するための手段】
【0004】
いくつかの実施形態では、悪意のあるアクティビティを検出するための方法が本明細書に開示される。ユーザ空間において実行する挙動モニタ(behavioral monitor)は、ユーザ空間において実行する複数のプロセスに対応する複数のフィルタを生成する。複数のプロセスのうちの第1のプロセスは、カーネル空間(kernel space)における複数のフィルタのうちの対応するフィルタにシステムコールを送信する。複数のプロセスのうちの第1のプロセスは、対応するフィルタから信号を受信する。この信号は、第1のプロセスに、システムコールにおいて発行された引数(arguments)を分析するように促す。受信に応じて、第1のプロセスは、システムコールにおいて発行された引数を分析する。引数を分析することは、少なくとも1つのファイルおよび/またはデータが、第1のプロセス、または第1のプロセスに関連するプロセスによって、変更されたことを判定することを含む。第1のプロセスは、悪意のあるアクティビティに引数が関連付けられ得ると判定する。この判定に応じて、第1のプロセスは、イベントを生成し、イベントを、挙動モニタに送信する。挙動モニタは、イベントを分析して、悪意のあるアクティビティにイベントが関連付けられているか否かを判定する。イベントを分析することは、第1のプロセスによって変更される前に、少なくとも1つのファイルおよび/またはデータのコピーを生成することと、少なくとも1つのファイルのコピーおよび/またはデータを、バックアップフォルダまたはシステムに保存することとを含む。悪意のあるアクティビティにイベントが関連付けられていると判定することに応じて、挙動モニタは、第1のプロセスに関連付けられたプロセスグループの実行を停止させ、バックアップフォルダまたはシステムから、少なくとも1つのファイルの、前のバージョンを復元する。
【0005】
いくつかの実施形態では、非一時的なコンピュータ可読媒体が本明細書に開示される。非一時的なコンピュータ可読媒体は、1つまたは複数のプロセッサによって実行されると、コンピュータシステムに動作を実行させる命令を含む。これら動作は、ユーザ空間において実行する挙動モニタによって、ユーザ空間において実行する複数のプロセスに対応する複数のフィルタを生成することを含む。これら動作はさらに、複数のプロセスのうちの第1のプロセスによって、カーネル空間における複数のフィルタのうちの対応するフィルタに、システムコールを送信することを含む。これら動作はさらに、複数のプロセスのうちの第1のプロセスによって、対応するフィルタから信号を受信することを含む。この信号は、第1のプロセスに、システムコールにおいて発行された引数を分析するように促す。これら動作はさらに、受信することに応じて、第1のプロセスによって、少なくとも1つのファイルが、第1のプロセスまたは第1のプロセスに関連するプロセスによって変更されたと判定することによって、システムコールにおいて発行された引数を分析することを含む。これら動作はさらに、第1のプロセスによって、悪意のあるアクティビティに引数が関連付けられ得ると判定することを含む。これら動作はさらに、判定することに応じて、第1のプロセスによって、イベントを生成し、イベントを挙動モニタへ送信することを含む。これら動作はさらに、挙動モニタによって、第1のプロセスによって変更される前に、少なくとも1つのファイルおよび/またはデータのコピーを生成し、少なくとも1つのファイルおよび/またはデータのコピーを、バックアップフォルダまたはシステムに保存することによって、悪意のあるアクティビティにイベントが関連付けられているか否かを判定するために、イベントを分析することを含む。これら動作はさらに、悪意のあるアクティビティにイベントが関連付けられていると判定することに応じて、挙動モニタによって、第1のプロセスに関連付けられたプロセスグループの実行を停止させることと、挙動モニタによって、バックアップフォルダまたはシステムから、少なくとも1つのファイルおよび/またはデータの、前のバージョンを復元することとを含む。
【0006】
いくつかの実施形態では、システムが、本明細書に開示される。このシステムは、プロセッサおよびメモリを含む。メモリは、格納されたプログラミング命令を有しており、プログラミング命令は、プロセッサによって実行されると、システムに、動作を実行させる。これら動作は、ユーザ空間において実行する挙動モニタによって、ユーザ空間において実行する複数のプロセスに対応する複数のフィルタを生成することを含む。これら動作はさらに、複数のプロセスのうちの第1のプロセスによって、カーネル空間における複数のフィルタのうちの対応するフィルタに、システムコールを送信することを含む。これら動作はさらに、複数のプロセスのうちの第1のプロセスによって、対応するフィルタから信号を受信することを含む。この信号は、第1のプロセスに対して、システムコールにおいて発行された引数を分析するように促す。これら動作はさらに、受信することに応じて、第1のプロセスによって、少なくとも1つのファイルが、第1のプロセスまたは第1のプロセスに関連するプロセスによって変更されたと判定することによって、システムコールにおいて発行された引数を分析することを含む。これら動作はさらに、第1のプロセスによって、悪意のあるアクティビティに引数が関連付けられ得ると判定することを含む。これら動作はさらに、判定することに応じて、第1のプロセスによって、イベントを生成し、イベントを挙動モニタへ送信することを含む。これら動作はさらに、挙動モニタによって、第1のプロセスによって変更される前に、少なくとも1つのファイルおよび/またはデータのコピーを生成し、少なくとも1つのファイルおよび/またはデータのコピーを、バックアップフォルダまたはシステムに保存することによって、悪意のあるアクティビティにイベントが関連付けられているか否かを判定するために、イベントを分析することを含む。これら動作はさらに、悪意のあるアクティビティにイベントが関連付けられていると判定することに応じて、挙動モニタによって、第1のプロセスに関連付けられたプロセスグループの実行を停止させることを含む。これら動作はさらに、挙動モニタによって、バックアップフォルダまたはシステムから少なくとも1つのファイルの、前のバージョンを復元することを含む。
【0007】
本開示の上記の特徴を詳細に理解できるように、上記で簡単に要約された本開示のより具体的な説明は、実施形態を参照することによって得ることができ、そのうちのいくつかは添付図面に示されている。しかしながら、添付図面は、本開示の典型的な実施形態のみを示しており、したがって、本開示は他の同様に効果的な実施形態を許容し得るので、その範囲を限定するとみなされるものではないことに留意されたい。
【図面の簡単な説明】
【0008】
【
図1】例示的な実施形態による、コンピューティングシステムを示すブロック図である。
【0009】
【
図2A】例示的な実施形態による、マルウェアを検出する方法を示すフロー図である。
【0010】
【
図2B】例示的な実施形態による、ユーザ空間において実行するプロセスを監視する方法を示すフロー図である。
【0011】
【
図3】例示的な実施形態による、悪意のあるアクティビティが検出された場合に、是正アクションを講じる方法を示すフロー図である。
【0012】
【
図4A】例示的な実施形態による、システムバスコンピューティングシステムアーキテクチャを示す図である。
【0013】
【
図4B】例示的な実施形態による、チップセットアーキテクチャを有するコンピュータシステムを示す図である。
【発明を実施するための形態】
【0014】
理解を容易にするために、可能であれば、各図に共通する同一の要素を示すために同一の参照番号が使用される。1つの実施形態において開示された要素は、特に言及することなく他の実施形態でも有益に利用できると考えられる。
【0015】
本明細書で説明される1つまたは複数の技法は、一般に、マルウェア検出システムを対象とする。たとえば、ここで説明する1つまたは複数の技法は、Unix(登録商標)/Linux(登録商標)環境(たとえば、Ubuntu(登録商標)、Red Hat(登録商標)など)内のマルウェアを検出する手段を提供する。悪意のあるアクティビティを検出するために、本明細書で説明される1つまたは複数の技法は、コンピューティング環境のユーザ空間において実行する様々なプロセスにプロセスコードを挿入するように構成された挙動モニタを利用し得る。そのようなプロセスコードの挿入により、コンピューティングシステムのカーネル空間において、対応するフィルタの生成をトリガし得る。カーネル空間におけるフィルタは、関連付けられたプロセスからのシステムコールを傍受し、悪意のあるアクティビティに関連付けられた可能性のある特定のシステムコールを識別するために使用され得る。現在のシステムが、1つまたは複数のプロセスまたはファイルが、悪意のあるアクティビティに関連付けられていると判定した場合、挙動モニタは、プロセスの実行を強制終了し、バックアップから、プロセスまたはファイルの、前のバージョンを復元し得る。
【0016】
図1は、例示的な実施形態による、コンピューティングシステム100を示すブロック図である。いくつかの実施形態では、コンピューティングシステム100は、ここで論じられる動作を実行するように構成されたサーバシステムを表し得る。他の実施形態では、コンピューティングシステム100は、IOTデバイスまたは設備を表すことができる。図示されるように、コンピューティングシステム100は、ユーザ空間102およびカーネル空間104を含み得る。ユーザ空間102およびカーネル空間104は、コンピューティングシステム100に関連付けられたメモリの一部を表すことができる。
【0017】
一般に、ユーザ空間102は、オペレーティングシステムのカーネルの外側でコードを実行するメモリの一部を表し得る。たとえば、ユーザ空間102は、コンピューティングシステム100においてアプリケーションを実行するように構成されたメモリの一部を表し得る。比較すると、カーネル空間104は、コンピューティングシステム100に関連付けられたオペレーティングシステムカーネルを実行するメモリの一部を表し得る。たとえば、カーネル空間104は、カーネルおよびオペレーティングシステムに関連付けられたメモリの一部を表し得る。
【0018】
図示されるように、ユーザ空間102は、1つまたは複数のクライアントプロセス106(一般に、クライアントプロセス106)、挙動モニタ108、およびバックアップフォルダ110を含み得る。いくつかの実施形態では、クライアントプロセス106および挙動モニタ108のおのおのは、1つまたは複数のソフトウェアモジュールから構成され得る。1つまたは複数のソフトウェアモジュールは、1つまたは複数のアルゴリズムステップを実施する一連の機械命令(たとえば、プログラムコード)を表す、ユーザ空間102に格納されたコードまたは命令の集合であり得る。そのような機械命令は、コンピューティングシステム100のプロセッサが命令を実施するために解釈する実際のコンピュータコードであり得るか、または、実際のコンピュータコードを取得するために解釈される命令の、より高いレベルのコーディングであり得る。1つまたは複数のソフトウェアモジュールは、1つまたは複数のハードウェア構成要素をも含み得る。例示的なアルゴリズムの1つまたは複数の態様は、命令の結果としてではなく、ハードウェア構成要素(たとえば、回路構成)自体によって実行され得る。
【0019】
いくつかの実施形態では、クライアントプロセス106は、コンピューティングシステム100において実行するプログラムを称し得る。いくつかの実施形態では、クライアントプロセス106は、Docker(登録商標)、CRI-Oなどのコンテナソリューションにおいて実行するプログラムを表し得る。一般に、コンテナ内部で実行するプログラムは、コンピューティングシステム100において、個別のプログラムとして現れ得る。コンピューティングシステム100の目的上、コンテナ内部で実行するプロセスと、他の任意のプロセスとの間に違いはない。いくつかの実施形態では、クライアントプロセス106は、仮想機械において実行するプログラムを表し得る。
【0020】
挙動モニタ108は、コンピューティングシステム100におけるマルウェアを検出するように構成され得る。いくつかの実施形態では、コンピューティングシステム100におけるあらゆるプロセスの監視を開始するために、挙動モニタ108以外の、コンピューティングシステム100におけるあらゆるプログラムを一時停止され得る。いくつかの実施形態では、コンピューティングシステム100におけるすべてのプロセスのサブセットが、一時停止され得る。プログラムが一時停止されると、挙動モニタ108は、各プログラムへの処理コードの挿入を開始し得る。最初に、システムにおけるすべてのプロセスを一時停止することによって、挙動モニタ108は、挙動モニタ108が、すべてのプログラムおよびスレッドに挿入しようとするときに、プログラムおよびスレッドが新たに作成される競合状態を気にすることなく、すべてのプログラムおよびスレッドに処理コードを挿入し得る。さらに、すべてのプロセス106に処理コードを挿入し、挿入されたコードからイベント情報を受信するように、挙動モニタ108を構成することができる。すべてのプロセス106に処理コードを挿入するために、挙動モニタ108は、システムコールを使用し得る。いくつかの実施形態では、システムコールは、ptraceまたはprocess_vm_writevシステムコールであり得る。ptraceシステムコールは、挙動モニタ108が、様々なプロセス106に接続するか、または様々なプロセス106を制御できるようにし得る。process_vm_writevシステムコールにより、挙動モニタ108は、あらゆるプロセス106に処理コードを挿入することができる。
【0021】
いくつかの実施形態では、プロセスが挿入された後、プロセスはターゲットプロセス内に新しいプログラムまたはスレッドを作成することができる。一般に、コンピューティングシステム100においてプロセスおよび/またはスレッドを作成できる複数の手法があり得る。たとえば、ユーザまたは管理者は、clone、fork、またはvforkシステムコールのうちの1つまたは複数を利用して、新しいプログラムまたはスレッドを作成し得る。
【0022】
いくつかの実施形態では、execveおよび/またはexecveatシステムコールを使用して、ターゲットプロセス106またはプログラム内にプロセスを作成し得る。execveおよび/またはexecveatシステムコールは、プロセス106のアドレス空間における元のメモリを完全に上書きし、それによって、プロセス106内に新しいプログラムを作成し得る。一度実行されると、挙動モニタ108は、あたかも他のいずれかのプログラムであるかのように、新たに作成されたプログラムに、処理コードを再挿入し得る。
【0023】
いくつかの実施形態では、ターゲットプロセス106またはプログラム内にプログラムを作成するために、forkおよび/またはvforkシステムコールが使用され得る。いくつかの実施形態では、forkおよび/またはvforkおよび/またはcloneシステムコールは、そのメモリ画像が、forkをコールしたプロセスのコピーであり得る、プログラムを作成し得る。いくつかの実施形態では、実行は、forkコールの位置の直後に再開され得る。いくつかの実施形態では、挿入された処理コードにより、プログラムによって元々意図されていた異なる場所で、forkおよび/またはvforkシステムコールが開始され得る。したがって、新しく作成されたプログラムのコンテキストは、forkおよび/またはvforkシステムコールの元々意図された場所と一致するように設定され得る。いくつかの実施形態では、コンテキストは、レジスタと、元々意図された実行の状態とを含み得る。
【0024】
いくつかの実施形態では、これは、新しく作成されたプログラムに、setcontext関数を挿入し、新しく作成されたプログラムにおいてsetcontext関数を実行することによって達成され得る。setcontextは、必要な新しいコンテキストを、引数として受け取り得る。いくつかの実施形態では、挙動モニタ108は、所望の新しいコンテキストを作成し、所望の新しいコンテキストを、引数として、新しく挿入されたsetcontext関数に提供し得る。
【0025】
いくつかの実施形態では、これは、新しく作成されたプログラム内でsigreturnシステムコールを実行し、新しく作成されたプログラムにおいてsigreturnシステムコールを実行することによって達成され得る。
【0026】
いくつかの実施形態では、cloneシステムコールを使用して、ターゲットプロセス106またはプログラム内にスレッドを作成し得る。いくつかの実施形態では、cloneシステムコールは、上記で説明したforkシステムコールと同様に動作し得る。したがって、cloneシステムコールは、forkシステムコールと同様に取り扱われ得る。いくつかの実施形態では、プロセス106内に新しいプログラムを作成するのではなく、cloneシステムコールは、プロセス106内に新しいスレッドを作成することができる。forkシステムコールと同様に、cloneに対する元のコールの直後に、新しいスレッドの実行が開始され得る。このシステムコールは、元々意図された場所ではなく、挿入された処理コード内で発生する可能性があるため、新しいスレッドのコンテキストを、元々意図されたコンテキストと一致するように適切に設定する必要がある。
【0027】
いくつかの実施形態では、挙動モニタ108は、コンピューティングシステム100において実行するプロセス106の状態に、損傷を与えないような手法でコードを挿入し得る。たとえば、動作中、プログラムが所与のプロセス106内に挿入される前に、プロセス106の元の状態のうち、変更されようとしている部分が格納され得る。プロセス106の元の状態のこの部分が格納されると、挙動モニタ108は、プロセス106へのコードの挿入を開始し得る。挿入が行われると、挙動モニタ108は、挿入されたコードとともに、格納されていた元の状態の部分を復元し得る。
【0028】
いくつかの実施形態では、挿入が行われ、それぞれのプロセス106の元の状態の部分が復元されると、プロセス106が変更または削除するファイルおよび/またはデータのコピーが作成され、バックアップフォルダ110に格納され得る。いくつかの実施形態では、挙動モニタ108は、システムコールを利用して、これらのファイルおよび/またはデータを、バックアップフォルダ110にコピーし得る。たとえば、挙動モニタ108は、ファイルおよび/またはデータをバックアップフォルダ110にコピーするために、copy_file_rangeシステムコールを利用し得る。
【0029】
いくつかの実施形態では、挙動モニタ108は、ファイルをバックアップフォルダ110にコピーするために、データのアクセス、読み出し、および書き込みをすることができる任意のシステムコールの組合せを使用し得る。
【0030】
いくつかの実施形態では、挿入が行われ、それぞれのプロセス106の元の状態の部分が復元されると、プロセス106が変更または削除するファイルおよび/またはデータのコピーが作成され、データベース、ネットワーク接続ストレージ、または代替機械などのデータを格納し得る任意のシステムに格納され得る。
【0031】
いくつかの実施形態では、挿入されたコードは、対象となり得るシステムコールに対するフィルタを確立するために、secompフィルタに依存し得る。図示されるように、secompフィルタは、ユーザ空間において作成され得るが、対応するフィルタ114は、カーネル空間104で確立され得る。このようにして、コンピューティングシステム100は、このプロセスを実行するためにカーネルモジュールを必要としない。secompフィルタは、プロセスが、着信システムコールに対してフィルタ114を指定する手段を提供し得る。いくつかの実施形態では、secompフィルタは、バークレーパケットフィルタ(BPF)プログラムの形式を採り得る。対象となり得るシステムコールの例は、限定されないが、ファイル操作に関連付けられたシステムコール、新しいプログラムの作成に関連付けられたシステムコール、ネットワーク接続の開始に関連するシステムコールなどを含み得る。たとえば、openやopenatなどのシステムコールは、所与のプロセスがアクセスしているファイルを追跡するためのキャプチャであり得る。それに加えて、execve、fork、およびcloneなどのシステムコールをキャプチャして、新しいスレッド、プロセス、およびプロセスグループの作成を追跡し得る。accept4、accept、bind、connectのようなシステムコールを使用して、ネットワーク接続の開始をキャプチャし得る。
【0032】
いくつかの実施形態では、挙動モニタ108は、auditdルールを使用して、対象となり得るシステムコールに対するフィルタを確立し得る。
【0033】
いくつかの実施形態では、挙動モニタ108は、fanotifyを使用して、対象となり得るシステムコールに対するフィルタを確立し得る。
【0034】
いくつかの実施形態では、挙動モニタ108は、拡張バークレーパケットフィルタ(eBPF)を使用して、対象となり得るシステムコールのフィルタを確立し得る。
【0035】
いくつかの実施形態では、挙動モニタ108は、引数PR_SET_SYSCALL_USER_DISPATCHを用いてシステムコールprtctlを使用して、対象となり得るシステムコールのフィルタを確立し得る。
【0036】
いくつかの実施形態では、挙動モニタ108は、SELinuxモジュールを使用して、対象となり得るシステムコールのフィルタを確立し得る。
【0037】
いくつかの実施形態では、挙動モニタ108は、AppArmourプロファイルを使用して、対象となり得るシステムコールに対するフィルタを確立し得る。
【0038】
いくつかの実施形態では、挙動モニタ108は、システムコールptraceを使用して、対象となり得るシステムコールに対するフィルタを確立し得る。
【0039】
いくつかの実施形態では、挿入されたコードは、各プロセスにおいて信号ハンドラ112を登録または確立し得る。信号ハンドラ112は、カーネル空間104から受信した信号を取り扱うように構成され得る。たとえば、信号ハンドラ112は、カーネル空間104における対応するフィルタ114から送信されるSIGSYS信号を取り扱うように構成され得る。いくつかの実施形態では、SIGSYS信号を受信すると、信号ハンドラ112は、信号から関連情報を取得し、特定のタイプのシステムコールに基づいて1つまたは複数のアクションを実行し得る。たとえば、動作中、クライアントプロセス106は、ファイルおよび/またはデータを変更する目的で、ファイルおよび/またはデータを開いたり、そのファイルおよび/またはデータを削除したりすることができる。そのような動作は、信号ハンドラ112をトリガして、ファイルに関するデータ、および/または、アクセスされているデータを、挙動モニタ108に送信し得る。挙動モニタ108は、ファイルおよび/またはデータのコピーを作成し得、ファイルおよび/またはデータを、バックアップフォルダ110に格納し得る。いくつかの実施形態では、挙動モニタ108は、ファイルおよび/またはデータのコピーを作成し得、データベース、ネットワーク接続ストレージ、または代替機械など、データを格納し得る任意のシステムに、ファイルおよび/またはデータを格納し得る。
【0040】
図示されるように、カーネル空間104を参照して示すように、カーネル空間104は、その中に確立された1つまたは複数のフィルタ1141~114n(一般に、フィルタ114または複数のフィルタ114)を含み得る。各フィルタ114は、挙動モニタ108がコードを挿入したそれぞれのプロセス106に対応し得る。たとえば、前述したように、それぞれのプロセス106内にコードを挿入すると、カーネル空間104におけるそれぞれのフィルタ114が登録または確立される可能性がある。各フィルタ114は、それぞれのプロセス106から受信したシステムコールに基づいて1つまたは複数のルールを定義し得る。たとえば、プロセス106から受信したシステムコールのタイプに応じて、フィルタ114は、プロセス106を強制終了するか、プロセス106の完了を許可するか、またはSIGSYS信号をプロセス106に送り返すかを選択し得る。SIGSYS信号を生成するシステムコールの例は、傍受される可能性のあるすべてのシステムコールを含む。例は、限定されないが、ファイルを操作するシステムコール、新しいプログラムを作成するシステムコール、既存のプログラムを変更するシステムコール、ネットワーク接続を開始するシステムコールなどを含み得る。
【0041】
いくつかの実施形態では、SIGSYS信号をプロセス106に送り返すことにより、信号ハンドラ112の実行を促す、または実行させることができる。SIGSYS信号は、プロセス106が何らかのアクションを講じたことを信号ハンドラ112に示し得る。例示的なアクションは、限定されないが、ファイルを開く、ファイルを保存する、ファイルへのアクセスを要求するなどを含み得る。信号ハンドラ112は、フィルタ114に送信されたシステムコール引数を検査して、引数が安全であることを保証するように構成され得る。いくつかの実施形態では、信号ハンドラ112は、引数が十分に安全であるという判定に基づいてシステムコールが進行することを許可し得る。許可されないシステムコールの例は、保護されたプログラムまたはファイルにアクセスするシステムコールを含むが、これに限定されない。安全性の判定は、システムコールごとに異なり、システムコールに提供された1つまたは複数の引数のタイプに依存する。いくつかの実施形態では、他のシステムコールの実行と並行して考慮される場合、その実行が、悪意のあるアクティビティを判定するために使用され得るシステムコールが、集計およびさらなる分析のために、監視プログラムに送り返され得る。いくつかの実施形態では、信号ハンドラ112は、挙動モニタ108にメッセージを送信し、挙動モニタ108にシステムコールを通知し得る。
【0042】
挙動モニタ108はさらに、信号ハンドラ112から、1つまたは複数のイベントを受信するように構成され得る。いくつかの実施形態では、1つまたは複数のイベントは、信号ハンドラ112から挙動モニタ108に送信され、フィルタ114からのSIGSYS信号をトリガしたシステムコールを、挙動モニタ108に通知するメッセージを称し得る。いくつかの実施形態では、挙動モニタ108は、信号ハンドラ112からイベント情報を収集し、各イベントをトリガしたプロセスグループに従って、イベント情報をグループ化し得る。一般に、プロセスグループは、子/親関係を共有するプロセスの集合を称し得る。いくつかの実施形態では、グループにおける各プロセス106によって開始されたイベントは、あたかも同じプロセスによって開始されたかのようにともにグループ化され得る。その後、挙動モニタ108は、挙動検出アルゴリズム116を使用して、プロセスグループデータを分析および評価し得る。挙動検出アルゴリズム116は、プロセスグループデータを分析して、プロセスグループ自体に悪意があるか否かを判定するように構成され得る。挙動検出アルゴリズム116が、プロセスグループに悪意があると判定した場合、挙動モニタは、悪意のあるプロセスグループの強制終了を開始し得る。
【0043】
いくつかの実施形態では、挙動検出アルゴリズム116は、プロセスグループが、挙動モニタ108の内部で実行するシステムコール間のカウントおよび関係を維持するように構成され得る。そのような構成は、様々な理由から、元のシステムコールに関する情報全体を格納するよりも改善される。たとえば、挙動検出アルゴリズム116は、システムコール情報を、要約形式に集約するように構成され得る。システムコール情報を要約形式に集約することによって、コンピューティングシステム100のメモリオーバヘッドが、大幅に削減され得る。それに加えて、そのような集約により、プロセスグループを表し得るデータ構造を検査するのに必要な分析時間も、大幅に短縮され得る。たとえば、プロセスが、数千のファイルを開く場合、挙動検出アルゴリズム116は、特定の数千のシステムコールに関する詳細情報の代わりに、開かれているファイルの数を表すカウントを格納し得る。さらに、挙動検出アルゴリズム116は、これら動作がどのように発生するかを追跡し、それらの事実に関連するカウントを保持し得る。たとえば、500個のファイルが書込用に開かれ、500個のファイルが読取用に開かれている場合、挙動検出アルゴリズム116は、個々のアクセスに関する詳細情報ではなく、異なるタイプのファイルアクセスのカウントを維持し得る。いくつかの実施形態では、挙動アルゴリズムは、コードを変更することなく更新できるように、コードではなくデータとして表され得る。
【0044】
いくつかの実施形態では、プロセスグループに悪意があると判定することに応じて、挙動モニタ108は、悪意のある挙動に関連付けられたプロセスグループ全体を強制終了し得る。各ファイルおよび/またはデータのコピーが生成され、バックアップフォルダ110に、またはデータベース、ネットワーク接続ストレージ、または代替機械などのデータを格納できる任意のシステムに格納されているので、挙動モニタ108は、悪意のあるプロセスグループによってドロップされたファイルおよび/またはデータを削除し、悪意のあるプロセスグループによって以前に変更されたファイルおよび/またはデータを復元するように構成され得る。
【0045】
図2Aは、例示的な実施形態による、マルウェアを検出する方法200を示すフロー図である。方法200はステップ202において開始し得る。
【0046】
ステップ202において、挙動モニタ108は、ユーザ空間102において実行する複数のプロセスに対応するカーネル空間104に、複数のフィルタ114を生成し得る。複数のフィルタ114を生成するために、挙動モニタ108は、コンピューティングシステム100において実行するすべてのプロセス106に、処理コードを挿入し得る。そのようなプロセスにより、カーネル空間104に複数のフィルタ114が生成される場合がある。いくつかの実施形態では、各フィルタ114は、ユーザ空間102において実行するそれぞれのプロセス106に対応し得る。
【0047】
ステップ204において、プロセス106は、システムコールを、カーネル空間104に送信し得る。いくつかの実施形態では、システムコールは、それに関連付けられた1つまたは複数の引数を含み得る。例示的なシステムコールは、限定されないが、ファイル操作に関連付けられたシステムコールと、新しいプログラムの作成に関連付けられたシステムコールとを含み得る。いくつかの実施形態では、システムコールは、システムコールを開始したプロセス106に関連付けられたそれぞれのフィルタ114によって傍受され得る。
【0048】
ステップ206において、フィルタ114は、システムコールを分析して、システムコールをどのように処理するかを判定し得る。たとえば、プロセス106から受信したシステムコールのタイプに応じて、フィルタ114は、プロセス106を強制終了するか、プロセス106の完了を許可するか、またはSIGSYS信号をプロセス106に送り返すかを選択し得る。
【0049】
ステップ208において、フィルタ114は、分析に基づいて、信号をプロセス106に送信し得る。たとえば、プロセス106から受信したシステムコールの分析に応じて、フィルタ114は、プロセス106に送り返すSIGSYS信号を生成し得る。SIGSYS信号は、プロセス106に対して、システムコールにおいて発行された引数をさらに分析するように促し得る。
【0050】
ステップ210において、プロセス106は、フィルタ114から信号を受信し、関連付けられたシステムコールにおける1つまたは複数の引数を分析し得る。たとえば、信号ハンドラ112は、フィルタ114に送られた1つまたは複数のシステムコール引数を検査して、この1つまたは複数の引数が、安全であることを保証し得る。いくつかの実施形態では、信号ハンドラ112は、1つまたは複数の引数が十分に安全であるとの判定に基づいて、システムコールを続行できるようにし得る。いくつかの実施形態では、信号ハンドラ112は、挙動モニタ108にメッセージを送信し、挙動モニタ108にシステムコールを通知し得る。
【0051】
ステップ212において、プロセス106は、挙動モニタ108にメッセージを送信し得る。たとえば、信号ハンドラ112は、システムコールにおける引数の分析に応じて、挙動モニタ108にメッセージを送信し、疑わしいシステムコールを挙動モニタ108に通知し得る。
【0052】
ステップ214において、挙動モニタ108は、信号ハンドラ112からイベント情報(たとえば、メッセージ)を収集し、各イベントをトリガしたプロセスグループに従って、イベント情報をグループ化し得る。一般に、プロセスグループは、子/親関係を共有するプロセスの集合を称し得る。いくつかの実施形態では、グループにおける各プロセス106によって開始されたイベントは、あたかも同じプロセスによって開始されたかのようにグループ化され得る。
【0053】
ステップ216において、挙動モニタ108は、挙動検出アルゴリズム116を使用して、プロセスグループデータを分析および評価し得る。挙動検出アルゴリズム116は、プロセスグループデータを分析して、プロセスグループ自体に悪意があるか否かを判定するように構成され得る。
【0054】
ステップ218において、挙動モニタ108は、プロセスグループに悪意があるか否かを判定し得る。ステップ218において、挙動モニタ108が、プロセスグループに悪意がないと判定した場合、ステップ220において、挙動モニタは、プロセスグループに、実行の継続を許可し得る。しかしながら、ステップ218において、挙動モニタ108が、プロセスグループに悪意があると判定した場合、ステップ222において、挙動モニタは、悪意のあるプロセスグループを強制終了し得る。
【0055】
図2Bは、例示的な実施形態による、ユーザ空間内で実行するプロセスを監視する方法250を示すフロー図である。方法250は、ステップ252として開始し得る。
【0056】
ステップ252において、挙動モニタ108は、ユーザ空間102において実行する複数のプロセスに対応するカーネル空間104に、複数のフィルタ114を生成し得る。複数のフィルタ114を生成するために、挙動モニタ108は、コンピューティングシステム100において実行するすべてのプロセス106に、処理コードを挿入し得る。そのようなプロセスにより、カーネル空間104に複数のフィルタ114が生成される場合がある。いくつかの実施形態では、各フィルタ114は、ユーザ空間102において実行するそれぞれのプロセス106に対応し得る。
【0057】
ステップ254において、プロセス106は、システムコールをカーネル空間104に送信し得る。いくつかの実施形態において、システムコールは、それに関連付けられた1つまたは複数の引数を含み得る。例示的なシステムコールは、限定されないが、ファイル操作に関連付けられたシステムコールと、新しいプログラムの作成に関連付けられたシステムコールとを含み得る。いくつかの実施形態では、システムコールは、システムコールを開始したプロセス106に関連付けられたそれぞれのフィルタ114によって傍受され得る。
【0058】
ステップ256において、フィルタ114は、システムコールを分析して、システムコールをどのように処理するかを判定し得る。たとえば、プロセス106から受信したシステムコールのタイプに応じて、フィルタ114は、プロセス106を強制終了するか、プロセス106の完了を許可するか、またはSIGSYS信号をプロセス106に送り返すかを選択し得る。
【0059】
ステップ258において、フィルタ114は、分析に基づいて、信号をプロセス106に送信し得る。たとえば、プロセス106から受信したシステムコールの分析に応じて、フィルタ114は、プロセス106に送り返すSIGSYS信号を生成し得る。SIGSYS信号は、プロセス106に、システムコールで提出された引数をさらに分析するよう促し得る。
【0060】
ステップ260において、プロセス106は、フィルタ114から信号を受信し、関連付けられたシステムコールにおける1つまたは複数の引数を分析し得る。たとえば、信号ハンドラ112は、フィルタ114に送られた1つまたは複数のシステムコール引数を検査して、プロセス106が、ファイルを削除したか、または変更したかを判定し得る。
【0061】
ステップ262において、プロセス106がファイルおよび/またはデータを削除または変更したと信号ハンドラ112が判定したことに応じて、信号ハンドラ112は、データを挙動モニタ108に送信し得る。データは、既存のファイルおよび/またはデータを変更または削除するプロセス106の指示を表し得る。
【0062】
ステップ264において、プロセス106がファイルおよび/またはデータを削除または変更したという指示を挙動モニタ108が受信したことに応じて、挙動モニタ108は、バックアップフォルダ110に、ファイルおよび/またはデータのコピーを作成し得る。ファイルのコピーは、変更または削除前のファイルおよび/またはデータのバージョンを表し得る。このようにして、挙動モニタ108は、ファイルおよび/またはデータが、悪意のあるプロセスによって損傷または削除された場合に、そのファイルおよび/またはデータを、元の状態に復元することができる。
【0063】
図3は、例示的な実施形態による、悪意のあるアクティビティが検出された場合に、是正アクションを講じる方法300を示すフロー図である。
【0064】
前述したように、挿入が発生し、それぞれのプロセス106の元の状態の部分が復元されると、挙動モニタ108は、コンピューティングシステム100に対して、プロセス106、またはプロセス106の任意の子プロセスが、変更または削除したファイルおよび/またはデータのコピーを生成させ得る。そのような機能により、挙動モニタは、ファイルおよび/またはデータが、破損または削除された場合に、ファイルおよび/またはデータを元の状態に復元できる。いくつかの実施形態では、挙動モニタ108は、ファイルまたはプロセス106を、バックアップフォルダ110にコピーするために、copy_file_rangeと称されるシステムコールを利用し得る。いくつかの実施形態では、バックアップフォルダ110はさらに、ユーザ空間102において実行するファイルまたはプロセス106の前のバージョンを含み得る。
【0065】
ステップ302において、挙動モニタ108は、プロセスグループに悪意があると判定し得る。たとえば、挙動モニタ108は、挙動検出アルゴリズム116を使用して、1つまたは複数の信号ハンドラ112によって送信されたプロセスグループデータを分析および評価し得る。挙動検出アルゴリズム116は、プロセスグループデータを分析して、プロセスグループ自体に悪意があるか否かを判定するように構成され得る。
【0066】
ステップ304において、プロセスグループに悪意があると判定することに応じて、挙動モニタ108は、悪意のあるプロセスグループを強制終了し得る。たとえば、挙動モニタ108は、プロセス106の動作を停止させる信号をプロセス106に送信し得る。いくつかの実施形態では、プロセス106への信号は、強制終了コマンドの形式を採り得る。
【0067】
ステップ306において、挙動モニタ108は、悪意のあるアクティビティに関連付けられたファイルまたはプロセスを削除し得る。たとえば、分析に基づいて、挙動モニタ108は、悪意のある挙動に関連付けられた複数のプロセスまたは複数のファイルを識別することができる場合がある。この判定に基づいて、挙動モニタ108は、識別されたファイルおよび/またはデータまたはプロセスを削除し得る。
【0068】
ステップ308において、挙動モニタ108は、悪意のあるアクティビティによって影響を受けたファイルおよび/またはデータを復元し得る。たとえば、悪意のあるアクティビティに関連付けられたファイルおよび/またはデータの識別に応じて、挙動モニタ108は、以前にバックアップフォルダ110に格納されていた可能性のあるファイルおよびまたは/データの前のバージョンを識別し得る。その後、挙動モニタ108は、以前に格納されたバージョンに基づいて、ファイルおよび/またはデータの復元を上書きまたは開始し得る。
【0069】
図4Aは、例示的な実施形態による、コンピューティングシステム400のシステムバスアーキテクチャを示す。システム400の1つまたは複数の構成要素は、バス405を使用して互いに電気通信し得る。システム400は、プロセッサ(たとえば、1つまたは複数のCPU、GPU、または他のタイプのプロセッサ)410と、読取専用メモリ(ROM)420およびランダムアクセスメモリ(RAM)425などのシステムメモリ415を含む様々なシステム構成要素をプロセッサ410へ結合するシステムバス405とを含み得る。システム400は、プロセッサ410に直接、近接して接続されるか、またはプロセッサ410の一部として統合される、高速メモリのキャッシュを含むことができる。システム400は、プロセッサ410による迅速なアクセスのために、メモリ415および/または記憶デバイス430から、キャッシュ412に、データをコピーすることができる。このようにして、キャッシュ412は、データを待っている間、プロセッサ410の遅延を回避する、性能向上を提供し得る。これらおよび他のモジュールは、様々なアクションを実行するためにプロセッサ410を制御するか、または制御するように構成することができる。他のシステムメモリ415も同様に利用可能であり得る。メモリ415は、異なる性能特性を有する複数の異なるタイプのメモリを含み得る。プロセッサ410は、単一のプロセッサまたは複数のプロセッサを表し得る。プロセッサ410は、プロセッサ410を制御するように構成された、記憶デバイス430に格納されたサービス1 432、サービス2 434、およびサービス4 436などの汎用プロセッサまたはハードウェアモジュールまたはソフトウェアモジュールのみならず、ソフトウェア命令が実際のプロセッサ設計に組み込まれている専用プロセッサのうちの1つまたは複数を含むことができる。プロセッサ410は、本質的に、複数のコアまたはプロセッサ、バス、メモリコントローラ、キャッシュなどを含む、完全に内蔵型のコンピューティングシステムであり得る。マルチコアプロセッサは、対称的または非対称的であり得る。
【0070】
コンピューティングシステム400とのユーザインタラクションを可能にするために、入力デバイス445は、音声用のマイクロフォン、ジェスチャまたはグラフィック入力用のタッチ感知スクリーン、キーボード、マウス、動き入力、音声など、任意の数の入力機構とすることができる。出力デバイス435(たとえば、ディスプレイ)は、当業者に知られている多くの出力機構のうちの1つまたは複数とすることもできる。場合によっては、マルチモーダルシステムは、ユーザが、コンピューティングシステム400と通信するために複数のタイプの入力を提供できるようにすることができる。通信インターフェース440は、一般に、ユーザ入力およびシステム出力を統制および管理することができる。特定のハードウェア構成における動作に制限はないため、ここでの基本的な特徴は、開発された改良型ハードウェアまたはファームウェア構成に簡単に置換され得る。
【0071】
記憶デバイス430は、不揮発性メモリであってよく、磁気カセット、フラッシュメモリカード、ソリッドステートメモリデバイス、デジタル多用途ディスク、カートリッジ、ランダムアクセスメモリ(RAM)425、読取専用メモリ(ROM)420、およびそれらのハイブリッドなど、コンピュータによってアクセス可能なデータを格納できるハードディスク、または他のタイプのコンピュータ可読媒体とすることができる。
【0072】
記憶デバイス430は、プロセッサ410を制御するためのサービス432、434、および436を含むことができる。他のハードウェアまたはソフトウェアモジュールも考えられる。記憶デバイス430を、システムバス405に接続することができる。1つの態様では、特定の機能を実行するハードウェアモジュールは、機能を実行するために、プロセッサ410、バス405、出力デバイス435などの必要なハードウェア構成要素に関連してコンピュータ可読媒体に格納されたソフトウェア構成要素を含むことができる。
【0073】
図4Bは、例示的な実施形態による、チップセットアーキテクチャを有するコンピュータシステム450を示す。コンピュータシステム450は、開示された技術を実施するために使用できるコンピュータハードウェア、ソフトウェア、およびファームウェアの一例であり得る。システム450は、識別された計算を実行するように構成されたソフトウェア、ファームウェア、およびハードウェアを実行できる任意の数の物理的および/または論理的に別個のリソースを表す、1つまたは複数のプロセッサ455を含むことができる。1つまたは複数のプロセッサ455は、1つまたは複数のプロセッサ455への入力、および、1つまたは複数のプロセッサ455からの出力を制御できるチップセット460と通信することができる。この例では、チップセット460は、ディスプレイなどの出力465に情報を出力し、たとえば、磁気媒体およびソリッドステート媒体を含むことができる情報を読み出して、記憶デバイス470に書き込むことができる。チップセット460は、RAM475からのデータの読取、およびRAM475へのデータの書込を行うことができる。チップセット460とインターフェースするために、様々なユーザインターフェース構成要素485とインターフェースするためのブリッジ480を設けることができる。そのようなユーザインターフェース構成要素485は、キーボード、マイクロフォン、タッチ検出および処理回路構成、マウスなどのポインティングデバイスなどを含むことができる。一般に、システム450への入力は、機械によって生成されたもの、および/または、人間によって生成されたものなど、様々なソースのいずれかから得ることができる。
【0074】
チップセット460は、異なる物理的インターフェースを有することができる、1つまたは複数の通信インターフェース490とインターフェースすることもできる。そのような通信インターフェースは、ワイヤおよびワイヤレスのローカルエリアネットワーク用の、ブロードバンドワイヤレスネットワーク用の、およびパーソナルエリアネットワーク用のインターフェースを含むことができる。本明細書に開示されるGUIを生成し、表示し、使用するための方法のいくつかの応用は、物理的インターフェースを介して順序付けられたデータセットを受け取ること、または、記憶デバイス470またはRAM475に格納されたデータを分析する1つまたは複数のプロセッサ455によって機械自体によって生成されることを含むことができる。さらに、機械は、ユーザインターフェース構成要素485を介してユーザから入力を受信し、1つまたは複数のプロセッサ455を使用してこれらの入力を解釈することによってブラウジング機能などの適切な機能を実行することができる。
【0075】
例示的なシステム400および450は、複数のプロセッサ410を有することができるか、または、より優れた処理能力を提供するために、ともにネットワーク化されたコンピューティングデバイスのグループまたはクラスタの一部となることができると理解され得る。
【0076】
上記は、本明細書において説明された実施形態を対象としているが、その基本的な範囲から逸脱することなく、他のさらなる実施形態が考案され得る。たとえば、本開示の態様は、ハードウェアまたはソフトウェア、またはハードウェアとソフトウェアとの組合せで実施され得る。本明細書において説明された1つの実施形態は、コンピュータシステムとともに使用するためのプログラム製品として実施され得る。プログラム製品のプログラムは、(本明細書において説明された方法を含む)実施形態の機能を定義し、様々なコンピュータ可読記憶媒体に含めることができる。例示的なコンピュータ可読記憶媒体は、限定されないが、(i)情報が永続的に格納される書込不可能な記憶媒体(たとえば、CD-ROMドライブによって読み取り可能なCD-ROMディスクのような、コンピュータ内の読取専用メモリ(ROM)デバイス、フラッシュメモリ、ROMチップ、または任意のタイプのソリッドステート不揮発性メモリ)と、(ii)変更可能な情報が格納される書込可能な記憶媒体(たとえば、ディスケットドライブまたはハードディスクドライブ内のフロッピーディスク、または任意のタイプのソリッドステートランダムアクセスメモリ)とを含む。そのようなコンピュータ可読記憶媒体は、開示された実施形態の機能を指示するコンピュータ可読命令を担持する場合、本開示の実施形態である。
【0077】
当業者であれば、前述の実施例は例示的なものであり、限定的なものではないことが理解されよう。明細書を読み、図面を検討すれば、それらに対するすべての置換、拡張、均等物、および改良は、当業者に明らかであり、本開示の真の精神および範囲内に含まれることが意図される。したがって、以下の添付の特許請求の範囲は、これら教示の真の精神および範囲内に含まれるすべてのそのような修正、置換、および均等物を含むことが意図される。