mcpField
S
security-testing

security-testing

github.com/proffesor-for-testingセキュリティ519146 回インストール1 日前に更新
リポジトリ

security-testing について

エンジニアや監査担当者向けのセキュリティテスト技能です。OWASP の脆弱性、認証、依存関係、インジェクション、シークレットの露出を確認し、エージェントによるスキャンと検出結果の継続管理も扱います。

主な機能

  1. 01OWASP Top 10 の脆弱性をテスト
  2. 02認証と認可を検証
  3. 03既知の依存関係の脆弱性をスキャン
  4. 04インジェクションとシークレット露出を確認
  5. 05スキャン結果を継続的に追跡

活用シーン

  1. 01セキュリティ監査の実施
  2. 02エンドポイントのアクセス制御テスト
  3. 03CI/CD へのセキュリティチェック追加
  4. 04定期スキャンの検出結果を追跡

インストール

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

$npx skills add https://github.com/proffesor-for-testing/agentic-qe --skill security-testing

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

同梱ファイル

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

config.json
run-history.json
evals/
security-testing.yaml
references/
compliance-agent-commands.md
owasp-top-10.md
schemas/
output.json
scripts/
validate-config.json
templates/
security-report.md

詳細

セキュリティテスト

<default_to_action> セキュリティテストや監査を実施する際は、次の手順に従います。

  1. OWASP Top 10 の脆弱性を体系的にテストします
  2. すべてのエンドポイントで認証と認可を検証します
  3. 既知の脆弱性がないか依存関係をスキャンします(npm audit)
  4. インジェクション攻撃(SQL、XSS、コマンド)をチェックします
  5. コードやログにシークレットが露出していないことを確認します

クイックセキュリティチェック:

  • アクセス制御 → 水平・垂直方向の権限昇格をテストします
  • 暗号化 → パスワードのハッシュ化、HTTPS、機密データが露出していないことを確認します
  • インジェクション → SQL インジェクション、XSS、コマンドインジェクションをテストします
  • 認証 → 弱いパスワード、セッション固定、MFA の適用をテストします
  • 設定 → エラーメッセージから情報が漏えいしないことを確認します

重要な成功要因:

  • 攻撃者の視点で考え、防御側の視点で構築します
  • セキュリティは最初から組み込むものであり、最後に追加するものではありません
  • リリース前だけでなく、CI/CD で継続的にテストします </default_to_action>

クイックリファレンスカード

使用する場面
  • セキュリティ監査とペネトレーションテスト
  • 認証・認可のテスト
  • 入力のサニタイズの検証
  • セキュリティ設定のレビュー
OWASP Top 10(2021)
#脆弱性主なテスト
1アクセス制御の不備ユーザー A によるユーザー B のデータへのアクセス
2暗号化の失敗平文パスワード、HTTP
3インジェクションSQL/XSS/コマンドインジェクション
4安全でない設計レート制限、セッションタイムアウト
5セキュリティ設定のミス詳細すぎるエラー、公開された /admin
6脆弱なコンポーネントnpm audit、古いパッケージ
7認証の失敗弱いパスワード、MFA なし
8完全性の失敗署名のない更新、マルウェア
9ログ記録の失敗侵害の監査証跡がない
10SSRFサーバーによる内部 URL の取得
ツール
種類ツール目的
SASTSonarQube, Semgrep静的コード解析
DASTOWASP ZAP, Burp動的スキャン
依存関係npm audit, Snyk依存関係の脆弱性
シークレットgit-secrets, TruffleHogシークレットのスキャン
エージェント連携
  • qe-security-scanner:多層 SAST/DAST スキャン
  • qe-api-contract-validator:API セキュリティテスト
  • qe-quality-analyzer:セキュリティコードレビュー

主な脆弱性テスト

