使用静态技术找到真正的代码质量缺陷与安全漏洞_第1页
使用静态技术找到真正的代码质量缺陷与安全漏洞_第2页
使用静态技术找到真正的代码质量缺陷与安全漏洞_第3页
使用静态技术找到真正的代码质量缺陷与安全漏洞_第4页
使用静态技术找到真正的代码质量缺陷与安全漏洞_第5页
已阅读5页,还剩33页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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

Bug软件研发测试经济学绝大部分缺陷在修复成本较低时被引入。大部分缺陷在成本较高时被发现和修复。代码静态分析技术代码静态分析•

定义:在不执行计算机程序的条件下,对源代码进行分析,找出代码缺陷•

执行方式:一般配合静态程序分析工具进行•

采用技术:数据流分析、机器学习、语义精简...•

可检测类型:死锁,空指针,资源泄露,缓冲区溢出,安全漏洞,竞态条件...•

优点:•

能够检测所有的代码级别的可执行路径组合,快速,准确•

直接面向源码,分析多种问题

在研发阶段开始找到并修复多种问题,节省大量时间/人力成本•

注意:静态分析不是万能的,测试是持续的过程,非一劳永逸•

编译器警告:

保证类型安全–

最初级的静态分析,检测规则简单•

中间语言分析:

检测字节码(

Byte

Code

)的缺陷,将其重新映射到真实代码中–

在转换与映射过程中易造成精度丢失•

高误报率:目前静态分析产品的误报率普遍在30%以上。•

缺陷种类较少,找到的问题级别不高:多数为代码规范或低级缺陷,非实际Bug–

如命名规范、类定义规范,最佳实践.....•

易用性较低:基本上都是一次性的使用工具,无法与SDLC集成–

SCM集成:如SVN,CVS,Perforce,Git–

Bug

Tracking:如Bugzilla,Jira现存问题••由斯坦福大学教授Dawson

Engler提出,在深度理解代码与程序语义的基础上检测缺陷旨在查找“真正的代码缺陷”•

实现原理:•••使用可扩展的metal语言定义正确性Checker将程序的源码使用状态机进行抽象描述(State

Machine

Abstraction)。使用xgcc系统匹配Checker与抽象状态机状态,找到问题所在的点。•

可准确检测实际的Bug(内存和指针问题、资源泄露、缓冲区溢出,数组越界,

心脏出血漏洞...)••能够检测高达亿行级别的代码库,避免“状态爆炸”使用模型检验与符号执行技术,误报率降低至15%以下•

算法已步入实际应用••面向企业的Coverity

软件面向开源代码的Coverity

SCAN改进型的静态分析方案

基于Meta

Compilation的静态分析:源码分析-数据流分析•

源码分析可以探知开发者的想法:

“x=1”

需要在调用

“do_something”

后继续执行。•

提出警告:if循环没有包含所有语句如何进行Java代码静态分析?Java语言被编译成JVM

bytecode

-

在运行时被转换成本地可执行代码的分析选项一•

分析

byte-code:用户编译他们的软件,然后分析编译后的可执行文件与调试信息,分析引擎联系找到的缺陷与源代码位置•

某些开源工具的实现原理选项二:•

获取所有的Java编译过程并执行分析•

Bytecode分析工作仍旧存在,但包含更多的内容1基本的工作流

获取所有编译过程

每当

“javac(或其他相关API)”

被调用后,编译获取系统

记录所有的编译器选项,操作,源代码与调用的库文件

面向源代码和库文件可进行全面编译后分析

