ソフトウェアサプライチェーンのセキュリティ:実績あるフレームワークと戦術で脅威に先手を打つ

Security Shanika Wickramasinghe

重要なポイント

  1. ソフトウェアサプライチェーンを狙う攻撃者が増加中:今日のソフトウェアは、サードパーティのコンポーネント、ツール、依存関係に大きく支えられているため、開発から提供に至るエコシステム全体が脆弱になっています。脆弱なリンクが1つあるだけで、システム全体が侵害される可能性があるのです。
  2. リスクを浮き彫りにするセキュリティ侵害事件:SolarWinds社やCodecov社への攻撃、Log4Shellと呼ばれる脆弱性を狙った攻撃などで明らかになったのは、攻撃者が信頼されているツールやライブラリの脆弱性を悪用したため、さまざまな業界に幅広い影響を及ぼしたということです。
  3. サプライチェーンを保護するにはプロアクティブなアプローチが必要:ソフトウェア部品表(SBOM)の管理、開発の初期段階からのセキュリティの組み込み、SLSAなどのフレームワークの採用といった戦略が、コード、ツール、チームを保護するのに役立ちます。

今日のソフトウェアは、そのほとんどがゼロから構築されたものではありません。

オープンソースライブラリ、サードパーティAPI、CI/CDツール、ビルドスクリプト、デプロイパイプラインなど、数十(ときには数百)の外部コンポーネントの組み合わせによって構築されています。

このエコシステム全体が、ソフトウェアサプライチェーンと呼ばれます。物理的なサプライチェーンと同じく、1つの脆弱なリンクが破壊されると、システム全体がリスクにさらされることになります。

ソフトウェアサプライチェーンのセキュリティとは?

ソフトウェアサプライチェーンのセキュリティとは、ソフトウェアの開発から提供に至るプロセスのあらゆる段階を保護する取り組みです。最終成果物だけでなく、その過程で関わるすべてのものが対象となります。

ソフトウェアサプライチェーンを保護するための第一歩は、実際に何を保護すべきなのかを理解することです。これには、アプリケーションコードだけでなく、ソフトウェアの構築、テスト、出荷に関わるシステム全体が含まれます。主なコンポーネントは次のとおりです。

つまり、ソフトウェアの構築やリリースに関わるものは、すべてサプライチェーンの一部であり、保護する必要があります。

この保護が想像以上に重要な理由

今日、ソフトウェアの開発は非常に速いペースで行われています。コードを迅速かつ頻繁にリリースするために、組織はオープンソースパッケージ、外部API、自動化ソフトウェアに依存しています。このような開発手法は、スピードの面では優れていますが、セキュリティの面では必ずしもそうではありません。

実は、自社のアプリが完全に自社だけのものであるということはないのです。

その大部分は、見知らぬ人が記述したライブラリで構成されています。また、サードパーティが管理しているツールやスクリプトが組み合わされています。さらに、そのアプリのデプロイに使用しているのは、自社ではコントロールできないプラットフォームです。

ハッカーは、この状況を十分に認識しています。アプリのコードを直接攻撃しなくても、サプライチェーンを構成しているコンポーネントの1つを侵害するだけで、すべてのコンポーネントにアクセスできる可能性があるのです。

ソフトウェアサプライチェーンについて真剣に取り組むことがもはや避けられない理由はここにあります。実際、次のような事態がいつ発生しても不思議ではありません。

こうした事態がどれほど深刻なものなのかを知るために、実際の事例を見てみましょう。

主なソフトウェアサプライチェーン攻撃とその原因

ソフトウェアツールが攻撃ベクトルになると、その被害は1社にとどまらず、そのツールに依存しているすべての企業に波及します。そこで、業界でよく知られている主なソフトウェアサプライチェーン攻撃とその原因、そしてこれらの重大インシデントが今も取り上げられる理由について見てみましょう。

1. SolarWinds事件:エンタープライズセキュリティに警鐘をもたらす

2020年にSolarWinds社のOrionソフトウェアが侵害された事件は、これまでで最も壊滅的な影響をもたらしたサプライチェーン攻撃の1つです。

