この記事の内容
実際に
静的アプリケーション・セキュリティ・テスト (SAST) スキャン
メリット、 デメリット、 導入方法、 最適な SASTツールの 選び方
SASTが重要な理由:要点
脆弱性の
大半は ソースコードに 起因します。 SASTは、
安全な 開発プラクティスを 求める PCI DSS、 HIPAA、 ISO 27001などの コンプライアンスフレームワークへの 対応を 支援します。 SASTを
活用すれば、 セキュリティを 後回しに せず、 SDLCに 直接 組み込むことができます 適切な
静的アプリケーション・セキュリティ・テスト (SAST) ツールを 選ぶには、 カバレッジ、 精度、 開発者の ワークフローの バランスを 取る 必要が あります。 Snykのような
最新の AIネイティブSASTツールは、 機械学習や 大規模言語モデルを 活用し、 ルールベースの スキャナーでは 見逃されがちな 複雑な 脆弱性も 検出できます。
静的アプリケーション・セキュリティ・テスト
—しかし、
静的アプリケーションセキュリティテスト(SAST)とは?
静的アプリケーションセキュリティテスト(SAST)は、静的コード解析の一種であり、脆弱性を特定して、アプリケーションが悪意ある攻撃にさらされるリスクを明らかにするためにソースコードを解析します。SASTでは、ソースコードとバイトコードに重点を置いた脆弱性スキャンを行い、インジェクション攻撃やメモリ管理の問題などのセキュリティ上の問題を検出します。コードが実行可能になる前にスキャンを行うため、ホワイトボックステストとも呼ばれます。SASTツールを活用することで、アプリケーションを潜在的なセキュリティ脅威からより確実に保護できます。
アプリケーションセキュリティにSASTが重要なのはなぜですか?
開発者は、
SASTが
実行中の
アプリケーションのセキュリティテストスキャンの7段階
SASTスキャンの

