Yara 4.5中ssdeep模糊哈希无法识别的问题及实现咨询
解决Yara中ssdeep模糊哈希的使用问题
问题原因
你遇到的invalid field name "ssdeep"错误,核心原因是Yara默认编译时未启用ssdeep支持——即便安装了hash模块,也不会包含ssdeep相关函数。Yara的hash模块仅在编译时手动指定启用ssdeep后,才会提供hash.ssdeep和hash.ssdeep_compare两个函数。
确认Yara是否支持ssdeep
执行以下命令查看Yara编译特性:
yara --version
如果输出内容中包含+ssdeep,说明已支持ssdeep;若没有该标识,需要重新编译Yara。
重新编译带ssdeep支持的Yara
- 先安装ssdeep依赖包:
- Debian/Ubuntu系统:
sudo apt-get install libfuzzy-dev - RHEL/CentOS系统:
sudo yum install ssdeep-devel
- Debian/Ubuntu系统:
- 下载Yara 4.5版本的源码并解压,进入源码目录;
- 编译并安装:
编译完成后再次执行./configure --enable-ssdeep make sudo make installyara --version,确认输出中已包含+ssdeep。
正确编写ssdeep规则
示例1:匹配指定模糊哈希值
import "hash" rule SuspiciousSSDeep { meta: description = "Detects files matching a specific ssdeep hash" condition: // 替换为目标文件的完整ssdeep哈希值 hash.ssdeep(0, filesize) == "384:WXbLxOvM4zqFet3z+6t6eQ8z6eQ8z6eQ:WXbLxOvM4zqFet3z+6t6eQ8z6eQ" }
示例2:匹配相似度高于阈值的文件
如果需要检测与目标哈希相似度较高的文件,使用hash.ssdeep_compare函数(返回0-100的相似度数值):
import "hash" rule SuspiciousSSDeepSimilar { meta: description = "Detects files with ssdeep similarity > 70 to target hash" condition: hash.ssdeep_compare( hash.ssdeep(0, filesize), "384:WXbLxOvM4zqFet3z+6t6eQ8z6eQ8z6eQ:WXbLxOvM4zqFet3z+6t6eQ8z6eQ" ) > 70 }
原规则的问题说明
你之前的规则存在两处错误:
- 将
$ssdeep_hash设为"ssdeep:"不符合逻辑——hash.ssdeep函数返回的是完整的模糊哈希字符串(格式为块大小:哈希段1:哈希段2),并非仅ssdeep:前缀; - 由于Yara未启用ssdeep支持,模块中不存在
hash.ssdeep函数,因此触发字段不存在的错误。
内容的提问来源于stack exchange,提问作者user23567008
相关产品推荐
相关产品推荐

