我試圖將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