NIST SSDF フレームワークを理解する

ソフトウェア サプライ チェーンのセキュリティ リスクを軽減するには、多くの場合、複数のセキュリティ層とさまざまな戦略の実装が必要になります。しかし、ソフトウェアを安全に保つための最も効率的なアプローチの 1 つは、ソフトウェア アプリケーションの開発段階で考えられるセキュリティの脆弱性に対処することです。ソフトウェア セキュリティの問題に明示的に対処しているソフトウェア開発ライフ サイクル モデルはほとんどないため、これは多くの場合課題となります。ソフトウェアを安全に保つには、使用するソフトウェア開発ライフサイクル モデルにかかわらず、安全なソフトウェア開発手法を採用する必要があります。

Secure Software Development Framework (SSDF) は、構築しているソフトウェアのセキュリティを確保するために従うべき基本的な慣行のいくつかを概説しています。 SSDF は、国立標準技術研究所 (NIST) によって確立された標準的なソフトウェア開発セキュリティ慣行に基づいており、ソフトウェア開発におけるセキュリティ問題に明示的に対処します。 SSDF バージョン 1.1 は次のように定義されています。 NIST SP 800-218 出版。 このフレームワークは、2021 年 XNUMX 月に最初に公開されました。 ドラフト バージョン。 22 年 2021 月 1.1 日、NIST は SSDF XNUMX の最終バージョンをリリースしました。高レベルの実践とタスクはすべて同じままですが、提供されたさまざまな例を中心に多くの違いがあります。どの手法を導入するかを決定する際に、NIST はリスクとコスト、実現可能性、および適用可能性のバランスを取ることを推奨しています。ソフトウェアのセキュリティを促進するために、できる限り多くのチェックとプロセスを自動化することは、考慮すべき重要な機能です。

ソフトウェア開発ライフサイクル モデルに取り組む組織として、ソフトウェア サプライ チェーンの脆弱性からソフトウェアを保護するための全体的な取り組みの一環として、SSDF のガイドラインを実装する必要があります。このフレームワークに従うことは、ソフトウェアがリリースされる前に未対処の脆弱性を検出するのに役立ちます。これにより、これらの未検出の脆弱性によって発生する可能性のあるセキュリティ悪用のリスクと影響が軽減されます。この記事は、SSDF フレームワークとは何か、およびそれがソフトウェア サプライ チェーンのセキュリティにどのように貢献するかを詳しく説明する包括的なガイドです。

安全なソフトウェア開発フレームワークの 4 つの実践

SSDF の実践は 1.1 つのカテゴリに分類されます。 SSDF フレームワークでは、各プラクティスは一意の識別子と、それが何であるか、なぜ有益であるか、そしてそれを実装するために実行する必要があるタスクについての簡単な説明によって識別されます。このフレームワークには、確立された安全な開発実践文書を参照して実践を実装するためのツール、プロセス、方法の例も含まれています。以下は、セキュア ソフトウェア開発フレームワーク (SSDF) バージョン XNUMX の XNUMX つの柱のプラクティスです。

組織の準備 (PO)

安全なソフトウェア開発は人に大きく依存します。したがって、SSDF を実装する際の最初のステップは、組織内の全員がフレームワークで必要となる変更に対して十分な準備ができていることを確認することです。まず、ソフトウェア開発に使用するツールに基づいて、開発中のソフトウェアの特定のセキュリティ要件を特定する必要があります。このようにして、組織レベルと個人レベルの両方で、使用する人材、プロセス、テクノロジの準備を開始できます。

組織の準備は通常、経営トップから賛同を得たり、従業員に必要なトレーニングを実施したりするという形で行われます。準備作業の一部には、プロセスの自動化と開発のための安全な環境の構築に役立つツールの実装も含まれる場合があります。

ソフトウェアの保護 (PS)

傘を守るイメージ

安全なソフトウェア開発フレームワークは、ソフトウェアのすべてのコンポーネントを不正アクセスや改ざんから保護するための実践方法の概要を示しています。これは、不注意または意図的なコードへの不正な変更を防止し、ソフトウェアのソース コードとソフトウェア構成を保護するための重要な手順です。ソフトウェアの保護には、特定の状況に応じてさまざまなアプローチが必要になる場合があります。コードが公的にアクセスできるように意図されていない場合、これによりソフトウェアの盗難が防止され、攻撃者が脆弱性を見つけるのが難しくなったり、時間がかかったりする可能性があります。

