1.Introduction

南大《软分》:介绍

2025-07-24

文章大纲

为什么要学习软件分析?
软件分析或者具体地说,静态分析在当今计算机领域有很基础也很重要的应用,比如ide在运行程序前对一些基础的错误提前检测出来,也就是我们写程序时有时会看到的标黄,标红的片段
而在安全领域,则是SAST(Static Application Security Test)的核心原理,这也是我学习这门课的主要目标,我希望我可以理解现今SAST的实现,它们是怎么构建source点到sink点之间的污点分析流的?
进而我也想自己搓一个丐版的分析器

课程表如下

Lectures

Lecture Instructor Slides (PDF) Videos
(Chinese)
Assignments
1. Course Introduction Yue Li Intro.pdf
2. Intermediate Representation Yue Li IR.pdf
3. Data Flow Analysis - Applications I Yue Li DFA-AP (I, II).pdf
4. Data Flow Analysis - Applications II Yue Li A1
5. Data Flow Analysis - Foundations I Yue Li DFA-FD (I, II).pdf
6. Data Flow Analysis - Foundations II Yue Li A2 A3
7. Interprocedural Analysis Tian Tan Inter.pdf A4
8. Pointer Analysis Tian Tan PTA.pdf
9. Pointer Analysis - Foundations I Tian Tan PTA-FD (I, II).pdf
10. Pointer Analysis - Foundations II Tian Tan A5
11. Pointer Analysis - Context Sensitivity I Tian Tan PTA-CS (I, II).pdf
12. Pointer Analysis - Context Sensitivity II Tian Tan A6 A7
13. Static Analysis for Security Tian Tan Security.pdf A8
14. Datalog-Based Program Analysis Tian Tan Datalog.pdf
15. CFL-Reachability and IFDS Yue Li IFDS.pdf
16. Soundness and Soundiness Yue Li Soundiness.pdf

这门课程有8个循序渐进的实验A1至A8,推荐在学习完对应的章节后就完成实验,完成实验时会不断回顾自己的笔记或者课程视频,这也是很好的强化记忆的过程

Start


开篇就引出了一切静态分析方法最核心的两个指标,Sound和Complete,当然实践中我们其实说的更多的是 漏报率 和 误报率,其实是一样的,而达到完美的Truth的分析是不可能的,能做的只有减少误报和漏报来逼近Truth
绝大部分在用的静态分析程序都是接受误报放弃绝对准确性,误报好于漏报
其实这在我之前在得物实习的时候运营SAST的时候的心得一致,其实非常好理解,如果我在审核告警的时候发现这是一个误报,那么我记录下来有空的时候加进规则库里即可;可如果要减少漏报,首先你得人工/用其他分析软件先找到一个漏洞代码的传播链条,然后排查是什么原因没检测出来,再去优化规则库,这里第一步的工作量就是非常之大的,与减少误报相比所耗的时间精力也不是一个数量级的
其次,对于后果而言,误报也是好过漏报很多的,误报最多浪费一些安全或开发人员排查确认的时间,但是如果漏报了,那漏洞就存在于上线的应用当中了


这里举了两个例子都是sound的,但是第一个例子更昂贵,需要额外内存存储上下文信息
静态分析需要在sound(或接近)的情况下,在准确度和速度上获得好的取舍

两个词概括静态分析,抽象和过近似

抽象:将具体的值抽象为分析所关注的值

  • ‘T’是unknown,倒’T’是undefined

    控制流,contrl flow(一种merge动作) 由于无法枚举每个路径,所以需要合并分析每一条路径的结果
    这个也是静态分析中很重要的一步,由于静态分析是在程序运行前的分析,所以一些只有运行时才能确定的值和分支路径,在运行前,需要进行一个may analysis,就是尽可能全面的分析