mcpField
O
openclaw-audit-watchdog

openclaw-audit-watchdog

github.com/prompt-securityセキュリティ1.1k751 回インストール今日更新
リポジトリ

openclaw-audit-watchdog について

openclaw-audit-watchdogは、OpenClawのセキュリティ監査を定期実行し、指定したダイレクトメッセージ宛てに結果を送信します。設定した場合はメールにも対応し、継続的に監査結果を確認する運用者向けです。

主な機能

  1. 01標準および詳細なセキュリティ監査
  2. 02重要度別の件数と主な結果の要約
  3. 03OpenClaw Cronによる定期ジョブ設定
  4. 04指定したDM宛てへのレポート送信
  5. 05任意のメール送信と検出項目の抑制

活用シーン

  1. 01ホストの監査レポートを毎日受信
  2. 02複数環境で異なるレポート宛先を設定
  3. 03確認済み監査結果の抑制

インストール

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

$npx skills add https://github.com/prompt-security/clawsec --skill openclaw-audit-watchdog

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

同梱ファイル

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

.clawhubignore
CHANGELOG.md
README.md
skill.json
examples/
README.md
security-audit-config.example.json
scripts/
codex_review.sh
load_suppression_config.mjs
render_report.mjs
run_audit_and_format.sh
runner.sh
send_smtp.mjs
sendmail_report.sh
setup_cron.mjs
test/
E2E-TEST-RESULTS.md
empty-suppressions.json
invalid-json.json
malformed-config.json
render_report_suppression.test.mjs
setup_cron.test.mjs
suppression_config_fuzz.test.mjs
suppression_config.test.mjs

詳細

プロンプトセキュリティ監査(openclaw)

Vercel Skills のインストール

このハーネスには、Vercel Skills CLI を使用してインストールしてください。

npx skills add prompt-security/clawsec --skill openclaw-audit-watchdog -a openclaw -y

インストール方法

openclaw-audit-watchdog は、次の 2 つの方法で入手できます。

方法 A:ClawSec Suite にバンドル(推奨)

clawsec-suite をインストール済みの場合、すでに含まれている可能性があります!

openclaw-audit-watchdog は ClawSec Suite にバンドルされており、重要なセキュリティ監査機能を自動で提供します。Suite をインストールすると、audit watchdog がまだインストールされていない場合は、バンドルされたコピーからデプロイされます。

メリット:

  • 便利:個別のダウンロードは不要です
  • 標準の場所:~/.openclaw/skills/openclaw-audit-watchdog/ にインストールされます
  • 保護:audit watchdog がすでにインストールされている場合、上書きされません
  • 検証は 1 回だけ:Suite パッケージの一部として整合性がチェックされます
方法 B:単体インストール(このページ)

Suite 全体を使わずに、openclaw-audit-watchdog を単独でインストールします。

単体インストールを使用するケース:

  • audit watchdog だけが必要な場合(Suite の他のコンポーネントは不要)
  • Suite をインストールする前にインストールしたい場合
  • audit watchdog のインストールを明示的に制御したい場合

メリット:

  • 軽量なインストール
  • Suite から独立
  • インストールプロセスを直接制御できます

単体インストールでは通常、公開されている GitHub リリースからネットワーク経由でダウンロードします。本番ホストにインストールする前に、リリース元とアーカイブの整合性を確認してください。

単体インストールの手順については、以下をご覧ください。


リリース成果物の検証

単体インストールの場合、SKILL.md、skill.json、またはアーカイブを信頼する前に、署名付きリリースマニフェストを検証してください。skill.json ファイルはパッケージメタデータ/SBOM のソースであり、リリースパイプラインは ClawSec リリースキーを使用して checksums.json に署名します。

set -euo pipefail

SKILL_NAME="openclaw-audit-watchdog"
VERSION="0.1.9"
REPO="prompt-security/clawsec"
TAG="${SKILL_NAME}-v${VERSION}"
BASE="https://github.com/${REPO}/releases/download/${TAG}"
ZIP_NAME="${SKILL_NAME}-v${VERSION}.zip"
TMP_DIR="$(mktemp -d)"
trap 'rm -rf "$TMP_DIR"' EXIT

