CS146S 第六周笔记总结:AI Testing and Security

Stanford University · Fall 2025 · 讲师:Mihail Eric 课程网站:themodernsoftware.dev


📅 课程安排

日期 主题 内容
Mon 10/27 AI QA, SAST, DAST, and Beyond 漏洞检测技术 + AI 新攻击面 + AI 安全新能力(22 slides)
Fri 10/31 🎤 Guest: Isaac Evans (CEO, Semgrep) AI 安全工具的实际表现

第一讲:AI QA, SAST, DAST, and Beyond(10/27)

核心主题

"当 LLM 在写你大部分代码时,你需要大量的 guardrails 来防止错误。"

这是课程第一次从安全与质量保障角度审视 AI 开发。前五周讲的都是"如何用 AI 更快地写代码",这一讲讲的是**"如何确保 AI 写的代码不会出问题"**。

第一部分:既有威胁面(Existing Threat Landscape)

传统 Web 应用安全威胁——这些在 AI 时代不仅没有消失,反而因为 AI 生成代码可能引入更多这类漏洞:

  • SQL 注入(SQL Injection)
  • 跨站脚本(XSS)
  • 身份认证缺陷(Broken Authentication)
  • 不安全的直接对象引用(IDOR)
  • 安全配置错误(Security Misconfigurations)
  • 敏感数据暴露(Sensitive Data Exposure)

📚 课程关联: 这些是 OWASP Top 10 的核心内容(阅读 5),为后面讨论 AI 能否检测这些问题提供基础。

第二部分:三种漏洞检测技术

技术 类型 时机 覆盖范围
SAST 白盒(分析源代码/二进制) SDLC 早期,成本低 SQL 注入、命令注入、XSS
DAST 黑盒(模拟真实攻击者) SDLC 全程,误报更少 SQL 注入、认证缺陷、XSS
SCA 依赖分析(OSS 包深度分析) 构建/部署时 包管理器、IaC、镜像漏洞

SAST 技术细节:

  • 代码库扫描 + 模式匹配
  • 工具示例:Bandit(Python)、Semgrep(多语言)、ESLint + 扩展

DAST 技术细节:

  • 输入 fuzzing、会话令牌操作、配置/头部测试、暴力限速测试

SCA 技术细节:

  • 分析包元数据、传递性依赖解析、匹配漏洞数据库、二进制/制品扫描

三者互补: 代码 + 运行时 + 依赖 = 全面覆盖

📚 课程关联: SAST/DAST 的"Shift Left"理念(尽早发现问题)与第四周的 TDD 工作流形成呼应——都是在开发早期建立质量保障。

第三部分:AI 带来的新攻击面

① Prompt Injection(提示注入)

向 AI 系统注入隐藏或误导性指令,使其偏离预期行为。

课堂演示了从 AI agent(如 Amp Code)中提取系统 prompt 的实例。

② Tool Misuse(工具滥用)

通过欺骗性 prompt 操纵 agent 滥用其集成工具。

课堂引用了 Amp Code 的配置修改攻击案例(embracethered.com)。

③ Code Attacks(代码攻击)

利用 agent 的代码执行能力获取对执行环境的未授权访问。

④ Intent Breaking(意图破坏)

操纵 agent 的计划,将行为重定向到偏离原始意图。

⑤ Identity Spoofing(身份伪造)

利用被攻破的身份认证,伪装为合法 agent。

📚 课程关联: 这五种攻击向量直接对应阅读 4(Palo Alto Unit 42 报告)。特别值得注意的是,第四周讨论的 Claude Code Hooks 和权限系统(generative command injection detection)正是为了防御这些攻击。

第四部分:AI 带来的安全新能力

"Shift Left 安全比以往任何时候都更容易实现。"

  • LLM 可以引入工作流中发现安全问题
  • 自动化渗透测试成为可能

第五部分:局限性(关键!)

AI SAST 的假阳性率极高:

  • Claude Code / Codex 的假阳性率:50-100%(取决于漏洞类型)
  • 对比传统 SAST:也是 50%+
  • 所以 AI 并没有显著降低假阳性

非确定性分析问题:

  • 相同 prompt 运行多次 → 不同结果
  • 你怎么知道是否已捕获所有漏洞?

