← 一覧へ
セキュリティ・個人情報
#SAST#DAST#IAST#DevSecOps#SCA
最終更新 · 2026-10-16

アプリケーションセキュリティテスト(SAST・DAST・IAST)

1. 概要

定義: アプリケーションセキュリティテスト(AST, Application Security Testing)とは、ソフトウェアのソースコード・実行バイナリ・稼働中のサービスを分析し、セキュリティ脆弱性を開発・運用より前の段階で特定・除去する一連の手法であり、コードを実行せずに静的分析するSAST、稼働中のアプリケーションを外部から攻撃してみるDAST、実行環境に計測器(エージェント)を埋め込んで内部の流れを観察するIASTに大別される。

アプリケーションセキュリティテストが独立した工学領域として定着した背景には「脆弱性の経済学」がある。要求・設計段階で発見されれば些細な修正で済む欠陥が運用段階で露呈すると、インシデント対応・法的責任・ブランド毀損まで含めコストが数十倍に膨れ上がるというのは古くからのソフトウェア経済学の洞察であり、セキュリティ欠陥においてこの非対称性はさらに極端である。一行のSQLインジェクションが数百万件の個人情報漏洩につながりうるからである。したがって「欠陥をできるだけ左(開発初期)で捕まえよう」というシフトレフト(Shift-Left)思想がセキュリティテストの出発点となった。

もう一つの背景は、アプリケーションが組織の最大の攻撃対象領域(Attack Surface)になったという事実である。ファイアウォール・網分離でネットワーク境界を守る時代が終わり、Web・API・モバイルでビジネスロジックそのものが外部に露出するにつれ、攻撃者の主な侵入経路はネットワークからアプリケーションへ移った。オープンソース依存がコードの70〜90%を占めるようになり、「自分が書いていないコード」の脆弱性(例: Log4Shell)まで責任を負う状況も加わった。これにより「コードが安全であることを反復的・自動的に証明する」テスト体系が必須となった。

この転換は品質保証の重心を「機能が動作するか」から「悪用可能か」へ拡張する。従来のテストが仕様どおり動作する正常経路(Happy Path)を確認したのに対し、セキュリティテストは設計者が意図しなかった入力・状態・流れを攻撃者の視点から探索する。すなわち「何をすべきか」ではなく「何をさせられうるか」を問う。この視点の転換がSAST・DAST・IASTという異なる計測地点を生んだ。

この視点の転換はセキュリティテストを「一度きりの合否判定」ではなく継続的なリスク計測活動へと変える。コードは毎日変わり、新しい脆弱性(CVE)は毎日公開されるため、昨日まで安全だったシステムが今日は脆弱になりうる。したがってセキュリティテストはリリース直前の一度の関門ではなく、コード変更と脅威情報の更新に合わせて反復実行されるべき常時プロセスとなる。この「反復性」が自動化・パイプライン統合を必然的な要求にする。

アプリケーションセキュリティテストの本質的特徴は四つに要約される。第一に、ライフサイクル内在化 — 別途の監査行為ではなくCI/CDパイプラインに自動段階として溶け込む。第二に、多層的可視性 — コード(静的)・実行(動的)・構成要素(依存)を相互補完的に見る。第三に、リスクベースの優先順位付け — 発見したすべての脆弱性を同じ重みで扱わず、悪用可能性・影響度で選別する。第四に、開発者フレンドリー性 — セキュリティ専門家ではない開発者が自らのIDE・PRで即座に結果を受け取れるよう設計される。この四つの特徴は、セキュリティテストが事後点検から開発フローの一部へと進化したことを示す。

2. アプリケーションセキュリティテストの全体構造

アプリケーションセキュリティテストはSDLC(ソフトウェア開発ライフサイクル)の各段階に異なる手法を配置し、コード作成時点から運用モニタリングまで脆弱性を幾重にもふるい落とす多層防御体系で構成される。下の概念図は開発フローの上に各手法が置かれる全体構造を示す。

