Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,6 +1,11 @@
node_modules/
dist/
coverage/
build/
TARGET-BUNDLE.json
synthetic-credentials.json
*.flag
.open-world-target-*/
*.log
.DS_Store
__pycache__/
Expand Down
17 changes: 16 additions & 1 deletion DESIGN.md
Original file line number Diff line number Diff line change
Expand Up @@ -113,6 +113,13 @@ missionStage:

三つの見た目は配色プリセットではない。情報の意味、操作、状態を共有しながら、異なる構図・書体・境界・動きで同じ世界を演出する。

画面は人物を追跡しない。標的の確定進行、参加者が選んだguidance設定、開放済みhintを
canonical stateとし、同じcanonical stateは常に同じ地図、現在地、選択肢、説明を生成する。
時刻、event到着順、browser identity、themeは攻略位置を変えない。

安全と許可範囲は接続前とquiet help/legal surfaceに一度だけ置く。通常のmission、node、
説明、完了表示へ「演習」「トレーニング」を反復せず、調査世界への没入をノイズで壊さない。

### Mission stage refinement

簡素化後の初期画面を、見出し、目標、地図、選択地点が別々の帯に分かれた管理画面にしない。これらは一枚の `mission stage` として読み、上から `mission / objective / route / action` の一方向へ因果をつなぐ。
Expand Down Expand Up @@ -196,6 +203,11 @@ missionStage:
- 補助情報のdrawerは同時に一枚だけ開く。`Escape` と背景操作で閉じ、閉じた後は元の引き手へfocusを戻す。
- drawer内へkeyboard focusを閉じ込め、見えていない補助情報をtab順へ残さない。
- 新しい教材イベントを受けてもdrawerを勝手に開かない。閉じている間は主画面の目標と進捗だけを更新し、件数はdrawerを開いた後に見せる。
- 個人プロフィール、ニックネーム、復旧コード、ランキング、管理画面を作らない。
- EASYを初期値とし、Header menu内でEASY / NORMAL / HARD / CUSTOMを変更できる。専用settings画面は増やさない。
- CUSTOMは次候補、道具、構文、実行例、不成功時の説明、技術説明量を個別に切り替える。途中変更で確定事実、選択、地図、hintを失わない。
- 未発見nodeは公開可能なカテゴリと名前のないシルエットだけを描き、隠れた名称、本文、commandをDOM、accessibility tree、bundle fixtureへ先出ししない。
- flagは任意の発見として静かに記録できるが、objective、route unlock、root完了を妨げない。

## State language

Expand All @@ -208,7 +220,8 @@ missionStage:
- Selected: border、icon、label、地点briefの4点で示す。
- Locked hint: 開放条件を日常語で示す。
- Success: rootまでの一本の経路と権限変化の振り返りを主役にする。
- Telemetry unavailable: 自動検出不能を明示する。flag手動提出は標的直結のローカル表示だけに出し、クラウド表示には出さない。
- Telemetry unavailable: 自動検出不能を明示し、有線接続、Bridge、再読込の確認手順だけを出す。flagは任意の収集物であり、手動提出や進行判定には使わない。
- No progress: 正誤判定やquizにせず、選択中の仮説について「まだ確定した変化がない」と示す。EASY/CUSTOMで許可された場合だけ観察を見直す説明を開く。

## Live transition contract

Expand All @@ -217,6 +230,7 @@ missionStage:
- 複数イベントを受けてもrevision順だけを採用し、古いsnapshotで画面を巻き戻さない。
- `prefers-reduced-motion`では同じ情報を即時更新し、色だけに頼らずラベルと形状も変える。
- BrowseからLiveへの切替は同じ世界へ接続したと理解できる連続した遷移にし、別アプリへ飛んだ印象を作らない。
- 同じevent集合を異なる到着順で受けてもworld順へ正規化し、同じcanonical stateと同じ表示を作る。

## Responsive contract

Expand All @@ -236,4 +250,5 @@ missionStage:
- mission/mapのcomponent規則へ色やfont-sizeを直書きすること。`missionStage` のsemantic token宣言を唯一の入口にする
- fake terminal、code rain、stock hacker photography
- chat人格、自由文AI prompt、仮説より先に完全commandを見せること
- account/profile、復旧コード、leaderboard、admin dashboard、理解確認quiz
- runtimeで生成画像を背景として読み込み、offline bundleを重くすること
35 changes: 27 additions & 8 deletions PROJECT_CONSTITUTION.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,15 +2,15 @@

