第 6 章 ネットワークセキュリティ監視システム : ROOK の設計と実装 78
6.3 実装
6.3.3 検知エンジンの動作
ベント(e3.1,e3.2)となっており,詳細を表6.5に示す.図中ではphase1とphase2という2つ の変数を宣言し(3行目〜4行目)監視しているホストがどの状態にあるかを管理する.図中 では,e1.1,e1.2,e1.3ではphase1に(7行目,10行目,13行目),e2.1,e2.2ではphase2に(18 行目,22行目)それぞれ“true”を代入し,次の状態を検査する条件式において各変数を検査 することで,ホストの状態遷移を把握できる.この状態数や各状態におけるイベント数は任 意に設定できるため,マルウェアの活動に関するイベントの種類が増えても対応できる.
一方,図6.10ではミクロな相関関係に関するルールを2種類示している. 1行目から17 行目はIRC中に出現したURLを変数に代入し,当該URLからのWindows実行可能形式ファ イルダウンロードを検知するルールである.宣言した変数url(3行目)はデータ列を保存す るための変数であり,正規表現に一致したURLのファイルパスの部分を代入している(7行 目).この変数はURLが送信されたホストに関連付けされて保持されており,当該ホストが HTTPのGETリクエストを送信した際に,保持しているURLのファイルパスの部分と変数 urlが一致するかを検査し(10行目),一致した場合はセッションの変数matchRequestに
“true”を代入して,状態遷移を監視する.その後,同一セッションでWindows実行可能形式
のファイルがダウンロードされた場合,一連の動作がマルウェアによるものだと判断するこ とができる.さらに図中の19行目から30行目は,特定のパケットが連続して送信して他の 感染ホストを探すマルウェアを検知するルールを示している.21行目で宣言されている変数
countは整数を表しており,TCPセッションの確立後に送信される最初のパケットのセグメ
ントサイズが4バイトだった場合に,変数countをインクリメントする.これが一定時間内 に10回繰り返された場合,アラートを発行する(27行目から28行目).
本説で示した例は,説明を簡素化するためにマクロな相関関係とミクロな相関関係を別個 のルールとして記述したが,実際のルールではこの2つを組み合わせて使用する.例えば,図 6.10でしめした2つのルールを図6.9におけるイベントとして扱うことができる.このように 2つの相関関係を組み合わせることによって,より高精度なマルウェアの検出が実現できる.
Algorithm 1:検知エンジンの処理
Input: Decoding result (R), Set of Related Variables (Va=Vsrc+Vdst+Vsession) Output: Set of detected triggers (Td)
begin
1 Tm←−doMultiplexFilter(R)
2 Tv←− ∅
forv∈Vado
Tv←−Tv∪getRelatedTrigger(v)
3 Tc←−Tm∪Tv∪Tother Tdetected←− ∅
4 whileTc,∅do Vchanged←− ∅
5 fort∈Tcdo
6 ifmatch(t, R, V)then
7 Vtmp=getChangeVariable(t) Vchanged←−Vchanged∪Vtmp
8 writeVariable(Vtmp)
9 Tdetected←−Tdetected+t
Vchanged←−Vchanged∪Vtmp
Tc←− ∅
10 forv∈Vchanged do
Tv←−getRelatedTrigger(v) Tc←−Tc∪Tv
節で述べた通り,triggerセクションの独立性を保つために変数の参照と変更は一貫しておこ なうが,警告の発行などは別途実行するためである.
• 検査すべきTriggerインスタンスの絞り込み:まず,一括検索の関数を用いてTriggerイ ンスタンスの集合Tmを取得する(手順1).この処理はルール数や変数の数に依存せず,
時間計算量は定数となる.その後,検査中ネットワークトラフィックに関係するホスト,
セッションが保持している変数の集合Vaに含まれる変数vをキーとして,検査すべき Triggerインスタンスを抽出し,Tvに加える(手順2).そして,一括検索されるTrigger インスタンスや変数をキーとして抽出されるTriggerインスタンス以外のTriggerイン
スタンスTotherと,Tm,Tvを合成する(手順3).以上の手順により,検査すべきTrigger
インスタンスの集合Tcが生成される.
• Triggerインスタンスの検査:Tcに含まれるTriggerインスタンスtと,ネットワークト ラフィック解析結果Rおよび変数Vとを比較し,順次検査する(手順5,6).条件に合致 していれば,変更するべき変数の集合をVtmpに格納し,Vchangedに加える(手順7).そ して,変数の書き換えを実行する(手順8).また,検知したTriggerインスタンスの集
1 trigger (tcp. dst_port (80) ) {
2 set (src.a, true, 600)
3 }
4
5 trigger (src.a ==true&&src.b ==true)
6 alert (‘‘ALERT1’’) ;
7 }
8
9 trigger (tcp. dst_port (80) &&src.b ==true) {
10 alert (‘‘ALERT2’’) ;
11 }
図6.11:変数の変更に伴なうルールの例
合Tdetectedにtを加える(手順9).
• 変更された変数から影響のあるTriggerインスタンスの抽出:Tcをすべて検査し終わっ た段階で,Vchangedに変更された変数が含まれていた場合,ふたたび当該変数を条件に 含むTriggerインスタンスを抽出しTc0を生成する(手順10).Tc0が空になるまでこれを 繰り返す.
これらの処理から,検知エンジンの計算時間を求める.まず,手順1の一括検索は検索の 処理がルール数や変数の数に依存しない.したがって処理時間を定数項a1とおく.手順2は Vaに含まれる要素の数によってgetRelatedTrigger関数の処理回数が決まる.getRelatedTrigger 関数の処理時間は一定であるため|Va|とおく.手順3も処理時間は一定であり,a2とおく.
手順4からの繰り返しはTcが空になるまでなので,手順5以降に含めて議論する.手順5 のすべての繰り返しは∑|Tc|回である.ただし,一致したTriggerインスタンスの数によっ て処理が変わるため,便宜上一致したTriggerインスタンスの集合を|Ttrue|,一致しなかった
Triggerインスタンスの集合をTf alseとおく.繰り返し中の手順6の比較にかかる処理時間を
各Triggerインスタンスに含まれるConditionインスタンスの数になる.また,Conditionイ ンスタンスでは必要に応じて変数を参照する必要があるため,Tcに含まれ変数を参照するす べてのRuleEntityインスタンスをnrvとおき,参照しないすべてのRuleEntityインスタンス をnrcとおくとnrc+nrvとなる.比較に合致した場合,手順7から手順8は変更する変数の数
|Vtmp|となる.また変数の書き込みは変数のテーブル(VarBoxインスタンス)を操作する必要 がある.変数はこれはパトリシア木によって構成されているが,検索キーは固定長なので定 数として扱う.さらに,手順10の繰り返し回数は|Vchanged|となり,Vchangedから得られた影 響をうけるTriggerインスタンスの集合をTa f f ectedとおく.これらの指定により,計算時間は 式6.1,6.2から求められる.
a1+|Va|+a2+f(Tc) (6.1) f(Tc)=nrc+nrv+|Vchanged|+|Vchanged|+f(Ta f f ected) (6.2) この式に対して2つ仮定をおく.本手法ではVchangedによって繰り返しが継続するルール は想定しない.整合性をとるためVchangedが空になるまで検査を繰り返す手順となっており,
ルールの記述によっては無限に繰り返しが発生するが,そのようなルール記述は意味がない.
図6.11に例を示す.1行目のTriggerインスタンスの条件が満たされた場合,変数aは変更さ れ,5行目からのTriggerインスタンスが検査のキューに入る.しかし,このようなルールは 9行目からのコードのように書いた方が効率的であるのは自明である.したがって,無為に
Algorithm 1における手順4からの繰り返しによる処理負荷の増加は無視する.
この2つの仮定に基づいて式を整理する.定数項を除外し,繰り返しを∑関数で表記して Nrc=∑
nrc,Nrv=∑
nrv,Nvc=∑|Vchanged|とおき,Nv=|Va|とし,便宜上,計算量の形式で
表すと式6.3となる.
O(Na)+O(Nrc)+O(Nrv)+O(Nvc) (6.3) この式から,本システムの検知処理には検査対象のホスト,セッションに含まれる変数の 保持数(|Va|),定数とネットワークトラフィックを比較する条件の総数Nrc,変数の読み込み 数Nrv,変数の書き込み数Nvcに依存すると言い換えることができる.Nrcの増加は本システ ムのみならず,一般的なIDSでも同様の課題がある.よって,本システム特有の処理の負荷 に影響するのは|Va|,Nrc,Nvcの3つとなる.これらが個別に増加した場合,いずれも処理 負荷の増加は線形となり,急速に処理負荷が増加することはない.