close search bar

Sorry, not available in this language yet

close language selection

サイバー・セキュリティの実現方法:重力は無慈悲な夜の女王

Synopsys Editorial Team

Jun 23, 2022 / 1 min read

最先端のソフトウェア開発は素晴らしい無限の可能性を秘めています。コンピュータとインターネット接続があれば、誰でもコードを作成できます。人類の歴史が始まって以来、今ほど、ソフトウェアで何かを構築し、思いついたアイデアを実現する力を誰もが持っている時代はありません。

それと同時に、オープンソース・ソフトウェア・コンポーネントのエコシステムの繁栄により、私たちは先人の偉業を手本にして既存の機能の膨大な部品をすばやく組み立て、目標に向かって一気に駆け上がることができます。

当然、いつかは現実的な問題にぶつかります。重力は無慈悲な夜の女王 ですから、建物を建てる場合、崩れないようにする必要があります。飛行機を造る場合、着陸の準備が整うまで上空にとどまるようにする必要があります。
ソフトウェアを作成する場合、過失や攻撃が発生しても障害が起こらないようにする必要があります。

チャンスを台無しにしない

ある意味で、開発チームは金の卵を産むガチョウのようなものです。何と言っても、開発チームは収益をもたらすソフトウェアを生産する創造的な人材です。

ただし、セキュリティの脆弱性は基本的に開発チームのミスです。時々、ガチョウは失敗作を産みます。

開発チームとセキュリティの脆弱性のこの関係が、経営陣の判断の誤りにつながることもあります。脆弱性の原因が開発チームにあるならば、開発チームに対してセキュリティに関するトレーニングを行い、以後、間違いを犯さないようにする方法が理に適っています。

しかし、それでは問題は 解決しません。

ソフトウェアセキュリティに関する開発チームの知識を強化することは確かにセキュリティの向上につながりますが、大きな課題に対する対策としては限定的で安直な方法です。

ソフトウェア・サプライチェーン

ソフトウェアは開発チームが作成するものと考えるのは、あまりにも単純化しすぎです。ソフトウェアは多種多様な貢献者の努力によって作られています。

  • ソフトウェアの機能や構造を考え出すのは設計者とアーキテクトです。コードを記述する前のこの段階で、多くの脆弱性が入り込みます。設計レビュー、脅威モデリングアーキテクチャ・リスク分析はすべて、可能な限りセキュリティの高い完成された設計を目指して実施する必要があります。
  • 開発チームはコードを作成しますが、基本的な機能を提供するために、事前に構築されたコンポーネント(多くの場合はオープンソース・パッケージ)を多用します。開発チームが記述するコードは、多くの場合、すべてをとりまとめて特定の機能を提供する比較的薄い層です。本質的に、開発チームは、使用しているコンポーネントに貢献したすべての開発者で構成される影の集団に依存しています。
  • 運用エンジニアは、ソフトウェアをデプロイ、構成、保守し、セキュリティに広範な影響を与える多くの決定を下します。
  • ユーザーは、ソフトウェアを使用する際にセキュリティ関連の決定を下します。

アイデアの段階からユーザーの手元に届くまでの工程がソフトウェア・サプライチェーンです。開発工程は重要ですが、サプライチェーン全体の1つのリンクに過ぎません。セキュアなソフトウェアを構築するには、サプライチェーン全体にわたってリスクを軽減するための措置を講じることが重要です。

機械を使用する

大きな土の山をシャベルで移動することもできますが、ショベルカーがあれば作業は格段に速くなります。ソフトウェアのセキュリティを強化すれば、これと同様の効果があります。脆弱性を手動で探し出すこともできますが、自動化ツールを使用できれば、作業ははるかに効率的になります。

特にアプリケーションにオープンソース・コンポーネントを追加している場合などには、単一のソフトウェアアプリケーションに数千行、時には数百万行のコードが含まれている可能性があります。開発チームがセキュリティの脆弱性を手動で探し出すやり方は現実的ではありません。

セキュリティツールは(今のところ)人間ほど賢くありませんが、比較的短時間で膨大な量の分析を行うことができます。効果的なセキュリティプログラムは、ツールによる処理と手動による作業の利点を活用します。ツールを用いることで幅広い領域を迅速にカバーし、手動による作業でターゲットを絞った分析を行うことができます。

単純に自動化できないアクティビティもあります。例えば、設計段階で行われるセキュリティ分析のほとんどは手動で実行する必要がありますが、開発、テスト、デプロイ、保守のフェーズを通して、セキュリティの脆弱性を洗い出すのに便利な様々な自動テスト手法があります。

開発チームが開発に専念できる環境を整える

開発チームは困難な問題を解決する創造的な人材の集まりです。その仕事の核となるのは、何らかの処理を実行するコードを作成することです。セキュリティはアプリケーションを構築する上で重要な要素ですが、開発チームの仕事の中心ではありません。

したがって、開発者にセキュリティの知識があれば、それに越したことはありませんが、本当に必要なのは、開発チームがプロアクティブなセキュリティプロセスに組み込まれていることです。開発チームが誤りを犯したとき、自動化ツールがエラーを通知して修正を支援する必要があります。その際、開発チームが既に使用しているツールにセキュリティを組み込むことで、できるだけ作業の邪魔にならないようにしなければなりません。

適切に実装されたソフトウェア開発プロセスでは、開発チームはセキュリティをほとんど意識することなく、通常どおりに日常業務を遂行できます。彼らがコードの作成に専念できるのは、実装している設計がセキュリティの観点から既に評価され、強化されていることを確信しているからです。コーディングエラーが発生すると、開発環境のプラグイン(Code Sight™など)が脆弱性情報を通知し、修正方法に関する指針を提供します。コードをソース・リポジトリにコミットすると、Coverity®静的アプリケーション・セキュリティ・テスト(SAST)、Black Duck®ソフトウェア・コンポジション解析(SCA)、Seeker®インタラクティブ・アプリケーション・セキュリティ・テスト(IAST)などの自動化ツールが脆弱性を検出し、既に使用している問題追跡システム(Jiraなど)を介して開発チームにフィードバックされます。

結局のところ、セキュリティでは、開発者を改善するのではなく、開発者を中心により良いプロセスを構築することが求められます。

 

Continue Reading

トピックを探索する