SSDF のこのセクションで概説されている慣行に従うことで、ソフトウェア消費者は、取得したソフトウェアが正規のものであり、改ざんされていないことを保証します。さらに、ソフトウェア リリースを保存することで、リリース後のソフトウェアの脆弱性を特定、分析、排除するのに役立ちます。

安全性の高いソフトウェア (PW) を作成する

セキュリティの脆弱性を最小限に抑え、十分に安全なソフトウェアを作成するには、ソフトウェア開発ライフサイクル全体で従うべき基本的な手順があります。これらには次のものが含まれます。

  • 安全なソフトウェア構成の選択
  • ソフトウェアのサードパーティコンポーネントを評価して、その整合性を確保する
  • ソフトウェアのソースコードが安全なコーディング慣行に準拠していることを確認する
  • コードの脆弱性をレビュー、分析、テストし、コードがリリースされる前に特定された問題に対処します。
  • コンパイラやインタープリタなどのビルドツール機能を使用して脆弱性を防止する

脆弱性への対応 (RV)

ソフトウェアがリリースされた後でも、ソフトウェアの脆弱性が発見される可能性は依然としてあります。組織内のテスター、外部のセキュリティ研究者、さらには顧客がこれらの脆弱性を発見する可能性があります。ソフトウェアを保護する上で重要なのは、これらの脆弱性が発見され次第、迅速に対応することです。セキュリティの抜け穴を隠蔽する時間が長ければ長いほど、それがもたらす損害は大きくなります。すべての組織には、新しい脆弱性を分析し、どのように対処すべきかを決定するために、他のポリシーと同様に脆弱性開示プログラムが必要です。

 

考慮すべき主な点は何ですか?

SSDF の主な目的は、組織がソフトウェア開発活動においてセキュリティを調整し、優先順位を付けるのを支援することです。 SSDF は、ソフトウェア開発ライフサイクルでセキュリティを実装する際に、ビジネス要件、リスク許容度、およびリソースを考慮します。このフレームワークの主な考慮事項には次のようなものがあります。

  • セキュリティを SDLC に統合する

安全なソフトウェアを構築するための最初のステップは、ソフトウェア開発ライフサイクルのさまざまなステップと段階にセキュリティを統合することです。基本的に、開発チームはセキュリティを重視する文化を持たなければならず、これは開発プロセスの初期段階から始める必要があります。

ほとんどの場合、標準的なコーディング手法の多くは、ソフトウェアのリリース後に悪意のある者によって悪用される可能性のある多数の脆弱性を導入します。このため、開発者は最初からセキュリティについて考慮する必要があり、これらの潜在的な攻撃ルートを減らすのに役立つ戦略について十分に教育されている必要があります。

ソフトウェアを保護する人的側面について考えることに加えて、ソフトウェアの潜在的な脆弱性を最初からテストおよび監視するプロセスを自動化することも検討する必要があります。

セキュアなコード開発のイメージ

  • 安全なソフトウェア開発ポリシー

安全なソフトウェア開発ポリシーは、安全なソフトウェア開発のために組織が従う慣行と手順を詳しく説明した正式な一連のガイドラインです。このポリシー文書には、開発ライフサイクルの各段階で従う人、テクノロジー、プロセスに関する詳細な指示が含まれています。

安全なソフトウェア開発ポリシーは、ソフトウェアの整合性を高めるための単なる推奨事項ではありません。場合によっては必須です。たとえば、ソフトウェアが ISO 27001 や SOC Type 2 標準などのセキュリティ標準を満たす必要がある場合は、安全な開発ポリシーの文書が必要になります。幸いなことに、この目的のために採用できるテンプレート ガイドがあります。ソフトウェア セキュリティ チームは、ポリシー ドキュメントを最初から作成し、特定のニーズに合わせて調整することもできます。

  • サードパーティベンダー

安全なコードを作成し、内部でセキュリティ要件に従うだけでは十分ではありません。ほとんどのソフトウェアは依然として、あなたと同じセキュリティ標準に従っていない可能性のあるサードパーティ ベンダーからコンポーネントを採用しています。これらのサードパーティ コード コンポーネントは、 ソフトウェアサプライチェーン攻撃 実施されます。

