SAST と DAST

SAST(Static Application Security Testing)と DAST(Dynamic Application Security Testing)は、 アプリケーションセキュリティの分野における 2 つの基本的かつ補完的な手法であり、 それぞれ脆弱性の特定に対して異なるが同等に重要なアプローチを持っています。 SAST は、アプリケーションを実行せずにソースコード、バイトコード、またはバイナリを静的に分析し、 SQL インジェクション、XSS、バッファオーバーフロー、ビジネスロジックの欠陥といった 潜在的な脆弱性を示すパターンを探してコードを検査します。この「ホワイトボックス」アプローチにより、 開発サイクルの早い段階で問題を特定でき(shift-left security)、 脆弱なコードの正確な位置について開発者に的確なフィードバックを提供します。一方、 DAST は実行中のアプリケーションに対して実際の攻撃をシミュレートし、外部の攻撃者が行うように ソースコードへのアクセスなしで「ブラックボックス」方式でテストします。この手法は、 構成の不備、認証および認可の問題、さらには異なるコンポーネント間の相互作用から生じる脆弱性など、 ランタイムでのみ顕在化する脆弱性を明らかにします。統合された DevSecOps 戦略の中で 両者を併用すると、SAST と DAST は互いの盲点をカバーし合い、 開発中に持ち込まれた脆弱性と、実環境でのアプリケーション実行中に 生じる脆弱性の両方を検出する多層防御を構築します。

SAST:静的分析

SAST はアプリケーションを実行せずにソースコード、バイトコード、またはバイナリを検査し、 開発中に脆弱性を特定します。

SAST の利点

  • Early detection:デプロイ前に bug を発見
  • Code coverage:実行されない path を含め、コードの 100% を分析
  • Root cause:脆弱なコードの正確な行を表示
  • No runtime needed:アプリケーションの稼働を必要としない
  • CI/CD integration:build パイプラインでの自動化

SAST の制限

  • false positives が多い - tuning が必要
  • 構成の脆弱性は検出しない
  • ランタイムでビジネスロジックをテストしない
  • Language-specific - 各言語に専用の scanner が必要

SAST ツール

  • SonarQube:オープンソース、25 以上の言語をサポート
  • Checkmarx:エンタープライズグレード、市場をリードする SAST
  • Fortify:Micro Focus、詳細な分析
  • Semgrep:オープンソース、カスタマイズ可能なルール
  • Bandit (Python):Python 専用
  • Brakeman (Ruby):Rails security scanner

DAST:動的分析

DAST は実行中のアプリケーションをテストし、black-box testing によって実際の攻撃をシミュレートします。 ソースコードへのアクセスは不要です。

DAST の利点

  • Runtime testing:実際の攻撃者のようにアプリケーションをテスト
  • Configuration issues:構成の不備を検出
  • Low false positives:悪用可能であることが確認された脆弱性
  • Language-agnostic:あらゆるスタックで機能
  • Production-like:本番に近い環境でテスト

DAST の制限

  • Late detection - コードが完成した後に脆弱性が見つかる
  • Code coverage が限定的 - アクセス可能なフローのみをテスト
  • コードの詳細がない - 脆弱な行を表示しない
  • デプロイされ稼働中のアプリケーションが必要

DAST ツール

  • OWASP ZAP:オープンソース、proxy interceptor
  • Burp Suite:業界標準、professional scanner
  • Acunetix:Automated web vulnerability scanner
  • Netsparker:Proof-based scanning
  • AppScan:IBM のエンタープライズソリューション

SAST + DAST:組み合わせ戦略

SAST と DAST を併用することで各アプローチの盲点をカバーし、 堅牢な AppSec プログラムを構築します。

      # CI/CD pipeline with SAST + DAST
      stages:
      - build
      - sast
      - test
      - dast
      - deploy
      sast_scan:
      stage: sast
      script:
      - semgrep --config=auto --json -o sast-results.json
      - sonar-scanner
      artifacts:
      reports:
      sast: sast-results.json
      dast_scan:
      stage: dast
      script:
      - docker run -t owasp/zap2docker-stable zap-baseline.py
      -t https://staging.app.com -r dast-report.html
      artifacts:
      reports:
      dast: dast-report.html
      

IAST:Interactive Application Security Testing

IAST は SAST と DAST を組み合わせ、アプリケーションをインストルメント化してランタイムで監視し、 SAST の code coverage と DAST の runtime accuracy を両立させます。

  • Contrast Security:IAST のリーダー、組み込み agents
  • Seeker (Synopsys):code insight を備えた Runtime analysis
  • Hdiv Security:Runtime application self-protection

DevSecOps への統合

  • pre-commit hooks や pull requests での SAST
  • 本番前の staging environments での DAST
  • Quality gates:重大な脆弱性を含む build をブロック
  • Developer feedback loops:IDE と統合(SonarLint)
  • Vulnerability management:検出結果を単一のプラットフォームに集約

推奨事項

SDLC の早い段階で SAST を(shift-left)、staging 環境で DAST を実装してください。 false positives を減らすためにツールをチューニングし、まずは重大な 脆弱性に注力します。重要なアプリケーションには IAST を検討してください。CI/CD pipeline で すべてを自動化し、developers 向けに迅速な feedback loops を構築しましょう。