sast-semgrep について
Semgrep による静的アプリケーションセキュリティテストのスキルで、開発・セキュリティチームを対象とします。コードをスキャンし、重大度や OWASP/CWE に基づいて結果を分類します。修正ガイド、自作ルールの手順、CI/CD の例も含みます。
主な機能
- 01コードのスキャンと重大度分類
- 02OWASP Top 10 と CWE への対応付け
- 03変更ファイルを対象にしたスキャン
- 04優先順位付きの修正ガイダンス
- 05カスタムルールの作成とテスト
- 06JSON または SARIF 形式で出力
活用シーン
- 01コミットやプルリクエストのセキュリティゲート
- 02コードベースのセキュリティ基準作成
- 03組織固有の検出ルールの作成
- 04スキャン結果のセキュリティダッシュボード連携
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ agentsecops/ secopsagentkit --skill sast-semgrepインストール後、Claude Code で/sast-semgrepを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
assets/rule_template.yamlsemgrep_config.yamlassets/ci_config_examples/github-actions.ymlgitlab-ci.ymljenkins.groovyreferences/owasp_cwe_mapping.mdremediation_guide.mdrule_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:初回のセキュリティスキャン
- コードベースで使用されている主要な言語を特定します
- 適切なルールセットを指定して
scripts/semgrep_scan.pyを実行します - 検出結果を解析し、重大度(CRITICAL、HIGH、MEDIUM、LOW)で分類します
- 検出結果を OWASP Top 10 および CWE のカテゴリに対応付けます
- 優先順位を付けた修正レポートを作成します
ワークフロー 2:セキュリティコードレビュー
- プルリクエストまたはコミットに対して、変更されたファイルを対象にスキャンを実行します
semgrep --diffを使用して、変更されたコードのみをスキャンします- 重大度の高い検出結果を、マージを阻止する問題として扱います
references/remediation_guide.mdの修正ガイダンスをインラインで提示します- 検出結果をセキュアコーディングのパターンに関連付けます
ワークフロー 3:カスタムルールの開発
- 検出対象となる、組織固有のセキュリティパターンを特定します
assets/rule_template.yamlを使用して、YAML 形式で Semgrep のカスタムルールを作成します- 既知の脆弱なコードサンプルを使ってルールをテストします
- カスタムルールを CI/CD パイプラインに統合します
references/custom_rules.mdにルールを記録します
ワークフロー 4:CI/CD への統合
assets/ci_config_examples/を使用して、Semgrep を CI/CD パイプラインに追加します- プルリクエスト向けのベースラインスキャンを設定します
- 重大度のしきい値を設定します(CRITICAL/HIGH の場合は失敗させます)
- セキュリティダッシュボード向けに SARIF 出力を生成します
- 脆弱性の検出数、修正率、誤検出などの指標を追跡します
セキュリティ上の考慮事項
-
機密データの取り扱い: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 を参照してください。
ベストプラクティス
- まずベースラインを確立する:ゲートを適用する前に、セキュリティベースラインを確立します
- 段階的に導入する:まず HIGH/CRITICAL から始め、時間をかけて MEDIUM に範囲を広げます
- 開発者のトレーニング:よくある脆弱性とその修正方法についてチームに周知します
- ルールのメンテナンス:ルールセットを定期的に更新し、使用する技術スタックに合わせて調整します
- 指標の追跡:脆弱性の傾向、MTTR、誤検知率を監視します
- 多層防御:DAST、SCA、手動のコードレビューと組み合わせます