Labtainers: Dockerベースのサイバーラボフレームワーク
Labtainersには50以上のサイバーラボ演習と、独自のラボを構築するためのツールが含まれています。VMアプライアンスを1つインポートするか、Linuxシステムにインストールするだけで、学生はこれらのラボおよび将来のラボ演習に向けたプロビジョニングと管理設定を完了できます。
- Dockerコンテナによる一貫したラボ実行環境と自動プロビジョニング
- そこそこの性能のノートパソコン上でのマルチコンポーネントネットワークトポロジ
- 学生のラボ活動と進捗の自動評価
- 解答の共有を抑制するための個別化されたラボ演習
Labtainersは、学生のコンピュータにインストールされているLinuxディストリビューションやパッケージに関係なく、学生が自分のコンピュータ内だけでラボを完全に実行できる、制御された一貫性のある実行環境を提供します。Labtainersは当方の[VMアプライアンス][vm-appliancee]、またはDockerがインストールされた任意のLinux上で動作します。また、LabtainersはクラウドベースのVMとしても利用可能です。例えば、Student Guideに記載されているようにAzure上で利用できます。
インストールと使用方法についてはStudent Guideを、学生の評価についてはInstructor Guideを参照してください。ラボ演習の開発とカスタマイズについてはDesigner Guideで説明されています。
フレームワークの詳細についてはPapersを参照してください。
Labtainersのウェブサイトおよびダウンロード(LabtainersがプリインストールされたVMアプライアンスを含む)は https://nps.edu/web/c3o/labtainers にあります。
Distribution created: 09/11/2026 11:33
Revision: v1.4.4n
Commit: 9f1012dc
Branch: master
内容
配布と使用
ディレクトリガイド
サポート
リリースノート
配布と使用
ライセンスおよび配布情報については
docs/license.mdファイルを参照してください。
ディレクトリガイド
-
scripts/labtainers-student -- 学生ラボを実行および
テストするための作業ディレクトリ。学生ラボを実行するには
このディレクトリにいる必要があります。
-
scripts/labtainers-instructor -- 自動評価の実行とテスト、
および学生の結果を表示するための作業ディレクトリ。
-
labs -- 各ラボに固有のファイル
-
setup_scripts -- LabtainersとDockerのインストール、およびLabtainersの更新用スクリプト
-
docs -- labdesigner.pdfのLaTeXソース、およびその他のドキュメント。
-
UI -- Labtainersラボエディタのソースコード(Java)。
-
headless-lite -- Docker WorkstationおよびLabtainersのクラウドインスタンス(ネイティブのX11サーバを持たないシステム)
を管理するためのスクリプト。
-
scripts/designer -- 新しいラボを構築し、ベースDockerイメージを管理するためのツール。
-
config -- システム全体の構成設定(これらは
ラボ固有の構成設定ではありません)。
-
distrib -- 配布サポートスクリプト。例えば、ラボをDocker Hubに公開するためのもの。
-
testsets -- テスト手順と期待される結果。(SimLab用のラボごとのドライバは
配布されません)。
-
pkg-mirrors -- テストおよび配布中の外部パッケージ取得を削減するための、NPS内部パッケージミラーリング用ユーティリティスクリプト。
サポート
GitHubのissueレポートを使用するか、[email protected]までメールしてください。
https://my.nps.edu/web/c3o/support1 も参照してください。
リリースノート
標準のLabtainers配布には、新しいラボの開発に必要なファイルは含まれていません。それらが必要な場合は、labtainer/trunk/setup_scriptsディレクトリから ./update-designer.sh を実行してください。
インストールスクリプトとupdate-designer.shスクリプトは環境変数を設定するため、Labtainersを初めて使用する前にログアウト/ログインするか、新しいbashシェルを起動することをお勧めします。
2026年1月6日
- インデントが原因でインストールスクリプトに混入したバグを修正。
2025年12月30日
- checkworkレポート形式を縦型に変更。ヘッドレス用のビデオガイド。便利なパス。
2025年10月15日
- packet-introspectionラボを改訂し、maxmind地理位置データベースのリンクを更新し、レガシーデータベースの使用について注記。
2025年4月24日
- プルリクエスト#96に従い、imoduleが不足ディレクトリを適切に作成するよう修正
2024年11月22日
- Google Cloud VMを置き換え。今回はコンテナ内のsystemdの障害が原因。
2024年9月23日
- 誤ったDockerバージョンを使用していたGoogle Cloud VMを置き換え
2024年9月10日
2024年7月26日
- capinoutを修正し、grantpt clib関数を使用しないように変更。これはコンテナから実行するとクラッシュするようになった模様。
2024年7月22日
- Ubuntu22用のベースコンテナと、それをサポートするためのフレームワークの変更を追加。
2024年7月5日
- VMアプライアンスをUbuntu 24に移行
- docker pythonパッケージは壊れたpython httpライブラリを使用しているため、パッケージのダウングレードが必要。
- Ubuntuによるpythonパッケージのロックダウンを回避するため、仮想python環境を使用。
- コンテナとVM間でsystemdを共有できるようにするブートパラメータを追加。
- 更新時に壊れたtarユーティリティからのエラーメッセージをリダイレクト。
- バージョン18 VMにおけるmscパッケージのUbuntu更新による破損(update-ubuntu.shを参照)
- docker-composeコマンドが壊れているため、"docker compose"を使用。
- ヘッドレスLabtainersでソケットパーミッションを強制。
- ヘッドレスLabtainersをUbuntu 24を使用するよう更新
2023年11月27日
- ec2マシン上のubuntu22用にGoogle Cloud Platformオプションを追加。
2023年9月18日
2023年8月8日
- DockerHubイメージのjson形式の変更に対応。Keesに感謝!
2023年4月17日
- 最新のラボバージョンを強制的に使用。例:iptablesではなくiptables2。タブ補完を最新のみ表示するよう修正。(Issue #77)
- X11の競合状態によりCyberCIEGEラボのインストールが失敗していた。(Issue #76)
- CyberCIEGEのreadmeに、収集したログを$HOMEディレクトリに保存するよう学生に指示する注記を追加。(Issue #75)
- Radiusラボのcheckworkが誤って"radiusd not running"と報告。prestopスクリプトが欠落していた。(Issue #74)
- MACVLAN_EXTオプション使用時にLabeditがstart構成ファイルを破損していた。(Issue #73)
2023年2月1日
- 非デフォルトユーザのBash履歴が保存されていなかった。
2023年1月26日
- gcloud用のpowershellスクリプトを修正し、選択したゾーンでVM名を修飾するよう変更。
2023年1月4日
- systemdを使用するコンテナが、Ubuntu 22に存在する新しいsystemdで失敗していた
- google cloudスクリプトに--zoneパラメータを追加。値はset_defaultsスクリプトから取得。
2022年12月21日
- xforgeの結果基準を修正し、パス名を期待しないように変更。また、プロファイル編集のためにPOSTが発行されたかを確認するチェックを追加。さらに、攻撃者の
httpサーバをホームディレクトリから実行するよう修正。
2022年12月19日
- システムコールトレースを紹介するstraceラボを追加。
- /tmp/.X11-unixディレクトリに複数のデバイスがある場合、X11 DISPLAY値が不正確だった。
- 引数なしでpython/bash/sh/etcを使用するとcapinoutがクラッシュしていた。
2022年12月9日
- Azure VM作成スクリプトを修正し、Azure Community Galleryのビルド済みLabtainer VMイメージを使用するよう変更。
- クラウドVM上のターミナルが、起動時またはターミナル上での右クリック時に原因不明でクラッシュする。ターミナルの起動/停止により
対処を試みる。
2022年12月5日
- アーティファクト収集時に、非デフォルトユーザのディレクトリから変更されたファイル(例:彼らのbash履歴)を含める。
- web評価を変更し、新しい「他ユーザ」ファイルを表示するように。
- 各コンテナの.local/binのファイルをアーティファクトに含める。これはインストラクタがweb評価を通じて利用できるようにすることを意図。
- ACLラボで、インストラクタが参照できるよう結果に/shared_data/bob/funファイルを含める。
- コマンドラインからの"sh"や"bash"の使用を検出し、指定コマンドの解析時にスキップする。例:"time"や"sudo"で行っているように。
- tcpipラボで、後続のラボセッション中にサーバへsshできなかった。/run/sshdディレクトリが再作成されていなかった。
2022年11月16日
- snortラボのSnortマニュアルへのパスを修正。
- ossecマニュアルで、manage_agentsへのパスを修正
2022年10月12日
- Google Cloudでgnome-terminalコマンドからバックグラウンド演算子を削除。右クリックで依然クラッシュするが、
newterm.sh実行後は安定する模様。
2022年10月10日
- Google Cloudのnewterm.shを修正。ブートディスクを30Gに拡張。
2022年9月20日
- TCP/IPラボのユーザIDとパスワードをラボマニュアルに記載。
2022年8月30日
- コンテナの.profileからDISPLAYを設定する際にX11ソケット名を使用。
2022年8月9日
- graderのprocessValueMax関数の名前を修正。Issue #63
2022年8月4日
- labeditプログラムが誤ったJDKで再ビルドされ、古いJREでlabeditを実行できなかった
2022年7月18日
- IModule内でUbuntu20ベースのコンテナの作成が失敗していた。Issue #61。
2022年3月23日
- tap lockディレクトリへのパスを修正。ネットワークタップを使用するラボの失敗を引き起こしていた
- plc-traffic netmonコンピュータを更新し、java環境の新しいgrassmarlinに必要なopenjfxを持たせる
- chown -Rを回避してラボ起動を高速化。これはdockerで非常に遅い。
- コンテナの/tmpディレクトリ内のX11リンクの削除を回避するための別の試み。
- webtrackの訪問サイト数のカウントを修正し、live-headersゴールを削除。そのツールはもはや利用できない。
一部のラボマニュアル手順を明確化。
2022年3月2日
- 新しいssh-tunnelラボを追加(GWDに感謝!)
- new_lab_setupで設定されたX11値をlabeditが反映しない不具合を修正
- コンテナをパラメータ化しないオプションを追加
2022年2月23日
- 新しいコンテナの追加後、labeditがstart.configを破損していた
- 学生READMEファイル内の学生ガイドへのパスが不正確。クラウド構成用に動的に変更
- update-labtainer.shの拡張子が不正確
- Mscガイドの機能強化
- ghidraラボを更新し、Ghidraのバージョン10.1.2を含める
2022年2月15日
- Azureクラウドサポートを各学生ごとのプロビジョニングに戻す。Azureはリソースの共有を推奨していない。
2022年1月24日
- Azureクラウドは、各学生ごとにプロビジョニングする代わりに、Azure blobに保存されたイメージを使用するように。
- Google Cloudのサポートを追加。
2022年1月19日
- Azureクラウド上でLabtainersを導入。使用方法の詳細はStudent Guideを参照。
2022年1月3日
- setuid-envラボを改訂し、より良い評価を追加。simlabテストとprintenv子プロセスでのsighup回避。
- 評価ゴールカウントディレクティブを修正し、結果タグ値がfalseのものを除外。
- デバッグオプションで起動されたgraderでgradelab -aを使用する際にlabnameを必須としない。
- capinout(stdin/stdoutミラーリング)を改訂し、コマンドプロセス子の孤児化を処理。ドキュメントとエラー処理を改善。
- ラボ初回実行時にプルされるdockerイメージのプログレスバー表示を追加。
- コンテナ初期化の進捗に関するユーザフィードバック。
- pcap-libラボに自動評価に必要なnotifyファイルが欠落していた。Lab Manualから不要なステップを削除。
2021年11月23日
- テストVMでubuntuのポップアップエラーを無効化。
- 異なるDISPLAY変数形式の処理を修正。
2021年10月22日
- tcpipラボガイドを改訂し、syn-flood攻撃の成功は不可能であることを注記。その自動評価を修正し、SimLabスクリプトを追加。
- アーティファクトファイルの拡張子をzipからlabに変更し、GUIファイルマネージャを混乱させるためのプリアンブルを追加。学生がzipを開いて中身を提出していた。
- gradelabの-rオプションをデフォルトにし、graderの累積使用のための-cオプションを追加。
- refresh_mirrorを修正し、ローカルリリース日を参照してDockerHubへの頻繁なクエリを回避。そのようなクエリはそれぞれイメージプルとしてカウントされ、
それらを収益化しようとしている。
2021年9月30日
- bufoverflowラボガイドと採点を変更し、ASLRが有効な状態での成功を期待しないようにし、実行されたかどうかを評価。
- 学生が結果を持たない場合のweb graderのエラー処理。
- 非推奨ラボが実行された際に警告を表示。
- formatstring採点を変更し、未使用の"_leaked_secret"記述を削除し、leaked_no_scanfの値を明確化。
- またformatstring採点を変更し、脆弱な実行ファイルの任意の名前を許可。
2021年9月29日
- Gradelabのエラー処理、不正なzipファイルによるクラッシュの発生を削減。
- stdoutアーティファクトファイルを1MBに制限
2021年9月17日
- GhidraラボガイドのIPアドレスが誤っており、ソースから再作成されていなかった。