




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第4章代码安全静态分析
第4章代码安全静态分析
教学目标应掌握的知识要点:静态分析的概念;静态分析技术;静态分析的过程;执行代码审查;安全审查;静态分析度量标准;静态分析中的常见缺陷;缓冲区溢出。软件漏洞重点代码安全静态分析静态分析中的常见缺陷静态分析的过程教学目标应掌握的知识要点:2本节安排静态分析的概念静态分析技术代码静态分析工具的引入本节安排静态分析的概念34.1静态分析4.1静态分析定义及特点程序静态分析(ProgramStaticAnalysis)是指在不运行代码的方式下,通过各种分析工具对程序代码进行扫描并做出评估的过程。4.1.1静态分析的概念特点不实际执行程序,只是通过对代码的静态扫描对程序进行分析执行速度快、效率高定义及特点程序静态分析(ProgramStaticAna5类型检查例1shorts=1;inti=s;shortr=i;在本例中,程序的本意是想要将一个类型为int的表达式赋予给一个类型为short的变量,但是却无法通过类型检查。可以通过一个显式的类型转换来解决这个问题。例2String[]sa=newString[100];sa[0]="helloworld";Object[]oa=sa;oa[0]=newInteger(1);System.out.println(sa[0]);只有只读的Object[]才能是String[]的父类型。但Java里并没有只读数组这么个类型,于是错误发生了。
4.1.2静态分析技术类型检查例1shorts=1;4.1.2静6风格检查风格检查程序所显示的错误常只是影响代码的可读性和可维护性,而不是程序运行过程中会发生的某种错误PMD会检查出:catch块中没有内容、if判断块中没有内容、代码中出现System.out.println等警告描述。4.1.2静态分析技术风格检查风格检查程序所显示的错误常只是影响代码的可读性和可维7程序理解程序理解最主要的用途在于帮助理解程序,搞懂代码库中的大量代码。它是一个从计算机程序中获取知识信息的过程,这些知识信息可以用于程序排错、增强程序、重用程序和整理文档等工作。在很多集成开发环境(IDE)中,都包括了一些初级的程序理解功能,比如:查找本变量的声明和使用位置。更高级一点的还能帮助查找类之间的关联关系等。4.1.2静态分析技术程序理解程序理解最主要的用途在于帮助理解程序,搞懂代码库中的8程序验证和属性检查程序验证是对源代码进行分析,如果源代码符合预先专门制定的一份描述程序行为的规格说明,那么则说明该程序完好。性检查的方法跟程序验证的方法从本质上是一样的,它们的区别在于,属性检查依据的只是描述部分程序行为的部分规格说明,而程序验证依据的是描述所有程序行为的规格说明。4.1.2静态分析技术代码中,在调用new分配内存后,程序未对调用结果的正确性进行检测。如果cbSize为0的话,则(cbSize-1)为-1。但是Memset中第3个参数本身是无符号数,因此会将-1视为正的0xffffffff,函数执行之后程序当然就只有崩溃了。程序验证和属性检查程序验证是对源代码进行分析,如果源代码符合9Bug查找Bug查找是指按照预先制定的一些共同认同的规则,来查找程序中存在的一些bug。4.1.2静态分析技术最后一行将产生一个null指针异常,因为变量actions还没有初始化如果第1行的Map不包括一个名为“bob”的人,那么在第5行询问person的名字时就会出现null指针异常。
Bug查找Bug查找是指按照预先制定的一些共同认同的规则,来10安全审查以安全为中心的静态分析;现代安全分析工具往往更像是一种属性检查程序和bug查找程序的混合体,许多安全属性能被简洁的表达为程序属性,对于一个属性检查程序来说,搜索潜在的缓冲区溢出漏洞可以当做是检查这样的程序属性:“程序不会访问被分配内存的边界之外的地址”。安全分析工具采纳了这样一种观念,即开发人员往往会继续再使用相同的不安全的方法来解决问题,这可说成是一种不安全的惯例。4.1.2静态分析技术安全审查以安全为中心的静态分析;4.1.2静态分析技术11代码安全静态分析工具的引入对程序员来说,对安全编程所需的知识缺乏理解会导致其所编写的代码不符合安全规范而引发安全问题。另外,即使是经验丰富的程序员也无法完全避免在代码编写的过程中出现或多或少的拼写错误,这类简单错误有时也可能引发安全问题。静态分析工具能够完整而客观地进行程序检测,而不管编码人员是否了解哪些代码是与安全“相关的”。当一种新的攻击出现时,静态分析工具可以迅速地对相关代码进行复查,同时分析该新型攻击能否对代码构成威胁。在被发现之前,某些安全缺陷已在程序中存在很久了,静态分析工具有能力针对新发现的缺陷类型对遗留代码进行检查。尽管误报难以避免,但从安全的角度看,漏报才是最严重的局限性。HPFortify4.1.2静态分析技术代码安全静态分析工具的引入对程序员来说,对安全编程所需的知识124.2静态分析的过程4.2静态分析的过程静态分析的过程提取源代码根据分析需求把程序源代码变换成易于分析处理的程序模型。在这个过程用到了编译原理中的成熟技术;将代码按照检查规则执行分析;按照制定的报告模式生成分析报告。4.2静态分析的过程静态分析的过程提取源代码4.2静态分析的过程14定义静态分析工具首先要做的,是用一个程序模型来表示待分析的代码,即提取目标代码的数据结构。在构建该模型的过程中,静态分析工具一般会借用大量来自编译器领域的技术:
词法分析语法分析
抽象语法
语义分析
跟踪控制流
跟踪数据流
污染传播
指针别名歧义4.2.1建模定义静态分析工具首先要做的,是用一个程序模型来表示待分析的代15词法分析是把源文件的字符流转换成记号流,即从左到右逐个字符对构成源程序的字符串进行扫描,依据词法规则,识别出一个一个的标记(token),把源程序变为等价的标记串序列。例:inta=3+5;经过词法分析会输出int,a,=,3,+,5和;这七个单词。然后比较记号流中的标识符和预先定义的安全性漏洞字典,如果匹配就发出警告。在静态分析工具中,词法分析是针对源代码进行的第一个操作,该操作将代码转换为一系列记号,这个记号流的创建过程称为词法分析4.2.1建模词法分析是把源文件的字符流转换成记号流,即从左到右逐个字符对16语法解析语法解析器中用来匹配上述记号流的是一种与上下文环境无关的语法。该语法由一组产生式构成,用语言中的一对符号来标记。4.2.1建模语法解析语法解析器中用来匹配上述记号流的是一种与上下文环境无17抽象语法解析树无法完成复杂的分析,因为在解析工程中,经常会对语法进行等价的转换,这样会给语法引入一些多余的成分,对后续阶段造成不利影响,甚至会使各阶段变得混乱。因此,很多编译器(包括GJC)经常要独立地构造解析树,为前、后端建立一个清晰的接口。这时就需要使用抽象语法树(AST)。上例中的语法树如下:4.2.1建模抽象语法树的结构不依赖于源文件的文法,也就是解析阶段所采用的上下文无关语法,因此它能够为后来的分析提供一个更加标准方便的版本抽象语法解析树无法完成复杂的分析,因为在解析工程中,经常会对18语义分析语义分析,即审查每个语法成分的静态语义。4.2.1建模语义分析检查点类型检查控制流检查一致性检查语义分析语义分析,即审查每个语法成分的静态语义。4.2.119跟踪控制流许多静态分析算法都会探究函数执行可能采取的路径。因此,绝大多数分析工具都会在AST或者中间表示法之上生成一个控制流图以使算法更高效。控制流图中的节点是一些基本块:指令序列总以连续方式从第一条执行到最后一条。4.2.1建模跟踪控制流许多静态分析算法都会探究函数执行可能采取的路径。因20跟踪数据流数据流分析一般是对某个函数的控制流图进行遍历,同时记录数据值的产生和使用位置。4.2.1建模跟踪数据流数据流分析一般是对某个函数的控制流图进行遍历,同时21污染传播通过污染传播测试能知道攻击者可能潜在地控制程序中的哪些值,确定污染数据的来源,找出所有外部数据进入程序的入口代码以及它在程序中是如何移动的。4.2.1建模代码动态构建和执行一个SQL查询,查找与给定名称匹配的item。查询限定只有当当前用户名与item的所有者名称匹配时,才向当前用户显示item。污染传播通过污染传播测试能知道攻击者可能潜在地控制程序中的哪22指针别名歧义指针别名分析是另一个问题数据流问题。别名分析的目的是要了解哪些指针可能是指向相同的内存位置。例:只有当指针p1和p2不指向内存的相同位置时,编译器才会记录下面两个声明:*p1=1;*p2=2;对于安全工具来说,别名分析在执行污染传播测试方面很重要。一个流动的敏感的污点-跟踪算法需要执行别名分析,以了解下面代码中从getUserInput()到processInput()的数据流:
p1=p2;*p1=getUserInput();processInput(*p2);4.2.1建模指针别名歧义指针别名分析是另一个问题数据流问题。别名分析的目23组成任何优秀的分析策略都至少包括两个组成部分:分析每个单独的函数的程序内分析(本地分析)和分析函数之间的关系的程序间分析(全局分析)。4.2.2分析算法组成任何优秀的分析策略都至少包括两个组成部分:分析每个单独的24断言4.2.2分析算法从安全特性产生的断言那些与在程序中传送时数据被赋予的信任等级相关的断言缓冲区溢出漏洞所引发的断言对象在程序运行时的状态断言4.2.2分析算法从安全特性产生的断言那些与在程序中25本地分析法本地分析法抽象解释:是一种通用技术,这种方法首先将程序中与所关注的属性无关的信息抽取出去,而后使用选中的程序抽象执行一种解释。谓词转换器:一种用来替换模拟和解释的方法是导出函数对其调用者的需求。模型检查:对于临时性的安全属性,比如“内存应该只释放一次”以及“应该只有非空指针才能被解除引用”,可以很容易地将所检查的属性表示为一个小型的有限状态自动机。4.2.2分析算法本地分析法本地分析法抽象解释:是一种通用技术,这种方法首先将26全局分析全局分析的作全局分析被采用的实质原因有两个方面:首先,它可以保证汇编系统的一致性;其次,它通过提供自动优化,减轻了程序员的负担。用是用来分析程序中各个函数之间的关系。4.2.2分析算法全局分析全局分析的作4.2.2分析算法27定义及分类是指安全工具应该报告的内容的规则集。分析算法有时可能由错误的“因”获得正确的“果”,但分析工具永远也不会报告超出规则集范围的问题。4.2.3规则规则格式:专用的规则文件、批注用于传播的规则源规则定义及分类是指安全工具应该报告的内容的规则集。分析算法有时可28审计人员如何利用报告审计人员如何利用报告将所报告的结果进行分类并分组消除所报告的结果中非预期的部分对所报告结果的意义进行解释4.4.4报告结果审计人员如何利用报告审计人员如何利用报告将所报告的结果进行分29静态分析技术划分建模涉及到的技术分类规则分类如何利用报告小结静态分析技术划分小结30静态分析的过程控制流图数据流图本地分析和全局分析作业静态分析的过程作业31第4章代码安全静态分析
第4章代码安全静态分析
教学目标应掌握的知识要点:静态分析的概念;静态分析技术;静态分析的过程;执行代码审查;安全审查;静态分析度量标准;静态分析中的常见缺陷;缓冲区溢出。软件漏洞重点代码安全静态分析静态分析中的常见缺陷静态分析的过程教学目标应掌握的知识要点:33本节安排静态分析的概念静态分析技术代码静态分析工具的引入本节安排静态分析的概念344.1静态分析4.1静态分析定义及特点程序静态分析(ProgramStaticAnalysis)是指在不运行代码的方式下,通过各种分析工具对程序代码进行扫描并做出评估的过程。4.1.1静态分析的概念特点不实际执行程序,只是通过对代码的静态扫描对程序进行分析执行速度快、效率高定义及特点程序静态分析(ProgramStaticAna36类型检查例1shorts=1;inti=s;shortr=i;在本例中,程序的本意是想要将一个类型为int的表达式赋予给一个类型为short的变量,但是却无法通过类型检查。可以通过一个显式的类型转换来解决这个问题。例2String[]sa=newString[100];sa[0]="helloworld";Object[]oa=sa;oa[0]=newInteger(1);System.out.println(sa[0]);只有只读的Object[]才能是String[]的父类型。但Java里并没有只读数组这么个类型,于是错误发生了。
4.1.2静态分析技术类型检查例1shorts=1;4.1.2静37风格检查风格检查程序所显示的错误常只是影响代码的可读性和可维护性,而不是程序运行过程中会发生的某种错误PMD会检查出:catch块中没有内容、if判断块中没有内容、代码中出现System.out.println等警告描述。4.1.2静态分析技术风格检查风格检查程序所显示的错误常只是影响代码的可读性和可维38程序理解程序理解最主要的用途在于帮助理解程序,搞懂代码库中的大量代码。它是一个从计算机程序中获取知识信息的过程,这些知识信息可以用于程序排错、增强程序、重用程序和整理文档等工作。在很多集成开发环境(IDE)中,都包括了一些初级的程序理解功能,比如:查找本变量的声明和使用位置。更高级一点的还能帮助查找类之间的关联关系等。4.1.2静态分析技术程序理解程序理解最主要的用途在于帮助理解程序,搞懂代码库中的39程序验证和属性检查程序验证是对源代码进行分析,如果源代码符合预先专门制定的一份描述程序行为的规格说明,那么则说明该程序完好。性检查的方法跟程序验证的方法从本质上是一样的,它们的区别在于,属性检查依据的只是描述部分程序行为的部分规格说明,而程序验证依据的是描述所有程序行为的规格说明。4.1.2静态分析技术代码中,在调用new分配内存后,程序未对调用结果的正确性进行检测。如果cbSize为0的话,则(cbSize-1)为-1。但是Memset中第3个参数本身是无符号数,因此会将-1视为正的0xffffffff,函数执行之后程序当然就只有崩溃了。程序验证和属性检查程序验证是对源代码进行分析,如果源代码符合40Bug查找Bug查找是指按照预先制定的一些共同认同的规则,来查找程序中存在的一些bug。4.1.2静态分析技术最后一行将产生一个null指针异常,因为变量actions还没有初始化如果第1行的Map不包括一个名为“bob”的人,那么在第5行询问person的名字时就会出现null指针异常。
Bug查找Bug查找是指按照预先制定的一些共同认同的规则,来41安全审查以安全为中心的静态分析;现代安全分析工具往往更像是一种属性检查程序和bug查找程序的混合体,许多安全属性能被简洁的表达为程序属性,对于一个属性检查程序来说,搜索潜在的缓冲区溢出漏洞可以当做是检查这样的程序属性:“程序不会访问被分配内存的边界之外的地址”。安全分析工具采纳了这样一种观念,即开发人员往往会继续再使用相同的不安全的方法来解决问题,这可说成是一种不安全的惯例。4.1.2静态分析技术安全审查以安全为中心的静态分析;4.1.2静态分析技术42代码安全静态分析工具的引入对程序员来说,对安全编程所需的知识缺乏理解会导致其所编写的代码不符合安全规范而引发安全问题。另外,即使是经验丰富的程序员也无法完全避免在代码编写的过程中出现或多或少的拼写错误,这类简单错误有时也可能引发安全问题。静态分析工具能够完整而客观地进行程序检测,而不管编码人员是否了解哪些代码是与安全“相关的”。当一种新的攻击出现时,静态分析工具可以迅速地对相关代码进行复查,同时分析该新型攻击能否对代码构成威胁。在被发现之前,某些安全缺陷已在程序中存在很久了,静态分析工具有能力针对新发现的缺陷类型对遗留代码进行检查。尽管误报难以避免,但从安全的角度看,漏报才是最严重的局限性。HPFortify4.1.2静态分析技术代码安全静态分析工具的引入对程序员来说,对安全编程所需的知识434.2静态分析的过程4.2静态分析的过程静态分析的过程提取源代码根据分析需求把程序源代码变换成易于分析处理的程序模型。在这个过程用到了编译原理中的成熟技术;将代码按照检查规则执行分析;按照制定的报告模式生成分析报告。4.2静态分析的过程静态分析的过程提取源代码4.2静态分析的过程45定义静态分析工具首先要做的,是用一个程序模型来表示待分析的代码,即提取目标代码的数据结构。在构建该模型的过程中,静态分析工具一般会借用大量来自编译器领域的技术:
词法分析语法分析
抽象语法
语义分析
跟踪控制流
跟踪数据流
污染传播
指针别名歧义4.2.1建模定义静态分析工具首先要做的,是用一个程序模型来表示待分析的代46词法分析是把源文件的字符流转换成记号流,即从左到右逐个字符对构成源程序的字符串进行扫描,依据词法规则,识别出一个一个的标记(token),把源程序变为等价的标记串序列。例:inta=3+5;经过词法分析会输出int,a,=,3,+,5和;这七个单词。然后比较记号流中的标识符和预先定义的安全性漏洞字典,如果匹配就发出警告。在静态分析工具中,词法分析是针对源代码进行的第一个操作,该操作将代码转换为一系列记号,这个记号流的创建过程称为词法分析4.2.1建模词法分析是把源文件的字符流转换成记号流,即从左到右逐个字符对47语法解析语法解析器中用来匹配上述记号流的是一种与上下文环境无关的语法。该语法由一组产生式构成,用语言中的一对符号来标记。4.2.1建模语法解析语法解析器中用来匹配上述记号流的是一种与上下文环境无48抽象语法解析树无法完成复杂的分析,因为在解析工程中,经常会对语法进行等价的转换,这样会给语法引入一些多余的成分,对后续阶段造成不利影响,甚至会使各阶段变得混乱。因此,很多编译器(包括GJC)经常要独立地构造解析树,为前、后端建立一个清晰的接口。这时就需要使用抽象语法树(AST)。上例中的语法树如下:4.2.1建模抽象语法树的结构不依赖于源文件的文法,也就是解析阶段所采用的上下文无关语法,因此它能够为后来的分析提供一个更加标准方便的版本抽象语法解析树无法完成复杂的分析,因为在解析工程中,经常会对49语义分析语义分析,即审查每个语法成分的静态语义。4.2.1建模语义分析检查点类型检查控制流检查一致性检查语义分析语义分析,即审查每个语法成分的静态语义。4.2.150跟踪控制流许多静态分析算法都会探究函数执行可能采取的路径。因此,绝大多数分析工具都会在AST或者中间表示法之上生成一个控制流图以使算法更高效。控制流图中的节点是一些基本块:指令序列总以连续方式从第一条执行到最后一条。4.2.1建模跟踪控制流许多静态分析算法都会探究函数执行可能采取的路径。因51跟踪数据流数据流分析一般是对某个函数的控制流图进行遍历,同时记录数据值的产生和使用位置。4.2.1建模跟踪数据流数据流分析一般是对某个函数的控制流图进行遍历,同时52污染传播通过污染传播测试能知道攻击者可能潜在地控制程序中的哪些值,确定污染数据的来源,找出所有外部数据进入程序的入口代码以及它在程序中是如何移动的。4.2.1建模代码动态构建和执行一个SQL查询,查找与给定名称匹配的item。查询限定只有当当前用户名与item的所有者名称匹配时,才向当前用户显示item。污染传播通过污染传播测试能知道攻击者可能潜在地控制程序中的哪53指针别名歧义指针别名分析是另一个问题数据流问题。别名分析的目的是要了解哪些指针可能是指向相同的内存位置。例:只有当指针p1和p2不指向内存的相同位置时,编译器才会记录下面两个声明:*p1=1;*p2=2;对于安全工具来说,别名分析在执行污染传播测试方面很重要。一个流动的敏感的污点-跟踪算法需要执行别名分析,以了解下面代码中从getUserInput()到processInput()的数据流:
p1=p2;
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 语音识别试题及答案
- 阿里定级面试题及答案
- 房地产销售策略与实战
- 2025年 道真自治县“特岗计划”教师招聘考试笔试试卷附答案
- 员工安全培训手册
- 2025年中国喷气背包行业市场全景分析及前景机遇研判报告
- 2025年中国内衣裤洗衣机行业市场全景分析及前景机遇研判报告
- 急救培训圆满毕业
- 住院患者护理风险评估制度
- 肿瘤晚期患者教育
- ISO 37001-2025 反贿赂管理体系要求及使用指南(中文版-雷泽佳译-2025)
- 特种设备安全管理的应急预案编制
- 高压环网柜施工方案
- 报销医保委托书
- 2025年内蒙古锡林郭勒盟事业单位人才引进历年高频重点提升(共500题)附带答案详解
- 辐射防护复习题及答案
- 各种恶劣天气行车安全培训
- 化工装置报废拆除施工方案
- 华东理工大学《生物信息学》2021-2022学年第一学期期末试卷
- 《秦腔》课件统编版高中语文选择性必修下册
- DB51-T 2975-2022 气凝胶复合保温隔热材料及系统通.用技术条件
评论
0/150
提交评论