(58)【調査した分野】(Int.Cl.,DB名)
ネットワークを流れるパケットのペイロード部分を参照することなくセキュリティ攻撃を検出することを特徴とする請求項1又は2に記載のセキュリティ脅威検出システム。
【発明を実施するための形態】
【0018】
以下、本発明の実施の形態について図面を参照して詳細に説明する。なお、以下の実施の形態は、この発明の技術的思想を具体化するためのセキュリティ脅威検出システムを例示するものであり、装置の構成やデータの構成等は以下の実施の形態に限定されるものではない。
【0019】
≪既存技術≫
まず、既存技術について詳細に説明する。
【0020】
<概要>
既に説明した通り、近年サーバやクライアントなどが電子的攻撃を受けることによって情報流出やサービス停止など被害が生じ問題となっている。この問題の原因に対処する方法には複数手法があるが、各々の手法には課題があった。検知方法としては、シグニチャ型とアノマリ型があり、設置方法としては、ホスト型とネットワーク型がある。
【0021】
シグニチャ型は、ベンダーの持つデータベース上のデータを参照してパターンマッチによってセキュリティ攻撃を検出する手法である。一度攻撃を受ける対象者が複数いることで得られる候補となるデータがないと検出できない問題点がある。同類の攻撃である亜種マルウェアの検出ができない問題点もある。また、パケットのペイロード部分を参照するため通信の秘密に抵触する、更にペイロード部分が暗号化されていると検出できない問題点もある。
【0022】
アノマリ型は、各種定義されたしきい値を超える挙動が検知され、異常と思われるものが脅威として検出される手法である(パスワードフィールドに制御文字や認証失敗の異常回数など)。異常挙動と思われるものの傾向を見ているので一定の誤検出や未検出が発生する問題点がある。パケットのペイロード部分を参照するため通信の秘密に抵触する問題点もある。更に、ペイロード部分が暗号化されていると検出できない問題点もある。
【0023】
ホスト型は、ホスト側に置くことで暗号化を解除したデータで解析を行う手法である。設置したホストのみしか検知できず全体把握ができない問題点がある。
【0024】
ネットワーク型は、全体的な検知が可能で費用対効果が高い手法である。ネットワークを流れるパケットのペイロード部分を参照するため、処理負荷が高い問題点がある。暗号化されたパケットについては検知できない問題点もある。
【0025】
<既存技術の課題と本発明適用の効果>
(1)ポートスキャン
ポートスキャン攻撃は宛先毎にUDP/TCPのポート番号がインクリメントされるため、セッション単位に攻撃を特定できず、閾値を設けることが難しい。よって、既存技術ではポートスキャン対策が難しく、使用しないポートは閉塞して運用している。
【0026】
本発明を適用すれば、ポートスキャンのセキュリティ攻撃を宛先、送信元の組み合わせで検知できるため、ポート閉塞による運用対策ではなく、偽装の攻撃者を含め網羅的に送信者、宛先の組み合わせによる検知が可能となる。
【0027】
(2)SYNフラッド
SYNフラッド攻撃はセッション単位に攻撃を特定できないため、既存技術では、宛先毎に一定期間のSYNフラッド回数の閾値を設ける対策が一般的である。よって、左記閾値を超えるセキュリティ攻撃があった場合、正常な通信も遮断される課題がある。
【0028】
本発明を適用すれば、SYNフラッドのセキュリティ攻撃を宛先、送信元の組み合わせで検知できるため、SYNフラッド回数の閾値による対策ではなく、偽装の攻撃者を含め網羅的に送信者、宛先の組み合わせによる検知が可能となり、セキュリティ攻撃があった場合でも正常の通信への影響はない。
【0029】
(3)マルウェア感染(C&C)
外部からの命令によりレジストリや各種設定の漏洩や改竄などのトロイの木馬系のウイルスは、亜種マルウェアが多く発生しており、シグネチャによるパターンマッチでは検知できない課題がある。
【0030】
本発明を適用すれば、外部からの命令や操作を実施する前の起動命令をシグネチャに依存せずパケットパターンで検知できるため、亜種マルウェアでも検知できる。
【0031】
(4)情報漏えい
情報漏えいを目的とした亜種マルウェアは多く発生しており、シグネチャによるパターンマッチでは検知できない課題がある。
【0032】
本発明を適用すれば、マルウェア感染後にC&Cサーバからの情報漏えいの実行命令を受けた端末の動作に関する特徴をシグネチャに依存せずパケットパターンで検知できるため、亜種マルウェアでも検知できる。
【0033】
(5)不正アクセス、ログインの試み
不正アクセス・ログインによく使用される文字列についてはシグネチャによるパターンマッチで検知可能であるが、辞書攻撃などあまり使用されない文字列を用いた不正アクセス・ログインについては検知ができない課題がある。
【0034】
本発明を適用すれば、不正アクセス、ログイン時に使用される文字列に依存せず、応答時間が大きく且つ複数回実行されるなどの攻撃時の動作をパケットパターンから検知できる。
【0035】
(6)DNSアンプ
DNSアンプはフレーム長の小さいDNS要求に対してフレーム長の大きいDNS返答が返るパターンを繰り返す。DNS要求に含まれる文字列をパターンマッチによって検出するため、要求される文字列が変化した場合に検知できない課題がある。
【0036】
本発明を適用すれば、DNS要求パケットと応答パケットのフレーム長の相関で検知できるため、DNS要求にふくまれる文字列に依存せず、DNSアンプ攻撃を検知できる。
【0037】
(7)ルータ攻撃(DoS)
ルータ攻撃はルータを通過するパケットによって実施されるため、攻撃を特定することが難しい。よって、既存技術では通過できるパケットの条件を制限して運用している。
【0038】
本発明を適用すれば、ルータ攻撃を宛先、送信元の組み合わせで検知できるため、パケットの条件制限による運用対策ではなく、偽装の攻撃者を含め網羅的に送信者、宛先、TTL、DFの値、フレーム長などの組み合わせによる検知が可能となる。
【0039】
(8)サーバ攻撃(DoS)
サーバ攻撃はサーバへのセッションをむやみに継続することでリソース不足を発生させるため、NW側での対策は難しく、サーバ側でのセッション維持時間などの設定により運用している。
【0040】
本発明を適用すれば、セッションの継続時間、パケット間隔やウィンドウサイズなどの組み合わせで攻撃者を特定できるため、運用での対処ではなくサーバへの攻撃をNW側で検知できる。
【0041】
<攻撃1:ポートスキャン>
図2は、ポートスキャンの説明図である。この図に示すように、ポートスキャンは、ポート閉塞や周辺装置のF/Wによって、パケットの廃棄もしくは攻撃対象ホストからのRST返信によりTCP 3ウェイ・ハンドシェイクによるセッションが確立しないため、以下の特徴を持つ。
・攻撃者からの送信パケットおよびその返信パケットの長さが極めて小さい。
・攻撃者から宛先到達不能(ICMP Type=3)と到達不能理由(Code=3(ポート到達不能)、Code=10(廃止予定)、Code=13(フィルタリングによる到達不能))のパケットが返される。
・TCPのフラグシーケンスがTCP SYN,TCP SYNで完了する。
【0042】
以上の特徴はフレーム長の最大値・平均値・合計値、TCPフラグの順序性、ICMPコード値のパケット比率で顕在化する。
【0043】
<攻撃2:SYNフラッド>
図3は、SYNフラッドの説明図である。この図に示すように、SYNフラッドは、送信元アドレスを詐称して大量のSYNパケットを送信することによって、メモリ領域を枯渇させるため、以下の特徴を持つ。
・攻撃者からの送信パケットおよびその返信パケットの長さが極めて小さい。
・セッションの両方向のフレーム長の最大値が小さくなる。
【0044】
以上の特徴はフレーム長の最大値・平均値・合計値、TCPフラグの順序性、両方向のフレーム長の最大値で顕在化する。
【0045】
<攻撃3:マルウェア感染(C&C)>
図4は、マルウェア感染の説明図である。この図に示すように、マルウェアに感染し、マルウェアが起動したタイミングでC&Cサーバに起動を通知するため、以下の特徴を持つ。
・UDP 1パケットで感染を通知する。
・両方向のフレーム長の最大値が極めて小さい。
・通知先のIPアドレスがブラックIPリストに登録されていることがある。
【0046】
以上の特徴はUDPのパケット数、フレーム長の最大値、ブラックIPリスト登録フラグで顕在化する。
【0047】
<攻撃4:情報漏えい>
図5は、情報漏えいの説明図である。この図に示すように、情報漏えいは、帯域を広げて機密情報ファイルの速やかな転送を試みるため、以下の特徴を持つ。
・TCPウィンドウサイズが大きくなる(TCPウィンドウ・スケール・オプションを拡張)
・送信側のTCPフラグのACKのみの比率が高くなる。
【0048】
以上の特徴はTCPウィンドウ・スケール・オプションの値、TCPフラグのACKのみ比率で顕在化する。
【0049】
<攻撃5:不正アクセス、ログインの試み>
図6は、不正アクセス、ログインの試みの説明図である。この図に示すように、不正アクセス、ログインの試みは事象が繰り返されるため、以下の特徴を持つ。
・存在しないID・パスワードでのログイン、存在しないファイルへのアクセスのため、正常な通信と比較して応答時間は大きくなる。
・応答メッセージのサイズは通常のWebコンテンツのダウンロードと比較して小さいため、応答パケット数が少なく、TCPフラグのPSH ACK比率が高くなる。
【0050】
以上の特徴は、パケット間隔の標準偏差、TCPフラグのPSH ACK比率で顕在化する。
【0051】
<攻撃6:DNSアンプ>
図7は、DNSアンプの説明図である。この図に示すように、DNSアンプは、DNS要求に対するDNS応答のパケットサイズが大きいため、以下の特徴を持つ。
・小さいパケットサイズのDNS要求に対して、DNS応答のパケットサイズが大きい。
・DNSの512バイト制限を越える応答パケットを生成させる。
・ポートはUDPの53(DNS)を使用する。
【0052】
以上の特徴は、UDPポート番号、パケットのフレーム長の順序性により顕在化する。
【0053】
<攻撃7:ルータ攻撃(DoS)>
図8は、ルータ攻撃(DoS)の説明図である。この図に示すように、ルータ攻撃(DoS)は、大量のTTLが小さいパケットや大量のジャンボフレームを送信し、ルータのCPU負荷をかけるため、以下の特徴を持つ。
・TTL値の小さいパケットを大量に送信し、経路中のルータにTTL超過(ICMP Type=11)を大量に発生させてルータにCPU負荷をかける。
・ジャンボフレームを送信し、ICMP到達不能メッセージ(ICMP Type=3 code=4)を大量に発生させてルータにCPU負荷をかける。
【0054】
以上の特徴は、パケットのTTL値、フレーム長、IPフラグの値、ICMPタイプのタイプ、コードにより顕在化する。
【0055】
<攻撃8:サーバ攻撃(DoS)>
図9は、サーバ攻撃(DoS)の説明図である。この図に示すように、サーバ攻撃(DoS)は、サーバのリソース不足を招く攻撃を行うため、以下の特徴を持つ。
・メモリ、帯域のリソースを不足させるため、TCPウィンドウサイズが大きくなる(TCPウィンドウ・スケール・オプションを拡張)
・TCPセッションのリソースを不足させるため、セッションを維持するためだけのパケットが一定周期で送信される。
【0056】
以上の特徴は、TCPウィンドウ・スケール・オプションの値、パケット間隔の値で顕在化する。
【0057】
≪セキュリティ脅威検出システム≫
次に、本発明の実施の形態におけるセキュリティ脅威検出システムについて説明する。
【0058】
<システム構成>
図10は、本発明の実施の形態におけるセキュリティ脅威検出システムの構成図である。このセキュリティ脅威検出システムでは、パターンマッチングによるセキュリティ攻撃の検出方法と異なり、セキュリティ攻撃の通信パターンを通信の秘密に抵触する恐れがないペイロード部分を除いたパケットのIPアドレス、TCPフラグ、送信間隔などヘッダ部分で生成できる要素と、ネットワークを流れるパケットのヘッダ情報から事前に生成した要素とを照合し、セキュリティ攻撃を検出するようになっている。
【0059】
具体的には、
図10に示すように、攻撃学習処理部10、攻撃検知部20、攻撃判定基準テーブルT6等の各種データベースを備え、以下の処理を行う。これにより、事前に必要な情報をリスト化する必要がなく、高精度な検出を実現することが可能となる。
・ネットワークを流れるパケットの送信元IPアドレスのロケーションやTCPヘッダシーケンスや流量などのセキュリティ攻撃の特徴からセキュリティ攻撃を検出する。
・パケットのペイロード以外の部分を用いてセキュリティ攻撃を検出する。
・単一セッションのみならず、複数セッション(送信元/宛先IPアドレス)ごとでのセキュリティ攻撃を検出する。
【0060】
<各機能部の説明>
図11は、本発明の実施の形態におけるセキュリティ脅威検出システムの要部の機能ブロック図である。この図に示すように、攻撃学習処理部10は、攻撃パケット検知部11と、付加情報生成部12と、説明変数生成部13と、攻撃解析学習部14と、攻撃情報テーブルT1と、国情報テーブルT2(図示せず)と、マルウェアドメインリストテーブルT3(図示せず)と、PerPacket学習データテーブルT4と、PerSession学習データテーブルT5と、攻撃判定基準テーブルT6とを備える。また、攻撃検知部20は、パケット受信部21と、パケット送信部22と、パケットバッファリング部23と、セッション集約部24と、攻撃パターン照合部25と、攻撃者被害者特定部26と、攻撃判定テーブルT7と、照合結果テーブルT8と、攻撃者テーブルT9と、被害者テーブルT10とを備える。照合結果テーブルT8、攻撃者テーブルT9、被害者テーブルT10には、セキュリティ攻撃の検知結果が保存される。なお、攻撃学習処理部10、攻撃検知部20、各テーブルT1〜T10は、物理的に同一の装置に設けてもよいし、別々の装置に設けてもよい。
【0061】
攻撃学習処理部10は、正常パケット及びセキュリティ攻撃パケットをL2/L3/L4ヘッダ情報を収集・集約し、セキュリティ攻撃(目的変数)単位にセキュリティ攻撃の通信パターンを学習し、セキュリティ攻撃の特徴を捉える要素(説明変数)の値を作成する。
【0062】
攻撃検知部20は、ネットワークを流れるパケットと攻撃学習処理部で生成したセキュリティ攻撃(目的変数)単位にセキュリティ攻撃の特徴を捉える要素(説明変数)の値を照合して、セキュリティ脅威を検出する。
【0063】
攻撃パケット検知部11は、パケットキャプチャデータに対してセキュリティ攻撃の検知に必要な情報(フレーム長、タイムスタンプ、L2・L3・L4ヘッダ)を抽出しPerPacket学習データテーブルT4に保存する。また、L2・L3・L4ヘッダ及びペイロードから攻撃を検出し、セキュリティ攻撃(目的変数)を特定し、PerPacket学習データテーブルT4に保存する。なお、L2・L3・L4の「L」はレイヤを意味し、「L2・L3・L4」又は「L2/L3/L4」は「L2、L3、及びL4」を意味する。
【0064】
付加情報生成部12は、攻撃パケット検知部11でパケット単位に抽出したL2・L3・L4ヘッダの中のSrcIP及びDstIPをキーにして外部情報である国情報とマルウェアドメインリスト情報を検察して該当の国情報及びマルウェアドメイン情報をPerPacket学習データテーブルT4に保存する。
【0065】
説明変数生成部13は、PerPacket学習データテーブルT4を、SrcIP、DstIP、Protocol、SrcPort、DstPortをキーにしてセッションごとに情報を集約することで、解析に必要となる要素(説明変数)をセッション単位で生成する。
【0066】
攻撃解析学習部14は、説明変数生成部13で生成した解析に必要となる要素(説明変数)ごとにセキュリティ攻撃を検出するための閾値を算出し、セキュリティ攻撃を検出するための攻撃判定基準テーブルT6を生成する。
【0067】
パケット受信部21は、ネットワークを流れるパケットを受信する。
【0068】
パケット送信部22は、バッファリングしたパケットをネットワークへ送信する。
【0069】
パケットバッファリング部23は、受信したパケットをメモリにバッファリング(保存)する。
【0070】
セッション集約部24は、バッファリングした受信パケットをL2・L3・L4ヘッダに組み立て、組み立てたL2・L3・L4ヘッダの中のSrcIP及びDstIPをキーにして外部情報である国情報とマルウェアドメインリスト情報を検察して該当の国情報及びマルウェアドメイン情報を生成し、セッション単位にセキュリティ攻撃を判定するために要素(説明変数)の値を検出して攻撃判定テーブルT7に情報を保存する。
【0071】
攻撃パターン照合部25は、一定周期でセッション集約部24で生成したセッション単位の攻撃判定テーブルT7から、セッションごとにセッション完了を判断し、セッションごとにセキュリティ攻撃の特徴を捉える要素(説明変数)を作成する。作成した説明変数の値と、攻撃解析学習部14で生成した攻撃判定基準テーブルT6に格納された説明変数の値を照合してセキュリティ脅威のパケットであるか判断する。
【0072】
攻撃者被害者特定部26は、一定周期で攻撃パターン照合部25で検知したセキュリティ攻撃結果をもとに攻撃者・被害者を特定し、攻撃者テーブルT9、被害者テーブルT10に格納する。
【0073】
以上のように、本発明の実施の形態におけるセキュリティ脅威検出システムは、パケットのヘッダ情報(L4パケット)の通信パターンを分析してセキュリティ攻撃を検知する手法を用いて高精度な検出を実現する。具体的には、セキュリティ攻撃(目的変数)単位に攻撃の特徴を捉える要素(説明変数)をL2/L3/L4ヘッダ情報から生成し、ネットワークを流れるパケットとセキュリティ攻撃の特徴を捉えた要素を照合させ、セキュリティ攻撃を判定する機能を有することを特徴とする。また、単一セッション・複数のセッションごとでの攻撃検知を行うため、従来では難しい攻撃に対しての検知を実現する。
【0074】
言い換えると、ウイルスパターンとの照合による検出手法ではなく、流れているパケットのヘッダ情報だけで生成できる情報(要素)を利用して、セキュリティ攻撃の通信特徴をモデル化して、モデル化したルールと照合させてセキュリティ攻撃を検出する手法であり、ウイルスパターンの最新化や同類の亜種マルウェアについて通信の秘密に抵触することなく且つペイロード暗号化されていても適切にセキュリティ攻撃を検出することであり、また単一セッション・複数のセッションごとでの検知を実施することから、従来では検知不可である攻撃への対応も可能とする。
【0075】
<特徴分類>
図12は、本発明の実施の形態におけるセキュリティ脅威検出システムがセキュリティ攻撃を判断するための照合用データ(特徴)の説明図である。この図に示すように、照合用データ(特徴)は、実値代入、算出値、シーケンスから構成される。
【0076】
1stTCP宛先ポート等の説明変数は、パケットのヘッダ情報、付加情報、その他(受信時刻情報とフレーム長)の値をそのまま代入する説明変数である。
【0077】
フレーム長合計値等の説明変数は、パケットのヘッダ情報、付加情報、その他(受信時刻情報とフレーム長)の値を用いた演算処理(例:各種平均値、標準偏差、最大値、最小値などの統計値算出や減算によるセッション継続時間の算出など)により算出する説明変数である。
【0078】
UDP長フレーム長シーケンス等の説明変数は、パケットのヘッダ情報、付加情報、その他(受信時刻情報とフレーム長)の値に順序性の概念を付与した説明変数である。
【0079】
<効果>
本セキュリティ脅威検出システムによれば、以下の効果が得られる。
【0080】
まず、上述した攻撃1〜攻撃8をリアルタイムに検知することで未然にセキュリティ攻撃を防ぐことができる。
【0081】
また、単一セッション・複数のセッションごとでの攻撃検知を行うため、従来では難しい攻撃に対しての検知ができる。
【0082】
また、パケットのペイロード部分を参照することなく、セキュリティ攻撃のパケットをネットワークに流入する直前で抑制し、不要なトラフィックの網内侵入を抑止できる。
【0083】
また、セキュリティ攻撃の検出処理の軽量化により、ネットワーク内でお客様単位でのセキュリティ攻撃の検出が可能となる。
【0084】
また、シグネチャを利用したパターンマッチによる検出を行わないため、既存セキュリティ攻撃と同類の亜種マルウェアについても検出が可能となる。
【0085】
また、セキュリティ攻撃の検出処理の軽量化により、ネットワークキャリア側でユーザ単位に既知、亜種マルウェアを検出することが可能となる。
【0086】
また、暗号化されているパケットに関してもセキュリティ攻撃の検出が可能となる。
【0087】
また、パケットを終端する必要がないため、エンドツーエンドのスループットへの影響が無い。
【0088】
また、攻撃者及び被害者の特定が可能となる。
【0089】
≪具体例≫
以下、本セキュリティ脅威検出システムをより具体的に説明する。
【0090】
<攻撃パケット検知部11の処理フロー>
図13は、攻撃パケット検知部11の処理を示すフローチャートである。
【0091】
ステップS1:正常パケット又はセキュリティ攻撃パケットファイルを1パケット単位に読み込む。
【0092】
ステップS2〜S9:パケット数>0の間、ループする。
【0093】
ステップS3:フレーム長、タイムスタンプを取得する。
【0094】
ステップS4:L2/L3/L4ヘッダを組み立てる。
【0095】
ステップS5:PerPacket学習データテーブルT4へ必要なヘッダ情報を登録する(フレーム長、タイムスタンプ、L3/L4ヘッダ)。
【0096】
ステップS6:L2/L3/L4ヘッダ及びペイロードを攻撃情報とチェックする。
【0097】
ステップS7:攻撃判定ルールと一致するか判定する。
【0098】
ステップS8:攻撃判定ルールと一致する場合、PerPacket学習データテーブルT4に判定結果を登録する(攻撃分類)。
【0099】
<付加情報生成部12の処理フロー>
図14は、付加情報生成部12の処理を示すフローチャートである。
【0100】
ステップS11:PerPacket学習データテーブルT4を1レコード単位に読み込む。
【0101】
ステップS12〜S23:PerPacket学習データのレコード数>0の間、ループする。
【0102】
ステップS13:国情報テーブルT2のネットワーク、マスク、国名を読み込む。
【0103】
ステップS14:PerPacket学習データの.ip.srcと国情報テーブルT2と.ネットワーク/マスクを照合する。
【0104】
ステップS15:PerPacket学習データ.ip.src.国名に、国情報.国名を登録する。
【0105】
ステップS16:PerPacket学習データ.のip.dstと国情報テーブルT2と.ネットワーク/マスクを照合する。
【0106】
ステップS17:PerPacket学習データ.ip.dst.国名に、国情報.国名を登録する。
【0107】
ステップS18:マルウェアドメインリストテーブルT3のIPアドレスを読み込む。
【0108】
ステップS19:PerPacket学習データ.のip.srcとマルウェアドメインリストの.IPアドレスを照合する。
【0109】
ステップS20:PerPacket学習データ.ip.src.MDフラグに「1」を登録する。
【0110】
ステップS21:PerPacket学習データ.のip.dstとマルウェアドメインリストの.IPアドレスを照合する。
【0111】
ステップS22:PerPacket学習データ.ip.dst.MDフラグに、「1」を登録する。
【0112】
<説明変数生成部13の処理フロー>
図15及び
図16は、説明変数生成部13の処理を示すフローチャートである。
【0113】
ステップS31:PerPacket学習データテーブルT4からSeesionIDがNULLのレコードを読み込む。
【0114】
ステップS32〜S39:抽出したレコードのSessionIDがNULLのレコード数>0の間、ループする。
【0115】
ステップS33:PerPacket学習データのip.protoがICMP又はTCP、UDPか判定する。
【0116】
ステップS34:TCPである場合、PerPacket学習データの複数データの中で同じセッションにユニークなセッションIDを付与する(ip.src、ip.dst、ip.proto、tcp.srcport、tcp.dstportが完全一致及びip.dstとIp.srcの値が逆でtcp.dstportとtcp.srcportの値が逆の条件で上記条件が一致する場合)。
【0117】
ステップS35:UDPである場合、PerPacket学習データの複数データの中で同じセッションにユニークなセッションIDを付与する(ip.src、ip.dst、ip.proto、udp.srcport、udp.dstportが完全一致及びip.dstとIp.srcの値が逆でudp.dstportとudp.srcportの値が逆の条件で上記条件が一致する場合)。
【0118】
ステップS36:ICMPである場合、PerPacket学習データの複数データの中で同じセッションにユニークなセッションIDを付与する(ip.src、ip.dst、ip.protoが完全一致及びip.dstとip.srcの値が逆の条件で上記条件が一致する場合)。
【0119】
ステップS37:PerPacket学習データテーブルT4にユニークとなるセッションIDを登録する。
【0120】
ステップS38:TCP/UDP/ICMP以外である場合、セッションIDとして「-」を付与し、処理済として登録する。
【0121】
ステップS40〜S60:PerPacket学習データの未処理セッションがある場合はループする。
【0122】
ステップS41:PerPacket学習データの該当セッションIDのレコードを全て抽出する。
【0123】
ステップS42:抽出したレコードの中のデータで攻撃分類が1-8の値が付与されているか判定する。
【0124】
ステップS51〜S59:正常又は攻撃1〜8の場合、PerPacket学習データから抽出した該当セッションIDのレコードを全て処理済として登録する。
【0125】
<説明変数生成部13(攻撃1)の処理フロー>
図17は、説明変数生成部13(攻撃1)の処理を示すフローチャートである。
【0126】
ステップS61:PerPacket学習データテーブルT4から抽出したプロトコル番号が6(TCP)/17(UDP)/1(ICMP)か判定する。
【0127】
ステップS62:6(TCP)である場合、抽出したレコードの中でフレーム送受信時刻が最も過去のフレームのヘッダ情報等をPerSession学習データテーブルに登録する。
【0128】
ステップS63:上記のパケットに加え、抽出したレコードの中でフレーム送受信時刻が二番目の過去のフレームのヘッダ情報等をPerSession学習データテーブルに登録する。
【0129】
ステップS64:抽出したレコードの該当のフィールドから、合計値1、最大値1、最大値2、平均値、合計値2を計算し、登録する。
・合計値1:該当レコードの該当フィールドの値すべての合計値を登録
・最大値1:該当レコードの該当フィールドの最大値を登録
・最大値2:受信パケットがipdst=1st宛先IPアドレスの場合の該当フィールドの最大値を登録
・平均値:該当レコードの該当フィールドの平均値を登録
・合計値2:該当レコードの数を登録
ステップS65:抽出したレコードから、フレーム送受信時刻が最も古い時刻と、新しい時刻のフレームを抽出し、その差分時間を計算し、PerSession学習データテーブルT5へ登録する。
【0130】
ステップS66:17(UDP)である場合、抽出したレコードの中でフレーム送受信時刻が最も過去のフレームのヘッダ情報等をPerSession学習データテーブルに登録する。
【0131】
ステップS67:抽出したレコードの該当のフィールドから、合計値1、最大値1、最大値2、平均値、合計値2を計算し、登録する。
・合計値1:該当レコードの該当フィールドの値すべての合計値を登録
・最大値1:該当レコードの該当フィールドの最大値を登録
・最大値2:受信パケットがipdst=1st宛先IPアドレスの場合の該当フィールドの最大値を登録
・平均値:該当レコードの該当フィールドの平均値を登録
・合計値2:該当レコードの数を登録
ステップS68:抽出したレコードから、フレーム送受信時刻が最も古い時刻と、新しい時刻のフレームを抽出し、その差分時間を計算し、PerSession学習データテーブルT5へ登録する。
【0132】
ステップS69:1(ICMP)である場合、抽出したレコードの中でフレーム送受信時刻が最も過去のフレームのヘッダ情報等をPerSession学習データテーブルに登録する。
【0133】
ステップS70:抽出したレコードの該当のフィールドから、比率1〜4を計算し、登録する。
・比率1〜4:該当フィールドの値のパケット個数の比率
【0134】
<説明変数生成部13(攻撃2)の処理フロー>
図18は、説明変数生成部13(攻撃2)の処理を示すフローチャートである。
【0135】
ステップS71:PerPacket学習データテーブルT4から抽出したプロトコル番号が6(TCP)/1(ICMP)か判定する。
【0136】
ステップS72:6(TCP)である場合、抽出したレコードの中でフレーム送受信時刻が最も過去のフレームのヘッダ情報等をPerSession学習データテーブルに登録する。
【0137】
ステップS73:上記のパケットに加え、抽出したレコードの中でフレーム送受信時刻が二番目の過去のフレームのヘッダ情報等をPerSession学習データテーブルに登録する。
【0138】
ステップS74:抽出したレコードの該当のフィールドから、合計値、最大値1、最大値2、平均値を計算し、登録する。
・合計値:該当レコードの該当フィールドの値すべての合計値を登録
・最大値1:該当レコードの該当フィールドの最大値を登録
・最大値2:該当レコードの内、ip.dst=1st宛先IPアドレスの該当フィールドの最大値を登録
・平均値:該当レコードの該当フィールドの平均値を登録
ステップS75:1(ICMP)である場合、抽出したレコードの中でフレーム送受信時刻が最も過去のフレームのヘッダ情報等をPerSession学習データテーブルに登録する。
【0139】
ステップS76:抽出したレコードの該当のフィールドから、比率1〜4を計算し、登録する。
・比率1〜4:該当フィールドの値のパケット個数の比率
【0140】
<説明変数生成部13(攻撃3)の処理フロー>
図19は、説明変数生成部13(攻撃3)の処理を示すフローチャートである。
【0141】
ステップS81:PerPacket学習データテーブルT4から抽出したプロトコル番号が17(UDP) か判定する。
【0142】
ステップS82:17(UDP)である場合、抽出したレコードの中でフレーム送受信時刻が最も過去のフレームのヘッダ情報等をPerSession学習データテーブルに登録する。
【0143】
ステップS83:抽出したレコードの該当のフィールドから、合計値1、最大値1、合計値2を計算し、登録する。
・合計値1:該当レコードの該当フィールドの値すべての合計値を登録
・合計値2:該当レコードの数を登録
・最大値1:該当レコードの該当フィールドの最大値を登録
【0144】
<説明変数生成部13(攻撃4)の処理フロー>
図20は、説明変数生成部13(攻撃4)の処理を示すフローチャートである。
【0145】
ステップS91:PerPacket学習データテーブルT4から抽出したプロトコル番号が6(TCP)か判定する。
【0146】
ステップS92:6(TCP)である場合、抽出したレコードの中でフレーム送受信時刻が最も過去のフレームのヘッダ情報等をPerSession学習データテーブルに登録する。
【0147】
ステップS93:上記のパケットに加え、抽出したレコードの中でフレーム送受信時刻が四番目の過去のフレーム長をPerSession学習データテーブルに登録する。
【0148】
ステップS94:抽出したレコードの該当のフィールドから、中央値1、比率1、比率2、合計値1を計算し、登録する。
・中央値1:該当レコードの該当フィールドの中央値を登録
・比率1:該当レコードの内 ip.dst=1st宛先IPアドレスの場合の該当フィールド値のパケット個数の比率
・比率2:該当レコードの内 ip.dst=1st送信元IPアドレスの場合の該当フィールド値のパケット個数の比率
・合計値1:該当レコードの内 ip.dst=1st宛先IPアドレスの場合の該当フィールドの値すべての合計値を登録
ステップS95:受信パケットのframe.timeから該当レコードの最終フレーム受信時刻(順方向)を減算し、その減算結果の中から最大の値を登録する。
【0149】
<説明変数生成部13(攻撃5)の処理フロー>
図21は、説明変数生成部13(攻撃5)の処理を示すフローチャートである。
【0150】
ステップS101:PerPacket学習データテーブルT4から抽出したプロトコル番号が6(TCP)か判定する。
【0151】
ステップS102:6(TCP)である場合、抽出したレコードの中でフレーム送受信時刻が最も過去のフレームのヘッダ情報等をPerSession学習データテーブルに登録する。
【0152】
ステップS103:抽出したレコードの該当のフィールドから、比率1を計算し、登録する。
・比率1:該当レコードの内 ip.dst=1st宛先IPアドレスの場合の該当フィールドの値のパケット個数の比率
ステップS104:抽出したレコードの該当のフィールドから、標準偏差1を計算し、登録する。
・標準偏差1:該当レコードの内 ip.dst=1st宛先IPアドレスの場合、受信パケットのframe.timeから該当レコードの最終フレーム受信時刻を減算し、その減算結果から標準偏差を計算し、登録する。
【0153】
<説明変数生成部13(攻撃6)の処理フロー>
図22は、説明変数生成部13(攻撃6)の処理を示すフローチャートである。
【0154】
ステップS111:PerPacket学習データテーブルT4から抽出したプロトコル番号が17(UDP) か判定する。
【0155】
ステップS112:17(UDP)である場合、抽出したレコードの中でフレーム送受信時刻が最も過去のフレームのヘッダ情報等をPerSession学習データテーブルに登録する。
【0156】
ステップS113:上記のパケットに加え、抽出したレコードの中でフレーム送受信時刻が二番目の過去のフレームのヘッダ情報等をPerSession学習データテーブルに登録する。
【0157】
<説明変数生成部13(攻撃7)の処理フロー>
図23は、説明変数生成部13(攻撃7)の処理を示すフローチャートである。
【0158】
ステップS121:PerPacket学習データテーブルT4から抽出したプロトコル番号が6(TCP)/17(UDP)/1(ICMP)か判定する。
【0159】
ステップS122:6(TCP)である場合、抽出したレコードの中でフレーム送受信時刻が最も過去のフレームのヘッダ情報等をPerSession学習データテーブルに登録する。
【0160】
ステップS123:抽出したレコードの該当のフィールドから、最大値1、平均値1、平均値2、合計値1を計算し、登録する。
・最大値1:該当レコードの該当フィールドの最大値を登録
・平均値1:該当レコードの内 ip.dst=1st宛先IPアドレスの場合、該当フィールドの平均値を登録
・平均値2:該当レコードの内 ip.dst=1st宛先IPアドレスの場合、該当フィールドの平均値を登録
・合計値1:該当レコードの数を登録
ステップS124:17(UDP)である場合、抽出したレコードの中でフレーム送受信時刻が最も過去のフレームのヘッダ情報等をPerSession学習データテーブルに登録する。
【0161】
ステップS125:抽出したレコードの該当のフィールドから、最大値1、平均値1、平均値2、合計値1を計算し、登録する。
・最大値1:該当レコードの該当フィールドの最大値を登録
・平均値1:該当レコードの内 ip.dst=1st宛先IPアドレスの場合、該当フィールドの平均値を登録
・平均値2:該当レコードの内 ip.dst=1st宛先IPアドレスの場合、該当フィールドの平均値を登録
・合計値1:該当レコードの数を登録
ステップS126:1(ICMP)である場合、抽出したレコードの中でフレーム送受信時刻が最も過去のフレームのヘッダ情報等をPerSession学習データテーブルに登録する。
【0162】
ステップS127:抽出したレコードの該当のフィールドから、比率1〜4を計算し、登録する。
・比率1〜4:該当フィールドの値のパケット個数の比率
【0163】
<説明変数生成部13(攻撃8)の処理フロー>
図24は、説明変数生成部13(攻撃8)の処理を示すフローチャートである。
【0164】
ステップS131:PerPacket学習データテーブルT4から抽出したプロトコル番号が6(TCP)か判定する。
【0165】
ステップS132:6(TCP)である場合、抽出したレコードの中でフレーム送受信時刻が最も過去のフレームのヘッダ情報等をPerSession学習データテーブルに登録する。
【0166】
ステップS133:抽出したレコードの該当のフィールドから、合計値1を計算し、登録する。
・合計値1:該当レコードの内 ip.dst=1st宛先IPアドレスの場合の該当フィールドの値すべての合計値を登録
ステップS134:受信パケットのframe.timeから該当レコードの最終フレーム受信時刻(順方向)を減算し、その減算結果の中から最大の値を登録する。
【0167】
<攻撃解析学習部14の処理フロー>
図25は、攻撃解析学習部14の処理を示すフローチャートである。
【0168】
ステップS141:PerSession学習データテーブルT5から攻撃分類1から8までを順次処理する。
【0169】
ステップS142:PerSession学習データテーブルT5から該当の攻撃分類のレコードを全て抽出する。
【0170】
ステップS143:攻撃分類を判定する。
【0171】
ステップS144:攻撃分類が1である場合、攻撃判定1を処理する。
【0172】
ステップS145:攻撃分類が2である場合、攻撃判定2を処理する。
【0173】
ステップS146:攻撃分類が3である場合、攻撃判定3を処理する。
【0174】
ステップS147:攻撃分類が4である場合、攻撃判定4を処理する。
【0175】
ステップS148:攻撃分類が5である場合、攻撃判定5を処理する。
【0176】
ステップS149:攻撃分類が6である場合、攻撃判定6を処理する。
【0177】
ステップS150:攻撃分類が7である場合、攻撃判定7を処理する。
【0178】
ステップS151:攻撃分類が8である場合、攻撃判定8を処理する。
【0179】
<攻撃解析学習部14(攻撃判定1)の処理フロー>
図26は、攻撃解析学習部14(攻撃判定1)の処理を示すフローチャートである。
【0180】
ステップS161:抽出した該当のレコードの中で1stプロトコル番号が6(TCP)のレコードだけを絞り込む。
【0181】
ステップS162:上記で絞り込んだ該当のレコードの中でSessionIDが最も小さいレコードのTCPフラグシーケンスの値を攻撃判定基準テーブルT6に登録する。
【0182】
ステップS163:抽出した該当のレコードの中で1stプロトコル番号が6(TCP)または17(UDP)のレコードだけを絞り込む。
【0183】
ステップS164:上記で抽出したレコードの該当のフィールドから、平均値と標準偏差を計算する。
・平均値:該当レコードの該当フィールドの値すべての平均値を登録
・標準偏差:該当レコードの該当フィールドの値すべての標準偏差を登録
ステップS165:抽出した該当のレコードの中で1stプロトコル番号が1(ICMP)のレコードだけを絞り込む。
【0184】
ステップS166:上記で抽出したレコードの該当のフィールドから、平均値と標準偏差を計算する。
・平均値:該当レコードの該当フィールドの値すべての平均値を登録
・標準偏差:該当レコードの該当フィールドの値すべての標準偏差を登録
【0185】
<攻撃解析学習部14(攻撃判定2)の処理フロー>
図27は、攻撃解析学習部14(攻撃判定2)の処理を示すフローチャートである。
【0186】
ステップS171:抽出した該当のレコードの中で1stプロトコル番号が6(TCP)のレコードだけを絞り込む。
【0187】
ステップS172:上記で絞り込んだ該当のレコードの中でSessionIDが最も小さいレコードのTCPフラグシーケンスの値を攻撃判定基準テーブルT6に登録する。
【0188】
ステップS173:上記で抽出したレコードの該当のフィールドから、平均値と標準偏差を計算する。
・平均値:該当レコードの該当フィールドの値すべての平均値を登録
・標準偏差:該当レコードの該当フィールドの値すべての標準偏差を登録
ステップS174:抽出した該当のレコードの中で1stプロトコル番号が1(ICMP)のレコードだけを絞り込む。
【0189】
ステップS175:上記で抽出したレコードの該当のフィールドから、平均値と標準偏差を計算する。
・平均値:該当レコードの該当フィールドの値すべての平均値を登録
・標準偏差:該当レコードの該当フィールドの値すべての標準偏差を登録
【0190】
<攻撃解析学習部14(攻撃判定3)の処理フロー>
図28は、攻撃解析学習部14(攻撃判定3)の処理を示すフローチャートである。
【0191】
ステップS181:抽出した該当のレコードの中で1stプロトコル番号が17(UDP)のレコードだけを絞り込む。
【0192】
ステップS182:上記で抽出したレコードの該当のフィールドから、平均値と標準偏差を計算する。
・平均値:該当レコードの該当フィールドの値すべての平均値を登録
・標準偏差:該当レコードの該当フィールドの値すべての標準偏差を登録
【0193】
<攻撃解析学習部14(攻撃判定4)の処理フロー>
図29は、攻撃解析学習部14(攻撃判定4)の処理を示すフローチャートである。
【0194】
ステップS191:抽出した該当のレコードの中で1stプロトコル番号が6(TCP)のレコードだけを絞り込む。
【0195】
ステップS192:上記で絞り込んだ該当のレコードの中でSessionIDが最も小さいレコードの1stTCP宛先ポートの値を攻撃判定基準テーブルT6に登録する。
【0196】
ステップS193:上記で抽出したレコードの該当のフィールドから、平均値と標準偏差を計算する。
・平均値:該当レコードの該当フィールドの値すべての平均値を登録
・標準偏差:該当レコードの該当フィールドの値すべての標準偏差を登録
【0197】
<攻撃解析学習部14(攻撃判定5)の処理フロー>
図30は、攻撃解析学習部14(攻撃判定5)の処理を示すフローチャートである。
【0198】
ステップS201:抽出した該当のレコードの中で1stプロトコル番号が6(TCP)のレコードだけを絞り込む。
【0199】
ステップS202:上記で絞り込んだ該当のレコードの中でSessionIDが最も小さいレコードの1stTCP宛先ポートの値を攻撃判定基準テーブルT6に登録する。
【0200】
ステップS203:上記で抽出したレコードの該当のフィールドから、平均値と標準偏差を計算する。
・平均値:該当レコードの該当フィールドの値すべての平均値を登録
・標準偏差:該当レコードの該当フィールドの値すべての標準偏差を登録
【0201】
<攻撃解析学習部14(攻撃判定6)の処理フロー>
図31は、攻撃解析学習部14(攻撃判定6)の処理を示すフローチャートである。
【0202】
ステップS211:抽出した該当のレコードの中で1stプロトコル番号が6(TCP)のレコードだけを絞り込む。
【0203】
ステップS212:上記で絞り込んだ該当のレコードの中でSessionIDが最も小さいレコードの1stTCP宛先ポートとUDPフレーム長シーケンスの値を攻撃判定基準テーブルT6に登録する。
【0204】
<攻撃解析学習部14(攻撃判定7)の処理フロー>
図32は、攻撃解析学習部14(攻撃判定7)の処理を示すフローチャートである。
【0205】
ステップS221:抽出した該当のレコードの中で1stプロトコル番号が6(TCP)または17(UDP)のレコードだけを絞り込む。
【0206】
ステップS222:上記で抽出したレコードの該当のフィールドから、平均値と標準偏差を計算する。
・平均値:該当レコードの該当フィールドの値すべての平均値を登録
・標準偏差:該当レコードの該当フィールドの値すべての標準偏差を登録
ステップS223:抽出した該当のレコードの中で1stプロトコル番号が1(ICMP)のレコードだけを絞り込む。
【0207】
ステップS224:上記で抽出したレコードの該当のフィールドから、平均値と標準偏差を計算する。
・平均値:該当レコードの該当フィールドの値すべての平均値を登録
・標準偏差:該当レコードの該当フィールドの値すべての標準偏差を登録
【0208】
<攻撃解析学習部14(攻撃判定8)の処理フロー>
図33は、攻撃解析学習部14(攻撃判定8)の処理を示すフローチャートである。
【0209】
ステップS231:抽出した該当のレコードの中で1stプロトコル番号が6(TCP)のレコードだけを絞り込む。
【0210】
ステップS232:上記で抽出したレコードの該当のフィールドから、平均値と標準偏差を計算する。
・平均値:該当レコードの該当フィールドの値すべての平均値を登録
・標準偏差:該当レコードの該当フィールドの値すべての標準偏差を登録
【0211】
<パケット受信部21/パケット送信部22〜パケットバッファリング部23の処理フロー>
図34は、パケット受信部21/パケット送信部22〜パケットバッファリング部23の処理を示すフローチャートである。
【0212】
ステップS241:該当パケットを受信する。
【0213】
ステップS242:パケット受信時刻を取得する。
【0214】
ステップS243:受信パケットのフレーム長を取得する。
【0215】
ステップS244:受信したパケットと、受信時刻と受信フレーム長をパケットバッファリング部23にコピーする。
【0216】
ステップS245:受信パケットを送信する。
【0217】
(セッション集約部24の処理フロー)
図35〜
図37は、セッション集約部24の処理を示すフローチャートである。
【0218】
ステップS251:パケットバッファリング部23にコピーされた受信パケットをL2/L3/L4ヘッダに組み立てる。
【0219】
ステップS252:組み立てたL3ヘッダのip.protoがICMP又はTCP、UDPか判定する。
【0220】
ステップS253:TCPである場合、受信したパケットが攻撃判定テーブルT7の中に同一のセッションのレコードが存在するか判定する(ip.src、ip.dst、ip.proto、tcp.srcport、tcp.dstportが完全一致及びip.dstとIp.srcの値が逆でtcp.dstportとtcp.srcportの値が逆の条件で上記条件が一致する場合)。
【0221】
ステップS254:同一のセッションのレコードが存在しない場合、攻撃判定テーブルT7にユニークとなるセッションID、受信したパケットのフレームのヘッダ情報等をPerSession攻撃判定テーブルT7に登録する。
【0222】
ステップS255:付加情報付与処理を行う。
【0223】
ステップS256:UDPである場合受信したパケットが攻撃判定テーブルT7の中に同一のセッションのレコードが存在するか判定する(ip.src、ip.dst、ip.proto、tcp.srcport、tcp.dstportが完全一致及びip.dstとIp.srcの値が逆でudp.dstportとudp.srcportの値が逆の条件で上記条件が一致する場合)。
【0224】
ステップS257:同一のセッションのレコードが存在しない場合、攻撃判定テーブルT7にユニークとなるセッションID、受信したパケットのフレームのヘッダ情報等、1stパケットのフレーム長をPerSession攻撃判定テーブルT7に登録する。
【0225】
ステップS258:付加情報付与処理を行う。
【0226】
ステップS259:ICMPである場合、受信したパケットが攻撃判定テーブルT7の中に同一のセッションのレコードが存在するか判定する(ip.src、ip.dst、ip.proto、が完全一致及び ip.dstとIp.srcの値が逆の条件で上記条件が一致する場合)。
【0227】
ステップS260:同一のセッションのレコードが存在しない場合、攻撃判定テーブルT7にユニークとなるセッションIDを登録し、受信したパケットのフレームのヘッダ情報等をPerSession攻撃判定テーブルT7に登録する。
【0228】
ステップS261:付加情報付与処理を行う。
【0229】
ステップS271:受信したパケットが同一のセッションの2パケット目か、また、攻撃判定テーブルT7の合計フレーム数が1か判定する。
【0230】
ステップS272:合計フレーム数が1である場合、受信したパケットのフレームのヘッダ情報を、攻撃判定テーブルT7に登録する。
【0231】
ステップS273:受信したパケットが同一のセッションの4パケット目か、また、攻撃判定テーブルT7の合計フレーム数が3か判定する。
【0232】
ステップS274:合計フレーム数が3である場合、受信したパケットのフレーム長を、攻撃判定テーブルT7に登録する。
【0233】
ステップS275:受信したパケットの該当のフィールドから、最大値1、最大値2、最大値3を計算し、登録する。
・最大値1:該当レコードの該当フィールドの値より受信パケットのframe.lenが大きければその値を登録
・最大値2:受信パケットがipdst=1st宛先IPアドレス場合で、該当レコードの該当フィールドの値より受信パケットのframe.lenが大きければその値を登録
・最大値3:
(0)該当レコードの最終フレーム受信時刻が0の場合は0を登録
(1)受信パケットのframe.timeから該当レコードの最終フレーム受信時刻を減算する
(2)上の減算結果の値が該当レコードの該当フィールドの値より大きければその値を登録する
ステップS276:受信したパケットが同一のセッションの2パケット目か、また、攻撃判定テーブルT7の合計フレーム数が1か判定する。
【0234】
ステップS277:合計フレーム数が1である場合、受信したパケットのフレーム長をPerSession攻撃判定テーブルT7に登録する。
【0235】
ステップS278:受信したパケットの該当のフィールドから、最大値1、最大値2、最大値3を計算し、登録する。
・最大値1:該当レコードの該当フィールドの値より受信パケットのframe.lenが大きければその値を登録
・最大値2:受信パケットがipdst=1st宛先IPアドレス場合で、該当レコードの該当フィールドの値より受信パケットのframe.lenが大きければその値を登録
・最大値3:
(0)該当レコードの最終フレーム受信時刻が0の場合は0を登録
(1)受信パケットのframe.timeから該当レコードの最終フレーム受信時刻を減算する
(2)上の減算結果の値が該当レコードの該当フィールドの値より大きければその値を登録する
ステップS279:受信したパケットの該当のフィールドから、最大値1、最大値2、最大値3を計算し、登録する。
・最大値1:該当レコードの該当フィールドの値より受信パケットのframe.lenが大きければその値を登録
・最大値2:受信パケットがipdst=1st宛先IPアドレス場合で、該当レコードの該当フィールドの値より受信パケットのframe.lenが大きければその値を登録
・最大値3:
(0)該当レコードの最終フレーム受信時刻が0の場合は0を登録
(1)受信パケットのframe.timeから該当レコードの最終フレーム受信時刻を減算する
(2)上の減算結果の値が該当レコードの該当フィールドの値より大きければその値を登録する
ステップS281:受信したパケットの該当のフィールドから、合計値1、合計値2、合計値3、合計値4、合計値5、合計値6、合計値7、合計値8、合計値9、合計値10、合計値11、合計値12、合計値13、合計値14を計算し、登録する。
・合計値1:該当レコードの該当フィールドの値に受信パケットのframe.lenを加算して登録
・合計値2:該当レコードの数に1を加算して登録
・合計値3:受信パケットがipdst=1st宛先IPアドレス場合、該当レコードの数に1を加算して登録
・合計値4:受信パケットがipdst=1st送信元IPアドレス場合、該当レコードの数に1を加算して登録
・合計値5:該当レコードの受信パケットのframe.lenに該当するフィールドの値に1を加算して登録
・合計値6:受信パケットがipdst=1st宛先IPアドレス場合
(1)受信パケットのframe.timeから該当レコードの最終フレーム受信時刻(順方向)を減算
(2)上の減算結果の値を該当レコードの該当フィールドの値に加算して登録
・合計値7:受信パケットがipdst=1st宛先IPアドレス場合
(1)受信パケットのframe.timeから該当レコードの最終フレーム受信時刻(順方向)を減算
(2)上の減算結果の値を二乗し、該当レコードの該当フィールドの値に加算して登録
・合計値8:
(1)受信パケットのframe.timeから該当レコードの最終フレーム受信時刻を減算
(2)上の減算結果の値を該当レコードの該当フィールドの値に加算して登録
・合計値9:受信パケットがipdst=1st宛先IPアドレス場合、該当レコードの該当フィールドの値に受信パケットのTTL値を加算して登録
・合計値10:受信パケットがIPフラグDF=1の場合、該当レコードの数に1を加算して登録
・合計値11:受信パケットがipdst=1st宛先IPアドレスの場合でDSCPフィールド=2の場合、該当レコードの数に1を加算して登録
・合計値12:受信パケットがipdst=1st送信元IPアドレスの場合でTCPフラグがACKのみの場合、該当レコードの数に1を加算して登録
・合計値13:受信パケットがipdst=1st宛先IPアドレスの場合でTCPフラグがPSHACKの場合、該当レコードの数に1を加算して登録
・合計値14:受信パケットがipdst=1st宛先IPアドレスの場合でTCPウィンドウ・スケール・オプションshift=5の場合、該当レコードの数に1を加算して登録
ステップS282:受信したパケットの該当のフィールドから、合計値1、合計値2、合計値3、合計値5、合計値6、合計値7、合計値8、合計値9、合計値10、合計値11を計算し、登録する。
・合計値1:該当レコードの該当フィールドの値に受信パケットのframe.lenを加算して登録
・合計値2:該当レコードの数に1を加算して登録
・合計値3:受信パケットがipdst=1st宛先IPアドレス場合、該当レコードの数に1を加算して登録
・合計値5:該当レコードの受信パケットのframe.lenに該当するフィールドの値に1を加算して登録
・合計値6:受信パケットがipdst=1st宛先IPアドレス場合
(1)受信パケットのframe.timeから該当レコードの最終フレーム受信時刻(順方向)を減算
(2)上の減算結果の値を該当レコードの該当フィールドの値に加算して登録
・合計値7:受信パケットがipdst=1st宛先IPアドレス場合
(1)受信パケットのframe.timeから該当レコードの最終フレーム受信時刻(順方向)を減算
(2)上の減算結果の値を二乗し、該当レコードの該当フィールドの値に加算して登録
・合計値8:
(1)受信パケットのframe.timeから該当レコードの最終フレーム受信時刻を減算
(2)上の減算結果の値を該当レコードの該当フィールドの値に加算して登録
・合計値9:受信パケットがipdst=1st宛先IPアドレス場合、該当レコードの該当フィールドの値に受信パケットのTTL値を加算して登録
・合計値10:受信パケットがIPフラグDF=1の場合、該当レコードの数に1を加算して登録
・合計値11:受信パケットがipdst=1st宛先IPアドレスの場合でDSCPフィールド=2の場合、該当レコードの数に1を加算して登録
ステップS283:受信したパケットの該当のフィールドから、合計値1、合計値2、合計値3、合計値5、合計値6、合計値7、合計値8、合計値9、合計値10、合計値11、合計値15、合計値16、合計値17、合計値18、合計値19、合計値20を計算し、登録する。
・合計値1:該当レコードの該当フィールドの値に受信パケットのframe.lenを加算して登録
・合計値2:該当レコードの数に1を加算して登録
・合計値3:受信パケットがipdst=1st宛先IPアドレス場合、該当レコードの数に1を加算して登録
・合計値5:該当レコードの受信パケットのframe.lenに該当するフィールドの値に1を加算して登録
・合計値6:受信パケットがipdst=1st宛先IPアドレス場合
(1)受信パケットのframe.timeから該当レコードの最終フレーム受信時刻(順方向)を減算
(2)上の減算結果の値を該当レコードの該当フィールドの値に加算して登録
・合計値7:受信パケットがipdst=1st宛先IPアドレス場合
(1)受信パケットのframe.timeから該当レコードの最終フレーム受信時刻(順方向)を減算
(2)上の減算結果の値を二乗し、該当レコードの該当フィールドの値に加算して登録
・合計値8:
(1)受信パケットのframe.timeから該当レコードの最終フレーム受信時刻を減算
(2)上の減算結果の値を該当レコードの該当フィールドの値に加算して登録
・合計値9:受信パケットがipdst=1st宛先IPアドレス場合、該当レコードの該当フィールドの値に受信パケットのTTL値を加算して登録
・合計値10:受信パケットがIPフラグDF=1の場合、該当レコードの数に1を加算して登録
・合計値11:受信パケットがipdst=1st宛先IPアドレスの場合でDSCPフィールド=2の場合、該当レコードの数に1を加算して登録
合計値15:受信パケットがICMPタイプ=3の場合、該当レコードの数に1を加算して登録
合計値16:受信パケットがICMPタイプ=11の場合、該当レコードの数に1を加算して登録
合計値17:受信パケットがICMPタイプ=3、ICMPコード=3の場合、該当レコードの数に1を加算して登録
合計値18:受信パケットがICMPタイプ=3、ICMPコード=4の場合、該当レコードの数に1を加算して登録
合計値19:受信パケットがICMPタイプ=3、ICMPコード=10の場合、該当レコードの数に1を加算して登録
合計値20:受信パケットがICMPタイプ=3、ICMPコード=13の場合、該当レコードの数に1を加算して登録
ステップS284:受信したパケットの受信時刻を、PerSession攻撃判定テーブルT7の
(1)最終フレーム受信時刻に登録
(2)受信パケットがipdst=1st送信元IPアドレス場合、最終フレーム受信時刻(順方向)にも登録
【0236】
<セッション集約部24(付加情報付与)の処理フロー>
図38は、セッション集約部24(付加情報付与)の処理を示すフローチャートである。
【0237】
ステップS291:国情報テーブルT2のネットワーク、マスク、国名を読み込む。
【0238】
ステップS292:受信パケットの.ip.srcと国情報テーブルT2と.ネットワーク/マスクを照合する。
【0239】
ステップS293:攻撃判定テーブルT7の1st送信元IPアドレス国名に、国情報.国名を登録する。
【0240】
ステップS294:受信パケットの.ip.dstと国情報テーブルT2と.ネットワーク/マスクを照合する。
【0241】
ステップS295:攻撃判定テーブルT7の.ip.dst.国名に、国情報.国名を登録する。
【0242】
ステップS296:マルウェアドメインリストテーブルT3のIPアドレスを読み込む。
【0243】
ステップS297:受信パケットのip.srcとマルウェアドメインリストの.IPアドレスを照合する。
【0244】
ステップS298:攻撃判定テーブルT7の1st送信元IPアドレスMDフラグに「1」を登録する。
【0245】
ステップS299:受信パケットのip.dstとマルウェアドメインリストの.IPアドレスを照合する。
【0246】
ステップS300:攻撃判定テーブルT7の1st宛先IPアドレスMDフラグに、「1」を登録する。
【0247】
<攻撃パターン照合部25の処理フロー>
図39〜
図42は、攻撃パターン照合部25の処理を示すフローチャートである。
【0248】
ステップS301:外部ファイルにより、起動周期を定義する。
【0249】
ステップS302:現時刻を取得する。
【0250】
ステップS303:セッション完了フラグ=NULLのレコードを読み込む。
【0251】
ステップS304:セッション終了を判断する(最終フレーム受信時刻 + 起動周期 < 現時刻のレコードをすべて抽出)。
【0252】
ステップS305〜S321:抽出したレコードのセッション完了フラグが未処理の個数>0の間、ループする。
【0253】
ステップS306:該当レコードにセッション完了フラグ=1を登録する。
【0254】
ステップS307:1stプロトコル番号を判定する。
【0255】
ステップS308:6(TCP)である場合、該当レコードのTCPフラグシーケンス1及びTCPフラグシーケンス2の値を結合(例:SYN_SYNなど)し、TCPフラグシーケンスへ登録する。
【0256】
ステップS309:17(UDP)である場合、該当レコードのUDPフレーム長シーケンス1及びUDPフレーム長シーケンス2の値を結合(例:100B台_900B台)し、UDPフレーム長シーケンスへ登録する。
【0257】
ステップS311:該当レコードの平均値1、平均値2、中央値、標準偏差、比率1、比率2、比率3を計算し、登録する。
・平均値1:該当レコードの該当フィールドの値にフレーム長合計値をパケット数で割った値を登録
・平均値2:該当レコードの該当フィールドの値にTTL合計値をパケット数(順方向)で割った値を登録
・中央値:フレーム長(N)別パケット数の値をNについて昇順で合算するときに、最初にパケット数/2を超えるNの値を登録。
・標準偏差:
(1)パケット間隔合計値(順方向)をパケット数(順方向)で割り、その値の二乗を算出
(2)パケット間隔平方合計値(順方向)をパケット数(順方向)で割る
(3)上記(2)の算出値から(1)の値を減算した値を該当レコードの該当フィールドに登録
・比率1:該当レコードの該当フィールドの値にDSCPフィールド2のパケット数(順方向)をパケット数(順方向)で割った値を登録
・比率2:該当レコードの該当フィールドの値にTCPフラグACKのみパケット数(逆方向)をパケット数(逆方向)で割った値を登録
・比率3:該当レコードの該当フィールドの値にTCPフラグPSHACKパケット数(順方向)をパケット数(順方向)で割った値を登録
ステップS312:該当レコードの平均値1、平均値2、中央値、標準偏差、比率1を計算し、登録する。
・平均値1:該当レコードの該当フィールドの値にフレーム長合計値をパケット数で割った値を登録
・平均値2:該当レコードの該当フィールドの値にTTL合計値をパケット数(順方向)で割った値を登録
・中央値:フレーム長(N)別パケット数の値をNについて昇順で合算するときに、最初にパケット数/2を超えるNの値を登録。
・標準偏差:
(1)パケット間隔合計値(順方向)をパケット数(順方向)で割り、その値の二乗を算出
(2)パケット間隔平方合計値(順方向)をパケット数(順方向)で割る
(3)上記(2)の算出値から(1)の値を減算した値を該当レコードの該当フィールドに登録
・比率1:該当レコードの該当フィールドの値にDSCPフィールド2のパケット数(順方向)をパケット数(順方向)で割った値を登録
ステップS313:該当レコードの平均値1、平均値2、中央値、標準偏差、比率1、比率4、比率5、比率6、比率7、比率8、比率9を計算し、登録する。
・平均値1:該当レコードの該当フィールドの値にフレーム長合計値をパケット数で割った値を登録
・平均値2:該当レコードの該当フィールドの値にTTL合計値をパケット数(順方向)で割った値を登録
・中央値:フレーム長(N)別パケット数の値をNについて昇順で合算するときに、最初にパケット数/2を超えるNの値を登録。
・標準偏差:
(1)パケット間隔合計値(順方向)をパケット数(順方向)で割り、その値の二乗を算出
(2)パケット間隔平方合計値(順方向)をパケット数(順方向)で割る
(3)上記(2)の算出値から(1)の値を減算した値を該当レコードの該当フィールドに登録
・比率1:該当レコードの該当フィールドの値にDSCPフィールド2のパケット数(順方向)をパケット数(順方向)で割った値を登録
・比率4:該当レコードの該当フィールドの値にICMPタイプ3パケット数をパケット数で割った値を登録
・比率5:該当レコードの該当フィールドの値にICMPタイプ11パケット数をパケット数で割った値を登録
・比率6:該当レコードの該当フィールドの値にICMPタイプ3コード3パケット数をパケット数で割った値を登録
・比率7:該当レコードの該当フィールドの値にICMPタイプ3コード4パケット数をパケット数で割った値を登録
・比率8:該当レコードの該当フィールドの値にICMPタイプ3コード10パケット数をパケット数で割った値を登録
・比率9:該当レコードの該当フィールドの値にICMPタイプ3コード13パケット数をパケット数で割った値を登録
ステップS322:攻撃判定テーブルT7から、セッション完了フラグ = 1 且つ照合処理完了フラグ = NULL のレコードを読み込む。
【0258】
ステップS323〜S339:抽出したレコード数>0の間、ループする。
【0259】
ステップS324:照合結果テーブルT8に該当レコードのSessionID、最終フレーム受信時刻、セッション継続時間、1st宛先IPアドレス、1st送信元IPアドレス、1st宛先IPアドレス国名、1st送信元IPアドレス国名を登録する。
【0260】
ステップS325:照合結果テーブルT8の一次照合結果ビットを初期化登録(値 = 00000000 )する。
【0261】
ステップS326:1stプロトコル番号を判定する。
【0262】
ステップS327:6(TCP)である場合、TCPセッション一次照合処理を行う。
【0263】
ステップS328:17(UDP)である場合、UDPセッション一次照合処理を行う。
【0264】
ステップS329:1(ICMP)である場合、ICMPセッション一次照合処理を行う。
【0265】
ステップS331:該当セッションが攻撃1から8に該当するか判定する。
【0266】
ステップS332:該当しない場合、1st送信元IPアドレス(MDフラグ = 1)を判定する。
【0267】
ステップS333:照合処理テーブルへ、攻撃判定結果 = 「SrcIPがブラックリストに登録」を登録する。
【0268】
ステップS334:1st宛先IPアドレス(MDフラグ = 1)を判定する。
【0269】
ステップS335:照合処理テーブルへ、攻撃判定結果 = 「DstIPがブラックリストに登録」を登録する。
【0270】
ステップS336:照合処理テーブルへ、攻撃判定結果 = 「正常」を登録する。
【0271】
ステップS337:1つのみ該当する場合、照合処理テーブルへ、攻撃判定結果 = 「該当の攻撃タイプ」を登録する。
【0272】
ステップS338:攻撃判定テーブルT7へ、一次照合処理完了フラグ= 1 を登録する。
【0273】
ステップS340:二次照合処理を行う。
【0274】
<攻撃パターン照合部25(TCPセッション一次照合処理)の処理フロー>
図43〜
図44は、攻撃パターン照合部25(TCPセッション一次照合処理)の処理を示すフローチャートである。
【0275】
ステップS341:攻撃判定基準テーブルT6から、攻撃1照合用データを読み込む。
【0276】
ステップS342:攻撃判定テーブルT7の該当セッションの攻撃判定要素と、攻撃判定基準の攻撃判定要素の値が攻撃1の範囲にあるか判定する。
【0277】
ステップS343:攻撃1の範囲にある場合、照合結果テーブルT8の一次照合結果ビットの1ビット目に1を登録する。
【0278】
ステップS344:攻撃判定基準テーブルT6から、攻撃2照合用データを読み込む。
【0279】
ステップS345:攻撃判定テーブルT7の該当セッションの攻撃判定要素と、攻撃判定基準の攻撃判定要素の値が攻撃1の範囲にあるか判定する。
【0280】
ステップS346:攻撃1の範囲にある場合、照合結果テーブルT8の一次照合結果ビットの2ビット目に1を登録する。
【0281】
ステップS347:攻撃判定基準テーブルT6から、攻撃4照合用データを読み込む。
【0282】
ステップS348:攻撃判定テーブルT7の該当セッションの攻撃判定要素と、攻撃判定基準の攻撃判定要素の値が攻撃1の範囲にあるか判定する。
【0283】
ステップS349:攻撃1の範囲にある場合、照合結果テーブルT8の一次照合結果ビットの4ビット目に1を登録する。
【0284】
ステップS350:攻撃判定基準テーブルT6から、攻撃5照合用データを読み込む。
【0285】
ステップS351:攻撃判定テーブルT7の該当セッションの攻撃判定要素と、攻撃判定基準の攻撃判定要素の値が攻撃1の範囲にあるか判定する。
【0286】
ステップS352:攻撃1の範囲にある場合、照合結果テーブルT8の一次照合結果ビットの5ビット目に1を登録する。
【0287】
ステップS361:攻撃判定基準テーブルT6から、攻撃7照合用データを読み込む。
【0288】
ステップS362:攻撃判定テーブルT7の該当セッションの攻撃判定要素と、攻撃判定基準の攻撃判定要素の値が攻撃1の範囲にあるか判定する。
【0289】
ステップS363:攻撃1の範囲にある場合、照合結果テーブルT8の一次照合結果ビットの7ビット目に1を登録する。
【0290】
ステップS364:攻撃判定テーブルT7の該当セッションの攻撃判定要素と、攻撃判定基準の攻撃判定要素の値が攻撃1の範囲にあるか判定する。
【0291】
ステップS365:攻撃1の範囲にある場合、照合結果テーブルT8の一次照合結果ビットの7ビット目に1を登録する。
【0292】
ステップS366:攻撃判定基準テーブルT6から、攻撃8照合用データを読み込む。
【0293】
ステップS367:攻撃判定テーブルT7の該当セッションの攻撃判定要素と、攻撃判定基準の攻撃判定要素の値が攻撃1の範囲にあるか判定する。
【0294】
ステップS368:攻撃1の範囲にある場合、照合結果テーブルT8の一次照合結果ビットの8ビット目に1を登録する。
【0295】
<攻撃パターン照合部25(UDPセッション一次照合処理)の処理フロー>
図45は、攻撃パターン照合部25(UDPセッション一次照合処理)の処理を示すフローチャートである。
【0296】
ステップS371:攻撃判定基準テーブルT6から、攻撃1照合用データを読み込む。
【0297】
ステップS372:攻撃判定テーブルT7の該当セッションの攻撃判定要素と、攻撃判定基準の攻撃判定要素の値が攻撃1の範囲にあるか判定する。
【0298】
ステップS373:攻撃1の範囲にある場合、照合結果テーブルT8の一次照合結果ビットの1ビット目に1を登録する。
【0299】
ステップS374:攻撃判定基準テーブルT6から、攻撃3照合用データを読み込む。
【0300】
ステップS375:攻撃判定テーブルT7の該当セッションの攻撃判定要素と、攻撃判定基準の攻撃判定要素の値が攻撃1の範囲にあるか判定する。
【0301】
ステップS376:攻撃1の範囲にある場合、照合結果テーブルT8の一次照合結果ビットの3ビット目に1を登録する。
【0302】
ステップS377:攻撃判定基準テーブルT6から、攻撃6照合用データを読み込む。
【0303】
ステップS378:攻撃判定テーブルT7の該当セッションの攻撃判定要素と、攻撃判定基準の攻撃判定要素の値が攻撃1の範囲にあるか判定する。
【0304】
ステップS379:攻撃1の範囲にある場合、照合結果テーブルT8の一次照合結果ビットの6ビット目に1を登録する。
【0305】
ステップS380:攻撃判定基準テーブルT6から、攻撃7照合用データを読み込む。
【0306】
ステップS381:攻撃判定テーブルT7の該当セッションの攻撃判定要素と、攻撃判定基準の攻撃判定要素の値が攻撃1の範囲にあるか判定する。
【0307】
ステップS382:攻撃1の範囲にある場合、照合結果テーブルT8の一次照合結果ビットの7ビット目に1を登録する。
【0308】
<攻撃パターン照合部25(ICMPセッション一次照合処理)の処理フロー>
図46は、攻撃パターン照合部25(ICMPセッション一次照合処理)の処理を示すフローチャートである。
【0309】
ステップS391:攻撃判定基準テーブルT6から、攻撃1照合用データを読み込む。
【0310】
ステップS392:攻撃判定テーブルT7の該当セッションの攻撃判定要素と、攻撃判定基準の攻撃判定要素の値が攻撃1の範囲にあるか判定する。
【0311】
ステップS393:攻撃1の範囲にある場合、照合結果テーブルT8の一次照合結果ビットの1ビット目に1を登録する。
【0312】
ステップS394:攻撃判定基準テーブルT6から、攻撃2照合用データを読み込む。
【0313】
ステップS395:攻撃判定テーブルT7の該当セッションの攻撃判定要素と、攻撃判定基準の攻撃判定要素の値が攻撃1の範囲にあるか判定する。
【0314】
ステップS396:攻撃1の範囲にある場合、照合結果テーブルT8の一次照合結果ビットの2ビット目に1を登録する。
【0315】
ステップS397:攻撃判定基準テーブルT6から、攻撃7照合用データを読み込む。
【0316】
ステップS398:攻撃判定テーブルT7の該当セッションの攻撃判定要素と、攻撃判定基準の攻撃判定要素の値が攻撃1の範囲にあるか判定する。
【0317】
ステップS399:攻撃1の範囲にある場合、照合結果テーブルT8の一次照合結果ビットの2ビット目に1を登録する。
【0318】
<攻撃パターン照合部25(二次照合処理)の処理フロー>
図47〜
図49は、攻撃パターン照合部25(二次照合処理)を示すフローチャートである。
【0319】
ステップS401:照合結果テーブルT8から二次照合の対象レコードを最終フレーム受信時刻+(起動周期*3)<現時刻の条件ですべて抽出する。
【0320】
ステップS402〜S454:抽出したレコードで照合結果テーブルT8の中で異なる1st送信元IPアドレスの処理及び異なる1st送信元IPアドレスの処理が完了するまでループする。
【0321】
ステップS403:抽出したレコードを対象に照合結果テーブルT8の1st送信元IPアドレスが同一のレコードに絞り込む。
【0322】
ステップS404:絞り込んだレコードの中でプロトコルがTCP、UDP、ICMPを含んで且つ一次照合結果ビットが10000000(攻撃1)であるか判定する。
【0323】
ステップS405:攻撃1である場合、該当のレコードの中で攻撃結果判定が行われていないレコードは攻撃1と判断し、照合結果テーブルT8の攻撃判定結果に攻撃1を登録する。
【0324】
ステップS406:攻撃1でない場合、絞り込んだレコードの中でプロトコルがTCP、UDP、ICMPを含んで且つ一次照合結果ビットが00000010(攻撃7)であるか判定する。
【0325】
ステップS407:攻撃7である場合、該当のレコードの中で攻撃結果判定が行われていないレコードは攻撃7と判断し、照合結果テーブルT8の攻撃判定結果に攻撃7を登録する。
【0326】
ステップS408:攻撃7でない場合、絞り込んだレコードの中でプロトコルがTCP、UDPを含んで且つ一次照合結果ビットが10000000(攻撃1)であるか判定する。
【0327】
ステップS409:攻撃1である場合、該当のレコードの中で攻撃結果判定が行われていないレコードは攻撃1と判断し、照合結果テーブルT8の攻撃判定結果に攻撃1を登録する。
【0328】
ステップS410:攻撃1でない場合、絞り込んだレコードの中でプロトコルがTCP、UDPを含んで且つ一次照合結果ビットが00000010(攻撃7)であるか判定する。
【0329】
ステップS411:攻撃7である場合、該当のレコードの中で攻撃結果判定が行われていないレコードは攻撃7と判断し、照合結果テーブルT8の攻撃判定結果に攻撃7を登録する。
【0330】
ステップS412:攻撃7でない場合、絞り込んだレコードの中でプロトコルがTCP、ICMPを含んで且つ一次照合結果ビットが01000000(攻撃2)であるか判定する。
【0331】
ステップS413:攻撃2である場合、該当のレコードの中で攻撃結果判定が行われていないレコードは攻撃2と判断し、照合結果テーブルT8の攻撃判定結果に攻撃2を登録する。
【0332】
ステップS414:攻撃2でない場合、絞り込んだレコードの中でプロトコルがTCP、ICMPを含んで且つ一次照合結果ビットが10000000(攻撃1)であるか判定する。
【0333】
ステップS415:攻撃1である場合、該当のレコードの中で攻撃結果判定が行われていないレコードは攻撃1と判断し、照合結果テーブルT8の攻撃判定結果に攻撃1を登録する。
【0334】
ステップS416:攻撃1でない場合、絞り込んだレコードの中でプロトコルがTCP、ICMPを含んで且つ一次照合結果ビットが00000010(攻撃7)であるか判定する。
【0335】
ステップS417:攻撃7である場合、該当のレコードの中で攻撃結果判定が行われていないレコードは攻撃7と判断し、照合結果テーブルT8の攻撃判定結果に攻撃7を登録する。
【0336】
ステップS421:攻撃7でない場合、絞り込んだレコードの中でプロトコルがUDP、ICMPを含んで且つ一次照合結果ビットが10000000(攻撃1)であるか判定する。
【0337】
ステップS422:攻撃1である場合、該当のレコードの中で攻撃結果判定が行われていないレコードは攻撃1と判断し、照合結果テーブルT8の攻撃判定結果に攻撃1を登録する。
【0338】
ステップS423:攻撃1でない場合、絞り込んだレコードの中でプロトコルがUDP、ICMPを含んで且つ一次照合結果ビットが00000010(攻撃7)であるか判定する。
【0339】
ステップS424:攻撃7である場合、該当のレコードの中で攻撃結果判定が行われていないレコードは攻撃7と判断し、照合結果テーブルT8の攻撃判定結果に攻撃7を登録する。
【0340】
ステップS425:攻撃7でない場合、1st送信元IPアドレス(MDフラグ =が1 であるか)を判定する。
【0341】
ステップS426:MDフラグ =が1 である場合、該当レコードの中で攻撃結果判定が行われていないレコードは、攻撃不明ながらも攻撃であると判断し、照合処理テーブルの攻撃判定結果に「SrcIPがブラックリストに登録」を登録する。
【0342】
ステップS427:MDフラグ =が1 でない場合、該当レコードの中で攻撃結果判定が行われていないレコードは正常であると判断し、照合処理テーブルの攻撃判定結果に「正常」を登録する。
【0343】
ステップS428:抽出したレコードを対象に照合結果テーブルT8の1st宛先IPアドレスが同一のレコードに絞り込む。
【0344】
ステップS429:絞り込んだレコードの中でプロトコルがTCP、UDP、ICMPを含んで且つ一次照合結果ビットが10000000(攻撃1)であるか判定する。
【0345】
ステップS430:攻撃1である場合、該当のレコードの中で攻撃結果判定が行われていないレコードは攻撃1と判断し、照合結果テーブルT8の攻撃判定結果に攻撃7を登録する。
【0346】
ステップS431:攻撃1でない場合、絞り込んだレコードの中でプロトコルがTCP、UDP、ICMPを含んで且つ一次照合結果ビットが00000010(攻撃7)であるか判定する。
【0347】
ステップS432:攻撃7である場合、該当のレコードの中で攻撃結果判定が行われていないレコードは攻撃7と判断し、照合結果テーブルT8の攻撃判定結果に攻撃2を登録する。
【0348】
ステップS433:攻撃7でない場合、絞り込んだレコードの中でプロトコルがTCP、UDPを含んで且つ一次照合結果ビットが10000000(攻撃1)であるか判定する。
【0349】
ステップS434:攻撃1である場合、該当のレコードの中で攻撃結果判定が行われていないレコードは攻撃1と判断し、照合結果テーブルT8の攻撃判定結果に攻撃1を登録する。
【0350】
ステップS435:攻撃1でない場合、絞り込んだレコードの中でプロトコルがTCP、UDPを含んで且つ一次照合結果ビットが00000010(攻撃7)であるか判定する。
【0351】
ステップS436:攻撃7である場合、該当のレコードの中で攻撃結果判定が行われていないレコードは攻撃7と判断し、照合結果テーブルT8の攻撃判定結果に攻撃7を登録する。
【0352】
ステップS441:攻撃7でない場合、絞り込んだレコードの中でプロトコルがTCP、ICMPを含んで且つ一次照合結果ビットが01000000(攻撃2)であるか判定する。
【0353】
ステップS442:攻撃2である場合、該当のレコードの中で攻撃結果判定が行われていないレコードは攻撃2と判断し、照合結果テーブルT8の攻撃判定結果に攻撃2を登録する。
【0354】
ステップS443:攻撃2でない場合、絞り込んだレコードの中でプロトコルがTCP、ICMPを含んで且つ一次照合結果ビットが10000000(攻撃1)であるか判定する。
【0355】
ステップS444:攻撃1である場合、該当のレコードの中で攻撃結果判定が行われていないレコードは攻撃1と判断し、照合結果テーブルT8の攻撃判定結果に攻撃1を登録する。
【0356】
ステップS445:攻撃1でない場合、絞り込んだレコードの中でプロトコルがTCP、ICMPを含んで且つ一次照合結果ビットが00000010(攻撃7)であるか判定する。
【0357】
ステップS446:攻撃7である場合、該当のレコードの中で攻撃結果判定が行われていないレコードは攻撃7と判断し、照合結果テーブルT8の攻撃判定結果に攻撃7を登録する。
【0358】
ステップS447:攻撃7でない場合、絞り込んだレコードの中でプロトコルがUDP、ICMPを含んで且つ一次照合結果ビットが10000000(攻撃1)であるか判定する。
【0359】
ステップS448:攻撃1である場合、該当のレコードの中で攻撃結果判定が行われていないレコードは攻撃1と判断し、照合結果テーブルT8の攻撃判定結果に攻撃1を登録する。
【0360】
ステップS449:攻撃1でない場合、絞り込んだレコードの中でプロトコルがUDP、UDP、ICMPを含んで且つ一次照合結果ビットが00000010(攻撃7)であるか判定する。
【0361】
ステップS450:攻撃7である場合、該当のレコードの中で攻撃結果判定が行われていないレコードは攻撃7と判断し、照合結果テーブルT8の攻撃判定結果に攻撃7を登録する。
【0362】
ステップS451:攻撃7でない場合、1st宛先IPアドレス(MDフラグ =が1 であるか)を判定する。
【0363】
ステップS452:MDフラグ =が1 である場合、該当レコードの中で攻撃結果判定が行われていないレコードは、攻撃不明ながらも攻撃であると判断し、照合処理テーブルの攻撃判定結果に「DstIPがブラックリストに登録」を登録する。
【0364】
ステップS453:MDフラグ =が1 でない場合、該当レコードの中で攻撃結果判定が行われていないレコードは正常であると判断し、照合処理テーブルの攻撃判定結果に「正常」を登録する。
【0365】
<攻撃者被害者特定部26(攻撃者、被害者特定)の処理フロー>
図50〜
図54は、攻撃者被害者特定部26(攻撃者、被害者特定)の処理を示すフローチャートである。
【0366】
ステップS461:外部ファイルにより、起動周期を定義する。
【0367】
ステップS462:監視時間帯を設定(現在時刻−起動周期〜現在時刻)する。
【0368】
ステップS463:照合結果テーブルT8から、攻撃1と判定され、攻撃者・被害者の特定が未完了のレコードを読み込む。
【0369】
ステップS464〜S469:上記条件で抽出されたレコード毎にループする。
【0370】
ステップS465:プロトコル番号を判定する。
【0371】
ステップS466:6(TCP)である場合、1st宛先IPアドレスを被害者、1st送信元IPアドレスを攻撃者に登録する。
【0372】
ステップS467:17(UDP)である場合、1st宛先IPアドレスを被害者、1st送信元IPアドレスを攻撃者に登録する。
【0373】
ステップS468:1(ICMP)である場合、1st宛先IPアドレスを攻撃者、1st送信元IPアドレスを被害者に登録する。
【0374】
ステップS471:照合結果テーブルT8から、攻撃2と判定され、攻撃者・被害者の特定が未完了のレコードを読み込む。
【0375】
ステップS472〜S476:上記条件で抽出されたレコード毎にループする。
【0376】
ステップS473:プロトコル番号を判定する。
【0377】
ステップS474:6(TCP)である場合、1st宛先IPアドレスを被害者、1st送信元IPアドレスを攻撃者に登録する。
【0378】
ステップS475:1(ICMP)である場合、1st宛先IPアドレスを攻撃者、1st送信元IPアドレスを被害者に登録する。
【0379】
ステップS477:照合結果テーブルT8から、攻撃3と判定され、攻撃者・被害者の特定が未完了のレコードを読み込む。
【0380】
ステップS478〜S481:上記条件で抽出されたレコード毎にループする。
【0381】
ステップS479:プロトコル番号を判定する。
【0382】
ステップS480:17(UDP)である場合、1st宛先IPアドレスを攻撃者、1st送信元IPアドレスを被害者に登録する。
【0383】
ステップS491:照合結果テーブルT8から、攻撃4と判定され、攻撃者・被害者の特定が未完了のレコードを読み込む。
【0384】
ステップS492〜S495:上記条件で抽出されたレコード毎にループする。
【0385】
ステップS493:プロトコル番号を判定する。
【0386】
ステップS494:6(TCP)である場合、1st宛先IPアドレスを被害者、1st送信元IPアドレスを攻撃者に登録する。
【0387】
ステップS496:照合結果テーブルT8から、攻撃5と判定され、攻撃者・被害者の特定が未完了のレコードを読み込む。
【0388】
ステップS497〜S500:上記条件で抽出されたレコード毎にループする。
【0389】
ステップS498:プロトコル番号を判定する。
【0390】
ステップS499:6(TCP)である場合、1st宛先IPアドレスを被害者、1st送信元IPアドレスを攻撃者に登録する。
【0391】
ステップS501:照合結果テーブルT8から、攻撃6と判定され、攻撃者・被害者の特定が未完了のレコードを読み込む。
【0392】
ステップS502〜S505:上記条件で抽出されたレコード毎にループする。
【0393】
ステップS503:プロトコル番号を判定する。
【0394】
ステップS504:17(UDP)である場合、1st宛先IPアドレスを攻撃者、1st送信元IPアドレスを被害者に登録する。
【0395】
ステップS506:照合結果テーブルT8から、攻撃7と判定され、攻撃者・被害者の特定が未完了のレコードを読み込む。
【0396】
ステップS507〜S512:上記条件で抽出されたレコード毎にループする。
【0397】
ステップS508:プロトコル番号を判定する。
【0398】
ステップS509:6(TCP)である場合、1st送信元IPアドレスを攻撃者に登録する。
【0399】
ステップS510:17(UDP)である場合、1st送信元IPアドレスを攻撃者に登録する。
【0400】
ステップS511:1(ICMP)である場合、1st宛先IPアドレスを攻撃者、1st送信元IPアドレスを被害者に登録する。
【0401】
ステップS521:照合結果テーブルT8から、攻撃8と判定され、攻撃者・被害者の特定が未完了のレコードを読み込む。
【0402】
ステップS522〜S525:上記条件で抽出されたレコード毎にループする。
【0403】
ステップS523:プロトコル番号を判定する。
【0404】
ステップS524:6(TCP)である場合、1st宛先IPアドレスを被害者、1st送信元IPアドレスを攻撃者に登録する。
【0405】
ステップS526:照合結果テーブルT8から、SrcIPがブラックリストと判定され、攻撃者・被害者の特定が未完了のレコードを読み込む。
【0406】
ステップS527〜S529:上記条件で抽出されたレコード毎にループする。
【0407】
ステップS528:1st宛先IPアドレスを被害者、1st送信元IPアドレスを攻撃者に登録する。
【0408】
ステップS530:照合結果テーブルT8から、DstIPがブラックリストと判定され、攻撃者・被害者の特定が未完了のレコードを読み込む。
【0409】
ステップS531〜S533:上記条件で抽出されたレコード毎にループする。
【0410】
ステップS532:1st宛先IPアドレスを攻撃者、1st送信元IPアドレスを被害者に登録する。
【0411】
<攻撃者被害者特定部26(攻撃者纏め)の処理フロー>
図55は、攻撃者被害者特定部26(攻撃者纏め)の処理を示すフローチャートである。
【0412】
ステップS541:照合結果テーブルT8から、攻撃者として特定され、攻撃者、被害者纏め処理が未完了のレコードを読み込む。
【0413】
ステップS542〜S571:上記条件で抽出されたレコードを毎にループする。
【0414】
ステップS543〜S570:上記条件、及び攻撃者IPアドレスで集約されたレコード毎にループする。
【0415】
ステップS544:監視時間帯、攻撃者を登録する。
【0416】
ステップS545:攻撃判定結果が攻撃1のレコード数≧1であるか判定する。
【0417】
ステップS546:攻撃1のレコード数≧1である場合、攻撃1の有無を登録する。
【0418】
ステップS547:攻撃判定結果が攻撃2のレコード数≧1であるか判定する。
【0419】
ステップS548:攻撃2のレコード数≧1である場合、攻撃2の有無を登録する。
【0420】
ステップS549:攻撃判定結果が攻撃3のレコード数≧1であるか判定する。
【0421】
ステップS550:攻撃3のレコード数≧1である場合、攻撃3の有無を登録する。
【0422】
ステップS551:攻撃判定結果が攻撃4のレコード数≧1であるか判定する。
【0423】
ステップS552:攻撃4のレコード数≧1である場合、攻撃4の有無を登録する。
【0424】
ステップS553:攻撃判定結果が攻撃5のレコード数≧1であるか判定する。
【0425】
ステップS554:攻撃5のレコード数≧1である場合、攻撃5の有無を登録する。
【0426】
ステップS561:攻撃判定結果が攻撃6のレコード数≧1であるか判定する。
【0427】
ステップS562:攻撃6のレコード数≧1である場合、攻撃6の有無を登録する。
【0428】
ステップS563:攻撃判定結果が攻撃7のレコード数≧1であるか判定する。
【0429】
ステップS564:攻撃7のレコード数≧1である場合、攻撃7の有無を登録する。
【0430】
ステップS565:攻撃判定結果が攻撃8のレコード数≧1であるか判定する。
【0431】
ステップS566:攻撃8のレコード数≧1である場合、攻撃8の有無を登録する。
【0432】
ステップS567:攻撃判定結果のSrcIPがブラックリストに登録、又はDstIPがブラックリストに登録のレコード数≧1であるか判定する。
【0433】
ステップS568:ブラックリストに登録、又はレコード数≧1である場合、攻撃?の有無を登録する。
【0434】
ステップS569:攻撃者被害者特定完了フラグを登録する。
【0435】
<攻撃者被害者特定部26(被害者纏め)の処理フロー>
図56は、攻撃者被害者特定部26(被害者纏め)の処理を示すフローチャートである。
【0436】
ステップS581:照合結果テーブルT8から、被害者として特定され、攻撃者、被害者纏め処理が未完了のレコードを読み込む。
【0437】
ステップS582〜S612:上記条件で抽出されたレコードを毎にループする。
【0438】
ステップS583〜S611:上記条件、及び被害者IPアドレスで集約されたレコード毎にループする。
【0439】
ステップS584:監視時間帯、被害者を登録する。
【0440】
ステップS585:攻撃判定結果が攻撃1のレコード数≧1であるか判定する。
【0441】
ステップS586:攻撃1のレコード数≧1である場合、攻撃1の有無を登録する。
【0442】
ステップS587:攻撃判定結果が攻撃2のレコード数≧1であるか判定する。
【0443】
ステップS588:攻撃2のレコード数≧1である場合、攻撃2の有無を登録する。
【0444】
ステップS589:攻撃判定結果が攻撃3のレコード数≧1であるか判定する。
【0445】
ステップS590:攻撃3のレコード数≧1である場合、攻撃3の有無を登録する。
【0446】
ステップS591:攻撃判定結果が攻撃4のレコード数≧1であるか判定する。
【0447】
ステップS592:攻撃4のレコード数≧1である場合、攻撃4の有無を登録する。
【0448】
ステップS593:攻撃判定結果が攻撃5のレコード数≧1であるか判定する。
【0449】
ステップS594:攻撃5のレコード数≧1である場合、攻撃5の有無を登録する。
【0450】
ステップS601:攻撃判定結果が攻撃6のレコード数≧1であるか判定する。
【0451】
ステップS602:攻撃6のレコード数≧1である場合、攻撃6の有無を登録する。
【0452】
ステップS603:攻撃判定結果が攻撃7のレコード数≧1であるか判定する。
【0453】
ステップS604:攻撃7のレコード数≧1である場合、攻撃7の有無を登録する。
【0454】
ステップS605:攻撃判定結果が攻撃8のレコード数≧1であるか判定する。
【0455】
ステップS606:攻撃8のレコード数≧1である場合、攻撃8の有無を登録する。
【0456】
ステップS607:攻撃判定結果のSrcIPがブラックリストに登録、又はDstIPがブラックリストに登録のレコード数≧1であるか判定する。
【0457】
ステップS608:ブラックリストに登録、又はレコード数≧1である場合、攻撃者テーブルT9の攻撃者に被害者IPアドレスが存在するか判定する。
【0458】
ステップS609:被害者IPアドレスが存在する場合、攻撃?の有無を更新する。
【0459】
ステップS610:攻撃者被害者特定完了フラグを登録する。
【0460】
<データベース構成例>
以下、
図57〜
図71を用いてデータベースの構成例を説明する。
【0461】
攻撃情報テーブルT1は、セキュリティの脅威を識別する情報を纏めたテーブルである。
図58(a)は、攻撃情報テーブルT1のテーブル定義を示し、
図58(b)は、そのサンプル値を示している。
【0462】
国情報テーブルT2は、IPアドレスと国名を紐づけたテーブルである。
図59(a)は、国情報テーブルT2のテーブル定義を示し、
図59(b)は、そのサンプル値を示している。
【0463】
マルウェアドメインリストテーブルT3は、スパムメール配信、フィッシング詐欺、マルウェア・スパイウェア配布を行っているIPアドレスのブラックリストを纏めたテーブルである。
図60(a)は、マルウェアドメインリストテーブルT3のテーブル定義を示し、
図60(b)は、そのサンプル値を示している。
【0464】
PerPacket学習データテーブルT4は、攻撃パケット検知部11でセキュリティの脅威と判定された情報と、分析に必要なL3/L4パケットの情報を纏めたテーブルである。
図61は、PerPacket学習データテーブルT4のテーブル定義を示し、
図62は、そのサンプル値を示している。
【0465】
PerSession学習データテーブルT5は、PerPacket学習データテーブルT4を元に、分析に必要な説明変数をセッション毎に計算し、集約したテーブルである。
図63は、PerSession学習データテーブルT5のテーブル定義を示し、
図64は、そのサンプル値を示している。
【0466】
攻撃判定基準テーブルT6は、攻撃分類毎の特徴(説明変数)と値を纏めたテーブルである。
図65は、攻撃判定基準テーブルT6のテーブル定義を示し、
図66は、そのサンプル値を示している。
【0467】
攻撃判定テーブルT7は、パケットバッファリング部23で取得した情報を元に、分析に必要な説明変数をセッション毎に計算し、集約したテーブルである。
図67は、攻撃判定テーブルT7のテーブル定義を示し、
図68は、そのサンプル値を示している。
【0468】
照合結果テーブルT8は、攻撃パターン照合部25でセキュリティの脅威と判定された結果を格納したテーブルである。
図69(a)は、照合結果テーブルT8のテーブル定義を示し、
図69(b)は、そのサンプル値を示している。
【0469】
攻撃者テーブルT9は、攻撃パターン照合部25で特定された攻撃者情報をレポート形式で出力するための情報を纏めたテーブルである。
図70(a)は、攻撃者テーブルT9のテーブル定義を示し、
図70(b)は、そのサンプル値を示している。
【0470】
被害者テーブルT10は、攻撃パターン照合部25で特定された被害者情報をレポート形式で出力するための情報を纏めたテーブルである。
図71(a)は、被害者テーブルT10のテーブル定義を示し、
図71(b)は、そのサンプル値を示している。
【0471】
<まとめ>
以上説明したように、本発明の実施の形態におけるセキュリティ脅威検出システムは、正常パケット及びセキュリティ攻撃パケットのヘッダ情報に基づいて、セキュリティ攻撃単位にセキュリティ攻撃の通信パターンを学習し、セキュリティ攻撃の特徴を捉える要素の値を生成する攻撃学習処理部10と、ネットワークを流れるパケットと攻撃学習処理部10で生成したセキュリティ攻撃の特徴を捉える要素の値を照合して、セキュリティ脅威を検出する攻撃検知部20とを備える。これにより、通信の秘密に抵触することなく且つペイロード暗号化されていても適切にセキュリティ攻撃を検出することが可能である。
【0472】
具体的には、ネットワークを流れるパケットの送信元IPアドレス及び宛先IPアドレスのロケーション、TCPヘッダシーケンス、パケットの流量のうちの少なくとも1つの特徴からセキュリティ攻撃を検出する。これにより、セキュリティ攻撃を精度よく検出することが可能である。
【0473】
また、ネットワークを流れるパケットのペイロード部分を参照することなくセキュリティ攻撃を検出する。これにより、通信の秘密に抵触することない効果が得られる。
【0474】
また、単一セッションのみならず複数セッションごとでのセキュリティ攻撃を検出する。これにより、従来では検知不可である攻撃への対応も可能とする。
【0475】
また、本発明の実施の形態における攻撃学習処理装置(攻撃学習処理部)10は、パケットキャプチャデータに対してセキュリティ攻撃の検知に必要な情報を抽出しPerPacket学習データテーブルT4に保存し、ヘッダ及びペイロードから攻撃を検出し、セキュリティ攻撃を特定し、PerPacket学習データテーブルT4に保存する攻撃パケット検知部11と、攻撃パケット検知部11でパケット単位に抽出したヘッダの中のSrcIP及びDstIPをキーにして外部情報である国情報とマルウェアドメインリスト情報を検察して該当の国情報及びマルウェアドメイン情報をPerPacket学習データテーブルT4に保存する付加情報生成部12と、PerPacket学習データテーブルT4を、SrcIP、DstIP、Protocol、SrcPort、DstPortをキーにしてセッションごとに情報を集約することで、解析に必要となる要素をセッション単位で生成する説明変数生成部13と、説明変数生成部13で生成した解析に必要となる要素ごとにセキュリティ攻撃を検出するための閾値を算出し、セキュリティ攻撃を検出するための攻撃判定基準テーブルT6を生成する攻撃解析学習部14とを備える。これにより、正常パケット及びセキュリティ攻撃パケットのヘッダ情報に基づいて、セキュリティ攻撃単位にセキュリティ攻撃の通信パターンを学習し、セキュリティ攻撃の特徴を捉える要素の値を生成することが可能である。
【0476】
また、本発明の実施の形態における攻撃検知装置(攻撃検知部)20は、ネットワークを流れるパケットを受信するパケット受信部21と、バッファリングしたパケットをネットワークへ送信するパケット送信部22と、受信したパケットをメモリにバッファリングするパケットバッファリング部23と、バッファリングした受信パケットをヘッダに組み立て、組み立てたヘッダの中のSrcIP及びDstIPをキーにして外部情報である国情報とマルウェアドメインリスト情報を検察して該当の国情報及びマルウェアドメイン情報を生成し、セッション単位にセキュリティ攻撃を判定するために要素の値を検出して攻撃判定テーブルT7に情報を保存するセッション集約部24と、一定周期でセッション集約部24で生成したセッション単位の攻撃判定テーブルT7から、セッションごとにセッション完了を判断し、セッションごとにセキュリティ攻撃の特徴を捉える要素の値を作成し、作成した要素の値と攻撃判定基準テーブルT6に格納された値を照合してセキュリティ脅威のパケットであるか判断する攻撃パターン照合部25とを備える。これにより、ネットワークを流れるパケットと攻撃学習処理部10で生成したセキュリティ攻撃の特徴を捉える要素の値を照合して、セキュリティ脅威を検出することが可能である。
【0477】
さらに、一定周期で攻撃パターン照合部25で検知したセキュリティ攻撃結果をもとに攻撃者及び被害者を特定する攻撃者被害者特定部26を備える。これにより、また、攻撃者及び被害者の特定が可能となる。
【0478】
なお、本発明は、このようなセキュリティ脅威検出システムとして実現することができるだけでなく、このようなセキュリティ脅威検出システムが備える特徴的な機能部をステップとするセキュリティ脅威検出方法として実現したり、それらのステップをコンピュータに実行させるプログラムとして実現したりすることもできる。そして、そのようなプログラムは、CD−ROM等の記録媒体やインターネット等の伝送媒体を介して配信することができるのはいうまでもない。
【課題】通信の秘密に抵触することなく且つペイロード暗号化されていても適切にセキュリティ攻撃を検出することができるセキュリティ脅威検出システム、攻撃学習処理装置、攻撃検知装置、セキュリティ脅威検出方法、及びセキュリティ脅威検出プログラムを提供する。
【解決手段】セキュリティ脅威検出システムは、正常パケット及びセキュリティ攻撃パケットのヘッダ情報に基づいて、セキュリティ攻撃単位にセキュリティ攻撃の通信パターンを学習し、セキュリティ攻撃の特徴を捉える要素の値を生成する攻撃学習処理部10と、ネットワークを流れるパケットと攻撃学習処理部10で生成したセキュリティ攻撃の特徴を捉える要素の値を照合して、セキュリティ脅威を検出する攻撃検知部20とを備える。