静态源代码扫描是近年被人提及较多的软件
应用安全解决方案之一。它是指在
软件工程中,程序员在写好源代码后,无需经过
编译器编译,而直接使用一些扫描工具对其进行扫描,找出代码当中存在的一些语义缺陷、
安全漏洞的解决方案。静态扫描技术已经从90年代时候的,
编码规则匹配这种由
编译技术拓展过来的分析技术向程序模拟全路径执行的方向发展,由此,这种模拟执行相对的执行路径比动态执行更多,能够发现很多
动态测试难以发现的缺陷。
信息安全是一个随时都在发展和变化的动态事物,攻击的领域已经由传统的网络和系统层面上升到了应用层面,近期越来越多的应用系统面临攻击威胁。应用系统的安全性能,一方面立足于系统安全方案的分析与设计,而另一方面同样也取决于系统实现过程中是否存在安全性缺陷。为降低应用系统的安全风险,减少
软件代码编写中可能出现的
安全漏洞,提高应用系统自身安全防护能力,软件的应用方越来越依赖于采用源代码安全扫描工具在
软件开发的过程中去帮助软件开发团队快速查找、定位、修复和管理软件代码安全问题,应用
静态源代码安全扫描的的主要价值在于能够快速、准确地查找,定位和修复软代码中存在的安全风险,增加工具投资所带来的最大效益,节约代码安全分析的成本,最终开发安全的。可靠的软件。
这个方案的优点在于,无需进行编译、也无需去搭建运行环境,就可以对程序员所写的
源代码进行扫描。可以节省大量的人力和时间成本,提高开发效率,并且能够发现很多靠人力无法发现的安全漏洞,站在
黑客的角度上去审查程序员的代码,大大降低项目中的安全风险,提高
软件质量。
第一代技术是指:传统的静态分析,传统的静态分析都是基于语法解析或者
编译器,这些方式分析代码的缺陷是以代码所匹配的规则模式(patterns)去评估代码,只要模式匹配或者相似就报出来。需要人工去分辨出其中的真假,主要存在的问题:
在作静态分析时,要先描绘出代码所有的路径,然后去对每种路径上的
变量作计算,并比较。基于语法的解析路径是可以描绘出路径来的,但要计算每个路径上的
变量在使用前后的值,并跟踪他们,采用的算法几乎不可能,就是上面的程序也要花费相当长的时间,几乎无法接受。因此许多
静态工具只是把感染的路径找到,但不计算和不作比较,需要借助人工去分辨所有可能的情况,这就是他们误报率非常高的原因。
在小量的代码前提下,简单的代码将不是问题,也是可以接受的。但是,如果是大量的代码,复杂的代码,传统的扫描技术将几乎不可行,因为它将大量浪费开发和安全审计人员的时间,有时人眼也无能为力。
这种技术可简单的理解为,把代码劈开,把待分析的代码及代码之间的关系以对象的方式存放在内存中,同时也使用了一种可以接受的算法在有效的时间里描绘出应用的路径图形,并采用了一种特殊的查询语言CxQL来查找安全问题,每一个查询语句就针对一类
安全漏洞问题,因此几乎可以达到完美的结果,消除了误报(false positive).(其原理有点像建立在数据库为基础的查询引擎、查询语言和查询语句一样)
用户可以利用CxQL语言定制自己的查询语句(规则),查找特定的安全和逻辑的问题,解决漏报(false Negative)问题。使得代码扫描变得更加现实和可用。也可以给项目开发节省大量的时间各人力成本,大大提升软件的安全性能。