## Thesis

IT初心者が、直結したDebian実機を観察し、複数の入口と権限昇格経路から自分で仮説を選び、30〜60分でrootまでの因果を説明できる、再挑戦可能なオープンワールド演習を作る。
IT初心者が、直結したDebian実機を観察し、複数の入口と権限昇格経路から自分で仮説を選び、約90分でrootまでの因果を説明できる、再挑戦可能なオープンワールド演習を作る。

## Moment of satisfaction

参加者が探索地図に自分の発見した経路がつながり、「手順をなぞった」のではなく「この状態から自分で次を選んでrootへ届いた」と理解する。

## One-sentence spec

WindowsとのデュアルブートDebianノートをKali実機または隔離Kali VMから直結攻撃し、3つの入口、3つの実機root経路、14個のflagを探索する世界を通常時はExamServerの`/lab`で閲覧でき、演習時はKali Bridgeが許可済み教材イベントだけを`/api/lab`へ送り、探索地図、次の選択、説明を2秒以内に変化させるラボを提供する
公開GitHubとCodex CLIから再構築できる専用Debian Boot2Root標的をKaliから直結攻撃し、Kali上のFirefoxで状態に応じて解放される道、次の選択肢、説明が2秒以内に変化し、9経路を90分単位で繰り返し攻略できるラボを提供する

## Mechanism

Expand All @@ -20,13 +20,18 @@ WindowsとのデュアルブートDebianノートをKali実機または隔離Kal
4. 学習サイトは未接続でも公開ブリーフィングを表示し、ペアリング後は発見済み事実だけをライブ投影する。未発見の正解や完全な世界定義をブラウザへ渡さない。
5. 状況相談は事実から仮説を選ばせ、観察点、道具、操作例の順でヒントを開く。
6. 初期画面は現在地、現在目標、地図/仮説、次の主要操作だけを見せる。補助情報は各画面に一本だけあるラベル付きの `ツール` を引いてから、接続、事実、調査/ヒント、履歴の一種類を選んで開く。画面移動、見た目、演習終了はHeaderの一本の `メニュー` に収納する。
7. 3 footholdすべてから3 root経路へ到達でき、別セッションで別ルートを遊べる。
8. root取得後はDebianを信頼せず、外した信頼済み復旧USBからgolden imageへ戻す。
7. 進行の正本は個人プロフィールではなく、標的の確定状態、参加者が選んだ難易度、開放したヒントである。同じ正本状態は誰が開いても同じ現在地と地図を表示する。
8. EASYを初期値にし、参加者は途中でも次候補、道具、構文、実行例、不成功理由、説明量を変更できる。変更は通常進行を失わせない。
9. 未発見箇所はカテゴリと名前のないシルエットだけを見せ、Debianがallowlist済み達成イベントを検出した時だけ名前、事実、道を解放する。
10. 3 footholdすべてから3 root経路へ到達でき、90分を上限とする別セッションで9組合せを遊べる。flagは任意収集物であり進行条件にしない。
11. root取得後はDebian自身のresetを信頼しない。高速復旧は信頼済み外部media、再構築復旧はclean Debianから固定GitHub release/commitとCodexを使う。
12. Codex CLIはmaintenance中の構築工具としてだけ使い、exerciseへ入る前に認証、session、履歴、checkoutの残留検査を通す。公開repositoryの取得にGitHub loginは要求しない。
13. 風切モータースの標的サイトは攻略サイトと視覚・情報設計を共有せず、外部通信のない実在業務サイトとして、見えるページと操作を完成させる。

## Architecture grammar

- `apps/lab-guide` は探索地図、状況相談、セッション投影だけを所有する。
- `apps/lab-guide/cloud` はペアリング、ライブ投影の永続化、閲覧者向け配信だけを所有する。
- `apps/lab-guide/cloud` は短期ペアリング、セッション状態の単調更新、閲覧者向け配信だけを所有する。アカウント、個人プロフィール、ランキングを所有しない
- `labs/open-world-target/world` は架空業務環境、意図的脆弱性、flag配置だけを所有する。
- `labs/open-world-target/telemetry` は教材イベントの正規化、状態遷移、公開可能な投影だけを所有する。
- `labs/open-world-target/bridge` はKaliからDebian投影を読み、クラウドへ外向き中継することだけを所有する。
Expand All @@ -45,28 +50,42 @@ WindowsとのデュアルブートDebianノートをKali実機または隔離Kal
- 生コマンド、端末出力、資格情報、flag文字列のクラウド保存
- root取得後もDebian内のreset処理を信頼すること
- 一つの完全手順だけで全員を完走させること
- CodexやGitHubの認証情報をgolden imageまたはexercise modeへ残すこと
- 画面、fixture、自動testだけをもって完成品と呼ぶこと
- Windows、dual boot、Windows flag、Windows recovery
- 名前、メール、復旧コードを持つ個人プロフィール
- 管理画面、ランキング、streak、永続的な個人実績
- 理解確認クイズ、自由文AI相談、攻略の自動実行
- 演習であることを標的サイトや攻略画面の本文へ繰り返し表示すること

