我试图将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字符串,因此这不会显着降低数量。
另一个限制是解决方案应该在非专有数据库上工作,因为我没有任何其他的财务手段。
那么,有什么符合这些要求?或者除了某种模糊搜索之外,您能否想到我的问题的任何解决方案?
在此先感谢!
我想我会更多的诱惑“正常化”导入到我的数据库。因此,在导入列表时,有一些功能可以提供独特的CPE,并且可以为搜索目标执行相同操作。这样,你只需要一次点击就可以使用直接搜索,就好像完全匹配是可以的,而不是每次比较都会模糊。 – 2013-02-20 16:05:26