静态规则提取

静态规则提取

 传统的静态病毒检测引擎(类clamav引擎)支持的泛化能力有限(内存引擎亦是如此),在基本的二进制字节串比较,正则匹配,子表达式逻辑运算的功能之上,并未有太多的泛化能力。出于安全的考虑,提取的特征也不能太弱了,否则容易误报,因此提取泛化性较强的静态规则是件麻烦的事。
 静态规则一般是一段变化可控的模式串(字节串),其变化范围能通过正则进行表示。如果要修改该段特征,就需要大改源代码的话,则该特征串的泛化性就较好。这模式串提取的位置不一定要与特定的恶意功能相关,只要与正常软件有所区分,能标识这类软件就行。

代码类特征

(1)手动编写的汇编代码模板

 这类特征常出现于Shellcode加载代码中,该段代码常以二进制的形式硬编码在其他项目中。以下面一段代码为例,该段代码的作用是加载附加在文件末尾的Shellcode,变量为Shellocde偏移量和Shellcode大小。常见的混淆方法为在各指令间加入nop指令(即0x90)。
在这里插入图片描述

提取的规则为Trojan.Win32.Agent.Test;Target:1;0;E8000000005E4881C6???4889C748C7C1???F3A4FFE0

(2)特殊函数序言

 有些程序的函数不使用常见C/C++调用惯例,而是使用自定义的调用惯例传递参数。
下面是一段函数是Shiz病毒的代码片段,该函数通过ebx传递参数,并将参数保存到edi。
在这里插入图片描述
 这一段代码在Shiz病毒中是普遍存在的,但是函数序言代码不是固定的,所以需要跳过一定范围的代码,同时为了确保从函数开始处开始比较,所以需要在开头匹配一定长度的0xcc字节。

提取的规则为Trojan.Win32.Shiz.Test;Target:1;1;4d5a;0/\xcc{5,}(?!\x55\x8b\xec).{10,21}\x83\xec.{1}\x8b\xfb\x57/

(3)特殊的调用序列,参数结构

 有些函数的参数中包含固定的常数参数,且数量较多,同时还具有一定的语意时,就可以提取调用该函数的二进制代码作为规则特征。
 如下图所示,病毒先调用VirtualProtect修改内存属性,在以修改内存属性的内存地址为新线程的起始地址和新线程参数。
在这里插入图片描述

提取的规则为Trojan.Win32.Agent.Test;Target:1;2;5669727475616c50726f74656374;437265617465546872656164;0&1/\x6a\x40\x68.{4}([\x50-\x5f])\xff.{3}\x6a\x00\x6a\x00\1\1\x6a\x00\x6a\x00\xff/

 由于编译器每次在编译后的代码循序和寄存器都可能会发生变化,这一点在64位代码中尤为突出。所以64位下的这种代码特征可能就没有太好得效果。

字符串类特征

(1)特殊字符串

 这类字符串很多,只要是不会在正常软件中出现的字符串就行,比如说病毒的开关项目名,特殊路径,恶意命令,特殊的模式串之类的。一般这类规则居多。
下面这条规则就是提取了样本中的一些特殊文件名,

  1. %s%s\edge.xml
  2. %s%s\edge.jpg
  3. %s%s%s.exe
  4. %s%s%s.dat

Trojan.Win32.Agent.Test;Target:1;0&1&2&3;257325735C656467652E786D6C;257325735C656467652E6A7067;257325735C25732E657865;257325735C25732E646174

基于Bindiff进行自动化二进制同源比较

 因为从单一样本中就能看出该家族样本的特征的难度较高,对于加壳样本静态引擎也难以解决,所以需要对每次得到的一批样本进行下类型分类和同源关联处理。类型分类可以通过调用Detect-It-Easy实现,同源关联可以通过python-bindiff库自动化调用IDA和Bindiif实现。
 python-bindiff库有个问题,一次比较花费的时间较长。因为比较是两两进行的,所以当数量大了消耗的时间就会非常的多,所以需要对这个流程进行下提速,一类是减少比较次数,一类是提高代码效率。
(1)在比较过程前需要对样本进行一些筛选,如去除不需要关联的样本,样本类型不同时不进行比较,优化比较流程。
(2)在分析库代码能否优化时发现有一个嵌套了多重循环的函数花费了很多时间,而且删除后还不影响库的正常使用,挺神奇的。

  • 13
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

极光1234

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值