RELEASE_PUBKEY_SHA256="711424e4535f84093fefb024cd1ca4ec87439e53907b305b79a631d5befba9c8"

curl -fsSL "$BASE/checksums.json" -o "$TMP_DIR/checksums.json"
curl -fsSL "$BASE/checksums.sig" -o "$TMP_DIR/checksums.sig"
curl -fsSL "$BASE/signing-public.pem" -o "$TMP_DIR/signing-public.pem"
curl -fsSL "$BASE/$ZIP_NAME" -o "$TMP_DIR/$ZIP_NAME"
curl -fsSL "$BASE/SKILL.md" -o "$TMP_DIR/SKILL.md"
curl -fsSL "$BASE/skill.json" -o "$TMP_DIR/skill.json"

ACTUAL_PUBKEY_SHA256="$(openssl pkey -pubin -in "$TMP_DIR/signing-public.pem" -outform DER | shasum -a 256 | awk '{print $1}')"
if [ "$ACTUAL_PUBKEY_SHA256" != "$RELEASE_PUBKEY_SHA256" ]; then
  echo "ERROR: signing-public.pem fingerprint mismatch" >&2
  exit 1
fi

openssl base64 -d -A -in "$TMP_DIR/checksums.sig" -out "$TMP_DIR/checksums.sig.bin"
openssl pkeyutl -verify -rawin -pubin \
  -inkey "$TMP_DIR/signing-public.pem" \
  -sigfile "$TMP_DIR/checksums.sig.bin" \
  -in "$TMP_DIR/checksums.json" >/dev/null

hash_file() {
  if command -v shasum >/dev/null 2>&1; then
    shasum -a 256 "$1" | awk '{print $1}'
  else
    sha256sum "$1" | awk '{print $1}'
  fi
}

verify_manifest_file() {
  asset="$1"
  path="$2"
  expected="$(jq -r --arg asset "$asset" '.files[$asset].sha256 // empty' "$TMP_DIR/checksums.json")"
  if [ -z "$expected" ]; then
    echo "ERROR: checksums.json missing $asset" >&2
    exit 1
  fi
  actual="$(hash_file "$path")"
  if [ "$actual" != "$expected" ]; then
    echo "ERROR: checksum mismatch for $asset" >&2
    exit 1
  fi
}

expected_archive="$(jq -r '.archive.sha256 // empty' "$TMP_DIR/checksums.json")"
if [ -z "$expected_archive" ]; then
  echo "ERROR: checksums.json missing archive.sha256" >&2
  exit 1
fi
actual_archive="$(hash_file "$TMP_DIR/$ZIP_NAME")"
if [ "$actual_archive" != "$expected_archive" ]; then
  echo "ERROR: archive checksum mismatch" >&2
  exit 1
fi

verify_manifest_file "SKILL.md" "$TMP_DIR/SKILL.md"
verify_manifest_file "skill.json" "$TMP_DIR/skill.json"

echo "Signed release manifest, archive, SKILL.md, and skill.json verified."

検証が成功してから、アーカイブをインストールまたは展開してください。

運用要件

必須ランタイム:

  • openclaw
  • node
  • bash

任意のランタイム:

  • ローカル MTA 配信には sendmail
  • PROMPTSEC_SMTP_HOST/PROMPTSEC_SMTP_PORT による SMTP リレー
  • PROMPTSEC_GIT_PULL=1 の場合のみ git

このスキルはデフォルトでは always で有効になりませんが、呼び出すと無人実行の openclaw cron ジョブを作成または更新します。有効にする前に、設定された DM/メールの宛先と、ホストの openclaw/SMTP 環境を確認してください。

目的

