DevOpsにセキュリティの観点を取り入れる


DevOpsからDevSecOpsへ

DevSecOps という言葉をご存知でしょうか。

DevOps の活動で効率よく進められるようになったソフトウェアの開発から運用までの一連の流れに、セキュリティの観点を取り入れてセキュリティ品質も同時に担保することを DevSecOps といいます。

ソフトウェアのセキュリティテストは、通常、リリースの直前に行われることが多く、問題が見つかった場合は大きな手戻りが発生します。その結果、ソフトウェアのリリースのタイミングが遅れ、折角 DevOps で得た効率の良さが台無しになってしまうことがあります。

そこで、セキュリティの観点を開発の初期工程から取り入れ、セキュリティを意識したソフトウェア開発を進めることで、リリースの直前に実施するセキュリティテストで発生する手戻りを最小限に抑え、効率の良さとセキュリティ品質の担保、両方をかなえるために DevSecOpsを取り入れます。

この DevSecOps を実現するには、これまでの活動に加えて次のような仕組みをチームに適用することが重要です。

  • チーム全体が共通の認識でセキュリティ確保に取り組む
  • 開発者がセキュアなソースコードを実装する
  • セキュリティテストを CI 環境で自動化する

Jenkins を利用した CI 環境とParasoft DTP 、 Parasoft dotTEST を活用して、この仕組みを実現する方法をご紹介します。

DevSecOpsの実現

チーム全体が共通の認識でセキュリティ確保に取り組む

効率よくセキュリティを確保するには、セキュリティ担当者だけでなく、開発から運用に関わる全てのチームメンバーがセキュリティを意識してソフトウェアの品質を担保する必要があります。

そこで、OWASP Top 10、PCI DSS などのセキュアコーディング標準や、インジェクションなどの一般的なセキュリティ脆弱性に関するポリシーをチームに適用することで、チーム全体が共通の認識でセキュアなソフトウェア開発を進められるようになります。

例えば、設計者、開発者はどういった観点でソフトウェアのセキュリティを担保するべきかを理解したうえでセキュアなソフトウェア設計、セキュアコーディングに取り組むことができ、開発中のソフトウェアに対してもチームで共通の認識をもってソフトウェアのセキュリティを評価できるようになります。

また、セキュリティを評価するには、チームのセキュリティポリシーに合わせたセキュリティチェックが必要です。

Parasoft dotTEST には約 300 個のセキュリティルールと、各種セキュアコーディング標準に合わせたルールセットが搭載されています。チームに適用するセキュリティポリシーに合わせ、ルールやルールセットを選択することで、開発中のソースコードに対してチームで共通のセキュリティチェックが行えるようになります。さらに、Parasoft DTP を組み合わせれば、最新のセキュリティチェックの状況を専用のダッシュボードを通じて確認できるため、セキュリティの評価も簡単に行うことができます。

開発者がセキュアなソースコードを実装する

開発者はチームに適用したセキュリティポリシーに沿ってセキュアコーディングを行う必要があります。また、実装したソースコードに対してセキュアコーディングができているかをチェックする必要もあります。

dotTEST Visual Studio プラグインを利用すると、開発者がローカルで開発中のソースコードに対して、チーム共通のルールセットを使いセキュリティチェックを行うことができます。開発者がソースコードをソース管理システムにコミットする前にセキュリティチェックを行えば、もし、セキュリティの問題がみつかったとしても、その場ですぐに修正できるため、効率的に、また、修正による手戻りを発生させずにセキュリティの問題を取り除くことができます。

ローカル環境でセキュリティチェックを実施して問題の早期発見と修正を行うことで、チームで定めたセキュリティポリシーを満たすソースコードだけをソース管理システムへコミットすることが可能になります。

セキュリティチェックを CI 環境で自動化する

各開発者がローカル環境で実施したセキュリティチェックでは、担当者が作成、更新したファイルだけをチェックします。セキュリティの脆弱性は、1 つの関数や、1 ファイル内の実行パスだけで発生するのではなく、ファイル、プロジェクトを跨ったソフトウェアのあらゆる実行フローで発生します。そのため、担当者がローカルで行うセキュリティチェックだけではなく、変更が入らない既存コードや他の担当者が開発したソースコードと合わせたソフトウェア全体に対するセキュリティチェックも必要です。

そこで、開発者がソース管理システムにコミットしたソースコードをビルドするタイミングで、ソフトウェア全体の静的なセキュリティチェックにより、あらゆる実行フロー上にセキュリティの脆弱性が存在しないかを検証して、ソフトウェア全体のセキュアコーディングを担保します。

Jenkins 上の CI 環境に組み込んだ Parasoft dotTEST のセキュリティチェックにより、複数のファイル、プロジェクトに跨ったソフトウェア全体のセキュリティの問題が検知された場合、ビルドは失敗したとみなして、安全でないコードが次の工程に進まないように制御します。

CI 環境で実行したセキュリティチェックの結果は、ダッシュボードツールである Parasoft DTP へ自動で送られます。

Parasoft DTP では専用のダッシュボードとコンプライアンスレポートを利用して、開発中のソフトウェアが定められたセキュリティポリシーから逸脱していないかを、常に最新のソースコードで確認することができます。

OWASP ダッシュボード:

OWASP コンプライアンスレポート:

Parasoft DTP に集約された結果は、WEB ブラウザを経由して、開発者はもちろんチームのマネージャーや運用者も確認することができます。

開発者は ソフトウェア全体のチェックで検出したセキュリティの問題をローカル環境で修正後、ソース管理システムにコミット、CI 環境でビルド、セキュリティチェックが実施されます。

まとめ

DevSecOps の実現には、リリース直前に行うセキュリティテストでの手戻りを削減することが重要です。それには、チームへ共通のセキュリティポリシーを適用し、開発者がセキュアコーディングを行う、ソフトウェア全体のソースコードチェックを導入するなど、開発初期の製造工程からセキュアなソフトウェアの開発を進めることが効果的です。

Parasoft dotTEST を開発環境、 CI 環境の両方に組み込み、Parasoft DTP でプロジェクト全体のセキュリティポリシーの準拠状況を把握できるようにすることで、「開発初期の工程からセキュリティを向上させるための活動」、「リリース前のセキュリティテストで発生する手戻りの削減に向けた対策」を行う等、効率の良さとセキュリティ品質を担保した DevSecOps を実現できます。


Parasoft dotTEST について

Parasoft dotTEST は、 C#、VB.NET、ASP.NET を含む、Microsoft .NET Framework および .NET Compact Framework をターゲットとするプログラミング言語対応の統合開発テスト ソリューションです。dotTEST は、静的コード解析、単体テスト、コード レビュー、カバレッジ解析、実行時エラー検出など、幅広いソフトウェア品質プラクティスを自動化します。

dotTESTの詳細はこちら