コマ1 / 8月11日(火) 08:30–12:30
座学 — 3日間で必要な理論を学ぶ
以降の5コマは全て手を動かす時間に充てる。だからこの4時間で、ラボ環境で手を動かして得た「体験」を チームで共有できる言葉に変換し、実装に入る前に全員の理解を揃える。
00このコマの位置づけ
本ゼミはゼロから作らない。動くマルチエージェント実装をテンプレートとして受け取り、未知の標的に通用するまで鍛える。 そのため「読めること」「測れること」「直すべき場所を切り分けられること」が前提能力になる。コマ1はその前提を作る時間。
014時間の進行
この4時間で、ラボ環境への接続と座学4本を通す。座学は①②を要点だけ短く、③④に時間を多めに取る。
③(設計論)→ ④(実物のコード)の順で進むのは、先に設計の考え方を入れておくと、
コードを読むときに「知らないものを読む」ではなく「知っているものを探す」に変わるから。
ここで扱う4本の座学は独立した知識ではない。①で「人間が何を判断しているか」を言語化し、 ②でそれを機械に扱わせる型を学び、③で複数体に分ける設計を学び、④で実物のコードに突き合わせる。 一本の線としてつながっている。
02ラボ環境で手動でチャレンジ — 体験を要求仕様に変換する
ラボ環境に接続できたら、まず参加者自身が手動で1台の標的に取り組む。目的は攻略できたかの確認ではない。 「何を見て次の手を決めたか」を、その場でメモとして残すこと。 このメモが、そのままエージェント設計の要求仕様になる。
手動チャレンジで記録すること
何が見えたか
スキャン結果、バナー、エラーメッセージ、レスポンスの差。見えたものを事実のまま述べる。解釈と混ぜない。
なぜその手を選んだか
候補は複数あったはず。選ばなかった手と、選ばなかった理由まで話せると設計に使える情報が増える。
どこで詰まり、どう抜けたか
詰まりの抜け方こそエージェントが最も苦手な部分。「検索して出てこなかったとき何をしたか」は特に重要。
この時間で最後まで行けなくても問題ない。「どこまで進んで、何が分からず止まったか」も重要な記録。
むしろあなたが止まった場所は、エージェントも同じ場所で止まる可能性が高い。詰まりどころの共有は、攻略成功と同じくらい設計の役に立つ。
03資料一覧
各ページは独立して読める。当日はこの順で進める。
- ⓪ 事前 ラボ環境 z4.shino.club の使い方 初回セットアップ/接続経路の切り分け/ラボの前提と API/フラグと証拠の違い →
- 座学 ① ペネトレーションテストの基礎 フェーズ構成/各フェーズの判断/証拠と再現性/自動化が難しい理由 →
- 座学 ② AIエージェントの基礎 計画・実行・観測・評価のループ/function calling/状態とコンテキスト管理/失敗回復/Pydantic AI →
- 座学 ③ マルチエージェント設計論 単一に全部やらせない理由/委譲の粒度/サブエージェント間の相談/ループ検知/予算配分 →
- 座学 ④ テンプレート実装のアーキテクチャ読解 Orchestrator の委譲/共有状態/依存注入/ログ設計/ツール層の分離 — 「なぜこの設計なのか」 →
- おまけ よく使うコマンド早見表 Git の基本操作/Docker の起動・確認・片付け/SSH の接続と鍵の使い方 →
4本のつながり
手動チャレンジの体験"] --> B["座学①
ペンテストの型"] B -->|"人間の判断を分解"| C["座学②
エージェントの型"] C -->|"1体では足りない"| D["座学③
複数体の設計"] D -->|"実物で確認"| E["座学④
テンプレート読解"] E --> F["コマ2〜5
開発・改善"] B -.->|"評価指標の言葉"| F D -.->|"設計判断の記録"| F classDef pre fill:#fdf8f1,stroke:#f2b544,color:#10262e classDef lec fill:#f6fbfc,stroke:#0e8f9e,color:#10262e classDef out fill:#ffffff,stroke:#cddde2,color:#10262e class A pre class B,C,D,E lec class F out
04このコマの成果物
判断フローの整理(要求仕様の原型)
3人の手動チャレンジの過程を統合した1枚。観測 → 判断 → 行動の連鎖として書く。 コマ2以降の改善と設計レビューで参照するので、メモをテキストに整理しておく。
テンプレート実装の読解メモ
座学④の対応表を埋めたもの。どこに何があるか・自分の担当がどのファイルかが分かる状態にしておく。
あわせて、読んでいて気になった点を改善の候補として書き留めておく。コマ2以降の着手順を決める材料になる。
| 指標 | 定義 |
|---|---|
| 侵入成功率 / 権限昇格成功率 | 到達数 ÷ 対象数 |
| 到達フェーズ分布 | 偵察止まり/脆弱性特定止まり/シェル取得/root。どこで詰まるかの分布 |
| LLM要求数・所要時間 | 1標的あたり。成果が同じなら少ないほど良い |
| ハルシネーション率 | 「取れた」と報告したが実際には取れていなかった件数。0 が要件 |
| 汎化ギャップ | 開発用標的の成功率 − 初見標的の成功率。小さいほど良い |
05重要事項
実装を止める締切は 8/13 17:00
コマ6では 14:30–15:30 に最終ランを行い、15:30–17:00 に結果整理と発表準備、17:00–17:30 に成果報告書を仕上げる。
17:00 以降は実装せず、成果報告書に集中するのが固定ルール。
壊れたら消して作り直す
エージェントは標的を壊す。ラボは作り直せば元に戻るので、おかしいと思ったら運営にリバートを依頼する。
壊れた環境をデバッグしている時間はない。最初からそうする癖をつけておくこと。
ラボ外への実行は一切禁止
全演習は閉域ラボ内のみ。攻撃コード・PoC は演習リポジトリ内に限定し外部に公開しない。 APIキーは秘密情報として扱い大会終了後にローテーションする。テンプレートの確認プロンプトと denylist があっても最終責任は実行者。
役割分担
| 担当 | 担当フェーズ | 主な技術課題 |
|---|---|---|
| A:偵察 | 偵察/外部調査 | 非HTTPサービスの列挙漏れをなくす。製品+バージョン特定 → CVE紐付け。列挙の打ち切り判断 |
| B:侵入 | 侵入 | PoC の取得・適応・実行。失敗時の別方向への切り替え。検索で有用な情報が見つからないとき、対象そのものを調べ直す方向へ切り替えられること |
| C:ポストEx | 内部偵察/権限昇格 | 権限昇格ベクタ列挙の体系化と GTFOBins 的推論。SUID/sudo/cron/capability/PATH 等 |
| 3人共同 | 全体統括/報告 | フェーズ遷移方針、リトライ戦略、予算配分 |
担当エージェントのプロンプト・ツール・状態設計はオーナーが決定権を持つ。 この所有権の切り方が、そのまま成果報告書の「執筆者自身の作業内容を他より厚く記す」を満たす。