0

我正在尝试创建一个 YARA 规则,它匹配一个 URL 和一个任意目录,同时排除一个特定目录。例如,它需要匹配以下任何一个:

https://example.com/foo
https://example.com/bar
https://example.com/eggs
https://example.com/eggsAndHam
https://example.com/greenEggs
https://example.com/anythingatall

但具体不是这样:

https://example.com/baz

使事情复杂化的是,如果文件包含一个带有任意目录的 URL 以及泄露的 URL,则该文件必须匹配。因此,包含以下内容的文件将匹配:

https://example.com/ougsrhoiujrnae
https://example.com/baz

如下所示:

https://example.com/biuhOIUYui

但不是以下内容:

https://example.com/baz

如果 YARA 支持负前瞻,这将是微不足道的https:\/\/example\.com\/(?!baz),但事实并非如此。有没有办法在 YARA 中做到这一点?

4

1 回答 1

0

如果您知道字符串第一部分的长度,实现此目的的一种方法是:

  1. 使用正则表达式选择字符串
  2. 遍历返回的偏移量
  3. 对于每个偏移量,添加字符串已知部分的长度
  4. 检查偏移量+已知字符串长度后是否跟我们要排除的字符串,如果是则排除

对于上面的例子,我们知道它https://example.com有 19 个字节长,如果它后面跟着字符串,我们可以排除匹配/bar

rule url_not_ending_in_bar
{
    strings:
        $url = /https:\/\/example\.com\/\w*/
        $exclude = "/bar"

    condition:
        for any i in (1..#url): (
            not $exclude at @url[i] + 19
        )
}
于 2021-06-29T22:00:11.290 回答