Webアプリケーションファイアウォールと攻撃に対する保護
概要
WAF/WAAPは、アプリケーションレベルでHTTP (S )/WebSocketトラフィックをフィルタおよび制御します。現代のスタックは、アンチボットエンジン、API保護、レート制限、仮想パッチ、CI/CDとの緊密な統合によって補完され、ルールはコードと同じくらい安全に展開されます。
建築の役割と場所
Edge/CDN WAF(クラウド):低遅延、グローバル評判/管理ルール、L7 DDoS。
自己ホスト型WAF (on-prem/K8):内部ネットワークとの深い統合、微調整。
WAAPアプローチ:WAF+APIゲートウェイ関数(スキーマ検証、authZ)、アンチボット、L7 DoS、 mTLS。
インクルージョンスキーム:アプリケーションの前にリバースプロキシ;K8sの進入のコントローラー;サービスメッシュフィルタ;サイドカーだ。
保護モデル
負のセキュリティ(署名/CRS):既知のテクニック(SQLi/XSS/SSRF/RCE)の高速カバレッジ。
肯定的なセキュリティ(allow-list):「有効な」リクエスト(メソッド/パス/スキーマ/コンテンツタイプ)のみを許可します。
バーチャルパッチ:コード修正へのエクスプロイトのオンラインブロッキング。
コンテキスト:静的コンテンツ、API、管理者、ダウンロード、Webhookのさまざまなポリシー。
典型的な脅威と対策
OWASP Top 10: SQLi、 XSS、 IDOR/BOLA、 SSRF、テンプレートインジェクション、デシリアライゼーション、ミスコンフィグ。
L7 DDoS:スローリクエスト/ヘッダー、ホットエンドポイントのバースト→保護:レート制限、チャレンジ、オートブロック。
ボット/スクレーパー:動作、周波数、「非人間的」パターン、デバイス指紋、ダイナミックトークン。
資格情報の詰め込み/ATO:ログインの傍受/列挙→IP/ASNによる異常、速度規則、追加要因。
ダウンロード:タイプ/サイズ/マルチスキャンアンチウイルス、メディアゾーンの「画像のみ」。
API/GraphQL:スキーマ検証、'maxDepth'/'maxCost'、未完成のワイルドカードの禁止、メソッドとヘッダーの制御。
ポリシーとルールデザイナー
任意のアプリケーションの基本スケルトン:1.トランスポート:TLS 1。2+/1.3のHSTS、敏感なバックエンドのmTLS。
2.メソッド:allow-list ('GET、 POST、 PUT、 DELETE、 PATCH、 OPTIONS')はリソースごとに一意です。
3.パス:厳密なマスク/正規表現;admin/billing-別の接頭辞/ドメインへ。
4.ヘッダー:ホワイトリスト、危険の禁止('X-Original-URL'、非標準)不必要。
5.Body:ルートに沿ったJSON のみ/Multipartのみ;「Content-Length」、 「login/search」のバイナリのブロックを制限します。
6.レート制限:IP/ASN/キー/組織ごと;「高い」要求の別の限界。
7.アンチボット:行動スコアリング、「非刺激」チャレンジ、接着アイデンティティ(クッキートークン、FP JA3/TLS)。
8.CRS/管理ルール:有効、FPでチューニング。
9.Wirthパッチ:既知のパラメータ/攻撃パターンの高速ブロッキング。
10.ログ/メトリクス:統一フォーマット、'trace_id'との相関、FP/TPレポート。
チューニング練習: 誤検出を減らす方法
トラフィックサンプリングを使用して、Detect-only/Count-mode (shadow)で新しいルールを実行します。
コンテキストで例外を作成します('path =/search'、 'param=q'は特殊文字を許可します)。
ゾーンを分割する:「パブリックページ」と「機密操作」(攻撃性のしきい値は異なります)。
コンベヤー:規則→ステージング→カナリア(1-5%)→prod;FPメトリクスによるロールバック。
回帰テスト用の「false」ペイロードのディレクトリを維持します。
DevSecOpsへの統合
CI: Gitの静的ルール;tests: replay request+syntheticsをattackディレクトリからリプレイします。
CD: カナリア計算、フィーチャーフラグ;「政治的」モニタリング(ルール変更=変更)
RASPとSAST/DAST: WAFは補足しますが、コード補正を置き換えません。
観測可能性とSLO
メトリクス:- WAFによるp95/99レイテンシ。ブロックされた/逃されたの割合;管理ルールとカスタムの共有;「攻撃率」
- アンチボット:課題/変更、FP/TPの共有。
- L7 DDoS:バーストレート、自動緩和イベント。
- "0以下。承認された操作/日の5% FP"
- 「p95 overhead WAF ≤ 10」。
- 「バーチャルパッチTTR ≤ 30分」
- アラート:ルール解除後の4xx/5xxスパイク;FPの成長;captcha通路にドロップ;JWKS/mTLS検証の劣化。
サンプル構成
ModSecurity+OWASP CRS (Nginx)
nginx
Enabling ModSecurity modsecurity on;
modsecurity_rules_file /etc/nginx/modsec/main. conf;
'/etc/nginx/modsec/main。conf':
apache
SecRuleEngine On
Include /usr/local/owasp-modsecurity-crs/crs-setup. conf
Include /usr/local/owasp-modsecurity-crs/rules/.conf
Example of an exception for a search parameter
SecRule REQUEST_URI "@beginsWith /search" "id:900100,phase:1,pass,nolog,ctl:ruleRemoveByTag=attack-xss"
SecRule REQUEST_URI "@beginsWith /search" "id:900101,phase:2,pass,ctl:ruleRemoveTargetById=942100; ARGS:q"
AWS WAF (JSON、レート制限+カントリーリストブロック)
json
{
"Name": "prod-web-acl",
"Scope": "CLOUDFRONT",
"DefaultAction": { "Allow": {} },
"Rules": [
{
"Name": "BurstLogin",
"Priority": 1,
"Statement": {
"RateBasedStatement": {
"Limit": 100,
"AggregateKeyType": "IP",
"ScopeDownStatement": { "ByteMatchStatement": {
"SearchString": "/login",
"FieldToMatch": { "UriPath": {} },
"TextTransformations": [{ "Priority": 0, "Type": "NONE" }],
"PositionalConstraint": "CONTAINS"
}}
}
},
"Action": { "Block": {} },
"VisibilityConfig": { "MetricName": "BurstLogin", "SampledRequestsEnabled": true, "CloudWatchMetricsEnabled": true }
}
]
}
Cloudflare(表現ルール)
(http. request. uri. path contains "/admin" and ip. geoip. country ne "UA")
or (http. request. uri. path eq "/login" and cf. threat_score > 10)
or (http. request. uri. path contains "/api" and not http. request. headers["authorization"][0] contains "Bearer ")
NGINX: 簡単な方法/ボディルール
nginx location /api/withdraw {
limit_except POST { deny all; }
if ($request_method = POST) {
set $cl $http_content_length;
if ($ cl = "") {return 411;} # length is required if ($ cl> 1048576) {return 413;} # ≤ 1MB add_header X-Idempotency-Required "true";
}
}
GraphQL: ポリサー
'maxDepth=6'、 'maxCost=1000'、販売中の'__スキーマ'の禁止、操作の許可リスト、ヘッダの検証('Content-Type: application/json')。
アンチボットとマンフレンドリーチェック
目に見えないチャレンジ(キャプチャなしのJSチャレンジ)、「高価な」パスの実証、行動分析(動き/タイミング)。
TLS/JA3指紋、IP/ASN評判、プロキシ/VPNリスト(合理的な制限内)。
フォーム上のトラップ(ハニーポットフィールド)、動的フォーム/セッショントークン。
プライバシー保護:追跡、透明なポリシー、オプトアウトオプションを最小限に抑えます。
フォーカスAPI
Schema-first:検証のためのOpenAPI/JSONスキーマ;追加フィールドの禁止。
Auth:必須ベアラーJWTまたはmTLS;'Authorization'を拒否します。
レート/クォータ:キーごと/組織ごと;超過した場合-「ソフトブロック「/減速。
Webhooks: HMAC署名、'timestamp+nonce'、短い受信ウィンドウ。
GraphQL:上のリミッターを参照;操作の名前/ラベルを記録します。
ダウンロードとメディア
サイズ制限、MIME/拡張子のホワイトリスト、ファイル名の変更;
AVスキャン(マルチエンジン)、ImageMagickポリシー(危険なデコーダーなし);
別のドメイン、サーブ専用イメージの親指サービス。
管理者と重要な分野の安全性
ドメイン/パス、一般的なASN/国からのmTLS/ban、ハードレート制限、JITアクセス、IP allow-list。
追加の信号(デバイスの姿勢、リスクスコア)→2番目のチェックが必要です。
オペレーション、インシデント、仮想パッチ
Runbook:ブロックルールのクイックリリース、TTL制限、コマンド通知。
ロールバック基準:growth 4xx/5xx> threshold、 FP> threshold、 p95 latency→。
Post-mortem:回帰ルールセットにテストを追加し、SIGMAアラートをSIEMにコミットします。
コンプライアンスとプライバシー
最小ログ:path/method/code/block reason/identifiers;PII/ボディシークレットは保存しないでください。
ポリシーログの保存期間;アクセス-役割別;ディスク上の暗号化。
iGaming/fintechの機能
支払い/支払い/ウォレット:組織ごとのクォータ、mTLSからPSPへのパスの厳格な許可リスト、PSP WebhookのHMAC。
ATO/ボーナス乱用:ログイン/登録/プロモーションコード、行動制限、アンチボットのベロシティルール。
コンテンツプロバイダ/スタジオ:個々のドメイン/ポリシー、IP/ASN allow-list、 Time-to-Wallet monitoring/conversions on WAF impact。
地域要件:地理政策(国/地域)、GDPRの治療透明性。
実装ロードマップ
1.ゾーンのインベントリ(パブリック、API、管理パネル、ダウンロード)。
2.基本プロファイル:TLS、 allow-listメソッド/パス、管理ルール/CRS。
3.敏感な経路でのレート制限+アンチボット。
4.仮想パッチと緊急ルールプロセス(SLA ≤ 30分)。
5.ルール、ステージング/カナリア/シャドウモードのCI/CD。
6.テレメトリー、SLO、ルールの回帰テスト。
7.例外の定期的なレビューとバイパスの「クリーニング」。
よくある間違い
「すべてのCRSを最大にする」→FP雪崩とチームバーンアウト。
カナリアとシャドウモードのないルール。
セグメンテーションなし:すべてのための1つのポリシー。
API/GraphQLの詳細(スキーマ/制限)を無視します。
相関なしのログ('trace_id')と品質メトリックなし。
よくあるご質問
WAFは安全なコードを置き換えますか?
いいえ、そうではありません。これは緩和レイヤーと「仮想パッチ」ですが、コードの技術的負債を排除する必要があります。
ハードブロックをオンにする時が来たことを理解するには?
シャドウモードレポートが低いFPを示し、ルールの回帰テストがある場合。
APIには別のWAFが必要ですか?
APIゲートウェイとのWAAP/統合の向上:スキーム、制限、認証、webhook署名。
合計
効率的なWAF/WAAPは、DevSecOpsプロセス、テレメトリー、明確なSLOによってサポートされている基本的なCRS/Managed Rules、ポジティブなモデル、アンチボット、リミット、仮想パッチの組み合わせです。このアプローチは、脆弱性への迅速な対応、自動攻撃への耐性、およびUXとパフォーマンスへの予測可能な影響を提供します。