close search bar

Sorry, not available in this language yet

close language selection
 

NVDデータを超えて:Black Duck Security Advisoriesを利用してバージョンの正確性を高める

Black Duck Security Advisoriesは、脆弱性を含むソフトウェアのバージョン範囲について、より正確な情報を提供し、お客様がNVDデータをより有効に活用できるようにするものです。 

**免責事項** このブログ投稿に含まれる情報は、執筆時点では正確なものです。 

NVD(National Vulnerability Database:脆弱性情報データベース)は、脆弱性のあるオープンソース・ソフトウェアのバージョンなど、脆弱性管理データに関する正確な情報源と見なされています。しかし、それは最も正確で完璧な情報源なのでしょうか?

脆弱なソフトウェアのバージョンのすべての範囲こそ、最も重要で有用な脆弱性のデータであると見なされます。これは、ソフトウェアの一部が脆弱性の影響を受けるバージョンの範囲内にあるかどうかを判断することが不可欠だからです。脆弱なバージョンの範囲を特定する際に間違いは許されません。不正確な情報は誤った警告につながり、さらに悪いことには、実際には脆弱であるにもかかわらず、ソフトウェアが修正済みである、または安全であるという誤解を招く情報が公開されることにもなります。

しかし、NVDで特定される脆弱なバージョンの範囲は狭すぎるか広すぎることが多く、脆弱なバージョンが見逃されたり、修正済みのバージョンが含まれたりすることがあります。SynopsysのCybersecurity Research Center(CyRC)が作成したBlack Duck® Security Advisories(BDSA)は、公開ソースの徹底的な調査を行い、ソース・リポジトリ内の脆弱なコードを追跡することで、この問題に対処しています。これらの手法により、CyRCは、脆弱なバージョンの範囲をさらに絞り込んで特定し、より正確で安全な情報を持つBDSAを生成して、お客様に提供することができます。

BDSAがより正確な脆弱なバージョンの範囲を提供する方法

BDSAは、オープンソースの脆弱性に関する詳細かつ簡潔な情報をお客様に提供する手作りのレポートであり、お客様のソフトウェア部品表に合わせて調整されています。

各BDSAは、可能な限り、脆弱性レポートや元のリサーチャーのレポートから始まる独自のリサーチを使用して作成されます。また、多くの場合、脆弱性に関する重要な情報を含む、信頼できるサードパーティーのセキュリティ・アドバイザリも使用します。そのため、脆弱なモジュール、関数、ファイル、変数を特定することができ、それらのデータによって、CyRCは修正コミットを見つけ出すことができるのです。この修正コミットにより、リサーチャーは脆弱なコードを最初のコミットまでさかのぼって追跡することができます。最初のコミットは、そのコミットに関連付けられたバージョン・タグを通じて脆弱性の範囲の始まりを定義するのに役立ちます。また、その脆弱なコードが以前のバージョンには存在しないことも示します。

正確な検出が鍵になる

重要なのは、どのバージョンが脆弱性の影響を受け、どのバージョンが受けないかを明確にすることです。公開されている情報の中で、脆弱なバージョンの検出やマーキングを行わないと、結果として検知漏れとなる可能性があります。これは、お客様に誤った安心感を与え、あるコンポーネントのバージョンが脆弱であるにもかかわらず、脆弱ではないと誤解させることになります。お客様に、ソフトウェアに存在する脆弱性に対して適切なアクションを実行するかどうかについて正しい注意を促すことができなければ、お客様のシステムが攻撃を受けやすくなる可能性があります。次の表は、NVDが脆弱なバージョンをマークしない/見逃すことで検知漏れが発生した事例を示しています。

BDSA番号 説明 NVDの脆弱性の範囲 BDSAの脆弱性の範囲
BDSA-2020-1346
CVE-2020-13902
ImageMagickに、’BlobToStringInfo’関数においてヒープベースのバッファ・オーバーリードによるサービス拒否の脆弱性が存在します 7.0.9-27(含む)~7.0.10-17(含む)まで 6.9.4-0~
6.9.11- 19と
7.0.1-0~
7.0.10- 19
範囲が異なる理由

ImageMagickのBDSAを作成する際、CyRCは6.xブランチと7.xブランチの両方をチェックしました。NVDは、CVEレコード内の6.x範囲も、このブランチの修正バージョンもマークしませんでした。NVDは、バージョン7.0.9-27~7.0.10-17を脆弱なバージョンとしてマークしました。バージョン7.0.9-27は、2020年2月27日にClusterFuzz-Externalによって最初に問題が報告されたときに強調された、脆弱なバージョンでした。CVEを分析したところ、7.0.10-17が最新バージョンでした。NVDが対象となるバージョンの範囲を上記のように決めたためだと思われます。NVDは、2020年10月以降、CVEレコードを確認または更新していません。しかし、CyRCのリサーチによって、この脆弱性が7.0.9-27で取り込まれたという証拠がリポジトリにないことが判明しました。

