如何编写YARA规则匹配指定URL路径且排除特定子目录?
可行YARA规则实现方案
实现思路
- 不需要依赖负向前瞻,利用YARA原生的匹配计数能力即可实现需求
- 核心逻辑:只要文件中存在至少1个目标域名下非排除路径的一级目录URL,就命中规则,仅当所有目标域名的URL都是排除路径时不命中
完整YARA规则
rule match_example_com_url_without_only_baz { meta: description = "匹配example.com下任意一级目录URL,仅当所有匹配都是/baz时不命中" strings: // 匹配example.com下所有一级目录URL(默认过滤路径后的参数、锚点) $all_domain_url = /https:\/\/example\.com\/[^\/\s"\?#]+/ ascii wide // 匹配需要排除的特定路径 $excluded_url = "https://example.com/baz" ascii wide condition: // 匹配到的总URL数大于排除路径的匹配数,说明至少有一个非排除的URL存在 #all_domain_url > #excluded_url }
规则适配说明
- 若需要匹配带查询参数、锚点的URL,可将
$all_domain_url的正则调整为/https:\/\/example\.com\/[^\/\s"]+/ - 规则中的
ascii wide修饰符用于同时匹配普通ASCII编码和宽字节编码的字符串,若仅需匹配纯文本文件可删除wide修饰符
规则效果验证
- 仅存在
https://example.com/baz:#all_domain_url = 1,#excluded_url = 1,条件不成立,不命中,符合要求 - 仅存在
https://example.com/foo等非排除路径:#all_domain_url = 1,#excluded_url = 0,条件成立,命中,符合要求 - 同时存在非排除路径和
/baz路径:#all_domain_url ≥ 2,#excluded_url = 1,条件成立,命中,符合要求
内容的提问来源于stack exchange,提问作者jdgregson
相关产品推荐
相关产品推荐