ハッカーによって悪質なコード(後にSunburstと命名)が挿入されたOrionのアップデートが、米国の連邦政府機関や、Microsoft社を含む大手テクノロジー企業など、18,000ほどの組織に配信されました。このソフトウェアは管理者レベルのアクセス権を有していたため、攻撃者は発見されるまでの数カ月間、高度なセキュリティが施されたネットワーク内を気づかれることなく移動していました。

短期的な問題と長期的な影響

2. Log4Shell事件:小さなライブラリが極めて大きな影響を及ぼす

2021年後半、Javaのエコシステム全体で使用されているログツールのApache Log4jに、リモートコード実行(RCE)の欠陥が見つかりました。

攻撃者は、Log4Shellと名付けられたこの脆弱性を利用して、ログインや認証なしにサーバーをリモートで制御しました。

問題の広がり

3. Codecov事件:CI/CDがバックドアとして利用される

2021年、Codecov社のCI/CDツールが侵害されました。その原因は、Dockerイメージの作成時に使用される資格情報へのアクセスを攻撃者に許したことでした。

これにより、攻撃者は開発者がパイプラインで使用していたBashアップローダースクリプトの改ざんに成功しました。これらのスクリプトはシークレットとトークンへのアクセス権を有していたため、攻撃者は何百もの環境から資格情報を盗み出すことができました。

さらに悪いことに、この侵害は3カ月もの間検出されませんでした。その間、攻撃者は警戒されることなく、多くの内部システムにひそかに侵入することができました。

影響と問題

脅威の発生源は?

ソフトウェアサプライチェーンに対する脅威は、その発生源によって大きく2つのカテゴリーに分類されます。

外部脅威

外部脅威は組織の外部で発生し、多くの場合、サードパーティのコンポーネント、パブリックインフラ、または保護されていない通信を標的とします。具体例としては以下のものがあります。

内部脅威

内部脅威は、従業員のミス、アカウントの侵害、開発パイプラインのセキュリティ対策の不備など、組織の内部で発生します。

ただし、これらの脅威により無作為に攻撃されるわけではなく、ソフトウェアライフサイクルの特定のコンポーネントが標的となる傾向があります。詳しく説明しましょう。

安全なソフトウェアサプライチェーンを構築する方法

ソフトウェアサプライチェーンの保護は、ツールを1つインストールすれば済むというものではありません。開発ライフサイクルにおける実際のリスクを特定し、最も重要な部分に防御層を構築することが重要です。では、このアプローチについて見てみましょう。

ソースコードの保護

以下の方法で、コードベースの管理を強化できます。

また、メインブランチへの直接プッシュを禁止したり、Gitアカウントで2要素認証を必須にしたりするといった基本的な対策も大いに役立ちます。慎重に行わないと、1つのブランチに設定ミスがあるだけで、そこが攻撃対象領域になる可能性があります。

使用するすべての依存関係のスキャンと追跡

深く考えずに何十ものオープンソースパッケージを使用していないでしょうか。直接的または間接的な依存関係を構築する前に、依存関係が自動でスキャンされるようにしてください。次に、ビルドプロセスの一環としてソフトウェア部品表(SBOM)を作成し、アプリに含まれるコンポーネントとその入手場所をいつでも確認できるようにしましょう。

これだけでも、Log4Shellのような脆弱性が新たに見つかって数日間混乱状態に陥るリスクを回避できます。これは「起こるかどうか」ではなく「いつ起こるか」の問題です。

設定管理ツールの強化

Ansible、Puppet、Chefなどのツールはインフラのデプロイ方法を制御するものであるため、悪用すればマルウェアを容易に拡散させることも可能です。このリスクを軽減するには、以下のように、プレイブックを重要なコードとして扱います。

CI/CDパイプラインの厳重な保護

CI/CDパイプラインで、過剰な権限が付与されていたり、分離が適切に行われていなかったりすると、大きなリスクがもたらされます。

可能な対策としては、実行環境を分離する、資格情報を自動でローテーションする、署名付きビルドジョブを使用するといった方法があります。また、ビルドプロセス中にアテステーション(構成証明)のメタデータを生成し、ビルドの内容、ビルドに使われたシステム、ビルドの実行者を証明できるようにしましょう。

アテステーションによるビルド内容の証明