CyRCは、バージョン6.9.11-20で修正コミットを発見し、ImageMagick6内で最初のコミットを発見しましたが、NVDには記載されていませんでした。7.0のブランチでは、CyRCは修正が7.0.10-20に含まれていることを発見し、これは7.0.1-0の最初のコミットを通じて取り込まれました。最終的に、NVDは、7.xのブランチで特定された範囲の前後にある脆弱なバージョンに、正しくフラグを立てませんでした。NVDは、同じく保守されているImageMagick6の脆弱なバージョンをリストしておらず、修正されたバージョンもリストしていませんでした。

BDSA番号 説明 NVDの脆弱性の範囲 BDSAの脆弱性の範囲
BDSA-2022-1891(CVE-2022-2047 Eclipse Jettyは、URLの不適切な入力の検証において、「無効な’HttpURI.authority’」に対して脆弱です 0~9.4.46(含まない)まで

10.0.0(含む)~10.0.9(含まない)

11.0.0(含む)~11.0.9(含む)

0~9.4.46-20220331

10.0.0-alpha0~10.0.9

11.0.0-alpha0~11.0.9

範囲が異なる理由

この脆弱性は、2022年7月7日にEclipse JettyのGitHub(こちら)で公開されました。これは、rafax00によって報告されました。このCVEレコードのBDSAを作成する際、CyRCはバージョン9.4.47、10.0.10、および11.0.10で修正が実行されたことを発見しましたが、これはベンダーによって確認されました。しかし、NVDは、9.4.45より上の9.xのブランチと10.0.8より上の10.xのブランチには、この脆弱性は存在しないとしています。CyRCは、脆弱なコードがバージョン9.4.45と9.4.46に残っていること、9.4.47で修正されていること、10.0.9に残っていること、そして10.0.10で修正されていることを発見しました。

誤検知

誤検知とは、あるバージョンに脆弱性が存在しないにもかかわらず、レポートが脆弱性が存在することを示すことです。このようなアラートが示されると、ソフトウェアのバージョンに存在しない可能性がある脆弱性に対して不必要な修正対策を講じることになり、時間とリソースを費やすことになりかねません。次の表は、誤検知の例を示しています。

BDSA番号 説明 NVDの脆弱性の範囲 BDSAの脆弱性の範囲
BDSA-2022-2110(CVE-2022-36885 Jenkins GitHubプラグインは、タイミングの不一致によるWebhook署名の開示に対して脆弱です 0~1.34.4(含む)まで 1.21.0~1.34.4
範囲が異なる理由

この脆弱性は、2022年7月27日にJenkins独自のセキュリティ・アドバイザリ(こちら)で公開されました。これは、CloudBees Inc.のJesse Glick氏による報告です。

BDSAでは、CyRCが脆弱なファイル内のコードを追跡して、この特定の脆弱性が取り込まれた時期(バージョン1.21.0)を見つけることで、最初のコミットを発見したため、脆弱なバージョンの範囲がより絞り込まれて狭まりました。NVDは1.21.0より前のバージョンは脆弱だと識別していますが、これらのバージョンに脆弱性は存在しないため、バージョン0.1から1.20.0まで約51件の誤検知が発生しています。

BDSA番号 説明 NVDの脆弱性の範囲 BDSAの脆弱性の範囲
BDSA-2022-1126(CVE-2022-29582 Linuxカーネルは、’io_uring’タイムアウトの競合状態による解放済みおよびメモリ破損に対して脆弱である 0~5.17.3(含まない)まで 5.10-rc1~5.10.110
5.11-rc1~5.11.22
5.12-rc2~5.12.19
5.13-rc1~5.13.19
5.14-rc1~5.14.21
5.15-rc1~5.15.33
5.16-rc1~5.16.19
5.17-rc1~5.17.2
5.18-rc1~5.18-rc1
範囲が異なる理由

この脆弱性は、2022年4月22日にOpenwall.com(こちら)で公開されました。これは、Jayden Rivers氏とDavid Bouman氏による報告です。このLinuxカーネルの脆弱性について、CyRCはバージョン5.10-rc1の最初のコミットを特定しました。これと修正コミットを使用することで、リサーチャーはより正確な脆弱なバージョンの範囲を特定し、各ブランチで修正バージョンを監視および検出することができました。

この絞り込まれた範囲には、並行ブランチ/リリースの修正バージョンが含まれていないため、誤検知の可能性が排除されます。ここでも、NVDは、5.10-rc1より前のすべてのバージョンと5.17.3(含まない)までのすべてのバージョンが脆弱だとマークしました。これには、Linuxカーネルの各ブランチのすべての修正バージョンが含まれます。

脆弱なバージョンの範囲を正確に検出することがいかに重要であるか、おわかりいただけると思います。Synopsys Cybersecurity Research Centerは、セキュリティ・アドバイザリで脆弱性のあるソフトウェア コンポーネントのバージョンを特定することに取り組んでいます。CyRCは、お客様により正確で信頼できるサービスを提供するため、複雑なリサーチを行っています。

CyRCが実施したリサーチの詳細はこちら

当社Webサイトを見る

 
Lauren Fearon

投稿者

Lauren Fearon


More from セキュリティに関するニュースとリサーチ