(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2024132587
(43)【公開日】2024-10-01
(54)【発明の名称】セキュアコンポーネント、デバイス、異常検知方法、デバイス保護方法及び異常検知モデル生成方法
(51)【国際特許分類】
G06F 21/56 20130101AFI20240920BHJP
G06F 21/71 20130101ALI20240920BHJP
【FI】
G06F21/56
G06F21/71
【審査請求】未請求
【請求項の数】15
【出願形態】OL
(21)【出願番号】P 2023043421
(22)【出願日】2023-03-17
【公序良俗違反の表示】
(特許庁注:以下のものは登録商標)
1.WINDOWS
(71)【出願人】
【識別番号】000002897
【氏名又は名称】大日本印刷株式会社
(74)【代理人】
【識別番号】100114557
【弁理士】
【氏名又は名称】河野 英仁
(74)【代理人】
【識別番号】100078868
【弁理士】
【氏名又は名称】河野 登夫
(72)【発明者】
【氏名】浅野 正徳
(57)【要約】
【課題】攻撃者に対するマルウェア対策技術の隠蔽を可能にするとともにデバイスの性能を低下させることなくマルウェアに対する保護を実現できるセキュアコンポーネント、デバイス、異常検知方法、デバイス保護方法及び異常検知モデル生成方法を提供する。
【解決手段】セキュアコンポーネントは、データストリームを取得する取得部と、複数の異常それぞれを示す異常データパターンを含み、複数の内部状態を通じて異常データパターンへの状態遷移を規定する異常検知モデルと、取得したデータストリームを異常検知モデルに入力し、データストリームに含まれる部分データ列に対応させて内部状態を遷移する遷移部と、データストリームに含まれるデータ列が異常データパターンに遷移した場合、異常を検知する検知部とを備える。
【選択図】
図1
【特許請求の範囲】
【請求項1】
データストリームを取得する取得部と、
複数の異常それぞれを示す異常データパターンを含み、複数の内部状態を通じて前記異常データパターンへの状態遷移を規定する異常検知モデルと、
前記取得部で取得したデータストリームを前記異常検知モデルに入力し、前記データストリームに含まれる部分データ列に対応させて前記内部状態を遷移する遷移部と、
前記データストリームに含まれるデータ列が前記異常データパターンに遷移した場合、異常を検知する検知部と
を備える、
セキュアコンポーネント。
【請求項2】
前記異常検知モデルは、
前記複数の内部状態に対応する複数のノードを含むツリー構造を有し、
前記遷移部は、
前記部分データ列に対応させて前記複数のノードの上位ノードから下位ノードに向かってノードを遷移する、
請求項1に記載のセキュアコンポーネント。
【請求項3】
前記複数のノードは、
所定の部分データ列を保持し、
前記上位ノードは、エッジを通じて下位ノードを参照する第1参照部を有し、
前記下位ノードは、前記上位ノードが保持する部分データ列を、先頭データ列として含む部分データ列を保持する、
請求項2に記載のセキュアコンポーネント。
【請求項4】
前記複数のノードそれぞれは、
自信が保持する部分データ列の末尾から比較して最も長く一致する部分データ列を保持するノードを参照する第2参照部を有する、
請求項2に記載のセキュアコンポーネント。
【請求項5】
前記検知部は、
前記データ列が遷移した異常データパターン又は異常データパターンの組合せに応じて、種類が異なる異常を検知する、
請求項1から請求項4のいずれか一項に記載のセキュアコンポーネント。
【請求項6】
前記取得部で取得したデータストリームを単位データ列に区分できるか否かを判定する判定部と、
単位データ列に区分できない場合、前記データストリームに対して所定の前処理を行う前処理部と
を備え、
前記所定の前処理をしたデータストリームを前記異常検知モデルに入力する、
請求項1から請求項4のいずれか一項に記載のセキュアコンポーネント。
【請求項7】
外部装置との間で秘匿通信路を開設する開設部と、
前記秘匿通信路を介して前記検知部で検知した異常を前記外部装置へ通知する通知部と
を備える、
請求項1から請求項4のいずれか一項に記載のセキュアコンポーネント。
【請求項8】
前記秘匿通信路を介して前記セキュアコンポーネントを搭載したデバイスに対する遠隔操作指示を受信した場合、受信した遠隔操作指示を前記デバイスへ出力する出力部を備える、
請求項7に記載のセキュアコンポーネント。
【請求項9】
前記秘匿通信路を介して前記異常検知モデルを更新するための更新データ及び更新指示を受信した場合、受信した更新データに基づいて前記異常検知モデルを更新する更新部を備える、
請求項7に記載のセキュアコンポーネント。
【請求項10】
前記セキュアコンポーネントを搭載したデバイスから前記異常検知モデルを更新するための更新データ及び更新指示を取得した場合、取得した更新データに基づいて前記異常検知モデルを更新する更新部を備える、
請求項1から請求項4のいずれか一項に記載のセキュアコンポーネント。
【請求項11】
セキュアエレメント、トラステッド・プラットフォーム・モジュール又はトラステッド実行環境のいずれかにより構成される、
請求項1から請求項4のいずれか一項に記載のセキュアコンポーネント。
【請求項12】
請求項1から請求項4のいずれか一項に記載のセキュアコンポーネントと通信するデバイスであって、
前記デバイスは、
前記セキュアコンポーネントが検知した異常に基づいて、前記デバイス自身、前記デバイス上で稼働しているOS、及びアプリケーションの少なくとも一つの動作を変更する、
デバイス。
【請求項13】
請求項1から請求項4のいずれか一項に記載のセキュアコンポーネントが検知した異常に基づいて、前記セキュアコンポーネントと通信するデバイスの異常を検知する、
異常検知方法。
【請求項14】
請求項1から請求項4のいずれか一項に記載のセキュアコンポーネントが検知した異常に基づいて、前記セキュアコンポーネントを搭載したデバイスに対する遠隔操作指示を受信し、
受信した遠隔操作指示に基づいて、前記デバイスの動作を制御する、
デバイス保護方法。
【請求項15】
セキュアコンポーネントが有する異常検知モデルの生成方法であって、
前記異常検知モデルは、
複数のノードを含むツリー構造を有し、
前記複数のノードは、
所定の部分データ列を保持し、
上位ノードは、エッジを通じて下位ノードを参照する第1参照部を有し、
前記下位ノードは、前記上位ノードが保持する、異常データパターンの一部を構成する部分データ列を、先頭データ列として含む部分データ列を保持し、
最下位のノードが保持する部分データ列が前記異常データパターンとなるように前記異常検知モデルを生成する、
異常検知モデル生成方法。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、セキュアコンポーネント、デバイス、異常検知方法、デバイス保護方法及び異常検知モデル生成方法に関する。
【背景技術】
【0002】
近年、サイバーセキュリティ上の脅威が高まる一方である。サイバーセキュリティ上の脅威として無視できないのが、マルウェアと呼ばれる、利用者にとって不正な振る舞いをするソフトウェア群である。
【0003】
今日におけるマルウェア対策技術には、アンチマルウェアに加えて新たな技術が導入されつつある。アンチマルウェアは、いわゆるウィルス対策ソフトとしてWindowsを搭載したPC等にインストールされ、マルウェアの特徴を持つファイルを検索し、隔離、除去などの対策を行う。特許文献1には、コンピュータが既にマルウェアを含んでいると判断される場合には、アンチマルウェアの一部分のインストール前にコンピュータのスキャン及びクリーニングを実行する方法が開示されている。
【先行技術文献】
【特許文献】
【0004】
【発明の概要】
【発明が解決しようとする課題】
【0005】
昨今では、Windowsを搭載したPC等に限らず、Windows以外のOSを搭載したデバイスに対して攻撃可能なマルウェアが急増している。このようなデバイスには、例えば、Linux(登録商標)を搭載したデバイス(例えば、IoTデバイスなど)が含まれる。しかし、IoTデバイスのような非力なデバイスの場合、あるいはデバイスがアンチマルウェアをインストールすることで処理能力に余裕がなくなる場合、アンチマルウェアをインストールすることで、デバイスの性能が低下する可能性がある。一方で、アンチマルウェアをPC等にインストールした場合、例えば、マルウェア対策技術がソフトウェア実行空間に存在することになり、攻撃者が当該マルウェア対策技術を解析し、マルウェアの検知メカニズムが攻撃者に露呈する可能性が高くなる。
【0006】
本発明は、斯かる事情に鑑みてなされたものであり、攻撃者に対するマルウェア対策技術の隠蔽を可能にするとともにデバイスの性能を低下させることなくマルウェアに対する保護を実現できるセキュアコンポーネント、デバイス、異常検知方法、デバイス保護方法及び異常検知モデル生成方法を提供することを目的とする。
【課題を解決するための手段】
【0007】
本願は上記課題を解決する手段を複数含んでいるが、その一例を挙げるならば、セキュアコンポーネントは、データストリームを取得する取得部と、複数の異常それぞれを示す異常データパターンを含み、複数の内部状態を通じて前記異常データパターンへの状態遷移を規定する異常検知モデルと、前記取得部で取得したデータストリームを前記異常検知モデルに入力し、前記データストリームに含まれる部分データ列に対応させて前記内部状態を遷移する遷移部と、前記データストリームに含まれるデータ列が前記異常データパターンに遷移した場合、異常を検知する検知部とを備える。
【発明の効果】
【0008】
本発明によれば、攻撃者に対するマルウェア対策技術の隠蔽を可能にするとともに、デバイスの性能を低下させることなくマルウェアに対する保護を実現できる。
【図面の簡単な説明】
【0009】
【
図1】本実施形態のデバイスの構成の一例を示す図である。
【
図2】基本的な異常検知の流れの一例を示す図である。
【
図3】異常検知グラフ62の構築方法の一例を示す図である。
【
図4】異常検知グラフによる異常データパターンの検索の一例を示す図である。
【
図5】ネットワーク通信に対する異常検知の一例を示す図である。
【
図6】セキュリティベンダと連動したEDRの実施の一例を示す図である。
【
図7】秘匿通信路を経由した検知対象の更新の一例を示す図である。
【
図8】デバイスを経由した検知対象の更新の一例を示す図である。
【発明を実施するための形態】
【0010】
以下、本発明をその実施の形態を示す図面に基づいて説明する。
図1は本実施形態のデバイス100の構成の一例を示す図である。デバイス100は、異常検知を行うセキュアコンポーネント50を搭載する。本実施例では、デバイス100は、例えば、IoTデバイスを想定しているが、デバイス100は、IoTデバイスに限定されるものではなく、PCやサーバ等でもよく、PCやサーバ等より高性能な機器でもよい。セキュリティベンダは、デバイス100のセキュリティ管理を遠隔地で実施する。異常検知自体は、デバイス100単体で完結しているが、セキュリティベンダとの連携によって、セキュリティ上のより大きな効果を得ることができる。
【0011】
デバイス100は、OS(アプリ実行基盤)20、アプリケーション(実行バイナリ)10、及びセキュアコンポーネント50を備える。
【0012】
OS20は、デバイス100内でアプリケーション10を稼動させる実行基盤である。本実施形態では、OS20は、OS(Operating System)を想定しているが、コンテナ実行基盤など、OS以外の実行基盤でもよい。
【0013】
アプリケーション10は、OS20上で実行されるアプリケーションである。アプリ単独で機能実現を行うことはできず、OS20上のAPI(Application Programming Interface)を使用して、所要の機能を実現する。
【0014】
セキュアコンポーネント50は、デバイス100に搭載され、OS20やアプリケーション10とは隔離された別の環境で動作し、耐タンパ性を有するコンポーネントである。セキュアコンポーネント50は、セキュアエレメント、トラステッド・プラットフォーム・モジュール(TPM)、トラステッド実行環境又はトラステッド実行環境上のアプリケーションに相当する。
【0015】
OS20は、アプリ実行I/F21、ネットワークI/F22、及びOS-セキュアコンポーネントI/F23を備える。
【0016】
アプリ実行I/F21は、アプリケーション10が自身を実行するためにアクセスするI/Fである。全てのアプリケーション10は、アプリ実行I/F21を介して機能を実行する。アプリ実行I/F21は、アプリケーション10がOS20上で機能を実行するために用意される、OS20側のあらゆるI/Fを含む。例えば、Windowsであれば、CreateProcess等、アプリケーション起動に必須となるAPIや、read、writeなどのファイルアクセス用APIはもとより、アプリケーション10が機能実現するために必要となるOS上のあらゆるI/Fを含む。
【0017】
ネットワークI/F22は、アプリケーション10又はOS20が、外部機器とネットワーク通信を行うために用いるI/Fである。
【0018】
OS-セキュアコンポーネントI/F23は、OS20がセキュアコンポーネント50と通信するためのI/Fである。OS-セキュアコンポーネントI/F23は、接続されるセキュアコンポーネント50の形態によって異なるが、セキュアコンポーネント50がセキュアエレメントである場合、ISO7816、SPI(Serial Peripheral Interface)などの通信プロトコルであり、TEE(Trusted Execution Environment)等のトラステッド環境の場合、当該トラステッド環境のAPIが相当する。また、OS20-セキュアコンポーネント50間の通信はセキュアチャネル等によって暗号化されていてもよい。なお、本実施形態では、説明を簡便にするための両者の暗号化については特段記述しない。
【0019】
セキュアコンポーネント50は、データ入力部51、外部通知部52、異常検知部53、秘匿通信部54、及び入力データ前処理部55を備える。
【0020】
データ入力部51は、OS-セキュアコンポーネントI/F23経由で、OS20から入力されたデータストリーム(バイナリデータ)を受信する機能を有する。
【0021】
入力データ前処理部55は、セキュアコンポーネント50内での異常検知が可能となるように、データ入力部51から入力されたデータストリームを別の形式に変換する機能を有する。入力データ前処理部55で行う処理は、検出対象となる異常によって異なるが、基本的には解析対象データを平文として解析可能にするための変換を行う。例えば、マルウェアを異常として検出する際には、入力データ前処理部55は、マルウェアに施されているパッキング処理や難読化処理の解除等を行う。また、ネットワークの不正なトラフィックを異常として検出する際には、入力データ前処理部55は、通信の復号等を行う。入力データ前処理部55による前処理を行わない場合もある。入力データ前処理部55による前処理の要否は、入力されたデータストリームの内容、セキュアコンポーネント50の事前設定、OS20とセキュアコンポーネント50間での取決め等適宜設定してもよい。
【0022】
異常検知部53は、データ入力部51から入力されたデータストリームを元に、所定のアルゴリズムに基づいて複数の異常を同時並行で検知する機能を有する。異常検知部53の詳細は後述する。
【0023】
外部通知部52は、異常検知部53で検知した異常をOS20へ通知する機能を有する。
【0024】
秘匿通信部54は、ネットワーク経由でセキュリティベンダのEDR(Endpoint Detection and Response)サーバ200と通信する機能を有する。秘匿通信部54は、異常検知部53で検知した異常を通知し、あるいはEDRサーバ200からの配信内容を受信する。秘匿通信部54は、TLS(Transport Layer Security)等によってネットワーク上遠隔にあるEDRサーバ200とエンドツーエンドの通信を確立する機能である。本実施形態では、秘匿通信部54自身がネットワークI/F(例えば、Ethernet、WiFi等、いずれも登録商標)を有するとしているが、データ授受のみデバイス側のネットワークI/Fを間借りしてもよい。
【0025】
次に、異常検知部53について説明する。
【0026】
本実施形態では、入力されるデータストリームを元に複数の異常を同時並行で検知できるアルゴリズムとして、グラフ構造を用いた状態遷移を用いる。なお、アルゴリズムは、これに限定されるものではなく、任意のアルゴリズムを用いてもよい。例えば、機械学習によって生成された学習モデルを使用してもよい。このような学習モデルは、RNN(Recurrent Neural Network)等、一連のデータストリームに対して、過去の入力状態を把握した上で結果を出力するモデルを採用することが望ましい。以下では、グラフ構造を用いた状態遷移による方法について説明する。
【0027】
異常検知部53は、データ入力バッファ61、異常検知モデルとしての異常検知グラフ62、パターン発見テーブル63、及び異常パターン論理式テーブル64を備える。
【0028】
データ入力バッファ61は、データ入力部51から入力されたデータストリーム(バイナリデータ)を所定量蓄積するメモリ領域である。
【0029】
異常検知グラフ62は、異常を示す異常データパターンに基づき構築されたグラフ(ツリー構造)であり、データストリームに含まれる部分データ列に応じてグラフ内を遷移することで、並行的に異常を検知する。
【0030】
パターン発見テーブル63は、異常検知グラフ62内での遷移の結果、発見された異常データパターンの出現頻度を記録するテーブルである。
図1の例では、異常データパターン1は「0001FEFF」であり、異常データパターン2は「FFFE」であり、異常データパターン3は「0100FF」であり、異常データパターン4は「FF0001」である。
【0031】
異常パターン論理式テーブル64は、検知対象である異常と、パターン発見テーブル63に記録された異常データパターンとの関係を条件式(論理式)で対応付けるテーブルである。
図1に示すように、異常パターン論理式テーブル64は、異常1に対応する条件式が「1 and 2」であり、異常2に対応する条件式が「3」であり、異常3に対応する条件式が「1 and 4」である。これらの意味は、異常データパターン1と異常データパターン2の両方が発見された場合、異常1が発生したとみなす。異常データパターン3が発見された場合、異常2が発生したとみなす。異常データパターン1と異常データパターン4の両方が発見された場合、異常3が発生したとみなす。
【0032】
具体的には、異常データパターン「0001FEFF」と「FFFE」の両方が発見された場合、異常1が発生したとみなす。異常データパターン「0100FF」が発見された場合、異常2が発生したとみなす。異常データパターン「0001FEFF」と「FF0001」の両方が発見された場合、異常3が発生したとみなす。
【0033】
なお、各異常1~3が実際にどのような現象を意味するかは、入力されるデータストリームの意味によって変わる。例えば、アプリケーション(実行バイナリ)のバイト列をデータストリームとして入力する場合は、「当該アプリケーションはマルウェアである」が異常発生の意味である。また、ネットワークトラフィックのバイト列をデータストリームとして入力する場合は、「当該通信は異常な通信である」が異常発生の意味となる。
【0034】
セキュリティベンダは、セキュアコンポーネント50から秘匿通信部54経由でネットワーク送信された異常を集計、解析し、デバイス100におけるセキュリティインシデントを検知し、対応する役割を有する。セキュリティベンダは、EDRサーバ200、端末装置210、セキュリティアナリストを有する。
【0035】
EDRサーバ200は、セキュアコンポーネント50の秘匿通信部54が異常情報を通知するサーバである。EDRサーバ200には、デバイス100の異常情報が蓄積される。なお、
図1では、デバイス100を1つだけ図示しているが、EDRサーバ200は、複数のデバイス100のセキュアコンポーネント50から異常情報を収集することができる。また、EDRサーバ200は、セキュアコンポーネント50に対して、新しい異常検知用データを配布する。なお、EDRサーバ200以外の他の配信サーバが、セキュアコンポーネント50に対して、新しい異常検知用データを配布してもよい。
【0036】
セキュリティアナリストは、端末装置210を使用してEDRサーバ200にアクセスして、セキュリティインシデントの発生有無を判定する。なお、セキュリティインシデントの発生有無を機械学習された学習モデルや、他の方法を用いて判定してもよい。
【0037】
次に、ユースケースを説明する。まず、基本的な異常検知の流れについて説明する。
【0038】
図2は基本的な異常検知の流れの一例を示す図である。ここで、検知する異常は「アプリケーション(実行バイナリ)がマルウェアである」という異常である。以下、図中の各処理を#1~#14として説明する。
【0039】
#1(アプリケーションの実行):ユーザは、マルウェアとは知らずに、アプリケーション10の実行を指示する。
【0040】
#2(実行I/Fの呼び出し):アプリケーション10は、自身を実行するためOS20のアプリ実行I/F21を呼び出す。
【0041】
#3(実行バイナリの確認):OS20は、アプリ実行I/F21を呼び出したアプリケーション(実行バイナリ)10を確認する。
【0042】
#4(実行バイナリ読込):OS20は、実行に先立ってアプリケーション10の実行バイナリを、バイト列として読み取る。
【0043】
#5(データストリームのセキュアコンポーネントへの送信):OS20は、読み込んだバイト列をデータストリームとしてOS-セキュアコンポーネントI/F23経由でセキュアコンポーネント50へ送信する。
【0044】
#6(入力データ前処理部への転送):データ入力部51は、受信したデータストリームを入力データ前処理部55へ転送する。
【0045】
#7(入力データの前処理):入力データ前処理部55は、転送されたデータストリームを解析し、必要に応じて前処理を行う。本ユースケースの場合、受信したデータストリーム内に、特定のマルウェア難読化やパッキングの兆候が見られ、受信したデータストリームのままでは解析できないと判定された場合、難読化解除やアンパックを行う。入力データ前処理部55で処理されたデータストリームは、順次、データ入力バッファ61へ入力される。
【0046】
#8(異常検知グラフへの入力):セキュアコンポーネント50は、受信したデータストリームを1バイトずつ異常検知グラフ62に入力する。
【0047】
#9(異常検知グラフの状態遷移):異常検知グラフ62は、入力されたバイトに従ってグラフ内で状態遷移を行う。状態遷移の詳細は後述する。
【0048】
#10(異常データパターンの発見と記録):異常検知グラフ62は、状態遷移の結果、特定の異常データパターンが発見された場合、発見された異常データパターンについて、パターン発見テーブル63に記録する。具体的には、発見回数を1つ増やす。
図2の例では、異常データパターン1「0001FEFF」と異常データパターン2「FFFE」の発見回数を0から1に増やしている。
【0049】
#11(異常の特定):パターン発見テーブル63の発見回数をもとに、異常パターン論理式テーブル64の論理式を評価し、条件を満たす異常が存在する場合、当該異常が発生したものとみなす。
図2の例では、異常1の論理式を評価した結果、入力されたデータストリームの中に異常データパターン1「0001FEFF」と異常データパターン2「FFFE」の両方が検出されたため、異常1が検知されたものとして通知を行う。
【0050】
#12(異常の外部通知):異常検知部53は、通知対象をデバイス側OSとして、外部通知部52に異常1の検知を通知する。
【0051】
#13(OSへの異常通知):セキュアコンポーネント50は、OS20に対し、異常1が検知された旨を通知する。
【0052】
#14(アプリケーションの動作制御):OS20は、当該異常の検知元であるアプリケーション10に対して適切な措置を行う。具体的には、OS20は、アプリケーション10の動作停止、削除などを実施する。
【0053】
上述のように、入力データ前処理部55は、取得したデータストリームを単位データ列(1バイトのデータ)に区分できるか否かを判定する判定部としての機能、及び単位データ列に区分できない場合、データストリームに対して所定の前処理を行う機能を備え、所定の前処理をしたデータストリームを異常検知グラフ62に入力する。所定の前処理は、難読化解除処理やアンパック処理、後述のように暗号化された通信内容に対する復号処理などを含む。
【0054】
また、デバイス100は、セキュアコンポーネント50が検知した異常に基づいて、デバイス100自身、デバイス100上で稼働しているOS20、及びアプリケーション10の少なくとも一つの動作を変更することができる。
【0055】
また、セキュアコンポーネント50が検知した異常に基づいて、セキュアコンポーネント50と通信するデバイス100の異常を検知することができる。
【0056】
上述の基本的な異常検知の流れは、「アプリケーション10実行時に、当該アプリケーション10のバイナリデータをバイト列としてセキュアコンポーネント50に入力し、当該入力をもとにセキュアコンポーネント50がマルウェアか否かを判定し、判定結果に応じてアプリケーション10の取り扱いを決定する」という処理である。
【0057】
理想的にはアプリケーション実行前にマルウェアか否かの判定を完了することが最適であるが、セキュアコンポーネント50が非力な場合、OS20は、以下の(1)~(3)のように処理を並行実行し、アプリケーション10の実行前処理軽減を図ってもよい。(1)アプリケーション実行に必要な前処理(メモリの確保等)と、セキュアコンポーネント50へのデータストリームの送信を並行実施する、(2)ファイル書込み等、破壊的な影響が発生し得る処理の前までの処理と、セキュアコンポーネント50へのデータストリームの送信を並行実施する、(3)特に制約を加えず、アプリケーションの実行とセキュアコンポーネント50へのデータストリームの送信とを並行実施させるが、異常検知時には直ちに停止させる。
【0058】
次に、異常検知グラフ62の振る舞いについて説明する。
【0059】
異常検知グラフ62は、各異常に紐づいた異常データパターンを順次登録することで構築される木構造グラフである。このグラフ構造の特徴は以下の(1)~(3)のとおりである。
【0060】
(1)ルート(root)を含む各ノードは、自分自身が保持するデータ列と、当該データ列の次のバイト(00~FF)を連結することで構成されるデータ列の下位ノードへの次ノード参照(「第1参照部」とも称する)を有する。次のバイトは256通り(00~FF)存在するので、次ノード参照は256個ある。対応する下位ノードが存在しない場合は「参照なし(Null)」が設定される。
【0061】
ここで、次ノード参照は、各ノードについて、00~FFの256個の1バイトのデータを保持しているので、当該1バイトのデータを「単位データ列」と称する。また、各ノードは、データ列を保持するが、当該データ列は、データストリームの中の一部のデータ列であることから、「部分データ列」と称する。各ノードが保持する部分データ列の長さは、上位ノードから下位ノードに向かって1バイトずつ増加する。
【0062】
すなわち、異常検知グラフ62は、複数の内部状態に対応する複数のノードを含むツリー構造を有し、複数のノードは、所定の部分データ列を保持する。上位ノードは、エッジを通じて下位ノードを参照する次ノード参照(第1参照部)を有し、下位ノードは、上位ノードが保持する部分データ列を、先頭データ列として含む部分データ列を保持する。先頭データ列とは、部分データ列の先頭部分である。また、次ノード参照は、参照する下位ノードに対応する単位データ列を保持するとともに、上位ノードが保持する部分データ列と次ノード参照が保持する単位データ列とを連結した部分データ列が、下位ノードが保持する部分データ列となるようにしてもよい。なお、実装では、必ずしも各次ノード参照が単位データ列を持ち、上位ノードの部分データ列を連結して下位ノードが保持する部分データ列を表現しているわけではない。
【0063】
(2)異常検知グラフ62構築の初期状態は、ルートノードのみ存在している。
【0064】
(3)各ノードは、次ノード参照とは別に、末尾から数えた部分文字列が最も長く一致するノードへのサフィックス参照(「第2参照部」とも称する)を有する。すなわち、複数のノードそれぞれは、自信が保持する部分データ列の末尾から比較して最も長く一致する部分データ列を保持するノードを参照するサフィックス参照を有する。
【0065】
図3は異常検知グラフ62の構築方法の一例を示す図である。以下、図中の各処理を#1~#6として説明する。
【0066】
#1(初期状態):初期状態はルートノードのみで構成される。
【0067】
#2(異常データパターン「0001FEFF」追加):以降、追加対象の異常データパターンから1バイトずつ取り出し、取り出した1バイトに対応する次ノード参照をたどりながら、部分データ列をノードとして追加していく。異常データパターン「0001FEFF」の場合、まず先頭の1バイト「00」を取り出し、取り出した1バイト「00」に対応する、ルート(root)ノードの次ノード参照をたどるが、当該次ノード参照は、「参照なし(Null)」状態なので、新たに部分データ列「00」を有するノード(「00」)を追加し、追加したノード(「00」)への参照をルートノードの次ノード参照に追加する。
次に、異常データパターン「0001FEFF」の2バイト目である「01」を取り出し、取り出した2バイト目の「01」に対応する、ノード(「00」)の次ノード参照をたどるが、当該次ノード参照は、「参照なし(Null)」状態なので、新たに部分データ列「0001」を有するノード(「0001」)を追加し、追加したノード(「0001」)への参照をノード(「00」)の次ノード参照に追加する。
次に、異常データパターン「0001FEFF」の3バイト目である「FE」を取り出し、取り出した3バイト目の「FE」に対応する、ノード(「0001」)の次ノード参照をたどるが、当該次ノード参照は、「参照なし(Null)」状態なので、新たに部分データ列「0001FE」を有するノード(「0001FE」)を追加し、追加したノード(「0001FE」)への参照をノード(「0001」)の次ノード参照に追加する。
次に、異常データパターン「0001FEFF」の末尾のバイトである「FF」を取り出し、取り出したバイト「FF」に対応する、ノード(「0001FE」)の次ノード参照をたどるが、当該次ノード参照は、「参照なし(Null)」状態なので、新たに部分データ列「0001FEFF」を有するノード(「0001FEFF」)を追加し、追加したノード(「0001FEFF」)への参照をノード(「0001FE」)の次ノード参照に追加する。このように、異常データパターン全体である「0001FEFF」と同一の部分データ列を有するノードを追加するまで、次ノード参照と部分データ列を有するノードの追加を継続すればよい。
【0068】
#3(異常データパターン「FFFE」追加):上述の処理#2と同様に、追加対象の異常データパターン「FFFE」から先頭の1バイト「FF」を取り出し、取り出した1バイト「FF」に対応する、ルート(root)ノードの次ノード参照をたどるが、当該次ノード参照は、「参照なし(Null)」状態なので、新たに部分データ列「FF」を有するノード(「FF」)を追加し、追加したノード(「FF」)への参照をルートノードの次ノード参照に追加する。
次に、異常データパターン「FFFE」の末尾のバイトである「FE」を取り出し、取り出したバイト「FE」に対応する、ノード(「FF」)の次ノード参照をたどるが、当該次ノード参照は、「参照なし(Null)」状態なので、新たに部分データ列「FFFE」を有するノード(「FFFE」)を追加し、追加したノード(「FFFE」)への参照をノード(「FF」)の次ノード参照に追加する。このように、異常データパターン全体である「FFFE」と同一の部分データ列を有するノードを追加するまで、次ノード参照と部分データ列を有するノードの追加を継続すればよい。また、新たな異常データパターンを追加する際には、常にルートノードからたどる。
【0069】
#4(異常データパターン「0100FF」追加):上述の処理#2、#3と同様である。
【0070】
#5(異常データパターン「FF0001」追加):追加対象の異常データパターン「FF0001」から先頭の1バイト「FF」を取り出し、取り出した1バイト「FF」に対応する、ルート(root)ノードの次ノード参照をたどると、当該次ノード参照は、既に存在するので、ノードの追加処理は行わず、次ノード参照をたどってノード(「FF」)に移動する。
次に、異常データパターン「FF0001」の2バイト目である「00」を取り出し、取り出した2バイト目の「00」に対応する、ノード(「FF」)の次ノード参照をたどるが、当該次ノード参照は、「参照なし(Null)」状態なので、新たに部分データ列「FF00」を有するノード(「FF00」)を追加し、追加したノード(「FF00」)への参照をノード(「FF」)の次ノード参照に追加する。
次に、異常データパターン「FF0001」の末尾のバイトである「01」を取り出し、取り出したバイト「01」に対応する、ノード(「FF00」)の次ノード参照をたどるが、当該次ノード参照は、「参照なし(Null)」状態なので、新たに部分データ列「FF0001」を有するノード(「FF0001」)を追加し、追加したノード(「FF0001」)への参照をノード(「FF00」)の次ノード参照に追加する。このように、異常データパターン全体である「FFFE」と同一の部分データ列を有するノードを追加するまで、次ノード参照と部分データ列を有するノードの追加を継続すればよい。
【0071】
#6(サフィックス参照の追加):全ての異常データパターンを追加した後で、グラフ内の全てのノードについて、サフィックス参照の追加を行う。各ノードが保持する部分データ列の最長サフィックスを保持するノードに対して参照関係を作成する。例えば、ノード(「FF0001」)(異常データパターン)の場合、現在の異常検知グラフ62の中でサフィックスが最長で一致するノードは、ノード(「0001」)なので、当該ノードへの参照をサフィックス参照に設定する。また、ノード(「0001FEFF」)(異常データパターン)の場合、現在の異常検知グラフ62の中でサフィックスが最長で一致するノードは、ノード(「FF」)なので、当該ノードへの参照をサフィックス参照に設定する。なお、最長サフィックスを保持するノードが存在しない場合、ルートノードへの参照をサフィックス参照に設定する。
【0072】
上述のように、異常検知グラフ62は、複数のノードを含むツリー構造を有し、複数のノードは、所定の部分データ列を保持する。上位ノードは、エッジを通じて下位ノードを参照する次ノード参照を有し、下位ノードは、上位ノードが保持する、異常データパターンの一部を構成する部分データ列を、先頭データ列として含む部分データ列を保持し、最下位のノードが保持する部分データ列が異常データパターンとなるように異常検知グラフ62を構築(生成)することができる。なお、上位ノードが保持する、異常データパターンの一部を構成する部分データ列と次ノード参照が保持する単位データ列とを連結した部分データ列が、下位ノードが保持する、異常データパターンの一部を構成する部分データ列となるように異常検知グラフ62を構築(生成)してもよい。
【0073】
異常検知グラフ62は、異常データパターン及び異常データパターンの一部を構成する部分データ列を木構造として保持しつつ、次バイトから次の部分データ列をたどることができ、かつ同じサフィックスを持つ部分データ列をたどることができる。なお、
図3において、検索対象パターンに相当する異常データパターン(異常データパターンを保持するノード)は、太枠で図示している。
【0074】
次に、データストリーム入力時の動作について説明する。異常検知時には、入力されたデータストリームを元に、構築された異常検知グラフ62を用いて異常データパターンの並行検索を行う。
【0075】
図4は異常検知グラフ62による異常データパターンの検索の一例を示す図である。以下、図中の各処理を#1~#10として説明する。
図4では、構築された異常検知グラフ62に対して、データ入力バッファ61から1バイトずつ入力した際の異常検知グラフ62の内部状態の遷移と異常データパターンの発見について示す。
【0076】
#1(データ入力バッファから「FF」を入力):異常検知部53は、データ入力バッファ61からデータストリームの先頭バイト「FF」を取得し、異常検知グラフ62の内部状態の遷移(状態遷移)を行う。異常検知グラフ62は、ルートノードから検索を開始する。ここで、取得したバイト「FF」に相当する次ノード参照をたどると、ノード(「FF」)への参照が見つかるので、現在位置(検索位置)をノード(「FF」)に遷移させる。ここでは、内部状態が、ルートノードからノード(「FF」)に遷移している。
【0077】
#2(データ入力バッファから「FE」を入力):続いて、異常検知部53は、データ入力バッファ61から次のバイト「FE」を取得し、異常検知グラフ62の内部状態の遷移(状態遷移)を行う。現在の検索位置であるノード(「FF」)で、取得したバイト「FE」に相当する次ノード参照をたどると、ノード(「FFFE」)への参照が見つかるので、現在位置(検索位置)をノード(「FFFE」)に遷移させる。ここでは、内部状態が、ノード(「FF」)からノード(「FFFE」)に遷移している。
【0078】
#3(異常データパターン「FFFE」発見を記録):現在位置のノード(「FFFE」)は、異常データパターン「FFFE」を保持するノードであるため、異常検知部53は、当該異常データパターンが発見されたことを、パターン発見テーブル63に記録する。
図4の例では、パターン発見テーブル63の異常データパターン「FFFE」に対応する発見回数を0から1に変更している。
【0079】
#4(サフィックスノードをたどる):現在位置のノード(「FFFE」)は、最下位のノードであり、次ノード参照が存在しない。これ以上次ノード(下位ノード)をたどることができないため、サフィックスノードをたどって次バイト以降の検索を継続する。ここで、現在位置のノード(「FFFE」)のサフィックスノードはルートノードであるため、現在位置(検索位置)をルートノードに遷移させる。ここでは、内部状態が、ノード(「FFFE」)からルートノードに遷移している。
【0080】
#5(データ入力バッファから「00」を入力):異常検知部53は、データ入力バッファ61から次のバイト「00」を取得し、異常検知グラフ62の内部状態の遷移(状態遷移)を行う。異常検知グラフ62は、ルートノードから検索を開始する。ここで、取得したバイト「00」に相当する次ノード参照をたどると、ノード(「00」)への参照が見つかるので、現在位置(検索位置)をノード(「00」)に遷移させる。ここでは、内部状態が、ルートノードからノード(「00」)に遷移している。
【0081】
#6(データ入力バッファから「01」を入力):異常検知部53は、データ入力バッファ61から次のバイト「01」を取得し、異常検知グラフ62の内部状態の遷移(状態遷移)を行う。異常検知グラフ62は、現在の検索位置であるノード(「00」)で、取得したバイト「01」に相当する次ノード参照をたどると、ノード(「0001」)への参照が見つかるので、現在位置(検索位置)をノード(「0001」)に遷移させる。ここでは、内部状態が、ノード(「00」)からノード(「0001」)に遷移している。
【0082】
#7(データ入力バッファから「FE」を入力):異常検知部53は、データ入力バッファ61から次のバイト「FE」を取得し、異常検知グラフ62の内部状態の遷移(状態遷移)を行う。異常検知グラフ62は、現在の検索位置であるノード(「0001」)で、取得したバイト「FE」に相当する次ノード参照をたどると、ノード(「0001FE」)への参照が見つかるので、現在位置(検索位置)をノード(「0001FE」)に遷移させる。ここでは、内部状態が、ノード(「0001」)からノード(「0001FE」)に遷移している。
【0083】
#8(データ入力バッファから「FF」を入力):異常検知部53は、データ入力バッファ61から次のバイト「FF」を取得し、異常検知グラフ62の内部状態の遷移(状態遷移)を行う。異常検知グラフ62は、現在の検索位置であるノード(「0001FE」)で、取得したバイト「FF」に相当する次ノード参照をたどると、ノード(「0001FEFF」)への参照が見つかるので、現在位置(検索位置)をノード(「0001FEFF」)に遷移させる。ここでは、内部状態が、ノード(「0001FE」)からノード(「0001FEFF」)に遷移している。
【0084】
#9(異常データパターン「0001FEFF」発見を記録):現在位置のノード(「0001FEFF」)は、異常データパターン「0001FEFF」を保持するノードであるため、異常検知部53は、当該異常データパターンが発見されたことを、パターン発見テーブル63に記録する。
図4の例では、パターン発見テーブル63の異常データパターン「0001FEFF」に対応する発見回数を0から1に変更している。
【0085】
#10(サフィックスノードをたどる):現在位置のノード(「0001FEFF」)は、最下位のノードであり、次ノード参照が存在しない。これ以上次ノード(下位ノード)をたどることができないため、サフィックスノードをたどって次バイト以降の検索を継続する。ここで、現在位置のノード(「0001FEFF」)のサフィックスノードはノード(「FF」)であるため、現在位置(検索位置)をノード(「FF」)に遷移させる。ここでは、内部状態が、ノード(「0001FEFF」)からノード(「FF」)に遷移している。
【0086】
上述のように、セキュアコンポーネント50は、データストリームを取得する取得部(データ入力部51)、複数の異常それぞれを示す異常データパターンを含み、複数の内部状態を通じて異常データパターンへの状態遷移を規定する異常検知モデル(異常検知グラフ62)、取得したデータストリームを異常検知グラフ62に入力し、データストリームに含まれる部分データ列に対応させて内部状態を遷移する遷移部(異常検知部53)、及びデータストリームに含まれるデータ列が異常データパターンに遷移した場合、異常を検知する検知部(異常検知部53)を備える。
【0087】
また、上述のように、異常検知グラフ62は、複数の内部状態に対応する複数のノードを含むツリー構造を有する。すなわち、複数の内部状態は、検索位置(現在位置)が、1バイト毎に遷移する、異常検知グラフ62内の複数のノードに対応する。異常検知部53(遷移部)は、部分データ列に対応させて複数のノードの上位ノードから下位ノードに向かってノードを遷移する。部分データ列は、データストリームから1バイトずつ取り出したデータ列であり、下位ノードに遷移する都度、部分データ列のデータ長は1バイトずつ長くなる。
【0088】
異常検知グラフ62を用いてルートノードからグラフ内の下位のノードへの検索を行うことで、異常検知部53は、複数の異常データパターンの検索を同時に並行して行うことができる。異常データパターンの検索に当たっては、リッチOS等の上位システムから、処理対象であるデータストリームを1バイトずつ異常検知グラフ62に入力するだけでよく、ある異常パターンを特定するためん、検索対象データの全データを入力する必要がない。すなわち、データストリーム全体のデータを入力する必要がなく、入力の途中で異常を検知できる。これにより、デバイス100の性能を低下させることなくマルウェアに対する保護を実現できる。また、異常検知のためのロジック(異常検知部53)をセキュアコンポーネント50内に隠蔽できるので、マルウェア作成者等の攻撃者からの検知パターンの解析を防止し、攻撃者にマルウェア対策技術をバイパスする手段やノウハウを与えないので、攻撃者に対するマルウェア対策技術の隠蔽を可能にする。
【0089】
また、セキュアコンポーネント50は、異常検知対象となるバイナリデータをストリーム入力として処理できるようになる。これにより、アプリ実行時と異常検知処理とを並行実施すること、ネットワークトラフィックを直接ストリーム入力して異常検知すること等、セキュアコンポーネント50側の処理待ちを考慮せずに異常検知を並行実施できる。
【0090】
図4に示す手順でパターン発見テーブル63に各異常データパターンの発見回数が記録されるため、次に異常パターン論理式テーブル64の内容に基づき、各以上に対応した異常データパターンが論理式どおりに発見されているかを確認する。
図4に示す手順では、処理#9完了時点で異常1に対応する異常データパターンが全て発見されているので、異常検知部53は、この時点で異常発生を検知し、通知できる。
【0091】
上述のように、異常検知部53(検知部)は、データストリームに含まれるデータ列が遷移した異常データパターン又は異常データパターンの組合せに応じて、種類が異なる異常を検知することができる。
【0092】
なお、異常検知部53が異常発生を通知するタイミングについては、デバイス100等に関するセキュリティポリシーに応じて適宜設定できる。一例としては、次の(1)~(3)のタイミングで通知できる。(1)1バイト入力ごとに論理式をチェックし、検知された時点で直ちに通知する、(2)予め定められた入力量を超えた時点で論理式をチェックし、検知されたら通知する、(3)1バイトごとに論理式をチェックするが、通知はランダムに定められた追加入力量を超えタイミングで通知する。これは、通知タイミングを意図的にずらすことで、攻撃者に異常データパターンに関する情報を与えないようにするためのセキュリティポリシーである。
【0093】
図5はネットワーク通信に対する異常検知の一例を示す図である。
図2に例示した「基本的な異常検知の流れ」では、実行バイナリがマルウェアかどうかについて異常を検知していたが、ネットワーク通信に対して異常検知を行うこともできる。以下、図中の各処理を#1~#13として説明する。
【0094】
#1(アプリによるネットワーク通信開始):アプリケーション(マルウェアとする)は、C&Cサーバ(C2サーバ)との通信など、外部と好ましくない通信を行うべく、OS20のアプリ実行I/F21を呼び出す。なお、C&Cサーバは、外部から侵入して乗っ取ったコンピュータを利用したサイバー攻撃で、踏み台のコンピュータを制御し、あるいは命令を出力する役割を担うサーバである。
【0095】
#2(ネットワークI/Fへの通信):OS20は、ネットワークI/F22に対して要求された通信内容を転送する。
【0096】
#3(ネットワーク通信の転送):ネットワークI/F22は、当該通信内容をセキュアコンポーネント50で検証すべく、OS-セキュアコンポーネントI/F23に転送する。
【0097】
#4(データストリームのセキュアコンポーネントへの送信):OS20は、転送された通信内容を、データストリームとしてOS-セキュアコンポーネントI/F23経由でセキュアコンポーネント50へ送信する。
【0098】
#5(入力データ前処理部への転送):データ入力部51は、受信したデータストリームを入力データ前処理部55へ転送する。
【0099】
#6(入力データの前処理):入力データ前処理部55は、転送されたデータストリームを解析し、必要に応じて前処理を行う。本ユースケースの場合、受信したデータストリーム(通信内容)が暗号化されている場合、復号して平文を得る等の処理を行う。入力データ前処理部55で処理されたデータストリームは、順次、データ入力バッファ61へ入力される。
【0100】
#7(異常検知グラフへの入力):セキュアコンポーネント50は、受信したデータストリームを1バイトずつ異常検知グラフ62に入力する。
【0101】
#8(異常検知グラフの状態遷移):異常検知グラフ62は、入力されたバイトに従ってグラフ内で状態遷移を行う。
【0102】
#9(異常データパターンの発見と記録):異常検知グラフ62は、状態遷移の結果、特定の異常データパターンが発見された場合、発見された異常データパターンについて、パターン発見テーブル63に記録する。具体的には、発見回数を1つ増やす。
図5の例では、異常データパターン1「0001FEFF」と異常データパターン2「FFFE」の発見回数を0から1に増やしている。
【0103】
#10(異常の特定):パターン発見テーブル63の発見回数をもとに、異常パターン論理式テーブル64の論理式を評価し、条件を満たす異常が存在する場合、当該異常が発生したものとみなす。
図5の例では、異常1の論理式を評価した結果、入力されたデータストリームの中に異常データパターン1「0001FEFF」と異常データパターン2「FFFE」の両方が検出されたため、異常1が検知されたものとして通知を行う。
【0104】
#11(異常の外部通知):異常検知部53は、通知対象をデバイス側OSとして、外部通知部52に異常1の検知を通知する。
【0105】
#12(OSへの異常通知):セキュアコンポーネント50は、OS20に対し、異常1が検知された旨を通知する。
【0106】
#13(通信とアプリケーション動作の停止):OS20は、当該異常の検知元であるアプリケーション10に対して適切な措置を行う。具体的には、OS20は、アプリケーション10の動作停止、削除などを実施するとともに、現在実施されている好ましくないネットワーク通信を停止する。
【0107】
図2の場合と同様に、
図5の場合においても、セキュアコンポーネント50が非力な場合、OS20は、以下の(1)~(3)のように処理を並行実行し、アプリケーション10の実行前処理軽減を図ってもよい。(1)通信の前処理(バッファ確保等)と、セキュアコンポーネント50へのデータストリームの送信を並行実施する、(2)特に制約を加えず、通信の実行とセキュアコンポーネント50へのデータストリームの送信とを並行実施させるが、異常検知時には直ちに停止させる。
【0108】
なお、通信内容の検証は、外部に送信する送信内容でもよく、外部から受信する通信内容でもよい。
【0109】
以上説明したユースケースでは、全てデバイス100単体で完結したセキュリティ処理であるが、このメカニズムを応用すると、発生した異常を秘匿通信路経由で外部の管理者に通知することで、遠隔によるエンドポイントのインシデントレスポンス、すなわちEDRを実現できる。これは、セキュアコンポーネント50上で異常を検知した後、通知先をセキュリティベンダのEDRサーバ200に指定した上で、秘匿通信路を介して当該通信を実施することで実現できる。EDRは前述のマルウェア検出、ネットワーク通信に対する異常検知の両方について、共通の手順で実施できるので、異常検知が行われたタイミング以降の手順について、以下に説明する。
【0110】
図6はセキュリティベンダと連動したEDRの実施の一例を示す図である。以下、図中の各処理を#1~#9として説明する。
【0111】
#1(異常の特定):パターン発見テーブル63の発見回数をもとに、異常パターン論理式テーブル64の論理式を評価し、条件を満たす異常が存在する場合、当該異常が発生したものとみなす。
図6の例では、異常1の論理式を評価した結果、入力されたデータストリームの中に異常データパターン1「0001FEFF」と異常データパターン2「FFFE」の両方が検出されたため、異常1が検知されたものとして通知を行う。
【0112】
#2(不正の外部通知):異常検知部53は、通知対象をEDRサーバ200として、秘匿通信部54に異常1の検知を通知する。
【0113】
#3(EDRサーバへの異常通知):セキュアコンポーネント50は、秘匿通信路経由で、EDRサーバ200に対し、異常1の検知を通知する。
【0114】
#4(異常の分析とインシデントレスポンス):EDRサーバ200は、受信した異常を蓄積するとともに、セキュリティアナリストに通知し、分析やインシデントレスポンスのインプットにする。
【0115】
#5(デバイス遠隔操作指示):セキュリティアナリストは、インシデントレスポンスのアクションとして、デバイス100に対する遠隔操作指示を端末装置210に入力し、EDRサーバ200に転送する。
【0116】
#6(遠隔操作指示の送信):EDRサーバ200は、異常が検知されたセキュアコンポーネント50に対して、遠隔操作指示を送信する。
【0117】
#7(外部通知部への転送):セキュアコンポーネント50は、EDRサーバ200から受信した遠隔操作指示を復号し、外部通知部52へ転送する。
【0118】
#8(遠隔操作指示のデバイスへの転送):外部通知部52は、遠隔操作指示をOS20へ転送する。
【0119】
#9(遠隔操作指示の実施):OS20は、セキュアコンポーネント50から受信した遠隔操作指示に従い、アプリケーション10を停止し、あるいはネットワーク通信を遮断する等のセキュリティ保護動作を行う。
【0120】
セキュアコンポーネント50は、EDRサーバ200(外部装置)との間で秘匿通信路を開設する開設部(秘匿通信部54)、及び秘匿通信路を介して、検知した異常をEDRサーバ200へ通知する通知部(異常検知部53)を備える。
【0121】
また、セキュアコンポーネント50は、秘匿通信路を介してセキュアコンポーネント50を搭載したデバイス100に対する遠隔操作指示を受信した場合、受信した遠隔操作指示をデバイス100へ出力する外部通知部52(出力部)を備える。
【0122】
また、セキュアコンポーネント50は、自身が検知した異常に基づいて、セキュアコンポーネント50を搭載したデバイス100に対する遠隔操作指示を受信し、受信した遠隔操作指示に基づいて、デバイス100の動作を制御することにより、デバイス100を保護することができる。
【0123】
上述のように、セキュアコンポーネント50自身が、EDRにおけるエージェントとしての機能を担うので、例えば、(1)OSやアプリとして特段のエージェントのインストールを行うことなく、エンドポイントデバイスのEDRを行うことができる、(2)セキュリティベンダ固有のエージェントに依存しないため、通信先EDRサーバ200を変更することにより、特定のセキュリティベンダに依存しないEDRメカニズムを実現できる、(3)セキュアコンポーネント50をデバイス100にハードウェア実装することにより、OSに依存しないEDRメカニズムを実現できる、(4)エージェントがOS上に露出しないため、耐解析能力が向上し、攻撃者にバイパスの隙を与えない、等の大きな効果を得ることができる。
【0124】
マルウェアの活動状況の変化は極めて速いため、異常検知を行うための異常データパターンも可能な限り素早く更新する必要がある。以下では、セキュアコンポーネント50の秘匿通信路の活用により、セキュアコンポーネント50内の異常検知グラフ62、パターン発見テーブル63及び異常パターン論理式テーブル64(纏めて「検知対象」とも称する)を更新する例について説明する。
【0125】
図7は秘匿通信路を経由した検知対象の更新の一例を示す図である。以下、図中の各処理を#1~#6として説明する。
【0126】
#1(新たな検知対象の追加):セキュリティアナリストは、新たに発見されたマルウェアや不正通信に対し、当該異常検知用データをEDRサーバ200に登録する。異常検知用データは、検知対象(異常検知グラフ62、パターン発見テーブル63及び異常パターン論理式テーブル64)を更新するためのデータである。
【0127】
#2(EDRサーバによる配信):EDRサーバ200は、新たに登録された異常検知用データを、セキュリティ管理対象の各セキュアコンポーネント50に配信する。なお、
図7では、便宜上1つのデバイス100及びセキュアコンポーネント50だけを図示しているが、デバイス100及びセキュアコンポーネント50は複数あってもよい。
【0128】
#3(秘匿通信路経由での受信):セキュアコンポーネント50は、自身の秘匿通信路経由で、EDRサーバ200から異常検知用データを受信する。
【0129】
#4(異常検知部への通知):セキュアコンポーネント50は、受信した異常検知用データを異常検知部53へ通知する。
【0130】
#5(テーブルの更新):異常検知部53は、異常検知用データを元に、パターン発見テーブル63及び異常パターン論理式テーブル64に異常データパターンと異常を追加する。
図7の例では、異常データパターン5として、新たに「FF0000」を追加した上で、新たな異常として異常4を定義(異常データパターン3と異常データパターン5の両方が発見された場合)している。
【0131】
#6(異常検知グラフへの追加):異常検知部53は、異常検知グラフ62に新たな異常データパターンを追加する。異常データパターンの追加は、
図3を参照。
【0132】
上述のように、セキュアコンポーネント50は、秘匿通信路を介して異常検知グラフ62を更新するための更新データ及び更新指示を受信した場合、異常検知部53(更新部)は、受信した更新データに基づいて異常検知グラフ62を更新する。なお、上述のように、パターン発見テーブル63及び異常パターン論理式テーブル64を更新することもできる。
【0133】
これにより、セキュアコンポーネント50は、新たな異常4をセキュリティアノマリとして検知可能になる。なお、
図7と同様の手順で、既存の異常の情報を変更すること、あるいは削除することもできる。
【0134】
図8はデバイス100を経由した検知対象の更新の一例を示す図である。以下、図中の各処理を#1~#6として説明する。
【0135】
#1(新たな検知対象の追加):セキュリティアナリストは、デバイスメンテナンス担当者に対し、新たに追加すべき異常検知用データを(手渡し、郵送等の手段で)配布する。
【0136】
#2(OSへの入力):デバイスメンテナンス担当者は、専用アプリの実行、異常検知パターン追加専用I/Fなど、OS20が開設するI/F経由で、OS20に対して異常検知用データを入力する。ここでは専用アプリを実行し、アプリ実行I/F21へ入力したとする。
【0137】
#3(異常検知用データのセキュアコンポーネントへの送信):OS20は、異常検知用データを、OS-セキュアコンポーネントI/F23経由でセキュアコンポーネント50へ送信する。
【0138】
#4(異常検知部への通知):セキュアコンポーネント50は、受信した異常検知用データを異常検知部53へ通知する。
【0139】
#5(テーブルの更新):異常検知部53は、異常検知用データを元に、パターン発見テーブル63及び異常パターン論理式テーブル64に異常データパターンと異常を追加する。
図8の例では、異常データパターン5として、新たに「FF0000」を追加した上で、新たな異常として異常4を定義(異常データパターン3と異常データパターン5の両方が発見された場合)している。
【0140】
#6(異常検知グラフへの追加):異常検知部53は、異常検知グラフ62に新たな異常データパターンを追加する。異常データパターンの追加は、
図3を参照。
【0141】
上述のように、セキュアコンポーネント50の異常検知部53(更新部)は、セキュアコンポーネント50を搭載したデバイス100から異常検知グラフ62を更新するための更新データ及び更新指示を取得した場合、取得した更新データに基づいて異常検知グラフ62を更新することができる。なお、上述のように、パターン発見テーブル63及び異常パターン論理式テーブル64を更新することもできる。
【0142】
特に遠隔地やオフライン稼働するデバイスなど、ネットワークによる一括更新が難しいデバイスに対しては、ネットワークを経由せず手動更新する手段は有用であり、本実施形態は、こうしたオフラインでの異常検知用データの更新に対しても有効に機能する。
【0143】
本実施形態によれば、バイナリデータのデータストリームの入力によって、当該バイナリデータ種別に存在し得る複数の異常を並行検知できる。これにより、リッチOS等の上位システムから、処理対象のデータストリームを流し込むだけで、セキュアコンポーネント50上で異常を検知できる。上位システムとは独立、かつ負荷を与えずに異常を検知でき、デバイスの性能を低下させることなくマルウェアに対する保護を実現できる。
【0144】
また、本実施形態によれば、異常判定のためのロジック(異常検知グラフ62、パターン発見テーブル63及び異常パターン論理式テーブル64)を、耐タンパ性を有するセキュアコンポーネント50に保持(隠蔽)するので、マルウェア作成者等、攻撃者による検出パターン解析を防止し、攻撃者にバイパスのノウハウを与えない。
【0145】
(付記1)セキュアコンポーネントは、データストリームを取得する取得部と、複数の異常それぞれを示す異常データパターンを含み、複数の内部状態を通じて前記異常データパターンへの状態遷移を規定する異常検知モデルと、前記取得部で取得したデータストリームを前記異常検知モデルに入力し、前記データストリームに含まれる部分データ列に対応させて前記内部状態を遷移する遷移部と、前記データストリームに含まれるデータ列が前記異常データパターンに遷移した場合、異常を検知する検知部とを備える。
【0146】
(付記2)セキュアコンポーネントは、付記1において、前記異常検知モデルは、前記複数の内部状態に対応する複数のノードを含むツリー構造を有し、前記遷移部は、前記部分データ列に対応させて前記複数のノードの上位ノードから下位ノードに向かってノードを遷移する。
【0147】
(付記3)セキュアコンポーネントは、付記2において、前記複数のノードは、所定の部分データ列を保持し、前記上位ノードは、エッジを通じて下位ノードを参照する第1参照部を有し、前記下位ノードは、前記上位ノードが保持する部分データ列を、先頭データ列として含む部分データ列を保持する。
【0148】
(付記4)セキュアコンポーネントは、付記2又は付記3において、前記複数のノードそれぞれは、自信が保持する部分データ列の末尾から比較して最も長く一致する部分データ列を保持するノードを参照する第2参照部を有する。
【0149】
(付記5)セキュアコンポーネントは、付記1から付記4のいずれか一つにおいて、前記検知部は、前記データ列が遷移した異常データパターン又は異常データパターンの組合せに応じて、種類が異なる異常を検知する。
【0150】
(付記6)セキュアコンポーネントは、付記1から付記5のいずれか一つにおいて、前記取得部で取得したデータストリームを単位データ列に区分できるか否かを判定する判定部と、単位データ列に区分できない場合、前記データストリームに対して所定の前処理を行う前処理部とを備え、前記所定の前処理をしたデータストリームを前記異常検知モデルに入力する。
【0151】
(付記7)セキュアコンポーネントは、付記1から付記6のいずれか一つにおいて、外部装置との間で秘匿通信路を開設する開設部と、前記秘匿通信路を介して前記検知部で検知した異常を前記外部装置へ通知する通知部とを備える。
【0152】
(付記8)セキュアコンポーネントは、付記7において、前記秘匿通信路を介して前記セキュアコンポーネントを搭載したデバイスに対する遠隔操作指示を受信した場合、受信した遠隔操作指示を前記デバイスへ出力する出力部を備える。
【0153】
(付記9)セキュアコンポーネントは、付記7又は付記8において、前記秘匿通信路を介して前記異常検知モデルを更新するための更新データ及び更新指示を受信した場合、受信した更新データに基づいて前記異常検知モデルを更新する更新部を備える。
【0154】
(付記10)セキュアコンポーネントは、付記1から付記9のいずれか一つにおいて、前記セキュアコンポーネントを搭載したデバイスから前記異常検知モデルを更新するための更新データ及び更新指示を取得した場合、取得した更新データに基づいて前記異常検知モデルを更新する更新部を備える。
【0155】
(付記11)セキュアコンポーネントは、付記1から付記10のいずれか一つにおいて、セキュアエレメント、トラステッド・プラットフォーム・モジュール又はトラステッド実行環境のいずれかにより構成される。
【0156】
(付記12)デバイスは、前述のセキュアコンポーネントと通信するデバイスであって、前記デバイスは、前記セキュアコンポーネントが検知した異常に基づいて、前記デバイス自身、前記デバイス上で稼働しているOS、及びアプリケーションの少なくとも一つの動作を変更する。
【0157】
(付記13)異常検知方法は、前述のセキュアコンポーネントが検知した異常に基づいて、前記セキュアコンポーネントと通信するデバイスの異常を検知する。
【0158】
(付記14)デバイス保護方法は、前述のセキュアコンポーネントが検知した異常に基づいて、前記セキュアコンポーネントを搭載したデバイスに対する遠隔操作指示を受信し、受信した遠隔操作指示に基づいて、前記デバイスの動作を制御する。
【0159】
(付記15)異常検知モデル生成方法は、セキュアコンポーネントが有する異常検知モデルの生成方法であって、前記異常検知モデルは、複数のノードを含むツリー構造を有し、前記複数のノードは、所定の部分データ列を保持し、上位ノードは、エッジを通じて下位ノードを参照する第1参照部を有し、前記下位ノードは、前記上位ノードが保持する、異常データパターンの一部を構成する部分データ列を、先頭データ列として含む部分データ列を保持し、最下位のノードが保持する部分データ列が前記異常データパターンとなるように前記異常検知モデルを生成する。
【0160】
各実施形態に記載した事項は相互に組み合わせることが可能である。また、特許請求の範囲に記載した独立請求項及び従属請求項は、引用形式に関わらず全てのあらゆる組み合わせにおいて、相互に組み合わせることが可能である。さらに、特許請求の範囲には他の2以上のクレームを引用するクレームを記載する形式(マルチクレーム形式)を用いているが、これに限るものではない。マルチクレームを少なくとも一つ引用するマルチクレーム(マルチマルチクレーム)を記載する形式を用いて記載してもよい。
【符号の説明】
【0161】
100 デバイス
10 アプリケーション
20 OS
21 アプリ実行I/F
22 ネットワークI/F
23 OS-セキュアコンポーネントI/F
50 セキュアコンポーネント
51 データ入力部
52 外部通知部
53 異常検知部
54 秘匿通信部
55 入力データ前処理部
61 データ入力バッファ
62 異常検知グラフ
63 パターン発見テーブル
64 異常パターン論理式テーブル
200 EDRサーバ
210 端末装置