脆弱性管理

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つを整理しておきましょう。

セキュリティテスト手法の比較 SAST 静的テスト 実行:不要 対象:ソースコード タイミング:開発中 誤検知:多め コードの書き方由来 の脆弱性を検出 DAST 動的テスト 実行:必要 対象:動作中のアプリ タイミング:テスト環境 誤検知:少なめ 実行時の振る舞い 由来の脆弱性を検出 IAST インタラクティブテスト 実行:必要 対象:実行中の内部 タイミング:テスト中 誤検知:最小 SASTとDASTの ハイブリッド 3つを組み合わせて使うことで検出漏れを防ぐ(AST:Application Security Testing)

CI/CDパイプラインでのSAST配置

開発フロー(シフトレフト)

  コード記述 → [SAST✅] → コミット → ビルド → テスト → [DAST] → デプロイ → 本番
     ↑                                                       ↑
   最速で検出!                                          環境が必要
   (コスト最小)                                         (コスト中)

主なSASTツール一覧

ツール名提供形態対応言語特徴
Checkmarx商用SaaS/オンプレ30言語以上エンタープライズ向けの定番
Fortify (OpenText)商用27言語以上歴史が長く規制業界に強い
SemgrepOSS/商用30言語以上カスタムルールが書きやすい
CodeQL (GitHub)GitHub組込主要言語PRレビューに自動統合
SonarQubeOSS/商用30言語以上品質管理と兼用できる
BanditOSSPython専用軽量・導入が簡単

関連する規格・RFC

規格・番号内容
OWASP ASVSアプリケーションセキュリティ検証標準。SASTで検証すべき項目を定義
OWASP Top 10Webアプリの代表的脆弱性トップ10。SASTの主要検出対象
NIST SP 800-218セキュアソフトウェア開発フレームワーク(SSDF)。SASTの利用を推奨
PCI DSS v4.0カード業界のセキュリティ標準。開発プロセスへのSAST組み込みを要件化

関連用語