エンジニアリングJul 20, 202212 分 READ

ソフトウェアサプライチェーンの概要と、そのセキュリティを確保する方法

Jacob Schmitt

シニア テクニカル コンテンツ マーケティング マネージャー

ソフトウェアサプライチェーンの概要

現代では、世界各地のサプライチェーンの障害が原因で、日用品の不足や価格上昇が起きるケースが珍しくなくなっています。そのため、グローバルサプライチェーンとその脆弱性に高い注目が集まっています。 ソフトウェア開発においても、昨今の重大なソフトウェアセキュリティの侵害事例を受け、ソフトウェア版のサプライチェーン (ソフトウェアサプライチェーン) に特有のリスクが浮き彫りになっています。

もはや、ソフトウェアアプリケーションを独自のコードだけで開発する時代ではありません。 現在のアプリケーションには、オープンソースのコンポーネントやライブラリが複雑に組み合わされており、しかもそれらのほとんどはさらに別のサードパーティソースの機能を継承しています。 このように依存関係があるからこそ、開発でツールを自由に選び、機能豊富なソフトウェアをきわめて迅速にリリースすることができます。しかし、これは同時に、直接制御できない脆弱性に組織や顧客をさらすことに他なりません。

この記事では、ソフトウェアサプライチェーンという概念と、ソフトウェア開発におけるソフトウェアサプライチェーンのリスクについて説明します。また、ソフトウェアサプライチェーンのリスクを抑えてオープンソースのエコシステムをフル活用するために、継続的インテグレーションの力でセキュリティとコンプライアンスのチェックを自動化する方法についても説明します。

ソフトウェアサプライチェーンとは?

ソフトウェアサプライチェーンは、コードや設定ファイル、プロプライエタリまたはオープンソースのバイナリ、ライブラリ、プラグイン、コンテナの依存関係が組み合わさって構成されています。 また、ビルドオーケストレーションツール、アセンブラ、コンパイラ、コードアナライザとリポジトリ、セキュリティツール、モニタリングツール、ログ操作ツールなどもサプライチェーンの一部です。 さらには、ソフトウェア開発に関わる人、組織、プロセスも含まれます。

ソフトウェアサプライチェーンは肥大化し、複雑なものになる可能性があります。そのため、リスクに敏感な企業や政府機関の多くは、サプライチェーンの一部または大部分を記したソフトウェア部品表 (SBOM) を必須としています。 たとえば 2021 年 5 月には、バイデン政権が、連邦政府と連携しているソフトウェアベンダーにプロジェクトの SBOM を提供するよう命じる大統領命令を発しています。

内製やアウトソーシング、プロプライエタリ、オープンソースなど、ほとんどのソフトウェアの開発で外部コンポーネントが使用されていることを考えれば、SBOM を必須にする動きはもっともなことです。 開発の高速化、開発コストの削減、市場投入までの時間の短縮をはじめ、現在のソフトウェア開発手法には明らかなメリットがあります。しかし、コンポーネントの CVE (共通脆弱性識別子) が悪用されるという、望ましくない脅威も潜んでいます。

ソフトウェアサプライチェーン攻撃の実例

過去 2 年間でソフトウェアサプライチェーンに対して数多くのサイバー攻撃が行われており、ソフトウェアサプライチェーンに起因するリスクの影響が高まっています。 2021 年だけでも、SolarWinds 社、Codecov、Kaseya 社、Log4j が攻撃を受け、大きな話題となりました。

2020 年 3 月から 6 月までにかけて発生した SolarWinds 社への攻撃では、多数の米国政府機関を含む推定 18,000 人の Orion プラットフォーム利用者が、悪意のあるコードが挿入された更新プログラムをダウンロードしたとされています。 このコードは、バックドアを利用してシステムおよびプライベートネットワークへ不正にアクセスできるようにするものでした。 SolarWinds 社は 2020 年 12 月までこの攻撃を発見できず、顧客に対してリコールとホットフィックスを繰り返し、セキュリティアドバイザリを提供するにとどまっていました。

数週間後の 2021 年 1 月には、ある攻撃者がビルドプロセスのエラーを利用して、Codecov の Docker イメージ作成プロセスで使用される認証情報を入手する事例が発生。 この認証情報により、Bash Uploader スクリプトの改変が可能になってしまいました。 攻撃者は改変したスクリプトを利用して、何も知らない顧客の継続的インテグレーション (CI) 環境から認証情報やリソースを盗み出しました。 Codecov がこのセキュリティ侵害を検出できたのは、数か月が経った 4 月のことでした。

