使用静态分析技术找到真正的代码质量缺陷与安全漏洞课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《使用静态分析技术找到真正的代码质量缺陷与安全漏洞课件.ppt》由用户(晟晟文业)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 使用 静态 分析 技术 找到 真正 代码 质量 缺陷 安全漏洞 课件
- 资源描述:
-
1、使用静态分析技术找到“真正”的代码质量缺陷与安全漏洞使用静态分析技术找到真正的代码质量缺陷与安全漏洞ppt使用静态分析技术找到真正的代码质量缺陷与安全漏洞pptHeartBleed Bug软件研发测试经济学绝大部分缺陷在修复成本较低时被引入。大部分缺陷在成本较高时被发现和修复。代码静态分析技术代码静态分析 定义:在不执行计算机程序的条件下,对源代码进行分析,找出代码缺陷 执行方式:一般配合静态程序分析工具进行 采用技术:数据流分析、机器学习、语义精简.可检测类型:死锁,空指针,资源泄露,缓冲区溢出,安全漏洞,竞态条件.优点:能够检测所有的代码级别的可执行路径组合,快速,准确 直接面向源码,分析
2、多种问题 在研发阶段开始找到并修复多种问题,节省大量时间/人力成本 注意:静态分析不是万能的,测试是持续的过程,非一劳永逸 编译器警告:保证类型安全 最初级的静态分析,检测规则简单 中间语言分析:检测字节码(Byte Code)的缺陷,将其重新映射到真实代码中 在转换与映射过程中易造成精度丢失 高误报率:目前静态分析产品的误报率普遍在30%以上。缺陷种类较少,找到的问题级别不高:多数为代码规范或低级缺陷,非实际Bug 如命名规范、类定义规范,最佳实践.易用性较低:基本上都是一次性的使用工具,无法与SDLC集成 SCM集成:如SVN,CVS,Perforce,Git Bug Tracking:如
3、Bugzilla,Jira现存问题由斯坦福大学教授Dawson Engler提出,在深度理解代码与程序语义的基础上检测缺陷旨在查找“真正的代码缺陷”实现原理:使用可扩展的metal语言定义正确性Checker将程序的源码使用状态机进行抽象描述(State Machine Abstraction)。使用xgcc系统匹配Checker与抽象状态机状态,找到问题所在的点。可准确检测实际的Bug(内存和指针问题、资源泄露、缓冲区溢出,数组越界,心脏出血漏洞.)能够检测高达亿行级别的代码库,避免“状态爆炸”使用模型检验与符号执行技术,误报率降低至15%以下 算法已步入实际应用面向企业的Coverity
4、软件面向开源代码的Coverity SCAN改进型的静态分析方案 基于Meta Compilation的静态分析:源码分析-数据流分析 源码分析可以探知开发者的想法:“x=1”需要在调用“do_something”后继续执行。提出警告:if循环没有包含所有语句如何进行Java代码静态分析?Java语言被编译成JVM bytecode-在运行时被转换成本地可执行代码的分析选项一 分析 byte-code:用户编译他们的软件,然后分析编译后的可执行文件与调试信息,分析引擎联系找到的缺陷与源代码位置 某些开源工具的实现原理选项二:获取所有的Java编译过程并执行分析 Bytecode分析工作仍旧存在
5、,但包含更多的内容1基本的工作流 获取所有编译过程 每当“javac(或其他相关API)”被调用后,编译获取系统记录所有的编译器选项,操作,源代码与调用的库文件 面向源代码和库文件可进行全面编译后分析 找到的缺陷将被展示给研发人员修复如何分析缺陷?1过程间分析(Intra-procedural analyses)将考虑每一个合理的可执行路径 快速修剪不可行路径是一件很麻烦的事情!数学方案获取一系列的函数定义 资源分配 调用.过程间分析 Bytecode 分析将创建函数定义如何分析缺陷?1 数据流分析将跟踪 所有应用中的不可信数据 “source”“sink”二者之间必须进行验证 某些使用智能静
6、态分析,例如: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 Graph如何简化搜索?A(Source)BC(Escaper)DE(Sink)TaintedData?数据流分析Advanced data
7、flowTaintedData 动态“fuzzing”基于上下文分析C overity OWASP top 10:JSP&ASPOWASP 10-2013A1:注入A2:失效认证与会话管理A3:跨站脚本攻击(XSS)A4:不安全的直接对象引用A5:安全配置错误A6:敏感信息泄露A7:功能级访问控制缺失A8:跨站请求伪造A9:使用含有已知漏洞的组件A10:未验证的重定向和转发CWE映射77,78,88,89,90,564,917259,321,384,79879,80,81,82,83,84,86,8722,23,364,7,86,650321425,862,863352NA938空指针引用 N
8、ull检查后引用空指针 直接引用返回的空指针 Null检查前引用空指针API 使用错误 无效迭代器使用 不可修改的集合错误 已释放资源调用性能缺陷 低效率方法使用 在循环中连接字符串 冗余同步逻辑错误 不可达代码 未使用变量 常量表达式 非本地资源不当使用 整数溢出 不当分号Java 缺陷Web 应用安全缺陷(OWASP Top 10)跨站脚本攻击 SQL 注入 命令行注入 路径遍历资源泄露 数据库连接资源泄露 资源泄露 Socket&Stream 泄露并发数据访问异常 变量非原子更新 双重检查锁定 数据竞态条件 Volatile非原子更新 Servlet 属性无效锁定 单例模式竞态条件程序假
9、死 线程死锁 死锁代码可维护性缺陷 调用已过期方法 显式垃圾收集 非静态方法中设置静态变量 复制/粘贴错误 不可达代码可疑代码 参数次序错误 格式错误Java 缺陷类层次结构不一致 调用 super.clone()或 supler.finalize()失败 父函数调用丢失 构造函数中使用虚函数控制流缺陷 在Finally模块中返回 Switch语句中break丢失错误处理缺陷 未验证的返回值数据库操作 不正确的实体哈希 Load函数返回值错误验证 不完全持续周期 get()不当使用资源泄露 数据库连接资源泄露 资源泄露 Socket&Stream 泄露API 使用错误 已释放资源调用并发数据访
10、问异常 变量非原子更新 数据竞态条件性能缺陷 低效率方法使用 在循环中连接字符串 冗余同步程序假死 线程死锁 死循环可疑代码 复制/粘贴错误 参数次序错误 格式错误类层次结构不一致 调用 base.close()或 base.dispose()失败 父函数调用丢失控制流缺陷 可疑的额外分号 不一致比较 不兼容的类型比较空指针引用 Null检查后引用空指针 直接引用返回的空指针 Null检查前引用空指针算术错误 错误移位操作 不正确的表达式 表达式计算过程中溢出C#缺陷 Powered by Eric Lippert检测实例-SQL InjectionCopy-paste error in re
展开阅读全文