毎日の cron ジョブを作成(または更新)します。このジョブは次の処理を行います。

  1. 次を実行します。
  • openclaw security audit --json
  • openclaw security audit --deep --json
  1. 検出結果(critical/warn/info と主な検出結果)を要約します

  2. 次の宛先にレポートを送信します。

  • ユーザーが選択した DM の宛先(チャンネル+受信者 ID/ハンドル)
  • PROMPTSEC_EMAIL_TO が設定されている場合のみ、任意のメール宛先

デフォルトのスケジュール:選択したタイムゾーンで、毎日 23:00(午後 11 時)。

配信:

  • 設定された宛先への DM
  • 明示的な宛先が設定されている場合のみ、任意のメール
  • openclaw cron による永続化(無人の定期実行ジョブ)

使用例

例 1:クイックスタート(環境変数)

自動化/MDM によるデプロイでは、呼び出す前に環境変数を設定してください。

export PROMPTSEC_DM_CHANNEL="telegram"
export PROMPTSEC_DM_TO="@yourhandle"
export PROMPTSEC_EMAIL_TO="[email protected]" # optional
export PROMPTSEC_TZ="America/New_York"
export PROMPTSEC_HOST_LABEL="prod-server-01"

# Then invoke the skill
/openclaw-audit-watchdog

このスキルは、プロンプトを表示せずに cron ジョブを自動で設定し、作成します。PROMPTSEC_EMAIL_TO を省略した場合、ジョブは DM のみになります。

例 2:対話形式でのセットアップ

環境変数が設定されていない場合、スキルは必要最低限の情報を尋ねます。

User: /openclaw-audit-watchdog

Agent: Setting up daily security audit watchdog...
       What channel should I use for delivery? (e.g., telegram, slack)
User: telegram

Agent: What's the recipient ID or handle?
User: @myhandle

Agent: Optional email recipient? (leave blank to disable email)
User: [email protected]

Agent: Which timezone for the 23:00 daily run? (default: UTC)
User: America/Los_Angeles

Agent: ✓ Created cron job "Daily security audit (Prompt Security)"
       Schedule: Daily at 23:00 America/Los_Angeles
       Delivery: telegram → @myhandle, email → [email protected]
例 3:既存ジョブの更新

ジョブがすでに存在する場合、重複して作成せずに更新します。

User: /openclaw-audit-watchdog

Agent: Found existing "Daily security audit (Prompt Security)" job.
       Current: Daily at 23:00 UTC → telegram:@oldhandle

       Update delivery target? (current: telegram:@oldhandle)
User: slack:#security-alerts

Agent: ✓ Updated cron job
       Schedule: Daily at 23:00 UTC
       Delivery: slack:#security-alerts
例 4:配信される内容

スケジュールされた時刻に、毎日次のようなレポートが届きます。

🔭 Daily Security Audit Report
Host: prod-server-01
Time: 2026-02-16 23:00:00 America/New_York

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
SUMMARY
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
✓ Standard Audit: 12 checks passed, 2 warnings
✓ Deep Audit: 8 probes passed, 1 critical

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
CRITICAL FINDINGS
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
[CRIT-001] Unencrypted API Keys Detected
→ Remediation: Move credentials to encrypted vault or use environment variables

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
WARNINGS
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
[WARN-003] Outdated Dependencies Found
→ Remediation: Run `openclaw security audit --fix` to update

[WARN-007] Weak Permission on Config File
→ Remediation: chmod 600 ~/.openclaw/config.json

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Run `openclaw security audit --deep` for full details.
例 5:スケジュールのカスタマイズ

別のスケジュールにしたい場合は、呼び出す前に設定してください。

# Run every 6 hours instead of daily
export PROMPTSEC_SCHEDULE="0 */6 * * *"
/openclaw-audit-watchdog
例 6:複数の環境

複数のサーバーを管理する場合は、異なるホストラベルを使用してください。

# On dev server
export PROMPTSEC_HOST_LABEL="dev-01"
export PROMPTSEC_DM_TO="@dev-team"
/openclaw-audit-watchdog

# On prod server
export PROMPTSEC_HOST_LABEL="prod-01"
export PROMPTSEC_DM_TO="@oncall"
/openclaw-audit-watchdog

