昨今のシステム開発において注目されている「DevSecOps」。製品やツール選定が論点になりがちだが、実際には技術面ではなく、それ以外の要因で組織への浸透が阻害されてしまうケースが多い。

アクセンチュア テクノロジーコンサルティング本部 セキュリティグループ マネージャー 田原聖也氏が、7月13日、14日に開催されたオンラインセミナー「TECH+フォーラム クラウドインフラ Days 2023 Jul.ビジネスを支えるクラウドの本質」に登壇。この課題に対する実践的な解決策やアイデアについて解説した。

DevSecOpsとは

ガートナーの定義において、DevSecOpsは、「新興のアジャイルITやDevOpsの開発にセキュリティをできるだけシームレスかつ透過的に統合すること」とされている。

理想的には、開発者のアジリティやスピードを低下させたり、開発ツール環境を変更したりすることなく実現することが望ましい。ただセキュリティテストを行うのではなく、できるだけ開発・運用の効率性を阻害しないことがポイントだ。具体的には、開発者や運用者が使うCI/CDパイプラインやIDEに統合されたかたちで実装する方針を採ることが推奨される。

  • DevSecOps施策の代表例

「例えば、コーディングのフェーズでは、IDE(Integrated Development Environment、統合開発環境)のプラグインを入れてセキュアコーディングができているかチェックする。ビルドのフェーズであれば、静的コード解析などのツールを導入してソースコードが問題ないかチェックする方法が採られることがあります」(田原氏)

DevSecOps導入後の問題点は、技術ではなく人材・プロセスにある

田原氏によると、DevSecOps導入後は、技術面ではなく、人材やプロセスが要因となって組織への浸透が阻害されることが多いという。

事例としては、各種セキュリティテストツールをCI/CDパイプラインに組み込んで脆弱性を可視化したが、アプリやインフラの開発・運用作業に忙しく、脆弱性の是正を行うところまで手が回らなくなり、結果的に誰も対応しなくなったケースがあるそうだ。

また、脆弱性を是正するプロセスまでを整備して対応を始めたものの、セキュリティの知見があるメンバーによる対応に偏り、組織全体の作業効率が落ちてしまったケースも挙げられた。

さらに、プロセスの整備や役割分担の明確化まで行っていても、大量に検出される脆弱性に対してどこまで対応すべきか分からず現場が混乱してしまったという事例もある。

これらに対し田原氏は「『これだけやっておけばこの問題は起きない』という十分な対策があるわけではない。セキュリティ知識を持つ人材、リスクと対応工数を鑑みた対応判断のプロセスの整備が必要」だと解説した。そのうえで組織としてDevSecOpsを浸透させるには、人材およびプロセスという土台を整えることの重要性を指摘する。

  • 人材・プロセスともに安定したDevSecOpsの在るべき姿

組織におけるDevSecOps導入のポイント:人材教育と体制づくり

人材の整備にあたっては、関係者1人1人のセキュリティ知識を向上するための教育、そして、自組織のセキュリティ専門家を活かすための体制づくりがポイントとなる。 セキュリティは分野が幅広いため、どこから知識を身につけていくべきかの判断が難しい。田原氏によると、開発や運用を担当するメンバーに対しては、的を絞った学習が効率的だという。具体的には、下記の3つに分けられる。

1.自身の担当領域から着手するパターン
自身の担当領域から着手する場合、プログラマーであれば、各言語・フレームワークのセキュアコーディングガイド、クラウドエンジニアであれば、各パブリッククラウドベンダーのセキュリティホワイトペーパーやリファレンスアーキテクチャを活用して、担当領域をセキュリティ観点から深掘りしていく方法が有効となる。

2.体系的に学ぶパターン
一方、全体像から逆算して学習を進める人も少なくないはず。その場合、セキュリティ資格対策コンテンツを使って、体系的な学習も可能だ。田原氏は「例えば、情報処理安全確保支援士は広範囲のセキュリティ知識が求められるため、資格対策本に目を通すことで体系的にセキュリティの全体像を整理できる」と説明した。

3.セキュリティトレンドを俯瞰して勉強していくパターン
俯瞰的な目で見てセキュリティトレンドを押さえることも、効率的な学習法の1つだ。IPAが出す『情報セキュリティ10大脅威』や『OWASP Top10』などの解説に目を通し、自らの組織や担当システムの脅威として置き換えて現状の対策を見直す方針となる。

田原氏は、日本においてはセキュリティ人材が大きく不足している事実も意識すべきだと言う。「不足するセキュリティ人材を活かすには、実施頻度が高いタスクはセキュリティチームではなく各担当領域のチームが受け持つよう、分担に配慮することが重要」と体制面での考慮も必要であるとした。

  • DevSecOps関連のタスクと担当チームの例

組織におけるDevSecOps導入のポイント:属人化させないプロセス

DevSecOpsのプロセスにおいては、自動化がフィーチャーされがちだが、ゲート化、文書化、チケット化についても取り組んでいく必要がある。

自動化

自動化はすでに導入している組織も多いが、田原氏は定期的に見直すことを勧めた。自動化は、製品・ツールの進化が速く、オープンソースソフトウエアにおいてもホットな分野であり、「これまでは取り込めなかったような分野でも、2~3年ほどで自動化ツールが豊富にある状況に変わることもあり得る」(田原氏)ためだ。

自動化に関してもう1つ考えなければならないのは、DevOps同様、ボトルネックとなるプロセスを排除あるいは負担軽減することである。申請ベースでのビルド・デプロイのプロセスが存在していたり、即時性の低い承認フローがあったりすると、自動化の恩恵が受けられなくなる恐れがある。

この対策として、田原氏は、各種パブリッククラウドベンダーが提供するガードレール機能、ChatOps、CI/CDパイプラインの承認機能などを活用する方法を挙げた。また、承認フローの担当割当を見直すことも重要だとした。

ゲート化

プロセスの移行時にテストを実施し、チェックポイントを設けるゲート化については、KPIを設定・測定し、その結果を基に次のフェーズに進むべきかクライテリアを設定し判断することが必要となる。ゲートの例としては「Pre-commit hook」や、開発者のローカル環境においてIDEプラグインで検出されるセキュアではない実装箇所の数をカウントするなどの方法が考えられる。

  • ゲートの例

文書化

文書化に関しては、例えば、ソースコードの静的解析の結果に対し、結果の解釈方法、誤検知やコード修正の必要有無といった判断に対する脆弱性情報の記事・ソースや判断根拠、コード修正に対する理由や参考にした情報などを文書化していくことが具体策として考えられる。

  • ソースコードの静的解析結果に対するアクション例

チケット化

また、他の開発運用タスクと同様、対応が必要な脆弱性や検出結果に対してはチケットを作成し、対応管理を徹底することも重要だ。田原氏は、対応期日とクローズ条件を明確にしたうえで、対応が属人化しないようチケット管理基盤のチーム内の自動担当者割当機能を利用することを推奨する。

  • チケット化のポイント

これにより、「負荷が分散されるだけでなく、実践を通してセキュリティの知見をメンバーが身に付けていけるようになる」(田原氏)と、DevSecOpsを整えるために必要な人材育成について、そのノウハウを語った。