目录
Yara规则除了字符串、条件快外,还有其它的一些功能也十分重要。包括全局规则(global rules),私有规则(private rules),标签(tags)和元数据(metadata)。
1 全局规则(Global rules)
全局规则会对当前所有规则施加限制。例如用户希望所有规则都忽略掉超过特定大小限制的文件时,不需要每条规则中添加此限制(当然也可以这样做,但是工作量可能很大),只需要写一个全局规则即可。示例如下:
global rule SizeLimit
{
condition:
filesize < 2MB
}
用户可以定义任意数量的全局规则,而在实际匹配过程中,会优先全局规则进行匹配,如果全局规则匹配失败,则剩下的规则将不再进行匹配操作。
2 私有规则(Private rules)
私有规则即规则命中时也不会输出任何规则信息。此类规则一般用于被其它普通规则所引用,私有规则可以对规则进行保密防止泄露。私有规则也可以和全局规则共同修饰同一条规则。示例如下:
private rule PrivateRuleExample
{
...
}
private global rule PrivateGlobalRuleExample
{
...
}
3 规则标签(Rule tags)
Yara支持给规则添加标签,可用于查看Yara规则是进行过滤,即只显示指定tag的规则信息。每个规则可以包含任意数量的tag。tag的命名规则与规则标识符规则一致,只允许使用字母、数字和下划线,并且不能以数字开头且大小写敏感。示例如下:
rule TagsExample1 : Foo Bar Baz
{
...
}
rule TagsExample2 : Bar
{
...
}
4 元数据(Metadata)
Yara规则中除了字符串块和条件块外,还可以包含元数据信息用于补充说明规则相关信息例如作者、时间、引用连接、描述等。示例如下:
rule MetadataExample
{
meta:
describe = "Some string data"
num = 24
is_valid = true
strings:
$my_text_string = "text here"
$my_hex_string = { E2 34 A1 C8 23 FB }
condition:
$my_text_string or $my_hex_string
}
元数据的格式是数据标识符、等号和值的形式。元数据值可以是字符串(UTF8格式)、数值或者布尔值(true或者false)。元数据定义的标识符不能在条件块中使用。元数据不参与规则的匹配,它们唯一的用途就是用来存储规则的相关信息。