AppSec:通过未缓冲的管道回压(buncers-defail-open burning)实现同步倒转 dns后流增收分站响应
作者: roybj创建于 2026年8月11日更新于 2026年9月8日
标签kind/bugneeds/triage
** 概要**
随着"人群安全/rdns"后置流的安装,对于一个警报源的IP进行缓慢的PTR检索会冻结整个引擎的AppSec的带内检查. 补救组成部分请求随后超过了`APPSEC PROCESS-TIMEOUT ' (APPSEC-FAILURE-ACTION=passcovertion)和未打开,即请求未经检查----在最繁忙的东道主76-1,413超时/小时(~视察的0.5%,连发至480分/小时)上提供。
** 环境:** crowdsec v1.7.8 (rpm), AlmaLinux 8.10, 中央LAPI, 于 '127. 0.0.1: 7422' 上安装了 'crowdsec-openresty-bouncers' in-bandr', 默认的 ' routines: 1', ~ 600 提醒/h (WAF + log 假想), OS 解析器 = ISP 共享解析器, 无本地缓存, 默认 resolv.contimout (5sx2).
** 机制** (所有参考文献v1.7.8):
- " 人群安全/dns " 在 " runOutput " -- -- " parser.ververse-dns " ( " pkg/parser/enrich-dns.go:19 " ) -- -- 的溢出后流量中运行。 `net.LookupAddr' -- -- 同步、不受任何背景/时间限制。 敌对戒备的IP经常坐落在瘸子/低等PTR区 -- > 0.2-10分的外观.
- 在屏蔽时,事件列车会堵塞:溢出chan <-桶 <-剖析 <-获取输出(全部未被缓冲).
- AppSec跑者分享输出通道(
runner.outChan = out',pkg/购入/模块/appsec/run.go:137'),并在r.outChan <-evt ' (appsec runner.go:336/341/420/426')上分享 " 手取请求 " 。 对于带内匹配,在** 答复写入补救部分之前,即发生**。 (`appsec runner.go:472')。 InChan'也无阻(appsec/config.go:169'),因此每个处理器区块;所有飞行中检查都超过客户读取的预算->故障开裂。 bust大小 = 请求率 x PTR 拖放长度.
** 证据**
- Goroutine垃圾场* 被捕获,而
7422'号探测器被吊起(437毫秒)-运行输出 ' 在检查中被堵:
groutine 157 [IO等:
内部/ poll. runtime pollwait(...)
. . . . . . . .
网易.dnsPacketRundTrip (.
净额。 (* 解析器)。 交换(...)
net. (* 解析器). Try One Name (.)
net. (* Resolver). go LookupPTR (.) (中文(简体) ).
网. LookupAddr (...)
GitHub.com/crowdsec/pkg/parser.versect dns(.
GitHub.com/人群安全/人群安全/pkg/parser/enrich dns.go:19
GitHub.com/人群安全/人群安全/pkg/parser. (*RuntimeStatic). 应用(...)
GitHub.com/人群安全/人群安全/pkg/parser/运行时间. go:167
[... 逆流在主. 运行输出... ]- 内带剖析直方图是盲目的:1.04米检查,意味着0.47米,只有9个大于250米 -- -- 同期记录了数以万计的 > 1 000米的客户端读取时间。 摊位坐落在接受和时间跨度之间.
- 每集爆破秒跨90min窗口(22/22) 在LAPI +2...+12 s 后期有警报着陆 - 悬浮-当时-flush的签名.
- Burst-相邻的警报源 IPs在数小时后重新解析(温缓存=下限):10/26 仍然 > 200 ms,包含 1 056 ms 和一个 SERVFAIL 以 487 ms.
- ** 迁移实验:** `cscli后流消除人群安全/rdns-force' + 重新启动 . . . . . . .
内容来源: crowdsecurity/crowdsec