SASTについてのお話

こんにちは。システム管理部 運用GのZです。

私は2021年7月に中途入社し、前職では独立系SIerにて7年間勤務しておりました。気がつけば入社から4年が経ち、時間の流れの速さを実感しています。

この1~2年、運用グループではSAST製品の検討を進めており、これまでに得た情報や知見を皆さまと共有したいと思っています。

どうぞよろしくお願いいたします。

SASTの概念

  • SASTとは何か?動的解析(DAST)との違い
    • SAST(静的アプリケーションセキュリティテスト)は、ソースコードやバイナリコードを解析して、セキュリティ上の脆弱性を検出する手法です。コードを実行せずに解析を行うため、「静的解析」と呼ばれます。
    • DAST(動的アプリケーションセキュリティテスト)は、実行中のアプリケーションを対象にセキュリティテストを行う手法です。実際の動作環境で脆弱性を検出するため、「動的解析」と呼ばれます。
  • 主な違い
    • SASTは開発初期段階で使用され、コードレベルの問題を検出。
    • DASTは運用段階やテスト環境で使用され、実行時の問題を検出。
  • SASTがなぜ重要なのか(セキュリティの早期発見のメリット)
    • 早期発見の重要性:
      • 開発初期段階で脆弱性を発見することで、修正コストを大幅に削減できます。
      • 後工程での修正は、初期段階の修正に比べて数倍のコストがかかることが一般的です。
    • セキュリティリスクの軽減:
      • SASTを導入することで、リリース前に重大な脆弱性を排除し、攻撃リスクを低減できます。
    • コンプライアンス対応:
      • SASTは、GDPRやPCI DSSなどのセキュリティ規制に対応するための重要な手段です。
  • SASTの仕組みと技術的な背景
    • 仕組み:
      • SASTツールは、コードを解析して既知の脆弱性パターン(ルール)を検出します。
      • 解析対象は、ソースコード、バイナリコード、または中間コード(例:Javaのバイトコード)です。
    • 技術的背景:
      • パターンマッチング: 既知の脆弱性パターンをコード内で検索。
      • データフロー解析: データの流れを追跡し、潜在的な脆弱性を特定。
      • 制御フロー解析: プログラムの実行フローを解析し、セキュリティ上の問題を検出。

ツール紹介

  • 人気のSASTツールの比較

     SASTツールにはさまざまな選択肢があり、それぞれ特徴や強みがあります。以下は、主要なSASTツールの比較です:

    • SonarQube:
      • 特徴: オープンソースで使いやすく、コード品質とセキュリティを統合的にチェック。
      • メリット: 多くのプログラミング言語をサポートし、カスタマイズ性が高い。
      • 適用範囲: 中小規模のプロジェクトや、コード品質も重視する開発チーム。
    • Checkmarx:
      • 特徴: 商用ツールで、エンタープライズ向けの機能が充実。
      • メリット: 高度なカスタマイズが可能で、詳細なレポート機能を提供
      • 適用範囲: 大規模プロジェクトや、セキュリティに特化した解析が必要な場合。
    • Fortify:
      • 特徴: 商用ツールで、広範な言語サポートと詳細なレポート機能。
      • メリット: エンタープライズ環境での導入実績が豊富。
      • 適用範囲: 大規模なエンタープライズ環境や、規制対応が必要なプロジェクト。
    • Veracode:
      • 特徴: クラウドベースで、簡単に導入可能。
      • メリット: 開発者向けのフィードバックが充実しており、使いやすいインターフェース。
      • 適用範囲: クラウド環境での開発や、迅速な導入が求められる場合。
    • Coverity:
      • 特徴: 商用ツールで、静的解析に特化した高精度な脆弱性検出を提供。
      • メリット: 高度なデータフロー解析と制御フロー解析を備え、誤検出が少ない。
      • 適用範囲: 大規模プロジェクトや、精度の高い解析が必要な場合。
      • 特記事項: Synopsysが提供するツールで、他のセキュリティ製品との統合が可能。
    • GitLab:
      • 特徴: GitLabのDevSecOps機能に組み込まれたSAST機能を提供。
      • メリット: CI/CDパイプラインに統合されており、開発プロセスに自然に組み込める。
      • 適用範囲: GitLabを利用している開発チームや、DevSecOpsを実践している環境。
      • 特記事項: GitLabのSASTは、オープンソースツール(例:Semgrep)を活用している。
  • 各ツールのインストール方法と基本的な使い方
    • SonarQube:
      • インストール: DockerやZIPファイルで簡単にセットアップ可能。
      • 使い方: プロジェクトをスキャンし、ダッシュボードで結果を確認。
    • Checkmarx:
      • インストール: サーバー環境にセットアップ。
      • 使い方: コードをアップロードしてスキャンを実行。
    • Fortify:
      • インストール: ローカルまたはクラウド環境でセットアップ。
      • 使い方: IDEプラグインを使用してリアルタイムで解析。
    • Veracode:
      • インストール: クラウドベースのため、インストール不要。
      • 使い方: Webインターフェースでコードをアップロードしてスキャン。
    • Coverity:
      • インストール: サーバー環境にセットアップ。
      • 使い方: コードをスキャンし、詳細なレポートを確認。IDEプラグインを利用してリアルタイム解析も可能。
    • GitLab:
      • インストール: GitLabのSAST機能は、GitLab CI/CDに組み込まれているため、追加のインストールは不要。
      • 使い方: .gitlab-ci.ymlファイルにSASTジョブを追加し、コードのコミット時に自動スキャンを実行。

