開発者向けセキュリティ研修で解決したいのは、脆弱性の知識を学んだ後も、自分の実装やコードレビューで「どこが危険で、どう直すか」を判断する練習が足りないという課題です。
この違いを理解するには、画面の結果と内部の処理を対応付け、修正後の挙動まで確かめる必要があります。
Reprokitは、実際に報告された脆弱性を、実行前の検査と公開範囲の制限を設けたローカル環境で「再現 → 観察 → 原因 → 修正 → 再発防止」までたどれる、開発者研修基盤です。 脆弱性が起きる仕組みを自分で確かめ、対策を考え、実務で確認すべきことまで書き残す体験を提供します。
アプリケーションの動作イメージはこちらから閲覧可能です。
対象は、専任のセキュリティ担当者や研修教材を十分に持たず、新人や若手開発者へセキュア開発教育を行いたいWeb開発企業です。 受講者にはWeb開発の基礎知識を想定しています。
Web画面には、学習内容を示す**Lesson(教材)と、脆弱性を再現するLab(検証環境)**を組み合わせて表示します。
受講画面(/)では、次の流れを体験できます。
- 再現する:確認ダイアログからLabを起動し、教材に示された固定入力でローカルのFile Browserへログインを試します。
- 観察する:ログイン拒否の表示と、Lab内に残ったコマンド実行の痕跡を別々に確認します。
- 原因を追う:入力が認証フックへ渡り、コマンドとして解釈されるまでの処理をコードと図でたどります。
- 修正を考える:学習用のコード抜粋を編集し、修正内容のチェックと段階的なヒントを使ってから、公式パッチと照らし合わせます。
- 修正の効果を確かめる:公式の修正版Labへ同じ入力を送り、脆弱版との痕跡の違いを比較します。
- 実務につなげる:影響、原因、修正、再発防止を自分の言葉でまとめノートへ保存し、Labを停止して削除します。
現在教材には、File Browserの脆弱性(@Saku0512 | GHSA-m93h-4hw7-5qcm)を実装しています。
Node.js 22以上、Go toolchain、Gitが必要で、Labの起動にはDocker Engine 28以上とDocker Compose v2.36.1以上が必要です。 対応環境と詳細な手順はWeb UI READMEを参照してください。
npm run start実在プロダクトの事例を、現象の観察からコードの修正判断まで一つの教材にしています。 再現環境を提供するVulhubなどを活用し、Reprokitでは入力の流れを追う解説、修正演習、公式パッチとの比較、振り返りを独自に実装しました。 「現象を見た」「コードを直した」「同じ入力を修正版で試した」を結び付け、実装やレビューで判断するための練習にします。
Go製のRunnerが、Labの出所を固定コミットとイメージdigestで特定し、取得した構成ファイルの整合性とDocker Compose設定を検査します。 特権コンテナ、ホストネットワーク、Docker socketの共有などを拒否し、公開ポートは受講者PC内から接続するloopbackに限定します。 内部の処理は取得と起動を分離し、準備操作ではコンテナを起動せず、明示確認と検査を通して起動します。 ブラウザからは登録済みのLabだけを操作し、任意コマンドや任意の攻撃対象を入力する機能は提供しません。
管理画面(/admin)では、教材と期限を指定した割り当て、受講状態の一覧、提出回答の確認、回答の承認や再受講の依頼、結果CSVの出力を扱えます。
- 研修担当者が、脆弱な検証環境を手作業で構築・配布する負担を減らせます。
- 開発者が、脆弱性の再現だけでなく、原因と修正方法を実務に結び付けて学べます。
- 組織が、教材の割り当て、受講状況、提出内容を追跡できます。
- 固定されたLabと安全性検査により、研修で扱う環境の出所と実行条件を確認できます。
- 実在事例に基づくLessonを拡充し、難易度や技術領域から教材を選べるカタログへ発展させます。
- LessonとLabを別々に管理する構成を生かし、実行基盤を共用しながら解説や課題を追加します。教材の追加には内容と安全性のレビューを行います。
- Labは受講者側で実行する構成とし、将来は研修管理の配信基盤を整備して複数企業への提供を目指します。大規模利用時の負荷と運用は今後検証します。
- 企業環境のネットワーク制約への対応や、既存LMSとの連携を段階的に検討します。
次の観点を実際の画面と実装で確認できます。
| 審査基準 | アプローチとアピールポイント | 確認できる箇所 |
|---|---|---|
| 問題着眼点・着想点 | セキュリティ知識をつけても、実際のプロダクト開発へ繋がりにくい問題に着目。実在のプロダクトとその脆弱性を教材として、体験を通じた学習することができます。実在事例の再現、原因の追跡、自分で考える修正、公式パッチとの比較を一つの学習体験にしました。 | 受講画面の「処理を見直す」→「自分でコードを修正する」→「公式パッチと照らす」 |
| 実行・実現可能性 | システムは教材、検証環境ともに完成済み。対象をWeb開発企業の新人や若手向け研修に絞り、環境の準備と教材、回答の評価をまとめて提供。LessonとLabを分離し、教材を追加して展開する構成です。 | Lab操作、管理画面の割り当てと提出回答 |
| 完成度・動作性 | File Browserの脆弱版と修正版を使い、動作の違いを観察・コードの修正をし、修正の理由を説明するところまで実装しました。アプリケーションはローカル上で起動し、演習環境はDockerコンテナ上で起動することで、外部公開を避けた状態で実在CVEを安全に再現できます。 | 「修正版の挙動を比較する」のマーカー取得、まとめノート、Labの停止と削除 |
- GoによるローカルRunner APIと研修管理API
- Lesson、Lab Manifest、LockfileのJSON/YAMLスキーマ
- 固定コミットで参照するVulhub互換LabとDocker Compose
脆弱性の再現環境はVulhubおよび互換Labを利用します。 Reprokitが開発した教材、受講体験、安全性検査、研修管理と、既存の環境資産を組み合わせています。
- Go
- React / TypeScript
- Node.js / esbuild / Tailwind CSS
- Docker Compose
- 開発者・受講者のローカルPC(Linuxを正式対応OSとする)
- Docker EngineとDocker Composeを利用できる隔離された検証環境
- LessonとLabを分離し、固定した参照だけから安全な実行環境を準備するローカルRunner
- Manifest・Lockfile・Composeを照合し、危険な設定や外部公開を拒否する安全性検査
- 入力が処理される流れの可視化、コード修正演習、公式パッチ比較、両版の実観察をつなぐ受講UI
- 影響、原因、修正、再発防止を整理し、再編集して読み返せるまとめノート
- 教材の割り当てから回答の提出、承認、CSV出力までを扱う研修管理
- 実装の中心: Compose安全性検査、Lab実行管理、コード修正演習、挙動比較、まとめノート、研修管理、File Browser教材
詳細な設計・開発手順は、docsおよびWeb UI READMEを参照してください。
