【发布时间】:2018-11-27 10:01:50
【问题描述】:
实际上,我正在为我的 Snort IDS 制定规则并尝试解决 Billion Laughs 攻击的问题。它只不过是对预定义变量的递归调用。 Snort 规则可能包含 pcre,因此我尝试为这种攻击构建智能规则。这可能是这种攻击的一种简单形式,在实体线之间有随机线。
<!DOCTYPE data [
<!ENTITY a0 "dos" >
<!ENTITY a1 "&a0;&a0;&a0;&a0;">
<!ENTITY a2 "&a1;&a1;&a1;&a1;&a1;&a1;">
<!ENTITY a1 "&a2;&a2;&a2;&a2;&a2;&a2;">
test
<!ENTITY a1 "&a2;&a2;&a2;&ertertert;&a2;&a2;">
<!ENTITY a1 "&a2;&a2;&a2;&ertertert;&a2;&a2;">
<!ENTITY a1 "&a2;&a2;&a2;&a2;&a2;&a2;">
d
dd
<html abc>
a
<!ENTITY a2 "&a3;&a3;&a3;&a3;&a3;">
<!ENTITY a1 "&a0;&a0;&a0;&a0;&d5;">
]>
<data>&a2;</data>
这是我的实际规则:
(<!ENTITY\s[a-zA-Z0-9]*\s"(&[a-zA-Z0-9]+;){4,}">(\s?)[^]]*){5,}
解释我想要达到的目标:
只要有至少 5 个实体行和至少 4 个 & 参数,就必须触发该规则。如果5行一个接一个就没有问题, 但是实体行不需要一个接一个。所以我必须在两个实体行之间捕获其他所有内容,这使得整个事情成为一个大的终止问题,因为 [^]]* 捕获了除 ] 之外的所有内容,并且还捕获了整个实体行并使我的量词 {5, } 完全没用。实际上我找不到任何好的解决方案来解决我的问题。
感谢你们的帮助!
【问题讨论】:
-
这乍一看很完美。现在我必须明白了!
标签: regex xml pcre rules snort