55AA-002 · 这是软件安全课程的第一讲。目标不是马上进入漏洞利用,而是先建立语言:什么是缺陷、漏洞、利用、风险、资产、攻击面和信任边界。

返回课程

软件漏洞模型与安全工程流程

这是软件安全课程的第一讲。目标不是马上进入漏洞利用,而是先建立语言:什么是缺陷、漏洞、利用、风险、资产、攻击面和信任边界。

学习目标

  • 区分 bug、vulnerability、exploit 和 risk,并能给出安全语境下的例子。
  • 用资产、入口点、信任边界和攻击者能力描述一个小型软件系统的攻击面。
  • 从一个漏洞公告中提取根因、影响、修复策略和回归测试需求。
  • 解释为什么软件安全必须进入需求、设计、实现、测试和发布流程。

先备知识

  • 软件工程中的质量属性。
  • HTTP 请求、输入校验、后端服务和数据库的基本概念。
  • Git、issue、pull request 和测试的基本使用。

课前准备

  • 课前阅读:任意一篇简短 CVE 公告,标出受影响组件、攻击前提和修复版本。
  • 课前思考:一个会导致程序崩溃的 bug 一定是安全漏洞吗?
  • 准备环境:浏览器、文本编辑器,以及能打开课程仓库中的示例 advisory。

课堂流程

0-8
复习:软件工程里的质量属性

用可靠性、可维护性和安全性三个词开场,让学生先说这些质量属性分别保护什么。

review
互动问题

如果一个输入校验错误只能导致程序崩溃,它一定是安全漏洞吗?

预期回答:不一定。要看攻击者是否能触发、崩溃是否影响安全目标、是否能进一步利用。

追问:如果它是认证服务呢?如果崩溃后自动重启但会丢失内存中的会话状态呢?

逐字稿

开场

今天是软件安全的第一讲。我们先不写 exploit,也不急着看花哨的攻击。安全课最容易犯的错误,是把漏洞当成某种神秘技巧。我们这门课要反过来:漏洞首先是工程缺陷,只是这个缺陷刚好能被攻击者利用。今天我们要建立一套共同语言。

Demo / 练习

漏洞公告到工程任务

打开示例 advisory。

Slides
打开 Slides 占位文件
Slide 1今天的问题
Slide 2四个词
Slide 3判断漏洞的五个问题
视频媒介
视频占位链接

Bug、漏洞、利用和风险

8-18
诊断问题:崩溃是否等于漏洞

给出三个场景:本地 CLI 崩溃、公开 API 崩溃、认证服务崩溃。让学生判断风险是否相同。

diagnostic
互动问题

如果一个输入校验错误只能导致程序崩溃,它一定是安全漏洞吗?

预期回答:不一定。要看攻击者是否能触发、崩溃是否影响安全目标、是否能进一步利用。

追问:如果它是认证服务呢?如果崩溃后自动重启但会丢失内存中的会话状态呢?

逐字稿

复习

上节软件工程课里我们说过质量属性。可靠性问的是系统在正常或异常条件下能不能持续工作;可维护性问的是未来的人能不能理解和修改;安全性多了一个主动对抗者。请先想一个问题:一个程序崩溃,什么时候只是可靠性问题,什么时候变成安全问题?

Demo / 练习

漏洞公告到工程任务

假设系统允许用户上传头像。请列出至少 4 个资产、3 个入口点、3 条信任边界和 3 个安全测试。

Slides
打开 Slides 占位文件
Slide 2四个词
Slide 3判断漏洞的五个问题
Slide 4公告阅读清单
视频媒介
视频占位链接

Bug、漏洞、利用和风险

18-34
bug、漏洞、利用和风险

建立四个概念的层次:实现偏差、可被攻击者利用、利用路径、资产影响与可能性。

concept
互动问题

漏洞公告中最重要的是 CVSS 分数,还是根因和攻击前提?

预期回答:CVSS 有排序价值,但工程修复更依赖根因、攻击前提、受影响版本和可回归测试的条件。

追问:如果分数高但产品没有暴露对应入口点,优先级应该怎么调整?

逐字稿

提问引导

我给三个场景。第一,一个本地命令行工具读到坏文件后崩溃。第二,一个公开 API 收到特殊请求后崩溃。第三,一个认证服务崩溃后所有用户都无法登录。三者都是 crash,但安全含义一样吗?这里不要急着回答 yes 或 no,先问:攻击者能不能触发?触发成本多高?影响哪个资产?有没有进一步利用的空间?

Demo / 练习

漏洞公告到工程任务

打开示例 advisory。

Slides
打开 Slides 占位文件
Slide 3判断漏洞的五个问题
Slide 4公告阅读清单
Slide 5从风险到工程任务
视频媒介
视频占位链接

Bug、漏洞、利用和风险

34-48
漏洞公告拆解

共同阅读一份短 advisory,把 affected versions、root cause、impact、fixed versions、workaround 和 regression test 标出来。

case
互动问题

漏洞公告中最重要的是 CVSS 分数,还是根因和攻击前提?