実践的な内容

  • SASTをCI/CDパイプラインに統合する方法
    • 統合方法:
      • SASTツールをCI/CDツール(例:Jenkins、GitLab CI/CD)に組み込む
      • コードのコミット時に自動スキャンを実行。
    • メリット:
      • 開発プロセスにセキュリティを組み込むことで、早期発見が可能。
  • SASTツールのカスタマイズ(ルール設定や除外設定)
    • ルール設定:
      • プロジェクトに合わせてカスタムルールを作成。
      • 不要なルールを無効化して誤検出を減らす。
    • 除外設定:
      • 特定のファイルやディレクトリをスキャン対象から除外。
  • SASTで検出される一般的な脆弱性とその修正方法
    • SQLインジェクション:
      • 修正方法: パラメータ化されたクエリを使用。
    • クロスサイトスクリプティング(XSS):
      • 修正方法: ユーザー入力を適切にエスケープ。
    • ハードコードされた秘密情報:
      • 修正方法: 環境変数や秘密管理ツールを使用。

ケーススタディ

  • 実際のプロジェクトでSASTを導入した際の課題と解決方法

 SASTを導入する際には、さまざまな課題が発生することがあります。以下は、実際のプロジェクトでの課題とその解決方法の具体例です。

  • 課題1: 誤検出(False Positive)が多い
    • 状況:
      • SASTツールを導入した際、誤検出が多く、開発者が本当に修正すべき脆弱性を見極めるのに時間がかかる。
      • 誤検出が多いと、開発者の負担が増加し、ツールの信頼性が低下する。
    • 解決方法:
      • カスタムルールを作成して、プロジェクトに適した脆弱性検出ルールを設定。
      • 誤検出を減らすために、特定のコードパターンやファイルをスキャン対象から除外。
      • 開発者にツールの使い方をトレーニングし、誤検出のフィードバックを収集してルールを改善。
  • 課題2: スキャン時間が長い
    • 状況:
      • 大規模プロジェクトでは、SASTツールのスキャンに数時間かかることがあり、開発プロセスが遅延する。
    • 解決方法:
      • スキャン対象を分割し、並列処理を実施することでスキャン時間を短縮。
      • 増分スキャン(Incremental Scanning)を活用し、変更された部分のみを解析。
      • 高性能なサーバー環境を用意して、スキャン速度を向上。
  • 課題3: 開発者の抵抗感
    • 状況:
      • 開発者がセキュリティテストを「面倒な作業」と感じ、SASTツールの利用を避ける傾向がある。
    • 解決方法:
      • SASTツールをCI/CDパイプラインに統合し、開発者が手動でスキャンを実行する必要がないようにする。
      • ツールの結果を分かりやすく可視化し、修正すべき脆弱性を優先順位付けして提示。
      • 開発者にセキュリティの重要性を啓発し、セキュリティ文化を醸成。

