2013-02-20 142 views
3

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

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字符串,因此这不会显着降低数量。

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

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

在此先感谢!

+0

我想我会更多的诱惑“正常化”导入到我的数据库。因此,在导入列表时,有一些功能可以提供独特的CPE,并且可以为搜索目标执行相同操作。这样,你只需要一次点击就可以使用直接搜索,就好像完全匹配是可以的,而不是每次比较都会模糊。 – 2013-02-20 16:05:26

回答

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)

这种不一致是第三方软件供应商在春雨后像蘑菇一样发芽的原因。公司宁愿支付软件供应商的费用,也不愿解开这个难题。

如果你想要一个真正模糊的搜索,请看看关于using Soundex的这个问题。预计会有很多误报。

如果您的目标是准确地映射CPE字符串,那么您应该考虑实施一个将CPE转换为库名称的查找表。