Microsoft SDLをもとに開発ライフサイクルを整理する
ソフトウェアの脆弱性は、サイバー攻撃でシステム侵害を試みる際に狙われる格好の標的の1つだ。シノプシスが毎年発行する「オープンソースセキュリティ&リスク分析レポート」(2020年版)によると、17業種の1,546の商⽤コードベースを監査したところ、84%のコードベースに1つ以上の脆弱性が含まれており、中には2年以上前に公表された脆弱性が対応されないまま残っているものもあるという。
リリース前にはバグや脆弱性の有無をセキュリティテストで検証するなど、多くの開発現場はセキュアなソフトウェア開発に取り組んでいるが、かなりの取りこぼしが発生しているのは明らかだ。
日本シノプシスの松岡正人氏は、ソフトウェアのセキュリティ強度を高めるには、テストツールを導入するだけではダメだと指摘する。「開発に関わる人やプロセス、技術をうまく組み合わせて最適化し、開発ライフサイクルの全フェーズでセキュリティリスクに対処する、そんな機構を構築したい」(松岡氏)
松岡氏は参考として、多くの開発現場でリファレンスとして取り入れられているマイクロソフトの「Microsoft SDL(Software Development Lifecycle)」を紹介する。ソフトウェアの信頼性と安全性を高めるために同社が策定したガイドラインで、要件・設計・実装・検証・リリース・運用の開発ライフサイクルの各フェーズで求められるセキュリティテストが記載されている。
異なる制約下のサービスやプラットフォーム、サブシステムが連携し、OSSやサードパーティのライブラリなどを組み合わせたアプリケーションが動作する現代の複雑なシステムも、こうしたガイドラインに基づき、要件フェーズでセキュリティ要件の定義やリスク評価を実施。設計フェーズで攻撃面の分析や想定される脅威を洗い出し(脅威モデリング)、実装や検証フェーズで必要なセキュリティテストを組み込むことで、よりセキュアなシステムを開発運用できるようになる。
セキュリティテストの主なものとしては、静的解析(SAST)、動的解析(DAST/IAST)、ソフトウェアコンポジション解析(SCA)が挙げられる。
SASTはソースコードの静的解析テストで、SQLインジェクションやXSSなどの一般的な脆弱性を発見するのに最適だ。テストツールには、プロジェクトや組織で使用する言語、コーディング規約を確実にサポートし、業界標準を網羅、IDEとの連携や大規模開発環境に対応するものを選びたい。
DASTは、アプリケーションやコンポーネントが動作する開発環境および運用環境を動的解析し、構成や設定、認証処理、ビジネスロジックなどの欠陥をあぶり出すテストだ。IASTもDAST同様に動的解析の1つで、アプリケーションサーバーなどにインストールしたエージェントを介してコードおよびメモリを解析し、問題を洗い出す。いずれもテストツールであれば、解析結果から偽陽性を排除できる正確性や、新たに発見された脆弱性に関する詳細の分析報告をする機能など、自動化を視野に入れた機能だ。
そして最後のSCAは、コードに含まれるOSSやサードパーティのソフトウェアコンポーネントを解析し、脆弱性の有無をチェックするテストだ。特にこうしたコンポーネントは、開発者が使えると判断して利用しているもの、過去のコードから含まれていたもの、外部委託事業者の判断で含まれているものなど多様で、すべて把握できていない企業は多い。新たな脆弱性が公開されても、自社のコードに該当するものが存在することすら気付けないのが現状だ。
このような問題に対処するため、いま注目されているのが、ライブラリや各種機能などソフトウェアの構成要素を洗い出して管理するSBOM(ソフトウェア部品表)の考え方だ。ポイントは、開発側と運用側でSBOMを共有することだと松岡氏は言う。これにより、開発側はリリース時に既知の脆弱性がソフトウェアに含まれていないかを検証でき、運用側は新たに発見された脆弱なライブラリなどがないかを監視することができる。2021年に米国で発令された14028大統領令では、政府機関が利用するソフトウェアの開発に関する安全性の確保について、ガイドライン策定をNISTに指示しているが、SBOMの活用についても強調されている。
このほか、NISTからはSP800-53 Rev5「組織と情報システムのためのセキュリティおよびプライバシー管理策」のSA-11(付属書C)にもSASTや脅威モデリング、コードレビュー、セキュリティリスク評価、DAST/ファジング、IAST/APIセキュリティテストの一覧が掲載されている。NISTの各種ガイドラインは、IPA(独立行政法人 情報処理推進機構)が日本語版を公開している。