AI開発の
公開前セキュリティ監査入門
Codex × Cloudflare公式「security-audit」スキルで、
“動くけど危ない”を公開前に見つける。
今日、持ち帰るもの
なぜ必要?
AI開発で生まれやすい公開前リスクを理解する。
何ができる?
スキルが調べる範囲と成果物を把握する。
どう使う?
導入・監査・結果確認・修正の流れを知る。
どう判断?
AIの報告を鵜呑みにせず、優先順位を決める。
「作れる人」だけではない。
「確認せず公開できる人」も増えた。
「動く」と「安全」は別
動作確認で分かること
- 画面が開く
- ログインできる
- データを保存できる
- AIの回答が返る
監査で見ること
- 他人のデータも見えないか
- 権限を回避できないか
- 秘密情報が漏れないか
- APIを使い放題にできないか
AI開発で見落としやすい5領域
① 認証・認可
ログイン確認だけで、操作権限を確認していない。
② 他人のデータ
URLやIDを変えると別ユーザーの情報に届く。
③ 秘密情報
APIキーや強いDB権限がブラウザ側やGitに露出。
④ 入力・ファイル
入力値、アップロード、表示内容の検証不足。
⑤ APIの乱用
回数制限がなく、AI料金や処理資源を消費される。
+ 配置設定
WAF、環境変数、DBポリシーなどコード外の設定。
Codex・スキル・プロンプトの違い
Codex
作業する人
コードを読み、道具を使い、結果をまとめる。
security-audit
監査手順書
調査、検証、分類、報告のやり方を定義する。
監査プロンプト
今回の依頼書
対象、範囲、禁止事項、出力条件を指定する。
スキル=再利用できる専門ワークフロー
判断基準・手順
攻撃分類・検証法
成果物の検証
導入場所は「使う範囲」で決める
| 使い方 | 配置 | 向いている状況 |
|---|---|---|
| 自分の複数プロジェクトで使う | $HOME/.agents/skills | こたさんのMacで共通利用 |
| 特定プロジェクトだけで使う | .agents/skills | チームでGit管理したい |
| 共有環境の標準として使う | /etc/codex/skills | 管理者が共通設定する |
公式リポジトリから導入
監査は6段階で進む
構造把握
境界・入力・構成を地図化
脆弱性探索
担当を分けて候補を探す
候補検証
別の担当が反証を試みる
構造化
3つの判定に分類
独立再確認
最終主張を再検証
報告
人が読めるレポートへ
最初に「攻撃される入口」を地図化
アプリ構成
Next.js、DB、OAuth、決済、AI API、ストレージ、外部サービス
信頼境界
未ログイン/一般ユーザー/管理者/サーバー/外部サービス
入力面
URL、フォーム、ファイル、Webhook、API、AIへのプロンプト
コード外の制御
DBポリシー、WAF、環境変数、デプロイ設定、IAM
「ログイン済み」だけでは足りない
「怪しい」と「確認済み」を分ける
問題を確認
根拠となるコード経路と、境界を越えた結果が揃っている。
追加確認が必要
具体的な疑いはあるが、設定や安全な検証環境など決定情報が足りない。
候補を棄却
調べた結果、境界違反ではない、または別の制御で防がれている。
quick・standard・deepの違い
| プロファイル | 向いている場面 | 特徴 | 注意 |
|---|---|---|---|
| quick | 小規模、再監査、最初の確認 | 探索1波+最終批評1回 | 部分的なカバレッジ |
| standard | 通常の公開前監査 | 標準の6段階を実施 | quickより時間・計算量が増える |
| deep | 高リスク・大規模システム | 領域を細分化し、独立検証を強化 | 最も重い |
なぜ「本番を攻撃しない」のか
禁止するもの
- 本番URLへの攻撃的アクセス
- 顧客の実データ利用
- 本物の秘密鍵・APIキーの使用
- 有料APIを消費する検証
- 共有環境を止める試験
安全な代替
- ソースコード中心の調査
- ダミーユーザーと偽データ
- 外部通信を遮断した隔離環境
- 最小限のローカル再現
- 検証不能なら未確定として残す
監査後に作られる成果物
REPORT.md
結論、件数、優先順位、監査範囲を読む入口。
FINDINGS-DETAIL.md
確認された問題の詳細、根拠、修正方針。
NEEDS-VALIDATION.md
追加確認が必要な事実と、安全な確認方法。
findings.json
3分類を機械処理できる形で保存。
architecture.md
構成、信頼境界、入力面の整理。
coverage-ledger.json
どこを調べ、どこが未確認かの台帳。
レポートはこの順で読む
実行状態
完了か、不完全終了か。
Confirmed
Critical/Highから確認。
未確認範囲
設定・外部環境・保留理由。
修正方針
最小変更と再発防止テスト。
勉強会で見せる実行フロー
重要データなし
修正禁止
3分類を読む
別タスク
実践用プロンプト:開始条件
実践用プロンプト:安全と報告
安全な運用は「3タスク分離」
コード変更なし
影響範囲を確認
テスト+差分レビュー
こたさんの開発では、ここで使える
コミュニティツール
ロール・管理者権限・他会員データ・招待URL
Discord/Slack連携
Botトークン、Webhook、コマンド権限、なりすまし
Google Workspace連携
OAuth権限、共有範囲、GAS Webアプリの実行者
予約システム
他人の予約、Meet URL、個人情報、キャンセル権限
AIアプリ
API料金乱用、プロンプト注入、出力の安全な表示
ポイント・投票
二重付与、本人確認、権限昇格、集計改ざん
このスキルだけでは足りない
保証できないこと
- 脆弱性がゼロである保証
- 本番設定の自動確認
- 法令・契約・個人情報保護の完全判断
- 設計上の事業リスクの最終判断
人間が担うこと
- 対象範囲と重要データの定義
- 未確認項目の担当者確認
- 修正優先順位と公開判断
- 重大案件での専門家レビュー
security-auditの価値は「AIが全部守ってくれる」ことではない。
公開前に、安全性を確認する工程を再現可能にすること。