開発を
続けながらセキュリティを 開発プロセスに 組み込み、 今後の コードに 脆弱性が 入り込むのを 防ぎます。 あらゆる 段階に セキュリティを 組み込むには、 コードレビュー、 マージの 運用、 ブランチポリシー、 安全な コーディングガイドライン、 コンプライアンス管理が 含まれます。 また、 新たな 脅威や ルールセットの 更新、 ツールの アップグレードも 継続的に 監視しましょう。 新規コードだけでなく、 リファクタリングした レガシーコードも 継続して スキャンしてください。 リアルタイムまたは
ほぼ リアルタイムの 静的解析 (IDE、 コミット前フック、 初期段階の CIパイプライン)を 使って、 コードの 作成中にコードを スキャンします。 構文、 スタイル違反、 安全でない APIの 使用、 リスクが 高い ことで 知られる コーディングパターン ( 例:サニタイズされていない 入力、 ハードコードされた シークレット、 脆弱な 暗号化)を チェックします。 検出した
脆弱性の 深刻度と 影響に 基づいて、優先順位を 付けて トリアージします。 問題を 検出したら、 深刻度 ( 例:CVSSや 社内スコア)、 悪用 可能性、 アプリケーションや ビジネスへの 影響、 攻撃対象領域への 露出、 到達 可能性などに 基づいて 分類します。 トリアージでは 誤検知や ノイズも 除外し、 意味の ある リスクに 注力できるようにします。 スキャンデータを
確認して 関連する リスクレベルを 評価し、 発見された 脆弱性の 性質を把握します。 特定された 問題を 詳しく 調査し、 根本原因、 データフロー、 制御フロー、 依存関係の 相互作用を 理解します。 デプロイ環境で 脆弱性が 実際に どのような リスクを もたらすかを 判断します。 スキャン結果から学び、
同様の 脆弱性を 今後 防ぎます。 これには、 安全な コーディング標準の 導入、 開発者の 教育、 コードレビューの チェックリストの 更新、 スキャンルールの 改善が 含まれます。 よく ある ミスが 繰り返されにくくなるようポリシーを 実施します。 セキュアな 相互レビューや コーディングワークショップを 実施したり、 新しい 脆弱性の 種類に ついて トレーニングを 行ったりする ことも 有効です。 スキャンで
見つかった 脆弱性を、 コードに パッチを 適用するなどの 対策で修正します。 コードの 変更、 脆弱な ライブラリの 削除や 置き換え、 設定の 変更 (例: 入力検証、 出力エンコード)、 モジュールの 再設計が 必要に なる 場合も あります。 問題に よっては 緩和策で 十分な 場合も あれば、 完全な 修正が 必要な 場合も あります。 機能を 損なったり、 新たな 問題を 引き起こしたりしないよう、 修正を 十分に テストしてください。 再度
スキャンして、 修正が 有効だった ことを検証します。 修正後に SASTを 再実行し、 変更箇所 (差分スキャン) または コードベース全体 (ベースラインスキャン)を チェックして、 脆弱性が 解消され、 意図しない 副作用や 新たな 問題が 発生していない ことを 確認します。 脅威に つながる 経路が 遮断された ことを 検証します。
SASTの7段階 — 技術的な要点とベストプラクティス
段階 | 主な | ベストプラクティス |
|---|---|---|
スキャン | IDEなどで 複数の 開発の | 早期検出の |
深刻度と | ビジネスへの 深刻度や | 深刻度、 事前トリアージを タグや 深刻度の |
レビューと | ツールが 根本原因や 特定の | コールグラフ、 検出結果を 脆弱性が 到達 |
脆弱性から | 開発者が、 開発文化に | 社内の 開発者向けの 繰り返し発生する |
修正 | 問題に 影響を 特に | 修正ごとに 修正した 依存関係に |
再スキャンで | 修正を 修正に ツールの | 修正の 差分スキャンだけでなく、 スキャンルールと テストカバレッジや |
継続的な | 新たな 言語や 強固な セキュリティ対応で | シフトレフト戦略:SASTを 開発チームに 脆弱性密度、 脅威モデリングや サードパーティの |
SAST導入のベストプラクティスチェックリスト
役割と
責任者を 定義し、 文書化する 早期から
頻繁に スキャンを 開始する (シフトレフト) IDEや
コミット前フックに SASTを 組み込み、 開発者が コーディング中に フィードバックを 得られるように する プルリクエストや
機能ブランチで スキャンを 自動実行する ベースラインスキャン全体を
定期的に 実行する (例:毎晩、 毎週)
ルールセットと
設定を 調整する 使用する
言語、 フレームワーク、 アーキテクチャに 合わせて ルールセットを カスタマイズする 深刻度の
しきい値 (クリティカル、 高、 中など)を 明確に 定め、 クリティカルや 高深刻度の 問題を ゲートで 制御できるように する
検出結果の
優先順位を 適切に 設定し、 賢く トリアージする 悪用
可能性、 ビジネスへの 影響、 露出状況、 コードパスの 到達 可能性などの 指標を 活用する 問題を
一貫して 分類できるよう、 トリアージの プロセスや 基準を 維持する 検出結果に
担当者を 割り当て、 修正の SLAを 設定する (例:クリティカルな 問題は X日以内に 修正する)
品質ゲートを
設けて CI/CDパイプラインに 組み込む ビルド工程や
プルリクエストに SASTを 追加し、 特定の 脆弱性を 含む コードの マージや デプロイを 防ぐ 変更された
コードに 差分スキャンを 実施し、 処理速度と フィードバックの 迅速さを 向上させる クリティカルな
深刻度や しきい値の 超過を 検出した 場合に、 CI/CDツールが ビルドに 警告を 出す、 または 失敗させるよう 設定する
効果的な
フィードバックと 修正ガイダンスを 提供する ファイルパス、
行番号、 コンテキスト、 悪用 可能性、 推奨される 修正方法を 含む レポートを 作成する 開発者が
作業する 環境に フィードバックを 組み込む よく
ある 脆弱性パターンと 緩和策に 関する ドキュメントや 社内ナレッジベースを 維持する
誤検知への
対応と ツールの 保守を 行う 誤検知と
見逃しを 定期的に 確認する 最新の
攻撃手法に 対応できるよう、 SASTツール、 ルールデータベース、 検出エンジンを 最新の 状態に 保つ 組織で
使用している すべての 言語、 フレームワーク、 ビルドシステムに ツールが 対応している ことを 確認する
継続的に
監視・測定し、 改善する 修正までの
時間、 脆弱性密度、 誤検知率、 深刻度別の 傾向などの KPIを 定義し、 追跡する スキャン範囲と
ルールの 有効性を 定期的に 監査する スキャンデータを
活用して、 開発者向けトレーニングや コーディング標準の 更新を 行う
コンプライアンス、
脅威モデル、 リスクの 背景との 整合性を 確保する SASTの
検出結果を、 対象と する ドメインや アプリケーション環境に 固有の リスクモデルや 脅威プロファイルに 対応付ける スキャン結果を
コンプライアンス対応に 活用できるように する (例:レポート、 証拠、 トレーサビリティ) ルールの
選択や ポリシーの 定義に あたって、 規制の 枠組みや 標準化団体 ( 例:OWASP、 CWE、 NIST SSDF)を 考慮する
パフォーマンスと
開発者エクスペリエンスを 最適化する プルリクエストや
コミットでの フィードバックを 迅速化する ため、 差分スキャンを 使用する 適切に、
関連性の ない コード (生成コード、 テストファイル、 安定しているかパッチ適用済みの ベンダー製または サードパーティライブラリなど)を 除外する 深度と
速度の バランスを 取る (例:開発の 初期段階では 迅速な フィードバックを 優先し、 スケジュール済みの ビルドや リリースビルドでは 詳細な スキャンを 行う)
静的アプリケーションセキュリティテストの5つのメリット
SASTには、
SASTを
開発の
早い 段階で スキャンできる :多くの SASTツールは ソースコードのみを 対象とし、 ベストプラクティスに 照らして チェックします。 その ため、 コードを 書いている 段階から SASTを 適用できます。 SASTツールの IDE プラグインは 一般的で、 コードが バージョン管理に 登録される 前に 問題を 検出します。 これは、 技術の 性質上、 これまでに ない 速さで コードに エラーや ハルシネーションを 持ち込む 可能性が あるAIコーディングツールを 使用する場合に 特に 重要です。 問題の
ある コードの 場所を 示し、 検出した 問題を 説明する :SASTは、 すべての 脆弱性の 正確な 位置を 示し、 データフローを 説明します。 その ため、 各問題を 容易に 理解し、 修正できます。 テストケースが
不要:動的アプリケーションセキュリティテスト (DAST)などの AppSecツールでは、 何を テストするかを 決める 必要が あります。 一方、 SASTツールは コードベースに すべての ルールを 適用します。
これらのルールは、 SASTツールの 開発者や コミュニティが 手動で 実装できます。 多くの 場合、 数多くの プロジェクトや 長年の プログラミング経験を もとに 作られている ため、 ルールの 開発者には さまざまな 分野の 知識が 求められます。 こうした ルールを 使う ことで、 存在すら 知らなかった脆弱性も 検出できます。 アプリケーションの
実行が 不要:SASTは アプリケーションの 実行前に ソースコードを 解析する ため、 他の アプリケーションテストスイートよりも はるかに 速く スキャンできます。 自動化が
容易 :SDLCの どの 段階でも、 ソースコードファイルを 自動で スキャンできます。 その ため、 SASTを あらゆる 段階で セキュリティゲートと して 活用できます。
SASTの3つの制約とその克服方法
多くの
誤検知と
見逃し:SASTツールは ソースコードを 解釈する 際に、 一定の 前提を 適用する 必要が あります。 その ため、 実際には 問題が ない 箇所を 問題と して 検出する 「誤検知」が 発生する ことがあります。 従来型の SASTツールでは 誤検知率が 50~80%に 達する こともあり、 ノイズの 中から 本当の 問題を 見つけるのが 困難で、 SASTの ROIにも 疑問が 生じかねません。 その ため、 検出結果を 絞り込んで 優先順位を 付け、 カスタマイズ機能も 備えた、 より 高精度な 最新の SASTを 使う ことが 重要です。 コンテキストの
不足:サニタイズされていない ユーザー入力は 大きな セキュリティリスクであり、 ソフトウェアコンポーネントに 取り込まれる たびに 修正すべきです。 フロントエンドの サニタイズされていない 入力は、 バックエンドで 修正されてリスクが 軽減される ことも 少なく ありません。 フロントエンドと バックエンドの コードが 同じ リポジトリに ない 場合、 SASTツールは サニタイズ処理を 検出できず、 問題の ない 箇所を 開発者に 修正する よう促してしまうことがあります。 言語への
依存:SASTは コードへの 依存度が 高い 技術です。 Javaや C#など、 広く 使われている プログラミング言語向けの SASTツールは 数多く ありますが、 ReScriptや Nimなどの ニッチな 言語向けの ツールは ほとんど ありません。
他のAppSecツールとの比較
他の
アプリケーションセキュリティには
比較項 | 主な | 最適な |
|---|---|---|
SASTと | 分 SDLCに 可視性/カバレッジ:SASTは | 早期検出を ステージング/本番前/本番環境で 両方を |
SASTと | 計測方 実行時の カバレッジと | 機能テストや 十分な 幅 |
SASTと | 対象 脆弱性の 依存関係の | サードパーティや 開発の SASTと |