预期回答:CVSS 有排序价值,但工程修复更依赖根因、攻击前提、受影响版本和可回归测试的条件。

追问:如果分数高但产品没有暴露对应入口点,优先级应该怎么调整?

逐字稿

概念讲解

我们把四个词拆开。bug 是实现偏差。vulnerability 是攻击者可利用的缺陷。exploit 是利用路径或利用程序。risk 是资产影响和发生可能性的组合。所以不是每个 bug 都是漏洞,也不是每个漏洞都有稳定 exploit,更不是每个 exploit 都对应同样的业务风险。

Demo / 练习

漏洞公告到工程任务

假设系统允许用户上传头像。请列出至少 4 个资产、3 个入口点、3 条信任边界和 3 个安全测试。

Slides
打开 Slides 占位文件
Slide 4公告阅读清单
Slide 5从风险到工程任务
视频媒介
视频占位链接

如何读漏洞公告

48-63
资产、入口点、信任边界和攻击面

用一个登录服务画出数据流,标出浏览器、API、数据库、第三方依赖和管理员后台之间的信任边界。

concept
互动问题

信任边界和模块边界是不是同一件事?

预期回答:不是。模块边界是代码组织方式,信任边界是不同权限、身份、控制权或数据可信度之间的边界。

追问:一个模块内部是否可能跨越信任边界?一个微服务边界是否一定是信任边界?

逐字稿

案例过渡

接下来我们看一份漏洞公告。读公告不要只看标题和分数。我们要找六件事:受影响版本、攻击前提、根因、影响、修复版本、回归测试。以后你们做安全工程,看到公告后真正要交付的是这些工程动作,而不是转发一条链接。

Demo / 练习

漏洞公告到工程任务

打开示例 advisory。

Slides
打开 Slides 占位文件
Slide 5从风险到工程任务
视频媒介
视频占位链接

如何读漏洞公告

63-75
课堂练习:为一个上传接口建模

学生两人一组,写出资产、入口点、攻击者能力、最可能的三个风险。

exercise
互动问题

信任边界和模块边界是不是同一件事?

预期回答:不是。模块边界是代码组织方式,信任边界是不同权限、身份、控制权或数据可信度之间的边界。

追问:一个模块内部是否可能跨越信任边界?一个微服务边界是否一定是信任边界?

逐字稿

总结

今天的核心句是:漏洞是攻击者可利用的工程缺陷。判断一个问题是不是安全问题,需要同时看攻击者、入口点、信任边界、资产和影响。下节课我们会进入工作坊,用同一套方法系统分析两篇公告,并把分析转成 issue、测试和修复计划。

Demo / 练习

漏洞公告到工程任务

假设系统允许用户上传头像。请列出至少 4 个资产、3 个入口点、3 条信任边界和 3 个安全测试。

Slides
打开 Slides 占位文件
Slide 6从风险到工程任务
视频媒介
视频占位链接

如何读漏洞公告

75-84
安全进入工程流程

把刚才的风险转成 issue、测试、代码评审检查项和发布门禁。

discussion
互动问题

信任边界和模块边界是不是同一件事?

预期回答:不是。模块边界是代码组织方式,信任边界是不同权限、身份、控制权或数据可信度之间的边界。

追问:一个模块内部是否可能跨越信任边界?一个微服务边界是否一定是信任边界?

逐字稿

总结

今天的核心句是:漏洞是攻击者可利用的工程缺陷。判断一个问题是不是安全问题,需要同时看攻击者、入口点、信任边界、资产和影响。下节课我们会进入工作坊,用同一套方法系统分析两篇公告,并把分析转成 issue、测试和修复计划。

Demo / 练习

漏洞公告到工程任务

打开示例 advisory。

Slides
打开 Slides 占位文件
Slide 7从风险到工程任务
视频媒介
视频占位链接

如何读漏洞公告

84-90
总结和下节课钩子

总结本节课核心句:漏洞是攻击者可利用的工程缺陷。下节课把这个方法用于漏洞公告分析工作坊。

summary
互动问题

信任边界和模块边界是不是同一件事?

预期回答:不是。模块边界是代码组织方式,信任边界是不同权限、身份、控制权或数据可信度之间的边界。

追问:一个模块内部是否可能跨越信任边界?一个微服务边界是否一定是信任边界?

逐字稿

总结

今天的核心句是:漏洞是攻击者可利用的工程缺陷。判断一个问题是不是安全问题,需要同时看攻击者、入口点、信任边界、资产和影响。下节课我们会进入工作坊,用同一套方法系统分析两篇公告,并把分析转成 issue、测试和修复计划。

Demo / 练习

漏洞公告到工程任务

假设系统允许用户上传头像。请列出至少 4 个资产、3 个入口点、3 条信任边界和 3 个安全测试。

Slides
打开 Slides 占位文件
Slide 8从风险到工程任务
视频媒介
视频占位链接

如何读漏洞公告

课后作业

选择一篇公开 CVE 公告,提交一页分析:资产、攻击者能力、根因、影响、修复策略、回归测试建议。