SAST(静的アプリケーションセキュリティテスト) さすと
静的解析セキュリティテストソースコード解析脆弱性検出DevSecOpsシフトレフト
SASTについて教えて
簡単に言うとこんな感じ!
SASTはプログラムを「動かさずに」ソースコードを読み込んでセキュリティの弱点を見つける検査ツールだよ。校正ソフトが文章を読んで誤字を指摘してくれるのと同じイメージで、コードを実行する前に「ここ危ないよ!」って教えてくれるんだ!
SASTとは
SAST(Static Application Security Testing:静的アプリケーションセキュリティテスト) とは、アプリケーションを実際に動かすことなく、ソースコード・バイトコード・バイナリを直接解析してセキュリティ上の脆弱性を検出する手法です。「静的(Static)」とついているのは、プログラムを実行しない=静止した状態で検査するからです。
開発者がコードを書いた直後、あるいはビルド(コンパイル)のタイミングで自動的に実行できるため、問題を早期に発見してコストを抑える「シフトレフト」 の考え方と相性が抜群です。リリース後に脆弱性が見つかった場合と比べ、修正コストが数十倍〜数百倍変わるとも言われています。
SQLインジェクション・バッファオーバーフロー・ハードコードされたパスワードなど、コードの書き方に起因する脆弱性を得意とします。一方、実行時にしか現れない問題は検出できないため、後述するDASTなど他の手法と組み合わせることが一般的です。
SASTの仕組みと検出できる脆弱性
SASTツールはソースコードを解析するために、主に以下の技術を使います。
| 解析技術 | 概要 | 例 |
|---|---|---|
| 構文解析(AST解析) | コードを構文木に変換して構造を把握 | if文の書き漏れ、未初期化変数 |
| データフロー解析 | 変数の値がどこから来てどこへ流れるかを追跡 | 外部入力がサニタイズなしにDBへ渡る(SQLi) |
| 制御フロー解析 | 処理の実行順序・分岐を網羅的に検査 | 到達不能コード、パス漏れ |
| パターンマッチング | 危険な関数・コードパターンをルールと照合 | strcpy使用、ハードコードパスワード |
検出できる主な脆弱性カテゴリ
【SASTが得意な脆弱性】
┌─────────────────────────────────────────┐
│ インジェクション系 │
│ SQLインジェクション / OSコマンドインジェクション │
├─────────────────────────────────────────┤
│ 認証・認可系 │
│ ハードコードされた資格情報 / 不適切なアクセス制御 │
├─────────────────────────────────────────┤
│ データ処理系 │
│ バッファオーバーフロー / 整数オーバーフロー │
├─────────────────────────────────────────┤
│ XSS・入力検証系 │
│ クロスサイトスクリプティング / パスインジェクション │
└─────────────────────────────────────────┘
覚え方
「SAST=コードの健康診断」 と覚えよう!
健康診断は体を動かさなくても(=実行しなくても)血液や画像から問題を見つけられる、それと同じです。
歴史と背景
- 1970年代〜 コンパイラによる静的型チェックが「静的解析」の原型として登場
- 1990年代 Lintなどの静的コード解析ツールが普及、品質目的が中心
- 2001年 OWASP(Open Web Application Security Project)設立、Webアプリ脆弱性への意識が高まる
- 2002年頃〜 Fortify(現OpenText Fortify)、Coverityなど商用SASTツールが登場
- 2010年代前半 PCI DSSなどセキュリティ規格がSASTの利用を推奨・要件化
- 2015年頃〜 CI/CDパイプラインとの統合が進み、毎コミットで自動実行が当たり前に
- 2018年〜 GitHubがCodeQLを買収、SASTをSCM(ソースコード管理)に組み込む流れが加速
- 2022年〜 GitHub Advanced SecurityでSASTが無料開放され、中小開発チームにも普及
SAST・DAST・IASTの違い
セキュリティテストには「動かさずに調べる」SASTだけでなく、「動かしながら調べる」手法もあります。3つを整理しておきましょう。
CI/CDパイプラインでのSAST配置
開発フロー(シフトレフト)
コード記述 → [SAST✅] → コミット → ビルド → テスト → [DAST] → デプロイ → 本番
↑ ↑
最速で検出! 環境が必要
(コスト最小) (コスト中)
主なSASTツール一覧
| ツール名 | 提供形態 | 対応言語 | 特徴 |
|---|---|---|---|
| Checkmarx | 商用SaaS/オンプレ | 30言語以上 | エンタープライズ向けの定番 |
| Fortify (OpenText) | 商用 | 27言語以上 | 歴史が長く規制業界に強い |
| Semgrep | OSS/商用 | 30言語以上 | カスタムルールが書きやすい |
| CodeQL (GitHub) | GitHub組込 | 主要言語 | PRレビューに自動統合 |
| SonarQube | OSS/商用 | 30言語以上 | 品質管理と兼用できる |
| Bandit | OSS | Python専用 | 軽量・導入が簡単 |
関連する規格・RFC
| 規格・番号 | 内容 |
|---|---|
| OWASP ASVS | アプリケーションセキュリティ検証標準。SASTで検証すべき項目を定義 |
| OWASP Top 10 | Webアプリの代表的脆弱性トップ10。SASTの主要検出対象 |
| NIST SP 800-218 | セキュアソフトウェア開発フレームワーク(SSDF)。SASTの利用を推奨 |
| PCI DSS v4.0 | カード業界のセキュリティ標準。開発プロセスへのSAST組み込みを要件化 |
関連用語
- DAST(動的アプリケーションセキュリティテスト) — 動作中のアプリに擬似攻撃を行い脆弱性を検出する手法
- IAST(インタラクティブアプリケーションセキュリティテスト) — 実行中アプリ内部のエージェントでSASTとDASTを組み合わせた手法
- DevSecOps — 開発・運用サイクル全体にセキュリティを組み込む文化・手法
- シフトレフト — テストやセキュリティ検査を開発の早期段階に移動させる考え方
- 脆弱性スキャン — システムやコードのセキュリティ上の弱点を自動検出すること
- SQLインジェクション — 不正なSQL文を入力してDBを操作する代表的な攻撃手法
- CI/CD — コードの統合・テスト・デプロイを自動化する開発パイプライン
- OWASP Top 10 — Webアプリの危険な脆弱性を10種類まとめた業界標準リスト