Checkmarx——软件安全开发之源代码扫描和编译后字节码扫描对比

发布时间: 2017-07-03      作者:并擎科技

尽管在判定内在软件风险时字节码分析(BCA)和源代码分析(SCA)似乎都为各组织机构提供了一个高水平的安全保障,但哪一种方法将会揭露更多漏洞?您的机构应该使用哪一种方法?

源代码对比字节码

源代码分析

字节码分析

探测

在开发者编写代码时快速反馈

只能在代码编译后SDLC的后期阶段探测漏洞

开发中在进行中减少风险

编译器优化可能会对扫描结果不利

修复

容易访问源代码

漏洞必须被排好优先级,然后发送给开发者修复

花费时间

增量扫描可节省80%时间

所有代码必须全部扫描

投资回报比

节省时间,金钱,并教育开发者

耗时,可能不会探测到重要发现(硬编码密码)

 

字节码分析的一个吸引点是由于编译器的自动化能够减少各组织机构一些代码分析的工作。除此之外,字节码分析能够找到由于编译器bug引入的漏洞,这是源代码分析不能做到的。

 

字节码分析的劣势

1)丢失了源

尽管字节码分析有上面所述这些好处,字节码分析仍有很大数量的劣势。字节码分析最基本的劣势是,它不能跟踪查找实际源代码中的缺陷。

将这种缺陷透视来看,尝试想想看,作为一个开发者,你正在进行扫描结果审阅,你需要理解发现的东西是不是真的漏洞。这件事情,你需要基于反编译的字节码来判定,你看不到方法名、变量名、代码中的注释等等。

没有访问此应用程序源代码的权限,这项任务几乎是不可能以一种高效的方式执行。开发者需要能够理解和修复扫描结果,使用字节码做这件事情不是一个好方法。

想象一下你有100个结果,你被要求检查它们是不是真的漏洞发现。直接查看源代码和数据流来判定一些漏洞是否可被利用已经不是很容易了。我不敢想象不看源代码来做这件事。”-Carsten Huth, Ph.D., CISSP, CSSLP, CISM.

 

2)不能发现密码

字节码分析的另外一个劣势是,事实上使用这种方法对某些漏洞是一点也探测不到的。举出一个与多行业相关的例子,尤其是电子银行行业,字节码分析不能探测硬编码密码和注释中的密码,所以对于这些组织机构来说是无用的。

 

3)太晚发现漏洞而以修复

当使用字节码分析时,另一个主要问题是漏洞在开发期间被揭露地太晚。应用程序安全,当采用扫描字节码方式时,常常发生在SDLC的后期阶段,因为所有的代码需要在扫描之前被编译。在这个阶段,来自紧张进程压力、项目管理者和预算限制的压力会导致应用程序带着未被揭露的漏洞而被发布成产品。

 

4令人痛苦的优化

最后,由于编译器的的角色之一是为提高性能而优化代码,一些代码元素可能会被编译器舍弃,这对应用程序的性能是至关重要的。这些代码元素可能是一些代码行,是作为调试进程的一部分而被添加进去的。当它们被移除时,可能会发生违反公司安全标准的情况。

香港内部精准马料十码

图 SCA与BCA对比

源代码分析

扫描源代码提供了一些好处,这些好处不仅仅允许组织机构早早地执行应用程序安全,并无缝地融入它们的SDLC,而且也为程序员提供了基于代码的实时安全反馈。

香港内部精准马料十码

源代码分析的优势

1支出,回报

在SDLC早期, 在源头修复代码,不仅仅在应用程序的安全态势方面,也在项目预算和项目期限方面,将会产生显著影响。

在SDLC过程中一个漏洞被揭露地越晚,修复它所需要的时间和金钱越多。在开发阶段,在源头修复漏洞,会比在后续阶段或者生产环节发现漏洞去修复要节省100倍成本。

由于源代码分析是实时进行的,开发者与代码的即时反馈和代码的安全情况进行互动,当这些漏洞在指定的代码片段里被准确定位后,开发者能够在百忙中修复这些漏洞。

 

在SDLC的后期阶段修补漏洞有一个巨大缺陷,即使用字节码分析这样,是开发者需要额外时间来使他们自己重新熟悉这些不安全的代码。原来的编写代码的人员正在忙于其它的项目,或者是,开发者要花时间来使自己重新熟悉需要修复的代码,这些代码可能是他们几个星期、甚至几个月前写的。

 

2增量扫描

       由于源代码扫描并不依赖于一次完整的编译构建,因此它能够扫描和分析代码片段,并且由于它不需要编译,所以扫描过程中不会遇到语法或者编译错误等障碍,而这将发生在字节码分析过程中。

3更多益处

代码中的缺陷也更容易被追踪至原始代码,并且源代码分析工作在一个多编译器环境。除此之外,源代码分析与平台无关,并会顾及到与任何开发环境的操作系统无缝集成。

 

总结

伴随着应用程序安全意识在所有行业领域逐渐提高,以应对逐日增长的威胁,各组织机构必须在使用字节码分析和使用源代码分析之间选择一种来保护他们的应用程序。

虽然两者好处都很多,但相比于包含更多缺点的字节码分析,源代码分析有一个非常清晰的优势,它将能够有效舒缓使用字节码分析扫描应用程序所带来的严峻的安全态势。