セキュリティチェック

コードやスクリプト、設定ファイルを自動的に検査し、セキュリティ上の問題を検出する仕組み。

静的解析と動的解析

静的解析

コードを実行せずに分析する。パターンマッチングやAST(抽象構文木)解析で危険な構造を検出。

利点:

欠点:

動的解析

サンドボックス環境で実際に実行し、振る舞いを監視する。

利点:

欠点:

危険パターンの分類

レベル1: 即座にブロック

明らかに破壊的な操作:

rm -rf /                  # ルートディレクトリ削除
curl ... | bash           # 検証なしの実行
eval $(curl ...)          # リモートコード実行
chmod 777                 # 全権限付与
sudo rm                   # 管理者権限での削除
> /dev/sda                # ディスク直接書き込み

レベル2: 警告

潜在的に危険な操作:

.env へのアクセス           # 認証情報漏洩リスク
~/.ssh/ へのアクセス        # 秘密鍵漏洩リスク
credentials.json の読み取り # 認証情報漏洩リスク
外部への POST/PUT          # データ送信リスク

現時点では許可するが、ログに記録して将来的にユーザー判断を求める。

レベル3: 情報提示のみ

危険とは限らないが、注意が必要な操作:

git push --force          # 履歴の上書き
npm publish               # パッケージ公開
docker run --privileged   # 特権コンテナ

ユーザーに通知して意図を確認。

実装例

正規表現ベースの基本チェック

import re

DANGEROUS_PATTERNS = [
    r'rm\s+-rf\s+/',
    r'curl.*\|.*bash',
    r'eval\s*\$\(curl',
    r'chmod\s+777',
    r'sudo\s+rm',
]

def check_security(content):
    for pattern in DANGEROUS_PATTERNS:
        if re.search(pattern, content):
            return False, f"Dangerous pattern detected: {pattern}"
    return True, "Security check passed"

AST解析による高度なチェック

import ast

class SecurityVisitor(ast.NodeVisitor):
    def visit_Call(self, node):
        # eval(), exec() の検出
        if isinstance(node.func, ast.Name):
            if node.func.id in ['eval', 'exec']:
                raise SecurityError("Dangerous function detected")
        self.generic_visit(node)

メタエージェントでの活用

外部から取得したスキルやスクリプトの安全性を自動チェック:

  1. スキルのインストール前に静的解析
  2. 危険パターンが検出されたら警告またはブロック
  3. チェック結果をログに記録
  4. 定期的にインストール済みスキルを再チェック

セキュリティチェックの層

1. インストール時チェック

外部リソースを取得する前に検証:

curl -s "$SKILL_URL/SKILL.md" > /tmp/skill-temp.md
check_security /tmp/skill-temp.md
if [ $? -eq 0 ]; then
  install_skill "$SKILL_URL"
fi

2. 実行時チェック

スキルやスクリプトを実行する前に再検証:

pre_execution_check "$SCRIPT"
execute_in_sandbox "$SCRIPT"

3. 定期チェック

既存のスキルやツールを定期的に再検証:

# 週次で全スキルをスキャン
for skill in ~/.config/agent/skills/*; do
  check_security "$skill"
done

ホワイトリストとブラックリスト

ブラックリスト方式

危険なパターンをリスト化して検出。

利点: 簡単に実装できる
欠点: 新しい攻撃手法に対応できない

ホワイトリスト方式

安全な操作のみを許可。

利点: より安全
欠点: 柔軟性が低い、誤検出が多い

ハイブリッド方式

ブラックリストで明らかに危険なものを弾き、残りをホワイトリストで検証。

サンドボックス実行

危険性が不明なスクリプトは隔離環境で実行:

docker run --rm --network none \
  -v /tmp/script:/script:ro \
  sandbox-image /script

ネットワークを遮断し、読み取り専用でマウントすることで影響を最小化。

継続的なセキュリティ

脆弱性データベースとの連携

CVE(Common Vulnerabilities and Exposures)などの脆弱性データベースと照合:

# 依存関係の脆弱性チェック
npm audit
pip-audit
cargo audit

セキュリティアップデート

チェックルール自体を定期的に更新:

# セキュリティパターンのアップデート
git pull security-patterns-repo
reload_check_rules

ログと監査

検出結果を記録し、後で分析できるようにする:

~/.config/agent/security-reports/
├── 2026-01-25-skill-xyz.log
├── 2026-01-24-script-abc.log
└── summary.json

関連