開発者ファーストのサプライ チェーン セキュリティでセキュア ソフトウェアの迅速なリリースを支援する方法
2022年7月14日 // 1 min read
サプライ チェーン セキュリティが必要な理由と、GitHub のサプライ チェーン セキュリティ ツールがセキュア ソフトウェアの迅速なリリースにどのように役立つかを紹介します。
コードをセキュリティ保護したい一方で、追加のセキュリティ手順によって作業が遅くなるのは望ましくないとお考えですか? 最近、開発者はセキュア ソフトウェアを時間をかけてリリースするか、セキュアでないソフトウェアを迅速にリリースするかという難しい選択によく直面します。GitHub では、どちらかを選択する必要はないと考えています。なぜサプライ チェーン セキュリティが必要なのか、依存関係がどのようにコードに織り込まれているのか、GitHub のサプライ チェーン ツールである Dependabot がどのように役立つのかを紹介します。
| このページでは、次のトピックについて扱います: |
|---|
| ソフトウェア サプライ チェーン |
| オープン ソースの脆弱性 |
| オープン ソース セキュリティ |
| ソフトウェアの依存関係 |
| 依存関係の種類 |
| 依存関係の変化 |
| 依存関係の管理 |
| ソフトウェア構成分析 (SCA) |
| SCA のメリット |
| Dependabot とは |
| Dependabot の機能 |
| Dependabot の有効化 |
| Dependabot とその他の GitHub ツール |
ソフトウェア サプライ チェーンとは
ソフトウェア サプライ チェーンとは、コード ベース内の全てのインナーソース及びオープン ソースの依存関係を使用してソフトウェアが構築される方法を指す、一般的なフレーズです。npm からの依存関係を使用する JavaScript アプリケーションを作成したり、# インナーソースの依存関係と Nugget の依存関係を組み合わせて使用する、C で記述されたコンパイル済みアプリケーションを構築したりしている方もいるかもしれません。これらの各アプリケーションの脅威モデルは、依存するソフトウェア サプライ チェーンにより異なります。GitHub を用いることで、使用しているソフトウェアを理解し、Dependabot のような革新的な製品を使用してソフトウェアをより安全に保つことができます。
オープン ソースの脆弱性とは
オープン ソースの脆弱性はオープン ソース コンポーネントに存在するセキュリティ リスクです。ほとんどの脆弱性はセキュリティ機能の欠如、理想的に書かれていないコード、コンポーネントのインテグレーションの弱さといった、悪意のないミスによって生じます。残念ながら、これらは攻撃者によって簡単に悪用される可能性があります。悪意のある攻撃者はコードの脆弱性を利用してシステムに損傷を与えたり、データを盗んだり、リソースを悪用したりする可能性があります。たった 1 つの弱点を悪用することで、ハッカーは環境内の他の脆弱なサービスに飛び移ることができ、重大な影響を与える危険性があります。
脆弱性は目を離している間に深刻な被害をもたらし、プロジェクト全体を危険にさらす可能性があります。現在最も一般的な脆弱性の種類として、次が挙げられます。
SQL インジェクション これは悪意のある攻撃者がユーザー入力を通じて SQL ステートメントに有害なロジックを追加したときに引き起こされるコード インジェクション攻撃です。この脆弱性は入力サニタイズが実行されていないか、不適切に実行されていることが原因で発生します。引き起こされる影響には不正なデータ アクセス、変更とデータ損失、アプリケーションのコンテンツと動作への変更などがあります。
コマンド インジェクション これは悪意のある攻撃者がアプリケーションにコマンドを挿入し、それがシステムの権限を使用してホスト システムで実行される際に発生する、もう 1 つののコード インジェクション攻撃です。コマンド インジェクション攻撃により、アプリケーション、そのデータ、接続されたサーバー、その他のインフラストラクチャを危険にさらす可能性があります。
クロスサイト スクリプティング (XSS) これは悪意のあるスクリプトが本来は無害なウェブサイトに挿入されるウェブ インジェクション攻撃です。被害者のブラウザーで JavaScript スクリプトが実行されているため、クロスサイト スクリプティング攻撃で認証 Cookie などの極秘データを盗むことができます。公開ウェブサイトでは一般的な手法であり、攻撃者は独自の広告やフィッシング プロンプトを追加することでウェブサイトの訪問者をターゲットにできます。
クロスサイト リクエスト フォージェリ (CSRF) この攻撃はエンドユーザーに対し、ユーザーが現在認証されているウェブ アプリケーションで、望ましくないアクションの実行を強制します。望ましくないアクションとしては、資金移譲や個人情報の変更などが考えられます。基本的にこれらの攻撃は、認証されたユーザーによって開始されたリクエストに対するターゲット サイトの信頼を利用しており、実際には他の場所から開始されています。
最も頻繁に発生する種類の脆弱性について詳しくは、脆弱性に関するブログ投稿をご覧ください。
オープン ソース セキュリティとは
オープン ソース セキュリティはアプリケーションのオープン ソース インベントリの可視性を向上させる手法です。オープン ソース セキュリティを使用すると、直接的な依存関係、間接的な依存関係、それぞれに関連する大量のセキュリティ情報を全て簡単に特定できます。これらを手動で追跡するのは時間がかかりすぎるため、後で詳しく説明するソフトウェア構成分析 (SCA) を用いて行うのが一般的です。
ソフトウェアの依存関係とは
ソフトウェアの依存関係は新しいソフトウェアで再利用されるパッケージまたはコード ライブラリです。オープン ソースを使用すると、プロジェクトの分化した部分に集中し、より広範なコミュニティの強固な基盤に構築できます。
最近ではほぼ全てのソフトウェア プロジェクトに何らかの依存関係があります。その量は少なくありません。コードベースの 60 - 90% がオープン ソース コンポーネントで構成されていると推定されています。もちろん、このコードのいずれかにセキュリティ問題がある場合は、プロプライエタリ コードの���キュリティ問題と同様に、最終製品に影響します。
依存関係の種類とは
ソフトウェアの依存関係には、直接的な依存関係と間接的な依存関係の 2 種類があります。直接的な依存関係とは、コードが直接呼び出すライブラリまたはパッケージです。間接的な依存関係とは、依存関係が呼び出すライブラリまたはパッケージです。言い換えれば、依存関係の依存関係です。
どちらの種類の依存関係でもセキュリティ リスクを制御するための管理が必要ですが、間接的な依存関係は発生しても一見して明らかではないため、特別な考慮が必要です。間接的な依存関係は他の依存関係の中に入れ子になり、サプライ チェーンをセキュリティ保護しようとする際に見落とされやすい、隠れた複雑な依存関係ツリーを形成します。
2 種類の依存関係の概要
- 直接的な依存関係 はコードが直接呼び出すライブラリとパッケージです
- 間接的な依存関係 は依存関係が呼び出すライブラリとパッケージです
どちらの種類もセキュリティ保護を行うことが重要ですが、より困難なのは推移的な依存関係を検出することです。
依存関係をとりまく状況はどのように経時変化したか
その昔、ライブラリをダウンロードしてインストールするのは面倒な作業でした。そのため、小さなパッケージを再使用することは現実的ではありませんでした。しかし過去 20 年の間に、Maven や npm などのツールの登場によって小さなパッケージの利用や操作が容易になりました。それ以来、開発者が利用できるパッケージの数は爆発的に増加しました。ソフトウェア パッケージは現代のアプリケーションにおいてかなりの部分を占めるようになりました。
しかし業界は現在、多くのセキュリティ問題や不具合に直面しています。前述したように、依存関係にバグが存在するとアプリケーション全体に影響を及ぼす可能性があります。また依存関係はすぐに古くなるため、依存関係を呼び出すソフトウェアの品質が制限されたり、アプリケーション全体が失敗したりする危険性さえもあります。
依存関係を使用するとソフトウェアをより迅速に構築できますが、依存関係には次のような不具合を発生する可能性のある問題が数多くあります。
- プログラム全体に影響を与えるセキュリティの脆弱性
- ソフトウェアの品質を損なう古いコード
組織が依存関係を管理しないと何が起きるか
他のソフトウェア パッケージの特定のバージョンに依存するソフトウェア パッケージをインストールした場合、多くのフラストレーションが発生する可能性があり、ある依存関係を解決することで別の依存関係の互換性が損なわれてしまいます。もぐらたたきのゲームのように、依存関係による終わりなき混乱に苦しむことになるでしょう。
そこで、ソフトウェア開発ライフ サイクル (SDLC) 全体を通じて依存関係を全て効果的に管理することが重要です。
ソフトウェア構成分析 (SCA) とは
SCA はコード ベースのオープン ソース コンポーネントを特定する自動プロセスです。このようなツールはパッケージ マネージャー、ソース コード、マニフェスト ファイル、コンテナ イメージ、バイナリ ファイルなどを検査します。これらのコンポーネントが National Vulnerability Database (NVD) や他のデータベースからの情報を持つ GitHub Advisory Database に対して比較されます。
脆弱性データベースとは
脆弱性データベースには、既知の一般的な脆弱性に関する情報が保存されます。National Vulnerability Database は��国政府の脆弱性リポジトリであり、オープン ソース コミュニティで広く利用されています。GitHub には独自の GitHub Advisory Database があり、オープン ソース分野全体からのアドバイザリが含まれています。
SCA ツールの検査対象となるサプライ チェーン コンポーネント
- パッケージ マネージャー
- マニフェスト ファイル
- バイナリ ファイル
- ソース コード
- コンテナ イメージ
- 承認済みコンポーネント
- 開発者ダウンロード
- コード再利用
- 商用アプリケーション
- サードパーティのライブラリ
- 外部委託開発
SCA のメリットとは
サプライ チェーンのセキュリティ保護に関して、SCA ツールはセキュリティ、スピード、信頼性を提供します。今日使用されている膨大な量のオープン ソース コンポーネントを考えると、それらを手動で追跡することは不可能になっています。またクラウド ネイティブ アプリケーションやより複雑なテクノロジーの普及も相まって、信頼できる SCA ツールが必須になっています。
ロボットにできることを人間に強要しません。 –GitHub セキュリティ チームのモットー
DevOps 手法の採用によってチームがソフトウェアの構築とリリースを迅速化するにつれて、開発者の速度を維持できるセキュリティ ソリューションが必要となります。まさに SCA ツールです。
ただし、全ての SCA ツールが同じように作られているわけではありません。最善策は、コンテナ化された環境内のオープン ソース コンポーネントをスキャンし、脆弱性を特定して、ポリシーを自動的に適用する SCA ツールを選択することです。優れた SCA ツールは組織の IT が使用している特定のコンテナ レジストリのネイティブ サポートも備えています。
組織に関して言えば、SCA ツールはコードに関し、影響を受けるライブラリと通信しているかどうかをさらに通知して、可能であれば修正を提案する必要があります。またツールはパッチ適用や更新が必要なコード ベース内のオープン ソース ライブラリも特定する必要があります。
Dependabot の概要と Dependabot がサプライ チェーンをセキュアに保つ方法
Dependabot は GitHub の SCA ツールです。Dependabot は依存関係やその依存関係の脆弱性を特定し、それらを修正、パッチ適用、更新する方法を提案することでサプライ チェーンのセキュリティ保護を容易にします。このツールは開発者ワークフローにネイティブに適合するため、サプライ チェーンを数分でセキュリティ保護できます。
Dependabot は依存関係から脆弱性をリアルタイムで検出し、以下を把握できるようにします。
- GitHub の Advisory Database によって公開された、各依存関係に関する脆弱性データ
- プロジェクトにおける脆弱性の影響。コードが脆弱な呼び出しを行っている場合など
- 措置を講じ、Dependabot のプル リクエストまたは別の回避策を使用して脆弱性を修正する方法
また Dependabot は、Dependabot のバージョン更新 を使用して依存関係を最新の状態に保つのにも役立ちます。これによりプロジェクトにおける多くの潜在的な脆弱性を最初から回避できます。
Dependabot はよりセキュアなコードの記述に役立ちます。 –Delivery Hero、プリンシパル システム エンジニア、Max William 氏
Dependabot のさまざまな機能とは
Dependabot には、次のようなクラス最高レベルの機能スイートがあります。
依存関係グラフ���このグラフはリポジトリまたはパッケージの全ての上流依存関係とパブリックな下流依存関係を特定します。依存関係グラフには依存関係と検出された脆弱性が表示されます。
Dependabot アラート。このアラートは GitHub の依存関係グラフと GitHub Advisory Database に基づいて、新たに発見された脆弱性の影響を受けるリポジトリを通知します。
Dependabot セキュリティ更新。この更新は既知の脆弱性を解決する最小バージョンに依存関係を更新するために Dependabot から送信される自動プル リクエストです。
Dependabot バージョン更新。この更新では依存関係の新しいバージョンが確認され、更新が提案されます。これらは全て、ユーザーが設定した構成 に基づきます。
Dependabot を有効にする方法
Dependabot は簡単に有効化できます。次の 5 つの手順を行うだけです。
- GitHub.com にアクセスします。
- リポジトリのメイン ページに移動します。
- リポジトリ名の下で、[設定] をクリックします。
- 左側のサイドバーで、[コードのセキュリティと分析] をクリックします。
- 最後に、依存関係グラフと Dependabot アラートの [有効] ボタンをクリックします。Dependabot を依存関係の更新に使用する場合は、[Dependabot セキュリティ更新を有効化] もクリックします。
Dependabot にはユーザー向けの次の特長があります。
自分だけの構築。通知を受け取る頻度と受け取る通知の種類を選択できます。Dependabot アラートは"最重要度"の計算で並べ替えられます。計算には脆弱性の影響、関連性、作動可能性が考慮され、アラートに優先順位を付けるのに役立ちます。たとえば既知の脆弱な関数を呼び出す脆弱性の場合は、それが計算に考慮されます (脆弱な関数呼び出しの情報も Dependabot アラートで入手できます)。
コミュニティからの構築。Dependabot アラートに用いられる GitHub Advisory Database は、ソフトウェアの依存関係における脆弱性の世界最大のデータベースです。データベースは、フルタイムのキュレーターからなる専任チームによって維持され、GitHub コミュニティ全体からのコントリビューションによってサポートされています。
永久に無料。GitHub は、業界に力を与えてソフトウェア サプライ チェーンを最大限にセキュリティ保護するには無料かつオープンなセキュリティ データとソリューションが重要であると考えています。
Dependabot 製品が他の GitHub セキュリティ ツールと連携する方法
GitHub では脆弱性の発見と修正に役立つ開発者ファーストのセキュリティ ツール スイートを提供しています。Dependabot がサプライ チェーンのセキュリティ保護に役立つ一方、GitHub の他のセキュリティ製品は Dependabot と相乗的に機能してコード セキュリティをほぼあらゆる角度から確保します。
- CodeQL を利用した_コード スキャン_はコード内の一般的なパターンを検出する静的アプリケーション セキュリティ テスト (SAST) 製品です。プル リクエスト内で実行して、脆弱性がメイン ブランチに到達する前に検出することもできます。CodeQL はコードを保護するだけでなく、将来的に何に注意すべきかを知らせます。各クエリには脆弱性を含むコードの例、同じコードを実装するセキュアな方法、外部参照などの、検出された脆弱性パターンに関する情報が含まれます。
- コード スキャンと CodeQL を開始する方法について詳しくは、GitHub Docs のコード スキャンのページ をご覧ください。
- シークレット スキャン によって、許可されていないアクセスや侵害を防ぎます。これは誤ってコードにプッシュされた可能性のある漏洩したシークレットをリポジトリで積極的に検索することによって実施されます。これには AWS、Slack、Google Cloud、Azure などのパートナーからのパターンに対してコードをスキャンすることが含まれます。スキャンには 1 秒もかからないため、漏洩が発生した際はすぐに検出できます。
- シークレット スキャンを開始する方法について詳しくは、GitHub Docs のシークレット スキャンのページ をご覧ください。
- _セキュリティの概要_では、組織全体のセキュリティ リスクを一元的に表示します。これは数百または数千の規模のリポジトリを担当している場合に特に有効です。このツールは既知のセキュリティ リスクだけでなく、セキュリティ機能がまだ構成されていない未知のリスクも表示します。
- セキュリティの概要について詳しくは、Docs のセキュリティ概要のページ をご覧ください。
これらのツールは全て、企業向け GitHub Advanced Security (GHAS) の一部です。GitHub Advanced Security は開発者ワークフローにセキュリティをネイティブに組み込むことで、ソフトウェア ライフサイクル全体にわたってソフトウェア サプライ チェーンとプロプライエタリ コードをセキュリティ保護できるようにします。GitHub Advanced Security ではプル リクエストごとに自動セキュリティ チェックが実行されます。特定されたセキュリティ問題は使い慣れた GitHub ワークフロー内ですぐに共有されます。これにより業界標準の数か月ではなく、数分で脆弱性を修正できるようになります。
- GitHub Advanced Security について詳しくは、Docs の GitHub Advanced Security のページ をご覧ください。
セキュリティは重要ですが、信頼性も重要です。プロダクトをすばやく安全にデプロイするには GitHub が必要です。 -Dow Jones、エンジニアリング ディレクター、Lee Cookson 氏
GitHub が組織におけるコードのセキュリティ保護にどのように役立つかを担当者と相談するには、無料のデモ にサインアップしてください。
| イノベーションを妨げることなくコードをセキュア化する | GitHub Advanced Security を拡張する |
|---|---|
| GitHub Advanced Security はコード内のセキュリティ問題をより早い段階で発見して修正することで、アプリケーション セキュリティの拡張と自動化に役立ちます。 詳細はこちら |
GitHub Advanced Security を自動化された構造的な手法で拡張、導入する方法について紹介します。 詳細はこちら |
Tags