Skip to content
KitploitKITPLOIT
ツールブログ
提出
ツールブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

··フィード·お問い合わせ·プライバシー·© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
sniffles — Sniffles: IDSと正規表現評価のためのパケットキャプチャジェネレーター | Kitploit
ツール/GitHubGitHub/petabi/sniffles
パケットスニッフィングと分析IDS/IPS回避ファジングネットワークセキュリティペネトレーションテスト侵入検知
GitHubpetabi/sniffles

sniffles

Sniffles: IDSと正規表現評価のためのパケットキャプチャジェネレーター

リポジトリを見る
65257年前Kitploit レビュー済み

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有

Sniffles--IDSと正規表現評価のためのパケットキャプチャジェネレーター

Snifflesは、不正行動検出のために固定パターンや正規表現を使用するIDSをテストするためのパケットキャプチャを作成するツールです。Snifflesは非常にシンプルに動作します。正規表現またはルールのセットを受け取り、ランダムに1つの正規表現またはルールを選択します。次に、そのルールまたは正規表現に基づいてコンテンツを生成します。固定文字列の場合、これはデータに直接文字列を追加することを意味します(Snortルールに従ってオフセットやその他のオプションを使用する可能性があります)。正規表現の場合、プロセスはより複雑です。正規表現はNFAに変換され、NFAを通るランダムな経路(開始から終了まで)が選択されます。結果のデータは正規表現に一致します。最後に、Snifflesは完全一致または部分一致に設定できます。完全一致の場合、パケットデータは少なくとも1つのルールまたは正規表現に絶対に一致します(ただし、一部のSnortオプションは完全には考慮されません)。部分一致の場合、一致する文字シーケンスから最後の文字を消去し、一致すべきでないシーケンスにします(ただし、別のルールに一致する可能性があります)。一致するルールはIDSに最大の負荷をかけるはずです。したがって、IDSが最悪のトラフィックをどの程度処理できるかを判断することが可能です。部分一致のトラフィックは、一致するトラフィックとほぼ同じ負荷をかけます。最後に、Snifflesは完全にランダムなデータを持つトラフィックも生成できます。そのようなランダムデータは、ランダムデータがルールに一致する可能性が非常に低いため、最良のシナリオを提供します。したがって、最大速度で処理できます。このように、SnifflesはIDSのディープパケットインスペクションの最良および最悪の動作に対するパケットキャプチャの作成を可能にします。

上記に加えて、Snifflesには評価用パケットキャプチャを作成する機能もあります。評価用パケットキャプチャには2つのタイプがあります。最初の評価用パケットキャプチャは、各ルールまたは正規表現に対して1つのパケットを順に作成します。したがって、各ルールが期待どおりに一致することをテストして確認することができます。完全評価はさらに一歩進んで、正規表現内のすべての可能な分岐に対してパケットを作成します。単一の正規表現には数千の可能な分岐がある可能性があります。これにより、正規表現のすべての可能な分岐が適切に処理されることをテストします。評価用パケットキャプチャはすべてのパケットに一致する必要があります。一致しないパケットは、ほとんどの場合IDSの障害を表し、さらなる調査が必要です。もちろん、Snifflesが特定のIDSに対して正しいパケットを作成していないか、ルールの特定のオプションを認識していない可能性も常にあります。サポートされているルール機能の詳細については、そちらを確認してください。

最後に、Snifflesはランダムなネットワークトラフィックを生成するために多くのことができます。デフォルトでは、ランダムトラフィックはTCP、UDP、またはICMPで、単方向です。ただし、ACK、ハンドシェイク、および各ストリームの終了処理を含むTCPトラフィックも生成できます。正しいシーケンス番号とチェックサムを生成します。さらに、MACアドレスは希望の分布に従って設定でき、IPネットワークアドレスはホームおよび外部アドレス空間で定義できます。また、トラフィックキャプチャ内にスキャンをシミュレートすることも可能です。

インストール

必要条件:Python 3.3以上およびSortedContainersモジュール

Snifflesは以下のファイルで構成されています:

  • rulereader.py:ルールのパーサー。
  • ruletrafficgenerator.py:コンテンツストリームを生成するツール。
  • sniffles.py:プロセスを管理するメインプログラム。
  • sniffles_config.py:Snifflesのコマンドライン入力とオプションを処理します。
  • traffic_writer.py:パケットをpcap互換ファイルに書き込みます。libpcapは必要ありません。
  • vendor_mac_list.py:MAC組織固有識別子を含みます。ランダムに結合されたオクテットではなく、半現実的なMACアドレスを生成するために使用されます。
  • examples/vendor_mac_definition.txt:部分または完全なMACアドレスの分布を定義するためのオプションファイル。
  • pcreファイル(pcre_chartables.c、pcre_compile.c、pcre_globals.c、pcre_internal.h、pcre_newline.c、pcre_tables.c、pcre.h、pcrecomp.c、pcreconf.py、ucp.h)。
  • nfa.py:NFAをトラバースするため。
  • regex_generator.py:ランダムな正規表現を生成するコード。
  • rand_rule_gen.py、feature.py、rule_formats.py:ランダムなルールセットを生成するためのモジュール。

インストールするには:

  1. トップレベルのディレクトリに移動します。
  2. python3.x setup.py install と入力します。
  3. これによりアプリケーションがシステムにインストールされます。

インストールノート:

  1. これはWindowsではテストされておらず、Linuxでもテストされていません。FreeBSDおよびMac OS Xでテストされています。
  2. ローカルにビルドするには python3.x setup.py build を使用し、ライブラリディレクトリに移動してlibを見つけ、python3.4 -c "from sniffles import sniffles; sniffles.main()" を使用してローカルで実行します。

