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

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

2025-24604生成装置、生成方法、及び、生成プログラム
<>
  • -生成装置、生成方法、及び、生成プログラム 図1
  • -生成装置、生成方法、及び、生成プログラム 図2
  • -生成装置、生成方法、及び、生成プログラム 図3
  • -生成装置、生成方法、及び、生成プログラム 図4
  • -生成装置、生成方法、及び、生成プログラム 図5
  • -生成装置、生成方法、及び、生成プログラム 図6
  • -生成装置、生成方法、及び、生成プログラム 図7
  • -生成装置、生成方法、及び、生成プログラム 図8
  • -生成装置、生成方法、及び、生成プログラム 図9
  • -生成装置、生成方法、及び、生成プログラム 図10
  • -生成装置、生成方法、及び、生成プログラム 図11
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2025024604
(43)【公開日】2025-02-20
(54)【発明の名称】生成装置、生成方法、及び、生成プログラム
(51)【国際特許分類】
   G06F 21/56 20130101AFI20250213BHJP
【FI】
G06F21/56 340
【審査請求】未請求
【請求項の数】7
【出願形態】OL
(21)【出願番号】P 2023128824
(22)【出願日】2023-08-07
【公序良俗違反の表示】
(特許庁注:以下のものは登録商標)
1.WINDOWS
(71)【出願人】
【識別番号】000004226
【氏名又は名称】日本電信電話株式会社
(74)【代理人】
【識別番号】110002147
【氏名又は名称】弁理士法人酒井国際特許事務所
(72)【発明者】
【氏名】久保田 稜
(72)【発明者】
【氏名】碓井 利宣
(72)【発明者】
【氏名】川古谷 裕平
(72)【発明者】
【氏名】岩村 誠
(57)【要約】
【課題】痕跡のバリエーションを考慮したシグネチャグラフを自動で生成することができる。
【解決手段】生成装置10は、マルウェアの実行ログを用いて、マルウェアの一連の実行プロセスにおける操作の主体及び対象をノードとし、操作の主体が当該操作の対象へ実行する操作を、ノード間を接続するエッジで表した第1の挙動グラフを作成するグラフ変換部11と、第1の挙動グラフを、第1の挙動グラフのノードラベルを、アルファベット及び数字の文字クラスの粒度で正規表現化した第2の挙動グラフに変換する正規表現化部12と、第2の挙動グラフに対し、グラフマイニングを行ってシグネチャグラフを生成する抽出部13と、を有する。
【選択図】図1
【特許請求の範囲】
【請求項1】
マルウェアの実行ログを用いて、前記マルウェアの一連の実行プロセスにおける操作の主体及び対象をノードとし、前記操作の主体が当該操作の対象へ実行する操作を、前記ノード間を接続するエッジで表した第1の挙動グラフを作成するグラフ変換部と、
前記第1の挙動グラフを、前記第1の挙動グラフのノードラベルを、アルファベット及び数字の文字クラスの粒度で正規表現化した第2の挙動グラフに変換する正規表現化部と、
前記第2の挙動グラフに対し、グラフマイニングを行ってシグネチャグラフを生成する抽出部と、
を有することを特徴とする生成装置。
【請求項2】
前記正規表現化部は、前記ノードラベルの文字列間の編集距離を基に前記ノードラベルをクラスタリングしたクラスタ集合を求め、各クラスタについて、前記ノードラベルの2つの文字列を基に、前記2つの文字列の両方を表す1つの文字列を生成する生成処理を行い、前記生成処理において生成した文字列を、所定のルールにしたがって、同等の正規表現に変換し、
前記生成処理の出力、及び、正規表現化の変換対象には、アルファベット及び数字を含むワイルドカードが含まれうる
ことを特徴とする請求項1に記載の生成装置。
【請求項3】
前記生成処理の際に、入力される2つの文字に応じて出力される値または文字が予め定められたルールを使用し、
前記2つの文字は、アルファベット及び数字を含むワイルドカード、及び、非ワイルドカードのいずれかである
ことを特徴とする請求項2に記載の生成装置。
【請求項4】
前記正規表現化部は、前記生成処理において、文字列のその文字までに至るまでの全文字を含めた部分文字列の近さを示す第1のテーブルと、その文字に至るまでの最適な文字の対応付けを表す第2のテーブルと、を作成し、
前記正規表現化部は、前記第1のテーブルを作成する際に、比較する文字の組み合わせに応じて近さを示す値が対応付けられた第1のルールを使用し、
前記正規表現化部は、前記第2のテーブルを基に前記1つの文字列を作成する際に、入力された2つの文字の組み合わせに応じて、出力する文字が対応付けられた第2のルールを使用し、
前記比較する文字及び前記2つの文字は、アルファベット及び数字を含むワイルドカード、及び、非ワイルドカードのいずれかである
ことを特徴とする請求項3に記載の生成装置。
【請求項5】
前記抽出部は、前記第2の挙動グラフの集合について、グラフマイニングを行い、良性プログラムであるnegative検体に相当する挙動グラフよりもマルウェアであるpositive検体に相当する挙動グラフに多く現れる部分グラフを抽出し、抽出した結果の部分グラフ集合を、前記シグネチャグラフとして出力することを特徴とする請求項1に記載の生成装置。
【請求項6】
生成装置が実施する生成方法であって、
マルウェアの実行ログを用いて、前記マルウェアの一連の実行プロセスにおける操作の主体及び対象をノードとし、前記操作の主体が当該操作の対象へ実行する操作を、前記ノード間を接続するエッジで表した第1の挙動グラフを作成する工程と、
前記第1の挙動グラフを、前記第1の挙動グラフのノードラベルを、アルファベット及び数字の文字クラスの粒度で正規表現化した第2の挙動グラフに変換する工程と、
前記第2の挙動グラフに対し、グラフマイニングを行ってシグネチャグラフを生成する工程と、
を含んだことを特徴とする生成方法。
【請求項7】
マルウェアの実行ログを用いて、前記マルウェアの一連の実行プロセスにおける操作の主体及び対象をノードとし、前記操作の主体が当該操作の対象へ実行する操作を、前記ノード間を接続するエッジで表した第1の挙動グラフを作成するステップと、
前記第1の挙動グラフを、前記第1の挙動グラフのノードラベルを、アルファベット及び数字の文字クラスの粒度で正規表現化した第2の挙動グラフに変換するステップと、
前記第2の挙動グラフに対し、グラフマイニングを行ってシグネチャグラフを生成するステップと、
をコンピュータに実行させるための生成プログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、生成装置、生成方法、及び、生成プログラムに関する。
【背景技術】
【0002】
[IOC(Indicator Of Compromise)]
企業ネットワーク上のPC端末をサイバー攻撃から保護するために広く使われている手段の1つが、Endpoint Detection & Response(EDR)である。EDRでは、端末にインストールされたエージェントが常時監視を行い、検知にはマルウェアが残す痕跡を表すIOCを使う。痕跡は、プロセス名や作成するファイルの名前など、マルウェアが活動したことによってシステム上に現れる特定の識別子である。
【0003】
エージェントは検知を行うと、アラートを通知する。それを受けて、通常セキュリティオペレーションセンター(SOC)の分析官が人手で確認・対応を行う。
【0004】
現状のIOCは、単一の痕跡についてのルール(例:ファイル“C:\Temp\mal.exe”を作成)、あるいは複数のルールの論理的結合(ANDまたはOR)で表される。個々のルールでは、単純な文字列の一致比較だけでなく、正規表現によるマッチングも可能である。
【0005】
[検知ルール]
検知ルールは、良性なプログラムを誤検知せず、かつマルウェアを見逃さないことが望ましい。なぜなら、誤検知が多ければ人的対応コストが増加し、見逃しは攻撃の被害拡大につながるからである。しかしながら、現状IOCは誤検知が多く、精度の改善が求められる。
【0006】
[痕跡のバリエーション]
同様の特徴を持ったマルウェアは同一のファミリ名で呼称される。検知ルールを作成するうえでの課題の1つは、同じファミリに属する検体であっても、類似した痕跡が、検体ごと、あるいは実行ごとに異なる場合が存在することである。これを痕跡のバリエーションと呼ぶ。
【0007】
マルウェア開発者は、検知を逃れるために、例えば、マルウェアが生成するファイル名をソースコード上で変更する。あるいは、マルウェア開発者は、実行時に動的にファイル名を決定するように実装する。
【0008】
このような痕跡は、そのまま検知ルールに使用すると、非常に限られた検体の範囲のみ検知するようになってしまい、検知力が低くなる。また、そのような痕跡を省いて検知ルールを作ったとしても、それ以外の痕跡が十分に特徴的でなければ、誤検知を生んでしまう。
【0009】
このようなマルウェアを高精度に検知するには、バリエーションのある痕跡の不変な部分を捉えることが必要である。
【0010】
EIGER(非特許文献1)は、同一ファミリに属する多数のマルウェア検体と良性検体の実行ログから、そのファミリを表すようなIOCを自動的に生成する技術である。この手法は類似の痕跡をまとめて正規表現化したうえでIOCを生成する。
【0011】
一方で、マルウェアの特徴を、現状のIOCのように痕跡の論理的結合として表現するのではなく、痕跡をノードとしたグラフとして表現し検知ルールとする手法も存在する。ここではそのようなグラフをシグネチャグラフと呼ぶ。
【0012】
HOLMES(非特許文献2)は、シグネチャグラフを自動生成する手法の1つである。入力は、同一ファミリの複数の悪性検体と、良性検体の実行ログから作られたグラフの集合である。グラフマイニングなどの技術を用い、「悪性検体には多くマッチするが良性検体にはあまりマッチしない」ようなサブグラフ集合を出力する。
【0013】
ただし、HOLMESは、痕跡のバリエーションを考慮しておらず、正規表現のようなパターン生成も行わない。
【0014】
[正規表現]
痕跡のバリエーションを表現する方法として、正規表現としてコンパクトに表現することが考えられる。
【0015】
前述の通り、EIGERは正規表現を用いる。しかしながら、EIGERは文字列の先頭から、同じ位置に存在する文字を比較するため、文字列の中間付近に存在する部分文字列(フォルダ名など)の長さにバリエーションがある場合、うまくそれをとらえることができない。
【0016】
そこで、長さのバリエーションをとらえられる正規表現生成手法としてSRE(非特許文献3)がある。しかしながら、SREは、文字クラスを限定したパターンを生成できない。バリエーションが特定の文字クラス(例: 数字)に限定されているのにもかかわらず、文字クラスを限定しないパターン(例:「.{5}」)を生成すれば、誤検知を生むおそれがある。実際、痕跡のバリエーションは、特定の文字クラスに限定されることが多い。
【0017】
正規表現として、文字クラスを限定でき、かつ、長さも含めたバリエーションをとらえられるような手法が求められる。
【0018】
他に、文字クラスを限定したパターンを生成できる手法として、ARROW(非特許文献5)がある。ARROWは、URLの集合から正規表現を生成する手法を提案している。しかし、URLのコンポーネント(「?」,「&」,「=」,「/」などの文字で区切られた部分文字列)を比較の単位としており、もし、入力文字列間で、とあるコンポーネントの一部分のみ異なる場合でも、そのコンポーネント全体がパターンに置換されてしまう。
【先行技術文献】
【非特許文献】
【0019】
【非特許文献1】Y. Kurogome, Y. Otsuki, Y. Kawakoya, M. Iwamura, S. Hayashi, T. Mori, and K. Sen, “EIGER: Automated IOC Generation for Accurate and Interpretable Endpoint Malware Detection”, In Proceedings of the 35th Annual Computer Security Applications Conference (ACSAC '19), pp. 687-701, 2019., [令和5年7月11日検索],インターネット<URL:https://dl.acm.org/doi/10.1145/3359789.3359808>
【非特許文献2】M. Fredrikson, S. Jha, M. Christodorescu, R. Sailer and X. Yan, “Synthesizing Near-Optimal Malware Specifications from Suspicious Behaviors”, 2010 IEEE Symposium on Security and Privacy, Oakland, CA, USA, 2010, pp. 45-60, doi: 10.1109/SP.2010.11., [令和5年6月28日検索],インターネット<URL:https://ieeexplore.ieee.org/document/5504788>
【非特許文献3】Tang, Yong et al. “Generating Simplified Regular Expression Signatures for Polymorphic Worms”, International Conference on Autonomic and Trusted Computing (2007)., [令和5年7月11日検索],インターネット<URL:http://www4.comp.polyu.edu.hk/~csbxiao/paper/2007/ATC-07-SRE.pdf>
【非特許文献4】Gonzalez, L. B. Holder, and D. J. Cook, “Graph-Based Concept Learning”, Proceedings of the Florida Artificial Intelligence Research Symposium, 2001., [令和5年7月11日検索],インターネット<URL:https://ailab.wsu.edu/subdue/papers/GonzalezAAAI00.pdf>
【非特許文献5】Zhang, Junjie and Seifert, Christian and Stokes, Jay and Lee, Wenke, “ARROW: GenerAting SignatuRes to Detect DRive-By DOWnloads”, 2011 The Web Conference., [令和5年6月28日検索],インターネット<URL:https://www.microsoft.com/en-us/research/publication/arrow-generating-signatures-to-detect-drive-by-downloads/>
【発明の概要】
【発明が解決しようとする課題】
【0020】
シグネチャグラフは、現状のIOCと比較して、表現できる情報の種類が多いため、より高精度に検知できる可能性がある。具体的には、マルウェア実行時に複数のプロセスが別々の痕跡を残す場合では、現状のIOCではどのプロセスがどの痕跡を残すのかを表現することができないが、シグネチャグラフでは表現可能である。
【0021】
しかしながら、痕跡のバリエーションを考慮するようなシグネチャグラフ自動生成手法はまだ提案されていない。
【0022】
本発明は、上記に鑑みてなされたものであって、痕跡のバリエーションを考慮したシグネチャグラフを自動で生成することができる生成装置、生成方法、及び、生成プログラムを提供することを目的とする。
【課題を解決するための手段】
【0023】
上述した課題を解決し、目的を達成するために、本発明に係る生成装置は、マルウェアの実行ログを用いて、前記マルウェアの一連の実行プロセスにおける操作の主体及び対象をノードとし、前記操作の主体が当該操作の対象へ実行する操作を、前記ノード間を接続するエッジで表した第1の挙動グラフを作成するグラフ変換部と、前記第1の挙動グラフを、前記第1の挙動グラフのノードラベルを、アルファベット及び数字の文字クラスの粒度で正規表現化した第2の挙動グラフに変換する正規表現化部と、第2の挙動グラフに対し、グラフマイニングを行ってシグネチャグラフを生成する抽出部と、を有することを特徴とする。
【発明の効果】
【0024】
本発明によれば、痕跡のバリエーションを考慮したシグネチャグラフを自動で生成することができる。
【図面の簡単な説明】
【0025】
図1図1は、実施の形態に係る生成装置の構成の一例を示す図である。
図2図2は、実行ログのデータ構成の一例を示す図である。
図3図3は、図1に示すグラフ変換部が実行する処理の例を示すフローチャートである。
図4図4は、第1の挙動グラフの一例を示す図である。
図5図5は、図1に示す正規表現化部が実行する処理の例を示すフローチャートである。
図6図6は、Alignサブルーチンの処理内容を示す図である。
図7図7は、Character Similarity(以降、CharSimilarityとする)サブルーチンにおける入出力パターンを示す図である。
図8図8は、Lookup Character Compare Table(以降、LookupCharCompTabとする)サブルーチンにおける入出力パターンを示す図である。
図9図9は、図1に示す抽出部が実行する処理の例を示すフローチャートである。
図10図10は、図1に示す生成装置が出力するシグネチャグラフの一例を示す図である。
図11図11は、プログラムが実行されることにより、生成装置が実現されるコンピュータの一例を示す図である。
【発明を実施するための形態】
【0026】
以下、図面を参照して、本発明の一実施形態を詳細に説明する。なお、この実施形態により本発明が限定されるものではない。また、図面の記載において、同一部分には同一の符号を付して示している。
【0027】
実施の形態として、シグネチャグラフの新たな生成手法を提案する。実施の形態では、痕跡のバリエーションを、文字クラス粒度の正規表現で正規表現として表現するシグネチャグラフの新たな自動生成方法、具体的には、正規表現をノードラベルに含むシグネチャグラフの新たな自動生成手法を説明する。
【0028】
本実施の形態では、シグネチャグラフを生成する際に、ノードラベルのクラスタリングを行ってから、各クラスのノードラベルの正規表現化を行い、バリエーションを除去した上でグラフマイニングを行うことで、痕跡のバリエーションを内包したパターンを抽出できる。
【0029】
ここで、本実施の形態では、各クラスのノードラベルを、アルファベット及び数字の文字クラスの粒度で正規表現化を行う手法を実現した。これによって、実施の形態では、次のように、文字クラスの粒度での正規表現を実現する。具体的には、実施の形態では、「xhde309」, 「luih756」を、「[a-zA-Z]{4}[0-9]{3}」という正規表現に変換する。なお、従来技術(例えば、非特許文献3)は、「xhde309」,「luih756」を「.{7}」に変換するのみであった。
【0030】
[生成装置]
本実施の形態に係る生成装置について説明する。図1は、実施の形態に係る生成装置の構成の一例を示す図である。
【0031】
実施の形態に係る生成装置10は、痕跡のバリエーションを考慮したシグネチャグラフを自動で生成する。生成装置10は、1つのファミリを表現するシグネチャグラフを、1つ或いは複数生成する。
【0032】
検知の方法の一例を説明する。検知装置20において、監視対象の端末の監視ログを収集して、監視ログの挙動グラフを構成する。検知装置20は、生成装置10が生成したシグネチャグラフを取得する。そして、検知装置20は、生成装置10が生成したシグネチャグラフのうち、あるファミリのシグネチャグラフいずれか1つが、監視対象の端末の監視ログの部分グラフとして現れた場合、監視対象の端末に感染したマルウェアが、そのファミリのマルウェアと判定する。
【0033】
実施の形態に係る生成装置10は、例えば、ROM(Read Only Memory)、RAM(Random Access Memory)、CPU(Central Processing Unit)等を含むコンピュータ等に所定のプログラムが読み込まれて、CPUが所定のプログラムを実行することで実現される。また、生成装置10は、ネットワーク等を介して接続された他の装置との間で、各種情報を送受信する通信インタフェースを有する。
【0034】
生成装置10は、監視対象の端末の監視ログである実行ログを入力とし、痕跡のバリエーションを考慮したシグネチャグラフを自動で生成し、出力する。生成装置10は、実行ログを第1の挙動グラフに変換するグラフ変換部11、第1の挙動グラフのノードラベルを正規表現化した第2の挙動グラフに変換する正規表現化部12、及び、第2の挙動グラフを基にシグネチャグラフを生成する抽出部13を有する。
【0035】
[実行ログ]
図2は、実行ログのデータ構成の一例を示す図である。図2に示すように、入力データである実行ログには、1以上の実行ログが含まれる。入力データである実行ログは、ある検体集合に属する検体からそれぞれ得られた実行ログからなる集合である。
【0036】
この検体集合は、シグネチャグラフを作成しようとしている対象のマルウェア(positive検体と呼ぶ)集合と、良性プログラム(negative検体と呼ぶ)集合の和集合である。各実行ログには、実行プロセスの呼び出し元のPID(プロセスID、操作の主体となるプロセスの識別情報)、当該PIDの操作の種類、当該操作の対象等が示される。
【0037】
操作の種類は、例えば、ファイルの読み込み・書き込み、プロセスの作成・終了、他プロセスへのコード注入に関わる操作(例えば、CreateRemoteThread等)、ソケットへの送信・受信等である。なお、Windows OSの場合、操作の種類として、レジストリの読み込み・書き込みをさらに含む。
【0038】
操作の対象は、例えば、操作の対象がファイルの場合はファイルパス、レジストリの場合はキー・バリューのパス、プロセスの場合はプロセスID、ソケットの場合は通信先のIPアドレス、コード注入関連のAPIは対象のプロセスID等である。
【0039】
ただし、例えば、操作の対象がレジストリキーの場合等、操作の対象がハンドルを用いて操作されるリソースである場合、該当の呼び出しの情報だけでは操作の対象が特定できない可能性がある。ここで操作の対象がレジストリキーの場合は、RegOpenKeyで得られたハンドルを引数にして、さらにRegOpenKeyを呼び出すことで、さらに深いパスのキー(サブキー)をオープンすることができる。よって、該当の呼び出しの情報だけでは操作の対象が特定できない場合、データ入力元の装置が、過去の呼び出しを再帰的にさかのぼって情報を取得し、実行ログファイルに書き込まれる。
【0040】
[グラフ変換部]
次に、グラフ変換部11について説明する。グラフ変換部11は、入力の各実行ログを第1の挙動グラフ1つに変換する。図3は、図1に示すグラフ変換部11が実行する処理の例を示すフローチャートである。
【0041】
例えば、グラフ変換部11は、実行ログに示されるマルウェアの一連の実行プロセスにおける、操作の主体及び対象をノードとし、操作の主体が当該操作の対象に対し実行する操作を、ノード間を接続するエッジで表した第1の挙動グラフを作成する。ただし、マルウェアを実行することによって作られる最初のプロセスをrootノードとし、固有のラベル(例えばroot)を与える。このラベルは全検体で共通である。グラフ変換部11による処理の詳細を、図3を用いて説明する。
【0042】
例えば、グラフ変換部11は、マルウェアの実行ログを取得する(ステップS11)。そして、グラフ変換部11は、空のグラフGを用意し(ステップS12)、ステップS11で取得した実行ログそれぞれに対し、以下に示すステップS13~ステップS16の処理を実行した後、グラフGを返す(ステップS17)。
【0043】
例えば、グラフ変換部11は、ステップS11で取得したマルウェアの実行ログに示される操作の主体、操作の対象に対応するノードがグラフG内に存在しなければ、操作の主体、操作の対象に対応するノードを作成する(ステップS13)。
【0044】
次に、グラフ変換部11は、実行ログ内で着目している操作が、読み込みアクセスまたは受信であるか否かを判定し(ステップS14)、着目している操作が、読み込みアクセスまたは受信であると判定した場合(ステップS14:Yes)、ステップS15へ進む。そして、グラフ変換部11は、グラフGに、操作の対象のノードから当該操作の主体のノードへの当該操作の種類のラベルが付いたエッジがまだ存在しなければ、グラフGに追加する(ステップS15)。
【0045】
一方、グラフ変換部11は、実行ログ内で着目している操作が、操作の対象の読み込みアクセス、受信のいずれでもないと判定した場合(ステップS14:No)、ステップS16へ進む。そして、グラフ変換部11は、グラフGに、操作の主体のノードから当該操作の対象のノードへの当該操作の種類のラベルが付いたエッジがまだ存在しなければ、グラフGに追加する(ステップS16)。
【0046】
このようにすることでグラフ変換部11は、マルウェアの実行ログに対応する挙動グラフを作成することができる。
【0047】
なお、グラフ変換部11は、上記の第1の挙動グラフの作成において、POIROT(非特許文献2参照)のprovenanceグラフと同様に、プロセス、ファイル、ソケットをノードとして表現し、それぞれの具体的な挙動をノード間のエッジとして表現する。なお、Windows OSの場合、グラフ変換部11は、レジストリもノードとして表現する。
【0048】
また、上記のプロセスはPIDで区別されるが、終了したプロセスのPIDは新しいプロセスに再利用される。そのため、グラフ変換部11は、上記のような新しいプロセスには別のノードを割り当てる。
【0049】
なお、グラフ変換部11は、上記のレジストリ及びファイルをパスで区別し、ソケットをIPアドレスで区別する。
【0050】
また、グラフ変換部11は、操作の種類が、読み込みアクセスまたは受信の場合は、エッジの向きを操作の対象のノードから操作の主体のノードへの方向とする。それ以外の場合は逆の方向とする。
【0051】
図4は、第1の挙動グラフの一例を示す図である。例えば、グラフ変換部11は、図2に示した実行ログに基づき、図4に示す第1の挙動グラフを作成する。なお、図4に示す第1の挙動グラフにおいて、エッジには操作の種類を示すラベルの記載は省いている。
【0052】
例えば、グラフ変換部11は、図4に示すように、図2に示す実行ログにおける操作の主体(例えば、最初のプロセスであるrootノード)と、当該操作の主体による操作の対象(例えば、ファイル C:\Temp\logger.exe、レジストリ HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run\logger、プロセス(ProcessID=20)"C:\Temp\logger.exe" --detach、ファイル C:\Temp\log)と、を示すノードを作成する。
【0053】
また、図4に示す実行ログにおける操作の主体(例えば、C:\Temp\Ddcu49\logger.exe)と、当該操作の主体による操作の対象(root)とを示すノードを作成する。そして、グラフ変換部11は、操作の主体のノードと当該操作の主体による操作の対象のノードとをエッジで接続する。
【0054】
なお、図4に示す実行ログにおけるrootの操作の対象「"C:\Temp\Ddcu49\logger.exe" --detach」は、「C:\Temp\Ddcu49\logger.exe」のプロセスの作成であるため、グラフ変換部11は、rootのノードと、「"C:\Temp\Ddcu49\logger.exe" --detach」のノードとをエッジで接続する。
【0055】
また、グラフ変換部11が作成する最終的な第1の挙動グラフには、操作の主体のノード(プロセスノード)にPIDを含めない。これにより、検知装置20が、監視ログの挙動グラフと第1の挙動グラフとのマッチングを行う際、任意のプロセスノードにマッチさせることができる。
【0056】
[正規表現化部]
正規表現化部12は、第1の挙動グラフのノードラベルを、アルファベット及び数字の文字クラスの粒度で正規表現化した第2の挙動グラフに変換する。正規表現化部12は、ノードラベルの文字列間の編集距離を基にノードラベルをクラスタリングしたクラスタ集合を求め、各クラスタについて、クラスタに含まれるノードラベルの文字列すべてを正規表現化する。
【0057】
この際、正規表現化部12は、各クラスタについて、ノードラベルの2つの文字列を基に、2つの文字列の両方を表す1つの文字列を生成するAlignサブルーチン(生成処理)を行い、Alignサブルーチンにおいて生成した文字列を、所定のルールにしたがって、同等の正規表現に変換する。
【0058】
ここで、Alignサブルーチンの出力、及び、正規表現化の変換対象には、アルファベット及び数字を含むワイルドカードが含まれうる。正規表現化部12は、Alignサブルーチンの際に、所定のルールを用いる。Alignサブルーチンの際に使用されるルールは、入力される2つの文字に応じて出力される値または文字が予め定められたルールである。2つの文字は、アルファベット及び数字を含むワイルドカード、及び、非ワイルドカードのいずれかである。
【0059】
図5は、図1に示す正規表現化部12が実行する処理の例を示すフローチャートである。
【0060】
正規表現化部12は、グラフ変換部11が変換した第1の挙動グラフの集合Sを入力として受け付ける(ステップS21)。正規表現化部12は、ステップS21において取得した第1の挙動グラフの各ノードタイプTについて、以下に示すステップS22~ステップS35を実行した後、出力S(第2の挙動グラフの集合)を返す(ステップS36)。
【0061】
正規表現化部12は、まず、ステップS21で取得した第1の挙動グラフの集合Sの各ノードタイプTについて、第1の挙動グラフの集合Sに属するグラフに含まれるタイプTのノードのラベルのうち、複数のグラフに現れないものすべてをノードのラベルの集合Lとして抽出する(ステップS23)。
【0062】
正規表現化部12は、ノードラベルの文字列間の編集距離を基に、ラベルの集合Lを、DBSCANアルゴリズムを用いてクラスタリングした結果のクラスタ集合をCSとして求める(ステップS24)。
【0063】
正規表現化部12は、CS内の各クラスタCについて、以下のステップS25~ステップS34を繰り返し行う。まず、各クラスタC内の任意のラベルの1つをpとする(ステップS26)。
【0064】
そして、正規表現化部12は、各クラスタC内の各ラベルlについて、以下のステップS27~ステップS29を繰り返し行う。正規表現化部12は、各クラスタC内の各ラベルlについて、Alignサブルーチン(p=Align(p, l))を実行する(ステップS28)。Align(p, l)は、ノードラベルの2つの文字列を基に、2つの文字列の両方を表す1つの文字列を生成する。なお、Align(p, l)は、Alignサブルーチンにpとlとを入力として得られる出力を指す。後述のConvert(p)も同様である。
【0065】
正規表現化部12は、ステップS27~ステップS29のループが終了すると、Alignサブルーチンの実行結果pを、正規表現rに変換する(r=Convert(p))(ステップS30)。
【0066】
正規表現化部12は、C内の各ラベルlについて、以下のステップS31~ステップS33を繰り返し行う。正規表現化部12は、C内の各ラベルlについて、Sに属するグラフに含まれるノードタイプTのノードでラベルがlであるものすべてについて、ラベルを正規表現rで置換する(ステップS32)。
【0067】
図5では、クラスタリングとして、DBSCANアルゴリズムを用いた場合を例に説明したが、これに限らない。
【0068】
例えば、実施の形態では、クラスタリングとして、クラスタ数の指定を必要とせず、外れ値(いずれのクラスタにも属さないデータ点)を判定でき、かつ、複数の互いに素な部分集合の集合を出力するようなアルゴリズムであれば他のものを用いてもよい。例えば、実施の形態では、クラスタリングとして、X-meansやOPTICSを適用することも可能である。
【0069】
また、実施の形態では、クラスタリングのための、データ点どうしの距離関数(metric)として、編集距離を用いるが、適用できる手法はこれに限らない。例えば、2つの文字列の類似度を表すような関数であれば、任意のものを用いることができる。例えば、ジャロ・ウィンクラー距離がある。
【0070】
[Alignサブルーチン]
図5のステップS28に示すAlignサブルーチンについて説明する。Alignサブルーチンは、2つの文字列(ワイルドカードを含みうる)を入力とし、それら両方を表すような文字列を出力する。ここで、図5に示すように、入力は2つのラベル(文字列)であり、双方のラベルを表すような文字列を出力する。
【0071】
Alignサブルーチンは、ワイルドカードとして、SREで用いられる「*」、「?」に加え、「α」及び「δ」を導入する。「*」は任意の1文字または0文字を表すシンボルである。「?」は任意の1文字を表すシンボルである。「δ」は数字文字(正規表現における「[0-9]」)1文字を表すシンボルである。「α」は任意のアルファベット文字(正規表現における「[a-zA-Z]」)を表すシンボルである。ワイルドカードは、Alignサブルーチンのループ処理において、出力として含まれうるものであり、Alignサブルーチンの入力としても含まれる場合がある。
【0072】
このように、Alignサブルーチンは、SREとは異なり、アルファベット及び数字を含む文字クラスの粒度のワイルドカードも含めて、文字列の生成を行う。そして、Alignサブルーチンは、ワイルドカードの追加に伴い、従来技術(例えば、非特許文献3)と比して、図7及び図8に示すように文字比較の処理を変更している。
【0073】
図6は、Alignサブルーチンの処理の例を示すフローチャートである。
【0074】
Alignサブルーチンは、入力文字列X, Yの文字間のあらゆる対応付けの中から、最もスコア(非特許文献3の式(2))が高いものを算出し、その対応付けから得られるワイルドカード文字列Rを出力する。Alignサブルーチンは、動的計画法を用いている。
【0075】
そして、Alignサブルーチンは、テーブルF,PTR,Tを用いる。なお、(テーブル名)[i][j]は、テーブルのi列目、j行目のセルを表す。行番号、列番号は0からスタートする。
【0076】
テーブルF(第1のテーブル)のF[i][j]は、「Xのi文字目までの部分文字列」と「Yのj文字目まで部分文字列」の間の対応付けの最適スコアを表す。テーブルFは、文字列のその文字までに至るまでの全文字を含めた部分文字列の近さを示す。
【0077】
テーブルPTR(第2のテーブル)のPRT[i][j]は、F[i][j]がどのセル(左か上か左上)の値に基づいているかを表す。この値を繰り返し辿っていくことで、「Xのi文字目までの部分文字列」と「Yのj文字目まで部分文字列」の間の最適な文字の対応付けがわかる。テーブルPTRは、その文字に至るまでの最適な文字の対応付けを表すテーブルである。
【0078】
テーブルTの「Xのi文字目までの部分文字列」と「Yのj文字目まで部分文字列」とを比較したとき、右端から見て何文字連続で一致しているか(例えば、「abc」と「edbc」との場合は「2」)を表す。Tの値に応じてスコアを加算(具体的には、enc(T[i][j])(後述)を加算)することで、最終的な出力結果において、非ワイルドカード文字が連続しやすくなる。
【0079】
enc関数は、上記のように、n文字連続して一致しているときに与えるボーナススコアを表す関数である。ここでは、例として、enc(n)=2nとする。
【0080】
図6に示すように、Alignサブルーチンでは、2つの文字列X, Yを入力とする(ステップS41)。
【0081】
Alignサブルーチンでは、N=Xの長さ、M=Yの長さ、F=行数が(N+1)であり列数が(M+1)のテーブル(第1のテーブル)、PTR=Fと同じサイズのテーブル(第2のテーブル)、T=Fと同じサイズのテーブル、Δ=-1とする(ステップS42)。
【0082】
そして、Alignサブルーチンでは、テーブルF,PTR,Tの第0行目のセルと第0列目のセルをそれぞれ適切な値で初期化する(ステップS43)。
【0083】
Alignサブルーチンでは、ループ(イテレーション)として、各セルに対してステップS44~ステップS50の処理を繰り返し行う。Alignサブルーチンでは、ステップS44~ステップS50の処理は、[0][0]のセルから[N][M]のセルに向かって順に実行する。
【0084】
まず、Alignサブルーチンでは、c1=Xのi番目の文字、c2=Yのj番目の文字とする(ステップS45)。Alignサブルーチンでは、c1とc2が等しく、かつ、いずれもワイルドカードでないか否かを判定する(ステップS46)。
【0085】
c1とc2が等しく、かつ、いずれもワイルドカードである場合(ステップS46:Yes)、T[i][j]=T[i-1][j-1]+1とする(ステップS47)。一方、c1とc2が異なる、または、いずれかがワイルドカードである場合(ステップS46:No)、T[i][j]=0とする(ステップS48)。
【0086】
続いて、Alignサブルーチンでは、CharSimilarityサブルーチン(第1のルール)にしたがって、cs=CharSimilarity(c1, c2)を求める(ステップS49)。csは、比較する文字の組み合わせに応じた近さを示す値である。
【0087】
CharSimilarityサブルーチンについて説明する。図7は、CharSimilarityサブルーチンを説明する図である。CharSimilarityサブルーチンでは、2つの文字(c1, c2)を入力とし、図7に示すテーブルに基づいて、csの値を出力する。
【0088】
CharSimilarityサブルーチンは、テーブルFを作成する際に使用されるルールであって、比較する文字の組み合わせに応じて近さを示す値が対応付けられたルールである。2つの文字(c1, c2)は、アルファベット及び数字を含むワイルドカード(「*」、「?」、「α」、「δ」)、及び、非ワイルドカードのいずれかである。
【0089】
CharSimilarityサブルーチンでは、ワイルドカードとワイルドカードとの組み合わせ、ワイルドカードと非ワイルドカードとの組み合わせ、非ワイルドカードと非ワイルドカードとの組み合わせの各組合せに応じて、出力されるcsの値(0, 1, 3)が対応付けられている。
【0090】
ステップS49では、score1,score2,score3を求める。
【0091】
score1、score2、score3は以下となる。
score1=F[i-1][j-1]+cs+enc(T[i][j])
score2=F[i-1][j]+Δ
score3=F[i][j-1]+Δ
【0092】
ステップS49では、score1、score2、score3のうち最大のものをFテーブルのi列目、j行目のセル(F[i][j])に代入する。そして、ステップS49では、どのscoreが最大であるかに応じて、"Diagonal"、"Up"または"Left"を、テーブルPTRテーブルのi列目、j行目のセル(PTR[i][j])に代入する。具体的には、score1が最大である場合には"Diagonal"を代入し、score2が最大である場合には"Up"を代入し、score3が最大である場合には"Left"を代入する。
【0093】
Alignサブルーチンでは、ループ(イテレーション)が終了すると(ステップS50)、R=""(空の文字列)とする(ステップS51)。
【0094】
テーブルPTRに保存される向きの情報「Dial」、「Up」、「Left」を参照し、テーブルPTRに記載された向きの情報を使って、逆向きに辿ると、文字列X,Yの対応関係が分かる。そこで、Alignサブルーチンでは、ループ(トレースバック)として、テーブルPTRの各セルの向きをの情報を参照する。そして、テーブルT上で[N][M]からスタートし、そのセルの値に応じて左上または上または左に移動することを、[0][0]に到達するまで繰り返す(ステップS52~ステップS54)。その過程で、各セル[i][j]において、以下のステップS53を実行する。
【0095】
Alignサブルーチンでは、c1=Xのi番目の文字とし、c2=Yのj番目の文字とし、LookupCharCompTab(第2のルール)にしたがって、r=LookupCharCompTab(c1, c2)を求める(ステップS53)。LookupCharCompTabサブルーチンは、テーブルPTRを参照して、2つの文字列の両方を表す1つの文字列を生成する際に使用されるルールである。LookupCharCompTabサブルーチンは、入力された2つの文字の組み合わせに応じて、出力する文字が対応付けられている。
【0096】
LookupCharCompTabサブルーチンについて説明する。図8は、LookupCharCompTabサブルーチンを説明する図である。
【0097】
LookupCharCompTabサブルーチンでは、2つの文字(c1, c2)を入力とし、図8に示すテーブルに基づいて、rの値を出力する。図8に示すテーブルでは、入力された2つの文字の組み合わせに応じて、出力する文字が対応付けられている。2つの文字(c1, c2)は、アルファベット及び数字を含むワイルドカード(「*」、「?」、「α」、「δ」)、及び、非ワイルドカードのいずれかである。
【0098】
LookupCharCompTabサブルーチンでは、ワイルドカードとワイルドカードとの組み合わせ、ワイルドカードと非ワイルドカードとの組み合わせ、非ワイルドカードと非ワイルドカードとの組み合わせの各組合せに応じて、出力される文字r(「*」、「?」、「α」、「δ」、「x」)が対応付けられている。
【0099】
そして、ステップS53では、Rの先頭に文字rを挿入する。
【0100】
Alignサブルーチンでは、ループ(トレースバック)が終了すると(ステップS54)、Rを、Alignサブルーチンの実行結果pとして出力し(ステップS55)、処理を終了する。
【0101】
[Convertサブルーチン]
図5のステップS30におけるConvertサブルーチンについて説明する。Convertサブルーチンは、ワイルドカードを含む文字列Xを入力とし、次の処理を行う。
【0102】
まず、Convertサブルーチンでは、文字列Xを、同等の正規表現rに変換する。
【0103】
Convertサブルーチンでは、シンボル「*」は「.?」に変換する。シンボル「?」は「.」に変換する。シンボル「δ」は、「[0-9]」に変換する。シンボル「α」は「[a-zA-Z]」に変換する。
【0104】
Convertサブルーチンでは、同じワイルドカードが複数連続している場合、「.{n}」を用いてまとめる。例えば、「xδδαααabc」は「x[0-9]{2}[a-zA-Z]{3}abc」に変換する。
【0105】
そして、Convertサブルーチンでは、エスケープ処理が必要な非ワイルドカード文字はエスケープする。例えば、例えば、「.」を「\.」に変換する。どの文字のエスケープが必要かは、検知時に正規表現のマッチングを行う正規表現エンジンの実装に依存する。
【0106】
Convertサブルーチンでは、変換した正規表現rを出力する。
【0107】
[抽出部]
抽出部13は、ノードラベルを正規表現化した第2の挙動グラフを基にシグネチャグラフを生成する。図9は、図1に示す抽出部13が実行する処理の例を示すフローチャートである。
【0108】
抽出部13は、第2の挙動グラフの集合Sを入力として受け付ける(ステップS61)。抽出部13は、集合Sの中のうち、positive検体に相当する挙動グラフP、集合Sの中のうち、negative検体に相当する挙動グラフNを抽出する(ステップS62)。
【0109】
抽出部13は、挙動グラフPをpositive examples、挙動グラフNをnegative examplesとして、グラフマイニングであるSubdueCL(非特許文献4)を実行して抽出した結果の部分グラフ集合SGを生成する(ステップS63)。
【0110】
抽出部13は、部分グラフ集合SG内の各部分グラフgに対して、gが(root)ラベルのノードを含む場合には、そのラベルを正規表現「.*」で置き換える(ステップS64)。そして、抽出部13は、部分グラフ集合SGを、シグネチャグラフとして出力する(ステップS65)。
【0111】
このように、抽出部13は、入力である第2の挙動グラフの集合Sの中のpositive検体に頻繁に現れ、negative検体にはほとんど現れない部分グラフをいくつか抽出する。
【0112】
抽出部13では、抽出方法として、SubdueCLというグラフマイニング手法を用いる。これは入力として、positive examplesとnegative examplesという2つのグラフ集合をとる。出力は、positive examplesに多く現れ、negative examplesにあまり現れないような部分グラフである。positive examplesとしてpositive検体のグラフを、negative examplesとしてnegative検体のグラフを入力することで、できるだけpositiveのファミリの検体にのみマッチするような部分グラフを作ることができる。
【0113】
[シグネチャグラフの一例]
図10は、図1に示す生成装置10が出力するシグネチャグラフの一例を示す図である。なお、実際に出力されるシグネチャグラフのラベルは、他の類似した検体と比較してどの部分が実際に共通しているかに依存する。
【0114】
図10に示すように、実行ログにおける操作の主体であるrootラベルのノードは、ステップS54の処理において、ラベルが正規表現「.*」に置き換えられている。
【0115】
そして、「.*」ラベルのノードと接続する、ノードのラベル「C:\Temp\Ddcu49\logger.exe」は、「Ddcu49」部の各アルファベット、数字を正規表現化した「C:\\Temp\\[a-zA-Z]{4}[0-9]{2}\\logger\.exe」と表現される。
【0116】
また、「.*」ラベルのノードと接続する、ノードのラベル「"C:\Temp\Ddcu49\logger.exe" --detach」は、「Ddcu49」部の各アルファベット、数字を正規表現化した「"C:\\Temp\\[a-zA-Z]{4}[0-9]{2}\\logger\.exe" --detach」」と表現される。
【0117】
なお、ノードのラベル「"C:\Temp\Ddcu49\logger.exe" --detach」と接続する、ノードのラベル「C:\Temp\logs.txt」は、他の挙動グラフによって決まり、図10の例では、「C:\Temp\logs.txt 」のままである。
【0118】
[実施の形態の効果]
図10に例示する様に、実施の形態に係る生成装置10は、痕跡のバリエーションを、アルファベット及び数字の文字クラスの粒度に至るまで正規表現として表現したシグネチャグラフを自動生成することができる。
【0119】
生成装置10は、ノードラベルの文字列間の編集距離を基にノードラベルをクラスタリングしたクラスタ集合を求める。生成装置10は、各クラスタについて、ノードラベルの2つの文字列を基に、2つの文字列の両方を表す1つの文字列を生成するAlignサブルーチンを行う。生成装置10は、Alignサブルーチンにおいて生成した文字列を、所定のルールにしたがって、同等の正規表現に変換し、グラフマイニングを行ってシグネチャグラフを生成する。
【0120】
ここで、生成装置10は、Alignサブルーチンの際に、入力される2つの文字に応じて出力される値及び文字が予め定められたルールを用いる。入力される2つの文字は、アルファベット及び数字を含むワイルドカード及び非ワイルドカードのいずれかである。生成装置10は、アルファベット及び数字を含むワイルドカード及び非ワイルドカードに対応したルールを用いてAlignサブルーチンを実行する。
【0121】
これによって、生成装置10は、アルファベット及び数字の文字クラスの粒度に至るまで、ノードラベルの正規表現化を行い(図5)、バリエーションを除去した上で、グラフマイニングを行うことで、痕跡のバリエーションを内包したパターンを抽出できる。
【0122】
したがって、生成装置10は、痕跡のバリエーションを、アルファベット及び数字の文字クラスの粒度に至るまで正規表現として表現するシグネチャグラフを、自動で生成することができる。生成装置10は、痕跡のバリエーションを正規表現で吸収し、より多くの検体を表現するシグネチャグラフを生成できる。分析側では、このシグネチャグラフを基に、より多くの未知の検体が検知できるようになる。
【0123】
さらに、生成装置10では、痕跡にバリエーションのある似た検体に対してそれぞれシグネチャグラフを作るのではなく、1つのシグネチャグラフで多くの検体を表現することができ、検知の計算負荷削減や、分析官にとっての分かりやすさが向上する。
【0124】
[実施の形態のシステム構成について]
生成装置10の各構成要素は機能概念的なものであり、必ずしも物理的に図示のように構成されていることを要しない。すなわち、生成装置10の機能の分散及び統合の具体的形態は図示のものに限られず、その全部または一部を、各種の負荷や使用状況などに応じて、任意の単位で機能的または物理的に分散または統合して構成することができる。
【0125】
また、生成装置10においておこなわれる各処理は、全部または任意の一部が、CPU、GPU(Graphics Processing Unit)、及び、CPU、GPUにより解析実行されるプログラムにて実現されてもよい。また、生成装置10において行われる各処理は、ワイヤードロジックによるハードウェアとして実現されてもよい。
【0126】
また、実施の形態において説明した各処理のうち、自動的におこなわれるものとして説明した処理の全部または一部を手動的に行うこともできる。もしくは、手動的におこなわれるものとして説明した処理の全部または一部を公知の方法で自動的に行うこともできる。この他、上述及び図示の処理手順、制御手順、具体的名称、各種のデータやパラメータを含む情報については、特記する場合を除いて適宜変更することができる。
【0127】
[プログラム]
図11は、プログラムが実行されることにより、生成装置10が実現されるコンピュータの一例を示す図である。コンピュータ1000は、例えば、メモリ1010、CPU1020を有する。また、コンピュータ1000は、ハードディスクドライブインタフェース1030、ディスクドライブインタフェース1040、シリアルポートインタフェース1050、ビデオアダプタ1060、ネットワークインタフェース1070を有する。これらの各部は、バス1080によって接続される。
【0128】
メモリ1010は、ROM1011及びRAM1012を含む。ROM1011は、例えば、BIOS(Basic Input Output System)等のブートプログラムを記憶する。ハードディスクドライブインタフェース1030は、ハードディスクドライブ1090に接続される。ディスクドライブインタフェース1040は、ディスクドライブ1100に接続される。例えば磁気ディスクや光ディスク等の着脱可能な記憶媒体が、ディスクドライブ1100に挿入される。シリアルポートインタフェース1050は、例えばマウス1110、キーボード1120に接続される。ビデオアダプタ1060は、例えばディスプレイ1130に接続される。
【0129】
ハードディスクドライブ1090は、例えば、OS(Operating System)1091、アプリケーションプログラム1092、プログラムモジュール1093、プログラムデータ1094を記憶する。すなわち、生成装置10の各処理を規定するプログラムは、コンピュータ1000により実行可能なコードが記述されたプログラムモジュール1093として実装される。プログラムモジュール1093は、例えばハードディスクドライブ1090に記憶される。例えば、生成装置10における機能構成と同様の処理を実行するためのプログラムモジュール1093が、ハードディスクドライブ1090に記憶される。なお、ハードディスクドライブ1090は、SSD(Solid State Drive)により代替されてもよい。
【0130】
また、上述した実施の形態の処理で用いられる設定データは、プログラムデータ1094として、例えばメモリ1010やハードディスクドライブ1090に記憶される。そして、CPU1020が、メモリ1010やハードディスクドライブ1090に記憶されたプログラムモジュール1093やプログラムデータ1094を必要に応じてRAM1012に読み出して実行する。
【0131】
なお、プログラムモジュール1093やプログラムデータ1094は、ハードディスクドライブ1090に記憶される場合に限らず、例えば着脱可能な記憶媒体に記憶され、ディスクドライブ1100等を介してCPU1020によって読み出されてもよい。あるいは、プログラムモジュール1093及びプログラムデータ1094は、ネットワーク(LAN(Local Area Network)、WAN(Wide Area Network)等)を介して接続された他のコンピュータに記憶されてもよい。そして、プログラムモジュール1093及びプログラムデータ1094は、他のコンピュータから、ネットワークインタフェース1070を介してCPU1020によって読み出されてもよい。
【0132】
以上、本発明者によってなされた発明を適用した実施の形態について説明したが、本実施の形態による本発明の開示の一部をなす記述及び図面により本発明は限定されることはない。すなわち、本実施の形態に基づいて当業者等によりなされる他の実施の形態、実施例及び運用技術等は全て本発明の範疇に含まれる。
【符号の説明】
【0133】
10 生成装置
11 グラフ変換部
12 正規表現化部
13 抽出部
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11