ビルドをリリースするたびに、署名付きのアテステーションを添付できます。SigstoreやCosignなどのツールは、この作業を自動化するのに役立ちます。アテステーションはアーティファクトが改ざんされていないことを証明するもので、使用された環境やツールに関する詳細情報も含めることができます。

セキュリティフレームワークへの準拠(初めての場合はSSDFを推奨)

NISTのセキュアソフトウェア開発フレームワーク(SSDF)のようなプラットフォームには、ロードマップが用意されています。まず、開発者のトレーニング、早期のコードスキャン、そしてインシデントが発生する前に脆弱性に対処するプロセスの設定から始めましょう。

SLSAレベルによるサプライチェーンのセキュリティ測定

「サルサ」と呼ばれるSLSAは、Supply-chain Levels for Software Artifactsの略で、ソフトウェアサプライチェーンの完全性を保護するために設計されたセキュリティフレームワークです。Googleによって開発されたこのフレームワークは、組織が構築、使用、配布するソフトウェアの保護に役立つベストプラクティスとコンプライアンスレベルのセットを提供します。サプライチェーンのセキュリティを段階的に強化するためのロードマップとして利用してください。

SLSAの目的は、ソースコード、ビルドスクリプト、コンテナイメージなどのソフトウェアアーティファクトが安全かつ検証可能な方法で作成され、管理されるようにすることです。特に、不正な変更の防止、トレーサビリティの確保、改ざんリスクの軽減に重点が置かれています。

SLSAは、環境の成熟度を示すモデルと考えることができ、セキュリティの成熟度がレベル1~4の4段階で定義されています。

  1. SLSAレベル1:ソース管理やビルド自動化など、基本的なセキュリティ要件を満たしている。
  2. SLSAレベル2:改ざん耐性のあるビルドと、認証済みの来歴(ソフトウェアがどのように構築されたのかを示す証拠)が存在する。
  3. SLSAレベル3:分離された信頼性の高いビルド環境を使用するなど、さらに厳格な制御が行われている。
  4. SLSAレベル4:完全性がエンドツーエンドで保証され、厳格なアクセス制御メカニズムが存在する(これが最高レベル)。

ソフトウェアサプライチェーンの保護に関するよくある質問

サプライチェーンのリスクを管理するにはどうすればよいですか?

ソフトウェアサプライチェーンのリスク管理に必要なのは、攻撃者よりも先に脆弱性を特定すること、そしてリスクの監視、評価、対応のためのシステムを導入することです。

そこで役立つのが、サプライチェーンリスク管理(SCRM)です。

SCRMの本質は、サプライチェーンに含まれるすべての要素(ベンダー、ツール、サードパーティライブラリ、クラウドプラットフォーム、さらには顧客まで)を把握し、各要素がセキュリティ態勢に与える影響を評価することにあります。

直接取引しているサプライヤーだけでなく、サプライヤーが使用しているツールやプラットフォーム、サプライヤーの環境のセキュリティ管理レベルも、全体的なリスクに影響します。SCRMを導入すれば、以下のことが可能になります。

SCRMの実践に役立つ脅威インテリジェンス、ベンダー評価、継続的監視などの機能を備えたプラットフォームが多数存在します。しかし、まずは戦略を策定することが必要です。

なぜ手動プロセスはもはや信頼できないのですか?

脆弱性の追跡、パッチの適用、コードの完全性の検証を人間の手で行っていては、現代の開発ペースに追いつけなくなり、ミスが多発することになります。手作業だけで、自動化に匹敵するスピード、規模、安全性を維持することはできません。自動化が必須となっている理由はここにあります。

脆弱性スキャン、アクセス制御、パッチ管理などのセキュリティタスクを自動化することで、問題を検出して修正し、脅威を未然に防ぐことができます。また、動きの速いCI/CDパイプラインで問題を見落とすリスクも軽減されます。

重要なイノベーションの1つは、アテステーションの自動化です。アテステーションでは、ビルドプロセスの一環として、ソフトウェアアーティファクトと、その作成者、作成時期、作成場所、作成方法に関するメタデータが生成されます。これにより、ソフトウェアが悪意を持って改ざんされていないこと、およびセキュリティ基準に準拠していることが証明されます。SigstoreやCosignなどのツールを利用することで、アーティファクトの構築時に自動で署名を付加して検証し、ソフトウェアのライフサイクル全体で信頼性の高い監査証跡を作成できます。

