1 / 31
文档名称:

软件安全技术——代码静态分析课件.pptx

格式:pptx   大小:687KB   页数:31页
下载后只包含 1 个 PPTX 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

软件安全技术——代码静态分析课件.pptx

上传人:rsqcpza 2022/7/31 文件大小:687 KB

下载得到文件列表

软件安全技术——代码静态分析课件.pptx

文档介绍

文档介绍:第4章 代码安全静态分析
第1页,共31页。
教学目标
应掌握的知识要点:
静态分析的概念;
静态分析技术;
静态分析的过程;
执行代码审查;
安全审查;
静态分析度量标准;
静态分析中的常见缺陷;
缓冲区溢出。
软件漏洞
重点避免,但从安全的角度看,漏报才是最严重的局限性。
HP Fortify
静态分析技术
第12页,共31页。
静态分析的过程
第13页,共31页。
静态分析的过程
提取源代码
根据分析需求把程序源代码变换成易于分析处理的程序模型。在这个过程用到了编译原理中的成熟技术;
将代码按照检查规则执行分析;
按照制定的报告模式生成分析报告。
静态分析的过程
第14页,共31页。
定义
静态分析工具首先要做的,是用一个程序模型来表示待分析的代码,即提取目标代码的数据结构。
在构建该模型的过程中,静态分析工具一般会借用大量来自编译器领域的技术:
词法分析
语法分析
抽象语法
语义分析
跟踪控制流
跟踪数据流
污染传播
指针别名歧义
建模
第15页,共31页。
词法分析
是把源文件的字符流转换成记号流,即从左到右逐个字符对构成源程序的字符串进行扫描,依据词法规则,识别出一个一个的标记(token),把源程序变为等价的标记串序列。
例:int a = 3 + 5;经过词法分析会输出 int,a,=,3,+,5和;这七个单词。然后比较记号流中的标识符和预先定义的安全性漏洞字典,如果匹配就发出警告。
在静态分析工具中,词法分析是针对源代码进行的第一个操作,该操作将代码转换为一系列记号,这个记号流的创建过程称为词法分析
建模
第16页,共31页。
语法解析
语法解析器中用来匹配上述记号流的是一种与上下文环境无关的语法。该语法由一组产生式构成,用语言中的一对符号来标记。
建模
第17页,共31页。
抽象语法
解析树无法完成复杂的分析,因为在解析工程中,经常会对语法进行等价的转换,这样会给语法引入一些多余的成分,对后续阶段造成不利影响,甚至会使各阶段变得混乱。因此,很多编译器(包括GJC)经常要独立地构造解析树,为前、后端建立一个清晰的接口。这时就需要使用抽象语法树(AST)。上例中的语法树如下:
建模
抽象语法树的结构不依赖于源文件的文法,也就是解析阶段所采用的上下文无关语法,因此它能够为后来的分析提供一个更加标准方便的版本
第18页,共31页。
语义分析
语义分析,即审查每个语法成分的静态语义。
建模
第19页,共31页。
跟踪控制流
许多静态分析算法都会探究函数执行可能采取的路径。因此,绝大多数分析工具都会在AST或者中间表示法之上生成一个控制流图以使算法更高效。控制流图中的节点是一些基本块:指令序列总以连续方式从第一条执行到最后一条。
建模
第20页,共31页。
跟踪数据流
数据流分析一般是对某个函数的控制流图进行遍历,同时记录数据值的产生和使用位置。
建模
第21页,共31页。
污染传播
通过污染传播测试能知道攻击者可能潜在地控制程序中的哪些值,确定污染数据的来源,找出所有外部数据进入程序的入口代码以及它在程序中是如何移动的。
建模
代码动态构建和执行一个SQL查询,查找与给定名称匹配的item。查询限定只有当当前用户名与item的所有者名称匹配时,才向当前用户显示item。
第22页,共31页。
指针别名歧义
指针别名分析是另一个问题数据流问题。别名分析的目的是要了解哪些指针可能是指向相同的内存位置。
例: 只有当指针p1和p2不指向内存的相同位置时,编译器才会记录下面两个声明:
*p1 = 1;
*p2 = 2;
对于安全工具来说,别名分析在执行污染传播测试方面很重要。一个流动的敏感的污点-跟踪算法需要执行别名分析,以了解下面代码中从getUserInput()到processInput()的数据流:
p1 = p2;
*p1 = getUserInput();
processInput(*p2);
建模
第23页,共31