In this article
ソフトウェアセキュリティを解説
コードを安全に保つための定義、課題、ガイダンス
ソフトウェアセキュリティとは?
ソフトウェアセキュリティは、情報セキュリティ全般の領域における特定の概念であり、ソフトウェアの基盤となるプログラムロジックの保護を扱います。アプリケーションセキュリティとは明確に異なり、ソフトウェアセキュリティはソフトウェア開発ライフサイクル(SDLC)の初期段階と、アプリケーションを構成するコードに重点を置きます。
セキュリティを重視する組織にとって、自社のソフトウェアセキュリティの状況を評価することは非常に重要です。アプリケーションセキュリティに重点を置きすぎていませんか?すでにデプロイ済みのインフラ、アーティファクト、バイナリを主な対象とする、事後対応型の姿勢になっていませんか?ソフトウェアセキュリティへのプロアクティブな取り組みに、より多くのリソースを投入することで、全体的なセキュリティを測定可能な形で向上できるでしょうか?基本的なサイバーセキュリティ衛生の実践に取り組んでいますか?ソフトウェアセキュリティ、アプリケーションセキュリティ、そして現代のSDLCを詳しく見ていくことで、理解を深め、今後の道筋を見つけられるでしょう。
ソフトウェアセキュリティのリスク
ソフトウェアセキュリティは、基盤となるプログラムロジックを扱います。簡単に言えば、コードが対象です。安全でない、あるいは設計の不十分なコードは、バッファオーバーフロー、例外処理の不備、メモリリーク、未サニタイズの入力など、ソフトウェアセキュリティ上の問題を引き起こす可能性があります。こうしたバグを修正せずに放置すると、深刻なアプリケーションの脆弱性につながり、悪意のある攻撃者に悪用されて、ソフトウェアインフラが攻撃されることも少なくありません。セキュアSDLC(SSDLC)の実現を目指す組織は、ソフトウェア開発の極めて重要な初期段階で、エンジニアリングチームが適切に対応できるようにする必要があります。現代のソフトウェアは複雑であり、そのセキュリティを確保する取り組みも同様に複雑です。基本的なアプリケーションであっても、依存関係のサプライチェーンは、複雑に絡み合うサードパーティ製ライブラリやモジュールの集合体へと急速に膨れ上がることがあります。その一つひとつに、表面化していないバグや潜在的な脆弱性が潜んでいる可能性があります。
ソフトウェアセキュリティ要件とは?
ソフトウェアセキュリティ要件とは、特定のシステムやアプリケーションに求められるセキュリティ目標を明文化したものです。十分に検討された明確なセキュリティ要件のリストは、現代のソフトウェアアプリケーションを構築するうえで非常に重要です。優れた要件は明確で、テスト可能であり、達成可能なものです。
ハードウェアセキュリティとソフトウェアセキュリティとは?
ソフトウェアセキュリティはアプリケーションのコードを保護し、ハードウェアセキュリティはその名のとおりハードウェアを保護します。ハードウェアセキュリティには、アクセス制御や侵入防止など、実物のハードウェアを対象とする物理的なセキュリティが含まれます。また、ファームウェアやROMのセキュリティに関連する、より低レベルの課題を指すこともあります。
ソフトウェアセキュリティのプロセスとツール
ソフトウェアのバグを特定して修正するための適切なツールとプロセスを整えることが重要です。さらに重要なのは、ソフトウェアエンジニアがバグへの対応に責任と裁量を持てるようにすることです。迅速なフィードバックループというDevOpsの原則が重要な役割を果たします。即時に実行へ移せるフィードバックによって、バグや脆弱性の全体的な発生を抑えられます。特に、開発ライフサイクルの後半でその効果が発揮されます。
一方、開発チームとセキュリティチームが分断され、修正や報告に長い時間がかかる組織では、ソフトウェアにバグや脆弱性が蔓延することは避けられません。その結果、難しいアプリケーションセキュリティの取り組みは、さらに困難になります。
ソフトウェアセキュリティとアプリケーションセキュリティ
基盤となるソフトウェアがJARやコンテナイメージなど、デプロイ可能なアーティファクトの段階に達すると、アプリケーションセキュリティの領域に入ります。SDLCのこの段階では、より包括的な視点が求められます。対象はソフトウェアだけではなく、相互に接続されたさまざまなシステム、インフラ、ネットワーク経路に及びます。多くの場合、DevOpsエンジニアなど運用を重視するスタッフが、アプリケーションのセキュリティ確保に積極的に関わります。
ただし、ソフトウェアセキュリティに重点を置いてSDLCの早い段階に投資すれば、アプリケーションセキュリティの取り組みにも大きな効果があることを理解しておく必要があります。欠陥や脆弱性が少ないアプリケーションのほうが、多数の問題を抱えたアプリケーションよりも、はるかに容易に保護できます。脆弱なアプリケーションは運用チームやセキュリティエンジニアを後手に回らせ、リスクを軽減するために、コストのかかるインフラやセキュリティ上の回避策が必要になることも少なくありません。
特定の脆弱性を狙うトラフィックを遮断できる新しいファイアウォールを購入するのと、その脆弱性の原因となるバグを開発の初期段階から外に出さないようにするのとでは、どちらが費用対効果に優れているでしょうか?DevSecOpsのような新しいアプローチは、運用チームとソフトウェアエンジニアの間のフィードバックループを短縮し、脆弱性への迅速な対応と修正に役立ちます。しかし、最終的な目標は、そもそも脆弱性を発生させないことです。

