
waf-checker v1.1.0
ファイアウォールベンダーを検出し、19の攻撃カテゴリを高度な回避ペイロードでテストし、CLI、Cloudflare Worker、Dockerを介して色分けされたバイパス分析を提供する自動WAF評価ツール。
WAF Checker
このプロジェクトは、Web Application Firewall(WAF)が一般的なWeb攻撃から製品をどれだけ保護できているかを確認するのに役立ちます。Cloudflare Worker(インタラクティブなWeb UIを内蔵)として、またはスタンドアロンのNode.js CLIツールとして実行できます。
🧪 テストカバレッジとステータス
すべてのパッケージは、自動化されたユニット、統合、プロパティベース(fast-checkファジング)、ネットワーク耐性、およびリバースエンジニアリングのスイート(100%のSSRF安全性準拠、プロトコル回避手法、レポートフォーマッター)で徹底的にテストされています:
| パッケージ | 行カバレッジ | ステートメント | 関数 | テストスイート |
|---|---|---|---|---|
@waf-checker/core | 93.0% 🟢 | 92.6% | 96.4% | 🟢 282 件成功 |
@waf-checker/cli | 93.5% 🟢 | 92.8% | 96.7% | 🟢 54 件成功 |
@waf-checker/worker | 成功 🟢 | — | — | 🟢 30 件成功 |
| モノレポ全体のスイート | 93.2% | 92.7% | 96.6% | 🟢 366 件のテストが成功 |
機能
コアテスト
- 対象URLを入力し、HTTPメソッド(GET、POSTなど)と攻撃カテゴリを選択します。
- 攻撃ペイロードを含むリクエストを送信します(パラメータ、ヘッダー、またはファイルパスとして)。
- 色分けされたターミナルおよびWebの結果:🟢 403/BLOCKED = ブロック済み、🔴 2xx/5xx = バイパスの可能性、🟠 3xx = リダイレクト。
- 結果はフィルタリング可能なテーブルに表示され、各ペイロードの詳細を確認できます。
🕵️ WAFリバースエンジニアリングとCRSマトリックス(--reverse)
- OWASP Core Rule Set(CRS v3/v4)マッピング:有効なルールIDと無効なルールID(
920xxx、921xxx、930xxx、931xxx、932xxx、933xxx、934xxx、941xxx、942xxx、943xxx、944xxx)を、Paranoiaレベル(PL1-PL4)とともに監査します。 - 検査ボディ制限の検出:二分探索プロービング(8KB~128KB、精度約1KB)により、バッファ切り捨ての境界を特定します。
- アノマリースコアリングモードの検出:協調スコアリングモードと厳格な正規表現ブロッキングモードをプローブし、スコアしきい値を特定します。
- 安全なレート制限プロービング:最大30 req/sまでの安全なランプアップを行い、HTTP 429を受信すると即座に早期終了し、
Retry-Afterを抽出します。
🛡️ WAF仮想パッチ適用と自動修復 (--patch / patch コマンド)
- 即時緩和: 検出されたWAFバイパス (HTTP 200) を、すぐにデプロイ可能なファイアウォールルール、リバースプロキシ設定、およびInfrastructure-as-Code (Terraform HCL / Cloud CLI) に自動変換します。
- 対応プラットフォーム (11方言):
- Cloudflare WAF: Wirefilter式 (
http.request.uri.query contains .../matches ...) およびcloudflare_rulesetTerraform HCL。 - AWS WAF v2: ネイティブJSONルールステートメント (
ByteMatchStatement、RegexPatternSet、OrStatement) およびaws_wafv2_rule_groupTerraform HCL。 - Google Cloud Armor: CEL式 (
request.path.matches(...)、request.headers[...])、gcloud compute security-policiesCLIコマンド、およびTerraformgoogle_compute_security_policy。 - Azure WAF (Front Door & App Gateway): カスタムルールJSON定義、
az network front-door waf-policyCLIコマンド、およびTerraformazurerm_cdn_frontdoor_firewall_policy。 - ModSecurity & OWASP Coraza:
@pmトークン折りたたみを伴うOWASP CRS互換のSecRuleディレクティブ (SecLang)。--patch modsecurityまたは--patch corazaでサポート。 - NGINX: ネイティブの
location ~* \.(ext)$ { return 403; }、location ~ /\.(git|svn)、およびmap設定ブロック。 - HAProxy: 高性能なネイティブACL (
path_end -i、path_beg -i、query -m sub -i、req.hdr()) とhttp-request deny deny_status 403。 - Caddy Server: 慣用的なCaddyfile名前付きマッチャー (
@waf_patch_*) とCEL式 (expression {http.request.uri.query}.matches(...)) およびrespond 403。 - Apache HTTP Server:
httpd.conf、<VirtualHost>、または.htaccess向けのmod_rewriteルール (RewriteCond %{QUERY_STRING}/%{REQUEST_URI}/%{HTTP_USER_AGENT}+RewriteRule ^ - [F,L])。--patch apacheでサポート。 - Envoy Proxy: route_configuration virtual_host向けに、RE2
safe_regexを介して:path/ヘッダーにマッチするルートエントリとdirect_response: 403(またはシミュレートモードでの転送・タグ付け)。--patch envoyでサポート。 - Kubernetes Ingress (K8s):
nginx.ingress.kubernetes.io/server-snippetアノテーションを伴う本番対応のkind: IngressYAMLマニフェスト。
- Cloudflare WAF: Wirefilter式 (
- 二層防御:
- 厳格なホットフィックス: 即時のゼロデイインシデント対応のための、誤検知リスク0% の正確なトークンシグネチャ。
- ヒューリスティックパターン: 脆弱性クラス構造全体をカバーする汎用正規表現。
- Web UI修復スタジオ: 全ベンダーにわたるライブプレビュー、ワンクリックのクリップボードコピー、フォーマット切り替え、ファイルエクスポートを備えたインタラクティブなダッシュボードモーダル。
攻撃カテゴリ (全28種)
SQLインジェクション、XSS、コマンドインジェクション、パストラバーサル、SSRF、ローカルファイルインクルージョン、機密ファイル、オープンリダイレクト、SSTI、XXE、NoSQLインジェクション、GraphQLインジェクション、JWT攻撃 (ヘッダー)、JWT攻撃 (パラメータ)、プロトタイプ汚染 (JSONボディ)、プロトタイプ汚染 (URL/パラメータ)、LDAPインジェクション、XPathインジェクション、スプレッドシート数式インジェクション、Log4Shell (JNDI)、CRLFインジェクション、HTTPパラメータ汚染、User-Agent、IPバイパス、HTTPリクエストスマグリング、Webキャッシュポイズニング、UTF8/Unicodeバイパス、WAF検査制限バイパス (パディング)。
WAF検出
- テスト前にWAFタイプを自動検出します (Cloudflare、AWS WAF、OWASP Coraza、BunkerWeb、ModSecurity、Akamai、Imperva、F5 BIG-IPなど)。
- 検出されたWAFに基づいて特定のバイパス手法を提案します。
- WAF固有の高度なペイロードに自動切り替えできます。
高度なペイロードとエンコーディング
- WAFバイパスペイロード — ダブルエンコーディング、Unicode、大文字小文字混在、コメントインジェクション、ポリグロットペイロード。
- 拡張ペイロード — 最新の回避手法。
- エンコーディングバリエーション — URL、Unicode、HTMLエンティティ、Hex、Octal、Base64エンコーディングと自動組み合わせ。
- Cloudflare、AWS WAF、ModSecurity向けのWAF固有バイパス。
HTTPプロトコル操作
- HTTP Verb Tampering — 一般的でないHTTPメソッドをテストします。
- Parameter Pollution — クエリ/ボディ間でパラメータを重複させ、分割します。
- Content-Type Confusion — ルールを回避するために代替のコンテンツタイプを使用します。
- Request Smugglingヘッダー。
- Host Header Injectionのバリエーション。
- ヘッダー経由のHTTPメソッドオーバーライド(
X-HTTP-Method-Overrideなど)。
バッチテスト
- 複数のURLを一度にテストします。
- 設定可能な同時実行数とリクエスト間の遅延。
- リアルタイムの進捗追跡。
🔀 リグレッション差分(--compare / --fail-on-regression)
- スキャンを以前に保存したJSONレポートと比較し、新たなバイパス(以前はブロックされていたが、現在はブロックされていないもの)、新たにブロックされたペイロード、および追加/削除されたテストを明らかにします。
- 悪化するWAF体制のみで失敗するCIゲート(
--fail-on-regression)であり、結果リスト全体では失敗しません — マネージドルールセットのドリフトを検出するのに最適です。
プロジェクト構成
このプロジェクトはNPM Workspacesモノレポとして構成されています:
packages/core/: コアセキュリティテストライブラリ、ペイロード定義、WAFフィンガープリンティングシグネチャ、および難読化エンコーダー。packages/worker/: 静的HTML/JS Web UIとJSON APIエンドポイントを提供するCloudflare Workerパッケージ。packages/cli/: ターミナルから直接監査を実行するためのNode.jsコマンドラインインターフェースツール。
インストールとビルド
ルートディレクトリから、依存関係をインストールし、すべてのワークスペースをビルドします:
npm install
npm run build
実行方法
1. Web 版 (Cloudflare Worker)
Worker の開発サーバーをローカルで実行するには (Wrangler が必要):
npm run dev:worker
Web UI は http://localhost:8787 でアクセスできます(8787 が使用中の場合は別のポートになります)。
Worker を Cloudflare にデプロイするには:
npx wrangler deploy --workspace=packages/worker
Worker には Workers Paid プランが必要です。スキャンおよび監査ページは、リクエストあたり 10,000 サブリクエスト向けにサイズ設定されています(wrangler.toml の [limits] subrequests、packages/core/src/check.ts の WORKER_SUBREQUEST_LIMIT)。Free プランではリクエストあたり外部サブリクエストが 50 件のみ許可されています。User-Agent バイパステスト(UI ではデフォルトで有効)を伴うスキャンページ 1 つ、またはリダイレクトを追跡する場合、それを超えてしまいます。
2. CLI バージョン (Node.js)
グローバルな waf-checker コマンドとしてインストールする(推奨)
リポジトリのルートで npm install && npm run build を実行した後、CLI をリンクして 任意のディレクトリ から実行できるようにします — リポジトリへの cd も、長い node .../dist パスも不要です:
# Expose `waf-checker` on your PATH from the built workspace
npm link --workspace @waf-checker/cli
# …now, from anywhere:
waf-checker --help
waf-checker check https://example.com
# Uninstall later with:
npm rm -g @waf-checker/cli
公開パッケージにはコードが同梱されているため、リポジトリなしでパック済みビルドをグローバルにインストールすることもできます: npm pack --workspace @waf-checker/cli を実行し、その後 npm i -g ./waf-checker-cli-*.tgz を実行します。
シェル補完 (bash / zsh / fish)
waf-checker completion <shell> は補完スクリプトを出力します (<shell> を省略すると $SHELL から自動検出されます):
# bash
waf-checker completion bash | sudo tee /etc/bash_completion.d/waf-checker
# or, without root: echo 'source <(waf-checker completion bash)' >> ~/.bashrc
# zsh (into a directory on your $fpath)
waf-checker completion zsh > "${fpath[1]}/_waf-checker"
# fish
waf-checker completion fish > ~/.config/fish/completions/waf-checker.fish