それぞれのレポートには、ホストが明確に識別できる情報が記載されます。

例 7:既知の検出結果を抑制する

確認して承認済みの監査検出結果を抑制するには、--enable-suppressions フラグを渡し、設定ファイルに "enabledFor": ["audit"] というセンチネルが含まれていることを確認してください。

# Create or edit the suppression config
cat > ~/.openclaw/security-audit.json <<'JSON'
{
  "enabledFor": ["audit"],
  "suppressions": [
    {
      "checkId": "skills.code_safety",
      "skill": "clawsec-suite",
      "reason": "First-party security tooling — reviewed by security team",
      "suppressedAt": "2026-02-15"
    }
  ]
}
JSON

# Run with suppressions enabled
/openclaw-audit-watchdog --enable-suppressions

抑制された検出結果は、レポートの情報セクションには引き続き表示されますが、重大および警告の合計からは除外されます。

抑制/許可リスト

監査パイプラインは、確認済みの検出結果を管理するためのオプトイン方式の抑制機能をサポートしています。抑制機能は多層防御方式で有効化され、独立した2つの条件をどちらも満たす必要があります。

有効化の要件
  1. CLI フラグ: 実行時に --enable-suppressions フラグを渡す必要があります。
  2. 設定センチネル: 設定ファイルに "enabledFor" が含まれ、その配列に "audit" が含まれている必要があります。

いずれかの条件が欠けている場合、すべての検出結果が通常どおり報告され、抑制リストは無視されます。

設定ファイルの解決(4段階)
  1. 明示的に指定した --config <path> 引数
  2. OPENCLAW_AUDIT_CONFIG 環境変数
  3. ~/.openclaw/security-audit.json
  4. .clawsec/allowlist.json
設定形式
{
  "enabledFor": ["audit"],
  "suppressions": [
    {
      "checkId": "skills.code_safety",
      "skill": "clawsec-suite",
      "reason": "First-party security tooling — reviewed by security team",
      "suppressedAt": "2026-02-15"
    }
  ]
}
センチネルの動作
  • "enabledFor": ["audit"] -- 監査の抑制が有効になります(--enable-suppressions フラグも必要です)
  • "enabledFor": ["advisory"] -- アドバイザリーパイプラインの抑制のみ有効になります(監査には影響しません)
  • "enabledFor": ["audit", "advisory"] -- 両方のパイプラインで抑制が適用されます
  • enabledFor がない、または空の場合 -- 抑制は有効になりません(安全なデフォルト)
照合ルール
  • checkId: 監査検出結果のチェック識別子と完全一致します(例:skills.code_safety)
  • skill: 検出結果に含まれるスキル名と、大文字と小文字を区別せずに照合します
  • 検出結果を抑制するには、両方のフィールドが一致する必要があります

インストール手順(対話式)

プロビジョニング(MDM 対応):プロンプトを表示しない環境変数の使用を優先してください。

必須の環境変数:

  • PROMPTSEC_DM_CHANNEL(例:telegram)
  • PROMPTSEC_DM_TO(受信者 ID)

任意の環境変数:

  • PROMPTSEC_EMAIL_TO(メールの受信者。未設定の場合、メール配信は無効のままです)
  • PROMPTSEC_TZ(IANA タイムゾーン。デフォルトは UTC)
  • PROMPTSEC_HOST_LABEL(レポートに含めるラベル。デフォルトでは hostname を使用します)
  • PROMPTSEC_INSTALL_DIR(cron ペイロードがランナーの実行前に cd するために使用する固定パス。デフォルト:~/.config/security-checkup)
  • PROMPTSEC_GIT_PULL=1(Git からインストールした場合、ランナーが git pull --ff-only を実行します)
  • OPENCLAW_AUDIT_CONFIG(cron ペイロードに保存する抑制設定のパス)
  • PROMPTSEC_SENDMAIL_BIN(明示的に指定する sendmail のパス)
  • PROMPTSEC_SMTP_HOST、PROMPTSEC_SMTP_PORT、PROMPTSEC_SMTP_HELO、PROMPTSEC_SMTP_FROM(SMTP リレーの設定)

