freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

VulFi:一款针对源码漏洞扫描的IDA Pro插件
2022-05-06 21:07:18
所属地 广西


关于VulFi

VulFi,全称为Vulnerability Finder,即“漏洞发现者”,它是一个IDA Pro插件,可以帮助广大研究人员在二进制文件中查找漏洞。VulFi的主要目标是在一个单一视图中给研究人员提供包含了各种函数交叉引用的相关信息。对于可以使用Hexrays反编译器的情况,该工具还可以尝试排除针对这些函数的调用。

注意事项

在运行VulFi之前,请确保已经了解了你说要测试的代码,然后尝试识别所有的标准函数(例如strcpy和memcpy等),然后确保它们正确明明。插件是大小写不敏感的,因此MEMCPY、Memcpy和memcpy都是可以识别的。需要注意的是,搜索函数时需要精确匹配。

除此之外,VulFi将尽最大努力来过滤所有明显的误报。

工具安装

首先,使用下列命令将该项目源码克隆至本地:

git clone https://github.com/Accenture/VulFi.git

接下来,将项目中的vulfi.py、vulfi_prototypes.json和vulfi_rules.json这三个文件拷贝到IDA插件目录下即可:

cp vulfi* <IDA_PLUGIN_FOLDER>

工具使用

扫描

点击顶部菜单栏中的“Search > VulFi”即可初始化扫描任务。此时,工具将初始化一次新的扫描,或读取之前存储在“idb/i64”文件中的扫描结果。扫描完成后,数据将会自动存储到数据库中。

扫描结果包含下列内容:

1、IssueName:可疑问题的标题标签;

2、FunctionName:函数名称;

3、FoundIn:包含潜在安全问题引用的函数;

4、Address:检测到调用的地址;

5、Status:审阅状态,包含Not Checked、False、Positive、Suspicious和Vulnerable;

6、Priority:优先级,包含High、Medium和Low;

分析

当我们想要查看潜在的包含安全问题的函数实例时,可以直接双击目标代码行,IDA将会直接导航到内存地址。

设置自定义规则

工具还支持我们加载包含了多种自定义规则的自定义文件,下面给出的是自定义规则文件的数据结构:

[   // An array of rules

    {

        "name": "RULE NAME", // The name of the rule

        "alt_names":[

            "function_name_to_look_for" // List of all function names that should be matched against the conditions defined in this rule

        ],

        "wrappers":true,    // Look for wrappers of the above functions as well (note that the wrapped function has to also match the rule)

        "mark_if":{

            "High":"True",  // If evaluates to True, mark with priority High (see Rules below)

            "Medium":"False", // If evaluates to True, mark with priority Medium (see Rules below)

            "Low": "False" // If evaluates to True, mark with priority Low (see Rules below)

        }

    }

]

规则设置

可用变量

1、param[<index>]:用访问函数调用的参数(index起始为0);

2、function_call:用于访问函数调用事件;

3、param_count:获取传递给函数的参数数量;

可用函数

1、判断参数是否为常量:param[<index>].is_constant()

2、获取参数的数字值:param[<index>].number_value()

3、获取参数的字符串值:param[<index>].string_value()

4、调用后参数是否被设置为NULL:param[<index>].set_to_null_after_call()

5、函数的返回值是否经过检测:function_call.return_value_checked(<constant_to_check>)

工具使用演示

基础使用

添加自定义规则

许可证协议

本项目的开发与发布遵循Apache-2.0开源许可证协议。

项目地址

VulFi:GitHub传送门

参考资料

https://github.com/Accenture/VulFi/blob/main/rule_template_file.json


# 代码审计 # 代码分析 # 代码安全 # 代码缺陷检测
本文为 独立观点,未经允许不得转载,授权请联系FreeBuf客服小蜜蜂,微信:freebee2022
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者
文章目录