思想领袖

AI 编写的代码改变了 SAST 需要捕捉的内容

mm
将 Unite.AI 添加到您在 Google 上的首选来源

观看 AI 编码助手在几秒钟内生成一个功能性的特性,感觉像是一个突破。代码可以编译。测试通过。拉取请求看起来很干净。对于需要快速交付的开发团队来说,这感觉像进步。

但是,功能性代码和安全代码并不是同一件事。

AI 生成的代码改变了软件风险的形态。问题不仅仅是 大型语言模型 编写“糟糕”的代码。在很多情况下,它们编写的代码看起来很完善,遵循熟悉的框架模式,并解决了请求的任务。问题更为微妙:代码可以在功能上正确,但仍然可能不安全、过时、权限过大或在上下文中不正确。

这种区别很重要,因为静态应用程序安全测试(SAST)是为人类编写代码的世界而设计的,安全团队审查可预测的风险模式。AI 改变了等式的两边。代码量正在增加,提交变得更小,安全模式可以在规模上生成。

结果是软件团队面临一个新问题:当代码的作者不一定是人类时,SAST 应该捕捉什么?

功能性代码不再是强烈的信号

多年来,软件团队使用了一种粗略的信心等级。如果代码可以编译、通过测试并在同行评审中幸存,它就会更接近生产。安全扫描添加了另一层,但功能性仍然是第一道门槛。

AI 编码助手破坏了这种等级制度,因为它们特别擅长生成看起来完整的代码。它们可以推断出样板代码、连接 API、生成错误处理并匹配现有存储库的风格。这使它们很有用,但也使它们的错误更难被发现。

人类审查者可能会浏览 AI 编写的函数并认为“这看起来正常”。这正是风险所在。许多 AI 生成的漏洞并不是异国情调的。它们是熟悉的问题,例如注入漏洞、弱验证、不安全的默认值、不安全的反序列化、日志问题和过时的依赖选择。

最近的研究使这种紧张关系更加难以忽视。Veracode 的 2026 年春季 GenAI 代码安全更新 发现,AI 编码模型在生成语法正确的代码方面比生成安全代码方面更强大。换句话说,AI 正在变得非常擅长编写可以运行的软件,但这并不意味着它在编写值得信任的软件方面变得同样擅长。

输出可能看起来像生产就绪,但底层风险可能完全不同。

旧的 SAST 模型是为人类瓶颈而设计的

传统的 SAST 一直面临着一个艰难的任务。它扫描源代码,映射模式到已知的弱点,并在易受攻击的代码发布之前提醒团队。在传统的开发周期中,这已经在安全团队和开发团队之间制造了摩擦:太多的警报,太多的假阳性,并且没有足够的时间来修复所有问题。

AI 使得这个问题更加困难,因为它去掉了软件开发中一个隐藏的约束:人类输入的速度。

当 AI 助手可以在一个会话中生成一个服务、测试文件、API 集成和配置片段时,安全审查不能依赖相同的假设。风险不仅仅是一个粗心的代码行。它是模型代表团队做出的多个小决定的乘积,每个决定都可能在几十个文件中产生安全漏洞。

这是现代 SAST 工具 需要演变的地方。它们不能简单地在拉取请求几乎完成后扫描已知的漏洞签名。它们需要更接近开发人员的工作流程,了解 AI 辅助的变化模式,并帮助团队区分无害的自动化和有风险的自动化。

AI 以机器速度引入安全债务

技术债务并不是新鲜事。安全债务是更危险的堂兄弟:它会在代码库中积累,当漏洞、弱假设和有风险的捷径仍然存在,因为它们不够紧急,无法今天解决。

AI 可以加速这个过程。

开发人员可能会要求助手“添加身份验证”、“清理此输入”或“将此端点连接到数据库”。模型通常会产生答案。但是,除非提示包含正确的安全约束,否则答案可能依赖于过时的做法、不完整的验证或不安全的默认值。更糟糕的是,它可能足够好,能够通过随意的审查。