それから約 90 日後の 2021 年 7 月 2 日。狡猾なランサムウェアグループにより Kaseya Virtual System Administrator (VSA) サーバーの脆弱性が悪用され、推定 1,500 社の中小企業に攻撃が行われました。 前述の 2 例とは異なり、Kaseya 社は攻撃が行われたその日にセキュリティ侵害を検出しました。とは言え、その理由はおそらく、攻撃者が各当事者に 45,000 ドルから 500 万ドルもの “身代金” を要求したためです。 Kaseya 社は、問題が修正されるまで VSA サーバーをシャットダウンするよう顧客に提言しました。 幸い、わずか 2 日後にはパッチが完成。7 月 22 日に Kaseya 社がサードパーティから有効な復号化ツールを入手するまで、このパッチが提供されていました。 その後もテクニカルサポートは継続され、翌月にはアドバイザリが発表されました。

そして、Kaseya 社のインシデントから数か月後の 2021 年 12 月。おそらく最も単純な、しかし同時に最も拡散力の強いソフトウェアサプライチェーン攻撃が発生しました。 人気の Java ロギングフレームワークである ApacheLog4j についてリモートコード実行 (RCE) の概念実証 (POC) が開示されたことを受け、攻撃者がその脆弱性を大規模に悪用し始めたのです。 攻撃者は CVE-2021-44228 と名付けられたこの脆弱性を利用し、脆弱性の残っている LDAP (ライトウェイトディレクトリアクセスプロトコル) サーバーにマルウェアを送り込みました。 この問題に対処するための更新は比較的早期に実施されましたが、log4j の脆弱性自体の解決が遅れ、インシデントの発生が続きました。そのため、去る 2022 年 4 月には、米国サイバーセキュリティ・インフラストラクチャセキュリティ庁 (CISA) からアドバイザリが発表されています

ソフトウェアサプライチェーンが攻撃に弱い理由

ソフトウェアサプライチェーンはテクノロジー、人、およびプロセスのタッチポイントが相互に関係し合うものであり、巨大化し複雑化する性質を持ちます。そのため、複数の攻撃経路を抱えています。 悪意のある攻撃者がこれらのタッチポイントを利用して、ソフトウェアサプライチェーンに侵入する可能性があるのです。

“テクノロジー” のタッチポイントとは、大まかに言えば、インフラストラクチャ、ソフトウェア、およびコードベースのことです。

インフラストラクチャとは、仮想的または物理的な機器を指します。Gartner 社の調査によると、重要な役割を果たしているインフラストラクチャ企業の 30% が、2025 年までに稼働停止や、業務に支障を来すレベルのサイバー攻撃または物理攻撃を経験すると予測されています。

プロプライエタリコードで構成されているソフトウェアはもちろん、オープンソースライブラリやサードパーティ製ツールも同等の脆弱性があります。たとえば、悪意のあるコードの挿入や、コード内のバグの悪用、パッケージの依存関係かく乱攻撃、アップデートの乗っ取り、コード署名プロセスの弱点を付いた攻撃などに対する脆弱性が考えられます。

さらに、これらのプログラムを格納するコードベースにも脆弱性が存在する可能性があります。 Synopsys 社の調査によれば、オープンソースソフトウェアを含む商用コードベースの 88% で、2 年にわたりユーザーアップデートが行われていないコンポーネントが存在すると報告されています。

“人” のタッチポイントとは、ソフトウェアサプライチェーンに故意または不注意で脆弱性をもたらす開発者などのことです。 たとえば、2017 年に発生した crossenv タイポスクワッティングインシデントでは、npm レジストリを対象として、何も知らない開発者を騙し (cross-env ではなく) マルウェアを含んだ crossenv パッケージをインストールさせる攻撃が行われました。

“プロセス” のタッチポイントとは、攻撃者にとって都合のいいタッチポイント、特に ID とアクセス管理 (IAM) のプロセスです。 攻撃者は従業員やシステムを介して IAM の制御を侵害し、スパイウェアやランサムウェアを送り込みます。

ソフトウェアサプライチェーンのセキュリティを強化する方法

ソフトウェアサプライチェーンの安全性を確保するための第一歩は、コンポーネントを可視化することです。 ベンダーやエンドユーザーの立場で可視化を実現する手段は、配布または使用するソフトウェアに含まれるサードパーティ製コンポーネントと依存関係をすべて記載した SBOM を準備することです。

SBOM によって、大まかな状況や、セキュリティ意識とライセンスの遵守状況をつかめるので、ソフトウェアのコンポーネントに影響のある最新のアドバイザリを探すうえで役立ちます。 また、自動化された脆弱性スキャンテクノロジーを複数採用すれば、ソフトウェアサプライチェーンの可視性とセキュリティをさらに高めることができます。

