WrongSecrets のラボ:埋め込まれた秘密情報を見つけ、保管の正しい場所を学ぶ

OWASP WrongSecrets は、秘密情報をわざと間違った場所に置いているアプリです。コード、ブラウザー側のスクリプト、設定、監視用のエンドポイントなどです。各チャレンジは秘密情報を1つ求め、生徒が正しいものを見つけるとアプリが緑にします。このラボは、各生徒専用の非公開コピーでこれを起動します。

生徒が調べる対象はすべて生徒自身のラボのコピーの中にあり、コピーはインターネットにも他の生徒にも通じていないため、生徒が届くのは、ラボが自分のために起動したアプリだけです。決まりはラボの冒頭に示されます。調べてよいのは自分のコピーだけで、自分のものでないサイトにツールを向けることは決してしない、というものです。

生徒が学ぶこと

秘密情報はどこから漏れ、開発者や攻撃者はどう見つけるのかを学びます。コードに書かれたパスワード、スクリプトでブラウザーに送られた秘密情報、監視用のエンドポイントが明かしてしまう鍵などです。それぞれについて、その場所がなぜ間違いか、秘密情報は代わりにどこに置くべきかを説明します。安全なコーディング、DevOps、ソフトウェアサプライチェーンの学習に向いています。

ブラウザーで動かす

アプリは数秒で起動し、アカウントは不要で、ラボを止めると状態は消えるので、再起動は新しいゲームになります。

ラボで解けるチャレンジは一部だけです。プロジェクトのソースを GitHub から取る、アプリのコンテナーの中でシェルを使う、クラウドアカウント、Vault、Kubernetes、AI サービスを使うものは、ラボのコピーにないものを必要とします。チャレンジ 0、16、42 を確認しました。ページやそのスクリプト、アプリ自身のエンドポイントに関する他のチャレンジも、ブラウザーの開発者ツールやラボのターミナルの curl で試す価値があります。

  1. コンテナーのページを開く. バーの「つくる」を開き、「コンテナーを実行」を選びます。ページは誰でも開けて、Git ラボと SQL ラボはアカウントなしで起動できます。ほかのラボには無料アカウントが必要です。アカウントを作成してサインインし、「起動」を押します。
  2. ラボを探す. 「サンプルラボ」のカードにすべてのサンプルが並んでいます。OWASP WrongSecretsを探します。
  3. 「起動」を押す. 「起動」はそのまま1回の操作で実行します。「先にファイルを編集」は compose ファイルを開くので、起動する前に変更できます。
  4. 開く. ラボのページで、OWASP WrongSecrets という名前のリンク(ラボの「開く」ボタン)を押します。まず Challenges メニューの Challenge 0 から始めます。ゲームの説明があります。ターミナルでは curl http://wrongsecrets:8080 でアプリに届きます。

何を提出させるか

解いたチャレンジごとに、ラボ自身のアドレスが見える形でスクリーンショットを提出させ、それぞれについて自分の言葉による説明を求めます。秘密情報はどこにあったか、どう見つけたか、その場所がなぜ間違いか、代わりにどこに置くべきか。後半を見れば、理解したのか、解答例を写したのかがわかります。

GitHub のコード

compose ファイルは、WrongSecrets 自身の公開イメージをリリースに固定し、権限のないアカウントで実行します。WrongSecrets は AGPL-3.0 ライセンスで、当社が配布するものではありません。ラボはインターネットに出られないため、それを必要とするチャレンジは解けません。

このラボの基本レッスン

WrongSecrets Basics は、このラボで進める小さなレッスンで、各手順に説明と、生徒のターミナルにコマンドを入力する「実行」ボタンが付いています。生徒が調べてよいのは自分のコピーだけというルールから始まり、アプリが動いているかを確かめ、アプリが公開しているエンドポイントを一覧し、フロントエンドのチャレンジが扱うスクリプトを見て、そのあとチャレンジへ進みます。

無料の個人アカウントには、ホームにある Basics モジュールで配布されます。どの学校もライブラリの Basics フォルダから自分のモジュールにコピーでき、新しい学校ではサンプルモジュールの Lab Basics (Sample) に入っています。意図的に小さくしてあり、ラボで進めるレッスンとは何かを教員に見せるためのもので、残りはラボが担います。変更したい場合は、自分のモジュールにコピーしてください。

課題として出す

どのチャレンジを完了させ、何を提出するかを、課題に書いておきます。

  1. ラボを作る. モジュールで課題を追加し、「コンテナーラボ」のカードを選んでから「GitHub リポジトリ」を選びます。https://github.com/mitsurutech/lab-wrongsecrets とブランチ main を指定します。compose ファイルは既定の compose.yaml です。変更したい場合は、先にリポジトリをフォークしてください。
  2. 公開して試す. 「公開」すると、確認したコミットに固定されるので、あとでリポジトリを変更しても、すでに出したラボは変わりません。まず自分のコピーを起動してください。
  3. 配布する. ほかの課題と同じように配布します。期限を付けることもでき、課題には何をするか、何を提出するかを書いておきます。
  4. 提出物を採点する. 生徒のコピーを開いて提出された内容を確認し、採点します。足りない場合は理由を書いて差し戻します。

よくある質問

なぜ一部のチャレンジしか解けないのですか?
ラボのコピーはインターネットに出られず、中にあるのはアプリだけです。プロジェクトのソースを GitHub から取る、コンテナーの中でシェルを使う、クラウドアカウント、Vault、Kubernetes、AI サービスを使うチャレンジは、ここではできません。GitHub のページにもそう書いてあります。
進み具合は保存されますか?
いいえ。アプリは何も保存しないので、ラボを止めてもう一度起動すると新しいゲームになります。解いた生徒は、先にスクリーンショットを撮って提出に備えます。
秘密情報は本物ですか?
いいえ。アプリの秘密情報はすべてゲームのための作り物です。身につけたい習慣は、本物の秘密情報を自分のチームのコードの中で探すことで、他人のコードでは決して探さないことです。