搞懂静态代码分析,看这文就够了

什么是静态代码分析?
静态代码分析是指在不实际执行程序的情况下,对代码语义和行为进行分析,由此找出程序中由于错误的编码导致异常的程序语义或未定义的行为 。通俗的说,静态代码分析就是在代码编写的同时就能找出代码的编码错误 。你不需要等待所有代码编写完毕,也不需要构建运行环境,编写测试用例 。它能在软件开发流程早期就发现代码中的各种问题,从而提高开发效率和软件质量 。
静态代码分析现在面临最大的难题是什么?
现代软件系统规模越来越大,代码行数从数万或数十万行规模增长到数千万行;系统复杂度也越来越高 , 从传统的单机系统变为分布式系统,同构系统变为异构系统;而且软件开发的编程语言也从使用单一的语言发展为多种语言协同开发 。这些变化都对SAST工具带来了巨大挑战 。
SAST工具首先必须要有能同时检测多种语言代码及其互操作的能力,例如要检测Android应用程序的漏洞 , SAST除了要能支持检测C/C++和Java语言外,还必须支持JNI,才能有效的检测Byte Code和Native Code互操作导致的各类问题 。
此外对静态程序分析工具还有这些维度的评价指标:
一是漏报率和误报率;漏报率或误报率过高会导致SAST工具的实用性和有效性显著降低,无法有效提高软件开发效率和软件质量 。
二是检测规则是否容易扩展及按用户特定需求定制;除了支持常见的工业安全编码标准外 , SAST工具应该还能支持用户自定义的编码规范和业务逻辑规则 。
三是分析所需的时间和资源占用;如果SAST工具一次扫描所需的时间太长或者占用内存资源太大,将难以和程序员日常的开发工作和流程整合,进而无法起到提高开发效率和软件质量的目的 。
在编译器技术领域 , 什么是抽象语法树 、对象敏感(Object Sensitive)、上下文敏感(Context Sensitive)的分析引擎 。流敏感是指分析引擎会区分程序变量在不同执行路径下的定义和使用情况 , 并仅对会导致错误的执行路径报告警告;对象敏感是指分析引擎能区分不同的对象实例或同一个对象不同的成员,仅对会导致错误的对象或对象成员报告警告;上下文敏感是指分析引擎能区分相同函数在不同调用点的上下文,仅对会导致错误的调用点报告错误 。Xcalscan通过综合使用静态单赋值(SSA),虚拟变量(Virtual Symbol),基于SSA的别名分析(Alias Analysis)和过程间分析(Inter-Procedure Analysis)来实现了分析引擎的流敏感、对象敏感和上下文敏感 。
基于这个分析引擎,Xcalscan能有效的报告出每个问题产生的源头在哪里,数据经过了什么样的路径和函数调用点到达了最终问题会显现的地方 。Xcalscan图形化的用户界面会以流图(Flow Graph)的方式,展示问题是如何从源头引入,一步步推进,并最终会在什么位置触发 。
二是,综合了资源建模、数据流分析、符号执行和形式化验证等多种方式的漏洞检测引擎 。在应用规则检测程序漏洞时,Xcalscan会综合使用数据流分析 , 符号执行和形式化验证的方式检测程序中是否存在违反该规则的代码 。
三是,可扩展的用户自定义规则引擎 。Xcalscan定义并开放了分析和规则检查API用于开发用户自定义规则 。用户可以通过调用相关API指定用户代码或第三方库函数的属性及副作用,前置或后置条件 , 检查规则等 。Xcalscan规则引擎会自动读取用户规则并附加于代码的中间表示上,在完成程序静态分析后,规则引擎会判断用户规则中的前置或后置条件、检查规则等是否满足并给出警告 。
综上所述,Xcalscan作为新一代的SAST工具 , 它从设计之初就能支持多种语言及不同语言间的互操作,目前已经支持C/C++,Java和JNI 。后续版本将支持Javascript和Python等更多的程序设计语言 。Xcalscan扫描结果的漏报率和误报率都较低,扫描所需的处理器和内存资源少,且支持用户自定义规则 。
本文作者是鉴释静态代码分析工具爱科识(Xcalscan)的研发主管,当前的工作是带领鉴释核心开发团队开发下一代的程序静态分析工具(SAST) , 这个分析引擎是鉴释静态分析工具工具产品的核心组件 。分析引擎将用户输入的源代码转换为编译器中间表示;基于中间表示进行流敏感分析,过程间分析 , 上下文敏感分析和对象敏感分析;在各种分析的基础上结合符号执行和形式化验证等手段,检测用户输入程序是否存在各类缺陷或者安全漏洞,是否存在违反各类源代码安全编码规范或用户自定义规则的代码 。
?讯飞智能语音先锋者:等到人机交互与人类交流一样自然时,真正的智能时代就来了!
?苹果官网下架iPhone 8全系;阿里推出“阿里云会议”;深度操作系统20BETA发布|极客头条
?新iPhone SE卖3299元起,香不香?
?深挖谷歌DeepMind和它背后的技术
?从Spring Cloud到Service Mesh , 微服务架构治理体系如何演进?
?面试造飞机系列:看架构师如何设计微服务接口
【搞懂静态代码分析,看这文就够了】以上就是朝夕生活(www.30zx.com)关于“搞懂静态代码分析,看这文就够了”的详细内容,希望对大家有所帮助!

猜你喜欢