セキュリティ対策 総合実施報告書

医療・介護・リハビリテーション分野 Webアプリケーション群

報告日: 2026年3月11日 | 対象: 37プロジェクト | v2(コードレビュー体制強化を追記)

37
対象プロジェクト
5
自動防御レイヤー
74
セキュリティE2Eテスト
0
Critical/High/Moderate
自動診断+コードレビュー体制構築による外注コスト削減見込み
約 250〜320万円
手動ペネトレーションテスト+ビジネスロジック診断のみに外注を絞り込み可能

1. 実施内容の全体像

3つのフェーズで包括的なセキュリティ体制を構築しました。

Phase 1セキュリティ基盤構築(37プロジェクト一括)
  • .claudeignore — AI開発ツールの機密ファイルアクセス制御
  • .gitignore — バージョン管理からの機密ファイル除外
  • CLAUDE.md — セキュリティルール(禁止事項・確認事項・必須チェック)
  • GitHub Actions CI/CD — 自動セキュリティチェックパイプライン(2プロジェクト)
  • レビュー用プロンプトテンプレート(3種類 x 3プロジェクト)
Phase 2脆弱性修正+PII対応(18 Node.js + 2 Python)
  • npm audit — 全18プロジェクト実行、Critical/High/Moderate 全件修正
  • pip-audit — VoiceClip完了(0件)、qualitative_analysis(タイムアウト)
  • PII検出スキャン — 37プロジェクト横断、個人電話番号1件削除
  • xlsx→exceljs移行 — 修正パッチなし脆弱性への根本対応
Phase 3コードレビュー体制強化
  • 4専門エージェント並列レビュー体制の構築
  • 指摘フォーマットの標準化(must/imo/nits/q)
  • AI引き継ぎ用ステータスファイル(SECURITY-STATUS.md)の作成

2. 自動防御5レイヤー(実装済み)

Layer 1
SAST
Layer 2
SCA
Layer 3
E2E Security
Layer 4
DAST
Layer 5
AI Review
レイヤーツール対象実行方法
Layer 1: SAST eslint-plugin-security, bandit ソースコード静的解析 CI自動 + npm run lint:security
Layer 2: SCA npm audit, pip-audit, Gitleaks, Dependabot 依存パッケージ脆弱性 + シークレット漏洩 CI自動 + 週次スケジュール
Layer 3: E2E Playwright (74テスト) 認証バイパス, IDOR, XSS, SQLi, ヘッダー, CSRF npm run test:security
Layer 4: DAST OWASP ZAP (パッシブスキャン) 本番URL動的解析 CI自動(毎週水曜 3:00 JST)
Layer 5: AI Review Claude Code 4エージェント並列 設計品質, セキュリティ, パフォーマンス, テスト /code-review コマンド

3. AIコードレビュー体制(Phase 3 で新規構築)

単一AIレビューから4専門エージェント並列レビューに移行。Zenn記事「コードレビューにClaude Code subagentsを導入したら、レビューレベルが改善した話」の手法を採用。

Before → After

BeforeAfter
エージェント1(汎用code-reviewer)4つの専門特化エージェント
実行方式逐次(1つずつ)並列同時実行
指摘形式CRITICAL/HIGH/MEDIUM/LOWmust/imo/nits/q
レポート個別出力集約サマリーテーブル + 判定

4専門エージェント構成

1. code-reviewer(設計・品質)

モデル: Opus

  • SOLID原則、DRY/KISS/YAGNI
  • 責務分離、命名規則、可読性
  • Defense-Line準拠(医療データ)
  • エラーハンドリング妥当性

2. security-reviewer(セキュリティ)

モデル: Opus

  • OWASP Top 10 全項目
  • シークレット検出、PII漏洩防止
  • 入力バリデーション・サニタイズ
  • 認証/認可・競合状態検出

3. performance-reviewer(パフォーマンス)

モデル: Sonnet

  • アルゴリズム複雑度分析
  • N+1クエリ、DB最適化
  • レンダリング・メモリリーク検出
  • バンドルサイズ・API呼び出し効率

4. test-coverage-reviewer(テスト)

モデル: Sonnet

  • テスト存在確認・カバレッジ分析
  • 正常系/異常系/エッジケース
  • テーブル駆動テスト推奨
  • テスト独立性・モック品質

指摘フォーマット

接頭辞意味対応
must.修正必須(バグ、セキュリティ、重大設計問題)マージブロック
imo.改善推奨(可読性、保守性、パフォーマンス)マージ可、対応推奨
nits.軽微(スタイル、命名の微調整)任意
q.質問(設計意図の確認)回答を求める

集約レポート形式

4エージェントの結果を1つのサマリーテーブルに統合し、APPROVE / APPROVE WITH CHANGES / BLOCK の判定を出力。

領域mustimonitsq
設計・品質----
セキュリティ----
パフォーマンス----
テスト----
合計0000

4. 依存パッケージ脆弱性 対応結果(Phase 2)

npm audit 対応(18プロジェクト)

