WAF 実測レポート
chaitin/blazehttp の公開コーパスにおける PingWAF WAF エンジンの実測結果 — 検知率、誤検知率、正確率、レイテンシ。
- PingWAF Strict+body
- 93.8%
- PingWAF Normal
- 60.2%
- SafeLine strict
- 76.17%
- SafeLine balanced
- 71.65%
- ModSecurity PL4
- 94.61%
- ModSecurity PL1
- 69.74%
- Cloudflare free
- 10.7%
- PingWAF Strict+body
- 0.06%
- PingWAF Normal
- 0.01%
- SafeLine strict
- 0.22%
- SafeLine balanced
- 0.07%
- ModSecurity PL4
- 52.46%
- ModSecurity PL1
- 17.58%
- Cloudflare free
- 0.07%
結果サマリー
バージョン 0.32.4、テスト日 2026-11-02、公開コーパス chaitin/blazehttp:生 HTTP メッセージ 33 877 件(悪意ある 658 / 正常 33 219)。
| 指標 | 結果 |
|---|---|
| 実効基準の検知率 | 96.6%(616/638) |
| 全量基準の検知率 | 93.8%(617/658) |
| 正常トラフィックへの影響 | 0.06%(19/33 219) |
| 正確率 | 99.82% |
| 静的ティアの p95 | ≤ 2 ms |
どの数字を使うべきか?96.6% の分母は 638 です:悪意ある 658 件のうち、プロキシ側 WAF には判定できない 20 件を除外しています — Content-Length / Transfer-Encoding のない POST/PUT 19 件(RFC 7230 によりリクエストボディは空)、および URL fragment にペイロードを隠した 1 件(HTTP パーサーはリクエストラインを構築する前に fragment を剥離します)。全量基準(93.8%)は参考として残しています。
他製品との比較
| 製品/モード | サンプル数 | 悪意ある | 検知率 | 正常 | 誤検知率 | 正確率 | 所要時間 |
|---|---|---|---|---|---|---|---|
| PingWAF Strict+body | 33 877 | 658 | 93.8%(617) | 33 219 | 0.06%(19) | 99.82% | p95 2 ms(loopback) |
| PingWAF Normal | 33 877 | 658 | 60.2%(396) | 33 219 | 0.01%(4) | 99.21% | p95 2 ms(loopback) |
| SafeLine 無料版・厳格(strict) | 33 669 | 575 | 76.17%(438) | 33 094 | 0.22%(73) | 99.38% | 64.34 ms(公衆網) |
| SafeLine 無料版・バランス(balanced) | 33 669 | 575 | 71.65%(412) | 33 094 | 0.07%(23) | 99.45% | 70.05 ms(公衆網) |
| ModSecurity PL4 | 33 669 | 575 | 94.61%(544) | 33 094 | 52.46%(17 362) | 48.34% | 28.89 ms(公衆網) |
| ModSecurity PL1 | 33 669 | 575 | 69.74%(401) | 33 094 | 17.58%(5 819) | 82.20% | 31.15 ms(公衆網) |
| Cloudflare 無料版 | 33 669 | 570 | 10.70%(61) | 32 780 | 0.07%(23) | 98.40% | 288.96 ms(公衆網) |
PingWAF の 2 行は自社測定(実効基準 96.6%、上節参照)。それ以外の数値は blazehttp README からの引用のままで、再計測はしていません。サンプル構成が異なり(33 877 vs 33 669 件、悪意ある 658 vs 570–575)、サードパーティの所要時間は公衆網の往復、PingWAF は loopback の判定レイテンシです — 比較するのは検知率と誤検知率であって、ミリ秒ではありません。
カテゴリ別検知率
| カテゴリ | 件数 | Strict+body | Normal |
|---|---|---|---|
| SQLインジェクション | 20 | 85.0% | 85.0% |
| XSS | 30 | 96.7% | 46.7% |
| パストラバーサル | 25 | 96.0% | 80.0% |
| コマンドインジェクション | 12 | 83.3% | 25.0% |
| SSRF | 13 | 100% | 7.7% |
| デシリアライゼーション | 6 | 100% | 16.7% |
| CRLF インジェクション | 5 | 100% | 60.0% |
| SSTI | 5 | 100% | 60.0% |
| XXE | 2 | 50.0% | 0% |
| Log4Shell | 1 | 100% | 100% |
| スキャナー | 1 | 100% | 0% |
| エンコード・難読化 | 538 | 93.9% | 61.9% |
今回の改善
- 中国語の
and 1=1検索・計測値を SQLi と判定しないよう修正(7 件)、.githubパスを dotfile 探査として扱わないよう修正(1 件)— 4 ティアの検知数は不変(396/473/500/617)で、正常サンプルへの影響は 12/20/12/27 から 4/12/4/19 に減少。 - 圧縮攻撃ボディのエンドツーエンド対応:悪意ある gzip 8/8 をブロック、良性 2/2 を通過。
- チャレンジ(503)とブロック(403)を分けて集計。
| ティア | 検知計 | blocked | challenged | 正常への影響 | p95 |
|---|---|---|---|---|---|
| Normal | 60.2%(396/658) | 396 | 0 | 0.01%(4) | 2 ms |
| Normal+body | 71.9%(473) | 473 | 0 | 0.04%(12) | 2 ms |
| Strict | 76.0%(500) | 490 | 10 | 0.01%(4) | 2 ms |
| Strict+body | 93.8%(617) | 607 | 10 | 0.06%(19) | 2 ms |
数字の出所
release ビルド、静的 TOML データプレーン(pingwaf -c、オリジンはモック);生 33 877 件のメッセージを生の HTTP/1.1 ソケットで loopback 上にバイト単位で再生、16 並列・5 ms 間隔;検知は 403 ブロックページと 503 チャレンジページのみを数え、プロトコル層・メソッド層の拒否は数えません;エンジンのユニットテスト 250 件が合格;すべての数字は次節のコマンドで再現できます。
再現
git clone --depth 1 https://github.com/chaitin/blazehttp /tmp/blazehttp
export BLAZEHTTP_ROOT=/tmp/blazehttp
cargo build --release --bin pingwaf --features=full
./tools/waf-bench/run_suite.sh --conf tools/waf-bench/conf/level-strict-body.toml --suite full --group strict-body --out results/0.32.4/strict-body --concurrency 16 --delay-ms 5