1691594939
软件安全原理和实践 ¶
这门课课时和学期安排近几届一直在改动
课程学习内容 ¶
主要包括两个方面:
- 常见漏洞的攻击与防御:其实就是 CTF 中 pwn 方向的基础,包括缓冲区溢出、ROP、格式化字符串漏洞、堆等
- 程序分析:一些相对“高级”的专题,包括简单的静态和动态分析、CFI、SFI 以及智能合约的内容
2021 级这门课从一个长学期改为了半个学期(可能后面还会改回来),所以讲的就比较匆忙。前半部分是重点,lab 也大多围绕这个部分,后半部分的内容因为时间关系没讲太多,lab 也因为时间关系改为了选做的 bonus。
预修要求 ¶
- 汇编语言(x86)
任课教师 ¶
周亚金老师。因为不点名以及后半部分的内容与作业无关,到课人数也很少。分数主要由助教决定,只要做完了且报告按要求说清楚都能拿到接近 100 或者 100 的成绩,并且答疑也很负责。
课程教材 ¶
无指定教材,老师课前会发布 PPT。PPT 上有部分作业的解决思路,当然实验指导中有更偏向于实战的指导。当然仍有部分问题需要自己探索新知识来解决。非常推荐大家看 CTF Wiki,上面有很多问题的解决思路。也可以看 B 站或者 youtube 台大的 pwn 课等。
分数构成 ¶
- 日常 lab(60 分)
- lab 1:BOF、ROP、FSB(30 分)
- lab 2:堆利用(30 分)
- lab 3:动态分析(20 分 bonus)
- lab 4:软件安全机制探究(20 分 bonus)
- final lab(40 分)
- 就是 lab 1 的范围,两道题,做出来就是满分
lab 1/2 以及 final 都设置了一道 CTF 比赛中的 pwn 题作为 bonus,可见 bonus 分量非常足(算上 bonus 的满分甚至达到了 170 分
平时四次作业 60%,final 40%。第一次作业是缓冲区溢出,第二次作业有关 ROP,第三次是格式化字符串漏洞,第四次是动态分析、静态分析二选一(使用软件进行操作回答思考题)。18 级开课第四次作业是堆利用,但是因为太难完成情况差因此 19 和 20 有更改。Final 是前面三次作业对应的专题每个专题出一题完成。去年同学们其他课程任务太重因此期末第三题改为 bonus。每次作业都有比较基础的和最后偏难的问题,然后也设置了 bonus 补分。
这门课还是有一定的挑战性,特别对于刚上手 CTF 问题的同学可能不太熟悉一些工具的使用(有不计分的 Lab 0 供大家熟悉操作),并且部分作业题有难度,但是通过搜集资料等方式独立解决问题,不仅可以收获满意结果,也能体会到这一方向独特的魅力(纵然可能被打击到失去兴趣)。