大模型在漏洞挖掘中的“逻辑跳跃”问题与解决方案

admin 2026-04-07 01:37:37 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: 本文分析大模型在漏洞挖掘中存在的逻辑跳跃问题,即模型基于不完整推理链错误判断漏洞存在。关键发现包括模型易将局部合理串联为整体成立、缺乏机械式校验能力。提出的解决方案包括四步纠偏法:拆分事实与推论、强制检查推理链条、标注最薄弱环节、采用漏洞假设等级替代绝对结论。 综合评分: 85 文章分类: 漏洞分析,AI安全,代码审计,安全工具,安全开发


cover_image

大模型在漏洞挖掘中的“逻辑跳跃”问题与解决方案

原创

做安全的小明同学 做安全的小明同学

大山子雪人

2026年4月6日 17:18 北京

大模型在漏洞挖掘中的“逻辑跳跃”问题与解决方案

在使用大模型进行代码审计时,经常会出现一种“看起来合理,但实际错误”的分析:

模型阅读代码后做了语义总结 基于总结构造攻击路径 得出“漏洞成立”的结论

但问题在于: 中间关键推理步骤没有被代码证实,或者没有逻辑依据支撑。

问题起源

在用agent分析某个app的代码时,给出了这样一条答复:

有一个很明显的逻辑推理问题: 事实A: 白名单: 只有当包名等于 com.samsung.android.bixby.agent 时,才允许继续执行。 与 事实B: 那么对于 Bixby 路由来说,调用者(Referrer)就变成了浏览器自己。 得出: 结论C: 从而绕过校验

显然浏览器的包名并不是com.samsung.android.bixby.agent,也就是绕过校验的结论不成立。

当我把原样的回复内容发给chatgpt时,大模型可以发现此类逻辑不一致的点

当我指出存在逻辑问题以后,

• 问题一:容易不切实际的幻想

比如用了关键点死穴等一系列夸张的措辞,而且漏洞存在的假设条件更是出奇的离谱

  • • 问题二:代码逻辑审计不严格

实际代码是

    private booleanisAllowedPackage(Intent intent0) {
        if(!GEDUtils.isGED() && "android.intent.action.VIEW".equals(intent0.getAction())) {
            varuri0= (Uri)intent0.getParcelableExtra("android.intent.extra.REFERRER");
            Strings= intent0.getStringExtra("android.intent.extra.REFERRER_NAME");
            intent0.removeExtra("android.intent.extra.REFERRER");
            intent0.removeExtra("android.intent.extra.REFERRER_NAME");
            Strings1=this.getReferrer() == null ? null : this.getReferrer().getHost();
            intent0.putExtra("android.intent.extra.REFERRER", uri0);
            intent0.putExtra("android.intent.extra.REFERRER_NAME", s);
            if(s1 != null && "com.samsung.android.bixby.agent".equals(s1)) {
                returntrue;
            }

            androidx.compose.runtime.changelist.a.v("NOT allowed package : ", s1, "BixbyLauncherActivity");
        }

        returnfalse;
    }

实际上用于判断的package name来自于getReferer调用。

从以上两个误诊的问题来看,大模型有能力识别正确,但回答总会出现逻辑推理不依据事实,没有实事求是,说大话。需要进行审计,纠正。

问题根因

模型把“局部合理”串成了“整体成立”

这个例子里,错误不是知识点完全错了,而是推理链里有一段“默认成立”了:

  • • BixbySBrowserLauncherActivity 只信任 com.samsung.android.bixby.agent
  • • SBrowserLauncherActivity 可被外部调用
  • • 同 APK 内可能转发
  • • 于是 referrer 就能变成“可信来源”

问题就在最后一步,“会转发”不等于“转发后 referrer 一定满足白名单”。这是典型的桥接推理偷换。

代码逻辑:

String s1 = this.getReferrer() == null ? null : this.getReferrer().getHost();

if(s1 != null && "com.samsung.android.bixby.agent".equals(s1)) {
    return true;
}

模型错误推理: 读取 EXTRA_REFERRER → putExtra 透传 → referrer 可控 → 绕过校验成立

问题一:把“相关变量”当成“判定变量”。s1是判定变量,EXTRA_REFERRER只是相关变量,把“看起来相关”当成“真正参与判定”。

问题二:没有验证数据流是否闭合。看到 referrer → 假设可控 → 推断绕过成立。缺失关键步骤:数据流闭合验证。

要避免这类问题,核心不是“多问一句”这么简单,而是要让模型在输出前,强制做一次链路断点检查。

为什么大模型容易犯这种错

因为它很擅长:

  • • 补全常见攻击路径
  • • 生成形式上流畅的安全分析
  • • 把“像漏洞”的东西讲得很像真漏洞

但它不天然擅长:

  • • 对每个边界条件做机械式校验
  • • 在证据不足时主动降级结论
  • • 区分“可构思攻击链”和“已闭合攻击链”

所以在安全审计场景里,最需要的不是更会说,而是更会刹车。

一套实用的纠偏方法

可以把这类分析任务固定成 4 步:

1. 先拆成“事实”与“推论”

要求模型明确区分:

  • • 已知事实
  • • 待验证推论
  • • 最终结论

比如这里:

  • • 已知事实

  • • Activity exported

  • • 存在 getReferrer().getHost() 白名单判断

  • • 白名单是 com.samsung.android.bixby.agent

  • • 待验证推论

  • • 外部可控 getReferrer()

  • • SBrowserLauncherActivity 会转发到目标 Activity

  • • 转发后 referrer 会变成满足白名单的值

2. 强制检查“因此”前面的每一跳

“这一跳是代码已证实,还是我脑补的?”

在这个案例里,“由同 APK 内转发,从而绕过 referrer 校验”,这句话至少包含两跳:

  • • 是否真的存在转发
  • • 转发后 referrer 是否真的变成白名单值

两跳都没证实,就不能直接下“可绕过”的结论。

3.输出时附一个“最薄弱环节”

让模型每次给结论时必须附带一句:“本结论最依赖的未证实前提是:XXX” 比如这里最薄弱环节就是:

  • • getReferrer() 是否可被攻击者伪造
  • • 中转 Activity 是否会保留/覆盖/生成符合白名单的 referrer

这句话特别有用,因为它能把“貌似确定”变成“可验证假设”。

4. 不直接说“存在漏洞”,改说“漏洞假设等级”

你可以让模型按等级输出:

  • • 已证实:代码或实验已直接证明
  • • 高概率:只差一个小验证
  • • 可疑:存在思路,但关键链路未闭合
  • • 不成立:中间逻辑断裂

在这个例子更合理的表述其实应该是:

存在可疑点,但当前绕过链条未闭合,不能直接认定可利用。


免责声明:

本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。

任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。

本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我

本文转载自:大山子雪人 做安全的小明同学 做安全的小明同学《大模型在漏洞挖掘中的“逻辑跳跃”问题与解决方案》

评论:0   参与:  0