この連載では、Webアプリケーションの開発ライフサイクルにセキュリティ対策ツールを組み込むことで、Webアプリケーションの開発スピードを落とさずに、セキュリティ対策を行う方法について3回に渡って説明します。1回目は「DevSecOps」の概念について説明し、2回目は開発の各工程へセキュリティ対策ツールを組み込む方法や注意点を、3回目はオープンソース(OSS)のツールを使用し、具体的な設定方法を説明する予定です。
はじめに
Webアプリケーションにセキュリティ対策の必要性が認識されるようになって久しいですが、毎年ニュースで報道されるようなセキュリティ事件が数多く発生しています。昨年も、米国信用情報機関で、1億4550万人の個人情報が流出するという大規模な事件が発生しました。この事件はWebアプリケーションの開発に使用するフレームワークの脆弱性が放置されたことが原因でした。
このような事件を完全に防ぐことは難しいですが、Webアプリケーションの開発中からセキュリティ対策を意識することで、できる限り安全なWebアプリケーションを開発し、リスクを減らすことができます。
そこで、初回である今回は開発ライフサイクルにセキュリティを組み込んだ概念である「DevSecOps」について説明しつつ、Webアプリケーションの開発でよく使われるセキュリティ対策ツールについて紹介します。
DevSecOpsとは
最初にDevSecOpsについて説明します。これは、DevOpsにセキュリティの要素も取り込もうという考え方です。これだけではよく分からないので、そもそもDevOpsとは何なのかというところから考えてみましょう。これはそのまま、Development(開発) とOperations(運用)を組み合わせた言葉です。開発チームと運用チームが一体となって、これまでよりも迅速かつ、頻繁にアプリケーションをリリースしていこうという概念になります。
これを実現しようとすると、チームが分かれていることで発生するコミュニケーションコストやタイムラグが問題となってしまいます。また、頻繁にリリースするという目的は、開発チームと運用チームが一体となるだけでは実現できません。そのためDevOpsでは、アプリケーションのビルドやテスト、そしてリリースといった開発工程をできる限り自動化し、繰り返し実施できる環境を整えることが求められます。
しかし、アプリケーションを頻繁にリリースできる体制・環境を作ったとしても、セキュリティ対策が不十分なままではリリースすることができません。そこで、開発チームと運用チームだけではなく、セキュリティも一体となることで、十分なセキュリティを担保しつつ、DevOpsの目的としていた頻繁なリリースを達成しようというのが、DevSecOpsの考え方になります。
いくら頻繁にリリースできるような体制でアプリケーションを開発していたとしても、開発が終わってから脆弱性診断を実施していると、脆弱性の修正に、追加で時間が掛かってしまい、頻繁なリリースという目標を達成することが困難になります。そこで、頻繁なリリースという目標を達成するためには、開発が終わってから、初めて脆弱性診断を実施するのではなく、もっと早い段階からセキュリティ対策を行うことが必要になります。つまり、設計段階からセキュリティを意識し、アプリケーションの開発中も脆弱性を作りこまないよう、アプリケーションを修正するたびにチェックします。そうすることで脆弱性を作ってしまっても、開発者がすぐに問題に気づくことができ、修正が容易になります。これはセキュリティ対策ツールを開発ライフサイクルに組み込み、脆弱性診断を自動化することで実現します。
また、開発しているアプリケーションだけではなく、アプリケーションで採用しているライブラリに新しい脆弱性が見つかることがあります。アプリケーションが採用しているライブラリの脆弱性情報を日々チェックすることも大事なセキュリティ対策です。特に、アプリケーションを一度リリースした後でライブラリに脆弱性が見つかってしまうと、脆弱性が悪用される可能性があります。そこで脆弱性情報を日々チェックし、すみやかにライブラリを更新する必要があります。このようなチェックを人力で行ってしまうと、開発スピードの低下だけでなく、開発コストの増加にもつながります。そこで、これらのセキュリティタスクもできる限り自動化する取り組みが必要になります。
種類 | 概要 |
---|---|
独自開発部分 | 脆弱性を埋め込まない対策が必要。脆弱性検査を自動で実行する。 |
ライブラリやミドルウェア | 日々脆弱性情報を収集してミドルウェアを最新版に保つ。 |