ソフトウェア開発ライフサイクル全体を通じてセキュリティ コンプライアンスを確保する取り組みの一環として、使用するすべてのサードパーティ コンポーネントを監視し、ベンダーがセキュリティ要件を十分に認識し、同じセキュリティ標準に完全に準拠していることを確認する必要があります。

  • コードの整合性の保護

ソフトウェア コードとそのすべてのコンポーネントは、悪意のある攻撃者が悪用してソフトウェアに脆弱性を挿入できる潜在的な攻撃ポイントとなります。これを防ぐには、あらゆる形式の改ざんから安全なときに、すべてのコードを安全なリポジトリに保管する必要があります。

コードの整合性を維持する取り組みの一環として、認可された開発者のみがソース コードにアクセスできるようにすることが含まれます。選択するコード リポジトリには、これを保証する機能に加えて、サインイン プロセスを保護し、コードに加えられる変更を監視する追加機能が必要です。自動化を採用してアクセス データを監視し、定期的にコード分析を実行することで、コードの整合性をさらに向上させることができます。

  • プリインストールされたマルウェア

ソフトウェア サプライ チェーン攻撃の一般的な経路の 1 つは、プリインストールされたマルウェアのセキュリティ脆弱性を隠すことです。これは、ソフトウェアに大損害を与える可能性のあるウイルス、ランサムウェア、トロイの木馬、またはスパイウェアである可能性があります。マルウェアは、ソフトウェアの構築プロセスで使用するデバイスや信頼できるソフトウェア、さらにはサードパーティ ベンダーのシステムにプレインストールされている可能性があります。このマルウェアは、デジタル署名された正当なプロセスによってシステム全体に拡散するまで、長期間隠蔽されたままになる可能性があります。ソフトウェア開発の安全性を確保するには、このプリインストールされたマルウェアを監視し、それらを特定して削除するための措置を講じることが必要です。

  • コードのテスト、レビュー、チェックリスト

ソフトウェア開発に対する従来のアプローチでは、通常、コードのテストはソフトウェア開発ライフサイクルの最後まで残されます。ただし、ソフトウェアの脆弱性を発見するこの事後対応のアプローチはあまり効果的ではありません。より効率的なアプローチは、自動テストを設定して、構築中にコード内の欠陥を継続的に検出することです。開発者は、後で欠陥が発見されたときにイライラしないように、コードを手動でレビューおよびチェックする必要もあります。

追跡する部品やコンポーネントは多数あるため、構築するときにチェックリストを作成することは理にかなっています。これは、ソフトウェア開発および監視チームが SSDF ポリシーに定められたすべてのアクションが適切に遵守されていることを確認するのに役立ちます。

  • 脆弱性の軽減

SSDF およびその他のセキュリティ標準に準拠しているにもかかわらず、ソフトウェア開発において脆弱性は事実上避けられません。最も重要なことは、これらの脆弱性が発生した場合にそれを軽減する準備をしておくことです。これは、セキュリティ インシデントが発生するとすぐに対処できるように、明確に定められた計画と戦略を備えたチームを設置することを意味します。

組織がセキュリティの脆弱性にどれだけ早く対応できるかによって、そのような攻撃による悪影響を軽減するのに大きな違いが生じます。ソフトウェアの欠陥がすぐに発見されて修正されると、悪意のある攻撃者がそれらを悪用する時間が短縮されます。したがって、脆弱性の軽減は、すべての組織が注意を払う必要がある安全なソフトウェア開発の重要な側面です。

  • 安全なデフォルト設定

新しいソフトウェアには、高度な知識がなくてもユーザーをソフトウェアの脆弱性から保護できるデフォルトのセキュリティ設定が必要です。これらのデフォルト設定についてユーザーを教育する措置を実装して、ソフトウェア導入の初期段階でもユーザーを保護し続けることもできます。

まとめ

Secure Software Development Framework (SSDF) は、すべての組織のソフトウェア開発ライフサイクルに統合する必要がある一連の高度なプラクティスです。開発プロセスの初期段階でこのフレームワークに定められたプラクティスに従うことで、最終的にリリースするソフトウェアのバージョンにおけるセキュリティ上の欠陥を減らすことができます。 SSDF はセキュリティ リスクの検出にも役立ち、最終リリースに反映される未検出の脆弱性の潜在的な影響を軽減します。このフレームワークは、今後このようなセキュリティ問題が再発するのを防ぐための鍵となります。