IT女子 アラ美お疲れ様です!IT業界で働くアライグマです!
「セキュリティテストは専門チームの仕事」と思っていませんか。2025年のVerizon Data Breach Investigations Reportによると、Webアプリケーションの脆弱性を突いた攻撃は全データ侵害の約43%を占めています。しかも、その多くはSQLインジェクションやXSSといった既知の脆弱性が原因です。つまり、自動化ツールで検出できるものが大半なのです。本記事では、SAST(静的解析)、DAST(動的解析)、ファジング、SCA(ソフトウェア構成分析)の4つの手法を組み合わせて、CI/CDパイプラインに脆弱性検出を組み込む実践的な方法を解説します。
セキュリティテスト自動化の全体像と背景



従来のセキュリティテストは、開発の最終段階でペネトレーションテストを実施する「ウォーターフォール型」が主流でした。しかし、この方法では脆弱性の発見が遅れ、修正コストが膨大になります。IBM System Sciences Instituteの調査では、リリース後に発見されたバグの修正コストは設計段階の最大100倍に達するとされています。
この課題を解決するのがDevSecOps——開発(Dev)、セキュリティ(Sec)、運用(Ops)を統合するアプローチです。LLMアプリケーションのセキュリティ対策の記事でも触れた通り、セキュリティを開発プロセスの早い段階に組み込む「シフトレフト」が現代のベストプラクティスです。
- SAST(Static Application Security Testing):ソースコードを解析し、コーディング段階で脆弱性を検出する
- DAST(Dynamic Application Security Testing):実行中のアプリケーションに対して攻撃を模倣し、ランタイムの脆弱性を発見する
- ファジング:ランダムまたは半構造化されたデータを入力し、予期しない動作やクラッシュを検出する
- SCA(Software Composition Analysis):依存ライブラリの既知の脆弱性(CVE)をスキャンする



前提条件と環境整理
本記事で扱うツールと環境を整理します。Trail of BitsのセキュリティスキルをClaude Codeに適用する記事で紹介したように、セキュリティツールはAIとの組み合わせでさらに効果を発揮します。
想定読者
- Webアプリケーション開発経験が1年以上あるエンジニア
- CI/CD(GitHub Actions、GitLab CI等)の基本的な設定経験がある方
- セキュリティテストを「やらなきゃ」と思いつつ手をつけられていない方
使用ツール
- Semgrep(SAST):ルールベースの静的解析。OSSで無料利用可能
- OWASP ZAP(DAST):Webアプリケーション向けの動的スキャナー
- AFL++(ファジング):カバレッジガイド型ファザー
- Trivy(SCA):コンテナイメージと依存関係の脆弱性スキャン
- GitHub Actions:CI/CDパイプラインの実行基盤



ステップ1:SAST・SCAによる静的セキュリティチェックの導入
最初のステップとして、コードの静的解析と依存関係のスキャンをCI/CDに組み込みます。この2つは導入コストが最も低く、効果が即座に現れる手法です。


Semgrepの導入と設定
Semgrepは、パターンマッチングベースの静的解析ツールです。OWASP Top 10に対応したルールセットが標準で用意されており、MongoDBの脆弱性対策の記事で取り上げたようなNoSQLインジェクションも検出できます。
# .github/workflows/security-scan.yml
name: Security Scan
on: [push, pull_request]
jobs:
semgrep:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Run Semgrep
uses: returntocorp/semgrep-action@v1
with:
config: >-
p/owasp-top-ten
p/security-audit
p/secrets
Trivyによる依存関係スキャン
Trivyは、コンテナイメージだけでなく、package-lock.jsonやrequirements.txtなどの依存関係ファイルもスキャンできます。
trivy-scan:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Run Trivy vulnerability scanner
uses: aquasecurity/trivy-action@master
with:
scan-type: 'fs'
scan-ref: '.'
severity: 'CRITICAL,HIGH'
exit-code: '1'
exit-code: '1'を設定することで、CRITICALまたはHIGHの脆弱性が検出された場合にCIを失敗させ、マージをブロックできます。



