掘金 人工智能 11小时前
SAST结合大模型的逻辑漏洞识别探索
index_new5.html
../../../zaker_core/zaker_tpl_static/wap/tpl_guoji1.html

 

本文探讨了一种创新的应用安全测试方法,将传统静态应用安全测试(SAST)工具与大语言模型(LLM)相结合,旨在解决SAST在识别业务逻辑漏洞方面的局限性。通过构建AI Agent驱动的自动化审计流水线,该方案模拟人类安全专家的审计智慧,利用RAG、ToT、ReAct等框架,实现代码深度解析、威胁建模、攻击路径构想与严谨验证。实践表明,该混合方法显著提升了逻辑漏洞的检测效率和准确率,为DevSecOps闭环提供了有力支持,同时也指出了知识库质量、工具鲁棒性及LLM稳定性等方面的挑战。

💡 **传统SAST的局限与LLM的潜力**:传统的SAST工具擅长模式化漏洞,但在理解业务逻辑、识别支付绕过、越权访问等复杂逻辑漏洞方面力不从心。大语言模型(LLM)凭借其代码理解和逻辑推理能力,为解决这一难题提供了新思路,能够模拟人类专家进行代码审计,但直接将代码喂给LLM存在成本和数据安全风险。

🤖 **AI Agent驱动的自动化审计流水线**:文章提出了一种AI Agent驱动的自动化审计框架,结合了SAST的深度分析能力和LLM的推理能力。该框架分为四个阶段:建立认知(代码解析与知识库构建)、构想攻击路径(威胁建模与攻击假设生成)、验证追踪(利用场景验证)以及报告总结与修复,旨在系统性地发现复杂漏洞。

🧠 **核心技术框架支撑**:该方案运用了RAG(Retrieval-Augmented Generation)技术构建语义检索的向量知识库,使LLM能够基于项目信息进行“认知建立”;ToT(Tree-of-Thoughts)框架用于模拟人类发散性思维,生成多样的攻击假设并进行初步评估;ReAct(Reasoning + Acting)框架则通过“推理”与“行动”的结合,驱动LLM调用工具进行严谨的漏洞验证,克服了LLM的“幻觉”问题。

📊 **显著的效率与准确性提升**:通过在包含已知逻辑漏洞的靶场项目测试,该方案实现了60%的召回率和83%的准确率,审计效率是人工审计的近10倍。生成的报告包含清晰的证据链和可直接使用的修复代码建议,有效提升了DevSecOps流程的自动化水平。

⚠️ **面临的挑战与未来方向**:尽管成效显著,该方案仍面临知识库构建质量、工具集鲁棒性、LLM“幻觉”的抑制以及成本与效率的平衡等挑战。未来的优化方向包括提升底层解析准确性、增强工具通用性、完善LLM的自我修正机制以及在分析深度与成本间寻找最佳平衡点。

传统静态应用安全测试(SAST)工具在检测SQL注入、XSS等模式化漏洞方面表现出色,但在识别与业务流程紧密相关的逻辑漏洞时则显得力不从心。本文探索了一种将 SAST 与大语言模型(LLM)相结合的混合方法

一、前言

在现代复杂的应用中,逻辑漏洞(如支付绕过、越权访问、优惠券滥用等)造成的损失往往比传统漏洞更为严重。这些漏洞与特定的业务场景深度绑定,缺乏统一的、可被正则表达式或通用规则库捕获的“漏洞模式”,传统SAST工具由于无法理解业务功能逻辑,所以几乎无法覆盖此类问题。

而大语言模型(LLM)的出现为代码安全扫描带来了新的思路。其强大的代码理解和逻辑推理能力,使其具备了像人类专家一样对代码进行审计的潜力。然而,直接将整个项目代码投喂给大模型进行“漫无目的”的审计,不仅成本高昂,效果也难以保证,并且企业代码作为重要的商业资产,上传到大模型平台会带来数据安全与隐私合规等方面的风险。

本文的实践探索,旨在构建一条由AI智能体(Agent)驱动的自动化审计流水线。该框架深度结合了静态分析技术与大语言模型(LLM)的推理能力,旨在模拟人类专家的审计智慧,系统性地发现复杂漏洞,为SAST在逻辑漏洞识别领域提供了全新的、可落地的思路。

