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(持久化关键信息)如此重要。
开放问题
- 如何降低漏洞检测中的假阳性和幻觉?
- 如何验证 LLM 生成的补丁是安全的、不引入回归?
- LLM 能否解释为什么标记某个漏洞或提出某个修复?
- 衡量 LLM AppSec 表现的正确基准是什么?
- 如何在 CI/CD 中嵌入 LLM 而不淹没团队?
- 如果 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 生成代码