システムの潜在的な脆弱性を自動的に検出できるようにするために、Linux パッケージの情報 (名前 + バージョン) を対応する CPE 文字列 ( http://nvd.nist.gov/cpe.cfmを参照) にマップしようとしています。
関連するすべての CPE を含む NIST によって提供される XML ドキュメントがあります。名前とバージョン番号ですばやく検索できるように、この情報を SQL データベースに解析することを考えました。それは約70.000行になります。
もちろん、ここでの問題は、CPE とパッケージ名のスペルにバリエーションがあることです。たとえば、Tomcat 6.0.36 の CPEは、 nameと versioncpe:/a:apache:tomcat:6.0.36
を持っているようになります。これで、パッケージ マネージャーは、名前とバージョンのようなものを提供できます。両方のプログラムが同じであるか、少なくとも同じ脆弱性を持っている可能性があります。したがって、上記の CPE を Tomcat パッケージの正しいものとして自動的に識別できるようにする必要があります。tomcat
6.0.36
tomcat6
6.0.36-3
最初に行うことは、何らかの正規化であり、おそらくすべてを小文字に変換します。しかし、例からわかるように、それだけでは十分ではありません。ある種のあいまい検索が必要です。私がすでに知っていることから、スペルミスの場合に一致を識別するためのいくつかの解決策があります。しかし、それは私が必要としているものではありません。パッケージ名のスペルは間違っていませんが、追加の文字が含まれている (または一部が抜けている) 可能性があります。
あいまい検索も比較的高速である必要があります。それぞれに数百のパッケージがインストールされている可能性がある複数のホストに対して実行する必要があり、前述のように、データベースには約 70.000 行が含まれるからです。完全に一致するものを最初に見つけようとする一次検索を導入できますが、多くのパッケージには対応する CPE 文字列がないと思われるため、量が劇的に減少することはありません。
もう 1 つの制約は、私には他に金銭的な手段がないため、ソリューションは非独占的なデータベースで動作する必要があるということです。
それで、これらの要件に一致するものはありますか?または、ある種のあいまい検索を除いて、私の問題に対する解決策を考えてもらえますか?
前もって感謝します!