SASTとDASTの比較
SASTが
ファジングは、
最適な
SASTとIASTの比較
インタラクティブアプリケーションセキュリティテスト
IASTは、
IASTは
SASTとSCAの比較
ソフトウェア構成分析
SCAは
安全な
SASTとその他のAppSecツール
SAST、
これらの
SASTツールの仕組みと選び方
SASTは、

SASTツールで検出できる脆弱性
SASTツールは、
データフローの
問題 意味上の
エラー 設定ミス
制御フローの
問題 構造上の
欠陥 メモリの
問題
SASTでクラウドセキュリティテストを自動化する方法
SASTを
ソフトウェア開発ライフサイクル(SDLC)を保護する適切なSASTツールの選び方
SASTはソフトウェア開発ライフサイクルの
リアルタイムスキャンやさまざまな
環境での 自動修正など、 開発者に とって 使いやすい 機能。 セキュリティ担当者以外にも 理解しやすく、 使いやすい UI。 開発プロセスを
遅らせない高速な スキャン機能。 チームが
修正すべき 高リスクおよび重大な 問題に 優先順位を 付けられるレポート機能。 自動修正(
「オートフィックス」) 機能。 開発者が ワンクリックで 正確な 脆弱性修正を 適用でき、 その 修正に よって コードに 新たな セキュリティ 問題が 生じない ことを 確認できます。 誤検知率が
低い こと。結果の 手動確認や 検証に かかる 開発者の 時間と 労力を 削減できます。 既存の
CI/CDパイプラインに 簡単かつ 迅速に 統合できる こと。
こうした
Snykの開発者ファーストなSAST
SASTツールを
従来の
Snyk Codeは、