二、传统SAST的困境

要理解LLM(大语言模型)融入代码安全分析的价值,首先需要明确传统静态应用安全测试(SAST,Static Application Security Testing)工具的能力边界和现实困境。

2.1工作原理

传统SAST工具主要依赖预设的规则和模式来扫描代码中潜在的风险。其核心技术包括:

2.2 核心局限性

尽管SAST工具功能强大,但其“机械化”的本质导致了以下核心局限:

2.3 面临的挑战

三、人工代码审计

审计方式与思路

(1)信息收集:
(2)定位核心功能:
(3)关联代码与功能映射:
(4)提出利用假设 :
(5) 利用场景验证:

四、如何让LLM像人一样进行逻辑漏洞分析

为了让AI Agent能够模拟人类安全专家的审计智慧,我们将其核心工作流解构为四个关键阶段:建立认知、构想攻击路径、验证追踪以及报告总结与修复。 每个阶段都由特定的技术框架驱动,以系统化的方式完成其目标。

4.1   第一阶段 :建立认知 (Cognition)
代码深度解析与知识库构建

将整个项目的源代码,转化为机器可以理解和检索的结构化知识,为后续的分析提供全面且精准的上下文。

ⅰ.  代码图谱生成:通过使用传统SAST工具,将项目源码编译成一个包含了控制流图(CFG)、数据流图(DFG)和函数调用关系图(Call Graph)的、高度结构化的代码属性图(CPG),这是所有后续分析的数据基石。

ⅱ.  架构信息提取: 随后对代码属性图执行一系列图查询算法。这些算法能精确地梳理出项目中所有的API端点、核心数据模型以及关键的架构组件信息,并且通过脚本工具,提取项目中的环境信息(README.MD、目录结构、配置文件等)。

ⅲ.  构建向量知识库: 将提取到的信息整合并进行向量化处理,构建一个支持语义检索的向量知识库,最终,我们得到了一个可以充分描述项目信息的知识库,它通过调用工具供大模型进行查询。

此阶段的核心是RAG (Retrieval-Augmented Generation) 技术。RAG是一种将LLM的强大生成能力与外部知识库的精准检索能力相结合的技术框架。它允许LLM在回答问题前,先从我们构建的可信知识库中检索相关信息,并将这些信息作为上下文一同提供给模型。这使得LLM的回答不再仅仅依赖其静态的、预训练好的内部知识,而是基于了即时的、与问题高度相关的事实依据,从而完成了对项目的“认知建立”。

4.2   第二阶段 :构想攻击路径

模拟威胁建模与攻击构想

ⅰ.  核心功能识别: Agent首先通过调用知识库检索工具,向LLM提供项目的整体信息,让其识别出如“订单创建”、“用户认证”等高风险的核心业务功能。

ⅱ.  生成攻击假设: Agent向LLM下达一个基于业务背景的指令,例如:“针对‘订单创建’流程,请提出几种最有可能的逻辑漏洞攻击假设。”

ⅲ.  思维分支探索: 在指令下,LLM会生成一个“攻击假设树”,每个分支都是一个独立的攻击思路,如“分支A:价格篡改”、“分支B:越权操作”、“分支C:重复提交”等。

ⅳ.  初步评估与剪枝: Agent会引导LLM根据知识库中的信息(如API是否存在防重放机制),对每个分支的可行性进行快速的初步评估,从而优先探索最有希望的攻击路径。

此阶段由ToT(Tree-of-Thoughts) 框架驱动。ToT是一种让LLM模仿人类进行复杂问题解决的思维模式。当人类专家面对一个需要战略规划或探索的任务时,通常不会沿着一条路走到黑,而是会同时思考多种可能性,评估优劣,然后选择最有希望的路径深入探索。ToT框架就是将这种“思维树”的探索过程赋予了LLM,使其能够进行有效的头脑风暴和威胁建模。

图1  ToT演示图

4.3   第三阶段 :验证追踪
实现利用场景验证

ⅰ.  制定验证计划: Agent接收到任务后,LLM会首先制定一个验证计划:“首先,我需要确认用户传入的价格是否直接流向了支付计算;其次,我需要确认系统是否从数据库获取了真实价格进行校验。”

