软件安全
- 层级
- 本科生
- 状态
- 建设中
提示:本课程仍在持续设计和校准中,页面内容仅供参考,不代表最终教学版本。
教学大纲
课程概览
软件安全把软件工程、程序分析和攻击者思维连接起来。课程围绕内存安全、输入验证、Web 与 API 安全、依赖风险、模糊测试、静态分析和安全修复展开,目标不是只会利用漏洞,而是能把漏洞产生、发现、验证和修复放进工程流程。
这是软件工程之后的安全入口课,也是系统安全、程序分析和安全基线自动化的共同基础。
先修要求
- 熟悉一门系统或后端编程语言。
- 理解 Git、测试、HTTP 和基本数据库概念。
- 建议先修软件工程或具备团队项目经验。
学习目标
- 解释常见软件漏洞的根因和可利用条件。
- 使用静态分析、动态测试和模糊测试发现缺陷。
- 编写最小复现、漏洞说明和修复补丁。
- 把安全检查接入 CI 和发布流程。
- 评估依赖、配置和接口带来的软件供应链风险。
教学组织
- 每周 2 次课堂:一次讲授核心概念,一次用于实验、论文讨论或项目评审。
- 课程按 16 周推进,每周都有可检查的作业、实验或项目里程碑。
- 强调可复现材料:代码、配置、数据、实验日志和报告需要能被助教或同学复查。
周计划
软件漏洞模型与安全工程流程实验与评审
分析真实漏洞公告,拆解根因、影响和修复。完成配套实验、记录问题,并在课堂评审中解释设计取舍。
内存安全与未定义行为实验与评审
复现缓冲区、释放后使用和整数错误。完成配套实验、记录问题,并在课堂评审中解释设计取舍。
输入验证、序列化与注入实验与评审
构造注入测试并修复解析边界。完成配套实验、记录问题,并在课堂评审中解释设计取舍。
Web、API 与认证授权
审计一个小型 Web 服务的访问控制。
Web、API 与认证授权实验与评审
审计一个小型 Web 服务的访问控制。完成配套实验、记录问题,并在课堂评审中解释设计取舍。
模糊测试与动态检测
为目标库接入 fuzz harness 和 sanitizer。
模糊测试与动态检测实验与评审
为目标库接入 fuzz harness 和 sanitizer。完成配套实验、记录问题,并在课堂评审中解释设计取舍。
静态分析、代码查询与误报处理
编写查询规则并整理告警优先级。
静态分析、代码查询与误报处理实验与评审
编写查询规则并整理告警优先级。完成配套实验、记录问题,并在课堂评审中解释设计取舍。
依赖、构建和供应链安全实验与评审
生成 SBOM,评估依赖升级和锁定策略。完成配套实验、记录问题,并在课堂评审中解释设计取舍。
安全修复、披露与回归测试实验与评审
提交最终修复、测试证据和披露草稿。完成配套实验、记录问题,并在课堂评审中解释设计取舍。
考核方式
概念题、阅读题、设计题和小型编程或实验任务。
漏洞分析、测试 harness、修复补丁和安全报告。
参与讨论、演示、代码或论文评审,以及同伴反馈。
提交可复现材料、技术报告和演示,说明方法、结果、限制与后续工作。
课程项目
学生选择一个开源或课程提供的软件目标,完成威胁建模、漏洞发现、复现、修复和回归测试。最终交付包括安全报告、补丁、测试证据和可重复运行的分析脚本。
课程政策
- 允许使用 AI 工具,但所有生成代码、实验记录和设计建议必须经过学生本人审查,并在报告中说明使用方式。
- 严禁提交不能解释的代码、证明、配置或实验结果;答辩时每名成员都需要解释自己负责部分的设计、测试和取舍。
- 迟交会影响迭代评分,但课程更看重可复现、可审计和可维护的结果,而不是临时堆砌。
参考课程
国际名校
- CambridgeSoftware and Security Engineering
- CMU18-732 Secure Software Systems
- ETH ZurichSystem Security
- Georgia TechCS 6265 Information Security Lab
- MIT6.566 Computer Systems Security
- PrincetonCOS 432 Information Security
- StanfordCS 155 Computer and Network Security
- UC BerkeleyCS 161 Computer Security
- University of WashingtonCSE 484 Computer Security
中国 985 高校
- 上海交通大学IS308 计算机系统安全
- 中国科学技术大学软件安全与测试
- 北京大学信息安全实验室
- 华中科技大学网络空间安全学院
- 南京大学COSEC 安全课程
- 哈尔滨工业大学网络空间安全学院
- 复旦大学系统软件与安全实验室
- 浙江大学Network Security
- 清华大学网络空间安全研究生课程