アジャイル開発のキーワードとして「DevOps(デブオプス)」を目にしたことはないでしょうか?開発チーム(Development)と運用チーム(Operations)が互いに協調し合うことにより、ビジネスにおけるシステムの価値をより高め、より迅速にそのシステムをエンドユーザーへ届け続けるという開発現場における概念になります。
さらに、最近の開発現場にて無視できないのがセキュリティ(Security)。前述のDevOpsの考え方にセキュリティの要素も組み合わせた「DevSecOps(デブセックオプス)」という新しい概念が生まれています。
DevSecOpsとは
DevSecOpsの意味についてですが、冒頭で触れたように従来のDevOpsの考え方にセキュリティの要素を組み込んだものになります。
DevOpsはそもそも変化の激しい時代に合わせ開発チームと運用チームを協調させ、システムの開発から提供までの工程を効率化して期間を短縮することで、デリバリーの速度を向上させるというものです。
しかし、DevOpsによってせっかく開発工程の効率化・開発期間の短縮を行ったとしても、従来のウォーターフォール型開発のように後段に進んでから初めてセキュリティ対策を行おうとした場合には、少なからず手戻りが発生することが容易に想像できます。そして、デリバリーの速度が遅延してしまうという本末転倒な結果になってしまいます。
つまり、あらかじめセキュリティを考慮したシステム開発や運用が今後の開発現場では必要になります。これがDevSecOpsの考え方が生まれた背景だと考えています。
DevSecOps導入の抑えどころ
それでは、実際にDevSecOpsによる開発サイクルを運用し成功させるにはどのようなポイントがあるのでしょうか。以下3つのポイントにまとめました。
〇ソースコードとアプリケーションのセキュリティの担保
近年のソフトウェア開発の現場では、オープンソースのコンポーネント利用が一般的になっています。そのためソースコードに対する脆弱性診断、SAST(静的アプリケーションセキュリティテスト)、SCA(ソフトウェアコンポジション分析)等のスキャニングを開発サイクルに組み込む必要があります。
またアプリケーションに対しても同様に動的アプリケーションセキュリティテストの実施は引き続き必要になります。有名なところだとクロスサイトスクリプティング(XSS)やSQLインジェクション等あらゆるサイバー攻撃に対してセキュリティ上問題がないのかの確認が必要です。サイバー攻撃は日々新しい手段が生まれるため、最新の情報のチェックも欠かせません。
〇開発・運用チームの生産性の維持
上述の方法で脆弱性を発見した後には迅速な対応が求められます。しかし、人力での解析は手間がかかり、脆弱性診断ツールは意外にも誤検知がつきものです。そのため開発チームと運用チームに負担がかかってしまいます。効率化を目指すDevOpsから派生しているにも関わらず、セキュリティのために開発サイクルが遅延してしまっては元も子もありません。自動化や人工知能、後述するツール等もうまく活用して、チーム全体の負担を軽減することが重要です。
〇Shift Leftの考え方
「Shift Left」という言葉も近年注目されています。これは、不具合や脆弱性問わずシステム開発と運用の一連の工程で発生する問題が、後の工程で発見されるほどその修正に多大なコストがかかってしまうため、できるだけ早い段階でそれらの問題を発見・解消しようというような考え方です。
この考え方についてはアプリケーションの脆弱性にも同じことが言えます。従来ではシステムのメジャーアップデートに合わせて脆弱性診断を実施する、または、社内規則に則って年に1度脆弱性診断を実施するといったケースが一般的です。もちろんこのやり方でもアプリケーションの機能追加やシステムの改修頻度が少ない場合は有効な手段ではあります。
ただし、これからの時代はソフトウェアがビジネスの中心になるとも言われていて、アプリケーションの機能追加やシステム改修は日常的に行われていくようになります。
その際にShift Leftのアプローチを取ることができなければ、アプリケーションやシステムの品質やセキュリティの担保のために多大なコストがかかってしまい、結果的にビジネス全体の遅れを生んでしまいます。
そのため、システムの設計工程からセキュリティ対応を組み込みより上流で脆弱性対応していくといった運用が将来的な開発現場では必要になります。
DevSecOpsの実現に向けて
ここまでは、DevSecOpsの実現に向けての要点を解説してまいりました。
ここからは実現に向けての方法について解説してまいります。
1、脆弱性のスキャニング
ソースコードのスキャニングによって脆弱性検出を検出することは、比較的早期に脆弱性を検出するための手段になり得ます。静的解析ツールとしては、独自コード内に存在する脆弱性を検出するSASTやオープンソースコンポーネントに存在する既知の脆弱性を検出するSCAなどがあります。
脆弱性スキャニングを開発フローに入れ込み、開発者それぞれにツールを習熟させることで脆弱性の早期発見を行うことが可能になります。
2、クラウドサービスプロバイダーのサービス利用
クラウドサービスプロパイダーからもログ解析を始めとしたセキュリティ機能が提供されています。セキュリティをDevOpsに組み込むにあたってこういった機能を使いこなしていくことは重要な戦略の一つです。
こういったツールはデプロイ後の対策になるので、Shift Leftの考えには即していないのですが、アプリケーションの外側の防御として重要な役割を果たすことができます。
しかし、クラウドサービスプロパイダーが提供するセキュリティ機能は、そのままでは有効に機能せず、初期設定や設定のアップデートを行っていく必要があります。
このため、クラウドサービスプロパイダーのサービスやセキュリティに明るいエンジニアを雇用もしくは育成する必要があります。
番外編、WAFの導入
1,2の方法ですと、開発エンジニアにツールの習熟が必要等導入にあたっての手間はどうしてもかかってしまいます。そこで厳密には違ったアプローチになってしまいますが、「WAF(Web Application Firewall)」も有効だと考えます。
WAFサービスはSQLインジェクションやクロスサイトスクリプティング等の脆弱性を狙ったサイバー攻撃にも対応しており、本記事の中ではクラウドサービスプロパイダーのサービスを利用するやり方に近いアプローチです。クラウドサービスプロパイダーのサービスで必要な初期設定や運用の手間を省けるというメリットがございます。
まとめ
今回は「 Dev Sec Opsの考え方とWAFについて」をご説明してまいりました。一例ではありますが移行を簡単にするためのツールの紹介をさせていただきました。
当サイトでは、サイバー攻撃を防ぐためのWAFに興味がある方へ、参考になるダウンロード資料をご用意しております。「サイバー攻撃可視化ツールPrimeWAF 基本ガイドブック」は、WAF選定時に抑えるべき機能やポイントがわかる資料になっています。ぜひ資料をダウンロードください。