
wafw00fのフィンガープリント。Goの速度。パイプラインにネイティブ対応。ライブHTTPおよびオフラインキャプチャからのWAF検出。
wafw00fのフィンガープリント。Goの速度。パイプラインにネイティブ対応。
172のWAF製品識別情報、wafw00fのフィンガープリントを基盤に構築。
ライブHTTPとオフラインの保存済みレスポンス分析のためのGo CLIおよびライブラリ。
クイックスタート · wafw00fからの移行 · ベンチマーク · ドキュメント
wafmeowはGoによるWAF検出のためのwafw00f代替ツールであり、上流プロジェクトのフィンガープリント作業を基盤としています。大規模にWAFを検出する必要があるチームのために、高速なWAFフィンガープリンティングを並行かつ構造化されたパイプラインにもたらします。
jq、通知ツール、データベースへストリーミングしつつ、
人間向けの診断情報はstderrに保持します。# Set AUTHORIZED_DOMAIN to a domain you own or are authorized to test.
set -o pipefail
subfinder -d "${AUTHORIZED_DOMAIN:?set an authorized domain}" -silent |
httpx -silent |
wafmeow --target-file - --fast --jsonl --silent
このパイプラインは、検出された各URLの迅速なアクティブスキャンに--fastを使用します。
既存のhttpxレスポンスエクスポートには、
オフラインインポートパイプラインを使用してください。
Go 1.26以降でビルドし、セキュリティパッチが適用されたツールチェーンを使用してください。リリースビルドでは Go 1.27.3を使用します。
git clone https://github.com/Lu1sDV/wafmeow.git
cd wafmeow
go build -o wafmeow ./cmd/wafmeow
./wafmeow --help
本番環境では、リリース検証ゲートを通過したリリースを使用してください。 v1.0.0 のダウンロードは、このソースツリーにおけるセキュリティ強化より前のものです。
ビルド済みバイナリ、Go モジュール、Homebrew によるインストールについては、 リリースとインストールを参照してください:
go install github.com/Lu1sDV/wafmeow/v3/cmd/wafmeow@latest
brew install Lu1sDV/tap/wafmeow
/v3 の Go インストールコマンドには、公開済みの v3 リリースが必要です。そのリリース以前は、上記のソースチェックアウトからビルドしてください。Homebrew は引き続き最新の公開安定版をインストールします。
# Use your own local HTTP server on port 8080.
./wafmeow --target http://127.0.0.1:8080 --fast
これは人間が読める形式で結果を出力します。URL を指定するには --target / -t を使用し、複数の URL に対しては繰り返し指定します。URL の行を列挙したファイルを指定するには --target-file PATH を、標準入力から読み込むには --target-file - を使用します。
--input PATH と -I PATH は --target-file PATH と同等の表記です。
入力ソースは 1 つだけ選択してください。保存済みのレスポンスはオフライン分析のために --evidence で使用します。
| 目的 | 選択肢 | コレクション |
|---|---|---|
| 迅速なアクティブフィンガープリンティング | --fast | Normal、no-user-agent、および combined プローブ |
| より広範なアクティブプロービング | --deep | 選択された 8 種類のリクエストタイプ。モードを指定しない場合のデフォルトでもあります |
| 通常のレスポンスのみを検査 | --baseline | アクティブプローブなしの通常リクエスト 1 回 |
| 保存済みレスポンスを再利用 | --evidence FILE | 新規リクエストなしのオフライン分類 |
--baseline は、通常のレスポンスにすでに含まれているフィンガープリントを検出できます。アクティブプローブなしで通常の HTTP 検査を行いたい場合に使用してください。--fast や --deep の準備ステップではありません。3 つのライブモードは相互に排他的であり、リダイレクトと予算は実際のリクエスト数に影響します。トレードオフについては collection modes and payloads を参照してください。
# Discover URLs, then send new wafmeow requests:
httpx -l authorized-hosts.txt -silent |
./wafmeow --target-file - --fast --jsonl --silent
# Classify exported responses without additional requests:
httpx -l authorized-hosts.txt -silent -json -irr -probe -rstr 1048576 -rsts 1048576 |
./wafmeow --evidence - --evidence-format httpx --jsonl --silent
インポーターは httpx v1.12.0 を対象としています。エクスポートされたボディには完全性の証明が欠けています:
コンテンツの一致は不明のままですが、忠実なステータス/ヘッダー/クッキーの証拠は
一致する可能性があります。これはアクティブな取得やWAF不在の証明と同等ではありません。
上流プロセスの失敗をシェルパイプラインの失敗とすべき場合は set -o pipefail を使用してください。
エンコーディング、制限事項、限界、および下流のレシピ。
Goライブラリはモジュール github.com/Lu1sDV/wafmeow/v3 を使用します。結果JSONは
スキーマ1を使用します。モジュールとレポートのバージョンは別々の契約です。
# targets.txt: one authorized URL per line.
./wafmeow --target-file targets.txt --fast --jsonl --output results.json --strict
--jsonl は結果を stdout にストリーム出力します。--output / -O はレポートをアトミックに書き込みます。.json、.jsonl、.csv、.txt のいずれかを使用して形式を選択します。それ以外のファイル名では TXT が生成されます。人間向けの診断情報は stderr に出力されます。--strict はエビデンスの品質をチェックします。不完全、失敗、または診断付きの結果を公開した後に終了コード 2 で終了します。WAF がマッチしたというだけでは終了しません。設定、入力、出力の失敗は 1 で終了し、キャンセルは 130 で終了します。レポートには結果が含まれ、再生可能なレスポンスキャプチャは含まれません。出力契約 と レートとデッドラインのチューニング を参照してください。
これらの過去の測定では、より広範なプローブモードは full とラベル付けされていました。現在は --deep です。以下の数値は、名称変更に伴って再実行されたものではありません。
600 件のライブ HTTP/HTTPS ターゲット — Tranco トップ 10,000 からサンプリングした 500 件の非 CDN ターゲットと 100 件の既知 CDN ターゲット — に対する経過時間の中央値。構成ごとに 3 回実行し、Hetzner Helsinki VPS(4 vCPU、7.6 GiB RAM)上で 2026 年 10 月 31 日に完了しました。値が小さいほど優れています。