testing-security について
コードベースや Web アプリを監査するためのセキュリティテストスキルです。動的・静的解析、依存関係、シークレットのスキャンを組み合わせ、CI/CDやデプロイ前の確認、定期監査に対応します。
主な機能
- 01OWASP ZAP と Nuclei による動的スキャン
- 02Semgrep と Bandit による静的解析
- 03Snyk と Trivy による依存関係・コンテナのスキャン
- 04ファイルと Git 履歴のシークレット検出
- 05スクリプトでのスキャンツール連携
活用シーン
- 01プルリクエストのコード問題とシークレット漏えいの確認
- 02デプロイ前のステージング Web アプリのスキャン
- 03依存関係とコンテナイメージの脆弱性監査
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ alphaonedev/ openclaw-graph --skill testing-securityインストール後、Claude Code で/testing-securityを入力して読み込まれたか確認します。
詳細
セキュリティテスト
目的
このスキルは、DAST ツール(OWASP ZAP、Nuclei)、SAST ツール(Semgrep、Bandit)、SCA ツール(Snyk、Trivy)、およびシークレットスキャナー(detect-secrets、TruffleHog)を統合してセキュリティテストを自動化し、コード、アプリケーション、シークレットに含まれる脆弱性を特定します。
使用するタイミング
CI/CD パイプライン、デプロイ前、または定期的な監査でこのスキルを使用します。Web アプリ、API、またはセキュリティ上の欠陥が侵害につながる可能性のある Python、Java、JavaScript などの言語で書かれたコードベースのあるプロジェクトに最適です。
主な機能
- DAST:OWASP ZAP を実行して Web アプリをアクティブスキャンし、XSS や SQLi などの問題を検出します。カスタムの脆弱性テンプレートには Nuclei を使用します。
- SAST:Semgrep を実行してパターンベースのコード解析(例:YAML ルールセット)を行うか、安全でないインポートなど Python 固有の問題には Bandit を使用します。
- SCA:Snyk を活用し、SBOM 解析を通じて既知の CVE がないか依存関係をスキャンします。脆弱性データベースを使用したコンテナイメージのスキャンには Trivy を使用します。
- シークレットの検出:detect-secrets を適用して API キーなどのパターンがないかファイルをスキャンします。公開されたシークレットを見つけるには、TruffleHog で Git の履歴をスキャンします。
- 統合:ツールを単一のワークフローにまとめます。たとえば、コードの変更に対して SAST を実行し、ステージング環境に対して DAST を実行します。
使用パターン
認証には常に環境変数を使ってツールを設定します(例:OWASP ZAP の $ZAP_API_KEY、Snyk の $SNYK_TOKEN)。新しいプロジェクトではまずベースラインスキャンを行い、その後スクリプトで自動化します。
- パターン 1:CI/CD では、プルリクエストで SAST を、ビルドで DAST を実行します。例:GitHub Actions を使って差分ファイルに対して Semgrep を実行します。
- パターン 2:ローカルテストでは、ツールを順番につなげます。まず Docker イメージに対して Trivy を実行し、次に URL に対して Nuclei を実行します。
- 例 1:Python リポジトリの SAST とシークレットをスキャンするには、ツールをインストールし、ファイルに対して Bandit を実行してから detect-secrets を実行します。解析用に結果を JSON レポートに出力します。
- 例 2:Web アプリで DAST を実行するには、OWASP ZAP をデーモンモードで起動し、
zap-cliを使って URL をスキャンしてから、特定のエクスプロイトを対象に Nuclei を実行します。
主なコマンド/API
スクリプトやターミナルでは次のコマンドをそのまま使用します。依存関係がインストールされていることを確認してください(例:pip または Docker を使用)。
- OWASP ZAP(DAST):
zap.sh -daemon -port 8080で起動し、続いてzap-cli -p 8080 quick-scan --spider https://target.com --report htmlでスキャンします。API エンドポイント:$ZAP_API_KEYを指定して/JSON/core/action/newSession/に POST します。 - Nuclei(DAST):
nuclei -t templates/ -u https://target.com -o results.txtを実行します。重大度レベルを設定したnuclei-config.yamlなどの設定ファイルを使用します。 - Semgrep(SAST):
semgrep --config p/default --lang python .を実行します。.semgrep.ymlファイルでカスタマイズします:rules: - id: no-os-system patterns: - pattern: os.system(...)。 - Bandit(SAST):コマンド:
bandit -r /path/to/code -f json。-x tests/でパスを除外します。 - Snyk(SCA):
$SNYK_TOKENで認証してから、snyk test --file=requirements.txtを実行します。API:プロジェクト一覧の取得にはhttps://snyk.io/api/v1/org/{orgId}/projectsに GET します。 - Trivy(SCA):イメージをスキャンします:
trivy image myimage:latest --exit-code 1 --severity CRITICAL。.trivy.yamlのignoreUnfixed: trueで設定します。 - detect-secrets(シークレット):
detect-secrets scan > .secrets.baselineを実行します。Git フックではdetect-secrets hook --baseline .secrets.baselineと併用します。 - TruffleHog(シークレット):コマンド:
trufflehog git https://github.com/repo --since-commit HEAD~1。パターンを指定するには--regexで絞り込みます。
統合に関する注意
スクリプト、または Jenkins や GitHub Actions などのオーケストレーションツールを通じて統合し、連携のために出力を JSON として渡します。認証には $TRIVY_USERNAME や $TRIVY_PASSWORD などの環境変数を設定します。分離して実行するには、Docker イメージ(例:owasp/zap2docker-stable)を使用します。設定形式:Semgrep ルールには YAML(例:{ patterns: [pattern: "regex"] })、Snyk レポートには JSON を使用します。互換性を損なう変更を避けるため、ツールのバージョンを固定してください(例:Semgrep v0.100.0)。
エラー処理
各コマンドの実行後に終了コードを確認します(例:Semgrep は検出結果があるとゼロ以外を返します)。OWASP ZAP の「error」キーを含む JSON レスポンスのように、標準出力からエラーを解析します。よくある問題:DAST でのネットワークエラー — zap-cli --retries 3 で再試行します。認証の失敗 — 環境変数を確認します(例:$SNYK_TOKEN が無効な場合、「Auth error」と出力されます)。すべての出力をファイルに記録し、スクリプトでは try-catch で処理します。たとえば、Bash では zap-cli quick-scan || echo "Scan failed: $?" >> error.log のようにします。API 呼び出しでは、HTTP ステータスコード(例:未認証を示す 401)を確認します。
グラフの関係
- 関連:組み合わせたワークフローで unit-testing や integration-testing のスキルにリンクするなど、「testing」クラスターに関連します。
- 依存:DAST には OWASP ZAP、SAST には Semgrep が必要です。
- 統合:SCA には Snyk API、バージョン管理システム内のシークレットには TruffleHog と統合します。