4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Claude Codeのsettings.jsonの安全性を、39項目で自動監査するスキル'/audit-settings'を作成した

4
Last updated at Posted at 2026-03-29

その他のClude Codeスキルはこちら:Claude Code 自作スキル集まとめ

はじめに

Claude Codeを使い込んでいくと、バンバン許可を出して、気づけばsettings.jsonallow リストがどんどん膨らんでいきます。

「あれも許可、これも許可」「今日も新しいプロジェクトを作ってさらに許可」「こっちはsettings.jsonに記載、あっちはsettings.local.jsonに記載」

そうやって追加しているうちに、気づけば複数プロジェクトに分散したsettings.jsonが10数個。親子で同じ権限が重複していたり、セットアップ時に一度だけ使ったコマンドがそのまま残っていたり。

その気持ち悪さがたまっていくと、Claude Codeに「今のSettingsで大丈夫か確認して」と、都度、問い合わせる日々。

結局、確認する行為自体をスキル化してしまえと、skill-creatorを使って、39項目で自動監査するスキル /audit-settings を作りました。

自分の設定を監査してみた

自分の環境で実行してみます。/audit-settingsと入力してもいいですし、「設定を見直して」と入力しても大丈夫です。

> 設定を見直して

すると、(私の環境では)10数個の設定ファイルを自動収集して階層構造を可視化し、監査項目のチェックが走ります。

検出された問題の例

実際に見つかった問題をいくつか紹介します。

書込+実行の重複リスク(重大)

Bash(bash run_web.sh) が allow
→ Claude は run_web.sh を Edit で書き換えてから実行可能
→ 任意コード実行と同等のリスク

スクリプトの実行を allow しつつ、そのスクリプトの編集が deny されていない場合、Claude がスクリプトを書き換えてから実行できてしまいます。これは意図的な設定のつもりでいたが、リスクとして認識できていませんでした。

危険なワイルドカード(重大)

// Project-Local  allow に...
"Bash(npm install *)"

npm install * が allow に入っていました。これだと任意のnpmパッケージをインストール可能です。悪意あるパッケージの実行リスクがあります。

提案された修正は「ask に移動するか、Bash(npm install)(引数なし、package.jsonベース)に限定」でした。

親子で大量の重複(改善)

MAA-Local から削除可能:
  - WebFetch(domain:github.com) — Global で WebFetch(無制限)許可済み
  - WebFetch(domain:api.github.com) — 同上
  - WebFetch(domain:raw.githubusercontent.com) — 同上
  ...(計11件)

Global で WebFetch(ドメイン制限なし)を許可しているのに、サブプロジェクトでドメイン別に11件も個別許可していました。全て不要な重複です。

監査結果サマリー

- 重大(即修正推奨): 1件
- 改善(時間のあるときに): 5件
- 情報(参考): 4件

全体のセキュリティは良好でしたが、重複の整理npm install の権限制限は対応が必要でした。

注意: 未監査の環境ではもっと多くの指摘があるでしょう。私の環境は過去に整理済みのため、検出数は少なめです。

/audit-settings スキルの全体像

以下は、skill-creatorを使って、Claude Codeに、あーでもない。こーでもない。と指示を出して作った仕組みです。

仕組み

settings.jsonsettings.local.json.mcp.json を一括で読み込み、39のチェック項目で分析してレポートを出力します。

多階層の継承関係を考慮した分析が特徴です。

Global (~/.claude/settings.json)
  └── Project / Project-Local
        ├── SubA / SubA-Local
        └── SubB / SubB-Local

Claude Codeの設定は親から子に継承され、deny は常に勝ちます(どの階層でdenyされても他のallowで上書きできません)。この仕組みを理解した上で、階層間の重複や矛盾を検出します。

4つの分析モード

ユーザーの依頼内容に応じて、レポートの深度を自動調整します。

依頼の例 モード 優先チェック項目
「セキュリティを確認して」 セキュリティ系 危険ワイルドカード、deny不足、自己改変保護
「MCP設定を見直して」 MCP系 ハードコード秘密情報、不審URL、危険コマンド
「重複を整理して」 重複整理系 親子重複、包含関係、削除後の状態表示
「設定を見直して」 全般 39項目を均等にチェック

