使用静态分析技术找到“真正”的代码质量缺陷与安全漏洞.pptx

使用静态分析技术找到“真正”的代码质量缺陷与安全漏洞.pptx

  1. 1、本文档共37页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
使用静态分析技术找到“真正”的代码质量缺陷与安全漏洞

使用静态分析技术找到“真正”的代码质量缺陷与安全漏洞HeartBleed Bug软件研发测试经济学绝大部分缺陷在修复成本较低时被引入。大部分缺陷在成本较高时被发现和修复。代码静态分析技术代码静态分析? 定义:在不执行计算机程序的条件下,对源代码进行分析,找出代码缺陷? 执行方式:一般配合静态程序分析工具进行? 采用技术:数据流分析、机器学习、语义精简...? 可检测类型:死锁,空指针,资源泄露,缓冲区溢出,安全漏洞,竞态条件...? 优点:? 能够检测所有的代码级别的可执行路径组合,快速,准确? 直接面向源码,分析多种问题 ? 在研发阶段开始找到并修复多种问题,节省大量时间/人力成本? 注意:静态分析不是万能的,测试是持续的过程,非一劳永逸现存问题? 编译器警告: 保证类型安全– 最初级的静态分析,检测规则简单? 中间语言分析: 检测字节码( Byte Code )的缺陷,将其重新映射到真实代码中– 在转换与映射过程中易造成精度丢失? 高误报率:目前静态分析产品的误报率普遍在30%以上。? 缺陷种类较少,找到的问题级别不高:多数为代码规范或低级缺陷,非实际Bug– 如命名规范、类定义规范,最佳实践.....? 易用性较低:基本上都是一次性的使用工具,无法与SDLC集成– SCM集成:如SVN,CVS,Perforce,Git– Bug Tracking:如Bugzilla,Jira改进型的静态分析方案 ? 基于Meta Compilation的静态分析:??由斯坦福大学教授Dawson Engler提出,在深度理解代码与程序语义的基础上检测缺陷旨在查找“真正的代码缺陷”? 实现原理:???使用可扩展的metal语言定义正确性Checker将程序的源码使用状态机进行抽象描述(State Machine Abstraction)。使用xgcc系统匹配Checker与抽象状态机状态,找到问题所在的点。? 可准确检测实际的Bug(内存和指针问题、资源泄露、缓冲区溢出,数组越界, 心脏出血漏洞...)??能够检测高达亿行级别的代码库,避免“状态爆炸”使用模型检验与符号执行技术,误报率降低至15%以下? 算法已步入实际应用??面向企业的Coverity 软件面向开源代码的Coverity SCAN源码分析-数据流分析? 源码分析可以探知开发者的想法: “x=1” 需要在调用 “do_something” 后继续执行。? 提出警告:if循环没有包含所有语句如何进行Java代码静态分析?Java语言被编译成JVM bytecode - 在运行时被转换成本地可执行代码的分析选项一? 分析 byte-code:用户编译他们的软件,然后分析编译后的可执行文件与调试信息,分析引擎联系找到的缺陷与源代码位置? 某些开源工具的实现原理选项二:? 获取所有的Java编译过程并执行分析? Bytecode分析工作仍旧存在,但包含更多的内容基本的工作流 ? 获取所有编译过程 ? 每当 “javac(或其他相关API)” 被调用后,编译获取系统 记录所有的编译器选项,操作,源代码与调用的库文件 ? 面向源代码和库文件可进行全面编译后分析 ? 找到的缺陷将被展示给研发人员修复1如何分析缺陷??过程间分析(Intra-procedural analyses)将考虑每一个合理的可执行路径? 快速修剪不可行路径是一件很麻烦的事情!? 数学方案?获取一系列的函数定义? 资源分配? 调用….?过程间分析? Bytecode 分析将创建函数定义1如何分析缺陷?? 数据流分析将跟踪 所有应用中的不可信数据? “source”? “sink”? 二者之间必须进行验证? 某些使用智能静态分析,例如:? checked this return value for null 19 times out of 20? accessed this field under a lock 19 times out of 20? called base.Foo() in 19 overrides of Foo() out of 201找到潜在Bug其实只是难题之一 ?消除误报非常难 ?将复杂的缺陷解释出来很难 ?只找潜在的一次性缺陷是很难的1难题!Control Flow Graph1如何简化搜索?数据流分析Advanced data flow Tainted DataTainted Data? C(Escaper)A (Source)BDE (Sink)? 动态“fuzzing”? 基于上下文分析C overity OWASP top 10: JSPASP CWE映射 77, 78, 88, 89, 90, 564, 917 259, 321, 384, 79879, 80, 81, 82, 8

您可能关注的文档

文档评论(0)

little28 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档