
ソフトウェア開発ライフサイクル(SDLC)にセキュリティを組み込むことは、高い評判を維持し、顧客基盤の減少を回避するだけでなく、データ侵害やその他のサイバー攻撃から組織を守る鍵となります。したがって、ソフトウェアエンジニアはSDLCの各フェーズにおいて、セキュリティに対して積極的なアプローチを取る必要があります。
安全なソフトウェア開発ライフサイクルを理解する
ソフトウェア開発ライフサイクルは、ソフトウェア開発者が直線的に実装できる単発のプロセスではありません。SDLCには、ソフトウェアの適切な成果を保証するために徹底的なチェックが行われる、多くのループに絡み合ったフェーズがあります。
しかし、各フェーズにセキュリティチェックを適切に統合せずに、SDLCの各フェーズをループするだけでは不十分です。では、安全なソフトウェア開発ライフサイクルとは一体何なのでしょうか?
まず、安全なSDLCには、コードレビュー、ペネトレーションテスト、アーキテクチャ分析などのセキュリティ対策が組み込まれている必要があります。さらに、脅威モデリング、リスク評価、静的解析なども、安全なSDLCを実現するためのセキュリティ対策です。
参照: モバイルデバイスのセキュリティポリシー (TechRepublic Premium)
SDLCにセキュリティを組み込む方法
ソフトウェア開発ライフサイクルには、ソフトウェア開発者がセキュアなSDLCを実現するために採用できる特定の標準があります。以下では、SDLCの各フェーズと併せて、そのいくつかを紹介します。
1. 要件収集フェーズ
要件収集フェーズで尋ねるべき重要なセキュリティに関する質問には、ソフトウェアがセキュリティ攻撃からどれだけ早く回復できるか、また、どのようなセキュリティ手法でソフトウェアをセキュリティ攻撃から保護できるか、などがあります。
この段階でこれらの質問に答えると、開発者にとってソフトウェアのセキュリティ要件が明確になります。
2. 設計段階
ソフトウェア開発におけるセキュリティ統合には、設計段階が極めて重要です。一般的なソフトウェアの脆弱性は、通常、ソフトウェア開発において不適切な技術を採用したことが原因で発生します。
このフェーズでは、潜在的な脅威を確実に検出するための脅威モデリングプロセスと、ソフトウェアを脅威から保護するための緩和計画が必要です。この段階で重要なのは、潜在的な脅威が早期に検出されるほど、ソフトウェアエンジニアがそれらに対処するための計画を立てやすくなるということです。
3. 開発フェーズ
プログラム開発設計は、この段階で社内外のソフトウェアチームとソフトウェア開発ツールを活用し、適切に評価する必要があります。初期テスト、ユーザートレーニング、導入、受け入れテスト、経営陣の承認などは、この段階で記述・文書化すべき事項のほんの一部です。
4. 実装フェーズ
この実装フェーズでは、コードレビューを容易にする自動化技術ツールとガイドラインに注目する必要があります。コードレビューを自動化するツールは、このフェーズで導入することで、徹底的なコード分析を行うことができます。そのようなツールの一つに、静的アプリケーションセキュリティテスト(SAST)ツールがあります。さらに、開発者がソフトウェアをオープンソース化する予定であれば、ソフトウェアコンポジション分析(SCA)ツールを使用することで、コードの脆弱性を検査・分析することもできます。
5. テストフェーズ
開発者は、このフェーズでセキュリティを統合するために、いくつかのセキュリティテスト手法を採用する必要があります。使用できるセキュリティテスト手法には、以下のようなものがあります。
- 侵入テスト: DAST ツールによるさまざまな手動テストや自動テストを使用して、テスターは攻撃者が利用できるネットワーク、アプリケーション、およびコンピュータ システムの弱点を探します。
- ファズ テスト:ファズ テストでは、テスターは不正な入力をソフトウェアに送信して、潜在的な脆弱性を見つけることができます。
- インタラクティブ アプリケーション セキュリティ テスト (IAST): DAST と SAST テスト手法を組み合わせた IAST により、実行時に潜在的な脆弱性が検出されます。
参照:Kali Linux 2022.1は侵入テストのワンストップショップです(TechRepublic)
6. 展開フェーズ
ソフトウェアのセキュリティ体制を強化するには、導入フェーズも重要です。セキュリティの観点から見ると、クラウド環境での導入は新たな課題をもたらします。例えば、データベースパラメータ、プライベート証明書、その他導入に関連する機密性の高い設定パラメータは、プログラム実行時に利用可能なキーボールトなどの機密管理ソリューションに常に保存する必要があります。
7. 導入後およびメンテナンス
ソフトウェア開発プロセスがこの段階に達すると、メンテナンスモードに入ります。この段階では、新しいプログラムのパフォーマンスを定期的に監視してください。さらに、パッチ適用やメンテナンスのためのシステムシャットダウン、ハードウェアの更新、災害復旧タスクのスケジュールを作成し、生産に大きな遅延を生じさせずに必要な変更を行うようにしてください。
さらに、開発者はセキュリティスキャンツールを使用して、アプリケーションやネットワークの脆弱性をチェックできます。これらのソリューションは継続的なセキュリティスキャンを実行し、危険が発見された場合に警告を発します。ただし、セキュリティスキャナーは責任を持って利用する必要があることに注意してください。これらのスキャナーは、インフラストラクチャまたはアプリケーションの所有者の同意を得た場合にのみ使用してください。
ソフトウェア開発ライフサイクルの早い段階で脅威を軽減する
世界がセキュリティ攻撃の発生との戦いを続けることは間違いありません。しかし、ソフトウェア開発ライフサイクルにおいてセキュリティを最優先に扱うことができれば、ソフトウェアツールのセキュリティ脆弱性を回避する上で大きな効果を発揮するでしょう。とはいえ、上記の指針は、企業やソフトウェアエンジニアがソフトウェア開発ライフサイクルにセキュリティのベストプラクティスを組み込むための支援を目的としています。
TechRepublic Academyのこれらのリソースには、ソフトウェア開発を始めるために必要なものがすべて揃っています。
- ソフトウェア開発プロセスブートキャンプバンドル
- AZ サイバーセキュリティ開発者バンドル
- 究極のソフトウェアテストバンドル