YARA规则经验总结

极客

YARA规则经验总结:从踩坑到真香的实战心得,看完少走两年弯路!

说真的,刚接触YARA那会儿,我真是被它折腾得够呛,写出来的规则要么匹配不到样本,要么一跑就把整个硬盘扫了个底朝天,误报多到怀疑人生,不过呢,踩坑踩多了,总归能攒下点经验,今天这篇YARA规则经验总结,就是我这两年摸爬滚打下来的一点真心话,希望能帮到正在被YARA折磨的你。

YARA规则经验总结

规则命名,别偷懒啊兄弟!

我以前写规则,文件名都是 rule1.yar、test.yar 这种,结果过了俩月回头一看——这写的都是啥?完全想不起来对应哪个家族、哪个样本,后来学乖了,命名规范必须安排上:家族名_行为特征_版本号.yar,Emotet_dropper_v2.yar,哎,别小看这一步,团队协作的时候,这玩意儿能救命,真的!

字符串选取,宁缺毋滥是真理

新手最容易犯的毛病就是——看到啥都往里塞,我当初也是,把样本里几十个字符串全写进去,结果呢?规则又臭又长,跑起来慢得像蜗牛,误报还特别高。

后来我总结出几个原则,跟大家唠唠:

  • 优先选特征性强的字符串,比如罕见的API组合、独特的加密常量、家族专用的URL路径;
  • 短字符串慎用,少于4个字节的字符串,误报率真心高得离谱;
  • 多用十六进制和正则,但正则别写太复杂,性能会哭的;
  • 一定要加 nocase 和 wide 的时候想清楚,不是所有场景都需要,滥用反而降低准确率。

条件逻辑,别一股脑堆 and

我见过不少人写条件,几十个字符串全部 and 起来,兄弟,这规则基本等于废了——少一个字符串就匹配不上,变种一多直接歇菜。

我的经验是:用 any of them 搭配权重,或者用 2 of ($s*) 这种灵活写法,关键特征用 all of,辅助特征用 any of,再配合 filesize 限制范围,效果立竿见影,对了,filesize 这个条件真的被严重低估了,加上它能过滤掉一大半无关文件,扫描速度嗖嗖的。

测试、测试、还是测试!

说句掏心窝子的话,不测试就上线的规则,都是耍流氓,我现在的流程是:好样本库 + 坏样本库 + 系统文件库,三库齐测,好样本要能命中,坏样本(正常软件)绝不能误报,系统文件更是红线。

每次改完规则,我都会拿几千个正常文件跑一遍,误报一个都得回头改,麻烦是麻烦了点,但总比上线后被打脸强吧?

性能优化,别让规则拖垮扫描器

YARA跑大批量样本的时候,性能问题特别明显,我的几个小技巧:

  1. 把最可能不匹配的条件放前面,YARA是从左到右短路的;
  2. 避免在 condition 里写复杂正则,能放字符串区就放字符串区;
  3. 用 private rule 拆分公共逻辑,复用又清晰;
  4. 别滥用 for 循环,那玩意儿性能开销真不小。

版本管理,血泪教训

最后说个容易被忽视的点——规则也要进Git!我曾经因为本地硬盘挂了,丢了半年积累的规则库,那心情,简直了……现在所有规则都走版本管理,每次修改写清楚commit message,谁改的、为啥改、对应哪个样本,一目了然。

好了,洋洋洒洒说了这么多,其实YARA规则经验总结这事儿吧,核心就一句话:多写、多测、多复盘,规则写得多了,手感自然就来了,希望我这些踩坑经验,能让你少走点弯路,有啥问题欢迎留言交流,咱们一起把规则写得漂漂亮亮的!

文章版权声明:除非注明,否则均为极客网安-咸鱼原创文章,转载或复制请以超链接形式并注明出处。

目录[+]