用于检测CVE-2019-12255、CVE-2019-12256、CVE-2019-12258和CVE-2019-12260的Suricata LUA脚本
该脚本检测CVE-2019-12255,被检查的数据包需要设置了PSH、ACK和URG标志,并且有效载荷大小超过1500字节。然后检查紧急指针的值是否设置为0,这会在易受攻击的设备上导致整数下溢。
该利用基于将紧急指针下溢,通过将其设置为0。该缺陷导致目标recv()中的长度约束被忽略,并将TCP窗口中的所有可用数据复制到用户提供的缓冲区。规则检查有效载荷是否超过1500字节。
该脚本检测CVE-2019-12256,被检查的数据包在IP数据包中包含两个LSRR或SSRR选项。LSRR选项可通过十六进制值0x83识别,SSRR选项可通过十六进制值0x89识别;该利用提供了无效值,其长度小于定义路由时通常使用的长度(最少4字节),这在发送到服务器的数据包中出现两次。以下IP选项会由于无效的LSRR选项而触发栈溢出:
| 类型 LSRR | 长度 | LSRR指针 | 类型 LSRR | 长度 | LSRR指针 |
|---|---|---|---|---|---|
| \x83 | \x03 | \x27 | \x83 | \x03 | \x27 |
以下IP选项会由于无效的SSRR选项而触发栈溢出:
| 类型 SSRR | 长度 | SSRR指针 | 类型 SSRR | 长度 | SSRR指针 |
|---|---|---|---|---|---|
| \x89 | \x03 | \x27 | \x89 | \x03 | \x27 |
该脚本检测CVE-2019-12258,涉及的报文在PCAP中通过注释标记。第一次检测通过检查两个窗口缩放选项(一个无效,一个有效)来进行。第二次是未武器化的DoS变体,包含一个无效的窗口缩放选项。
窗口缩放选项的值为03表示正在使用该选项,位于TCP数据包中的偏移57处。利用的值必须为2(无效)才能触发此利用,该值位于偏移58处。通过检查这些值,若匹配则返回1(命中)。
该脚本检测CVE-2019-12260,被检查的数据包由格式错误的SYN数据包组成,该数据包包含一个字节值<=3字节的TCP-AO选项字段。TCP-AO选项可通过十六进制值0x29设置,根据RFC:https://tools.ietf.org/html/rfc5925#page-7
该利用基于将TCP-AO选项格式错误,将其设置为小于或等于3字节的任何值。这可以通过验证在偏移56处是否将十六进制值0x29作为选项设置来检查。