【发布时间】:2013-02-20 15:59:53
【问题描述】:
我正在尝试将 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 字符串,所以不会显着减少数量。
另一个限制是该解决方案应该在非专有数据库上运行,因为我没有其他任何财务手段。
那么,有什么符合这些要求的吗?或者除了某种模糊搜索之外,您能想出任何解决我问题的方法吗?
提前致谢!
【问题讨论】:
-
我认为在导入数据库时“标准化”会更吸引我。因此,当您导入列表时,有一些功能可以提供独特的 CPE,并且可以对搜索目标执行相同的操作。这样一来,您只需点击一次,就可以像完全匹配一样使用直接搜索,而不是每次比较都变得模糊。
标签: sql fuzzy-search