我正在尝试将 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 字符串,所以不会显着减少数量。
另一个限制是该解决方案应该在非专有数据库上运行,因为我没有其他任何财务手段。
那么,有什么符合这些要求的吗?或者除了某种模糊搜索之外,您能想出任何解决我问题的方法吗?
提前致谢!