网络安全【免费下载链接】suricataSuricata is a network Intrusion Detection System, Intrusion Prevention System and Network Security Monitoring engine developed by the OISF and the Suricata community.项目地址https://gitcode.com/gh_mirrors/su/suricata点击查看免费下载DHCPDynamic Host Configuration Protocol租约协商过程中携带的时间信息租约时长、续约时间 T1、重绑定时间 T2是识别异常客户端行为、检测恶意 DHCP 配置的重要手段。本文以 Suricata 官方规则文档 dhcp-keywords.rst 为核心系统讲解dhcp.leasetime、dhcp.rebinding_time、dhcp.renewal_time三个检测关键字的语法、比较操作符与完整规则示例并结合仓库中 Rust 实现的解析器与检测引擎源码深入剖析这三个关键字从 DHCP 报文选项到规则匹配的底层调用链。读完本文你将能够直接编写出可投入实战的 DHCP 时间类 Suricata 检测规则。一、三个关键字速览Suricata 的 DHCP 应用层解析器位于 rust/src/dhcp/从 DHCP 报文中提取三类时间选项并对应注册了三个检测关键字关键字匹配内容对应 DHCP 选项dhcp.leasetimeDHCP 租约时间lease timeOption 51IP Address Lease Timedhcp.rebinding_timeDHCP 重绑定时间rebinding timeT2Option 59Rebinding (T2) Time Valuedhcp.renewal_timeDHCP 续约时间renewal timeT1Option 58Renewal (T1) Time Value三者均为整数型关键字使用无符号 64 位整数unsigned 64-bit integer作为匹配类型。单位均为秒与 DHCP 选项在报文中的原始编码4 字节大端序秒数保持一致。在 RFC 标准中这三个时间存在严格的递进关系renewal_time (T1) rebinding_time (T2) lease_time典型默认值为租约的 50% 与 87.5%。规则引擎本身不校验该大小关系但撰写检测规则时可以利用这一行业常识设计可疑性判定逻辑。二、语法与比较操作符三个关键字的语法完全一致通用形式为dhcp.keyword:[op]number其中[op]为可选的比较操作符。时间值既可以精确匹配也可以通过操作符进行大小比较文档给出的合法用法包括dhcp.leasetime:3 # exactly 3 dhcp.leasetime:3 # smaller than 3 dhcp.leasetime:2 # greater or equal than 2即支持:精确等于、小于、大于等于等操作符。从实现层面看这三个关键字全部复用 Suricata 通用无符号 64 位整型关键字解析与匹配框架SCDetectU64Parse/SCDetectU64Match见 rust/src/dhcp/detect.rs因此与dsize、flowint等 uint64 关键字保持一致的比较语义和取值处理。三、dhcp.leasetime匹配 DHCP 租约时间dhcp.leasetime匹配 DHCP 报文中 Option 51IP Address Lease Time声明的租约时长即服务器允许客户端使用该 IP 地址的时长秒。官方文档给出的语法与示例dhcp.leasetime:[op]number dhcp.leasetime:3 # exactly 3 dhcp.leasetime:3 # smaller than 3 dhcp.leasetime:2 # greater or equal than 2完整的规则示例注意必须使用alert dhcp协议匹配关键字才会生效alert dhcp any any - any any (msg:small DHCP lease time (3); dhcp.leasetime:3; sid:1; rev:1;)典型应用场景租约时间过短往往意味着 DHCP 服务器配置异常或存在针对租约池的恶意耗竭行为租约时间异常长则可能用于长期固定 IP 地址、逃避 IP 变化检测。可配合sid、rev与msg等通用关键字组织告警信息。从源码看匹配逻辑位于 rust/src/dhcp/detect.rs检测引擎在应用层事务DHCPTransaction上遍历 DHCP 报文的所有选项定位DHCP_OPT_ADDRESS_TIME即 Option 51常量定义见 rust/src/dhcp/dhcp.rs后将解析出的秒数值与规则中声明的整型条件做比较命中则返回 1否则返回 0。选项缺失时如 DHCP Discover 报文通常不带 Option 51直接判定不匹配。四、dhcp.rebinding_time匹配重绑定时间dhcp.rebinding_time匹配 DHCP 报文中的 Option 59Rebinding (T2) Time Value。重绑定时间是客户端在无法完成 T1 续约后进入重绑定阶段向任意服务器广播请求的时间点典型值为租约的 87.5%。语法与示例dhcp.rebinding_time:[op]number dhcp.rebinding_time:3 # exactly 3 dhcp.rebinding_time:3 # smaller than 3 dhcp.rebinding_time:2 # greater or equal than 2完整规则示例alert dhcp any any - any any (msg:small DHCP rebinding time (3); dhcp.rebinding_time:3; sid:1; rev:1;)源码中的匹配实现见 rust/src/dhcp/detect.rs通过dhcp_tx_get_time(tx, DHCP_OPT_REBINDING_TIME)提取 Option 59常量定义见 rust/src/dhcp/dhcp.rs的秒数值后交给 uint64 匹配框架比较。与dhcp.leasetime一样仅当 DHCP 报文中实际携带该选项时才可能命中。五、dhcp.renewal_time匹配续约时间dhcp.renewal_time匹配 DHCP 报文中的 Option 58Renewal (T1) Time Value。续约时间是客户端向原 DHCP 服务器单播续约的时间点典型值为租约的 50%。语法与示例dhcp.renewal_time:[op]number dhcp.renewal_time:3 # exactly 3 dhcp.renewal_time:3 # smaller than 3 dhcp.renewal_time:2 # greater or equal than 2完整规则示例alert dhcp any any - any any (msg:small DHCP renewal time (3); dhcp.renewal_time:3; sid:1; rev:1;)匹配实现见 rust/src/dhcp/detect.rs提取DHCP_OPT_RENEWAL_TIMEOption 58常量定义见 rust/src/dhcp/dhcp.rs后参与比较。六、源码级原理从报文选项到规则命中6.1 选项解析严格校验 4 字节长度三个时间值的原始编码均为 DHCP 选项的标准 TLV 格式code len valuevalue 为 4 字节大端序秒数。解析函数parse_address_time_option见 rust/src/dhcp/parser.rs专门处理这三个选项读取 code 与 len 字段若 len 不等于 4则判定该选项为 malformed格式畸形回落为通用选项解析并打上畸形标记长度合法时按大端序读取 u32 秒数包装为DHCPOptionWrapper::TimeValue。解析器主流程parse_option见 rust/src/dhcp/parser.rs将DHCP_OPT_ADDRESS_TIME、DHCP_OPT_RENEWAL_TIME、DHCP_OPT_REBINDING_TIME三个 code 统一路由到该函数其余选项走parse_generic_option。这也解释了为什么关键字虽声明为 64 位整型实际报文取值却来自 32 位字段底层统一复用 uint64 比较框架规则侧无需区分。6.2 关键字注册与事务匹配三个关键字的注册集中在SCDetectDHCPRegister见 rust/src/dhcp/detect.rs每个关键字都完成三件事通过SCDetectHelperKeywordRegister注册关键字名如dhcp.leasetime、描述与文档 URL通过SCDetectHelperBufferProgressRegister注册缓冲区且同时覆盖客户端到服务器STREAM_TOSERVER与服务器到客户端STREAM_TOCLIENT两个方向——这意味着 DHCP 请求与应答报文中的时间选项都能被匹配挂接Setup、AppLayerTxMatch、Free三个回调Setup 阶段调用SCDetectSignatureSetAppProto将规则绑定到 DHCP 应用层协议ALPROTO_DHCP并解析整型条件TxMatch 阶段在事务级执行比较Free 阶段释放解析上下文。匹配辅助函数dhcp_tx_get_time见 rust/src/dhcp/detect.rs遍历事务内消息的选项列表按 code 定位对应选项并取回秒数值若报文中不存在该选项则返回None匹配函数直接返回不命中。从该结构可以推断一条规则即使同时声明多个时间关键字各关键字也会独立作用于同一 DHCP 事务缺任一选项的报文只会对缺失项不命中不会导致整条规则失效。6.3 单元测试佐证解析器的单元测试位于 rust/src/dhcp/parser.rs并随仓库携带真实抓包样本discover.pcap、offer.pcap、request.pcap、ack.pcap。例如test_parse_discover从 discover.pcap 中截取 DHCP 负载并断言头部字段与选项序列DHCP_OPT_TYPE、DHCP_OPT_CLIENT_ID、DHCP_OPT_REQUESTED_IP、DHCP_OPT_PARAMETER_LIST、DHCP_OPT_END的解析结果test_parse_sname_overload等用例则验证了选项区扩展到 sname/file 字段overload时的解析正确性与畸形容错。这些测试为关键字依赖的选项解析层提供了可靠的正确性保障。七、与 EVE JSON 日志的呼应检测关键字与日志输出共用同一套解析结果DHCP 事务记录器 rust/src/dhcp/logger.rs 在输出 EVE JSON 时将DHCP_OPT_ADDRESS_TIME、DHCP_OPT_REBINDING_TIME、DHCP_OPT_RENEWAL_TIME分别映射为lease_time、rebinding_time、renewal_time字段注意日志中lease_time与rebinding_time仅在扩展日志模式extendedtrue下输出而renewal_time始终输出。EVE JSON 格式说明见 eve-json-format.rst给出的语义为lease_time服务器向客户端分配 IP 地址的时长renewal_time客户端自开始请求或续约流程起经过的秒数rebinding_time客户端开始续租前的秒数。这意味着在 output-json-dhcp.c 驱动的 EVE 日志中你可以先观察基线报文的lease_time/renewal_time/rebinding_time数值分布再据此编写精准的检测规则阈值实现日志标定 → 规则落地的闭环。八、实战规则建议8.1 组合三个时间关键字利用 T1 T2 租约时间的标准关系可在一条规则中同时限定三者识别时间配置异常如 T1 ≥ T2alert dhcp any any - any any (msg:DHCP renewal time not smaller than rebinding time; dhcp.renewal_time:1; dhcp.rebinding_time:1; dhcp.renewal_time:100; dhcp.rebinding_time:100; sid:1000001; rev:1;)注意Suricata 当前并不直接支持在规则内比较两个字段的大小需通过固定阈值组合间接表达上例仅演示多关键字叠加写法实际阈值应依据网络基线调整。8.2 联合 DHCP 报文类型关键字可结合 DHCP 消息类型过滤出应答类报文再评估时间例如仅对 DHCPOFFER/DHCPACK 中的租约时间进行判定alert dhcp any any - any any (msg:suspicious short DHCP lease offered; dhcp.leasetime:300; sid:1000002; rev:1;)8.3 匹配范围建议三个关键字均以秒为单位常见合法租约从数分钟到数天不等。对过短租约类规则建议阈值设在 3003600 秒区间并结合实际网络观察对异常长租约类规则如dhcp.leasetime:864000即超过 10 天需先确认业务是否存在长期固定地址场景避免误报。九、小结三个 DHCP 时间关键字语法统一dhcp.keyword:[op]number支持精确与大小比较取值类型为无符号 64 位整数单位为秒分别对应 DHCP Option 51 / 58 / 59且客户端与服务器两个方向均参与匹配底层由 rust/src/dhcp/parser.rs 的严格 TLV 解析长度必须为 4 字节与 rust/src/dhcp/detect.rs 的 uint64 匹配框架共同支撑并与 EVE 日志字段lease_time、renewal_time、rebinding_time一一对应规则必须声明alert dhcp协议头才生效选项缺失的报文对该关键字直接不命中。官方文档dhcp-keywords.rst是这三个关键字最权威的语法参考本文在其基础上补充了源码调用链、解析细节与实战组合用法可直接作为编写 DHCP 检测规则的技术手册使用。赞分享网络安全【免费下载链接】suricataSuricata is a network Intrusion Detection System, Intrusion Prevention System and Network Security Monitoring engine developed by the OISF and the Suricata community.项目地址https://gitcode.com/gh_mirrors/su/suricata点击查看免费下载相关推荐PHPStan 错误标识符 outOfClass.static 详解在类作用域外使用 static 关键字的检测与修复PHPStan 错误标识符 outOfClass.static 详解在类作用域外使用 static 关键字的检测与修复 outOfClass.static 是开发工具代码质量静态分析Suricata EVE JSON Schema 完全指南字段定义、检测关键字映射与验证工具链Suricata EVE JSON Schema 完全指南字段定义、检测关键字映射与验证工具链 Suricata 的 EVEExtensible Event网络安全Suricata 规则编写实战base64_decode 与 base64_data 关键字从入门到源码级原理Suricata 规则编写实战base64_decode 与 base64_data 关键字从入门到源码级原理 Base64 编码常被恶意软件和攻击流量用来混网络安全上一篇Edge-TTS 文本转语音从文字到配音 MP3 只差 3 条命令下一篇免费开源AMD Ryzen调试工具SMUDebugTool新手也能轻松掌控硬件性能创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考