とは言え、一般的な脆弱性のスキャンや追跡だけでは不十分です。 被害の大小は、脆弱性の修復をどれだけ迅速かつ徹底的に行えるかで決まります。 そのため、パッチや更新プログラムを必要に応じて迅速に提供する専任のインシデント対応チームを設置するとよいでしょう。 また、フェイルオーバープロセスを適切に文書化し、このプロセスのテストを定期的かつ厳密に実施しましょう。

チェーン内のサプライヤについては、信頼できるリポジトリと検証済みのソースのみを使用し、さらにライブラリ、フレームワーク、サプライヤのリスク評価を定期的に実行してください。 サプライヤに関するテストについては、補完として独自のテストも頻繁に実施しましょう。 ベンダーの立場であれば、ソフトウェアサプライチェーン内のデータとインフラストラクチャの保護に関するデータガバナンスガイドラインなど、最小権限の原則を念頭に置いた強固な IAM ポリシーとコントロールを実装してください。

CI/CD でサプライチェーンのセキュリティ対策を自動化する方法

サプライチェーンのセキュリティ対策を自動化する一番の方法は、堅牢な継続的インテグレーション & 継続的デリバリー (CI/CD) パイプラインを活用することです。 CircleCI なら、AppSec (アプリケーションセキュリティ) ツールや DevSecOps (開発/セキュリティ/運用) ツールをシームレスに統合し、VCS (バージョン管理システム) からパイプラインのビルド、テスト、デプロイに至るまでの全段階を通じて脆弱性をチェックできます。

VCS の段階では、認証情報 (シークレット) を開発者がうっかりプレーンテキストでリポジトリにコミットしてしまうことがあります。この場合、攻撃者が Git の履歴から情報を確認できてしまいます。 CircleCI ではお好みの VCS プロバイダーと連携し、関連する CircleCI Orb (GitGuardian Orb など) を使用してコミットにシークレットが含まれているかスキャンできます。 また、暗号化された状態で保存される環境変数やコンテナに保存されるコンテキストを利用すれば、CircleCI 内にシークレットを安全に保存、管理して複数のプロジェクトで使用できます。

他にも、保存済みのシークレットをサードパーティ製ソリューションから動的にフェッチする手法もあります。また、暗号化済みのバージョンをコミットして復号化ツールをコンテキスト内に保持し、CI/CD パイプラインのビルドおよびテスト段階で復号化ジョブを実行してシークレットを取得する方法もあります。

さらに VCS の段階では、Lightspin Orb を使用して、コードベースの IaC (インフラストラクチャのコード化) テンプレートに IAM の設定ミスや認証情報の公開、セキュアではない設定があるかスキャンし、修正に役立つアドバイスを得られます。

パイプラインのビルド段階において、適切な CircleCI Orb をコードおよびオープンソースライブラリに使用して、静的アプリケーションセキュリティテスト (SAST) ジョブを実行するのもお勧めです。 たとえば、Snyk Orb を使用すれば、コードベースをスキャンして依存関係の脆弱性を見つけられます。 スキャンでソフトウェアサプライチェーンに潜在的な脅威があると判明した場合、ビルドは失敗し、Snyk からコードのセキュリティを向上させるための推奨事項が出力されます。

デプロイ段階では、動的アプリケーションセキュリティテスト (DAST) ジョブを実行して、本番環境での実行時に脆弱性を検出しましょう。 たとえば DeepFactor Orb を使用すると、アプリの動作に基づいて、アプリケーションコード、パッケージの依存関係、Web API、コンプライアンスの CVE に関して優先順位付きのインサイトが得られます。

おわりに

ソフトウェアサプライチェーン攻撃の横行は、とどまるところを知りません。 現代の企業はさまざまな要素と相互につながって成り立っているうえ、ソフトウェアエコシステム内の変更頻度も高まるばかりのため、悪意のある攻撃者の標的となるポイントが山ほど存在しています。 脆弱性の悪用を、今まで以上に全力で防がねばならない時代です。

解決策の 1 つが CI/CD です。ソフトウェアデリバリープロセスのすべてのポイントで、ソフトウェアサプライチェーンに関するスキャンを自動的に行うのです。

CircleCI を使用すれば、コードベース、オープンソースライブラリ、依存関係、その他のサードパーティ製ツールについて脆弱性スキャンを実行し、アドバイザリを提供するジョブを組み込んだワークフローを構築できます。 各種の自動パイプライントリガーを使用して、CI/CD パイプラインで IaC の設定ミスの検出、アーティファクトの安全なビルドとデプロイ、コンプライアンス規則の検証を行えます。

攻撃者の先手を打ち、CI/CD パイプラインに自動化されたサプライチェーンセキュリティを追加しようとお考えの方は、ぜひ今すぐ CircleCI の無料アカウントを作成してご活用ください。

関連記事

クリップボードにコピー