




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第4章 代码安全静态分析第1页,共31页。教学目标应掌握的知识要点:静态分析的概念;静态分析技术;静态分析的过程;执行代码审查;安全审查;静态分析度量标准;静态分析中的常见缺陷;缓冲区溢出。软件漏洞重点代码安全静态分析静态分析中的常见缺陷静态分析的过程第2页,共31页。本节安排静态分析的概念静态分析技术代码静态分析工具的引入第3页,共31页。4.1 静态分析第4页,共31页。定义及特点程序静态分析(Program Static Analysis)是指在不运行代码的方式下,通过各种分析工具对程序代码进行扫描并做出评估的过程。4.1.1 静态分析的概念特点不实际执行程序,只是通过对代码的静态扫描对
2、程序进行分析执行速度快、效率高第5页,共31页。类型检查例1 short s = 1; int i =s; short r =i; 在本例中,程序的本意是想要将一个类型为int的表达式赋予给一个类型为short的变量,但是却无法通过类型检查。可以通过一个显式的类型转换来解决这个问题。例2 String sa = new String100; sa0 = hello world; Object oa = sa; oa0 = new Integer(1); System.out.println(sa0); 只有只读的Object 才能是String的父类型。但Java里并没有只读数组这么个类型,于
3、是错误发生了。4.1.2 静态分析技术第6页,共31页。风格检查风格检查程序所显示的错误常只是影响代码的可读性和可维护性,而不是程序运行过程中会发生的某种错误PMD会检查出:catch块中没有内容、if判断块中没有内容、代码中出现System.out.println等警告描述。4.1.2 静态分析技术第7页,共31页。程序理解程序理解最主要的用途在于帮助理解程序,搞懂代码库中的大量代码。它是一个从计算机程序中获取知识信息的过程,这些知识信息可以用于程序排错、增强程序、重用程序和整理文档等工作。在很多集成开发环境(IDE)中,都包括了一些初级的程序理解功能,比如:查找本变量的声明和使用位置。更高
4、级一点的还能帮助查找类之间的关联关系等。4.1.2 静态分析技术第8页,共31页。程序验证和属性检查程序验证是对源代码进行分析,如果源代码符合预先专门制定的一份描述程序行为的规格说明,那么则说明该程序完好。性检查的方法跟程序验证的方法从本质上是一样的,它们的区别在于,属性检查依据的只是描述部分程序行为的部分规格说明,而程序验证依据的是描述所有程序行为的规格说明。4.1.2 静态分析技术代码中,在调用new分配内存后,程序未对调用结果的正确性进行检测。如果cbSize为0的话,则(cbSize - 1)为-1。但是Memset中第3个参数本身是无符号数,因此会将-1视为正的0 xffffffff
5、,函数执行之后程序当然就只有崩溃了。第9页,共31页。Bug查找Bug查找是指按照预先制定的一些共同认同的规则,来查找程序中存在的一些bug。4.1.2 静态分析技术最后一行将产生一个 null 指针异常,因为变量 actions 还没有初始化如果第1行的Map不包括一个名为“bob”的人,那么在第5行询问 person 的名字时就会出现 null 指针异常。第10页,共31页。安全审查以安全为中心的静态分析;现代安全分析工具往往更像是一种属性检查程序和bug查找程序的混合体,许多安全属性能被简洁的表达为程序属性,对于一个属性检查程序来说,搜索潜在的缓冲区溢出漏洞可以当做是检查这样的程序属性:
6、“程序不会访问被分配内存的边界之外的地址”。安全分析工具采纳了这样一种观念,即开发人员往往会继续再使用相同的不安全的方法来解决问题,这可说成是一种不安全的惯例。4.1.2 静态分析技术第11页,共31页。代码安全静态分析工具的引入对程序员来说,对安全编程所需的知识缺乏理解会导致其所编写的代码不符合安全规范而引发安全问题。另外,即使是经验丰富的程序员也无法完全避免在代码编写的过程中出现或多或少的拼写错误,这类简单错误有时也可能引发安全问题。静态分析工具能够完整而客观地进行程序检测,而不管编码人员是否了解哪些代码是与安全“相关的”。当一种新的攻击出现时,静态分析工具可以迅速地对相关代码进行复查,同
7、时分析该新型攻击能否对代码构成威胁。在被发现之前,某些安全缺陷已在程序中存在很久了,静态分析工具有能力针对新发现的缺陷类型对遗留代码进行检查。尽管误报难以避免,但从安全的角度看,漏报才是最严重的局限性。HP Fortify 4.1.2 静态分析技术第12页,共31页。4.2 静态分析的过程第13页,共31页。静态分析的过程提取源代码根据分析需求把程序源代码变换成易于分析处理的程序模型。在这个过程用到了编译原理中的成熟技术;将代码按照检查规则执行分析;按照制定的报告模式生成分析报告。4.2 静态分析的过程第14页,共31页。定义静态分析工具首先要做的,是用一个程序模型来表示待分析的代码,即提取目
8、标代码的数据结构。在构建该模型的过程中,静态分析工具一般会借用大量来自编译器领域的技术: 词法分析 语法分析 抽象语法 语义分析 跟踪控制流 跟踪数据流 污染传播 指针别名歧义4.2.1 建模第15页,共31页。词法分析是把源文件的字符流转换成记号流,即从左到右逐个字符对构成源程序的字符串进行扫描,依据词法规则,识别出一个一个的标记(token),把源程序变为等价的标记串序列。例:int a = 3 + 5;经过词法分析会输出 int,a,=,3,+,5和;这七个单词。然后比较记号流中的标识符和预先定义的安全性漏洞字典,如果匹配就发出警告。在静态分析工具中,词法分析是针对源代码进行的第一个操作
9、,该操作将代码转换为一系列记号,这个记号流的创建过程称为词法分析4.2.1 建模第16页,共31页。语法解析语法解析器中用来匹配上述记号流的是一种与上下文环境无关的语法。该语法由一组产生式构成,用语言中的一对符号来标记。4.2.1 建模第17页,共31页。抽象语法解析树无法完成复杂的分析,因为在解析工程中,经常会对语法进行等价的转换,这样会给语法引入一些多余的成分,对后续阶段造成不利影响,甚至会使各阶段变得混乱。因此,很多编译器(包括GJC)经常要独立地构造解析树,为前、后端建立一个清晰的接口。这时就需要使用抽象语法树(AST)。上例中的语法树如下:4.2.1 建模抽象语法树的结构不依赖于源文
10、件的文法,也就是解析阶段所采用的上下文无关语法,因此它能够为后来的分析提供一个更加标准方便的版本第18页,共31页。语义分析语义分析,即审查每个语法成分的静态语义。4.2.1 建模语义分析检查点类型检查控制流检查一致性检查第19页,共31页。跟踪控制流许多静态分析算法都会探究函数执行可能采取的路径。因此,绝大多数分析工具都会在AST或者中间表示法之上生成一个控制流图以使算法更高效。控制流图中的节点是一些基本块:指令序列总以连续方式从第一条执行到最后一条。4.2.1 建模第20页,共31页。跟踪数据流数据流分析一般是对某个函数的控制流图进行遍历,同时记录数据值的产生和使用位置。4.2.1 建模第
11、21页,共31页。污染传播通过污染传播测试能知道攻击者可能潜在地控制程序中的哪些值,确定污染数据的来源,找出所有外部数据进入程序的入口代码以及它在程序中是如何移动的。4.2.1 建模代码动态构建和执行一个SQL查询,查找与给定名称匹配的item。查询限定只有当当前用户名与item的所有者名称匹配时,才向当前用户显示item。第22页,共31页。指针别名歧义指针别名分析是另一个问题数据流问题。别名分析的目的是要了解哪些指针可能是指向相同的内存位置。例: 只有当指针p1和p2不指向内存的相同位置时,编译器才会记录下面两个声明: *p1 = 1; *p2 = 2;对于安全工具来说,别名分析在执行污染
12、传播测试方面很重要。一个流动的敏感的污点-跟踪算法需要执行别名分析,以了解下面代码中从getUserInput()到processInput()的数据流: p1 = p2; *p1 = getUserInput(); processInput(*p2);4.2.1 建模第23页,共31页。组成任何优秀的分析策略都至少包括两个组成部分:分析每个单独的函数的程序内分析(本地分析)和分析函数之间的关系的程序间分析(全局分析)。4.2.2 分析算法第24页,共31页。断言4.2.2 分析算法从安全特性产生的断言那些与在程序中传送时数据被赋予的信任等级相关的断言缓冲区溢出漏洞所引发的断言对象在程序运行时
13、的状态第25页,共31页。本地分析法本地分析法抽象解释:是一种通用技术,这种方法首先将程序中与所关注的属性无关的信息抽取出去,而后使用选中的程序抽象执行一种解释。谓词转换器:一种用来替换模拟和解释的方法是导出函数对其调用者的需求。模型检查:对于临时性的安全属性,比如“内存应该只释放一次”以及“应该只有非空指针才能被解除引用”,可以很容易地将所检查的属性表示为一个小型的有限状态自动机。4.2.2 分析算法第26页,共31页。全局分析全局分析的作全局分析被采用的实质原因有两个方面:首先,它可以保证汇编系统的一致性;其次,它通过提供自动优化,减轻了程序员的负担。用是用来分析程序中各个函数之间的关系。4.2.2 分析算法第27页,共31页。定义及分类是指安全工具应该报告的内容的规则集。分析算法有时可能由错误的“因”获得正确的“果”,但分析工具永远也不会报告超出规则
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 四川省乐山市重点中学2025年高考化学三模试卷含解析
- 湖南名师联盟2025年高三第二次模拟考试化学试卷含解析
- 幼儿教育实训大厅
- 关注安全珍惜生命
- 河北省张家口市尚义县第一中学2025届高三考前热身化学试卷含解析
- 学前教育专业绘本故事的重要性与应用
- 福建省泉州市20023年第29届WMO竞赛四年级数学下学期竞赛试卷
- 2024-2025学年河南省创新发展联盟3月天一大联考高一下学期阶段性测试(三)数学试卷(含答案)
- 2025届安徽省黄山市屯溪第二中学高三3月份第一次模拟考试化学试卷含解析
- 成人肺部感染的监测与护理
- 江西省南昌中学2024-2025学年高一下学期3月月考地理试题(原卷版+解析版)
- 6《请帮我一下》(第1课时)课件-2024-2025学年道德与法治一年级下册课件(统编版2024)
- 落实“215”专项行动:xx小学体育“加速度”
- 2025年湖北省八市高三(3月)联考政治试卷(含答案详解)
- 国际热点政治课件
- Unit 5 Here and now Section B project 教学设计 2024-2025学年人教版(2024)七年级英语下册
- 老年人60岁以上C1驾考三力测试题及答案
- 2020-2021学年江苏省南京外国语河西初级中学等三校七年级(下)期中数学试卷
- 2024年下半年广西现代物流集团社会招聘校园招聘笔试参考题库附带答案详解
- 2025年河南经贸职业学院单招职业技能测试题库及答案一套
- 2025年慢性阻塞性肺疾病全球创议GOLD指南修订解读课件
评论
0/150
提交评论