パスの展開ルール(重要):

  • bash/zsh では、PROMPTSEC_INSTALL_DIR="$HOME/.config/security-checkup"(または絶対パス)を使用してください。
  • '$HOME/.config/security-checkup' のように、単一引用符で囲んだリテラルは渡さないでください。
  • PowerShell では、次の指定を推奨します:$env:PROMPTSEC_INSTALL_DIR = Join-Path $HOME ".config/security-checkup"。
  • パスの解決に失敗した場合、セットアップはリテラルの $HOME ディレクトリ階層を作成せず、明確なエラーを表示して終了するようになりました。

環境変数またはデフォルト値が設定されていない場合に限り、最後の手段として対話式インストールを行います。プロンプトは最小限にしてください。DM の宛先は必須、メールは任意です。また、永続化を有効にする前に、簡潔な事前確認内容をユーザーに表示してください。

cron ジョブを作成する

cron ツールを使用して、次の設定でジョブを作成します。

  • schedule.kind="cron"
  • schedule.expr="0 23 * * *"
  • schedule.tz=<installer tz>
  • sessionTarget="isolated"
  • wakeMode="now"
  • payload.kind="agentTurn"
  • payload.deliver=true

ジョブを作成または更新する前に、次の内容を明記した事前確認を表示してください。

  • この操作により、無人で定期実行されるジョブが作成または更新されること
  • 必要なランタイム(openclaw、node、bash)
  • 設定済みの DM 宛先
  • メールが有効かどうか、および有効な場合は受信者
  • 実行時に使用するインストールディレクトリとタイムゾーン
ペイロードメッセージテンプレート (agentTurn)

分離実行に次のことを指示するペイロードメッセージを使用してジョブを作成します。

  1. 監査を実行する
  • 堅牢な解析のために JSON 出力を優先します:
    • openclaw security audit --json
    • openclaw security audit --deep --json
  1. 簡潔なテキストレポートをレンダリングする:

含める内容:

  • 利用可能な場合はタイムスタンプ + ホスト識別子
  • サマリー件数
  • 各 CRITICAL/WARN について: checkId + title + 1 行の修復方法
  • ディーププローブが失敗した場合: プローブのエラー行を含める
  1. レポートを配信する:
  • message ツールを使用して、選択したユーザーターゲットに DM を送信する
メール配信の要件

メール配信は任意です。PROMPTSEC_EMAIL_TO が設定されている場合にのみ、約束または試行してください。

PROMPTSEC_EMAIL_TO が設定されている場合は、次の優先順位で配信を試行します:

A) ローカルの sendmail 互換バイナリが利用可能な場合は、まずそれを使用します。

B) そうでない場合は、設定された SMTP リレーにフォールバックします:

  • PROMPTSEC_SMTP_HOST
  • PROMPTSEC_SMTP_PORT
  • 任意 PROMPTSEC_SMTP_HELO
  • 任意 PROMPTSEC_SMTP_FROM

どちらの経路も利用できない場合でも、ユーザーに DM を送信し、次の行を含めます:

  • "NOTE: could not deliver email to <PROMPTSEC_EMAIL_TO> via configured sendmail/SMTP path"

PROMPTSEC_EMAIL_TO が設定されていない場合、cron ペイロードは、デフォルトの受信者を暗示するのではなく、メールが無効であることを明示的に記述する必要があります。

冪等性 / 更新

新しいジョブを追加する前に:

  • cron.list(includeDisabled=true)
  • "Daily security audit" に一致する名前のジョブが存在する場合は、重複を追加するのではなくそれを更新します:
    • スケジュールの tz/expr を調整する
    • DM ターゲットを調整する

推奨される命名

  • ジョブ名: "Daily security audit (Prompt Security)"

最小推奨デフォルト (設定を自動変更しない)

cron のレポートは修正を提案するべきですが、それらを適用してはなりません。

明示的に求められない限り、openclaw security audit --fix を実行しないでください。

コメント