flowchart LR
  subgraph DEV["開発段階"]
    IDE["IDE/コーディング"]
    SCA1["SCA(依存分析)"]
    SASTX["SAST(静的分析)"]
  end
  subgraph BUILD["ビルド・統合(CI)"]
    BUILDX["ビルド/単体テスト"]
    IASTX["IAST(計測ベース)"]
  end
  subgraph TEST["テスト・ステージング"]
    DASTX["DAST(動的スキャン)"]
    PENX["模擬ハッキング(手動)"]
  end
  subgraph OPS["運用"]
    RASPX["RASP(実時間保護)"]
    ASOC["ASPM(結果相関・管理)"]
  end
  IDE --> SASTX --> BUILDX
  SCA1 --> BUILDX
  BUILDX --> IASTX --> DASTX --> PENX --> RASPX
  SASTX -.->|結果集計| ASOC
  DASTX -.->|結果集計| ASOC
  IASTX -.->|結果集計| ASOC
  SCA1 -.->|結果集計| ASOC

開発段階では、コードが作られるまさにその地点にSASTとSCAが配置される。開発者がIDEでコードを書いたりPR(Pull Request)を出したりする瞬間に静的分析が走って脆弱なパターンを指摘し、取り込んだオープンソースライブラリの既知脆弱性(CVE)をSCAが警告する。この地点の核心的価値はフィードバックの即時性である。開発者がたった今書いたコードの文脈を覚えているうちに結果が届くため、修正コストが最も低い。

ビルド・統合段階では、アプリケーションが実際にコンパイル・稼働し始めるため、実行フローを観察するIASTが有効になる。CIサーバーで機能テストを回すとき計測エージェントが一緒に作動し、テストが触れたコード経路で実際に脆弱なデータフローが起きるかを観察する。静的分析の「コードしか見ない」限界と動的分析の「外部しか見ない」限界を同時に補完する位置である。

テスト・ステージング段階では、運用に近い環境にデプロイされた完成アプリケーションを対象にDASTが外部攻撃者の視線でスキャンし、重要なシステムは専門家の手動模擬ハッキング(Penetration Testing)で自動化が見逃すビジネスロジック欠陥まで検証する。運用段階ではRASPが実行中の攻撃を実時間で遮断し、ASPM(Application Security Posture Management)がすべてのツールの結果を一か所に集めて重複を除去しリスクを相関分析する。このように全体構造の本質は単一手法ではなく段階別手法の組み合わせである。

3. 主要手法と動作原理

アプリケーションセキュリティテストの核心は「どの地点で、何をもって、どのように脆弱性を見つけるか」によって分かれるSAST・DAST・IAST・SCAの四手法である。下の概念図は四手法がアプリケーションの異なる表現(コード・実行・外部インターフェース)にどう接近するかを示す。

flowchart TB
  SRC["ソースコード/バイトコード"]
  RUN["稼働中アプリケーション"]
  DEP["外部依存(オープンソース)"]
  SAST2["SASTエンジン<br/>データフロー・テイント分析"]
  IAST2["IASTエージェント<br/>ランタイム計測"]
  DAST2["DASTスキャナ<br/>HTTPリクエスト改変"]
  SCA2["SCAエンジン<br/>SBOM・CVE照合"]
  SRC --> SAST2
  SRC --> IAST2
  RUN --> IAST2
  RUN --> DAST2
  DEP --> SCA2
  SAST2 --> REP["脆弱性レポート"]
  IAST2 --> REP
  DAST2 --> REP
  SCA2 --> REP

A. SAST(静的アプリケーションセキュリティテスト) は、アプリケーションを実行せずソースコード・バイトコード・バイナリを分析する。核心原理はテイント分析(Taint Analysis)であり、外部から信頼できない入力が入る地点(Source)から始まり、その値が変数・関数を経て危険な演算(Sink, 例: SQLクエリ・コマンド実行・ファイルアクセス)に到達するまでのデータフローを追跡する。この経路の途中に適切な検証・エスケープ(Sanitizer)がなければインジェクション脆弱性として報告する。

SASTの最大の長所はカバレッジの完全性と早期性である。テストケースが実際には実行しなかったコード経路まですべて分析でき、脆弱性の正確なファイル・行番号を提示するため開発者が修正しやすい。コードさえあればよいので稼働環境の構成なしに開発初期から回せる。反面、実行文脈を知らないため「コード上到達不可能な経路」や「ランタイムで無害化される入力」まで脆弱性として報告する誤検知(False Positive)が多いのが宿命的限界である。大規模コードベースで数千件の警報が殺到し、開発者が疲弊して結局無視するようになる「警報疲労」現象はSAST運用の最大の難題である。