SAST導入のROI(投資対効果)を考える

SAST導入のROI(Return on Investment)は、以下のような観点(理想形)で計算できますが、GALAXYみたいな長年開発しているシステムに対して初期導入時に脆弱性の切り分け工数が膨大と想定しています。

  • 導入コスト
    ツールのライセンス費用、インフラ費用、導入にかかる人件費などを計算。
  • 修正コスト削減
    開発初期段階で脆弱性を修正することで、後工程での修正コストを削減。
    例: 後工程での修正コストが10倍かかる場合、早期発見によるコスト削減効果は非常に大きい。
  • セキュリティインシデントの防止
    セキュリティインシデントが発生した場合の損失(例: 顧客データ漏洩による賠償金、ブランドイメージの低下)を防止。
    例: 重大なインシデントを1件防止することで、数百万~数千万円の損失を回避。
  • 開発効率の向上
    自動化されたセキュリティテストにより、開発者の負担を軽減し、開発効率を向上。
    例: 手動テストを削減することで、開発時間を短縮。

トラブルシューティング

  • SASTツールの誤検出(False Positive)への対処法
    • 誤検出の問題: 誤検出(False Positive)は、実際には問題がないコードを脆弱性として報告してしまうことを指します。これにより、開発者が本当に修正すべき脆弱性を見極めるのに時間がかかり、ツールの信頼性が低下。
    • 対処法:
      • カスタムルールを作成して、プロジェクト特有のコードやフレームワークに対応。
      • スキャン対象から特定のファイルやディレクトリを除外して、不要な検出を減らす。
      • 開発者から誤検出のフィードバックを収集し、ツールの設定やルールを改善。
  • SASTツールが動作しない場合の解決方法
    • 動作不良の問題: SASTツールが正しく動作しない場合、スキャンが実行されない、結果が出力されない、またはエラーが発生することがあります。これは環境設定の不備やツールの互換性の問題が原因であることが多い。
    • 解決方法:
      • ツールのログを確認して、エラーの原因を特定。
      • プログラミング言語やフレームワークのバージョンがツールと互換性があるか確認。
      • 設定ファイルを再確認し、スキャン対象やルールが正しく記述されているか確認。
  • 大規模プロジェクトでのSASTのスケーラビリティ問題
    • スケーラビリティの問題: 大規模プロジェクトでは、コードベースが膨大であるため、スキャン時間が長くなり、ツールのパフォーマンスが低下することがあります。
    • 解決方法:
      • コードベースをモジュールやサブプロジェクト単位に分割し、個別にスキャンを実施。
      • 並列処理を活用してスキャンを効率化。
      • 高性能なサーバー環境やクラウドベースのインフラを利用して、リソース不足を解消。

最新トレンド