チェック項目一覧

10カテゴリ、39項目をチェックします。

カテゴリ 項目数 主なチェック内容
重複 (A) 3 親階層重複、包含関係重複、空ファイル
パーミッション (B) 4 危険ワイルドカード、deny不足、自己改変保護、書込+実行
一時的権限 (C) 1 dpkg、apt、brew等の残留
サンドボックス (D) 4 未設定、危険コマンド除外、ドメイン過剰許可
環境変数 (E) 3 秘密情報、共有設定の露出、セキュリティ無効化
プラグイン (F) 3 無効残留、重複有効化、攻撃面
フック (H) 7 重複、タイムアウト、エラー処理、ネットワーク通信
JSON整合性 (J) 5 重複キー、typo、スキーマ、ファイル権限
MCP (M) 5 ハードコード秘密情報、不審URL、危険コマンド
クロス設定 (X) 4 allow/deny衝突、ask/deny衝突、モード昇格

検出結果は3段階の重大度で分類されます。

  • 重大(即修正推奨): MCP秘密情報、危険ワイルドカード、deny不足、自己改変の保護不足など
  • 改善(時間のあるときに): 重複整理、一時的権限の残留、フックのエラーハンドリングなど
  • 情報(参考): 空ファイル、プラグイン数、$schema未設定など

特に注意したいチェック項目

いくつか具体的に紹介します。

B1: 危険な広いワイルドカード

以下のようなパターンが allow にあると警告されます。

危険パターン リスク 推奨代替
Bash(python3 *) 任意スクリプト実行 .venv/bin/python3 -m * に限定
Bash(bash *) 任意シェル実行 具体的なスクリプトパスに限定
Bash(curl *) 任意URL通信 deny or ask
Bash(npm install *) 任意パッケージ ask に移動

B4: 自己改変の保護不足

Claude が自身の settings.jsonskills/** を書き換えられる状態は危険です。deny に以下を入れておくべきです。

"deny": [
  "Edit(~/.claude/settings.json)",
  "Write(~/.claude/settings.json)",
  "Edit(~/.claude/skills/**)",
  "Write(~/.claude/skills/**)",
  "Edit(.claude/settings.json)",
  "Write(.claude/settings.json)"
]

J1: JSON重複キーの検出

JSONの仕様上、同じキーが2回あると後者が勝ちます。攻撃者がこれを悪用して、先に正当な deny を置き、後に空の deny: [] を追加すると、denyルールが静かに無効化されます。

X1: allow/deny衝突

親階層で deny されているのに子階層で allow している場合、その allow はデッドコードです。deny は常に勝つため、意図通りに動きません。設定を読む人が「許可されている」と誤解する原因になります。

/update-config との違い

Claude Codeには設定変更用のビルトインスキル /update-config があります。/audit-settings との違いを整理します。

観点 /audit-settings /update-config
役割 検査官(問題を見つける) 編集者(設定を変更する)
動作 読み取り専用で分析 対話的に設定を編集
種類 自作スキル ビルトインスキル
出力 構造化レポート(重大度付き) 修正済み設定ファイル
得意なこと 多階層の横断チェック、網羅的な問題検出 個別の設定追加・変更・削除

まず /audit-settings で問題を洗い出し、その結果をもとに /update-config で修正するのは良い組み合わせです。

1. 「設定を見直して」 → /audit-settings でレポート出力
2. レポートの修正提案を確認
3. 「提案の通り修正して」 → /update-config で設定を更新

スキルの導入方法

導入は、フォルダ作成後に、SKILL.mdを配置してください。

mkdir -p ~/.claude/skills/audit-settings

~/.claude/skills/audit-settings/SKILL.md に以下の内容を保存してください。
SKILL.mdへのリンク

配置したら、以下のように話しかけるだけで使えます。

> 設定を見直して
> セキュリティを確認して
> 重複を整理して
> MCP設定を見直して

まとめ

settings.json は「設定したら終わり」ではなく、使うほど allow は増え、重複や不要な権限が蓄積していきます。
定期的にチェックして、settings.jsonのセキュリティ衛生を維持しましょう。

参考

4
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?