在供应链安全中,大家一直关注采用SCA工具分析开源组件中的安全漏洞以及许可证的合规性。但是对于底层软件开发使用的编译器、链接器等安全却容易被忽视,其中有没有安全漏洞、有没有运行时缺陷、有没有被植入漏洞、木马等,似乎并没有引起多少人注意。今天我正好拿到了库博静态分析工具,利用它检测一下gcc编译器,看看这款编译器质量怎么样?
网络上百度了一下,国内C/C++常用的编译器GCC 4.8.1版本比较多,我从官网网站(GCC Releases)下载了源代码,注意我们使用编译器等软件最好从官方网站下载呦。整个代码我一次性加载检测,达到了700多万行,这需要128G内存,明显笔记本是很少有128G内存,只能从其中找最重要的gcc目录下文件进行检测,大家可以看到就有310多万行源代码,其中C语言程序文件29232个,还有少量Fortran语言、Objective-C等程序文件。人家代码注释率还是满足一般企业标准的啊,将近20%的注释率。
有的小伙伴可能看到了检测结果,有21148个缺陷,8156个安全漏洞,还有3518个违反编码标准的问题,程序员看了直接大喊,这不活了,这些问题,要修改到我死啊。哈哈,不要着急,我们看看他们使用了那些规则检测的。
可以看到使用了C/C++常见安全漏洞检测规则、CWE通用缺陷和OWASP C安全漏洞,看看里面都是啥规则呢?
我噻,C /C++语言常见的运行时缺陷全包括了,规则真是很全面。
再打开一个规则详细看看呢?里面还有5个子类。
打开一个规则看看,描述怎么样?还是很详细的信息。还能导入规则。
说了这么多,我们看看检测结果咋样?
打开运行时缺陷,打开内存泄露这个规则,右侧会列出检测结果。
我们打开一个检测结果看看,如下图。对于缺陷的描述非常清晰,包括了缺陷的名称、级别、爆发点在多少行,整个缺陷的source、sink等缺陷跟踪路径非常清晰。在某个节点上,还可以丰富的右键功能,查看变量、函数的定义,调用图等,好逆天的功能啊,这种逆向工程功能对于我们分析缺陷,非常有帮助。
gcc编译器中这么多问题,对于我们很多企业只是使用gcc做编译来说,可能并不台关心这些编译器的缺陷或漏洞是否对于我们被编译的代码产生影响。因为代码可能是在物理隔离的环境上去使用,例如上,车载软件,船载软件等,但是这些缺陷可能被利用的难度很大,但是是否有被利用的风险呢,肯定是有的。只要有通讯,有与其它软件进行交互,就可能存在风险。但是对于运行时缺陷,利用内存泄露、数据越界等不一定需要外界触发引起问题,程序自身存在问题就会导致异常、Crash等,如果不是下载地址被恶意攻击了,产生的是供应链安全攻击,前几年出现的苹果开发套件被植入木马的事件也曾经发生过。所以要保证供应链的安全,不仅仅使用SCA工具去检测开源组件,而开源软件本身的风险可能更加严重,其攻击目的和带来的损失不是使用钱来衡量的。
由于时间关系,我今天分析到这里,下次继续啊。