SASTの最新技術やツールのアップデート情報

  • AIを活用した脆弱性検出の精度向上
    • 背景:
      従来のSASTツールは、ルールベースの解析に依存しており、未知の脆弱性や複雑なコードパターンを検出するのが難しい場合がありました。
    • 最新技術:
      AI(人工知能)や機械学習を活用することで、脆弱性検出の精度が向上しています。
      AIは、過去の脆弱性データやコードパターンを学習し、未知の脆弱性や複雑なコード構造にも対応可能。
    • 具体例:
      AIを活用したSASTツールは、コードのコンテキストを理解し、誤検出(False Positive)や見逃し(False Negative)を減らすことができます。
      例: 特定のフレームワークやライブラリに依存したコードの脆弱性を、AIが自動的に学習して検出。
  • クラウドベースのSASTツールの普及
    • 背景:
      従来のオンプレミス型SASTツールは、導入や運用に手間がかかることが課題でした。
    • 最新技術:
      クラウドベースのSASTツールが普及し、導入の手軽さやスケーラビリティの向上が注目されています。
      クラウド環境では、ツールのアップデートやメンテナンスが自動化されており、常に最新の状態で利用可能。
    • 具体例:
      VeracodeやGitLabのSAST機能など、クラウドベースで提供されるツールが増加。
      クラウド環境を利用することで、大規模プロジェクトでもスキャン時間を短縮し、リソースを効率的に活用可能。
  • AIや機械学習を活用したSASTの進化
    • 進化の例1: 機械学習を活用して誤検出を減らす
      • 従来の課題:
        ルールベースのSASTツールでは、誤検出が多く、開発者の負担が増加することがありました。
      • 進化の内容:
        機械学習を活用することで、コードのコンテキストを理解し、誤検出を減らすことが可能に。
        ツールが過去のスキャン結果や開発者のフィードバックを学習し、検出精度を向上。
      • 具体例:
        開発者が「これは誤検出」とマークしたデータを学習し、次回以降のスキャンで同様の誤検出を防止。
    • 進化の例2: 新しい脆弱性パターンを自動的に学習
      • 従来の課題:
        新しい脆弱性が発見されるたびに、ツールのルールセットを手動で更新する必要がありました。
      • 進化の内容:
        機械学習を活用することで、脆弱性データベースやセキュリティレポートを自動的に学習し、新しい脆弱性パターンに対応。これにより、未知の脆弱性やゼロデイ脆弱性の検出能力が向上。
      • 具体例:
        AIがセキュリティコミュニティから収集した脆弱性情報を解析し、ツールに自動的に反映。
  • SASTと他のセキュリティテスト(IAST、DAST、RASP)の統合
    • 統合の背景
      • SAST(静的解析):コードを実行せずに脆弱性を検出する手法。開発初期段階での脆弱性検出に有効。
      • DAST(動的解析):実行中のアプリケーションを対象に脆弱性を検出する手法。実行環境での問題を検出。
      • IAST(インタラクティブ解析):SASTとDASTの特性を組み合わせた手法。実行中のアプリケーションの内部状態を解析。
      • RASP(ランタイムアプリケーション自己保護):実行中のアプリケーションに自己防御機能を組み込み、リアルタイムで脆弱性を検出・防御。
    • 統合のメリット
      • 包括的なセキュリティテストの実現:
        静的解析(SAST)と動的解析(DAST)を組み合わせることで、コードレベルと実行環境の両方で脆弱性を検出可能。
        IASTやRASPを統合することで、実行中のアプリケーションの内部状態やリアルタイムの脆弱性検出が可能に。
      • 脆弱性検出の精度向上:
        各手法の強みを活用することで、誤検出や見逃しを減らし、セキュリティテストの精度を向上。
      • 開発プロセスへのシームレスな統合:
        CI/CDパイプラインに統合することで、開発プロセス全体でセキュリティテストを自動化。
        開発者が早期に脆弱性を修正できる環境を提供。
    • 具体例
      • 統合プラットフォーム:GitLabやJenkinsなどのCI/CDツールにSAST、DAST、IASTを統合し、開発プロセス全体でセキュリティテストを実施。
      • リアルタイム検出:RASPを導入することで、実行中のアプリケーションが攻撃を受けた際にリアルタイムで防御を実行。



本日は、SASTについて説明しました。検討中の方はぜひ参考にしてください。
システム管理部 運用グループでは、このように様々な製品の選定のための比較・検討、また適切な運用方法の確立に日々取り組んでいます。一読いただきありがとうございました。