NetWitness のコア データベースでは、ルール ツリーが、ルールを持つすべてのコア サービスのルールの管理に関連する主な機能を保持します。Concentrator、Decoder、Log Decoder、Archiver NetWitness Platformユーザ インタフェースでルールを管理することができますが、上級ユーザはコマンド ラインを使用してサービスに対してルールを追加、マージ、交換、削除、確認する方を選択する場合があります。このセクションでは、コマンドとその使用方法の概要について説明します。以下は、使用可能なコマンドです。
- add - 指定した位置に1つのルールを追加します。
- clear - サービスの現在のノード内のすべての既存のルールを削除します。たとえば、/decoder/config/rules/applicationノードでこのコマンドを使用すると、Decoder上のすべての既存のアプリケーションが削除されます。
- delete - 指定した位置と数の1つまたは複数のルールを削除します。
- merge - 既存のルール セットを持つプッシュされたルール セットをマージします。受信したルール(名前またはルール)に一致する既存のルールが置き換えられます。そうしない場合、「mergeコマンド」の説明に従って指定した位置でルールが挿入されます。
- replace - すべての既存のルールを削除し、受信したルール セットに置き換えます。
- validate - ルールの構文は確認されますが、メタ キーは確認されません。
addコマンド
addコマンドは、既存のルール セットにルールを追加します。APIは、ルール言語内、およびすべてのRSA NetWitness® Platform APIにもパラメータとしてダブル クォートを使用しているため、書式の設定は重要です。そのため、バックスラッシュ(\)文字を前に置いて、そのルール自体の中のダブル クォートをエスケープする必要があります。コマンドの構文は次のとおりです。
add rule=<string> name=<string> alert=<string, optional> atPos=<<uint32, optional>
- ruleは追加するルールです。空白文字を含むルールをダブル クォートで囲み、ルールの一部であるダブル クォートをバックスラッシュでエスケープしていることを確認します。
- nameはルールの名前です。
- alertはルールのアラートです(存在する場合)。
- atPosはルールが追加される位置です(1ベース)。ゼロはリストの最上位であり、リストの現在のサイズより大きい任意の数値がリストに追加されます。
これは、NwConsoleを使用してルールを追加するコマンドの例です。
send /decoder/config/rules/application add rule="ip.src exists" order=1 alert=alert.id name=testrule
たとえば、以下のルールについて考えます。
alias.host = "myPC" && country.src="china","russian federation"
これをルールとして追加するには、次のようにパラメータを送信する必要があります。
rule="alias.host = \"myPC\" && country.src=\"china\",\"russian federation\"" name=myRule filter
ルール パラメータ内のすべてのダブル クォートをどのようにエスケープする必要があるかに注意します。さらに読みやすくするシンプルな方法では、ルール内でシングル クォートを使用します。ルールとクエリ言語では、シングル クォートとダブル クォートを交換可能ですが、APIのパラメータでは交換できません(ここではダブル クォートのみがサポートされます)。そのため、以下はさらに読みやすくなります。
rule="alias.host = 'myPC' && country.src='china','russian federation'" name=myRule filter
mergeコマンド
mergeコマンドを使用して、受信したルールのリストをサービス上の既存のルールとマージします。次のように動作します。
- 名前または照合ルールで一致する既存のルールを検索し、既存のルール名を更新して、同じ位置に保持します。
- 数値の位置に基づいてルール リストに新しいルールを挿入します。数値がゼロの場合は、リストの最上部に挿入されます。
- ルールは受信順に処理されるので、番号がゼロのルールが2つある場合、2番目のルールは最初のルールの後に処理され、最上位の位置を要求します。すべての既存のルールは、2つ下の位置に移動します。任意の数値が既存のルールの位置より上である場合、最後の既存のルールの後に追加され、順番にシーケンス番号が付けられます。
- 数値のないルールは、最後の既存のルールの後に追加され、順番にシーケンス番号が付けられます。
mergeコマンドの構文は次のとおりです。
merge --file-data=<string> --file-format<string>
- file-dataはマージするルール ファイルのフル パスと名前です。
- file-formatはルール ファイルの書式です。有効な値は、params-list、string, params、binary、params-binaryです。
ルールのリストをサービスに送信する方法
ルールのリストを送信するには2つの方法があります。.nwr(NetWitnessルール)ファイルとして、またはパラメータの番号付きセットとして送信することができます。各番号は、エンコードされたルールのほかに、ルールを挿入する位置を示します。サービスの現在のルールのリストを表示する場合、lsコマンドをルールのカテゴリで実行する必要があります(たとえば、Decoder上で実行するアプリケーション ルールは/decoder/config/rules/applicationにあります)。
これは、NwConsoleを使用して既存のルールのリストを表示するコマンドの例です。
login <hostname>:50004 <username> <password>
cd /decoder/config/rules/application
ls
これは、NwConsoleで既存のルールのリストを表示する別のコマンドの例です。
send /decoder/config/rules/application ls
これは、基本的なadmin HTMLアプリケーションをサポートする、RESTfulポートのネットワーク ルールをポイントするコマンドの例です。
http[s]://<decoder>:50104/decoder/config/rules/network
NetWitnessルール ファイルの送信
まず例nwrファイルから開始します。各ルールは、別々の行にある必要があります。
rule="ip.src=192.168.0.1" name=first keep
rule="ip.src=192.168.1.1" name=second alert=risk.info
rule="ip.src=192.168.2.1" name=third filter
NwConsoleを使用してルールをプッシュおよびマージするには、次のコマンドを使用します。
login <hostname>:50004 <username> <password>
send /decoder/config/rules/application merge --file-data=/root/App_Rules.nwr --file-format=params-list
mergeコマンドを使用して既存のルールをファイル内のルールで置き換えるには、replaceコマンドを使用します。
send /decoder/config/rules/application replace --file-data=<pathname> --file-format=params-list
RESTfulポートを使用したnwrファイル内のルールのマージには、ルールをプッシュするcurlコマンドを使用できます。
curl -u "<username>:<password>" -H "Content-Type: application/octet-stream" --data-binary @<pathname> -X POST "http://<hostname>:50104/decoder/config/rules/application?msg=merge"
この例では、アプリケーション ルールをプッシュしています。ネットワーク ルールをプッシュするには、ルールを/decoder/config/rules/networkに送信します。相関ルールの場合は、ルールを/decoder/config/rules/correlationに送信します。
番号付きパラメータの送信
その他、ルールのリストを送信するには、番号付きパラメータとして送信する方法があります。この方法での問題は、各番号付きルール内でクォートを忘れずにエスケープすることです。ただし、これが問題となるのは、これを手動で行おうとしている場合のみです。たとえば、NwConsoleで上記と同じルールをパラメータとして送信するには、次のコマンドを使用します。
send /decoder/config/rules/application merge 1="rule=\"ip.src=192.168.0.1\" name=first keep" 2="rule=\"ip.src=192.168.1.1\" name=second alert=risk.info" 3="rule=\"ip.src=192.168.2.1\" name=third filter"
内側のクォートをバック スラッシュ(\)でエスケープする必要があるため、このコマンドは読みにくくなります。それ以外の場合は、これら2つのコマンドは同じことを実現します。3つのルールを位置1、2、3にマージまたは追加します。上記が読み取りにくいと考える場合、同様のcurl コマンドでは次のようになります。
curl -u "<username>:<password>" "http://<hostname>:50104/decoder/config/rules/application?msg=merge&1=rule%3D%22ip.src%3D192.168.0.1%22%20name%3Dfirst%20keep&2=rule%3D%22ip.src%3D192.168.1.1%22%20name%3Dsecond%20alert%3Drisk.info&3=rule%3D%22ip.src%3D192.168.2.1%22%20name%3Dthird%20filter"
パラメータ内のダブル クォートをエスケープする方法の詳細については、「addコマンド」を参照してください。
プッシュ時のオーダー ルール
プッシュされたルールの順序は、次の2つの方法のいずれかで決定されます。パラメータとして渡す場合、各パラメータの番号により挿入順が決定します。これが実際には番号ではない場合、mergeはルール自体のorderパラメータを確認し、それがあった場合はその値を使用します。
注:.nwrファイルを使用して順序を設定する唯一の方法は、orderを使用することです。番号もorder パラメータも見つからない場合、挿入順は保証されません。
例
Decoderに次のアプリケーション ルールが導入されている場合は、常に1から始まる連続した数値が設定されます。
0001 : rule="ip.src = 192.168.0.1 || ip.dst = 192.168.0.1 || alias.host = 'My-PC'" name=first keep
0002 : rule="ip.src=192.168.1.1" name=second alert=risk.info
0003 : rule="ip.src=192.168.2.1" name=third filter
次の4個のルールをマージするとします。
rule="ip.src=192.168.3.1" name=third keep
rule="ip.dst=192.168.4.1" name=NewRule filter order=0
rule="alias.host = 'pc1','pc2'" name=filterTheseNames filter order=append
rule="service=80,443" name=web filter order=3
任意のメソッドを使用してルールをプッシュすると、最終的には次のようになります。
0001 : rule="ip.dst=192.168.4.1" name=NewRule filter order=1
0002 : rule="ip.src = 192.168.0.1 || ip.dst = 192.168.0.1 || alias.host = 'My-PC'" name=first keep order=2
0003 : rule="service=80,443" name=web filter order=3
0004 : rule="ip.src=192.168.1.1" name=second alert=risk.info order=4
0005 : rule="ip.src=192.168.3.1" name=third keep order=5
0006 : rule="alias.host = 'pc1','pc2'" name=filterTheseNames filter order=6
これは予想外ですか? このように各ルールは処理されました。
1. rule="ip.src=192.168.3.1" name=third keep
このルールの名前は、Decoderでは既存のルールと同じ名前でした(3番目)。そのため、ルールにより既存のルールchanging _filter_ to _keep_が更新されました。
2. rule="ip.dst=192.168.4.1" name=NewRule filter order=0
このルールは新しく、それにはorder=0が設定されていました。つまり、最上部に挿入されます。
3. rule="alias.host = 'pc1','pc2'" name=filterTheseNames filter order=append
このルールにはorderに対して番号以外のappendが設定されていました。したがって、リストの最後に挿入されます。同じことを実現するには、非常に大きな番号(999999など)を指定します。
4. rule="service=80,443" name=web filter order=3
このルールは最後ですがorder=3が設定されています。したがって、既存のルールとは名前またはルール自体のテキストで一致せず、そのため、3番目の位置に配置されます。そしてリストには第3のルールがあります。後続のルールは、4番目以降に挿入されます。
replaceコマンド
replace コマンドは、すべての既存のルールを削除し、受信したルールのリストに置き換えます。受信したルールの書式設定および順序設定の方法の詳細については、「mergeコマンド」を参照してください。
これは、Netwitnessルール ファイルを使用するreplace コマンドの例です。
send /decoder/config/rules/application replace --file-data=/root/Decoder-AppRules.nwr --file-format=string
これは、番号付きパラメータを使用するreplace コマンドの例です。
send /decoder/config/rules/application replace 1="rule=\"ip.src exists\" name=\"test rule\" order=1 alert=alert.id"
clearコマンド
clear コマンドは、サービス上のすべての既存のルールを削除します。これは、このコマンドの例です。
send /decoder/config/rules/application clear
deleteコマンド
delete コマンドは、サービスの1つまたは複数のルールを削除します。
delete atPos <uint32> count <uint32, optional>
- atPosは、指定された位置にあるルールを削除します。ルールには1から始まる番号がシーケンシャルシーケンシャルな順序で付けられます。
- count は、 atPosからの1つまたは複数のルールを削除します。これは、atPosから削除するルールの数を定義するオプションのパラメータです。デフォルト値は1です。
このコマンドの例では、0003の位置から始まる4個のルールを削除します。
send /decoder/config/rules/application delete atPos=0003 count=4
validateコマンド
validate コマンドは、提供されたルールを使用し、正しく解析されていることを確認します。このコマンドは、言語キーとエンティティが有効かどうかを確認できないことに留意してください。
validate rule <string>
rule - 確認対象のルールの名前です。スペースを含むルールをダブル クォートで囲んでいることを確認してください。