規制に伴う圧力や信頼性に関する厳しい要件がある業界にとって、アテステーションの自動化は便利なだけでなく、不可欠なものとなりつつあります。

SCAとSASTはソフトウェアサプライチェーンのセキュリティをどのように強化するのですか?

ソフトウェアサプライチェーンの保護に関して、よく取り上げられる主な手法が2つあります。それがSCAとSASTです。

SCAとSASTを組み合わせれば万全です。SCAは借用したコードに存在するリスクに対する防御策に、SASTはビルドしたコードのミスに対する防御策になります。サプライチェーンのセキュリティについて真剣に取り組みたいのであれば、この両方が必要です。

脅威モデリングとは?脅威モデリングがサプライチェーンのセキュリティにとって重要な理由とは?

多くの組織にとって、ソフトウェアサプライチェーンの保護は優先事項ですが、最大の課題はどこから始めればよいのか判断することにあります。ソースコード、ビルドツール、CI/CD、依存関係など、非常に多くの階層があるため、途方に暮れてしまうことが少なくありません。

ここで実践的な第一歩となるのが脅威モデリングです。脅威モデリングは、ソフトウェアシステム全体を可視化し、以下のような重要な質問を投げかけます。

すべてのコンポーネントに同じようにリスクがあるわけではありません。また、すべての脅威が単なる仮説というわけでもありません。依存関係の汚染やビルドスクリプトの改ざんのように、実際に確認されている攻撃手法もあります。脅威モデリングによって、実際のリスクに時間を割けるようになります。

OpenSSF End Users Working Groupなどの組織は、オープンソースソフトウェアの利用者向けに脅威モデルのサンプルを開発しています。このモデルは、よくあるリスクを検出し、SLSASSDFなどのフレームワークと関連付け、開発ライフサイクル全体でセキュリティ上の課題を特定するのに役立ちます。

基礎的なセキュリティ:ソフトウェアサプライチェーンの保護

ソフトウェアサプライチェーンの保護は、今や不可欠な要件となっています。ソフトウェアの相互接続が進んでいる今、あらゆるライブラリ、スクリプト、ツール、CI/CDジョブが攻撃ベクトルに変わる危険性を秘めています。

脅威が進化し、規制が強化される中で、ゼロトラストCI/CDリアルタイム異常検出などが新たな標準となりつつあるのです。

まずは小さい規模で、リポジトリの保護、ビルドの隔離、あらゆる要素の検証に取り組みましょう。結局のところ、ソフトウェアの信頼性はその構築方法の信頼性から始まり、その信頼性を段階的に高めていかなければならないからです。

このブログはこちらの英語ブログの翻訳、藤盛 秀憲によるレビューです。

関連記事

regreSSHion:OpenSSHに発見された重大な脆弱性(CVE-2024-6387)
セキュリティ
13 分程度

regreSSHion:OpenSSHに発見された重大な脆弱性(CVE-2024-6387)

CVE-2024-6387、別名「regreSSHion」には、Linux環境で認証なしでリモートから任意のコードを実行されるリスクがあります。このブログ記事では、その対処方法について説明します。
サプライチェーン攻撃の仕組み:定義、種類、セキュリティ対策と予防措置
セキュリティ
10 分程度

サプライチェーン攻撃の仕組み:定義、種類、セキュリティ対策と予防措置

サプライチェーン攻撃は信頼されているサードパーティやベンダーを悪用して、アクセス権を取得し、サプライチェーンを侵害します。詳細をお確かめください。
ソフトウェアサプライチェーンのセキュリティ:実績あるフレームワークと戦術で脅威に先手を打つ
セキュリティ
12 分程度

ソフトウェアサプライチェーンのセキュリティ:実績あるフレームワークと戦術で脅威に先手を打つ

実際の事例、重大なリスク、実用的な戦略に基づいてコード、ツール、依存関係を保護しながら、ソフトウェアサプライチェーンの安全を確保する方法について説明します。