3

我正在尝试将 Linux 软件包(名称 + 版本)的信息映射到其相应的 CPE 字符串(请参阅http://nvd.nist.gov/cpe.cfm),以便能够自动找到系统可能存在的漏洞。

NIST 提供了一个 XML 文档,其中包含所有相关的 CPE。我考虑将这些信息解析到 SQL 数据库中,这样我就可以通过名称和版本号快速搜索。那将是大约 70.000 行。

当然,现在的问题是 CPE 的拼写和包名称存在差异。例如,Tomcat 6.0.36 的 CPE 将是cpe:/a:apache:tomcat:6.0.36这样您拥有名称tomcat和版本6.0.36。现在,包管理器可以为您tomcat6提供名称和6.0.36-3版本之类的信息。这两个程序很可能是相同的或至少具有相同的漏洞。所以我需要能够自动将上述 CPE 识别为我的 tomcat 包的正确 CPE。

首先要做的是某种规范化,可能会将所有内容都转换为小写。但正如您从示例中看到的那样,这还不够。我需要某种模糊搜索。从我已经发现的情况来看,有一些解决方案可以在拼写错误的情况下识别匹配项。不过,这并不是我所需要的。包名称没有拼写错误,但可能包含其他字符(或遗漏一些字符)。

模糊搜索也必须相对较快,因为我需要为多个主机执行它,每个主机都可以安装数百个包,正如我所说,数据库将有大约 70.000 行。我可以引入一个主要查找,它首先尝试找到一个精确匹配,但是由于我怀疑许多包不会有任何对应的 CPE 字符串,所以不会显着减少数量。

另一个限制是该解决方案应该在非专有数据库上运行,因为我没有其他任何财务手段。

那么,有什么符合这些要求的吗?或者除了某种模糊搜索之外,您能想出任何解决我问题的方法吗?

提前致谢!

4

1 回答 1

2

首先是一般性评论。CPE 命名法似乎是有机发展的,通常取决于供应商的(不一致的)命名法。例如,Sun Java 有 major.minor.point_version。Adobe 使用major.minor.point.subpoint。Microsoft 操作系统使用 Service Packs_Language Packs。其他一些供应商会使用主要是数字但偶尔会出现字母的点发布(例如,.8、.9、.9R2、.10)。

当我处理上述问题时,我从他们的 XML 文件开始,并在 Excel 中对它们进行操作,并按句点拆分。然后我会按数字(如果它们都是数字)或作为文本字符串排序。(请注意,主要是数字中的字母会造成严重破坏,并且 .10 在词汇上位于 .8 之前)

这种不一致,是第三方软件厂商雨后春笋般冒出来的原因。公司宁愿付钱给软件供应商也不愿解开这个快死结。

如果您想要真正的模糊搜索,请查看这个关于使用 Soundex的问题。预计会得到很多误报。

如果您的目标是准确映射 CPE 字符串,您可能应该考虑实现一个从 CPE 转换为库名称的查找表。

于 2013-02-20T17:10:01.110 回答