SASTの精度は分析の深さと性能のトレードオフの上に置かれる。フロー依存(Flow-sensitive)・経路依存(Path-sensitive)の分析を深く行うほど誤検知は減るが、分析時間が指数的に増えてCIを遅延させる。またリフレクション・動的ロード・フレームワークの暗黙的呼び出しのように静的に追跡しにくい構造では、データフローが途切れて見逃し(False Negative)が発生する。したがって実務では全体の再分析ではなく変更分のみを見る増分スキャン、ルールセットのカスタマイズ、組織ベースラインの設定を併用し、「十分速く、かつ十分正確な」地点を探す運用チューニングが要となる。

B. DAST(動的アプリケーションセキュリティテスト) は、稼働中のアプリケーションに外部から実際の攻撃性リクエストを送って反応を観察する。ソースコードなしにブラックボックスで接近するため攻撃者の実際の視線に最も近く、サーバー設定ミス・認証バイパス・セッション管理欠陥のようにコードだけ見ても現れないデプロイ・構成レベルの脆弱性を捕捉する。例えばDASTは入力フォームに ' OR '1'='1 のようなペイロードを注入し、応答のエラーメッセージ・遅延・返却データを分析して実際の悪用可能性を証明する。

DASTの強みは低い誤検知と実証性である。実際に応答を引き出したものなので、報告された脆弱性はおおむね本当に悪用可能である。しかしアプリケーションが完成して稼働可能でなければならないため発見が遅く、スキャナが到達できなかった画面・APIは検査されずカバレッジが不完全であり、脆弱性がコードのどこに由来するかを教えないため修正地点の把握に追加分析が必要である。また状態を持つ複雑なワークフローや認証が必要な領域の自動探索が難しい点も限界である。

近年はSPA(Single Page Application)・GraphQL・マイクロサービスのように画面とAPIが複雑に絡んだ構造が一般化し、従来のクローリングベースDASTのカバレッジ空白がさらに大きくなった。これを補うため、API仕様(OpenAPI/Swagger)を入力として受け取りエンドポイントを体系的に探索するAPI中心DASTと、IASTエージェントが収集した内部経路情報でスキャン範囲を案内されるハイブリッド方式が広がっている。これは「外部しか見ない」DASTの根本的限界を内部可視性で補おうとする試みである。

C. IAST(対話型アプリケーションセキュリティテスト) は、SASTとDASTの隙間を埋めるために登場した。アプリケーションの実行環境(例: JVM・ランタイム)に計測エージェントを埋め込み、機能テストやDASTがアプリケーションを稼働させる間に内部でデータフロー・関数呼び出し・実際のクエリ実行を観察する。すなわち外部リクエスト(動的)と内部コード経路(静的レベルの情報)を同時に確保するため、「実際に実行された脆弱な経路」のみを正確なコード位置とともに報告する。

IASTの決定的長所は極めて低い誤検知と正確な位置提示の両立である。実行されたフローのみを見るので到達不可能経路の誤検知が消え、内部計測のおかげで脆弱性のコード行を指し示す。またCIパイプラインの機能テストに乗って自動的に回るため、別途のスキャン時間がほとんどかからない。ただしエージェントが特定の言語・ランタイムに従属するため対応スタックが限定的であり、ランタイム計測が性能に若干の負荷を与え、何よりテストが実行した経路のみを見るという点でカバレッジが機能テストの品質に左右される限界がある。

D. SCA(ソフトウェア構成分析) は、前の三手法が「直接書いたコード」を見るのとは異なり取り込んだオープンソース・サードパーティ構成要素を分析する。プロジェクトの依存ツリーを解釈してSBOM(Software Bill of Materials)を作り、各構成要素のバージョンを既知脆弱性データベース(NVD/CVE)と照合し、ライセンス違反の有無まで点検する。現代アプリケーションコードの大半がオープンソースである現実においてSCAは選択ではなく必須となり、Log4Shell事態以降サプライチェーンセキュリティの核心軸として浮上した。

