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 を構築しましょう。
