高速漏洞签名匹配技术解析
1. 协议解析与漏洞签名编写基础
在处理协议消息时,协议字段可分为两类:核心字段和应用字段。核心字段定义了协议的结构和语义,例如HTTP中的 Content-Length ,它决定了协议中后续消息体的大小;而应用字段对应用有意义,但对于理解消息的其他部分并非必需,如 Accept-Charset 。
在编写漏洞签名时,采用的方法是仅解析和存储核心字段以及与漏洞相关的应用字段,跳过其余部分。这样可以避免存储无关字段,将资源集中在必要的字段上。
对于许多文本协议,尽管在RFC中使用递归BNF语法定义,但往往可以使用一些技术在不进行递归解析的情况下识别核心字段。例如,HTTP头部在单独的行中指定,因此可以通过简单的字符串搜索在消息中定位特定的头部。多字符串匹配器会跳过与漏洞无关的头部字段,而不涉及解析器的其他部分。其他文本协议也有类似结构,如SMTP使用“MAIL FROM”和“RCPT TO”等带标签的命令,可在消息流中轻松识别。
2. 二进制协议处理
- 匹配原语 :与文本协议不同,二进制协议通常缺乏明确的字段标签。解析器通过字段在消息中的位置(相对于消息起始位置或其他字段)来推断其含义。在简单情况下,解析器可以使用固定偏移量来查找字段;在更复杂的情况下,字段的位置会根据字段间的依赖关系而变化(例如可变长度数据),这使得解析依赖于数据。因此,解析器通常需要遍历许多或所有前面的字段,但这仍比完全解析简单,因为解析器只检查与结构相关的字段的长度和值。
- 二进制遍历器
超级会员免费看
订阅专栏 解锁全文

3776

被折叠的 条评论
为什么被折叠?



