現在入手可能なソフトウェア構成分析ツールの機能には大きな幅があり、コンプライアンスとセキュリティ脆弱性機能を持つものから、コンプライアンスプロセスを管理し、開発プロセス全体とチェックを統合するものまでさまざまです。
ユーザーのポリシーやプロセスに合わせてある程度ワークフローをカスタマイズする自由があるツールもありますが、あらかじめ決まった機能のセットを利用する画一的なアプローチしか許さないツールもあります。自社の技術的、営業的、法的目標に最適なツールを選ぶには、組織の成熟度と専門性が指針となります。しかし、市場にあるツールを比較してみると、1つ顕著な特徴に気づきます。それは、コードスニペット検出のサポートが弱い、またはまったくサポートしていないという点です。
けれど、どうしてオープンソースコンプライアンスにおいてコードスニペットの検出が重要なのでしょうか?セキュリティ脆弱性検出プロセスの一環としてスニペットのサポートが欠かせない理由は何でしょうか?
ソースコードが入ってくる経路
ソースコードは、自社の開発者がさまざまなソースからコードを作成して統合することによって、またはサプライチェーンを通じて入ってきます。どちらの場合も、開発者は以下のステップを行います。
- オリジナルのコードを作成する
- さまざまなソースのコードを再利用する
- コードを統合する
コンポーネント全体を利用する場合は、オープンソースコンプライアンスおよびセキュリティ脆弱性の検出は難しくありません。検出と追跡は比較的簡単です(ここで言うコンポーネント全体とはソフトウェアパッケージすべてを指し、スニペットとはオープンソースソフトウェアパッケージからコピーされた数行のコードを指します)。本当の困難は、開発者がオープンソースコードの一部をコピーし、より大きなコードの一部として統合する場合に発生します。この場合、多くの既存ツールでは即座に、スニペットの本当の出所とライセンス、そして既知のセキュリティ脆弱性を識別してレポートするのが難しくなります。
コンポーネント全体
オープンソースプロジェクトは常にフォークされ、再利用されています。そのため、スキャナーによっては、関係のない二次的なマッチのリストを含むノイズの多いレポートが出力されることもよくあります。FOSSIDなら、現在のフォーマット(コード、アーカイブ、バイナリなど)が何であれ、コンポーネントの本当の出所を自動的に識別する高速な識別メソッドによって時間と解析作業を大幅に削減できます。
ファイル全体
意図的に、また自動的にファイルが変更されると、マッチの識別がより困難になり、ライセンスコンプライアンスの対処も必要になる場合があります。FOSSIDの検索アルゴリズムは、ファイルが編集されている場合でも発見し、ソースと元のライセンスと照合できます。
コードスニペット
新しい機能を実装したりバグを修正したりするときにウェブからコードをコピー&ペーストするのは一般的な習慣です。FOSSIDでは、オープンソースコードのスニペットとそのライセンスを検出できるので、自社のガイドラインに従い、該当するオープンソースライセンスに準拠し、自社の製品やサービスに本当の価値をもたらすものに集中できます。
ソース コード スニペットの検出はなぜ重要か?
オープンソースコンプライアンスとセキュリティ脆弱性検出は、何よりもリスク管理の実践だといえます。製品およびサービスに含まれるすべてのソースコードについて、適用されるライセンスに準拠し、セキュリティ脆弱性を避けることが望まれます。
企業の立場では、開発者がオープンソースソフトウェアを利用できるようにするのが望ましく、開発者の立場では、オープンソースプロジェクトからコンポーネント全体でも、ファイルや部分的なコードスニペットでも再利用できる柔軟性が望ましいでしょう。
オープンソースを利用し、コンプライアンスとセキュリティの両方の観点からリスクを最小限にするいっぽうで、望ましい柔軟性を手に入れるために、スニペットの検索と識別は核となる対策であり、希望を実現するものだとFOSSIDは考えています。
セキュリティ脆弱性検出とスニペットの関係
現在、市場にあるツールが備えているのは、コンポーネント全体を使用している場合にセキュリティ脆弱性を検出する機能です。たとえば、架空の例として、zlibを使っていて、このソースコードに既知の脆弱性がある場合、ツールはそれをレポートし、脆弱性に関する追加情報を表示します。ツールはコンポーネント全体を使用していることを前提としています(つまり、ソースコードのコピー&ペーストには対応していません)。スキャンされたコンポーネントに公開された脆弱性情報がある場合、一致するすべてのファイルをレポートします。ここで、何千というコンポーネントがzlibのコードを再利用している(たいていは異なるライセンスのもとで)ことを考慮に入れ、一致の可能性ありとしてレビューしなければならない誤検出の数がどれほどになるか想像してみてください。
問題をさらにややこしくするのは、開発者がzlibのコードからスニペットをコピーし、製品リポジトリに組み込んだ場合はどうなるかという点です。既存のツールではそのようなスニペットは検出できず、結果として、コードとともにコピーされた既知の脆弱性も検出できません。したがって、2つの隠れた問題を抱えることになります。1つはコンプライアンスの問題で、もう1つは検出されないままの未解決の脆弱性の問題です。
コードをスニペットレベルで追跡する機能を備えたFOSSIDなら、このような状況を避けられます。FOSSIDは、外部のソースからスキャン対象ソースにコピーされた既知の脆弱性を含むコードスニペットを検出します。さらに、元のソースへの参照、コピー元コンポーネントのバージョン番号、ライセンスの名前とバージョン、コードに関連するセキュリティ脆弱性と追加情報へのポインター、修正方法に関する情報があればそれも提示します。
(この記事は、FOSSID Blog 「Why Should You Care About the Discoverability of Source Code Snippets?」2020年3月2日 Fredrik Ehrenstrale 投稿記事をFOSSID社の許可を得て翻訳したものです。)