1. アクセス制御の不備
// Horizontal escalation - User A accessing User B's data
test('user cannot access another user\'s order', async () => {
  const userAToken = await login('userA');
  const userBOrder = await createOrder('userB');

  const response = await api.get(`/orders/${userBOrder.id}`, {
    headers: { Authorization: `Bearer ${userAToken}` }
  });
  expect(response.status).toBe(403);
});

// Vertical escalation - Regular user accessing admin
test('regular user cannot access admin', async () => {
  const userToken = await login('regularUser');
  expect((await api.get('/admin/users', {
    headers: { Authorization: `Bearer ${userToken}` }
  })).status).toBe(403);
});
2. インジェクション攻撃
// SQL Injection
test('prevents SQL injection', async () => {
  const malicious = "' OR '1'='1";
  const response = await api.get(`/products?search=${malicious}`);
  expect(response.body.length).toBeLessThan(100); // Not all products
});

// XSS
test('sanitizes HTML output', async () => {
  const xss = '<script>alert("XSS")</script>';
  await api.post('/comments', { text: xss });

  const html = (await api.get('/comments')).body;
  expect(html).toContain('&lt;script&gt;');
  expect(html).not.toContain('<script>');
});
3. 暗号化の失敗
test('passwords are hashed', async () => {
  await db.users.create({ email: '[email protected]', password: 'MyPassword123' });
  const user = await db.users.findByEmail('[email protected]');

  expect(user.password).not.toBe('MyPassword123');
  expect(user.password).toMatch(/^\$2[aby]\$\d{2}\$/); // bcrypt
});

test('no sensitive data in API response', async () => {
  const response = await api.get('/users/me');
  expect(response.body).not.toHaveProperty('password');
  expect(response.body).not.toHaveProperty('ssn');
});
4. セキュリティ設定のミス
test('errors don\'t leak sensitive info', async () => {
  const response = await api.post('/login', { email: '[email protected]', password: 'wrong' });
  expect(response.body.error).toBe('Invalid credentials'); // Generic message
});

test('sensitive endpoints not exposed', async () => {
  const endpoints = ['/debug', '/.env', '/.git', '/admin'];
  for (let ep of endpoints) {
    expect((await fetch(`https://example.com${ep}`)).status).not.toBe(200);
  }
});
5. レート制限
test('rate limiting prevents brute force', async () => {
  const responses = [];
  for (let i = 0; i < 20; i++) {
    responses.push(await api.post('/login', { email: '[email protected]', password: 'wrong' }));
  }
  expect(responses.filter(r => r.status === 429).length).toBeGreaterThan(0);
});

セキュリティチェックリスト

認証
  • 強力なパスワード要件(12 文字以上)
  • パスワードのハッシュ化(bcrypt、scrypt、Argon2)
  • 機密性の高い操作には MFA を適用
  • 認証失敗後にアカウントをロック
  • ログイン後にセッション ID を変更
  • セッションタイムアウト
認可
  • すべてのリクエストで認可を確認
  • 最小権限の原則
  • 水平方向の権限昇格がない
  • 垂直方向の権限昇格がない
データ保護
  • すべての通信に HTTPS を使用
  • 保存データを暗号化
  • コードやログにシークレットを含めない
  • PII のコンプライアンス(GDPR)
入力の検証
  • サーバー側で検証
  • パラメーター化クエリを使用(SQL インジェクションを防止)
  • 出力をエンコード(XSS を防止)
  • レート制限

CI/CD との統合

# GitHub Actions
security-checks:
  steps:
    - name: Dependency audit
      run: npm audit --audit-level=high

    - name: SAST scan
      run: npm run sast

    - name: Secret scan
      uses: trufflesecurity/trufflehog@main

    - name: DAST scan
      if: github.ref == 'refs/heads/main'
      run: docker run owasp/zap2docker-stable zap-baseline.py -t https://staging.example.com

コミット前フック:

#!/bin/sh
git-secrets --scan
npm run lint:security

エージェント支援によるセキュリティテスト

// Comprehensive multi-layer scan
await Task("Security Scan", {
  target: 'src/',
  layers: { sast: true, dast: true, dependencies: true, secrets: true },
  severity: ['critical', 'high', 'medium']
}, "qe-security-scanner");

