首页 [精选]使用静态分析技术找到真正的代码质量缺陷与安全漏洞

[精选]使用静态分析技术找到真正的代码质量缺陷与安全漏洞

举报
开通vip

[精选]使用静态分析技术找到真正的代码质量缺陷与安全漏洞使用静态分析技术找到“真正”的代码质量缺陷与安全漏洞HeartBleedBug软件研发测试经济学绝大部分缺陷在修复成本较低时被引入。大部分缺陷在成本较高时被发现和修复。代码静态分析技术代码静态分析•定义:在不执行计算机程序的条件下,对源代码进行分析,找出代码缺陷•执行方式:一般配合静态程序分析工具进行•采用技术:数据流分析、机器学习、语义精简...•可检测类型:死锁,空指针,资源泄露,缓冲区溢出,安全漏洞,竞态条件...•优点:•能够检测所有的代码级别的可执行路径组合,快速,准确•直接面向源码,分析多种问题•在研发...

[精选]使用静态分析技术找到真正的代码质量缺陷与安全漏洞
使用静态分析技术找到“真正”的代码质量缺陷与安全漏洞HeartBleedBug软件研发测试经济学绝大部分缺陷在修复成本较低时被引入。大部分缺陷在成本较高时被发现和修复。代码静态分析技术代码静态分析•定义:在不执行计算机程序的条件下,对源代码进行分析,找出代码缺陷•执行方式:一般配合静态程序分析工具进行•采用技术:数据流分析、机器学习、语义精简...•可检测类型:死锁,空指针,资源泄露,缓冲区溢出,安全漏洞,竞态条件...•优点:•能够检测所有的代码级别的可执行路径组合,快速,准确•直接面向源码,分析多种问题•在研发阶段开始找到并修复多种问题,节省大量时间/人力成本•注意:静态分析不是万能的,测试是持续的过程,非一劳永逸•编译器警告:保证类型安全–最初级的静态分析,检测规则简单•中间语言分析:检测字节码(ByteCode)的缺陷,将其重新映射到真实代码中–在转换与映射过程中易造成精度丢失•高误报率:目前静态分析产品的误报率普遍在30%以上。•缺陷种类较少,找到的问题级别不高:多数为代码规范或低级缺陷,非实际Bug–如命名规范、类定义规范,最佳实践.....•易用性较低:基本上都是一次性的使用工具,无法与SDLC集成–SCM集成:如SVN,CVS,Perforce,Git–BugTracking:如Bugzilla,Jira现存问题••由斯坦福大学教授DawsonEngler提出,在深度理解代码与程序语义的基础上检测缺陷旨在查找“真正的代码缺陷”•实现原理:•••使用可扩展的metal语言定义正确性Checker将程序的源码使用状态机进行抽象描述(StateMachineAbstraction)。使用xgcc系统匹配Checker与抽象状态机状态,找到问题所在的点。•可准确检测实际的Bug(内存和指针问题、资源泄露、缓冲区溢出,数组越界,心脏出血漏洞...)••能够检测高达亿行级别的代码库,避免“状态爆炸”使用模型检验与符号执行技术,误报率降低至15%以下•算法已步入实际应用••面向企业的Coverity软件面向开源代码的CoveritySCAN改进型的静态分析 方案 气瓶 现场处置方案 .pdf气瓶 现场处置方案 .doc见习基地管理方案.doc关于群访事件的化解方案建筑工地扬尘治理专项方案下载 •基于MetaCompilation的静态分析:源码分析-数据流分析•源码分析可以探知开发者的想法:“x=1”需要在调用“do_something”后继续执行。•提出警告:if循环没有包含所有语句如何进行Java代码静态分析?Java语言被编译成JVMbytecode-在运行时被转换成本地可执行代码的分析选项一•分析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类型内存问题资源泄露控制流缺陷,并发访问等问题重要的缺陷代码规范,最佳实践等TotalBugsClang5330385997SharedDefects001123119Coverity7986831039121“瀑布式开发 流程 快递问题件怎么处理流程河南自建厂房流程下载关于规范招聘需求审批流程制作流程表下载邮件下载流程设计 ”需求挖掘设计实施验证支持开发测试发布经典的瀑布式开发流程:•代码开发与测试之间存在延迟•QA经常由其他部门负责,在编码阶段完成后才能开始•安全保护基本是在“事发之后”才由单独的安全部门提供“敏捷开发流程”需求挖掘设计实施验证支持开发测试发布理想的敏捷开发流程:•将整个实施和验证流程缩短成2-4周的“冲刺”(sprints)•开发好的功能只有在经过全面验证之后才被“接受”•为取得成功,QA及安全测试都必须是深入的自动化测试•Requirementsdefinition提交•BusinessProcessModeling修复检测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、静夜四无邻,荒居旧业贫。。六月-21六月-21Tuesday,June15,202110、雨中黄叶树,灯下白头人。。11:01:3011:01:3011:016/15/202111:01:30AM11、以我独沈久,愧君相见频。。六月-2111:01:3011:01Jun-2115-Jun-2112、故人江海别,几度隔山川。。11:01:3011:01:3011:01Tuesday,June15,202113、乍见翻疑梦,相悲各问年。。六月-21六月-2111:01:3011:01:30June15,202114、他乡生白发,旧国见青山。。15六月202111:01:30上午11:01:30六月-2115、比不了得就不比,得不到的就不要。。。六月2111:01上午六月-2111:01June15,202116、行动出成果,工作出财富。。2021/6/1511:01:3011:01:3015June202117、做前,能够环视四周;做时,你只能或者最好沿着以脚为起点的射线向前。。11:01:30上午11:01上午11:01:30六月-219、没有失败,只有暂时停止成功!。六月-21六月-21Tuesday,June15,202110、很多事情努力了未必有结果,但是不努力却什么改变也没有。。11:01:3011:01:3011:016/15/202111:01:30AM11、成功就是日复一日那一点点小小努力的积累。。六月-2111:01:3011:01Jun-2115-Jun-2112、世间成事,不求其绝对圆满,留一份不足,可得无限完美。。11:01:3011:01:3011:01Tuesday,June15,202113、不知香积寺,数里入云峰。。六月-21六月-2111:01:3011:01:30June15,202114、意志坚强的人能把世界放在手中像泥块一样任意揉捏。15六月202111:01:30上午11:01:30六月-2115、楚塞三湘接,荆门九派通。。。六月2111:01上午六月-2111:01June15,202116、少年十五二十时,步行夺得胡马骑。。2021/6/1511:01:3011:01:3015June202117、空山新雨后,天气晚来秋。。11:01:30上午11:01上午11:01:30六月-219、杨柳散和风,青山澹吾虑。。六月-21六月-21Tuesday,June15,202110、阅读一切好书如同和过去最杰出的人谈话。11:01:3011:01:3011:016/15/202111:01:30AM11、越是没有本领的就越加自命不凡。六月-2111:01:3011:01Jun-2115-Jun-2112、越是无能的人,越喜欢挑剔别人的错儿。11:01:3011:01:3011:01Tuesday,June15,202113、知人者智,自知者明。胜人者有力,自胜者强。六月-21六月-2111:01:3011:01:30June15,202114、意志坚强的人能把世界放在手中像泥块一样任意揉捏。15六月202111:01:30上午11:01:30六月-2115、最具挑战性的挑战莫过于提升自我。。六月2111:01上午六月-2111:01June15,202116、业余生活要有意义,不要越轨。2021/6/1511:01:3011:01:3015June202117、一个人即使已登上顶峰,也仍要自强不息。11:01:30上午11:01上午11:01:30六月-21MOMODAPOWERPOINTLoremipsumdolorsitamet,consecteturadipiscingelit.Fusceidurnablandit,eleifendnullaac,fringillapurus.Nullaiaculistemporfelisutcursus.感谢您的下载观看专家告诉
本文档为【[精选]使用静态分析技术找到真正的代码质量缺陷与安全漏洞】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
个人认证用户
言言无悔一生
暂无简介~
格式:ppt
大小:5MB
软件:PowerPoint
页数:38
分类:
上传时间:2022-01-26
浏览量:0