SCAの難しさは推移的依存(Transitive Dependency)にある。開発者が直接宣言したライブラリ(直接依存)は統制範囲にあるが、そのライブラリがさらに引き込む数十〜数百の下位依存は開発者の視界の外にありながら同一の実行権限を持つ。実際の脆弱性の相当数がこの推移的依存に潜むため、成熟したSCAは全体の依存グラフを再帰的に解釈し、さらに「脆弱な関数が実際に呼び出されるか」を分析する到達可能性(Reachability)分析で修正優先順位を見分ける。すべてのCVEを同じ重みで扱えば再び警報疲労に陥るからである。

4. 手法比較と適用事例

四手法の違いは単なる機能差ではなく「アプリケーションのどの表現を、どの時点で見るか」という観察地点の違いから生じ、その違いがそのまま誤検知率・発見時点・修正容易性の構造的差を作る。下の表は核心軸を整理したものである。

区分 SAST DAST IAST SCA
分析対象 ソース/バイトコード 稼働中アプリ(外部) 稼働中アプリ(内部計測) オープンソース依存
接近方式 ホワイトボックス ブラックボックス グレーボックス 構成要素照合
適用時点 開発初期 テスト/ステージング ビルド・統合 開発初期
誤検知傾向 高い 低い 非常に低い 低い
修正位置提示 正確(コード) 困難 正確(コード) 構成要素単位
代表的限界 警報疲労 遅い発見・カバレッジ スタック従属・経路依存 既知脆弱性のみ

この比較の核心は「観察情報量」の違いである。SASTはすべてのコード経路を見るが実行文脈がなく誤検知が多く(FP↑)、DASTは実行反応のみを見るので誤りは少ないがコード内部を知らず修正位置を指せない。IASTは実行とコード内部を同時に見るので誤検知が最も低く位置も正確だが、見たものが「実行された経路」だけなのでカバレッジがテスト品質に従属する。すなわち三手法の長短は設計思想ではなく各手法が接近できる情報の種類と量から構造的に決定される。

この比較の核心はどれか一つが優れているのではなく相互補完的だという点にある。SASTは完全なカバレッジで早期に捕まえるが誤検知が多く、DASTは実証的だが遅く不完全であり、IASTは両者の長所を取りつつ実行された経路に限定される。したがって成熟した組織は「SAST+SCAで左を広くふるい、IASTでCIにおいて精密に確認し、DAST+模擬ハッキングでデプロイ直前に実証する」という多層組み合わせ戦略を取る。どれか一つだけ導入すれば必ず死角が残る。

具体的事例として、2017年のEquifax侵害はApache Strutsの既知のリモートコード実行脆弱性(CVE-2017-5638)をパッチしなかったために約1億4,700万人の個人情報が漏洩した事件である。この脆弱性は組織が書いたコードではなく取り込んだフレームワークにあったためSASTでは捕まえにくく、SCAが即座に警告したであろう領域である。この事件はサプライチェーン構成要素管理(SCA・SBOM)の重要性を全産業に刻み込んだ。

もう一つの事例として、2021年のLog4Shell(CVE-2021-44228)は世界的に使われるロギングライブラリLog4jの欠陥で、数億台のシステムが影響を受けた。多くの組織が「我々がLog4jをどこに使っているかすら分からない」という可視性の欠如に直面し、これは正確なSBOMとSCA自動化がなければサプライチェーン事故に為す術がないことを示した転換点となった。第三に、ある金融フィンテック企業はCIパイプラインにIASTを導入した後、既存のSAST比で誤検知を80%以上減らし平均脆弱性修正リードタイムを数週間から数日に短縮したと報告しており、これは「誤検知の減少がそのまま開発者の信頼と修正速度につながる」というIASTの実務的価値を示す。

5. 深化 — DevSecOps・ASPM・AIベースの最新動向

近年のアプリケーションセキュリティテストの最大の流れはDevSecOpsへの完全な内在化である。過去のようにリリース直前にセキュリティチームが一度点検する「ゲートキーパー」モデルは、速度を要求するアジャイル・クラウドネイティブ環境と衝突する。代わりにセキュリティテストがコードコミット・PR・ビルドの各段階に自動段階として埋め込まれ、開発者が自らのワークフロー内で即座にフィードバックを受ける方向に進化した。核心指標は「どれだけ多くの脆弱性を見つけたか」ではなく「開発者が実際に直すか」に変わり、これに伴い誤検知を減らし修正ガイドを提示する開発者体験(DevEx)がツール選択の核心基準となった。

