SDLC(ソフトウェア開発ライフサイクル) は、開始から廃止まで、ソフトウェアアプリケーションの構築に関わるステージの概要を説明するものです。ソフトウェア開発は複雑であるため、SDLCは、開発プロセスにおける現在の位置やこの先の方向を把握できるよう支援するフレームワークとして機能します。SDLCをしっかりと理解すれば、効率的で信頼性が高く安全なソフトウェアアプリケーションを作成しやすくなります。
デジタル脅威が増加し続ける現在において、データとシステムを保護する安全で堅牢なソフトウェアを新規に作成する場合、サイバーセキュリティ対策をSDLCに盛り込むことが不可欠です。
この記事では、まず、SDLCの主要なフェーズを確認してから、SDLCの各ステージにおけるサイバーセキュリティの役割について説明します。詳しく見ていく前に、SDLCの概要となぜ必要なのかをしっかりと理解しましょう。
SDLC(ソフトウェア開発ライフサイクル) とは
SDLCは、ソフトウェアを作成するための構造化手法を実現する体系的なフレームワークであり、最初のコンセプトから完成品に推移していく各ステージが明確に定められています。
SDLCには、次のように複数の目的があります。
- ソフトウェア開発の複雑さに対処できるよう支援すること
- ソフトウェアアプリケーションの品質を高めること
- ソフトウェア開発に伴う固有のリスクを軽減すること
- プロジェクト管理を効率化すること
明確かつ構造化されたロードマップを提供するSDLCによって、チームは次のことが可能になります。
- 潜在する課題に先手を打って対処する
- 常に品質を最優先にする
- 提供されるソフトウェアアプリケーションが確実に当初の要件と目標に沿ったものになるようにする
SDLCの概要となぜ重要なのかについて基本的な理解ができたので、次は、SDLCを構成する主なステージを詳しく見ていきましょう。
詳細
進化し続ける脅威に対するアプリケーションのレジリエンスを確保し、潜在的な損害を軽減し、全体的なセキュリティポスチャを強化するための7つのベストプラクティスについて説明します。
SDLCの主なフェーズ
一般的に、多くのソフトウェアエンジニアは、SDLCをそれぞれ個別の焦点と成果物を持つ5つの主要なステージに分けます。ソフトウェア開発プロセスは、これらのステージに沿って、最初のアイデアから実際の製品へと進んでいきます。
ステージ1:計画策定と要件分析
このステージでは、ソフトウェアの目的、スコープ、目標を定義します。多くの場合、チーム単位で徹底的に分析を行って、エンドユーザーの要件とシステムのニーズを把握します。この分析の結果に従って、ソフトウェア要求仕様書(よく「仕様書」と呼ばれます)の策定を進めます。
仕様書にソフトウェアの機能要件と非機能要件を詳細にまとめることで、SDLCの次のステージに必要な情報が得られます。また、開発チームはSDLC全体を通して、仕様書に戻れば作業が順調に進んでいることを確認できます。
ステージ2:設計
設計ステージでは、SDLCの計画策定ステージの結果に基づいてソフトウェアアーキテクチャを開発します。仕様書に従って、ソフトウェアアーキテクトとデザイナーがシステムとソフトウェアの設計ドキュメントを作成します。作成した設計ドキュメントは、実装ステージに向けたロードマップとなります。
ステージ3:実装
実装ステージ(コーディングステージとも呼ばれます)では、設計ドキュメントを実際のソフトウェアへと変えます。これまでのステージで作成された要求仕様書と設計ドキュメントを参照しながら、ソフトウェアエンジニアがその仕様に合わせてコードを記述します。このステージでは、ソフトウェアアプリケーションが具体的な形を取り始め、具体的な製品になります。
ステージ4:テスト
ソフトウェアを実装したら、SDLCのテストステージに入ります。ここでは、ソフトウェアにバグ、エラー、不一致がないか徹底的にテストします。テストでは、ソフトウェアが想定どおりに動作し、策定された要件を満たしていることを確認します。このフェーズで問題が見つかった場合、開発チームはその問題を修正してから次のステージに進みます。
ステージ5:展開とメンテナンス
テストフェーズで、ソフトウェアアプリケーションが要件を満たし、想定どおりに動作していることを検証したら、ソフトウェアをエンドユーザーに展開します。展開後、ソフトウェアは定期メンテナンスの対象になります。メンテナンスでは、更新、バグの修正、機能の追加、ソフトウェアが引き続き円滑に機能することの確認を行います。
アジャイルアプローチについての余談
従来のソフトウェア開発アプローチを使用して上記5つのSDLCステージを進める際には、ソフトウェアアプリケーション全体が一度にまとめて構築および提供されます。ただし、今日のエンジニアリングチームではソフトウェア開発にアジャイルアプローチを採用しているケースが多く見られます。アジャイルとは、ソフトウェアの開発と提供を小さなセグメント単位で繰り返すアプローチです(「スプリント」と呼ばれます)。
アジャイルでは、ソフトウェアアプリケーションをスプリントごとに計画策定、設計、実装、テスト、展開という上記のステージを進むことになります。ソフトウェアアプリケーションを展開したら、フィードバックが収集されます。このフィードバックによって次のスプリントの方向性が決まります。この繰り返しのアプローチでSDLCに取り組むことで、ソフトウェアアプリケーションを継続的に改善して変化に適応できます。
前述のSDLCの5つのステージに加えて他の2つのステージが含まれ、考慮されることがあります。
ステージ0:概念化
組織によっては、計画策定と要件分析の前に概念化ステージを設けています。このステージでは、フィージビリティスタディを実施して、ソフトウェアプロジェクトの実用性と実現可能性を評価できます。
ステージ6:廃止
廃止(または「サンセット」)ステージは、ソフトウェアのライフサイクル終了を表します。このステージに入ると、ソフトウェアはサポートも更新もされなくなります。変化するユーザー要件やテクノロジーの進歩に合わせて、ソフトウェアの置き換えやアップグレードなどが行われます。組織によってはSDLCにこのステージを含めて、ソフトウェアのサンセットに関連するプロセスを見落とさないようにしている場合もあります。
SDLCの各種ステージを理解したところで、次はサイバーセキュリティがこれらのステージにどのように適合するのかを見ていきましょう。これにより、組織は、そのソフトウェアに最初からセキュリティを組み込み、堅牢性が高く安全な最終製品を作ることができます。
詳細
コンテナ、仮想マシン、API、サーバーレス関数といったクラウドネイティブなアプリケーションのセキュリティを確保し保護するには、セキュリティを実現するために多くの組織が取っているアプローチを見直す必要があります。詳細をご覧ください。
SDLCにおけるサイバーセキュリティの役割
サイバーセキュリティは必要不可欠です。後から足すものではなく、SDLC全体を通して組み込み、第一の関心事にするべきものです。このような一体的なアプローチは、よくセキュリティバイデザインと呼ばれます。SDLCのどのステージでもセキュリティ対策を検討し組み込むことで、安全性の高いアプリケーションを実現するための確固たる基礎を築き、脆弱性を減らして、潜在リスクを軽減できます。
脅威モデリングは設計フェーズに欠かせない部分であり、以下のプロセスが含まれています。
- 潜在的な脅威を特定する
- 脅威を分類する
- 脅威を軽減するために必要な対策を決定する
- 展開とメンテナンス時に十分なセキュリティを確保するためには、どのようなタイプのテレメトリとロギングを生成する必要があるかを計画する
ソフトウェアアーキテクトは、潜在する脅威を念頭に置いて設計にあたることで、脆弱性を減らし、堅牢なセキュリティを最初から組み込むことができます。
実装ステージでは、開発者はセキュアコーディングプラクティスを採用する必要があります。セキュアコーディングプラクティスの目的は、コード自体のセキュリティリスクを減らすことです。以下に、セキュアコーディングプラクティスの例を示します。
- 入力検証
- エラー処理
- 最小特権の原則への準拠
セキュアコーディングプラクティスに従うことで、ソフトウェア開発者はソフトウェアアプリケーションにセキュリティ侵害をもたらすような脆弱性を防止することができます。
セキュリティテストをテストステージに含める必要があります。このステージでは、QAテスターは、単なるソフトウェアの機能とパフォーマンスの検証に留まらず、セキュリティテストも実行して、ソフトウェアに潜む脆弱性を特定する必要があります。例として以下にセキュリティテストに含めるものを挙げます。
- ペネトレーションテスト
- 脆弱性スキャン
- セキュリティ監査とコンプライアンスチェック
- これまでソフトウェアに統合されたサードパーティのライブラリや依存関係のテストと検証
展開前にこうしたセキュリティの脆弱性を検出し修正することで、ソフトウェアのセキュリティとユーザーや組織のデータの安全性を確保できます。
展開とメンテナンスのステージでは、継続して実施するセキュリティ対策を組み込む必要があります。サイバーセキュリティが果たす役割は展開時にあります。というのも、DevOpsチームとITチームはプロビジョニングするインフラストラクチャを適切に設定し、脆弱性がないかビルドをスキャンして、シークレットを管理する必要があるからです。ただし、メンテナンスフェーズには、以下のような継続的なセキュリティ対策を含める必要があります。
- パッチ管理:ソフトウェアを更新して、特定されたセキュリティの脆弱性を修正する
- インシデント対応:セキュリティインシデントを管理し、回復を図る
- モニタリングとアラート:メトリックとユーザーアクティビティをモニタリングするシステムを実装し、異常または疑わしい振る舞いがあればセキュリティチームにアラートを通知する
- 検証:開発したソフトウェアが想定したとおりのもので、意図したとおりに機能していることを確認する
サイバーセキュリティは、SDLCにおける独立したステージでもなければ、単一のステージのみのものでもありません。SDLCの各ステージを端から端まで貫く一定不変の糸と言えます。「セキュリティバイデザイン」アプローチは根本的にSDLCでどのようにプロセスを実行するかを具体化するものであり、最終製品のセキュリティと堅牢性を大幅に高めることができます。
まとめ
この記事では、ソフトウェア開発ライフサイクルを詳しく見てきました。本来複雑になりがちなプロセスに効率性と透明性をもたらすSDLCが、今日のソフトウェア開発にとってなぜ重要なのかを確認しました。また、SDLCの各ステージを取り上げ、アジャイルの手法が効果を示し始める状況について触れ、最後に、SDLCにおけるサイバーセキュリティの役割を説明し、それがSDLCのあらゆるステージの不可欠な部分であり、後から付け足したり切り離して考えたりする事柄ではないことを確認しました。
サイバーセキュリティのツールとプラットフォームを利用すると、SDLCにセキュリティベストプラクティスを組み込めるようになります。CrowdStrike Falcon®プラットフォームは、SDLCのステージ全体を通して使用できるツールが豊富に用意された統合サイバーセキュリティプラットフォームです。Falconプラットフォームでは、脆弱性スキャンと脅威インテリジェンスからインシデント対応まで、ソフトウェアプロジェクトのステージごとにセキュリティに関する懸念事項を一元的に管理できます。専門家へのお問い合わせについては、今すぐクラウドストライクまでご連絡ください。