## Failure modes

1. 地図が正解一覧になり、参加者が仮説を立てずにノードを消化する。
2. 自動検出が生コマンドや秘密を集め、教材より監視システムになる。
3. 一つの入口またはroot経路だけが実用上の正解になり、再挑戦価値が消える。
4. root取得後の標的をそのまま再利用し、次の参加者へ状態や改変が残る。
5. デュアルブート作業がWindows、EFI、実データを損なう
5. root取得済みDebianから内部resetやGitHub取得を行い、改変済み状態をcleanと誤認する
6. KaliのWi-Fiと有線LANがルータ化し、隔離したDebianへ外部経路を与える。
7. ライブ接続がない通常閲覧で、故障画面または偽の進行データを表示する。
8. 接続、事実、調査、履歴、設定の入口を初期画面へ並べ、初心者が地図よりUIの解読に時間を使う。
9. 個人プロフィールと標的状態が別々に進み、同じ標的状態なのに参加者ごとに違う道を表示する。
10. 標的サイトが演習説明、動かないリンク、外部素材、サイバー風装飾で架空教材に見える。

## Observable acceptance

- 完全初心者が段階ヒント込みで任意の一経路を30〜60分でrootまで完走できる
- ターミナル未経験に近い参加者がEASYと段階ヒントを使い、任意の一経路を90分以内にrootまで完走できる
- 入口3種とroot経路3種の9組合せがfresh stateから成立する。
- セッション未接続でも、公開ブリーフィング、世界観、必要機材、安全境界をWebだけで閲覧できる。
- ペアリング済みセッションでは、教材イベントが2秒以内に探索地図または状況相談へ反映される。
- ブラウザbundleと公開APIに未解放ヒント、flag正解、生コマンド、資格情報が含まれない。
- Debian exercise modeにWi-Fi、外部DNS、default route、インターネット疎通がない。
- Kaliがクラウド中継用Wi-Fiを使う場合も、IP forwarding、NAT、EthernetからWi-Fiへの転送が無効である。
- Kali Bridge停止時は最後の確定状態と再接続表示を残し、復帰後に欠落なく追いつく。
- 復旧USBからDebian、ラボ状態、Debian EFIをgolden stateへ戻し、Windowsが再起動できる。
- 信頼済み外部mediaからDebian全体をgolden stateへ戻し、同じ経路を再度完走できる。
- clean Debianから公開GitHubの固定release/commitを取得し、Codexで同じschema、配置、9経路を、buildごとのfreshなflag・synthetic credentialとともに再構築できる。secretを含むbundle hashは構築ごとに変わる。
- Firefox ESRの1366×768、1280×720、360pxで主要フローをキーボードだけでも完了できる。
- 初回表示では補助パネルの本文もカテゴリ一覧も見えず、一本の `ツール` を開いた後にラベルと件数から必要な情報を選び、一度に一種類だけ表示できる。
- fresh Debianから別operatorがCodex手順を使って検証済みbundleとdry-run planを再生成でき、exercise開始前にCodex認証、session、履歴、checkoutが存在しない。
- 参加者はKali上のFirefoxだけでpairing、現在地確認、次の仮説選択、段階説明、root完了確認まで進められる。
- 同一の標的進行、難易度、ヒント状態を与えた二つのbrowserは、個人識別なしに同一のカテゴリ、シルエット、現在地、選択肢、説明を表示する。
- 風切モータースの公開・在庫・整備・店舗・記事・FAQ・問い合わせ・staff導線が外部requestなしで動き、演習用装飾や反復説明を主情報にしない。
28 changes: 20 additions & 8 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
# ExamServer 実践ラボ