Context Rot(上下文腐烂):

  • 不是所有上下文都是平等的
  • 输入 token 越多,性能越不可靠

Compaction(压缩):

  • 为了适应上下文窗口而进行的摘要会导致信息丢失

📚 课程关联: Context Rot 直接对应第三周阅读 2("How Long Contexts Fail")的四种失败模式,以及本周阅读 6(Chroma 的研究报告)。这也是为什么第四周讲的 subagent(隔离上下文)和 system-reminders(持久化关键信息)如此重要。

开放问题

  1. 如何降低漏洞检测中的假阳性和幻觉?
  2. 如何验证 LLM 生成的补丁是安全的、不引入回归?
  3. LLM 能否解释为什么标记某个漏洞或提出某个修复?
  4. 衡量 LLM AppSec 表现的正确基准是什么?
  5. 如何在 CI/CD 中嵌入 LLM 而不淹没团队?
  6. 如果 AI 生成的补丁引入了漏洞,谁来负责?

第二讲:Guest Lecture——Isaac Evans(CEO, Semgrep)(10/31)

⚠️ Isaac 的演讲没有公开 Slides。以下基于阅读 3(Semgrep 博客)和搜索结果。

Isaac Evans / Semgrep 背景

  • Semgrep:领先的 SAST 工具,被 Gartner Magic Quadrant 认可
  • 核心产品:Semgrep Code(SAST)、Supply Chain(SCA)、Secrets(密钥检测)、Assistant(AI 分流和修复建议)
  • 推出 "Secure Vibe Coding" 解决方案——专门针对 AI 生成代码的安全问题

Semgrep 的 AI 安全评估(阅读 3 核心内容)

Semgrep 团队用 Claude Code 和 OpenAI Codex 扫描了 11 个大型 Python 开源 Web 应用,产生 400+ 安全发现:

指标 Claude Code (Sonnet 4) OpenAI Codex (o4-mini)
真阳性数 46 21
真阳性率 14% 18%
假阳性率 86% 82%
高严重性漏洞 ~20 ~20

按漏洞类别的表现:

类别 Claude Code TPR Codex TPR
IDOR(不安全直接对象引用) 22% (13/59) 0% (0/5)
SQL 注入 5% (2/38) 0% (0/5)
XSS 16% (12/74) 0% (0/28)
Path Traversal(路径遍历) 47% (8/17)

关键发现:

  • AI 理解上下文的能力强(尤其是 IDOR),但跨文件/跨函数的**污点追踪(taint tracking)**能力很弱
  • 非确定性是真正的困难: 同一应用、同一 prompt,三次运行分别产出 3、6、11 个发现
  • Anthropic 内建的 /security-review 命令效果一般("pretty mid")

📚 课程关联: 这些数据直接支持了第一讲 Slide 21 的观点——AI SAST 的假阳性率极高,非确定性是核心挑战。同时也呼应了 Context Rot 问题——输入 token 越多(更大的代码库),性能下降越明显。


🔗 两讲之间的联系

维度 第一讲(Mihail) 第二讲(Isaac/Semgrep)
视角 AI 安全的理论框架(攻击面 + 技术 + 局限性) AI 安全的实际表现(实验数据)
层次 SAST/DAST/SCA 三种技术全覆盖 深入 SAST 的 AI 增强效果
结论 "假阳性率极高" 用数据验证:86% 假阳性率

📚 第六周阅读材料速览

# 材料 核心主题
1 SAST vs DAST (Splunk) 三种安全测试方法对比 + RASP
2 Copilot RCE via Prompt Injection (CVE-2025-53773) 本周最惊人的阅读
3 Finding Vulns with Claude Code & Codex (Semgrep) AI SAST 的实际评估
4 Agentic AI Threats (Palo Alto Unit 42) Agent 五大攻击向量
5 OWASP Top Ten Web 应用十大安全风险
6 Context Rot (Chroma Research) 长上下文性能退化研究
7 O3 Finds CVE-2025-37899 LLM 发现 Linux 内核 0-day

🛠️ 第六周作业

Writing Secure AI Code — 编写安全的 AI 生成代码