找到的缺陷将被展示给研发人员修复如何何分分析析缺缺陷陷??1•过程程间间分分析析((Intra-proceduralanalyses)将将考考虑每每一一个个合合理理的的可可执执行行路路径径•快速速修修剪剪不不可可行行路路径径是是一一件件很很麻麻烦烦的的事事情情!!•数学学方方案案•获取取一一系系列列的的函函数数定定义义•资源源分分配配•调用用….•过程程间间分分析析•Bytecode分析析将将创创建建函函数数定定义义如何何分分析析缺缺陷陷??1•数据据流流分分析析将将跟跟踪踪所有有应应用用中中的的不不可可信信数数据据•“source””•“sink””•二者者之之间间必必须须进进行行验验证证•某些些使使用用智智能能静静态态分分析析,,例例如如:•checkedthisreturnvaluefornull19timesoutof20•accessedthisfieldunderalock19timesoutof20•calledbase.Foo()in19overridesofFoo()outof201找到到潜潜在在Bug其实实只只是是难难题题之之一一•消除除误误报报非非常常难难•将复复杂杂的的缺缺陷陷解解释释出出来来很很难难•只找找潜潜在在的的一一次次性性缺缺陷陷是是很很难难的的1难题题!!ControlFlowGraph如何何简简化化搜搜索索??A(Source)BC(Escaper)DE(Sink)TaintedData?数据据流流分分析析AdvanceddataflowTaintedData•动态态“fuzzing””•基于于上上下下文文分分析析CoverityOWASPtop10:JSP&ASPOWASP10-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空指针引用–Null检查后引用空空指针–直接引用返回回的空指针–Null检查前引用空空指针API使用错误–无效迭代器使使用–不可修改的集集合错误–已释放资源调调用性能缺陷–低效率方法使使用–在循环中连接接字符串–冗余同步逻辑错误–不可达代码–未使用变量–常量表达式–非本地资源不不当使用–整数溢出–不当分号Java缺陷Web应用安全缺陷陷(OWASPTop10)–跨站脚本攻击击–SQL注入–命令行注入–路径遍历…资源泄露–数据库连接资资源泄露–资源泄露–Socket&Stream泄露并发数据访问问异常–变量非原子更更新–双重检查锁定定–数据竞态条件件–Volatile非原子更新–Servlet属性无效锁定定–单例模式竞态态条件程序假死–线程死锁–死锁代码可维护性性缺陷–调用已过期方方法–显式垃圾收集集–非静态方法中中设置静态变变量–复制/粘贴错误–不可达代码可疑代码–参数次序错误误–格式错误Java缺陷类层次结构不不一致–调用super.clone()或supler.finalize()失败–父函数调用丢丢失–构造函数中使使用虚函数控制流缺陷–在Finally模块中返回–Switch语句中break丢失错误处理缺陷陷–未验证的返回回值数据库操作–不正确的实体体哈希–Load函数返回值错错误验证–不完全持续周周期–get()不当使用资源泄露–数据库连接资资源泄露–资源泄露–Socket&Stream泄露API使用错误–已释放资源调调用并发数据访问问异常–变量非原子更更新–数据竞态条件件性能缺陷–低效率方法使使用–在循环中连接接字符串–冗余同步程序假死–线程死锁–死循环可疑代码–复制/粘贴错误–参数次序错误误–格式错误类层次结构不不一致–调用base.close()或base.dispose()失败–父函数调用丢丢失控制流缺陷–可疑的额外分分号–不一致比较–不兼容的类型型比较空指针引用–Null检查后后引用用空指指针–直接引引用返返回的的空指指针–Null检查前前引用用空指指针算术错错误–错误移移位操操作–不正确确的表表达式式–表达式式计算算过程程中溢溢出C#缺陷PoweredbyEricLippert检测实实例-SQLInjectionCopy-pasteerrorinreal-worldcode2if(returns!=null){r.retvals=ScopeParser.parseTypedArgList(returns,returns.getText(),g.tool.errMgr);r.retvals.type=AttributeDict.DictType.RET;r.retvals.ast=returns;}if(locals!=null){r.locals=ScopeParser.parseTypedArgList(locals,locals.getText(),g.tool.errMgr);r.locals.type=AttributeDict.DictTYpe.LOCAL;r.locals.ast=returns;}•Checker描述(metal语言)检测代代码::C语言静静态分分析•符号执执行•不执行行程序序,用用符号号值表表示程程序变变量的的值,,模拟拟程序序执行•可以分分析代代码的的所有有/部分语语义信信息•避免状状态爆爆炸•模型检检验XGCC系统内存崩崩溃•内存访访问溢溢出•字符串串长度度计算算错误误•缓冲区区溢出出•写指针针溢出出•负数组组索引引写入入•内存错错误分分配•错误的的内存存释放放非法内内存访访问•不正确确的delete操作•溢出指指针读读取•越界读读取•返回指指针至至本地地变量量•负数组组索引引读取取•已释放放指针针读/写•不兼容容的指指针转转换控制流流缺陷陷•逻辑/结构死死代码码•Switch语句中中break遗失•非本地地资源源不当当使用用C/C++缺陷-Part1资源泄泄露•内存泄泄露•MicrosoftCOM内存泄泄露•Object资源泄泄露•不当delete未初始始化变变量•返回语语句丢丢失•未初始始化的的指针针/标量/数组读写•类或结结构体体中未未初始始化的的数据据成员员并发缺缺陷•死锁•竞态条条件((Raceconditions)•阻塞调调用误误用算术错错误•负变量量不当当使用用•异常符符号扩扩展•整数溢溢出•除零异异常26•••••死循环环双重锁锁或解解锁丢丢失负循环环边界界值线程死死锁持锁过过程中中调用用sleep()空指针针引用用•Null检查后后引用用空指指针•直接引引用返返回的的空指指针•Null检查前前引用用空指指针不安全全的数数据处处理•不可信信的循循环数数据源源•使用非非可信信数据据源读读写数数组/指针•使用非非可信信数据据源格格式化化字符符串性能缺缺陷•值传递递大参参数•使用大大堆栈栈安全措措施违违反••缓冲区区溢出出固定长长度缓缓冲区区写入入•非安全全函数数调用用•非安全全临时时文件件使用用•检查/使用时时间不不一致致•用户空空间指指针不不当使使用API错误使使用•非安全全chroot调用•错误的的迭代代器使使用•printf()参数不不匹配配C/C++缺陷-Part2程序假假死错误处处理缺缺陷•未验证证的返返回值值•未获取取异常常•负变量量不当当使用用代码维维护性性缺陷陷•多返回回语句句•无效变变量异常代代码•复制/粘贴错错误•格式错错误27•HeartBleed安全检检查•定义TaintedData检测实实例-HeartBleedBugCoverityJenkins检测对对比30类型未处理理的缺缺陷((Null引用))资源泄泄露并发问问题重要的的缺陷陷代码规规范,,最佳佳实践践等Bug总数FindBugs7121029598627SharedDefects513927128Coverity7986221879196CoverityFreeradius缺陷检测测对比3122188类型内存问题题资源泄露露控制流缺缺陷,并并发访问问等问题重要的缺缺陷代码规范范,最佳佳实践等等TotalBugClang5330385997SharedDefects001123119Coverity7986831039121“瀑布式式开发流流程”需求挖掘掘设计实施验证支持开发测试发布经典的瀑瀑布式开开发流程程:•代码开发发与测试试之间存存在延迟迟•QA经常由其其他部门门负责,,在编码码阶段完完成后才才能开始始•安全保护护基本是是在“事事发之后后”才由由单独的的安全部部门提供供“敏捷开开发流程程”需求挖掘掘设计实施验证支持开发测试发布理想的敏敏捷开发发流程::•将整个实实施和验验证流程程缩短成成2-4周的“冲冲刺”(sprints)•开发好的的功能只只有在经经过全面面验证之之后才被被“接受受”•为取得成成功,QA及安全测测试都必必须是深深入的自自动化测测试•Requirementsdefinition提交•BusinessProcess修复检测IDE源代码管管理夜间构建建缺陷跟踪踪缺陷缺陷缺陷软件生命命周期集集成敏捷开发发相关人员员任务自自动分配配提交提交提交•Developfeatures•Reviewdefects•Prioritizeactions•Makefixes•Trackprogress修复检测34自动代码检测–CVE-2005-0467{示例:C/C++char*p=snewn(len+1,char);memcpy(p,s,len);p[len]='';returnp;}•这片代码来自自PuTTY–PuTTY是是面向Win32和Unix平台以以及xterm终端仿真真程序而免费实施施的Telnet与SSHstaticchar*foo(char安漏洞•2005年在在PuTTY中发现*s,全intlen)char*p=malloc((len+1)*sizeof(char));memcpy(p,s,len);p[len]=‘\0’’;returnstaticchar*mkstr(char*s,intlen)p;}{CVE-2005-0467staticchar*mkstr(char*s,intlen){char*p=snewn(len+1,char);memcpy(p,s,len);p[len]='';structsftp_request{/*sftp_pkt_getstringcallwithcontrolledlenvalue*/sftp_pkt_getstring(pktin,&hstring,&len);...handle=snew(structfxp_handle);/*heapcorruptionwilloccuriflen==-1*/handle->hstring=mkstr(hstring,len);handle->hlen=len;sftp_pkt_free(pktin);returnhandle;...}staticvoidsftp_pkt_getstring(structsftp_packet*pkt,char**p,int*length){*p=NULL;if(pkt->length-pkt->savedpos<4)return;/*lengthvalueistakenfromuser-supplieddata*/*length=GET_32BIT(pkt->data+pkt->savedpos);pkt->savedpos+=4;/*thischeckwillbepassediflength<0*/if(pkt->length-pkt->savedpos<*length)structreturn;fxp_handle*fxp_open_recv(structsftp_packet*pktin,*p=pkt->data+pkt->savedpos;*req)pkt->savedpos+=*length;}...returnp;分类、行动部部署及任务分配如何处理?安全及其他问问题的统一视图对缺陷进行清清晰描述清晰描述显示示缺陷的控制流面向宏和进程程间缺陷的联防(inline)选项9、静夜四四无邻,,荒居旧旧业贫。。。12月-2212月-22Wednesday,December28,202210、雨中中黄叶叶树,,灯下下白头头人。。。20:27:3020:27:3020:2712/28/20228:27:30PM11、以我独沈沈久,愧君君相见频。。。12月-2220:27:3020:27Dec-2228-Dec-2212、故人江海别别,几度隔山山川。。20:27:3020:27:3020:27Wednesday,December28,202213、乍见翻翻疑梦,,相悲各各问年。。。12月-2212月-2220:27:3020:27:30December28,202214、他乡乡生白白发,,旧国国见青青山。。。28十十二二月20228:27:30下下午20:27:3012月月-2215、比不了得得就不比,,得不到的的就不要。。。。十二月228:27下下午12月-2220:27December28,202216、行动出出成果,,工作出出财富。。。2022/12/2820:27:3020:27:3028December202217、做前,能够够环视四周;;做时,你只只能或者最好好沿着以脚为为起点的射线线向前。。8:27:30下午8:27下下午20:27:3012月-229、没有有失败败,只只有暂暂时停停止成成功!!。12月月-2212月月-22Wednesday,December28,202210、很很多多事事情情努努力力了了未未必必有有结结果果,,但但是是不不努努力力却却什什么么改改变变也也没没有有。。。。20:27:3020:27:3020:2712/28/20228:27:30PM11、成功就是日日复一日那一一点点小小努努力的积累。。。12月-2220:27:3020:27Dec-2228-Dec-2212、世间成事事,不求其其绝对圆满满,留一份份不足,可可得无限完完美。。20:27:3020:27:3020:27Wednesday,December28,202213、不知香积寺寺,数里入云云峰。。12月-2212月-2220:27:3020:27:30December28,202214、意志志坚强强的人人能把把世界界放在在手中中像泥泥块一一样任任意揉揉捏。。28十十二二月20228:27:30下下午20:27:3012月月-2215、楚塞三三湘接,,荆门九九派通。。。。十二月228:27下午午12月-2220:27December28,202216、少年十十五

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论