パート 1

セットアップ

Gruyere へのアクセスは、 http://google-gruyere.appspot.com/start を参照します。 AppEngine があなた用に Gruyere の新規インスタンスを作成し、 一意な ID を割り当て、 http://google-gruyere.appspot.com/123/ (123 があなたの ID です) へリダイレクトします。 Gruyere の各インスタンスは他のインスタンスから “サンドボックス化” されているため、 あなたのインスタンスが他の Gruyere に影響を与えることはありません。 すべての例において、一意の ID である 123 を利用する必要があります。 もし、Gruyere のインスタンスを誰かと共有したい (例えば、成功した攻撃を見せるなど) 場合は、 一意な ID を含んだ完全な URL を共有する必要があります。

Gruyere のソースコードはホワイトボックスハッキング用にオンラインで利用できます。 ソースコードは http://google-gruyere.appspot.com/code/ で参照することができ、 また http://google-gruyere.appspot.com/gruyere-code.zip ですべてのファイルをダウンロードできます。 もしデバッグしたり、バグフィックスにチャレンジしたい場合は、ダウンロード後ローカルで実行することができます。 lab の利用にあたり Gruyere をローカルで実行する必要はありません。

ノート

ローカルでの実行

警告

Gruyere はとても脆弱なため、 ローカルで実行する際は、外部からの攻撃からの保護が必要です。 コードに “DO NOT CHANGE” と書かれている箇所があります。 Gruyere は localhost からのリクエストのみを許可し、URL にランダムな一意の ID を利用しています。 しかしながら、外部からの攻撃から完全に保護するのは大変困難です。 また、もしあなたが Gruyere に変更を加えた場合、実際の攻撃に対してより脆弱にすることもできます。 したがって、Gruyere の実行中は他の Web ページを閉じ、 利用しているマシーンに他のユーザがログインしていないことを確認する必要があります。

Gruyere をローカルで実行するためには、まず Python 2.5 をインストールする必要があります。 Gruyere はバージョン 2.5 で開発とテストしているため、 他のバージョンの Python では動作しない場合があります。 python.org でダウンロード可能です。 Gruyere 本体は http://google-gruyere.appspot.com/gruyere-code.zip をダウンロードし、 ローカルディスクに解凍してください。 アプリケーションの実行は以下のようにタイプしてください:

$ cd <gruyere-directory>
$ ./gruyere.py

すべての例内の google-gruyere.appspot.comlocalhost:8008 に置き換え、 さらに 123 もあなたの一意な ID に置き換えてください。 一意な ID は違うところにでてくるので注意してください。 ローカルで実行する Gruyere と AppEngine インスタンスは多少違いがあります。 最も解りやすい違いは、 AppEngine バージョンは限定されたサンドボックスで動作していることです。 よって、Gruyere に対して無限ループを仕掛けた場合、それは監視により終了されます。 ローカルで実行する場合は、ループ方法によりますがそれは起こりえないでしょう。

リセットボタン

上記のように、各インスタンスはサンドボックス化されているため、 リソースの消費は限定的であり、他のどのインスタンスにも影響はありません。 ですが、 Gruyere のインスタンスを完全に使えない状態にすることも可能です。 便利な “リセットボタン” を押すだけで、インスタンスのすべてのデータを消去し、初期状態に戻すことができます。 実行は、あなたのインスタンス ID で以下の URL を参照してください。

http://google-gruyere.appspot.com/resetbutton/123

コードについて

Gruyere は小さく簡潔です。アプリケーションの概略は以下の通りです:

  • gruyere.py は Gruyere の核である Web サーバです。
  • jdata.py は初期データをデータベースに格納します。管理者アカウントの他に 2 つのユーザアカウントが含まれています。
  • jtl.py は Gruyere のテンプレート言語です。
  • jsanitize.py は Gruyere アプリケーションをセキュリティーホールから保護するために HTML のサニタイジング (無害化) をするためのモジュールです。
  • resources/... テンプレートファイル、画像、CSS 等のすべてのリソースが保存されています。

Gruyere の利用

Gruyere の機能を把握するために、以下を実行してください:

  • メインページの “All snippets” リンクから他のユーザのスニペットを表示してください。またそのホームページの配置も確認してください。
  • ハッキングに利用するアカウントでサインアップしてください。 Gruyere アカウントのパスワードは、あなたが実際のサービスで利用しているものと違うものを指定してください。
  • 個人情報や、名前の横に表示するアイコンなどの、アカウントプロフィールを入力してください。
  • “New Snippet” で新規スニペット (お気に入りのジョーク) を作成してください。
  • “Upload” でファイルをアップロードしてください。

以上が Gruyere が提供している基本的な機能です。さぁこれをぶっ壊してみましょう !