セキュリティラボ:Juice Shop、DVWA、WebGoat
3つのサンプルラボは、あえて安全でない Web サイトを生徒に攻撃させることで、Web アプリのセキュリティを教えます。OWASP Juice Shop、DVWA、WebGoat です。それぞれ、コンテナーページのカードから生徒自身のラボのコピーで起動するか、モジュールで出すラボとして使え、ラボのページから、ラボ内の他の Web サービスと同じように開けます。
目的は、弱点の仕組みを理解し、そのような弱点のないソフトウェアを作り守れるようになることです。対象はすべて生徒自身のラボのコピーの中にあり、他人の持ち物であるホストにツールを向けることはここでは一切教えません。コピーはインターネットにも他の生徒にも通じていないため、生徒が攻撃できるのは、ラボが自分のために起動したアプリだけです。
ラボの目的と、誰が何を見られるか
これはクラス向けの学習用ラボで、対象は16歳・17歳の生徒であることが多く、どのラボも最初に決まりを示します。攻撃してよいのは自分のコピーだけで、自分のものでないサイトは決して攻撃しない、という決まりです。許可なくシステムを攻撃することは英国ではコンピューター不正使用法(Computer Misuse Act 1990)により犯罪です。この決まりがなぜあるのか、責任ある開示とは何かを最初に話し合うとよいでしょう。
コピーは起動した生徒だけのものです。そのモジュールを教える教員は、生徒の取り組みを見るために開くことができ、生徒の作業を開くとアクセスログに記録され、生徒はそれを読めます。これらのラボに自動採点はありません。生徒が証拠を提出し、教員が他のラボと同じように採点します。
3つとも第三者のプログラムで、各プロジェクトの公開イメージを無改変のまま実行しており、当社が配布するものではありません。OWASP Juice Shop(MIT ライセンス)、DVWA(GPL-3.0)、WebGoat(GPL-2.0)です。バージョンは固定されているため、授業の途中でラボが変わることはありません。
OWASP Juice Shop
OWASP Top 10 にわたる100を超える課題を備えたオンラインショップです。インジェクション、認証の不備、アクセス制御の不備、クロスサイトスクリプティング、セキュリティ設定の不備などを扱います。ラボのページで「開く」を押すとショップが表示されます。スコアボード(Score Board)には全課題が難易度順に並び、解くと緑になりますが、どこからもリンクされていません。それを見つけることが最初の課題です。
答えを教えないヒント:ブラウザーが送受信する内容を見る、ページ自身のコードが何をしているかを読む、そして入力ごとにプログラムが何を信用しているかを問う、というものです。スコアボードのヒントはさらに踏み込むため、先に自分で試した生徒ほど多くを学べます。ショップの状態はラボを止めると消えるので、翌日に続ける生徒はスコアボードが示す再開用コードを控えます。
権限のないアカウントで動き、512 MB 未満で収まります。インターネットや AI サービスを必要とする一部の課題は、外に出られないラボでは解けません。
DVWA(Damn Vulnerable Web Application)
弱点を1つずつ扱います。SQL インジェクション、ブラインド SQL インジェクション、コマンドインジェクション、クロスサイトスクリプティング(反射型・格納型)、CSRF、ファイルアップロード、ファイルインクルージョン、弱いセッション ID、総当たり攻撃などです。データベースはラボが作るので準備は不要で、開いて、ユーザー名 admin、パスワード password でサインインします。
最初のセキュリティレベルは low です。DVWA Security ページで medium、high、impossible に上げられ、各レベルで同じ演習をすると、対策ごとに何が変わるのか、簡単な対策ではなぜ足りないのかが分かります。それがこのラボの狙いです。View Source ボタンで現在のレベルのコードが見られます。CAPTCHA の演習はインターネット上のサービスが必要なため使えません。ラボを止めて再度起動すると新しい DVWA になります。これはセットアップページの Create / Reset Database と同じです。
WebGoat
ガイド付きの講座です。各レッスンが、インジェクション、アクセス制御の不備、安全でないデシリアライズ、JWT の誤り、パストラバーサルなどの弱点を説明し、生徒に実際に突かせます。成功するとレッスンが完了としてマークされます。最初の入門や宿題に向いています。
ラボを開いて Register を選び、このコピー用のユーザー名とパスワードを決めます。ラボには WebGoat と WebWolf の2つのリンクがあり、WebWolf は使うよう指示されたレッスンのためのものです。進捗はラボが動いている間だけ保たれます。WebGoat は Java アプリで、3つの中で最大の 1 GB が割り当てられ、他より起動に数秒余計にかかります。
クラスに出す
3つとも、コンテナーページの「サンプルラボ」カードにあり、「起動」で試しに動かせます。課題として出すには、そのファイルを自分のラボにコピーします。
- ファイルを取る. コンテナーページで、ラボのカードの「先にファイルを編集」を押し、ファイルをコピーします。ファイルの冒頭には、決まりと提出方法が書かれています。
- ラボを作る. モジュールでコンテナーのラボを追加し、「ここで書く」を選んでファイルを貼り付け、公開します。先に自分のコピーで試してください。
- 配布する. 他の課題と同じように割り当て、必要なら期限を付け、どの課題やレッスンを完了させるかを課題の中に書きます。
- 提出物を採点する. 生徒のコピーと提出された証拠を開いて採点し、不足があれば理由を添えて差し戻します。
生徒に何を提出させるか
証拠は2つに分けます。1つ目は作業の証明です。Juice Shop ではスコアボードで解いた課題のスクリーンショット、DVWA では各演習を low と high の両方で行ったもの、WebGoat では完了とマークされた各レッスンのスクリーンショットで、ブラウザーにラボのアドレスが写るようにして、自分のコピーであることを示します。2つ目は理解です。それぞれについて、弱点とは何か、使った入力そのものとそれが効いた理由、攻撃者が何をできるか、コードをどう書くべきだったかを、自分の言葉で書かせます。この後半が、理解したのか解説をなぞっただけなのかを見分ける手がかりです。
さらに高い水準を求めるなら、攻撃だけでなく修正も求めます。2つの弱点について修正後のコードや設定を示させます。DVWA では high レベルが何を変えているかを読んで答えさせます。コピーを開くときに、目の前で課題を1つ解き直してもらうなどの短い質問をするのも、妥当な確認です。
コースの中での位置づけ
ラボは、英国の計算機科学またはサイバーセキュリティの T-Level や BTEC のユニットが扱う題材を扱います。正確な文言は各認定機関のユニットで確認してください。ここでは何も引用していません。
Juice Shop:現実的なアプリでの OWASP Top 10、脅威と脆弱性、インジェクション、認証・セッションの弱点、アクセス制御、暗号の不備、セキュリティ設定の不備、そして手法としての脆弱性評価。DVWA:安全なコーディングと修正。同じ演習を4つのレベルで行うことは、同じコードの脆弱な状態と修正後を見ることだからです。入力検証、出力エスケープ、パラメーター化クエリ、ファイル処理。WebGoat:各種の弱点への最初の入門で、説明が隣にあり、暗号、トークン、デシリアライズの基礎も扱います。
3つとも、ユニットの法と倫理の面を支えます。承認と範囲、Computer Misuse Act 1990、責任ある開示、そしてテストは許可されたシステムに対してのみ行う理由です。
よくある質問
- 生徒がこのラボを使って実在のサイトを攻撃することはできますか。
- できません。ラボのコピーはインターネットにも他の生徒のコピーにも通じておらず、対象はラボが起動したアプリだけです。各ラボの冒頭にも、自分のコピーだけを攻撃し、自分のものでないサイトは決して攻撃しない、という決まりが書かれています。
- ラボは自動で採点されますか。
- いいえ。Juice Shop のスコアボードや WebGoat の完了マークは生徒自身の進捗を示しますが、教員には何も送られません。生徒がスクリーンショットと文章での説明を提出し、教員が採点します。
- なぜ最新バージョンを使わないのですか。
- それぞれ、当社が起動して確認したバージョンに固定されており、同じレッスンがすべての生徒にも教員にも同じように動きます。バージョンは意図して上げるもので、突然変わることはありません。
- メモリを最も使うのはどのラボですか。
- WebGoat で 1 GB が割り当てられます。DVWA とそのデータベースは合わせて 896 MB、Juice Shop は 512 MB です。どれも、ラボの1コピーが使える 2 GB に収まります。