セキュアSDLCとは?
アプリケーションセキュリティの過剰な対症療法的投資を抑えるため、ソフトウェアセキュリティはどの組織にとっても常に最優先事項であるべきです。ただし、アプリケーションセキュリティをおろそかにしてよいわけでは決してありません。真にセキュアなSDLCを実現するには、ソフトウェアセキュリティとアプリケーションセキュリティの両方にしっかり投資する必要があります。

これを段階に分けると、プロアクティブな初期段階、中期段階、後期段階として捉えることができます。
プロアクティブな初期セキュリティ段階
ソフトウェアの設計・開発の初期段階では、最初のスケッチや顧客要件が、動作するロジックや機能へと形になり始めます。エンジニアリングチームは、セキュリティ/DevSecOpsエンジニアと緊密に連携し、ソフトウェアサプライチェーンの詳細な一覧を作成する必要があります。重要な依存関係やモジュールについて、ニュース、分析情報、CVEフィードを購読しましょう。
機能が追加され、コードが増えていく中では、迅速なフィードバックループが欠かせません。静的解析を実行できるツールを使ってアプリケーションセキュリティテストを統合すれば、デプロイ前にバグや脆弱性を確実に特定できます。
中期セキュリティ段階
この段階では、コードはデプロイ可能なアーティファクトになっているでしょう。運用チームもインフラのサポートや運用に、より深く関わり始めます。セキュリティツールとテストをCI/CDパイプラインに統合することで、アプリケーションセキュリティからソフトウェアセキュリティへの確実なフィードバックループを維持できます。
後期セキュリティ段階
SDLCのこの段階では、アプリケーションは何らかの本番環境にデプロイされている可能性が高くなります。堅牢な監視・アラート基盤を整備することは、組織にとって極めて重要です。多くの組織では、コンテナベースのワークロードを単独で、またはKubernetesのようなオーケストレーションプラットフォーム上で実行しています。そのため、コンテナセキュリティとKubernetesセキュリティへの注目が高まっています。
これらの段階は、互いに排他的でも、分離されたものでもないことを強調しておく必要があります。たとえば、静的なコンテナ・イメージ解析ツールを使えば、SDLCの非常に早い段階からコンテナセキュリティに取り組めます。静的解析テストは継続的に実施し、ソフトウェアエンジニアが新たに書く機能にも、設計の初期段階で適用したのと同じ厳格なテスト手法を適用する必要があります。
ソフトウェアセキュリティはプロアクティブなセキュリティ
ソフトウェアセキュリティの中核に重点を置き、SDLCの早い段階でセキュリティ課題に対処する組織は、より安全なアプリケーションを実現できます。さらに、アプリケーションを本番環境にリリースした後も、安全な状態を維持するためのコストを抑えられます。
ただし、完璧なソフトウェアセキュリティを目指すこと自体は目標にすべきではありません。常に新たな高度な攻撃が登場することを理解すれば、ソフトウェアセキュリティはアプリケーションセキュリティを補完するものであり、置き換えるものではないとわかります。
Snyk Cybersecurity Platformでソフトウェアセキュリティを強化
Snykの開発者ファーストのソフトウェアセキュリティ機能は、プロジェクトの整理、ガバナンス、優先順位付けを容易にし、プロジェクトに含まれるセキュリティ脆弱性やライセンス上の問題を、より効率的に管理できるよう設計されています。
Snyk Open Source:オープンソースの脆弱性を開発者が簡単に見つけ、自動で修正できるようにします。Snyk Open Sourceを始める。Snyk Open Sourceには、オープンソースライセンスの使用状況を管理するSnyk license complianceも含まれています。Snyk License Complianceを始める。
Snyk Code:開発中に、アプリケーションコードの脆弱性をリアルタイムで発見し、修正できます。Snyk Codeを始める。
Snyk Container:コンテナイメージやKubernetesアプリケーションの脆弱性を発見し、修正できます。Snyk Containerを始める。
Snyk Infrastructure as Code (IaC):TerraformやKubernetesのコードにおける安全でない設定を発見し、修正できます。Snyk IaCを始める。
Snyk Intel Vulnerability Database:オープンソースとコンテナの脆弱性に関する、包括的で実用的なデータを提供します。