ⅱ.  执行数据流分析: Agent根据计划,发起一次污点分析,通过图查询追踪从HTTP输入到数据库写入的数据流路径。分析引擎返回“数据流存在”的结果。

ⅲ.  执行调用图分析: 接着,Agent查询代码属性图,分析关键方法的函数调用关系,以确认是否存在对价格校验逻辑的调用。分析引擎返回“未发现相关调用”。

ⅳ.  审查代码证据: 最后,Agent请求提取指定范围的代码片段,交由LLM进行最终审查。

ⅴ.  形成结论: LLM结合所有工具返回的证据(数据流存在、校验调用缺失、代码逻辑印证),最终得出“漏洞确认存在”的结论。

此阶段的核心是ReAct(Reasoning + Acting) 框架。ReAct是一个将LLM的“推理”(Reasoning)能力和“行动”(Acting)能力相结合的框架。它的灵感来自于“行为”与“推理”之间的协同作用,其核心是一个不断循环的过程:思考 -> 行动 -> 观察。在我们的场景中,“行动”即调用代码图谱分析、代码片段提取等工具。这有效地克服了传统LLM因缺乏与外部世界接触而导致的事实幻觉和错误传播问题,使得漏洞验证过程既智能又严谨。

图2  ReAct演示图

4.4   第四阶段 :报告总结与修复

在确认漏洞后,完成从“发现者”到“修复顾问”的角色转变,产出包含完整分析、评估和修复建议的最终报告,形成DevSecOps闭环。

ⅰ.  评估漏洞严重性: Agent将完整的证据链和漏洞上下文提交给LLM,指令其根据CWE、CVSS等行业标准,对漏洞的潜在影响和严重性进行评估。

ⅱ.  生成修复代码(补丁): 紧接着,Agent会向LLM提供存在漏洞的代码片段以及漏洞的根本原因分析,并要求其直接生成修复后的代码。LLM会理解漏洞(例如,缺少价格校验),并产出一个安全的、可供开发者参考甚至直接使用的代码补丁。

ⅲ.  整合最终报告: 最后,Agent将所有信息--包括漏洞描述、严重性评估、完整的证据链、以及AI生成的修复代码--自动汇编成一份结构化、内容详实的最终审计报告。

五、效果展示

图3  Agent运行流程图

5.1. 漏洞检测报告

以下内容以AI生成的逻辑漏洞靶场为例,展示Agent在各个阶段的核心产出。

(1)应用识别与知识图谱构建

ⅰ. Agent首先采集项目元数据,通过深度代码分析构建出可供查询的知识库。

ⅱ. 流程图

ⅲ. 部分元数据知识库效果图

(2)威胁建模

ⅰ. 基于构建的知识库,LLM对识别出的高危业务场景进行威胁建模,并生成攻击假设。

ⅱ. 流程图

ⅲ.  效果图

(3)验证、PoC与报告

ⅰ. 针对生成的攻击假设,Agent进行自动化验证,生成利用证明(PoC),并汇总成最终报告。

ⅱ. 流程图

a.漏洞验证

b.PoC生成

ⅲ.  最终报告展示

六、评估结果

我们在一个包含10个已知逻辑漏洞(覆盖价格篡改、越权访问、短信轰炸等多种类型)的内部靶场项目中进行了测试。评估结果如下:

七、局限性与挑战

八、结论

本文提出并实践了一条由AI Agent驱动的自动化逻辑漏洞审计工具。通过将传统SAST的深度分析能力与LLM的强大推理能力相结合,并借助RAG、ToT、ReAct等框架,模拟安全专家进行人工审计的方式进行识别。

引用链接:

Tree of Thoughts: Deliberate Problem Solving with Large Language Models :arxiv.org/abs/2305.10…

Fish AI Reader

Fish AI Reader

AI辅助创作,多种专业模板,深度分析,高质量内容生成。从观点提取到深度思考,FishAI为您提供全方位的创作支持。新版本引入自定义参数,让您的创作更加个性化和精准。

FishAI

FishAI

鱼阅,AI 时代的下一个智能信息助手,助你摆脱信息焦虑

联系邮箱 441953276@qq.com

相关标签

应用安全测试 逻辑漏洞 大语言模型 AI Agent SAST
相关文章