セキュリティチェック
コードやスクリプト、設定ファイルを自動的に検査し、セキュリティ上の問題を検出する仕組み。
静的解析と動的解析
静的解析
コードを実行せずに分析する。パターンマッチングやAST(抽象構文木)解析で危険な構造を検出。
利点:
- 高速
- 実行環境不要
- 網羅的にチェック可能
欠点:
- 誤検出(False Positive)が多い
- 実行時の振る舞いは検出できない
動的解析
サンドボックス環境で実際に実行し、振る舞いを監視する。
利点:
- 実際の挙動を確認できる
- 難読化されたコードも検出可能
欠点:
- 実行に時間がかかる
- サンドボックス環境が必要
危険パターンの分類
レベル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. インストール時チェック
外部リソースを取得する前に検証:
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