ソフトウェア・サプライ・チェーンのリスクを管理するには、アプリケーションを構成するソフトウェア・コンポーネントの基本的な理解だけでは不十分です。
妻と私の間には4人の子供がいるので、長年コストコでたくさんの買い物をしてきました。最初はおむつ、次にシリアル、その後は他のあらゆる種類の食べ物を購入し、6人家族に大きな倹約効果をもたらしました。
コストコは他にもたくさんの物を売っています、そしてどういうわけか、私はいつも、ガゼボ(西洋風東屋)、コーナー・ソファー、またはひと組のカヤックが欲しくなります。
この話の要点は、巨大な洞窟のような倉庫の中ではすべてが実際よりも小さく見えるという「コストコ効果」をもたらすということです。私がそのガゼボを買ったとしても、自宅の裏庭に収まらないでしょう。ソファを手に入れたら、居間に収めることはできるかもしれませんが、おそらく歩くスペースがなくなるでしょう。
コストコ効果はささやかな事例にも当てはまります。価格がお得だからといってトイレットペーパーを24ロール購入するのは、一見名案のようですが、それを保管するスペースはあるでしょうか?
ソフトウェア・サプライ・チェーンのセキュリティも同様です。話を聞いたり本で読んだりして、よく理解したつもりになったとしても、それを家に持ち帰って、自分の組織や独自のプロセスに適用しようとすると、思った以上に大きな課題であることに気付きます。
アイデアの段階からユーザーの手元に届くまでの全工程がソフトウェア・サプライ・チェーンです。
サードパーティー製のコンポーネントがアプリケーションを組み立てるためのビルディング・ブロックとして使用される仕組みは誰もが理解しています。これらのコンポーネントは、ほとんどの場合、オープンソースのソフトウェア・コンポーネントですが、サードパーティーの商用コンポーネントも使用されることがあります。これらのコンポーネントのセキュリティが、組み立てられたアプリケーションのセキュリティに直接影響することは明らかです。Black Duck®などのソフトウェア・コンポジション解析(SCA)ツールを使用することで、脆弱性とライセンスの両方の観点からコンポーネントの使用とリスクを管理することができます。
ただし、ソフトウェア・サプライ・チェーンのリスク管理では、コンポーネントの選択時にセキュリティを考慮する必要があります。開発チームは、新しい機能を開発する際に、アプリケーションに組み込むコンポーネントを選択する場合があります。開発プロセスには、開発チームが機能だけでなくリスクに基づいてコンポーネントを選択できるように、何らかの保護手段が必要です。
さらに、コンポーネントの出所を確認する必要があります。開発チームは、npmやMavenなどのコンポーネントを簡単に取得できるさまざまなテクノロジーを備えています。これらのテクノロジーを信頼できますか? コンポーネント・リポジトリが侵害された場合はどうなりますか? 手に入れたものが求めていたとおりの役割を果たすことをどうやって確認しますか? 包括的なセキュリティ・プロセスでこれらの質問に対処します。
ソフトウェア・サプライ・チェーンについて考えるときに見落としがちなもう1つのカテゴリは、ビルド・ツールです。これには、エディタ、プラグイン、コンパイラ、ユーティリティなど、開発チームがアプリケーションの構築に使用するツールが含まれます。例えば、航空機製造のサプライ・チェーンには、航空機に搭載される座席、エンジン、リベットなどの部品のほか、航空機の組み立て時に使用されるレンチ、リベットガン、足場などの工具も含まれます。
アプリケーションのデプロイもソフトウェア・サプライ・チェーンの一部です。今日では、多くのアプリケーションがコンテナにデプロイされているため、同じ質問がソフトウェア・サプライ・チェーンのセキュリティにも当てはまります。コンテナ・イメージの選択方法は? 実施した、または実施する必要があるリスク評価の種類は? コンテナ・イメージの出所も同様に重要です。リポジトリを信頼できますか?
ソフトウェア・サプライ・チェーンの範囲は思ったよりも膨大かもしれませんが、セキュリティへの包括的なアプローチで解決可能です。航空機の製造について語るとき、安全性の問題は切り離せません。設計上の決定や部品の選択など、航空機製造のあらゆる側面の根底に安全性があります。同様に、セキュリティとソフトウェアは密接に絡み合っています。アプリケーションの設計から実装、デプロイ、保守に至るまでの全段階でセキュリティを組み込む必要があります。
ソフトウェア・サプライ・チェーンのリスク管理は困難ですが、重要な課題です。ソフトウェア・リスクはビジネス・リスクに直結します。ソフトウェア・サプライ・チェーンのリスクを緩和するための全体的なアプローチを採用することは、ソフトウェアに対する信頼を構築する上で確実なメリットをもたらします。