サポートされているフォーマット:

  • Snort:Snortアラートルール(ルールはAlertディレクティブで始まる必要があります)。コンテンツタグは認識され、正しく解析されます。PCREタグも同様に正しく解析されます。HTTPタグは連続して処理されるため、意図したパケットが作成されない可能性があります。コンテンツ(およびPCREまたはHTTPコンテンツ)は、distance、within、offsetによって変更できます。ルールはフロー制御オプションを使用できますが、データの方向のみがこれから派生します。nocaseオプションは無視され、提示された大文字小文字が使用されます。他のすべてのオプションは無視されます。ヘッダー値は解析され、これらの値に一致するパケットが生成されます。ホームおよび外部ネットワークアドレス空間が使用される場合、それぞれ$HOME_NETおよび$EXTERNAL_NET変数に正しい空間が使用されます。例:

    alert tcp $EXTERNAL_NET any -> $HOME_NET 8080 (msg:"SERVER-APACHE Apache Tomcat UNIX platform directory traversal"; flow:to_server; content:"/..|5C|/"; content:"/..|5C|/"; http_raw_uri;

  • 正規表現:生の正規表現を1行に1つ、abcまたは/abc/iとして記述します。現在、オプションi、s、mをサポートしています。その他のオプションは無視されます。例:

    /ab*c(d|e)f/i

  • Snifflesルールフォーマット(後述)。

コマンドラインオプション:

  • -a TCP Ack:送信されるデータパケットごとにTCP確認応答を送信します。デフォルトではオフです。確認応答パケットにはデフォルトでデータがありません。

  • -b 双方向データ:データはTCPストリームの両方向で生成されます。ACKがオンになります。この機能はデフォルトでオフです。

  • -B [バックグラウンドトラフィックプロトコル:パーセンテージ]:1から100の間の値を持つ少なくとも1つのプロトコルを設定して、バックグラウンドトラフィックを生成します。この値はトラフィック全体のパーセンテージを表します。利用可能なプロトコル:FTP、HTTP、IMAP、POP、SMTP。例:"http:20,ftp:30,smtp:10"。引数値として1つの数値のみを入力すると、ランダムにトラフィックが生成されます。例:"80"。

  • -c カウント:作成するストリームの数。各ストリームには最低1つのパケットが含まれます。パケットはルールによって定義されるか、ランダムに選択された2つのエンドポイント間で送信されます。tcp_handshake、tcp_teardown、packets_per_streamはストリームあたりのパケット数を増やします。現在、ストリーム内のデータは一方向のみに流れます。-bオプションを使用すると、データは両方向に流れるはずです。また、Snifflesルールはデータが両方向に流れるように指定できます。

  • -C 同時フロー:一度に開かれるフローの数。ベストエフォート方式で、指定された同時フロー数よりフローが少ない場合、現在のすべてのフローが使用されます。たとえば、残りフローが1000しかないが、同時フロー数が10000に設定されている場合、その時点では1000フローのみが書き出されます。デフォルト値は1000です。期間と一緒に使用すると、-Cフローは期間全体にわたって維持され、最終的に-cからの入力を無視します。この目的は、同じフローからのパケットが隣り合うのではなく分散された、多様なpcapを作成し、多数の同時フローの錯覚を作り出すことです。私たちのテストでは、メモリが問題になる前に最大200〜300万の同時フローを管理しました。また、ストリーム間のレイテンシの違いにより、一部のフローが他のフローより早く終了する可能性があることに言及しておきます。

  • -d ルールディレクトリ:ルールファイルを含むディレクトリへのパス。ディレクトリ内のすべてのルールファイルの有効なルールを読み取ります。すべてのルールは拡張子.rulesで終わると仮定します。このオプションまたは-fを使用しますが、両方は使用できません。#記号はルールを非アクティブ化(つまりコメントアウト)するために使用されます。

  • -D 期間:カウントではなく期間に基づいて生成します。期間は秒単位です。パケット間のデフォルトのレイテンシは平均1〜200マイクロ秒であることに注意してください。低レイテンシの場合、期間が長いと数百万のパケットが発生し、構築に長時間かかる可能性があります。また、期間はベストエフォートです。基本的に、期間が経過した後に新しいストリームは作成されませんが、まだ完了していないストリームがある可能性があります。これらは依然として書き出されるため、実際の期間は指定されたものより長くなる可能性がありますが、短くなることはありません。最後に、生成中に作成されるストリームを減らしたい場合は、より大きなレイテンシを設定してください。

  • -e eval:ルールセット内の各ルールに対して1つのパケットのみを作成します。-fを除く他のすべての入力を無視します。各パケットには選択されたルールに一致するコンテンツが含まれます。

  • -E 完全評価:ルールセット内のpcreルールの各実行可能なパスに対して1つのパケットを作成します。つまり、ab(c|d)eはabceとabdeの2つのパケットを作成します。-fを除く他のすべての入力を無視します。

  • -f ルールファイル:指定されたパスとファイル名に従って単一のルールファイルを読み取ります。

  • -F 設定:Snifflesオプションの設定ファイルを指定します。設定ファイルは、Snifflesの実行に使用されるパラメータを固定する方法です。

  • -g タイムスタンプ:pcapタイムスタンプの開始時刻を設定します。これは1969年12月31日からの秒数です。デフォルトは現在の時刻です。

  • -h IPホームプレフィックス:IPホームネットワークプレフィックスのリスト。内部アドレスからのIPアドレスはこれらのプレフィックスを使用します。プレフィックスは、xxx.xxx形式で4バイトIPv4アドレス全体を指定できます。例:"10.192.168,172.16"。

  • -H IPv6ホームプレフィックス:IPv4ホームプレフィックスと同じですが、IPv6用です。特記事項として、セパレータはコロンで、コロン間に2バイトが表されます。

  • -i IPv6パーセンテージ:この値を1から100の間に設定して、IPv6でパケットを生成します。これにより、IPv6になるストリームのパーセンテージが決まります。

  • -I スキャン攻撃の強度(パケット/秒)。

  • -l コンテンツ長:コンテンツの長さを指定されたバイト数に固定します。1未満の場合、長さはnfaによって生成されたコンテンツと等しいか、ヘッダーもランダムの場合は10〜1410の間のランダムな数になります。必要に応じてパケットを切り詰めたり埋めたりします。

  • -L レイテンシ:平均レイテンシ(マイクロ秒単位)。設定されていない場合、各ストリームに対して1〜200 usecの間のランダムな平均レイテンシが決定されます。したがって、特定のストリームのパケットは、フロー内の各パケット間に平均レイテンシの時間がかかります。

例:

注意:すべての例は、snifflesパッケージがインストールされていることを前提としています。

単一の正規表現ファイルから、すべてのパケットがルールに一致する10ストリームのpcapを生成するには

sniffles -c 10 -f myre.re -m

単一のSnortルールファイルから、すべてのパケットがルールにほぼ一致するpcapを生成するには

sniffles -c 10 -f myrules.rules

単一のディレクトリ内の複数のSnortルールファイルから、すべてのパケットがルールに一致するpcapを生成するには

sniffles -c 10 -d myrulesdir -m

上記と同じpcapを同じルールを使用して生成するが、ランダムなコンテンツ(コンテンツはランダム、ヘッダーはルールに従う。regexやSnifflesルールでは機能しない)にするには:

sniffles -c 10 -d myrulesdir -r

10ストリーム(各1パケット)でランダムデータのpcapを生成するには:

sniffles -c 10

10ストリームで、ストリームの50%がバックグラウンドトラフィックになり、残りのストリームがルールに一致するパケットを含むpcapを生成するには:

sniffles -c 10 -B 50 myrules.rules

10ストリーム、各ストリームに5パケット、ACK、ハンドシェイク、ティアダウン、および各データパケットのデータ長を50に固定したpcapを生成するには:

sniffles -c 10 -p 5 -l 50 -t -T -a

ホームネットワークが192.168.1-2.xの20のランダムストリームでpcapを生成するには:

sniffles -c 20 -h 192.168.1,192.168.2

IPv4でホームネットワークが192.168.1.x、IPv6で2001:8888:8888、トラフィックの50%がIPv6の20のランダムストリームでpcapを生成するには:

sniffles -c 20 -h 192.168.1 -H 2001:8888:8888 -i 50

パケット間の平均間隔が100マイクロ秒の5秒間のランダムパケットキャプチャを生成するには:

sniffles -D 5 -L 100

ルールファイル(またはregexファイル)内の各ルールに順に一致する1つのパケットを作成するpcapを生成するには:

sniffles -f myrules.rules -e

正規表現のセット内の各正規表現のすべての可能な分岐に対してパケットを作成し、そのファイルをeverything.pcapという名前のpcapに保存するには、以下のようにします。ただし、この関数は正規表現に大量の最小-最大カウントがある場合に指数時間で実行される可能性があるため、実行に時間がかかる場合があります。さらに、以下に示す2つのオプション以外のすべてのオプションは無視されます。

sniffles -f myrules.rules -o everything.pcap -E

スキャン攻撃が2秒後に発生し、2秒間続き、1秒間に1000のスキャンパケット、キャプチャ全体の期間が5秒、ラプス時間が50us、開始ポートが80(ポートを80から順次検索)のランダムトラフィックを生成するには:

sniffles -D 5 -O 2 -W 2 -I 1000 -L 50 -s 192.168.1.2 -P 80

上記と同様ですが、複数のスキャン攻撃を作成し、各スキャンの期間は1秒、攻撃間の平均オフセットは2秒です。さらに、指定されたポートのみをスキャンします。また、IPアドレス範囲192.168.1.0-255をランダムにターゲットにします。

sniffles -D 8 -O 2 -W 1 -I 10 -L 50 -s 192.168.1 -P 80,8080,8000,8001

Snifflesルールフォーマット:

Snifflesはいくつかのルールフォーマットをサポートしています。まず、SnifflesはSnortルールと正規表現(1行に1つ)を解析できます。これに加えて、Snifflesにはトラフィックを明示的に制御するための独自のルールフォーマットもあります。これは、トラフィックを記述するXMLファイルを使用して行われます。このフォーマットを使用する場合、Snifflesの他のオプションは関係しない場合があります。サンプルルールファイルはexamplesディレクトリにあります。これらのルールファイルは、-fオプションでルールファイルを指定するだけで使用されます(例:sniffles -f rules.xml)。

Snifflesルールフォーマットは以下のとおりです:```xml

<petabi_rules> <traffic_stream proto="tcp" src="any" dst="any" sport="any" dport="any" handshake="True" teardown="True" synch="True" ip="4"> </traffic_stream> <traffic_stream proto="tcp" src="any" dst="any" sport="any" dport="any" handshake="True" teardown="True" synch="True"> </traffic_stream> </petabi_rules>

root@kitploit:~
詳細には、タグは次のように機能します:

- `<petabi_rules> </petabi_rules>`: このルールファイルのすべてのルールを定義します。指定されたトラフィックストリームを開閉するタグのセットは1つだけであるべきです。
    - `<rule > </rule>`: 単一のルールを指定します。1つのルールは任意の数のトラフィックストリームまたはパケットを生成できます。1つのファイルに任意の数のルールを含めることができます。
        - オプション:
            - name: このルールの名前。主にドキュメント用で、実際の機能はありません。
        - `<traffic_stream> </traffic_stream>`: トラフィックストリームは2つのエンドポイント間のトラフィックを定義します。1つのトラフィックストリーム内で指定されたすべてのパケットは同じエンドポイントを共有します。特定のルールに対して任意の数のトラフィックストリームを指定できます。同じルール内の異なるトラフィックストリームは、以下の設定に応じて異なるエンドポイントを持つ場合と持たない場合があります。
            - オプション:
                - typets: パケット生成に使用するトラフィックストリームのタイプを指定します。現在、Standard、ScanAttack、BackgroundTrafficがあります。
                - scantype: 1==Synスキャン(デフォルト)2==コネクションスキャン。ScanAttackで使用します。
                - target: スキャン攻撃の対象IPアドレスを指定します。
                - targetports: スキャン攻撃用。カンマ区切りのポートリスト、または単一の開始ポートを指定します。指定しない場合、ポートはランダムにスキャンされます。単一の開始ポートが指定された場合、そのポートから65535まで順にスキャンされ、その後開始ポートに戻ります。このオプションはtypetsが'ScanAttack'の場合に使用します。
                - srcport: スキャン攻撃の送信元ポートを指定します。デフォルトはランダムです。
                - duration: typetsが'ScanAttack'の場合のスキャン攻撃のウィンドウ、つまり持続時間(秒単位)。
                - intensity: typetsが'ScanAttack'の場合のスキャン攻撃の強度。
                - offset: スキャン攻撃を開始する前のオフセット。トラフィックに複数のスキャンを挿入する場合にも使用します。
                - replychance: スキャンに応答がある確率。つまり、ターゲットポートが開いている確率(デフォルト20%)。ScanAttackで使用します。
                - proto: このトラフィックストリームのプロトコルを指定します。TCP、UDP、ICMP(未テスト)のいずれかであるべきです。
                - src: 送信元IPアドレス。xxx.xxx.xxx.xxx形式のアドレス、$EXTERNAL_NET(外部アドレス—ホームネットワークが指定されていることを前提)、$HOME_NET、またはany(ランダムにIPアドレスを選択)の場合があります。
                - dst: 宛先IPアドレス。送信元IPアドレスと同じです。
                - sport: 送信元ポート(TCPまたはUDPを想定)。Snortポート形式を使用できます。これは、角括弧内のカンマ区切りリスト(例:[80,88,89])、範囲(例:[10:1000])、またはany(例:0-65535からランダム選択)です。
                - dport: 宛先ポート(sportと同様)。
                - handshake: ストリームの開始時にTCPハンドシェイクを生成します。除外するとハンドシェイクはありません。有効な値はtrueまたはfalseです。デフォルトはfalseです。
                - latency: パケット間の平均レイテンシー(マイクロ秒単位)を設定します。
                - teardown: すべてのトラフィックが送信された後に、トラフィックストリームの末尾にTCPティアダウンを追加してストリームを閉じます。有効な値はtrueまたはfalseです。デフォルトはfalseです。
                - synch: トラフィックストリームが同期するかどうか。trueの場合、1つのトラフィックストリームが完了してから次のトラフィックストリームが開始する必要があります。falseの場合、false(非同期)の連続するストリームはすべて同時に実行されます。
                - tcp_overlap: デフォルト値はfalseです。trueの場合、2番目のパケットから余分なコンテンツが追加され、TCPシーケンス番号が1つ減らされて、TCPオーバーラッピングシーケンス番号をシミュレートします。
                - ipv: IPv4またはIPv6を指定します。有効なオプションは4または6です。デフォルトは4です。
                - out_of_order: パケットをランダムに順序不同で到着させます。これは'times'オプションを使用するパケットでのみ機能することに注意してください。さらに、このオプションは適切な重複ACKがトラフィックトレースに表示されるように、ackオプションと併用する必要があります。有効な値はtrueまたはfalseです。デフォルトはfalseです。
                - out_of_order_prob: パケットが順序不同で到着する確率を設定します。たとえば、10は各パケットが順序不同で到着する確率が10%であることを意味します。順序不同のパケットは、すべての順序通りのパケットの後に到着します。さらに、それらもランダムに混合されます。したがって、10個のパケットのうち最初のパケット2と5が順序不同と判断された場合、それらは10個のパケットの最後(スロット9と10)に到着し、任意の順序(つまり、5が2の前に来るか、その逆)になります。この値は1から99の間でなければなりません。デフォルトは50です。
                - packet_loss: パケットをランダムにドロップ(つまり、到着しない)させます。これは'times'オプションでのみ機能します。さらに、このオプションは、重複ACKがトラフィックトレースに表示されるように、ackオプションをtrueに設定して使用する必要があります。有効な値は1から99で、パケットがドロップされる確率を表します。パケットドロップはデータを含むパケットにのみ発生し、ACKには発生しないことに注意してください。
                - ack: このフローのすべてのデータパケットの後にサーバーからのACKが続くようにします。有効な値はtrueまたはfalseです。デフォルトはfalseです。
                - percentage: これはBackgroundTrafficにのみ適用され、ルールファイルまたはディレクトリ内にBackgroundTrafficのルールは1つだけであるべきです。パーセンテージは、全トラフィックストリーム内で作成されるバックグラウンドトラフィックストリームの割合を示します。
                - http: バックグラウンドトラフィックストリーム内のHTTPアプリケーションプロトコルの割合分布。
                - ftp: バックグラウンドトラフィックストリーム内のFTPアプリケーションプロトコルの割合分布。
                - pop: バックグラウンドトラフィックストリーム内のPOPアプリケーションプロトコルの割合分布。
                - smtp: バックグラウンドトラフィックストリーム内のSMTPアプリケーションプロトコルの割合分布。
                - imap: バックグラウンドトラフィックストリーム内のIMAPアプリケーションプロトコルの割合分布。
            - `<pkt > </pkt>`: このディレクティブは、個々のパケットまたは一連のパケットを指定します。times機能を使用すると、1つの<pkt> </pkt>ディレクティブで複数のパケットを生成できます。それ以外の場合は、各方向の各パケットを明示的に指定する必要があります。
                - オプション:
                    - dir: パケットの方向。有効な値はto serverまたはto clientです。初期の送信元IPがクライアント、初期の宛先IPがサーバーと見なされます。したがって、'to server'はクライアントからサーバーへのパケットを送信し、'to client'はサーバーからクライアントへのパケットを送信します。デフォルトはto serverです。
                    - content: このパケットのコンテンツを指定する正規表現。パケットのサイズは正規表現に依存します。
                    - fragment: このパケットをフラグメント化するかどうか。IPv4でのみ機能します。2より大きい値である必要があります。有効な数分(または指定された数分、小さい方)のフラグメントを作成します。デフォルト値は0で、フラグメントなしを意味します。
                    - ack: このパケットにACKを送信するかどうか。有効な値はtrueまたはfalseです。デフォルトはfalseです。
                    - split: コンテンツを指定された数のパケットに分割します。デフォルトでは、すべてのコンテンツは単一のパケットで送信されます(フラグメントはこのルールの小さな例外です)。
                    - times: このパケットをx回送信します。デフォルト値は1です。正の値は正確にx個のパケット(ackがtrueの場合はACKが付く可能性あり)を送信し、負の数は1からabs(-x)の間のランダムな数のパケットを送信します。
                    - ttl: パケットのTime to Live値を設定します。デフォルトでは、SnifflesはランダムなTTL値を生成します。
                    - ttl_expiry: パケットを複数のパケットに分割し、2つの正常なパケットの間に1つの悪意のあるパケットを挿入してTTL期限切れ攻撃をシミュレートします。デフォルトでは値は0(悪意のあるパケットなし)です。値が0以外の場合、このttlがttl_expiry値に等しい悪意のあるパケットを挿入します。ttl値が設定されている場合、正常なパケットは新しいttl値で設定されます。

最終注意事項: 新しいルール形式はまだ始まったばかりであり、問題を含んでいる可能性があります。不一致やエラーがあればお知らせください。さらに、必要に応じてより多くの機能を提供するためにオプションを拡張する意向です。ご希望の機能があればご連絡ください。最後に、この製品は現状のまま提供されています。機能や正確性については一切保証しません。このプロジェクトをフォークしてご自身のニーズに合わせてご自由にご利用ください。

クレジット:
--------

このアプリケーションは、信頼性が高く、現実的で、高速なセキュリティソリューションを提供するPetabi, Inc.によって提供されています。

著者:

- Victor C. Valgenti
- Min Sik Kim
- Tu Le
- Moosuk Pyun

新機能:
-------------

- 2014年11月21日: バージョン1.4.0。トラフィック分割と双方向トラフィック生成のためのtraffobotを追加。生成されたトラフィックが単一のトラフィック書き込み呼び出しに収まる場合に例外がスローされるバグを修正。使用方法を再フォーマットして有効化。最後に、traffobotとXML解析のユニットテストを追加。

- 2015年2月3日: バージョン2.0。特別なルールを使用して大規模なストリームを生成する際のメモリ要件を削減するために、ストリームの動作を完全に書き換え。現在、事態が悪化する前に約200〜300万の同時フローを処理可能。大規模なフローを作成する際に役立つ機能をいくつか追加。まず、約200〜300万フローの同時実行性で生成する。また、これらのフローにはteardownを使用しない。フローの一部はキャプチャの最初から最後まで持続し、残りはバッチ期間ごとにクローズされる。これをより効率的にするために作業を続けるが、現在のSnifflesの複雑なオプションすべてをメモリ内で安価に管理することは実際にはできない。唯一の他の解決策は、より多くのRAMを搭載したより強力なマシンを入手することである。このバージョンにはさまざまな修正も含まれている。

- 2015年2月11日: アウトオブオーダーパケットの確率を追加し、アウトオブオーダーパケットの頻度を調整可能に。

- 2015年3月5日: TCPティアダウンを標準のティアダウンシーケンスに変更。フラグメントを使用せずにコンテンツを複数のパケットに分散できるようになりました。

- 2015年4月9日: スキャントラフィックを修正。以前の変更中に部分的に壊れていた。pcapの開始タイムスタンプが現在時刻にデフォルト設定され、-gオプションで設定可能に。最後に、3ウェイTCPハンドシェイクの3番目のパケットは、クライアントが最初にデータを送信する場合、データを含むようになりました。

- 2015年5月22日: ルールパーサーを書き換え、より多くのフォーマットに対応できるようにルールパーサーを拡張する機能を簡素化。nfaトラバーサルとpcreをSnifflesに直接組み込み。コードをクリーンアップし、公開用に準備。

- 2015年5月27日: ドキュメントを更新し、pcreライブラリとnfa構築をマージしてSnifflesを自己完結型パッケージに。正規表現ジェネレータとランダムルールジェネレータをSnifflesパッケージの一部として追加。バージョンを3.0.0に更新し、githubに公開。

- 2015年8月12日: 多数のバグ修正と新機能を実装。ストリームとフローの処理方法を根本的に変更し、拡張性を向上。フローごとのレイテンシを追加。ドキュメントを更新。

正規表現ジェネレータ
============================

これはシンプルな正規表現ジェネレータです。
完全にランダムに、または一連の分布に基づいて正規表現を作成します。
正規表現の生成方法に適用できる制御は、構造的であり、文脈的ではありません。言い換えれば、
生成された正規表現に特定の文字列トークンが出現するようにする努力は行われていません。
ただし、確率分布を微調整して、文字クラス、選択、繰り返しなど、ルールに見られる機能のタイプに影響を与えることはできます。

インストール
-------

Snifflesの残りの部分とともに自動的にインストールされます。

オプション
-------

regexgen -- ランダム正規表現ジェネレータ。

    usage: regexgen [-C char distribution] [-c number regex]
    [-D class distribution] [-f output re file]
    [-l lambda for length generation] [-M maximum regex length]
    [-m minimum regex length] [-n negation probability]
    [-o options chance] [-R repetition chance] [-r repetition distribution]
    [-t re structural type distribution] [-?] [-g]

-    -C 文字分布: 特定の文字または文字タイプが出現する可能性を設定します。使用方法の例については、以下の分布の簡単な説明を参照してください。デフォルトでは、この分布は等分布です。この分布には5つのスロットがあります: ASCII文字、\x00形式のバイナリ文字、英字(大文字または小文字)、数字、および置換クラス(\wなど)。この入力例は "10,20,10,40,20" で、生成された任意の文字が10%のASCII、20%のバイナリ、10%の英字などから来る確率が10%であることを意味します。注意点として、正規表現で問題を引き起こす可能性のあるASCII文字(`[' や '{' など)は16進表現(例:\x3b)に変換されます。
-    -c 生成する正規表現の数。デフォルトは1。
-    -D クラス分布: クラス分布には2つのスロットしかありません。最初のスロットは、クラスがランダムに生成された文字の数で構成される確率。2番目のスロットは、クラスが範囲(a-zなど)で構成される確率。
-    -f 出力ファイル名。正規表現が保存されるファイルの名前を設定します。デフォルトは現在の作業ディレクトリにあるrand.reというファイルです。
-    -g グループ: すべての正規表現は、少なくとも1つ以上の他の正規表現と共通のプレフィックスを持ちます(複数の正規表現がある限り)。共通のプレフィックスは、いくつかの正規表現のセットに対して同じ正規表現です。可能な共通プレフィックスの総数は、生成する正規表現の総サイズの1から1/2までです。このオプションのデフォルト値はfalseです。このオプションはパラメータを取りません。
-    -l 長さのラムダ: これは、正規表現の長さの指数分布の平均長です。デフォルト値は10です。
-    -M 正規表現の最大長: 正規表現を最大でこの構造的な長さ以下にします。デフォルトでは、最大長は制限されません。
-    -m 正規表現の最小長: 正規表現を少なくともこの長さ以上にします。デフォルトは3で、入力が0以下の場合は自動的に値1が使用されます。
-    -n 否定確率: 文字クラスが通常の文字クラス([xyz])ではなく否定クラス([^xyz])になる確率。デフォルトの確率は50%。
-    -o オプション確率: 正規表現にオプションが追加される確率。現在のオプションは'i'、'm'、's'です。オプションのランダムな数がリストに追加され、それらのオプションは一様分布を通じて選択されます。
-    -R 繰り返し確率: 任意の構造コンポーネントが正規表現に追加された後に繰り返しが発生する確率。
-    -r 繰り返し分布: 繰り返し構造の分布。スロットは0から1(?)、0以上(*)、1以上(+)、およびカウント({x,y})です。
-    -t RE構造タイプ分布: 正規表現の主要な構造コンポーネントの分布。これらは3つのスロット、つまりカテゴリーで構成されます: 文字、クラス、選択。選択は、REに残された残りの長さまでのより小さな正規表現を生成することに注意してください。言い換えれば、選択により、いくつかのより小さな正規表現が全体の正規表現に結合されます。選択は、それらのより小さな正規表現を作成する際にまったく同じ方法論を使用します。
-   -? このヘルプを表示。

    このジェネレータはランダムな正規表現を作成します。正規表現内の構造を確率分布に調整することは可能ですが、現時点では内容は調整できません。これは、可能な正規表現の最大の多様性を探求するために望ましいです(ただし、必ずしも現実的な正規表現ではありません)。
    分布は、特定の分布のさまざまな可能性、つまりスロットに対する確率のリストを作成することによって処理されます。これらは、"10,30,40,20"のような単純な文字列リストを使用してコマンドライン引数として追加されます。リストには、スロットの数と同じ数の値が必要です。リスト内のすべての値の合計は100でなければならず、分数はあってはなりません。各スロットの値は、そのスロットが選択される確率です。たとえば、基本RE構造タイプ分布には3つのスロットがあります。最初のスロットは、次の構造タイプが文字(文字は英字、数字、バイナリ、ASCII、または置換クラス(\wなど))である確率です。2番目のスロットは、[ab@%]、[^123]、[a-z]などの文字クラス用です。最後のスロットは、(ab|cd)のような選択が発生する確率です。これらの3つのスロットを使用して、正規表現内の構造がどの程度頻繁に出現するかを調整できます。たとえば、regexgen -c 10 -t "80,10,10"は10個の正規表現を作成し、使用される構造の80%が文字、10%が文字クラス、10%が選択になります。

ランダムルールジェネレータ
=====================

ランダムルールジェネレータは、特定のプラットフォームをテストするためのランダムに生成されたルールを多数作成する手段を提供します。現在、生成されたルールはSnortルール形式に準拠するか、単なるテキスト行です。ランダムルールジェネレータが機能するためには、一連の機能が定義されている必要があります。機能の例はexample_featuresフォルダにあり、以下でさらに説明します。

インストール
-------

Snifflesとともに自動的にインストールされます

注: ランダムルールジェネレータは、あらゆる種類のコンテンツを作成するためにランダム正規表現ジェネレータを使用します。オプション
-------

ランダムルールジェネレータ

使用法: rulegen -c [ルール数] -f [フィーチャセット]
        -o [出力ファイル] [-s]

- -c  ルール数: 生成するルールの数。
      デフォルトは1。
- -f  フィーチャセット: フィーチャセットの説明を含むファイル。
      フィーチャセットとその記述方法については、ドキュメントを参照してください。
- -o  出力ファイル: ルールが書き込まれる出力ファイル。
      デフォルトはrules.txt
- -s  Snortルール形式: ルールをSnortルール形式で書き込む。
      パラメータなし、デフォルトはオフ。オフの場合、ルールは単に
      フィーチャパーサに基づいた文字列形式に変換される。

フィーチャセット
-----------

フィーチャは、IDSで使用されるルールの潜在的な側面を記述するために使用される。
例えば、パケットフィルタは、IP送信元アドレスと宛先アドレスを対象とするルールを使用するかもしれない。
その場合、それらのIP送信元アドレスと宛先アドレスをどのように生成すべきかを記述するフィーチャセットを作成することが可能である。
より具体的には、単純ルールと複雑ルールを区別する。
この2つの違いは、あいまいな表記の有無である。
例えば、任意のIPアドレスを意味するあいまいな表記*がある場合、*はあいまいな表記を表すと言える。
さらに、ルールはあいまいでない表記、例えば192.168.1.1も使用できることがわかる。
これは単一の固定IPアドレスであり、あいまいな表記の可能性がないため、単純なIPアドレスを表す。
そして、特定のフィーチャの範囲(例えば、IPアドレス全体の40億以上あるIPv4アドレス全体、またはそのサブセットのみ)をさらに定義する。

フィーチャは最終的に、任意のルールのすべての側面を定義する。
フィーチャセットと有効なルール形式が与えられれば、それらのフィーチャを使用する任意の数のルールをランダムに生成することが可能になる。
この方法により、しばしば見落とされるベクトルにわたってIDSを検査するテストルールセットを生成することが可能になる。

フィーチャはセミコロン区切りのリストで定義され、1行に1フィーチャ
type=feature; key=valueペアの引数リスト、Python形式のリスト(例: [a, ..., z])。
フィーチャは、対象のルール形式の特定の部分を定義する。
フィーチャは拡張して機能を追加することができる。
オプションで、新しいルール形式を作成することでフィーチャの機能を拡張することもできる。

現在のフィーチャタイプ:

1. フィーチャ -- 汎用フィーチャ
2. コンテンツ -- コンテンツフィーチャ
3. IP -- IPフィーチャ
4. プロトコル -- プロトコルフィーチャ

あいまいリストは、範囲には[x:y]のようなリスト、リストには[x,y]、セットには{x1,x2,x3}、
またはワイルドカードや類似の単一オプションには単に*として記述する。

あいまいリストの例:```
ambiguity_list=[[2:9]]
it will generate [3:4], [5:6], etc (any [x:y] such that
x <= y and x >= 2 and y > x and y <= 9).

ambiguity_list=[[3,20]]
it will generate [3,9,10], [3,4,8,12], etc (any list [x1,x2,x3,..]
such that all values falling between 3 and 20.

ambiguity_list=[{5,6,10}]
it will generate a subset of {5,6,10} such as {5,10}, {5}.

ambiguity_list=[[2:9],[3,20],{5,6,11}]
it will pick one of [2:9], [3,20], and {5,6,11} and
generate a corresponding instance (see above)

フィーチャファイルの例:``` type=protocol; name=proto; proto_list=[TCP,UDP,ICMP]; complexity_prob=0;ambiguity_list=None; type=ip; name=sip; version=4; complexity_prob=100;

root@kitploit:~
上記は2つのフィーチャ(プロトコルフィーチャと送信元IPフィーチャ)を定義しています。プロトコルはprotoという名前で、これはルールフォーマッタにとってのみ重要です。有効なプロトコルはIP、TCP、UDP、ICMPです。IPフィーチャはIPv4として定義され、すべてのルールは複雑になります。IPの複雑性は既にクラスの一部であり、フィーチャ定義に追加する必要はありません。これによりCIDR表記を用いたIPアドレスが生成されます。

Generic Feature Attributes:

- Feature_name: 情報属性。ルールフォーマッタにとって潜在的に有用。
- lower_bound: 取りうる値の下限。フィーチャが数値であることを前提とする。
- upper_bound: lower_boundの逆。
- complexity_prob: ルールに複雑なフィーチャを使用する確率。0から100まで。デフォルトは0。複雑なフィーチャが使用される場合、あいまいな表記が曖昧性リストからランダムに選択されるか、フィーチャが特定の曖昧性(IPアドレスなど)を定義している場合はそれが使用される。複雑なフィーチャが使用されない場合、境界を使用して値が生成されるか、Contentの場合は、生成される文字列を一連のASCII文字に制限する分布値のセットを使用して値が生成される。
- ambiguity_list: 可能なあいまいな表記のリスト。Python書式を使用したカンマ区切りのリスト(例:[a, b, c])。
- toString(): この特定のフィーチャセットを指定してルールのインスタンスを出力する。

Content Feature -- Inherits from Feature:
- regex: True または False。Trueの場合、正規表現にpcre書式を使用し、さらに正規表現にオプション i, s, m を追加する可能性がある。
- length: 生成されるコンテンツの平均的な長さを定義する。
- min_regex_length: 正規表現の最小長を定義する。

Protocol Feature -- Inherits from Feature:
- proto_list: 可能なプロトコルのリストを定義する。カンマ区切りのリスト(例:[TCP, UDP])。

IP Feature -- Inherits from Feature:
- version: IPバージョン4の場合は4、IPバージョン6の場合は6。デフォルトは4。

Ambigous notation for ranges, lists, sets:

範囲表記:
  [x:y] は x から y まで(両端を含む)を意味する。

リスト表記:
  [x,y] は、ランダムに決定された数の値のリストを意味し、各値は x 以上 y 以下である。

セット表記:
  {x1,x2,x3,x4} は値 x1, x2, x3, x4 のセットを意味する。元のセットのサブセットを生成する。

詳細な例については、example_featuresフォルダ内のサンプルフィーチャセットを参照してください。詳細と背後にある学術理論は後日追加される予定です。
ツールをダウンロード
  • -M カスタムMACアドレスをトラフィックに使用するためにMAC分布を使用できるようにします。デフォルトでは、MACアドレスはランダムに生成されます。MAC定義ファイルの詳細については、examples/mac_definition_file.txtを参照してください。注意:ソースMACまたは宛先MACに応じて異なる値を設定するために、最大2つのMAC定義ファイルを指定できます。1つのファイルのみを指定した場合、どちらの方向にも使用されます。以下の表記を使用すると、特定の方向を指定できます。例:'path1:path2'。path1はソースMACのMAC定義ファイル、path2は宛先MACのMAC定義ファイルになります。疑問符(?)を使用して、一方をランダムに指定することもできます。例:'?:path2'はソースMACをランダムにし、ファイルを宛先MACに使用します。

  • -n 完全一致しない:ルールから生成されたコンテンツを完全に一致させないように設定します(つまり、自動的に最後の数文字を切り詰めます)。デフォルトの動作はルールコンテンツに完全に一致することです。

  • -o 出力ファイル:出力ファイルの名前を指定します。デフォルトでは、ファイル名はsniffles.pcapです。

  • -O オフセット:スキャン攻撃を開始する前のオフセット。また、トラフィックに複数のスキャンを挿入するときにも使用されます。これはスキャンが開始するまでの秒数です。-Rと一緒に使用すると、開始までの平均秒数になります。

  • -p ストリームあたりのパケット数:単一のストリームのコンテンツを含むパケットの数を指定します。引数として正の値が指定された場合、各ストリームに正確にx個(xは指定された整数)のコンテンツを含むパケットが表示されます。xが負の場合、各ストリームにランダムな数のパケット(1からabs(x)まで)が表示されます。デフォルトでは、この値は1です。

  • -P ターゲットポートリスト:スキャン攻撃用。カンマ区切りの可能なポートのリスト、または単一の開始ポートを指定します。それ以外の場合、ポートはランダムにスキャンされます。単一の開始ポートが指定された場合、ポートはそのポイントから65535まで順にスキャンされ、その後開始ポイントに戻ります。リストが指定された場合、リスト内のポートがラウンドロビンでスキャンされます。

  • -r ランダム:ルールからではなくランダムなコンテンツを生成します。それでもルールが提供されている場合、ルールはヘッダーの生成に使用されます。注意:ルール内の多くの機能がランダム生成の特定の側面を上書きする可能性があります。

  • -R ランダムスキャン攻撃:オフセットを使用してトラフィックにスキャン攻撃を作成しますが、オフセットは中央値としてのみ使用されます。オフセットは、スキャンが終了してから新しいスキャンが開始するまでの時間を決定するために使用されます。

  • -s スキャン攻撃:ターゲットとするIPv4アドレスのカンマ区切りリストが続きます。各IP範囲は1つのスキャン攻撃を作成します。範囲は192.168.1.1のように指定すると、その1つのIPアドレスを正確にターゲットにし、192.168.1のように指定すると、192.168.1.0から192.168.1.255の間のランダムなIPアドレスをターゲットにします。

  • -S スキャンタイプ:1==Synスキャン(デフォルト)、2==コネクションスキャン。

  • -t TCPハンドシェイク:すべてのTCPストリームにTCPハンドシェイクを含めます。デフォルトではオフです。

  • -T TCPティアダウン:すべてのTCPストリームにTCPティアダウンを含めます。デフォルトではオフです。

  • -v 冗長性:出力メッセージのレベルを上げます。

  • -w コンテンツ書き込み:コンテンツ文字列を'all.re'というファイルに書き込みます。

  • -W ウィンドウ:スキャン攻撃のウィンドウ(秒単位の期間)。

  • -Z 応答確率:スキャンが応答を持つ確率。つまり、ターゲットポートが開いている確率(デフォルト20%)。