对CWE分类的几个疑点
从事信息安全漏洞研究的应该知道CWE(common weakness enumeration)和CVE,不知道的赶快恶补。前段时间因为课题需要,对CWE有了一点皮毛的研究。我逐条查看了CWE的近1K条分类缺陷描述,对CWE有了一个相对全面的认识,这一过程中有几点疑问。
首先说明,CWE是通用缺陷枚举,涉及软件安全缺陷的方方面面。基本上可以认为CWE是所有漏洞的原理基础性总结分析,CVE中相当数量的漏洞的成因在CWE中都可以找到相应的条目。如在代码层、应用层等多个方面的缺陷,从CWE角度看,正是由于CWE的一个或多个缺陷,从而形成了CVE的漏洞。由此,CWE的重要性可见一斑。
在学习CWE过程中,个人感觉CWE虽列出了众多条目,进行了多角度的分类,但个人认为分类整理不完备,或者说CWE所述的分类有点遮遮掩掩,吞吞吐吐的感觉,其实质还是有所保留。
疑问1:在CWE分类中有行为和状态分类,但行为和状态分类并没有覆盖系统全部的缺陷。那么问题来了,从理论上讲,行为和状态可构成完备的系统,因此用行为和状态分类,理论上应可描述所有缺陷,但为什么CWE没有这样做呢?
疑问2:另一方面,在软件安全漏洞中,有许多复杂漏洞,这些是当前安全漏洞的主流,对国家层面危害特别大。这一点我想许多漏洞研究人员也有深入体会。在CWE中对复杂漏洞也有分类描述,但复杂漏洞的分类枚举数量相对较少,且缺少细致的分类分析。
疑问3:此外,软件系统中缺陷涉及的层次、要素、基本安全防护模式/模型,CWE都没明确的分类描述。
也许有人会说CWE不必要这样枚举,你提出的这些分类只是个人的想法,不具有科学性。但我还是有这样的疑问:CWE的编写目标在于分析、研究、便于检测发现漏洞,其中主要是对代码层的漏洞分析与检测。因此,从行为和状态角度分析CWE是必须的,这对于代码层面的安全漏洞检测具有重要意义(行为检测是源代码安全检测的重要手段之一)。同时,对复杂漏洞的分析也是必须的,复杂漏洞是当前系统危害,特别是国家层面的危害的主流。因此说CWE不必详细枚举行为和状态相关漏洞,不必深入分析复杂漏洞显然站不住脚。另一方面,也许有人会说CWE还在飞速发展,人家现在还没有关注这个问题。个人认为这也是不可能的(当然内心很希望是这样),因为个人学习过一些国外安全研究的文献,深感国外研究人员对信息安全研究的深入、细致、严谨、全面,这是公认的。因此说国外对CWE的行为和状态分类没有深入研究显然不成立。
综上所述,可以认为,CWE在公布相应的缺陷及分类时,有所保留的。当然,不排除万分之一的可能:CWE根本没有深入分析这些东东,所有这些都是我个人的以小人之心度君子之腹。如果是这样,则是我之大幸,国之大幸。
特别说明:CWE对安全缺陷的描述还是不错的,其基本思想很正确,值得我辈仔细研究学习。特别是对于源代码漏洞的检测分析,CWE是绕不过的坎。但不能仅停留在CWE上,还要深入前进。
且不说资本的逐利本性很难让开源精神真正在安全领域发展壮大,即使真有开源的伟大另类,但(美国)政府的严格限制也不会让安全领域有真正的开放。因此,在信息安全领域,我们要依靠开源,位不能依赖开源,更别想国外有免费午餐。
林孟尼
2016年2月于武汉