第二の動向はASPM(Application Security Posture Management)の浮上である。SAST・DAST・IAST・SCAを別々に運用すると同じ脆弱性が重複報告され、どれが本当に危険か判断しにくい。ASPMは複数ツールの結果を一つのプラットフォームで集計・正規化し、コード-ビルド-実行-運用の文脈をつないで悪用可能性(Reachability)とビジネス影響を基準にリスクを相関・優先順位付けする。これは「ツールの羅列」から「リスクの統合管理」へセキュリティテストの重心を移す変化である。

第三はAI/LLMの両面的影響である。防御面では生成AIが脆弱性の根本原因を自然言語で説明し修正コード(パッチ)を提案して開発者の負担を軽減し、誤検知を文脈で選別する知能型トリアージに活用される。一方攻撃面ではAIコーディング補助が生成したコードに脆弱性が混ざり込んだり、プロンプトインジェクションのようなLLM固有の新しい脆弱性が登場したりして、従来のSAST・DASTが扱えない領域が生じた。これに伴いAIが生成・稼働させるアプリケーションを狙ったセキュリティテスト手法そのものが新しい研究領域として浮上している。あわせてサプライチェーンセキュリティ規制(米国大統領令14028、EU CRAなど)がSBOM提出を義務化し、SCAの戦略的比重も急上昇している。

6. 考慮事項および示唆点

技術士の観点から、アプリケーションセキュリティテストの導入はツール選定ではなくプロセス・文化・ガバナンスを包括する戦略課題として接近すべきである。

  • 単一手法の幻想の排除と多層組み合わせ戦略: SAST・DAST・IAST・SCAは互いの死角を埋める補完関係なので、どれか一つでセキュリティを完結しようとする発想は危険である。組織の技術スタック・規制要求・成熟度に合わせて組み合わせを設計しつつ、初期はSCA・SASTで広く始めてIAST・DASTで精度を高める段階的拡張ロードマップを推奨する。重要なシステムは自動化が捕まえられないビジネスロジック欠陥のために専門家の模擬ハッキングを併行する。

  • 誤検知管理と開発者受容性のトレードオフ: セキュリティテストの成否は検知率ではなく開発者が結果を信頼して直すかにかかっている。誤検知が溢れればツールは無視されセキュリティは形骸化する。したがってルールチューニング・ベースライン設定・リスクベースの選別で「信号対雑音比」を管理し、IDE・PR統合と修正ガイドで摩擦を最小化すべきである。技術は精度だけでなく受容性(Adoption)で評価されるべきである。

  • パイプライン統合と速度のバランス: CI/CDにセキュリティ段階を入れつつ、ビルドを過度に遅延させれば開発速度と衝突する。増分スキャン(変更分のみ分析)・並列化・リスク度に応じた差別化ゲート(致命的欠陥のみビルド遮断)で速度と安全を両立させるべきである。「セキュリティがデプロイを妨げる」という認識が生じれば迂回文化が育つため、ガバナンス設計が重要である。

  • サプライチェーン・SBOMガバナンスと規制対応: コードの大半がオープンソースである現実において、SCAとSBOMは選択ではなく規制対応(EU CRA、米国SBOM義務化)の要件となった。依存の継続的モニタリング、脆弱な構成要素の迅速な更新ポリシー、ライセンスリスク管理を制度化すべきであり、これはサプライチェーン攻撃(Log4Shell型)に対する組織の回復力を左右する。

  • アーキテクチャ連携と展望: セキュリティテストは単独では価値が限定的であり、ASPMで結果を統合し、RASP・WAFのようなランタイム保護、脅威モデリング・セキュアコーディングのような設計段階活動とつながるときに初めて閉ループが完成する。今後はAIベースの自動修正と悪用可能性分析で「検知から自律対応」へ進化する見通しなので、組織はセキュリティテストを個別ツールではなく共通セキュリティプラットフォーム層として位置づけ、標準(OWASP・SARIFなど)ベースの連携を前提に選定するのが望ましい。

参考資料


一言まとめ: アプリケーションセキュリティテストは、コードを静的分析するSAST、稼働アプリを外部攻撃するDAST、ランタイム計測で内部を観察するIAST、オープンソースを照合するSCAをSDLC段階別に組み合わせて脆弱性を幾重にもふるい落とす多層防御体系であり、DevSecOpsの内在化とASPM・AIベースの統合管理へ進化している。