有几种 AI 特有的模式 SAST 现在需要识别:

  • 安全外观的样板代码:AI 经常生成看起来像最佳实践的代码,但缺少一个重要的控制,例如授权检查或输出编码。
  • 过时的依赖假设:模型可能会建议基于其训练数据中常见的模式的库、版本或 API,但这些模式不再被推荐。
  • 无上下文的修复:AI 可以修复局部症状,而不理解更广泛的应用程序流程,从而在其他地方创建安全漏洞。
  • 重复的漏洞模板:如果相同的提示在多个存储库中生成相同的有缺陷的模式,则一个弱点可以在整个组织中悄悄传播。

这不仅仅是关于找到糟糕的代码。这是关于检测代码是否是在没有足够上下文的情况下生成的。

SAST 需要了解意图,而不仅仅是语法

下一代 SAST 需要超越简单的模式匹配。已知的漏洞模式仍然很重要,许多基本的缺陷应该被自动捕获。但是,AI 编写的代码提高了标准,因为语法本身很少讲述整个故事。

考虑一个检索客户记录的端点。代码可能使用参数化查询、正确处理错误并通过标准的注入检查。但是,它是否强制执行租户隔离?它是否验证当前用户是否有权访问请求的记录?它是否记录敏感数据?

这种变化也提出了一个隐私问题:如果 AI 生成的逻辑改变了应用程序存储、记录或暴露的内容,团队需要在安全审查中了解其 应用程序数据收集 行为。

这些并不是总是语法问题。它们是意图问题。

SAST 需要更多地了解业务逻辑、数据流、框架惯例以及更改与应用程序其他部分的关系。目标不是为了营销目的使 SAST 变得“AI 驱动”。目标是使其足够上下文感知,以捕捉到 AI 可能犯的错误。

开发人员仍需要学习安全,但方式不同

更好的工具将有所帮助,但它们不会消除人类的责任。AI 编码助手使开发人员更加高效,但它们也使团队更容易接受他们不完全理解的代码。

这就产生了一个培训挑战。传统的年度安全培训太慢,太脱离日常工作。开发人员需要在做出决定的那一刻接受简短、实用的课程。这就是 微学习 的意义所在:小型、专注的学习时刻可以在不将工程师从工作中抽离数小时的情况下强化安全编码习惯。

在 AI 编码时代,最佳的安全教育将看起来更像一个及时的解释,嵌入在拉取请求中,一个 IDE 警告,既能教授又不会打扰,或者是一个简短的修复说明,解释为什么 AI 生成的模式存在风险。

审查过程必须改变

代码审查曾经回答过熟悉的问题:代码是否可读?它是否解决了问题?它是否破坏了任何东西?

AI 编写的代码添加了新的问题。提示是否包含安全意识?模型是否引入了依赖项?它是否从存储库的其他地方复制了一个模式,而没有理解为什么该模式存在?开发人员是否验证了逻辑或仅仅是输出?

这并不意味着每个 AI 辅助的提交都需要进行 法医调查。但是,团队需要一种轻量级的方法来识别高风险的 AI 生成的更改。身份验证、授权、密码学、支付流程、文件上传、数据库访问、日志记录和基础设施配置都比 UI 副本或测试脚手架更值得审查。

底线

AI 并没有使 SAST变得无关紧要。它使 SAST更加重要。

随着代码生成变得更快、更深入地嵌入开发环境中,过去的假设——不安全的代码通过人类的手慢慢进入——不再成立。AI 可以生成有用的软件,但它也可以扩散弱模式、过时的假设和无上下文的修复,速度超过传统的审查过程的吸收能力。

胜利者不会是那些禁止 AI 编码工具的团队。胜利者将是那些重新设计安全工作流以适应新现实的团队:代码可以瞬间生成,但信任仍需要通过努力来获得。

SAST 现在需要捕捉的不仅仅是语法级别的错误。它需要捕捉缺失的意图、不安全的上下文、重复的 AI 模式和安全债务,在它们积累之前。

David Balaban 是一位拥有超过 17 年恶意软件分析和防病毒软件评估经验的计算机安全研究员。David 运营着 MacSecurity.net Privacy-PC.com 项目,这些项目提供了有关当代信息安全问题的专家意见,包括社会工程、恶意软件、渗透测试、威胁情报、在线隐私和白帽黑客。David 拥有强大的恶意软件故障排除背景,最近专注于勒索软件的对策。