プロジェクト修正前修正後対応内容
bento_order_webC:1 H:2 M:1 L:10L:8fast-xml-parser Critical修正, rollup/minimatch High修正
remotion-videosH:2 M:10serialize-javascript RCE修正
dementia-cf-suiteH:2 M:10rollup, jspdf, dompurify修正
drawing-cognitive-testH:2 M:10rollup, jspdf, dompurify修正
rokomo-check-appH:2 M:10rollup, minimatch, dompurify修正
suita-stroke-riskH:2 M:10rollup, minimatch, dompurify修正
productivity-health-surveyH:1 M:10xlsx→exceljs移行, dompurify修正
dysphagia-risk-checkH:10tar Path Traversal修正
visitcareH:2 M:1 L:8L:8minimatch High修正
endai-systemM:10dompurify XSS修正
updrs-trackerM:10dompurify XSS修正
dementia-risk-suiteM:10dompurify XSS修正
rehab-monitoring-systemL:8L:8firebase依存(破壊的変更回避)
ai-defense-line00対応不要
dementia-risk-check00対応不要
hirakata-pt-hp00対応不要
motion-analyzer00対応不要
rehab-fee-calculator00対応不要

最終状態

深刻度件数備考
Critical0全件解消
High0全件解消
Moderate0全件解消
Low24firebase-admin依存チェーン(3件)。破壊的変更が必要なため現状維持

5. PII(個人情報)ハードコード検出・対応

検出種別件数判定対応
シークレットハードコード8全件誤検知バリデーションメッセージ、プレースホルダー、デモコード
携帯電話番号パターン6全件誤検知Dartビルド出力の数値列
固定電話(公開番号)48問題なし施設公開番号・ダミーデータ
個人携帯番号8要対応hirakata-pt-hp: 8ファイル10箇所から削除済み

6. セキュリティE2Eテスト詳細(endai-system)

テストカテゴリテスト数検証内容
認証バイパス36未認証→リダイレクト(23ページ)、権限昇格防止(13ページ)、API認証
IDOR7不正UUID、パストラバーサル、SQLiペイロード
入力バリデーション10SQLi非漏洩、XSS防止、オーバーサイズ入力拒否
セキュリティヘッダー5CSP, HSTS, X-Frame-Options, X-Content-Type-Options
レート制限3429応答、Retry-After、Webhook除外
エラー情報漏洩5404/不正API/不正JSON → スタックトレース非漏洩
CSRF/Cookie3SameSite/HttpOnly、ログアウト後Cookie無効化
合計74テスト58 passed / 16 skipped(認証情報設定後に有効化可能)

7. CI/CDセキュリティパイプライン

endai-system(メインアプリ)

ジョブツールトリガー失敗条件
npm auditnpm auditpush(main), PR, 毎週月曜 9:00 JSTCRITICAL検出時
SAST Linteslint-plugin-security同上セキュリティエラー検出時
PII検出grep (電話番号, マイナンバー, シークレット)同上.envコミット or シークレットハードコード
Secret ScanGitleaks同上シークレット検出時
DASTOWASP ZAP毎週水曜 3:00 JST + 手動High以上のアラート
DependabotGitHub Dependabot毎週月曜(npm + Actions)自動PR作成

8. コスト削減内訳 — 外注スコープの最適化

自前で実装済み(外注スコープから除外可能)

診断項目実装内容想定削減額
依存パッケージ脆弱性npm audit / pip-audit 全プロジェクト修正済み30〜50万円
シークレット漏洩検出Gitleaks + CI/CDパイプライン20〜30万円
静的解析(SAST)eslint-plugin-security + bandit40〜60万円
認証・認可テストPlaywright 36テスト50〜60万円
入力バリデーションテストPlaywright 10テスト(SQLi, XSS)30〜40万円
セキュリティヘッダー検証Playwright 5テスト + next.config.ts10〜20万円
PII漏洩スキャン全37プロジェクト横断スキャン + 電話番号削除20〜30万円
コードレビュー体制4専門エージェント並列レビュー(設計・セキュリティ・パフォーマンス・テスト)50〜60万円
合計削減見込み250〜320万円

外注に依頼すべき項目(自動化困難な領域)

診断項目理由対象想定費用
ペネトレーションテスト自動ツールでは発見できない論理的脆弱性endai-system(本番URL)100〜150万円
アクティブDASTパッシブのみ実装済み、アクティブは専門家判断必要公開URL全体50〜80万円
ビジネスロジック診断決済フロー、権限昇格、複合シナリオendai-system(Stripe連携)80〜120万円
APIセキュリティ診断レースコンディション、Mass Assignmentendai-system(14 APIルート)50〜80万円
外注費用見込み250〜400万円
自前対策なしの場合の総合診断費用
約 500〜720万円
自前実装分
-250〜320万円
外注必要分
250〜400万円

9. 継続的セキュリティ管理体制

自動化された定期チェック

チェック頻度方法
npm audit毎push + 毎週月曜GitHub Actions 自動
Dependabot毎週月曜自動PR作成
Gitleaks毎pushGitHub Actions 自動
OWASP ZAP毎週水曜GitHub Actions 自動
ESLint Security毎pushGitHub Actions 自動
AIコードレビュー毎コード変更時/code-review(4エージェント並列)

AIセッション引き継ぎファイル

ファイル用途
SECURITY-STATUS.md全プロジェクトの対策状況、既知リスク、次回TODO(AI用)
html-reports/security-audit_implementation-report.html本報告書(人間/外注先用)
prompts/security_review_prompt.mdレビューテンプレート3種(実装後・デプロイ前・簡易)

10. 作成・変更ファイル全一覧

Phase 1 セキュリティ基盤(111+ ファイル)

Phase 2 脆弱性修正

Phase 3 コードレビュー体制