// OWASP Top 10 testing
await Task("OWASP Scan", {
  categories: ['broken-access-control', 'injection', 'cryptographic-failures'],
  depth: 'comprehensive'
}, "qe-security-scanner");

// Validate fix
await Task("Validate Fix", {
  vulnerability: 'CVE-2024-12345',
  expectedResolution: 'upgrade package to v2.0.0',
  retestAfterFix: true
}, "qe-security-scanner");

エージェント連携のヒント

メモリの名前空間
aqe/security/
├── scans/*           - Scan results
├── vulnerabilities/* - Found vulnerabilities
├── fixes/*           - Remediation tracking
└── compliance/*      - Compliance status
フリート連携
const securityFleet = await FleetManager.coordinate({
  strategy: 'security-testing',
  agents: [
    'qe-security-scanner',
    'qe-api-contract-validator',
    'qe-quality-analyzer',
    'qe-deployment-readiness'
  ],
  topology: 'parallel'
});

よくある間違い

❌ 隠すことでセキュリティを確保する

管理者ページを /super-secret-admin に隠す → 適切な認証を使用します

❌ クライアント側の検証だけに頼る

JavaScript による検証は回避できます → 必ずサーバー側でも検証します

❌ ユーザー入力を信頼する

入力が安全だと決めつける → すべての入力をサニタイズ、検証、エスケープします

❌ シークレットをハードコードする

コード内に API キーを記述する → 環境変数とシークレット管理を使用します


コンプライアンスとエージェントの CLI

v3 のエージェント固有コマンド(aqe security ...)、SAST/DAST のスキャンコード、コンプライアンス監査(SOC2/GDPR/HIPAA)、シークレットの検出、セキュリティゲートについては、references/compliance-agent-commands.md を参照してください。

関連スキル


覚えておくこと

攻撃者のように考える: 何を壊そうとするかを考え、それをテストします。 防御者のように構築する: 安全性が証明されるまで、入力は悪意のあるものと見なします。 継続的にテストする: セキュリティテストは継続的に行うものであり、一度きりではありません。

エージェントを活用する場合: エージェントは脆弱性スキャンを自動化し、修正状況を追跡して、修正を検証します。エージェントを使って、大規模な環境でもセキュリティ態勢を維持してください。

実行履歴

各セキュリティスキャンの後、このスキルのディレクトリにある run-history.json に結果を追記します:

node -e "
const fs = require('fs');
const h = JSON.parse(fs.readFileSync('.claude/skills/security-testing/run-history.json'));
h.runs.push({date: new Date().toISOString().split('T')[0], scan_types: ['sast','deps'], findings: {critical: 0, high: 0, medium: 0, low: 0}});
fs.writeFileSync('.claude/skills/security-testing/run-history.json', JSON.stringify(h, null, 2));
"

各スキャンの前に run-history.json を読み込み、重大度ごとの検出件数の推移を追跡します。重大な検出件数が増加した場合は、アラートを出します。

スキルの組み合わせ

  • コードレビュー中 → /code-review-quality と組み合わせて、品質とセキュリティをまとめてレビューします
  • 検出結果の検証 → /pentest-validation を使って、悪用可能であることを実証します
  • コンプライアンス → /compliance-testing を使って、規制要件に対応します

注意点

  • npm audit は開発用依存関係について誤検出を報告することがあります。本番環境に関連する結果に絞るには、--omit=dev を指定してください
  • エージェントは、時間のかかる DAST スキャンの代わりに、より高速な SAST のみのスキャンを行うことがあります。必要に応じて、両方を明示的に依頼してください
  • security-compliance ドメインの成功率は 100% です。他のスキルの信頼性を高める際のモデルとして活用してください
  • 依存関係をスキャンするときは、直接依存と間接依存の両方を確認してください。npm audit --all を使うと、ネストされた脆弱性も検出できます

コメント