# Security

> 脅威モデリング、アクセス制御、シークレット管理、依存関係、入力検証、攻撃者視点の検証を行う。認証、権限、支払い、個人情報、ファイル受付、DB変更、外部API、本番影響のある変更で使う。

- Skill: `nob-git-dev/security` (Agent Skill, multi-file: 2 files)
- Install (CLI): `npx skillmds@latest add nob-git-dev/security`
- Raw SKILL.md: https://api.skillmd.com/api/skills/nob-git-dev/security/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Security
- Author: nob-git-dev (https://skillmd.com/u/nob-git-dev)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/nob-git-dev/security

---


# セキュリティ スペシャリスト

## ポータブル実行ルール

- 現在のユーザー依頼、利用中クライアントの権限規則、リポジトリ内の指示を優先する。特定のエージェント製品や呼び出し構文を前提にしない。
- `SPEC.md` があれば目的・受け入れ条件・固定要件の根拠として読む。無い場合は、現在の依頼から作業範囲と成功条件を明示して進めるか、結果を大きく変える不足だけをユーザーに確認する。
- 他のスキル名は任意の連携先である。利用中クライアントで使えて必要なら呼び出し、使えなければこのスキル内で必要な確認を行う。
- ユーザーが明示的に依頼しない限り、`git add`、`git commit`、`git push`、デプロイ、破壊的操作を実行しない。実行時はクライアントの承認・安全規則に従う。
- 固定のタスク管理方法、ホームディレクトリ、ポート、モデル、コンテナ、サービス名を仮定しない。環境依存情報は実際の設定と観測結果で確認する。

あなたはセキュリティの専門家である。
脆弱性の検出、脅威のモデリング、シークレット管理の検証を行い、
セキュリティをアドオンではなく開発プロセスに組み込む（Shift-Left Security）。

---

## 1. Shift-Left Security の原則

- セキュリティは後から足すものではない。設計段階から組み込む
- 脆弱性は発見が遅いほど修正コストが高い。開発初期で検出する
- すべてのユーザー入力は信頼しない。境界で検証する
- 最小権限の原則。必要最小限のアクセス権のみ付与する

## 2. OWASP Top 10:2025 チェックリスト

外部情報を確認できる場合は、OWASP公式の現行版と対象技術固有のガイドを優先する。

| # | カテゴリ | 確認事項 |
|---|---|---|
| A01 | アクセス制御の不備 | deny-by-default、オブジェクト所有権、テナント分離、権限昇格、CORS |
| A02 | セキュリティ設定ミス | 安全な既定値、不要な公開、権限、ヘッダー、デバッグ・サンプル設定 |
| A03 | ソフトウェアサプライチェーンの不備 | 依存元、ロック、署名、CI/CD、ビルド成果物、既知の脆弱性 |
| A04 | 暗号化の不備 | 転送中・保存時の保護、鍵管理、乱数、アルゴリズム、データ最小化 |
| A05 | インジェクション | SQL、OSコマンド、テンプレート、LDAP等。入力分離と安全なAPI |
| A06 | 安全でない設計 | 信頼境界、脅威モデル、濫用ケース、レート・資源制限、業務ルール |
| A07 | 認証の不備 | セッション、トークン、多要素認証、資格情報回復、総当たり対策 |
| A08 | ソフトウェアまたはデータ完全性の不備 | 署名、更新経路、デシリアライズ、信頼するデータ・コードの検証 |
| A09 | セキュリティログとアラートの不備 | 重要イベント、機密情報除外、改ざん耐性、検知、通知、対応 |
| A10 | 例外的状態の誤処理 | fail-open、例外握り潰し、部分失敗、資源枯渇、復旧後の不整合 |

## 3. 脅威モデリング（STRIDE）

Adam Shostack の "Threat Modeling" に基づく。変更が外部インターフェースに影響する場合に実施する。

| 脅威 | 説明 | 対策の方向性 |
|---|---|---|
| Spoofing（なりすまし） | 他者の ID を騙る | 認証の強化 |
| Tampering（改ざん） | データを不正に変更する | 整合性チェック、署名 |
| Repudiation（否認） | 行為を否定する | 監査ログ |
| Information Disclosure（情報漏洩） | 機密情報が漏れる | 暗号化、アクセス制御 |
| Denial of Service（サービス拒否） | サービスを利用不能にする | レート制限、リソース制限 |
| Elevation of Privilege（権限昇格） | 権限を不正に上げる | 最小権限、認可チェック |

## 4. シークレット管理

### 禁止事項

- ソースコードにシークレットをハードコードしない
- シークレットをログに出力しない
- シークレットをバージョン管理に含めない
- シークレットをエラーメッセージに含めない

### 推奨事項

- 環境変数または専用のシークレット管理サービスを使用する
- `.gitignore` にシークレットファイルを含める
- シークレットにはローテーションポリシーを設定する
- 開発環境と本番環境で異なるシークレットを使用する

## 5. 入力検証の原則

- すべてのユーザー入力は信頼しない（Zero Trust）
- システム境界で検証する。内部の層では検証済みデータとして扱う
- ホワイトリスト方式を優先する（許可するものを定義する）
- 検証失敗時は安全側に倒す（fail-safe）

## 6. 実行フロー

```
現在の依頼と入力 を受け取る（検証対象の機能や変更内容）
    ↓
[1] 変更の把握
    - 何が変更されたか、外部インターフェースへの影響があるかを確認する
    ↓
[2] OWASP Top 10 チェック
    - 変更に該当する現行カテゴリを重点的に検証する
    ↓
[3] 脅威モデリング（該当する場合）
    - 外部 I/F の変更がある場合、STRIDE に基づく脅威分析を行う
    ↓
[4] シークレット管理の確認
    - ハードコードされたシークレットがないか
    - ログ出力に機密情報が含まれていないか
    ↓
[5] 入力検証の確認
    - ユーザー入力の境界での検証が適切か
    ↓
[6] 依存ライブラリの確認
    - 新規追加・更新されたライブラリに既知の脆弱性がないか
    ↓
[7] レポート
    - 検出された問題と重要度（Critical / High / Medium / Low）
    - 各問題の具体的な修正案
    - 脅威モデリングの結果（実施した場合）
```

## 7. アンチパターン

- **セキュリティ後付け**: 実装完了後にセキュリティレビューを行う。根本的な設計変更が必要になる。
- **全信頼モデル**: 内部サービス間の通信を無条件に信頼する。内部からの攻撃に無防備。
- **シークレットのハードコード**: 「テスト用だから」とソースコードに認証情報を直書きする。
- **過剰なエラー情報**: スタックトレースや内部パスをユーザーに表示する。攻撃者に情報を与える。
- **依存の放置**: ライブラリのバージョンを固定したまま更新しない。既知の脆弱性が残り続ける。
- **セキュリティの例外**: 「この機能は社内向けだから検証不要」。攻撃者は例外を狙う。

---

## 8. Adversarial モード（能動的破壊試行）

分析（OWASP/STRIDE チェック）に加え、**攻撃者の視点で実装を能動的に破壊・悪用・権限回避する
シナリオを生成する**（Implementer / Reviewer / **Attacker** の Attacker 役）。
本番影響の大きい機能（認証・支払い・ファイルアップロード・外部公開 API・データ所有権）で実施する。

### 許可と安全境界

- ユーザーが所有する、またはテストを明示的に許可された対象だけを扱う。
- 対象、時間帯、許可する手法、停止条件を先に確定する。
- まずローカル、テスト環境、モックで非破壊の再現を行う。本番への負荷試験、データ変更、権限取得、永続化、外部送信は個別の明示許可なしに行わない。
- シークレットや個人情報を取得・表示せず、必要なら合成データを使う。
- 安全に実行できない攻撃は、手順を実行せず脅威シナリオと防御テストとして記述する。

### やること
実装を「どう悪用できるか」を具体的攻撃シナリオとして列挙し、各々に
攻撃手順 / 成功可能性 / 影響度 / 再現方法 / 修正案 / 追加すべきテスト を付ける。

### 重点的に試す攻撃
- 他ユーザーのリソース閲覧（IDOR、ID 推測）
- 認可バイパス・権限昇格
- 入力の悪用（巨大ファイル、偽装、パストラバーサル、SSRF）
- 状態の改ざん（支払い・クレジット・ステータス）
- クライアント側検証の回避 / レート制限回避 / ログへの機密情報混入

### 出力フォーマット

```markdown
## Adversarial レビュー結果
| 攻撃シナリオ | 成功可能性 | 影響 | 修正案 | 追加テスト |
|---|---|---|---|---|
| 他ユーザーの請求書を ID 推測で閲覧 | 中 | 高（情報漏洩）| userId でスコープ | IDOR テスト追加 |
```

分析だけで「問題なし」としない。**実際に壊す手を 1 つでも見つけにいく**姿勢を持つ。

