サードパーティのライブラリは、ソフトウェア開発のライフサイクルをスピードアップするために欠かせないものだ。開発者はゼロからコーディングする代わりに、費用対効果やリソース不足、柔軟性の向上など、様々な目的でオープンソースのライブラリを統合することが多い。Maven CentralやPyPIのようなリポジトリと依存関係管理ツールは、このプロセスを簡素化し、生産性を高める。しかし、このような依存は潜在的なセキュリティリスクももたらす。
プロジェクトのオープンソースの依存関係を管理することは、ネスト化した依存関係(依存 関係の中に1つ以上の依存関係がある)や、依存関係管理に関する限られた専門知識などの課題 をもたらす可能性がある。外部ライブラリの統合は、攻撃対象領域を拡大し、セキュリティリスクを高める。ライブラリの脆弱性を発見すると、そのコンポーネントに依存しているすべてのソフトウェアが危険にさらされる可能性がある。したがって、依存関係スキャンツールを活用して、サードパーティの依存関係に起因する既知の脆弱性を特定し、対処することが不可欠です。
Software 再利用と依存性の採用
ディストリビューションのエコシステムがより利用しやすくなるにつれて、開発者は複雑なソフトウエア開発を迅速化するために、既存のソフトウエアの再利用を選ぶようになる。しかし、この利便性は、注意深く管理されなければ、予期せぬセキュリティ問題を引き起こす可能性がある。このような既存のソフトウェア・プログラムは、主にパッケージ(ライブラリとして知られるリリース・バージョンと、バージョン、作者、ライセンス、リファレンス、その他の関連情報を指定するメタデータを含むアーカイブ)の形でインターネット経由で配布される。パッケージソフトは、配布とバージョン管理のプロセスを合理化する。
開発者は、オープンソースライセンスの下でコードを公開することが多く、コードレビュー、コミュニティとのコラボレーション、容易な統合を可能にします。開発者は誰でも、コードベースを再利用、修正、貢献することができる。プロジェクトの品質、メンテナンス、サポートはさまざまです。作者は、より簡単にアクセスできるようにこれらのパッケージをリリースしますが、サポートと責任はライセンスに依存します。
あるパッケージが他のプロジェクトで参照されると、そのパッケージはプロジェクト依存 関係になり、外部パッケージの参照になります。依存関係はソフトウェアパッケージ間の一方通行の関係を作り出し、あるパッケージが適切に機能するために別のパッケージに依存する。開発者は依存関係をアプリケーションに含め、ビルド時に解決し、必要なものを取得します。
サプライチェーンとは、プロセスに関与するすべての外部サプライヤを指し、特にソフトウェアの依存関係を提供するサプライヤを指す。サプライチェーン管理は、近年ソフトウェア開発において注目されており、企業はサプライヤーを受け入れる前に、サプライヤーの要件、法的文書、およびコンプライアンスを確保するための契約を含むポリシーを確立している。
依存関係の管理
依存関係の管理は、すぐに圧倒的になり、いわゆる "依存地獄 "に陥る可能性がある。最新のアプリケーションには、何百、何千もの直接的な依存関係が存在する可能性があり、脆弱性の追跡が困難になります。ここでは、大量の依存関係を管理することが課題になるシナリオをいくつか紹介する。
- コードレビューの欠如:オープンソースの透明性にもかかわらず、チームがコードレビューを省略することがあり、誤った安心感につながることがある。
- 暗黙の信頼:開発者はしばしば、作者を十分に吟味することなく、リポジトリのインクルージョンだけを頼りに依存関係をインクルードする。
- 依存関係の多用:開発者は、パッケージの機能のほんの一部しか必要とされていなくても、パッケージに依存することが多く、依存関係が肥大化する。
- ブレークチェンジ:パッケージのアップデートは複雑な場合があり、ブレークチェンジが導入される可能性がある。
- 責任問題:オープンソースのメンテナンスとサポートの標準は、商用ソフトウェアに要求される標準には及ばないため、紛争やプロジェクト開発者の非現実的な期待につながり、結果として安全でないパッケージを生み出す可能性がある。
サードパーティの依存関係をターゲットにした攻撃の増加により、ソフトウェアのセキュリティに対する懸念が高まっている。2021年のLog4Shell脆弱性や、2024年3月に数千のMavenパッケージに影響を与えたXZ Utilsバックドアのような有名なインシデントは、このような脆弱性の広範な影響を強調した。同じ年には、人気のあるNPMパッケージua-parser-jswasでマルウェアが発見され、アプリケーションスタックでサードパーティのライブラリを使用することに関連するリスクが浮き彫りになった。
2024年1月のもう一つの注目すべき攻撃は、MavenGateである。MavenGateは、放棄されたライブラリを介して依存関係を乗っ取るという、新しいソフトウェアサプライチェーン攻撃手法である。これらの欠点を悪用することに成功すると、悪意のある行為者が依存関係から脆弱なアーティファクトを見つけ出し、アプリケーションに悪意のあるコードを注入したり、さらに悪いことに、悪意のあるプラグインを通じてビルド・プロセスを侵害したりする可能性がある。
オープンソースライブラリの利用が増加するにつれ、これらのリスクを理解し、軽減することが最重要課題となっている。このため、オープンソースライブラリにおける脆弱性の蔓延、種類、持続性、およびプロジェクトの属性やコミットとの関係について、さらなる調査が必要となっている。
OPSWAT SBOMによる依存関係の確保
サプライチェーン攻撃への反応として、米国は2021年5月に「国家のサイバーセキュリティの改善に関する大統領令」を承認し、サプライチェーン政策を改善するためのステップを定義した。重要な要件の1つは、各製品にSBOMを提供することである。
OPSWAT Software Bill of Materials (SBOM)は、セキュアな環境でのソフトウェア開発のニーズの高まりに対応するため、継続的に進化しています。OPSWAT SBOMの主な機能の1つは、依存関係のスキャンです。この機能は、プロジェクトが依存している依存関係の脆弱性を特定することで、コードベースの可視性を高めるように設計されています。
パッケージの依存性スキャン
OPSWAT SBOM は、開発およびテスト中に、ソフトウェア依存関係のセキュリティ脆弱性を自動的に検出する。例えば、SBOM は、脆弱性があることが知られているオープンソースのライブラリをアプリケーションが使用しているかどうかをチームに知らせます。チームはその後、アプリケーションを保護するための対策を講じることができます。
Pythonで依存性をチェックする
Container 画像スキャン
OPSWAT SBOMは、脆弱性や脅威を特定するためにコンテナ・イメージのあらゆるレイヤーを検査し、アプリケーションで使用されるオペレーティング・システム(OS)パッケージや依存ソフトウェア・ライブラリをカバーします。このプロアクティブなアプローチにより、潜在的な問題が重大な問題に発展する前に検出し、解決することができます。
アルパインとの依存関係をチェック
開発者とセキュリティチームは、依存関係の脆弱性の一般的なタイプ、蔓延状況、持続性を理解することで、深刻度を評価し、改善策を検討できるようになる。
SBOMは、既知の脆弱性についてプロジェクトの依存関係をスキャンします。検出されると、SBOMは深刻度レベル、脆弱性の説明、利用可能な修正などの詳細情報を提供します。
詳細なレポートをエクスポートすることで、チームが追跡することができます:
- スキャンされた依存関係の総数
- すべての依存関係にわたって発見された脆弱性の総数
- 様々なバージョンをスキャン
- 既知のCVE
- 重要度、重要度大、重要度中、重要度小の脆弱性の総数
OPSWAT SBOM は、セキュリティチームが脆弱性のあるパッケージをすべて、脆弱性を修正した最新バージョンに更新することを推奨する。これにより、チームはパッケージメンテナ の脆弱性に対処したり、依存関係ツリーからパッケージを削除したりすることができる。このプロアクティブなアプローチにより、チームは潜在的なセキュリティリスクが問題になる前に対処できるようになり、ソフトウェアプロジェクトのセキュリティと完全性が大幅に強化される。さらに、OPSWAT SBOM は、組織がソフトウェアサプライチェーンにおけるコンプライアンスとセキュリティを維持するのに役立つ。チームには次のことを強く推奨する:

依存関係のマップ
ツールを活用して、環境に存在する依存関係とその関係を特定する。

不要な依存関係を排除する
攻撃対象領域を減らすために、不要な依存関係や本質的でない依存関係を削除する。

確立されたリポジトリを使用する
依存関係が信頼できるソースから取得されていることを確認する。

すべての依存関係をスキャンする
あらゆるソフトウェアで依存関係を使用する前に、セキュリティや品質に問題がないかスキャンする。
おわりに
OPSWAT SBOM のような依存関係スキャンツールを活用することで、プロジェクトの依存関係の脆弱性を事前に特定して対処し、潜在的なセキュリティリスクを悪用される前に軽減することができます。依存関係スキャンと SBOM のパワーを活用して、安全でコンプライアンスに準拠した、回復力のあるソフトウェアアプリケーションを構築しましょう。