yara简介及API解析 - APT防御产品

yara简介及API解析

    YARA是一款识别和分类恶意软件样本的开源扫描引擎yara本身不提供杀毒软件的其他功能(比如自动更新、守护进程等),也没有维护自己的特征库,所以它只是个引擎而已。

    但是由于本身比较精简,很多第三方公司都用了它加入自身的产品,在yara的网站上可以看到不少公司包括“FireEye”,“RSA”等知名的安全公司。YARA支持多平台,Windows、Linux、Mac OSX三大平台都支持。

    Yara的主要特点是灵活的特征规则。它本身没有维护特征库,只能用户自己添加,当然也可以自己写脚本将clamav的特征库转换过来(需要注意的是YARA允许的最大跳转偏移量是255字节,因此当ClamAV特征码转成YARA特征时,需要将特征拆分成几个AND语句连接)。它的特征格式不是简单的一个字符串或者一段二进制数据,而是支持与或非等多种条件,简单地说可以算是“可编程”的规则。

Yara的安装也是比较简便的,解压tar包后运行bootstrap.sh脚本,./configure,make,make install就可以了。但是我在安装时遇到一个顽固的问题:

图片1.png 

经过多方查找,发现运行.bootstrap.sh以后接着运行autoreconf。下面正常运行./configure,make,make install就可以正确安装了。

下面重点介绍一下yara的C  API:

使用yara API的第一件事情就是初始化,初始化的工作由yr_initialize()函数完成。在你的程序将要结束的时候需要调用yr_finalize()函数释放相关的资源。多线程情况下只需要在主线程里初始化一次。

在使用你的特征库去扫描内存或者文件之前,需要先创建一个规则编译器。这个工作可以由yr_compiler_create()函数完成。与该函数对应的函数为yr_compiler_destroy()函数,规则编译器使用完成以后需要调用该函数释放相关的资源。

规则编译器得到以后,就需要将规则加入进去。可以使用yr_compiler_add_file()函数将一个特征库文件加入进来,也可以使用yr_compiler_add_string()函数加入一条特征。如果特征库文件中有个别的特征格式是错误的,加载函数不会停止加载,而是将正确的特征条目加载进去,将格式错误的特征数目作为函数返回值返回。所以如果你的特征库文件完全没有问题的话,那么函数的返回值将是0。

在成功加载了特征库文件以后,可以调用yr_compiler_get_rules()函数得到编译后的特征规则。该函数将返回一个’YR_RULES’结构体的指针。在下面提到的扫描函数中,这个指针将要被用到。’YR_RULES’结构体使用完之后,需要调用yr_rules_destroy()函数释放资源。

当得到了一个’YR_RULES’结构体指针以后,可以调用yr_rules_scan_file()函数来扫描文件,也可以调用yr_rules_scan_mem()函数来扫描一段内存。

图片2.png 

这是yr_rules_scan_file函数的原型。前两个参数一目了然,第三个参数是一个flag,唯一一个定义的flag为’ SCAN_FLAGS_FAST_MODE’,将它传入函数即可。第四个参数是一个回调函数,下图是该回调函数的原型:

图片3.png 

其中message参数可能的值如下:

图片4.png 

这是一个yara提供给我们,允许我们自定义扫描结果的一个接口。前两个参数都是yara来填入的。后一个参数我们可以传入一个指针,来获得你想要的一些值。第一个参数是特征是否匹配等情况,第二个参数是一个’ YR_RULE’结构体的指针。例如我自定义在有特征匹配的时候打印出匹配的该条规则的名称:

图片5.png 

yr_rules_scan_file函数的第五个参数即是传给回调函数第三个参数的指针,最后一个参数可以设定一个timeout值,如果为0的话即没有一直等待知道函数返回。

 


转载请注明出处 APT防御产品 » yara简介及API解析

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址