カスタムパターン
- Last Updated: April 5, 2026
- 21 minute read
- Flowmon Products
- Flowmon Anomaly Detection System
- Documentation
Flowmon ADSアプリケーションでは、シンプルなカスタム振る舞いパターンを作成できます。これらのパターンは、[設定] → [処理] → [カスタムパターン]で定義できます。これらのパターンは、BPATTERNSメソッドによる処理を有効にできます。パターンは、バイフローレコードからのシンプルなSQLクエリとして定義されます(「バイフローエントリのフィールド」を参照してください)。
バイフローレコードは、ペアになっているフロー(リクエストと返信)によって構成されます。方向ごとに異なるフロー項目は、元の方向に従ってプレフィックス付きでバイフローレコードに保存されます。たとえば、転送されたデータの量はreq_transferredフィールドとrep_transferredフィールドに保存されます。両方の元のフローで同じフロー項目は、リクエストフローに従って1回だけ保存されます。たとえば、バイフローレコードの送信元IPアドレスは、返信では宛先として指定されますが、リクエストフローの送信元IPアドレスに相当します。ペアになっていないフローの場合は、リクエストフローに対応する項目のみがバイフローレコードに入力されます。
カスタムパターンの編集可能なパラメータには、[パターンコード]、[パターンの説明][パターン詳細]、パターン式パラメータがあります。
-
[パターンコード]では、パターン(BPATTERNSメソッドで指定されたパターンをアクティブ化(非アクティブ化)するためのパラメータとして使用されます)を指定します。
-
[パターンの説明]パラメータでは、パターンによって検知されたイベントについて説明します。
-
[パターン詳細]は、イベント詳細の部分文字列として使用されます。
-
パターン式は、where句、having句、イベントソースで表されます。
カスタム振る舞いパターン用に生成されるイベント詳細文字列には以下が含まれます。
-
パターンの短い説明([パターン詳細]パラメータから取得)
-
イベントソースからイベントターゲットへの発信フローの数
-
イベントターゲットからイベントソースへの受信フローの数
-
イベントソースがイベントターゲットに送信したデータの数
-
イベントソースがイベントターゲットから受信したデータの数
-
イベントソースがイベントターゲットに送信したパケットの数
-
イベントソースがイベントターゲットから受信したパケットの数
-
イベントターゲットの数
送信元IPアドレスと宛先IPアドレスを含むバイフローテーブルがあります。[イベントソース]オプションを使用して、イベントのイベントソースとして送信元IPアドレス(デフォルトオプション)または宛先IPアドレスを使用するかどうかを指定できます。宛先IPアドレスをイベントソースとして選択した場合、宛先IPアドレスによってグループ化されたレコードからイベントが検知され、宛先IPアドレスがイベントソースとして使用され、関連するすべてのIPアドレスがイベントターゲットになります。イベントソースに応じて、ターゲットIPと通信していたすべての宛先IPアドレスまたは送信元IPアドレスがイベントターゲットとして表示されます。たとえば、SRVNA検知メソッドでは、宛先IPアドレスによるグループ化を使用し、使用できないターゲット(サービスのIPアドレス)をイベントソースとして、すべての送信元IPアドレス(クライアントの接続試行)をイベントターゲットとしてマークします。
where句とhaving句
パターン自体は、SQL形式で記述されたwhere式とhaving式で定義されます。where式とhaving式で有効なSQLite言語のすべての構成要素がサポートされます。これには下記の演算子と関数が含まれます。文字列を囲むために一重引用符(アポストロフィ)が必要です。これは両方の式に当てはまります。論理式の要素をカッコ内に挿入できます。
where式は、定義済みの条件に基づき、論理演算子と関数を使用してレコードをフィルタリングすることを目的としています。having式では、これらの結果を使用する集計関数を使用できます。つまり、having式とwhere式の違いは、where式がテーブルの行を操作して個々の行をフィルタリングし、その後、havingが集計関数を使用してレコードのグループを操作するオプションを追加する、ということです。以下の集計関数がサポートされます。
-
SUM: 値の合計
-
AVG: 値の平均
-
COUNT: 値の数
-
MAX: 最大値
-
MIN: 最小値
-
VARIANCE: 値の分散
-
STDDEV: 標準偏差
集計関数の一覧とその説明については、SQLiteのマニュアルを参照してください(「集計関数」を参照してください)。where式とhaving式の詳細については、それぞれこちらとこちらを参照してください。
「カスタムパターンの例」を参照してください。
バイフローエントリのフィールド
以下のフィールドをフィルタリングに使用できます。
-
source_ip_address: 内部形式の送信元IPアドレス。「変換機能のための関数」を参照してください。
-
destination_ip_address: 内部形式の宛先IPアドレス。「変換機能のための関数」を参照してください。
-
protocol: プロトコル番号。
-
source_port: 送信元ポート番号。
-
destination_port: 宛先ポート番号。
-
req_duration: リクエストフローのミリ秒単位の時間(整数)。
-
rep_duration: レスポンスフローのミリ秒単位の時間(整数)。
-
req_transferred: リクエストフローの合計送信バイト数(整数)。
-
rep_transferred: レスポンスフローの合計送信バイト数(整数)。
-
req_packets: リクエストフローの合計パケット数(整数)。
-
rep_packets: レスポンスフローの合計パケット数(整数)。
-
req_flags: リクエストフローのTCPフラグ。適切なフィルタリング関数を使用することをお勧めします(「変換機能のための関数」を参照してください)。
-
rep_flags: レスポンスフローのTCPフラグ。
-
src_mac: 10進数の送信元MACアドレス。「変換機能のための関数」を参照してください。
-
dst_mac: 10進数の宛先MACアドレス。「変換機能のための関数」を参照してください。
-
src_as: 送信元の自律システム番号。
-
dst_as: ターゲットの自律システム番号。
-
src_country: 送信元IPアドレスに割り当てられる国番号(「国の一覧」を参照してください)。
-
dst_country: 宛先IPアドレスに割り当てられる国番号。
-
http_host: HTTPホスト名の最後の32文字。DNSクエリの場合は、クエリされたDNS名が含まれる場合があります。
-
http_url: HTTP GETリクエストで取得されたURLの最初の64文字。
-
src_user_id: 送信元IPアドレス(Flowmon OSの設定の場合は、Active Directoryから取得したもの)を使用しているユーザのID。
-
dst_user_id: 宛先IPアドレスを使用しているユーザのID。
-
tcp_ttl: TCP TTL。TCP SYNフラグが設定されている場合にのみ設定されます。
-
tcp_window: TCPウィンドウ。TCP SYNフラグが設定されている場合にのみ設定されます。
-
syn_size: リクエストフローのTCP SYNパケットのサイズ。
-
ua_os: オペレーティングシステムの番号(HTTPユーザエージェントから取得されます。「オペレーティングシステムの一覧」を参照してください)。65535はOSが不明であることを意味します。
-
ua_os_version: オペレーティングシステムのバージョン番号(HTTPユーザエージェントから取得されます)。10進数で、その整数部はメジャーバージョンを、小数部はマイナーバージョンを表します。65535以上の番号はバージョンが不明であることを意味します。
-
paired: バイフローにフローペア全体が含まれているか、単一のペアになっていないフローのみがあるかを示します。数値は0または1です。
-
ja3_fingerprint: クライアントのTLS JA3フィンガープリントの値。これは、16進数字の32文字長のストリングです。
カスタムパターン定義で使用できる変数:
-
#src_filter#: 割り当てられているフィルタ。送信元IPアドレスに適用されます。
-
#dst_filter#: 割り当てられているフィルタ。宛先IPアドレスに適用されます。
-
#neg_src_filter#: 割り当てられているフィルタのネガティブバージョン。送信元IPアドレスに適用されます(IPアドレスは指定されたフィルタの範囲外になければなりません)。
-
#neg_dst_filter#: 割り当てられているフィルタのネガティブバージョン。宛先IPアドレスに適用されます。
-
#empty_filter#: 割り当てられているフィルタが空かどうかを確認するするために使用します。
カスタムパターン定義で使用できる演算子。
-
=: 等価テスト(source_port = 80)
-
<>: 不等テスト(protocol <> 6)
-
>: より大きい(req_transferred > 102400)
-
<: より小さい(req_duration < 10)
-
>=: 以上
-
<=: 以下
-
IN: 指定されたセットに属する(destination_port IN (80, 443))
-
BETWEEN . . .AND: 指定された範囲に属する(req_duration BETWEEN 10 AND 60 (指定された境界を含みます))
-
LIKE: 指定された部分文字列を含む文字列(http_host LIKE '%facebook%' (パーセント記号は任意の文字列を表します))。
-
NOT: 指定された制約の否定(NOT (req_duration < 10 AND source_port = 80))
-
**+: 加算(req_transferred + rep_transferred >= 1048576)
-
**−: 減算(req_duration - rep_duration > 3)
-
****: 乗算(req_transferred * paired > 0)
-
*: 除算(req_transferred / req_packets = 40)
パターンの関数
カスタムパターン定義で使用できる関数:
- matchflags(flags, required, forbidden): TCPフラグと一致させるための関数。flagsはreq_flagsまたはrep_flagsに置き換える必要があります。この関数は、flagsにすべてのrequiredフラグが含まれていてforbiddenフラグが含まれていない場合(および含まれていない場合にのみ) 0を返します。この関数は、0との等価テストとして使用する必要があります。
例:
- matchflags('RUAPSF', 'AP', '-') = 0
- matchflags('..APS.', 'A', 'F') = 0
- matchflags('..APS.', 'A', 'S') <> 0
- matchflags('..APS.', '-', 'R') = 0
-
ip_to_int(readable_ip): IPアドレスを内部形式に変換するための関数。
-
mac_to_int(readable_mac): MACアドレスを内部形式に変換するための関数。
カスタムパターンの例
192.168.1.10で実行されているSSHハニーポットでの通信を検知する例(5つを超えるパケットを含むフローのみが対象):
where式:
#neg_src_filter# AND destination_ip_address = ip_to_int('192.168.1.10') AND destination_port = 22
AND protocol = 6 AND matchflags(req_flags, 'S', '-') = 0 AND req_packets > 5
sambaプロトコル経由で合計1GBを超えるデータを伝送しているステーションを検知する例:
where式:
#src_filter# AND destination_port = 445 AND protocol = 6
having式:
SUM(req_transferred) + SUM(rep_transferred) > 1048576000
ポートスキャン検知の例。この場合、having式によってスキャン試行の最小回数が制限されています。
where式:
#src_filter# AND destination_port < 1024 AND protocol = 6 AND req_flags IN ('....S.', '......', '.....F', 'U.P..F')
having式:
COUNT(*) >= 100
国の一覧
| LAN | ローカルエリアネットワーク | 0 |
|---|---|---|
| AF | アフガニスタン | 4 |
| AX | オーランド諸島 | 248 |
| AL | アルバニア | 8 |
| DZ | アルジェリア | 12 |
| AS | 米国領サモア | 16 |
| AD | アンドラ | 20 |
| AO | アンゴラ | 24 |
| AI | アンギラ | 660 |
| AQ | 南極 | 10 |
| AG | アンティグアバーブーダ | 28 |
| AR | アルゼンチン | 32 |
| AM | アルメニア | 51 |
| AW | アルバ | 533 |
| AU | オーストラリア | 36 |
| AT | オーストリア | 40 |
| AZ | アゼルバイジャン | 31 |
| BS | バハマ | 44 |
| BH | バーレーン | 48 |
| BD | バングラデシュ | 50 |
| BB | バルバドス | 52 |
| BY | ベラルーシ | 112 |
| BE | ベルギー | 56 |
| BZ | ベリーズ | 84 |
| BJ | ベナン | 204 |
| BM | バミューダ | 60 |
| BT | ブータン | 64 |
| BO | ボリビア多民族国 | 68 |
| BQ | ボネール、シントユースタティウスおよびサバ | 535 |
| BA | ボスニアヘルツェゴビナ | 70 |
| BW | ボツワナ | 72 |
| BV | ブーヴェ島 | 74 |
| BR | ブラジル | 76 |
| IO | イギリス領インド洋地域 | 86 |
| BN | ブルネイダルサラーム | 96 |
| BG | ブルガリア | 100 |
| BF | ブルキナファソ | 854 |
| BI | ブルンジ | 108 |
| KH | カンボジア | 116 |
| CM | カメルーン | 120 |
| CA | カナダ | 124 |
| CV | カーボベルデ | 132 |
| KY | ケイマン諸島 | 136 |
| CF | 中央アフリカ共和国 | 140 |
| TD | チャド | 148 |
| CL | チリ | 152 |
| CN | 中国 | 156 |
| CX | クリスマス島 | 162 |
| CC | ココス(キーリング)諸島 | 166 |
| CO | コロンビア | 170 |
| KM | コモロ | 174 |
| CG | コンゴ | 178 |
| CD | コンゴ民主共和国 | 180 |
| CK | クック諸島 | 184 |
| CR | コスタリカ | 188 |
| CI | コートジボワール | 384 |
| HR | クロアチア | 191 |
| CU | キューバ | 192 |
| CW | キュラソー島 | 531 |
| CY | キプロス | 196 |
| CZ | チェコ共和国 | 203 |
| DK | デンマーク | 208 |
| DJ | ジブチ | 262 |
| DM | ドミニカ | 212 |
| DO | ドミニカ共和国 | 214 |
| EC | エクアドル | 218 |
| EG | エジプト | 818 |
| SV | エルサルバドル | 222 |
| GQ | 赤道ギニア | 226 |
| ER | エリトリア | 232 |
| EE | エストニア | 233 |
| ET | エチオピア | 231 |
| FK | フォークランド諸島(マルビナス諸島) | 238 |
| FO | フェロー諸島 | 234 |
| FJ | フィジー | 242 |
| FI | フィンランド | 246 |
| FR | フランス | 250 |
| GF | フランス領ギアナ | 254 |
| PF | フランス領ポリネシア | 258 |
| TF | フランス領南方・南極地域 | 260 |
| GA | ガボン | 266 |
| GM | ガンビア | 270 |
| GE | ジョージア | 268 |
| DE | ドイツ | 276 |
| GH | ガーナ | 288 |
| GI | ジブラルタル | 292 |
| GR | ギリシャ | 300 |
| GL | グリーンランド | 304 |
| GD | グレナダ | 308 |
| GP | グアドループ島 | 312 |
| GU | グアム島 | 316 |
| GT | グアテマラ | 320 |
| GG | ガーンジー島 | 831 |
| GN | ギニア | 324 |
| GW | ギニアビサウ | 624 |
| GY | ガイアナ | 328 |
| HT | ハイチ | 332 |
| HM | ハード島およびマクドナルド諸島 | 334 |
| VA | 教皇庁(バチカン市国) | 336 |
| HN | ホンジュラス | 340 |
| HK | 香港 | 344 |
| HU | ハンガリー | 348 |
| IN | インド | 356 |
| ID | インドネシア | 360 |
| IR | イランイスラム共和国 | 364 |
| IQ | イラク | 368 |
| IE | アイルランド | 372 |
| IM | マン島 | 833 |
| IL | イスラエル | 376 |
| IT | イタリア | 380 |
| JM | ジャマイカ | 388 |
| JP | 日本 | 392 |
| JE | ジャージー島 | 832 |
| JO | ヨルダン | 400 |
| KZ | カザフスタン | 398 |
| KE | ケニア | 404 |
| KI | キリバス | 296 |
| KP | 朝鮮民主主義人民共和国 | 408 |
| KR | 大韓民国 | 410 |
| KW | クウェート | 414 |
| KG | キルギスタン | 417 |
| LA | ラオス人民民主共和国 | 418 |
| LV | ラトビア | 428 |
| LB | レバノン | 422 |
| LS | レソト | 426 |
| LR | リベリア | 430 |
| LY | リビア | 434 |
| LI | リヒテンシュタイン | 438 |
| LT | リトアニア | 440 |
| LU | ルクセンブルグ | 442 |
| MO | マカオ | 446 |
| MK | 北マケドニア共和国 | 807 |
| MG | マダガスカル | 450 |
| MW | マラウイ | 454 |
| MY | マレーシア | 458 |
| MV | モルディブ | 462 |
| ML | マリ | 466 |
| MT | マルタ | 470 |
| MH | マーシャル諸島 | 584 |
| MQ | マルティニーク島 | 474 |
| MR | モーリタニア | 478 |
| MU | モーリシャス | 480 |
| YT | マヨット島 | 175 |
| MX | メキシコ | 484 |
| FM | ミクロネシア連邦 | 583 |
| MD | モルドバ共和国 | 498 |
| MC | モナコ | 492 |
| MN | モンゴル | 496 |
| ME | モンテネグロ | 499 |
| MS | モントセラト島 | 500 |
| MA | モロッコ | 504 |
| MZ | モザンビーク | 508 |
| MM | ミャンマー | 104 |
| NA | ナミビア | 516 |
| NR | ナウル | 520 |
| NP | ネパール | 524 |
| NL | オランダ | 528 |
| NC | ニューカレドニア | 540 |
| NZ | ニュージーランド | 554 |
| NI | ニカラグア | 558 |
| NE | ニジェール | 562 |
| NG | ナイジェリア | 566 |
| NU | ニウエ | 570 |
| NF | ノーフォーク島 | 574 |
| MP | 北マリアナ諸島 | 580 |
| NO | ノルウェー | 578 |
| OM | オマーン | 512 |
| PK | パキスタン | 586 |
| PW | パラオ | 585 |
| PS | パレスチナ国 | 275 |
| PA | パナマ | 591 |
| PG | パプアニューギニア | 598 |
| PY | パラグアイ | 600 |
| PE | ペルー | 604 |
| PH | フィリピン | 608 |
| PN | ピトケアン島 | 612 |
| PL | ポーランド | 616 |
| PT | ポルトガル | 620 |
| PR | プエルトリコ | 630 |
| QA | カタール | 634 |
| RE | レユニオン | 638 |
| RO | ルーマニア | 642 |
| RU | ロシア連邦 | 643 |
| RW | ルワンダ | 646 |
| BL | サンバルテルミー島 | 652 |
| SH | セントヘレナ・アセンションおよびトリスタンダクーニャ | 654 |
| KN | セントクリストファーネービス | 659 |
| LC | セントルシア | 662 |
| MF | サンマルタン(フランス領) | 663 |
| PM | サンピエール島およびミクロン島 | 666 |
| VC | セントビンセントおよびグレナディーン諸島 | 670 |
| WS | サモア | 882 |
| SM | サンマリノ | 674 |
| ST | サントメプリンシペ | 678 |
| SA | サウジアラビア | 682 |
| SN | セネガル | 686 |
| RS | セルビア | 688 |
| SC | セーシェル | 690 |
| SL | シエラレオネ | 694 |
| SG | シンガポール | 702 |
| SX | シントマールテン(オランダ領) | 534 |
| SK | スロバキア | 703 |
| SI | スロベニア | 705 |
| SB | ソロモン諸島 | 90 |
| SO | ソマリア | 706 |
| ZA | 南アフリカ | 710 |
| GS | サウスジョージアおよびサウスサンドウィッチ諸島 | 239 |
| SS | 南スーダン | 728 |
| ES | スペイン | 724 |
| LK | スリランカ | 144 |
| SD | スーダン | 729 |
| SR | スリナム | 740 |
| SJ | スヴァールバル諸島およびヤンマイエン島 | 744 |
| SZ | スワジランド | 748 |
| SE | スウェーデン | 752 |
| CH | スイス | 756 |
| SY | シリアアラブ共和国 | 760 |
| TW | 中国台湾省 | 158 |
| TJ | タジキスタン | 762 |
| TZ | タンザニア連合共和国 | 834 |
| TH | タイ | 764 |
| TL | 東ティモール | 626 |
| TG | トーゴ | 768 |
| TK | トケラウ | 772 |
| TO | トンガ | 776 |
| TT | トリニダードトバゴ | 780 |
| TN | チュニジア | 788 |
| TR | トルコ | 792 |
| TM | トルクメニスタン | 795 |
| TC | タークスカイコス諸島 | 796 |
| TV | ツバル | 798 |
| UG | ウガンダ | 800 |
| UA | ウクライナ | 804 |
| AE | アラブ首長国連邦 | 784 |
| GB | イギリス | 826 |
| US | アメリカ合衆国 | 840 |
| UM | 合衆国領有小離島 | 581 |
| UY | ウルグアイ | 858 |
| UZ | ウズベキスタン | 860 |
| VU | バヌアツ | 548 |
| VE | ベネズエラボリバル共和国 | 862 |
| VN | ベトナム | 704 |
| VG | 英領バージン諸島 | 92 |
| VI | 米領バージン諸島 | 850 |
| WF | ウォリスフトゥーナ | 876 |
| EH | 西サハラ | 732 |
| YE | イエメン | 887 |
| ZM | ザンビア | 894 |
| ZW | ジンバブエ | 716 |
オペレーティングシステムの一覧
| ID | OS名 | ID | OS名 | ID | OS名 | ||
|---|---|---|---|---|---|---|---|
| 1 | AIX | 26 | Arch Linux | 51 | Nintendo Wii U | ||
| 2 | Amiga OS | 27 | CentOS | 52 | OpenBSD | ||
| 3 | Android | 28 | Debian | 53 | OpenVMS | ||
| 4 | iOS | 29 | Fedora | 54 | OS/2 | ||
| 5 | Mac OS | 30 | Gentoo | 55 | OS/2 Warp | ||
| 6 | Mac OS X | 31 | Knoppix | 56 | Palm OS | ||
| 7 | AROS | 32 | Kanotix | 57 | OPClinuxOS | ||
| 8 | Bada | 33 | Lindspire | 58 | QNX | ||
| 9 | BeOS | 34 | Mageia | 59 | RISC OS | ||
| 10 | BlackBerry | 35 | Mandriva | 60 | Sailfish | ||
| 11 | BlackBerry Tablet | 36 | Mint | 61 | SkyOS | ||
| 12 | Brew | 37 | Red Hat | 62 | Solaris | ||
| 13 | Chrome OS | 38 | Slackware | 63 | Syllable | ||
| 14 | Danger Hiptop | 39 | SUSE | 64 | Symbian | ||
| 15 | Darwin | 40 | Ubuntu | 65 | Tizen | ||
| 16 | DragonFly BSD | 41 | VectorLinux | 66 | Ubuntu Touch | ||
| 17 | Firefox OS | 42 | LiveArea | 67 | webOS | ||
| 18 | FreeBSD | 43 | MeeGo | 68 | Windows | ||
| 19 | GNU OS | 44 | MINIX | 69 | Windows 3.x | ||
| 20 | Haiku OS | 45 | MorphOS | 70 | Windows CE | ||
| 21 | HP-UX | 46 | MSN TV (WebTV) | 71 | Windows Phone | ||
| 22 | Inferno | 47 | NetBSD | 72 | Windows Xbox | ||
| 23 | IRIX | 48 | Nintento 3DS | 73 | XrossMediaBar | ||
| 24 | Joli OS | 49 | Nintento DS | ||||
| 25 | Linux | 50 | Nintendo Wii |