mcpField
S
sast-semgrep

sast-semgrep

github.com/agentsecopsセキュリティ22838 回インストール28 週間前に更新
リポジトリ

sast-semgrep について

Semgrep による静的アプリケーションセキュリティテストのスキルで、開発・セキュリティチームを対象とします。コードをスキャンし、重大度や OWASP/CWE に基づいて結果を分類します。修正ガイド、自作ルールの手順、CI/CD の例も含みます。

主な機能

  1. 01コードのスキャンと重大度分類
  2. 02OWASP Top 10 と CWE への対応付け
  3. 03変更ファイルを対象にしたスキャン
  4. 04優先順位付きの修正ガイダンス
  5. 05カスタムルールの作成とテスト
  6. 06JSON または SARIF 形式で出力

活用シーン

  1. 01コミットやプルリクエストのセキュリティゲート
  2. 02コードベースのセキュリティ基準作成
  3. 03組織固有の検出ルールの作成
  4. 04スキャン結果のセキュリティダッシュボード連携

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/agentsecops/secopsagentkit --skill sast-semgrep

インストール後、Claude Code で/sast-semgrepを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

assets/
rule_template.yaml
semgrep_config.yaml
assets/ci_config_examples/
github-actions.yml
gitlab-ci.yml
jenkins.groovy
references/
owasp_cwe_mapping.md
remediation_guide.md
rule_library.md

詳細

Semgrep による SAST

概要

高速なオープンソースの静的解析ツールである Semgrep を使用して、包括的な静的アプリケーションセキュリティテストを実施します。このスキルでは、脆弱性の自動検出、セキュリティコードレビューのワークフロー、OWASP Top 10 および CWE 標準に基づく修正ガイダンスを提供します。

クイックスタート

コードベースをスキャンして、セキュリティ上の脆弱性を検出します。

semgrep --config=auto --severity=ERROR --severity=WARNING /path/to/code

OWASP Top 10 ルールセットを指定して実行します。

semgrep --config="p/owasp-top-ten" /path/to/code

主なワークフロー

ワークフロー 1:初回のセキュリティスキャン
  1. コードベースで使用されている主要な言語を特定します
  2. 適切なルールセットを指定して scripts/semgrep_scan.py を実行します
  3. 検出結果を解析し、重大度(CRITICAL、HIGH、MEDIUM、LOW)で分類します
  4. 検出結果を OWASP Top 10 および CWE のカテゴリに対応付けます
  5. 優先順位を付けた修正レポートを作成します
ワークフロー 2:セキュリティコードレビュー
  1. プルリクエストまたはコミットに対して、変更されたファイルを対象にスキャンを実行します
  2. semgrep --diff を使用して、変更されたコードのみをスキャンします
  3. 重大度の高い検出結果を、マージを阻止する問題として扱います
  4. references/remediation_guide.md の修正ガイダンスをインラインで提示します
  5. 検出結果をセキュアコーディングのパターンに関連付けます
ワークフロー 3:カスタムルールの開発
  1. 検出対象となる、組織固有のセキュリティパターンを特定します
  2. assets/rule_template.yaml を使用して、YAML 形式で Semgrep のカスタムルールを作成します
  3. 既知の脆弱なコードサンプルを使ってルールをテストします
  4. カスタムルールを CI/CD パイプラインに統合します
  5. references/custom_rules.md にルールを記録します
ワークフロー 4:CI/CD への統合
  1. assets/ci_config_examples/ を使用して、Semgrep を CI/CD パイプラインに追加します
  2. プルリクエスト向けのベースラインスキャンを設定します
  3. 重大度のしきい値を設定します(CRITICAL/HIGH の場合は失敗させます)
  4. セキュリティダッシュボード向けに SARIF 出力を生成します
  5. 脆弱性の検出数、修正率、誤検出などの指標を追跡します

セキュリティ上の考慮事項

  • 機密データの取り扱い:Semgrep はコードをローカルでスキャンします。スキャン結果からシークレットや独自のコードパターンが漏えいしないようにしてください。出力を制限するには --max-lines-per-finding を使用します。

  • アクセス制御:Semgrep のスキャンには、ソースコードへの読み取りアクセスが必要です。スキャン結果へのアクセスを、認可されたセキュリティチームおよび開発チームに制限してください。

  • 監査ログ:コンプライアンス監査に備えて、すべてのスキャン実行について、タイムスタンプ、ユーザー、コミットハッシュ、検出数を記録します。

  • コンプライアンス:SAST スキャンは、SOC2、PCI-DSS、GDPR のコンプライアンス要件への対応を支援します。スキャン履歴と修正状況を維持してください。

  • 安全なデフォルト設定:バランスの取れた検出には --config=auto を使用します。セキュリティが重要なアプリケーションには、包括的にカバーする --config="p/security-audit" を使用します。

言語サポート

Semgrep は、以下を含む 30 以上の言語をサポートしています。

  • Web:JavaScript、TypeScript、Python、Ruby、PHP、Java、C#、Go
  • モバイル:Swift、Kotlin、Java(Android)
  • インフラストラクチャ:Terraform、Dockerfile、YAML、JSON
  • その他:C、C++、Rust、Scala、Solidity

同梱リソース

スクリプト
  • scripts/semgrep_scan.py - OWASP/CWE への対応付けとレポート作成に対応した高機能スキャン
  • scripts/baseline_scan.sh - CI/CD 向けの迅速なベースラインスキャン
  • scripts/diff_scan.sh - 変更されたファイルのみをスキャン(PR 向け)
リファレンス
  • references/owasp_cwe_mapping.md - Semgrep ルールを含む、OWASP Top 10 と CWE の対応表
  • references/remediation_guide.md - カテゴリ別の脆弱性修正パターン
  • references/rule_library.md - 役立つ Semgrep ルールセットをまとめた一覧
