降低 WAF 中的误报:将 OWASP 规则与 AI 上下文相结合

发布: (2025年12月31日 GMT+8 15:54)
6 min read
原文: Dev.to

Source: Dev.to

《降低 WAF 假阳性:结合 OWSQL 规则与 AI 上下文》封面图

问题

并非所有 API 请求的权重相同。

  • 产品目录服务每秒处理 数万请求,且无法容忍 100 毫秒的延迟
  • 高度敏感的管理面板每秒处理 ≈10 请求,并且可以容忍该延迟。

大多数 Web 应用防火墙(WAF)——ModSecurity、Cloudflare、Fastly——在整个应用中使用 单一默认规则集。虽然它们支持自定义规则,但 在没有大量手动配置的情况下无法提供每条路由的安全配置文件

速度 vs. 准确性

  • 基于规则的 WAF 能在微秒级检测 SQL‑i/XSS 攻击,但由于缺乏上下文,会产生大量 误报
  • 基于大语言模型的安全 能理解上下文,但会为每个请求增加 不可接受的延迟

解决方案: 一种 混合 方法,将确定性模式匹配与概率性 AI 相结合。

Argus – 混合开源 WAF (Go)

Argus 结合:

  • Coraza(兼容 OWASP 的规则引擎)用于快速模式匹配。
  • Gemini LLM 用于上下文分析。

它提供 三种风险配置文件,让开发者可以为每条路由选择合适的延迟与上下文平衡。

核心挑战

  1. 我们如何在不强制二选一的情况下融合速度和上下文感知?
  2. 当外部依赖失效时,WAF 的降级表现如何?
  3. 如何在生产环境中实现无痛的采纳?

合并速度与上下文

确定性的基于正则表达式的规则捕获大多数攻击。加入 AI 上下文可消除合法请求看起来可疑的误报(例如,提到 DELETE TABLE 的教程)。

由于每个端点的延迟和安全预算不同,Argus 允许开发者 为每条路由选择模式,而不是全局设置。

解决方案:三种模式

模式行为
Latency FirstCoraza 决定 allow / block;不涉及 AI。
Paranoid每个请求在 Coraza 检查后由 Gemini 进行验证
Smart Shield仅当 Coraza 阻止请求时,才运行 Gemini 以消除误报。

每个请求的 Gemini 判决都会记录到数据库中,以供管理员后续分析。

请求处理流程图,展示 WAF Coraza 过滤器后接三种模式:LatencyFirst(即时阻止/允许)、SmartShield(对 WAF 阻止进行 AI 验证)和 Paranoid(AI 检查所有请求)

弹性:AI 失效时会怎样?

Argus 依赖 Gemini 的 API 来提供 Smart ShieldParanoid 模式。如果 Google 的服务出现中断:

  • OWASP 规则仍然会拦截明显的威胁(SQL 注入、XSS 等)。
  • AI 层会直接失效,但核心防护仍然有效。

断路器

一个 三状态断路器 确保优雅降级:

状态条件操作
关闭(正常)Gemini 响应请求通过所选模式流转。
打开连续 3 次 Gemini 失败保持打开 30 s;所有模式仅回退到 Coraza。
半开30 s 超时后向 Gemini 发送单个测试请求。
• 成功 → 关闭
• 失败 → 打开,再持续 30 s

断路器状态图,显示三种状态:半开、关闭和打开,基于测试成功/失败和超时条件的转换

Drop‑in Adoption in Production

Argus hides its internal complexity behind two simple integration paths.

1. Go SDK

For native Go applications, Argus is a middleware that wraps your http.Handler.

package main

import (
    "net/http"
    "time"

    "github.com/priyansh-dimri/argus"
)

func main() {
    waf, _ := argus.NewWAF()

    client := argus.NewClient(
        "https://argus-5qai.onrender.com",
        "api-key",
        20*time.Second,
    )

    cfg := argus.Config{
        Mode: argus.SmartShield, // or argus.LatencyFirst / argus.Paranoid
    }

    shield := argus.NewMiddleware(client, waf, cfg)

    http.Handle("/api/", shield.Protect(yourHandler))
    http.ListenAndServe(":8080", nil)
}

2. Docker Sidecar

For services written in Node, Python, Ruby, PHP, etc., run Argus as a lightweight sidecar reverse proxy. No code changes are required.

docker run -d \
  --name argus-sidecar \
  -p 8000:8000 \
  -e TARGET_URL=http://host.docker.internal:3000 \
  -e ARGUS_API_KEY=api-key \
  -e ARGUS_API_URL=https://argus-5qai.onrender.com/ \
  ghcr.io/priyansh-dimri/argus-sidecar:latest

All traffic is routed through the sidecar before reaching your application.

优化热点路径

因为中间件位于每个请求的关键路径上,性能至关重要。Argus:

  • 缓存 适当情况下的最新 Gemini 响应。
  • 最小化 Coraza 路径中的内存分配。
  • 使用无锁原子操作 运行断路器逻辑。

这些优化将额外的延迟保持在对延迟敏感的服务容忍范围内,同时仍提供 LLM 的上下文安全网。


祝开发愉快!

During development we focused on optimizing the hot path, achieving:

- **262 µs** processing time for clean requests.  
- **151 ns** overhead for the circuit breaker (atomic state checks instead of mutexes).  
- **56 %** parallel efficiency when scaling up to 4 cores.

You can check out the source code and contribute at  
[github.com/priyansh-dimri/argus/](https://github.com/priyansh-dimri/argus/).
Back to Blog

相关文章

阅读更多 »