IDP 签名语言增强功能
IDP 签名语言结构允许 IDP 生成更有效的签名,从而有助于减少误报。这可以使用签名语言来实现,签名语言使用基于规则的语法、上下文和匹配条件来定义攻击模式。
了解签名语言构造
Junos OS 中的 IDP 签名语言构造是 IDP 签名语言中可用的构造。这些结构旨在增强网络安全措施的检测和防御能力。该语言提供了一组用于定义签名的工具和功能,这些签名可以检测各种类型的恶意活动和异常流量模式。网络管理员可以创建有效的安全签名。这些构造包括用于定义流量模式、指定警报条件以及合并上下文信息以提高检测的准确性和相关性的选项。
IDP 引擎代码中支持以下构造:
-
Depth- 指定数据包中搜索给定模式的深度。深度值不是相对的。 例如,可以将深度指定为 100。
<Depth>100</Depth>
-
Offset—允许您指定从何处开始搜索数据包中的模式。偏移值不是相对的。 例如,可以将偏移量的值指定为 100。
<Offset>100</Offset>
-
Within- 确保模式匹配之间最多有 N 个字节。模式匹配始终相对于之前的匹配项。 例如,如果 N 的值为 10。
<Attack> <Member>m01</Member> - - - - - - </Attack> <Attack> <Member>m02</Member> - - - - - - <Within>10</Within> - - - - - - </Attack>
-
Distance- 允许您指定 IDP 引擎必须相对于上一个模式匹配搜索指定模式的位置。这始终与之前的比赛有关,并且距离值可以是负数。 例如,如果 N 的值为 10,则一旦 m01 匹配,m02 应在 m01 匹配结束后的 10 个字节后出现:
<Attack> <Member>m01</Member> - - - - - - </Attack> <Attack> <Member>m02</Member> - - - - - - <Distance>10</Distance> - - - - - - </Attack>
-
Ipopts—所有列出的 ipopts 在安全包中定义了相应的异常,在设备或 IDP 引擎上配置时可以检测到:
-
rr - 记录路由
-
生命周期终止 - 列表结束
-
nop - 无作
-
ts - 时间戳
-
sec - IP 安全性
-
esec - IP 扩展安全性
-
lsrr - 松散源路由
-
ssrr - 严格的源路由
-
satid - 流标识符
-
-
Byte extract— Byte extract 关键字有助于根据长度编码协议写入签名,读取数据包有效负载(以字节为单位),并将其保存为变量以备后用。字节提取可以是相对的,也可以是非相对的。每个链式攻击可以使用任意数量的字节提取。例如:
<Byte_Extract> <Byte>4</Byte> <Offset>12</Offset> <Relative>True</Relative> <Endian>Big</Endian> <Bitmask>0x45</Bitmask> <Multiplier>2</Multiplier> <String>dec</String> <align>True</align> <Name>msg_len</align> </Byte_Extract>
表 1 列出了构造的
Byte extract
字段。表 1:字节提取输出字段 田
字段说明
align
指定字节对齐方式。
bitmask
以十六进制格式指定 AND 运算的位掩码(1-4 个字节)。
bytes
指定要从数据包 (1-10) 中提取的字节数。
endianness
指定处理 IDP 引擎读取的字节的字节序。
multiplier
指定要相乘的字节数的值。
offset
指定有效负载中 IDP 引擎应从中开始处理的偏移量字节数。
relative
指定是否使用相对于上次阵列匹配的偏移量。
string
指定应分析字符串数据的数据类型。
var-name
指定要在其他规则选项中引用的变量的名称。
-
Byte test-Byte test 关键字允许您使用作值测试字节字段。字节测试既可以是相对的,也可以是非相对的。
> , < , =, &, ^ ,<=,>=
是受支持的运算符,提取的最大字节数为 4。例如:M02 <SLE_Constructs> <Within>50</Within> <Byte_Test> <Byte>4</Byte> <Operator>=</Operator> <Offset>12</Offset> <Value>12</Value> <Relative>True</Relative> <Endian>Big</Endian> <Bitmask>0x45</Bitmask> <String>dec</String> <align>True</align> </Byte_Test>
表 2 列出了该构造的
Byte test
字段。表 2:字节测试输出字段 田
字段说明
bitmask
以十六进制格式指定 AND 运算的位掩码(1-4 个字节)。
bytes
指定要从数据包 (1-10) 中提取的字节数。
endianness
指定处理 IDP 引擎读取的字节的字节序。
negate
检查运算符是否为 true。
offset
提及偏移量变量名称或偏移量值
operator
指定要对提取的值执行的作。
relative
指定是否使用相对于上次阵列匹配的偏移量。
rvalue
转换后的值使用 右值进行测试。.
string
指定应分析字符串数据的数据类型。
-
Byte jump— 字节跳转 关键字用于为长度编码协议编写的签名,以跳过有效负载的特定部分,并在非常特定的位置执行检测。字节跳转值既可以是相对值,也可以是非相对值。例如:
<Byte_jump> <Byte>2</Byte> <Offset>8</Offset> <Relative>true</Relative> <Multiplier>2</Multiplier> <From_beginning>true</From_beginning> Endianess>little</Endianess> </Byte_jump>
表 3 列出了构造的
Byte jump
字段。表 3:字节跳转输出字段 田
字段说明
align
指定应处理 IDP 引擎读取的字节的字节的字节序。
bitmask
以十六进制格式指定 AND 运算的位掩码(1-4 个字节)。
bytes
指定要从数据包 (1-10) 中提取的字节数。
endianness
指定 IDP 引擎读取的字节应用于处理的字节字节序。
from-beginning
启用从有效负载开头跳转。
from-end
启用从有效负载末端跳转。
multiplier
指定要相乘的字节数的值。
offset
提及要使用的偏移量变量名称或偏移量值。
post-offset
指定要向前或向后跳跃的字节数 (-65535..65535)。
relative
指定是否使用相对于上次阵列匹配的偏移量。
string
指定应分析字符串数据的数据类型。
-
Byte math- Byte math 关键字允许您对提取的值、指定值或现有变量执行数学运算。字节数学值将结果存储在一个新的结果变量中。支持等
1) '+' | '-' | '*' | '/' | '<<' | '>>'
作。它既可以是相对的,也可以是非相对的。例如:<SLE_Constructs> <Byte_Math> <Byte>4</Byte> <Operator>+</Operator> <Offset>12</Offset> <rValue>12</rValue> <Relative>True</Relative> <Endian>Big</Endian> <Bitmask>0x45</Bitmask> <String>dec</String> <align>True</align> <result_var>var1</result_var> </Byte_Math> <SLE_Constructs>
表 4 列出了构造的
Byte math
字段。表 4:字节数学输出字段 田
字段说明
bitmask
以十六进制格式指定 AND 运算的位掩码(1-4 个字节)。
bytes
指定要从数据包 (1-10) 中提取的字节数。
endianness
指定应处理字节读取的字节的字节序。
offset
指定要开始处理的有效负载的字节数 (0..65535)。
operator
指定要对提取的值执行的作。
relative
指定是否使用相对于上次阵列匹配的偏移量。
result
指定应将结果存储到的变量名称。
rvalue
指定要用于特定数学运算的值。
string
指定应在其中分析字符串数据的数据类型。
-
Is-data-at— is-data-at 关键字允许您验证有效负载是否在指定位置包含所需数据。例如:
M02 <SLE_Constructs> <Isdataat> <Value>50</Value> <negate>false</negate> </Isdataat> <SLE_Constructs>
表 5 列出了构造的
Is-data-at
字段。表 5:Isdataat 输出字段 田
字段说明
negate
否定 is-data-at 测试的结果。
offset
提及偏移量变量名称或偏移量值。
relative
指定是否使用相对于上次阵列匹配的偏移
-
Detection Filter— 检测过滤器定义攻击应匹配的速率。根据签名中指定的选项值,维护源或目标的计数。检测过滤器位于外部
<SLE_Constructs>
,是按攻击指定的,而不是按攻击成员指定的。如果在 10 秒的间隔内从同一源 IP 检测到 5 次攻击,则该攻击将被标记为攻击。 例如:<Detection_filter> <count>5</count> <scope>src</scope> other options dst/session <time>10</time> </Detection_filter>