アセット
  • assets/rule_template.yaml - Semgrep のカスタムルールを作成するためのテンプレート
  • assets/ci_config_examples/ - CI/CD 統合の例(GitHub Actions、GitLab CI)
  • assets/semgrep_config.yaml - 推奨する Semgrep 設定

よくあるパターン

パターン 1:毎日のセキュリティベースラインスキャン
# Run comprehensive scan and generate report
scripts/semgrep_scan.py --config security-audit \
  --output results.json \
  --format json \
  --severity HIGH CRITICAL
パターン 2:プルリクエストのセキュリティゲート
# Scan only changed files, fail on HIGH/CRITICAL
scripts/diff_scan.sh --fail-on high \
  --base-branch main \
  --output sarif
パターン 3:脆弱性の調査
# Search for specific vulnerability patterns
semgrep --config "r/javascript.lang.security.audit.xss" \
  --json /path/to/code | jq '.results'
パターン 4:カスタムルールの検証
# Test custom rule against vulnerable samples
semgrep --config assets/custom_rules.yaml \
  --test tests/vulnerable_samples/

統合ポイント

CI/CD 統合
  • GitHub Actions:SARIF アップロードとともに semgrep/semgrep-action@v1 を使用します
  • GitLab CI:セキュリティスキャンジョブとして実行し、アーティファクトレポートを出力します
  • Jenkins:ビルドステップとして実行し、品質ゲートと統合します
  • pre-commit フック:ステージング済みファイルを軽量スキャンします

すぐに使える設定については、assets/ci_config_examples/ を参照してください。

セキュリティツールとの統合
  • SIEM/SOAR:取り込み用に検出結果を JSON/SARIF 形式でエクスポートします
  • 脆弱性管理:Jira、DefectDojo、または ThreadFix と統合します
  • IDE 統合:Semgrep IDE プラグインを使用してリアルタイムで検出します
  • シークレットスキャン:trufflehog、gitleaks などのツールと組み合わせます
SDLC との統合
  • 要件フェーズ:セキュリティ要件とカスタムルールを定義します
  • 開発:IDE プラグインがリアルタイムでフィードバックを提供します
  • コードレビュー:PR ワークフローでセキュリティレビューを自動化します
  • テスト:セキュリティテストフレームワークと統合します
  • デプロイ:本番環境へのリリース前に最終的なセキュリティゲートを設けます

重大度の分類

Semgrep の検出結果は、重大度に応じて分類されます。

  • CRITICAL:悪用可能な脆弱性(SQLi、RCE、認証バイパス)
  • HIGH:重大なセキュリティリスク(XSS、CSRF、機密データの漏えい)
  • MEDIUM:セキュリティ上の弱点(脆弱な暗号化、検証の欠如)
  • LOW:セキュリティ上の影響を伴うコード品質の問題
  • INFO:セキュリティのベストプラクティスに関する推奨事項

パフォーマンスの最適化

大規模なコードベースの場合:

# Use --jobs for parallel scanning
semgrep --config auto --jobs 4

# Exclude vendor/test code
semgrep --config auto --exclude "vendor/" --exclude "test/"

# Use lightweight rulesets for faster feedback
semgrep --config "p/owasp-top-ten" --exclude-rule "generic.*"

トラブルシューティング

問題:誤検知が多すぎる

解決策:

  • --exclude-rule を使用して、誤検知の多いルールを無効にします
  • .semgrepignore ファイルを作成し、誤検知につながるパターンを除外します
  • --severity によるフィルタリングでルールを調整します
  • 確認済みの誤検知には、正当な理由を添えて # nosemgrep コメントを追加します
問題:スキャンに時間がかかりすぎる

解決策:

  • ベンダーコードや生成コードには --exclude を使用します
  • 並列処理のために --jobs を増やします
  • --config=auto の代わりに、対象を絞ったルールセットを使用します
  • --diff を使用して増分スキャンを実行します
問題:脆弱性が検出されない

解決策:

  • 包括的なルールセットとして p/security-audit または p/owasp-top-ten を使用します
  • 特化したルールについては references/rule_library.md を参照してください
  • 組織固有のパターンに対応するカスタムルールを作成します
  • 動的解析(DAST)や依存関係スキャンと組み合わせます

高度な使い方

カスタムルールの作成

効果的な Semgrep ルールの作成方法については、references/rule_library.md を参照してください。 出発点として assets/rule_template.yaml を使用してください。

ルール構造の例:

rules:
  - id: custom-sql-injection
    patterns:
      - pattern: execute($QUERY)
      - pattern-inside: |
          $QUERY = $USER_INPUT + ...
    message: Potential SQL injection from user input concatenation
    severity: ERROR
    languages: [python]
    metadata:
      cwe: "CWE-89"
      owasp: "A03:2021-Injection"
OWASP Top 10 の対応範囲

このスキルは、OWASP Top 10 2021 のすべてのカテゴリを検出します。 対応範囲の全体像については、references/owasp_cwe_mapping.md を参照してください。

ベストプラクティス

  1. まずベースラインを確立する:ゲートを適用する前に、セキュリティベースラインを確立します
  2. 段階的に導入する:まず HIGH/CRITICAL から始め、時間をかけて MEDIUM に範囲を広げます
  3. 開発者のトレーニング:よくある脆弱性とその修正方法についてチームに周知します
  4. ルールのメンテナンス:ルールセットを定期的に更新し、使用する技術スタックに合わせて調整します
  5. 指標の追跡:脆弱性の傾向、MTTR、誤検知率を監視します
  6. 多層防御:DAST、SCA、手動のコードレビューと組み合わせます

参考資料

コメント