これはデモではなく、繰り返し構築・演習・復旧できる完成品を目標とするプロジェクトです。

許可された直結環境だけで使う、初心者向けオープンワールド型セキュリティ教材です。

標的はWindowsとDebian 13をデュアルブートするノートPCです。参加者はKali実機、または専用Ethernetだけを割り当てたKali VMから接続し、架空の中古バイク販売・整備チェーン「風切モータース」の業務サーバを調べます。
標的は全diskを演習へ使える専用Debian 13ノートPCです。参加者はKali実機、または専用Ethernetだけを割り当てたKali VMから接続し、架空の中古バイク販売・整備チェーン「風切モータース」の業務サーバを調べます。

公開ガイド: <https://exam-server-one.vercel.app/lab>

Expand All @@ -12,9 +14,9 @@
- 発見した事実をExamServerの`/lab`にある探索地図でつなぐ
- 状況に合う仮説を選び、必要時だけ段階ヒントを見る
- 3つの異なる権限昇格経路からDebian本体のrootを取る
- 別セッションでは別ルートと14個のflagを探索する
- 別セッションでは別ルートと任意の13個のflagを探索する

標準の一経路は初心者が30〜60分で完走できる密度にします。公開Webは標的がなくても閲覧でき、演習中はKali Bridgeが許可済み教材イベントだけを送って地図、説明、次の選択をリアルタイムに更新します。生コマンド、端末出力、資格情報、flag文字列はクラウドへ送りません。
標準の一経路は初心者が約90分で完走できる密度にします。公開Webは標的がなくても閲覧でき、演習中はKali Bridgeが許可済み教材イベントだけを送って地図、説明、次の選択をリアルタイムに更新します。生コマンド、端末出力、資格情報、flag文字列はクラウドへ送りません。

初期画面に出すのは現在目標、探索地図または仮説、主要操作だけです。接続、確定した事実、調査やヒント、履歴は件数付きの引き手に収納し、学習者が選んだ一種類だけをdesktopではside drawer、スマートフォンではbottom sheetで開きます。ライブ更新も勝手にパネルを開かず、目標、地図、引き手の件数だけを変えます。

Expand All @@ -34,7 +36,7 @@

## ローカル確認

Node.js 20以上とPython 3.11以上を使います。ガイドの依存関係を一度入れれば、UI、14 flags、
Node.js 20以上とPython 3.11以上を使います。ガイドの依存関係を一度入れれば、UI、任意の13 flags、
9経路、テレメトリ、Debian制御、復旧kitをまとめて検証できます。

```text
Expand Down Expand Up @@ -72,17 +74,27 @@ codeを公開ガイドへ入力します。
- exercise modeは直結Ethernet以外の経路を持たない
- 実在データ、実アカウント、実資格情報を標的へ置かない
- root取得後のDebianを信頼せず、外部の信頼済み復旧USBから初期化する
- Windowsは空の捨て環境とし、裏flag以外の価値あるデータを置かない
- ディスク操作は機種、disk ID、partition UUID、image hash、確認語が一致しない限り実行しない
- GitHub再構築はroot取得済みOSから行わず、clean Debianから固定release/commitを使う
- ディスク操作は機種、disk ID、filesystem identity、image hash、確認語が一致しない限り実行しない

## 現在の検証境界

リポジトリ内ではUI、状態エンジン、構築資材、fail-closed制御を自動検証します。公開
`/lab`と`/api/lab`は、`create → pair → replay拒否 → waiting → snapshot → live → SSE`
の本番smokeを公開ごとに通します。次の項目は対象ノートで証跡を残すまで未完了です。

- Windowsを保持したDebianデュアルブート導入
- Kali実機とKali VMからの9経路攻略
- exercise modeの物理NIC隔離
- root取得後の復旧USB初期化
- DebianとWindowsの再起動
- clean Debianと公開GitHubからの再構築

## Debianの再構築

Debian標的の初回構築・更新では、maintenance connectivity中だけCodex CLIと公開GitHubを使用できます。
Codexは匿名cloneした固定release/commitを読み、test、platform overlay、target bundle、dry-run planを作成します。
diskへの適用はoperator承認後に限り、exerciseへ移行する前にCodex認証、session、履歴、
checkoutを除去して残留検査を通します。

正本手順は
[`labs/open-world-target/operator/CODEX-BOOTSTRAP.md`](labs/open-world-target/operator/CODEX-BOOTSTRAP.md)
です。
Loading
Loading