跳转至

1691594939

软件安全原理和实践

IS 专业必修

这门课课时和学期安排近几届一直在改动

课程学习内容

主要包括两个方面:

  • 常见漏洞的攻击与防御:其实就是 CTF pwn 方向的基础,包括缓冲区溢出、ROP、格式化字符串漏洞、堆等
  • 程序分析:一些相对“高级”的专题,包括简单的静态和动态分析、CFI、SFI 以及智能合约的内容

2021 级这门课从一个长学期改为了半个学期(可能后面还会改回来),所以讲的就比较匆忙。前半部分是重点,lab 也大多围绕这个部分,后半部分的内容因为时间关系没讲太多,lab 也因为时间关系改为了选做的 bonus

预修要求

  • 汇编语言(x86)

任课教师

周亚金老师。因为不点名以及后半部分的内容与作业无关,到课人数也很少。分数主要由助教决定,只要做完了且报告按要求说清楚都能拿到接近 100 或者 100 的成绩,并且答疑也很负责。

课程教材

无指定教材,老师课前会发布 PPTPPT 上有部分作业的解决思路,当然实验指导中有更偏向于实战的指导。当然仍有部分问题需要自己探索新知识来解决。非常推荐大家看 CTF Wiki,上面有很多问题的解决思路。也可以看 B 站或者 youtube 台大的 pwn 课等。

分数构成

  • 日常 lab60 分)
    • 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 。但整门课只有半个学期,而且 lab 1 的内容比较多,所以对于没有 CTF pwn 基础的同学来说也不算太轻松。但助教都是很 nice 的,分数也大都不会太差。

平时四次作业 60%,final 40%。第一次作业是缓冲区溢出,第二次作业有关 ROP,第三次是格式化字符串漏洞,第四次是动态分析、静态分析二选一(使用软件进行操作回答思考题)。18 级开课第四次作业是堆利用,但是因为太难完成情况差因此 19 20 有更改。Final 是前面三次作业对应的专题每个专题出一题完成。去年同学们其他课程任务太重因此期末第三题改为 bonus。每次作业都有比较基础的和最后偏难的问题,然后也设置了 bonus 补分。

这门课还是有一定的挑战性,特别对于刚上手 CTF 问题的同学可能不太熟悉一些工具的使用(有不计分的 Lab 0 供大家熟悉操作),并且部分作业题有难度,但是通过搜集资料等方式独立解决问题,不仅可以收获满意结果,也能体会到这一方向独特的魅力(纵然可能被打击到失去兴趣)。