.semgrepignoreで特定パスを除外したり、インラインコメントで個別に抑制できます。チームでルールを蓄積すれば数週間で精度が安定します。ステップ2:DASTとファジングによる動的テストの統合
静的解析だけでは検出できない脆弱性があります。認証フローの不備、セッション管理の問題、レースコンディションなどは、実際にアプリケーションを動かさないと発見できません。ここではClaude Codeによる開発自動化の記事で紹介したCI/CD統合の考え方を応用し、動的テストをパイプラインに組み込みます。
OWASP ZAPによるDASTスキャン
OWASP ZAPはステージング環境に対してスパイダリング(クローリング)とアクティブスキャンを実行し、XSS、SQLインジェクション、CSRF等の脆弱性を検出します。
zap-scan:
runs-on: ubuntu-latest
needs: deploy-staging
steps:
- name: ZAP Baseline Scan
uses: zaproxy/action-baseline@v0.12.0
with:
target: 'https://staging.example.com'
rules_file_name: '.zap/rules.tsv'
cmd_options: '-a'
AFL++によるファジング
APIエンドポイントに対してファジングを実施する場合、入力のシード(初期テストケース)を用意し、AFL++にカバレッジガイドで変異させます。
# ファジング用のハーネスをビルド
afl-cc -o fuzz_target fuzz_harness.c -ljansson
# シードコーパスを用意してファジング開始
mkdir -p seeds output
echo '{"username":"test","password":"test123"}' > seeds/seed1.json
afl-fuzz -i seeds -o output -- ./fuzz_target @@
ファジングは長時間実行が前提のため、CI/CDでは「10分間のクイックファジング」をPR時に実行し、本格的なファジングは夜間バッチで回すのが現実的な運用です。



セキュリティテスト自動化の導入効果(ケーススタディ)



状況(Before)
- 従業員約50名のSaaS企業で、バックエンドはPython/Django、フロントエンドはReact/TypeScriptの構成
- セキュリティテストは年1回の外部ペネトレーションテスト(費用約200万円)のみで、テスト間の期間に蓄積された脆弱性が毎回15〜20件報告されていた
- リリース後に発見されたXSS脆弱性の修正に延べ約40時間を費やし、ホットフィックスのリリースが月平均2回発生していた
行動(Action)
- GitHub ActionsにSemgrep(SAST)とTrivy(SCA)を導入し、全PRに対して自動スキャンを実装した。設定ファイルの作成からCI統合まで約2日で完了
- ステージング環境へのデプロイ後にOWASP ZAPのベースラインスキャンを自動実行するワークフローを追加で実装した
- テスト設計スキルとキャリア戦略の記事で紹介されている「テストピラミッド」の考え方を適用し、SAST→SCA→DAST→ファジングの順で段階的に導入した結果、チーム全体のセキュリティ意識が向上した
- Semgrepのカスタムルールを12件作成し、自社固有のコーディングパターン(独自認証ライブラリの誤用など)も検出対象に追加した
結果(After)
- 年次ペネトレーションテストでの指摘件数が15〜20件から3件に削減(約80%減)。残った3件はビジネスロジックの問題で、自動化では検出困難なものだった
- リリース後のホットフィックス頻度が月平均2回から0.2回に改善し、修正工数が年間約480時間削減された
- 外部ペネトレーションテストの費用を年200万円から100万円に半減できた(指摘が減り、テスト範囲を絞れたため)



さらなる実践・活用に向けて
セキュリティテスト自動化の基盤が整ったら、次のステップとして以下の拡張を検討してください。テスト自動化エンジニアのキャリアロードマップの記事でも解説している通り、セキュリティテストの自動化スキルは市場価値の高い専門性です。
- SBOM(Software Bill of Materials)の生成:Trivyの
--format spdx-jsonオプションでSBOMを自動生成し、サプライチェーンセキュリティを強化する - シークレットスキャンの追加:Gitleaksやtrufflehogsを導入し、APIキーやパスワードのハードコーディングを検出する
- セキュリティダッシュボードの構築:DefectDojoなどの脆弱性管理プラットフォームに結果を集約し、トレンドを可視化する
- IaCスキャンの統合:TerraformやCloudFormationのテンプレートに対してCheckovやtfsecを実行し、インフラ設定の脆弱性も検出する
さらなる年収アップやキャリアアップを目指すなら、ハイクラス向けの求人に特化した以下のサービスがおすすめです。
| 比較項目 | TechGo | レバテックダイレクト | ビズリーチ |
|---|---|---|---|
| 年収レンジ | 800万〜1,500万円ハイクラス特化 | 600万〜1,000万円IT専門スカウト | 700万〜2,000万円全業界・管理職含む |
| 技術スタック | モダン環境中心 | Web系に強い | 企業によりバラバラ |
| リモート率 | フルリモート前提多数 | 条件検索可能 | 原則出社も多い |
| おすすめ度 | 技術で稼ぐならここ | A受身で探すなら | Bマネジメント層向け |
| 公式サイト | 無料登録する | - | - |



まとめ
セキュリティテストの自動化は、もはや大企業だけの話ではありません。OSSツールの充実により、小規模チームでも即日導入が可能です。
- まずSAST+SCAから始める:SemgrepとTrivyをGitHub Actionsに追加するだけで、コミットごとに脆弱性チェックが走る
- 段階的にDASTとファジングを追加:ステージング環境でのOWASP ZAPスキャンを次のステップとして導入する
- 自動化は「人間の代替」ではなく「人間の強化」:既知の脆弱性を自動で潰し、人間はビジネスロジックの検証に集中する
まずは明日のPRから、Semgrepを1つだけ追加してみてください。たった数行のYAMLで、セキュリティの第一歩が踏み出せます。













