VulFi 进阶技巧:包装函数追踪与危险调用可达性分析 VulFi 进阶技巧包装函数追踪与危险调用可达性分析【免费下载链接】VulFiIDA Pro plugin for query based searching within the binary useful mainly for vulnerability research.项目地址: https://gitcode.com/gh_mirrors/vu/VulFiVulFiVulnerability Finder是一款基于 IDA Pro 的漏洞挖掘辅助插件它以查询式搜索为核心自动收集二进制中strcpy、sprintf、system等危险函数的全部交叉引用并借助 Hex-Rays 反编译器过滤明显误报帮助安全研究员把精力集中在真正有威胁的调用点上。本文介绍的两大进阶技巧——包装函数追踪与危险调用可达性分析正是挖掘深层漏洞、提升人工审计效率的关键手段。为什么基础扫描会漏掉真正的漏洞VulFi 的默认规则会扫描所有对危险标准函数的直接调用但真实世界的二进制很少裸奔开发者通常会把system、memcpy等函数封装进自己的业务函数包装函数 / wrapper再在几十个地方调用这个包装函数。直接调用虽然能被默认规则发现但包装层会打断参数的数据流导致 VulFi 无法准确判断参数是否可控、返回值是否被检查。只依赖基础扫描往往只能看到冰山一角。接下来介绍的两种进阶玩法能帮你把这类隐藏调用一网打尽。包装函数追踪让间接调用无所遁形VulFi 在规则文件中提供了wrappers开关。当把它设为true时插件不仅会标记对目标函数的直接调用还会自动向上追踪只负责传递参数的包装函数把调用包装函数的代码位置也一并列出。官方自带的 vulfi_rules.json 中Possible Dangling Pointer悬垂指针规则就是一个典型示例它对free、operator delete开启了包装追踪。包装函数追踪的判定逻辑位于 vulfi.py 的get_wrapper_xrefs中它会反编译调用点检查被调用函数的参数是否全部原样来自调用者的入参——只有当包装函数无添加、纯透传参数时才被认为是可信的 wrapper从而避免把无关函数误判为包装层。在扫描完成后VulFi 会以xxx (system wrapper)的形式在结果表中标注包装调用让你一眼看出哪里的代码通过包装函数触发了危险操作。危险调用可达性分析判断攻击面是否真的可控找到调用点之后下一个关键问题是这个危险调用真的能被攻击者触达吗VulFi 提供了reachable_from判断函数用于检查某个调用是否可以从指定的函数例如输入处理函数read、recv、sscanf沿调用链可达。使用方法非常简单在规则的自定义条件中写入function_call.reachable_from(read)这条规则的含义是标记所有从read函数可达的危险函数调用。如果某个system调用与用户输入函数位于同一条调用链上它就会进入结果列表并被赋予相应优先级反之那些只被内部初始化代码调用的危险函数则会被过滤掉帮助你迅速聚焦真正的攻击面。这项功能不依赖 Hex-Rays仅基于 IDA 的交叉引用解析即可工作因此即使在没有反编译器的环境中也能正常使用。组合进阶规则包装追踪 可达性分析把两种技巧结合起来威力更大。例如针对命令注入场景你可以编写如下自定义规则参考模板 rule_template_file.json对system、popen、execve开启包装函数追踪捕获所有间接调用结合reachable_from(read)条件只保留与外部输入处理函数有调用链关联的条目再叠加参数判断not param[0].is_constant()排除参数为硬编码字符串的误报。这样VulFi 的扫描结果就会从海量调用收敛为真正值得人工审计的高危点大幅压缩漏洞挖掘的时间成本。提升扫描准确率的实用技巧即使不使用 Hex-RaysVulFi 也内置了对常量参数的识别优化。它能够识别通过变量传递的静态字符串例如根据条件分支执行不同的固定命令并将其标记为低优先级避免你在system(echo hello)这类安全调用上浪费时间。此外自定义规则可用的判断函数非常丰富param[i].is_constant()判断参数是否常量、function_call.return_value_checked()判断返回值是否被检查、param[i].used_in_call_before([strlen])判断参数是否先经过长度校验——把这些组合进mark_if条件就能精细控制每一条规则的命中逻辑与优先级。批量审查让结果管理更高效扫描完成后VulFi 会以表格形式呈现每个可疑调用包含漏洞类型、所在函数、地址、状态和优先级。你可以双击任意一行跳转到 IDA 中的对应位置进行人工确认。从 2.1 版本开始VulFi 还支持多选操作按住Ctrl选中多行后可以批量标记状态False Positive/Suspicious/Vulnerable、批量添加注释或删除条目。如果界面没有即时刷新按几次CtrlU即可强制刷新视图。审查结论会随数据库一起保存下次打开时依然保留方便团队协作与审计留痕。小结包装函数追踪解决了调用被封装、扫描看不见的问题危险调用可达性分析则回答了调用能不能被攻击者触达的核心问题。两者结合配合 vulfi_rules.json 中丰富的自定义判断函数VulFi 就能从简单的交叉引用收集器升级为一台真正面向漏洞挖掘的精准扫描引擎。建议你在分析新二进制时先跑一遍默认规则建立全局视图再针对具体业务函数添加带包装追踪与可达性判断的自定义规则把每次审计都做得又快又准。【免费下载链接】VulFiIDA Pro plugin for query based searching within the binary useful mainly for vulnerability research.项目地址: https://gitcode.com/gh_mirrors/vu/VulFi创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考