情報流出、踏み台、システム改竄……これらの事が起きてからでは、もう遅い。Webデベロッパはどんなアプリケーションを作成するときでも、つねに最新の注意を払う必要がある。だが経験の浅いデベロッパはなかなか「何が悪いのか」がピンとこないため、危険なコードを書いてしまいがちだ。心配な方は、今回紹介する「Jarlsberg」で攻守ひととおりの学習をしてみよう。

Jarlsberg - Web Application Exploits and Defensesとは

Google Online Security Blogは5月4日(米国時間)、Web Application Exploits and Defensesを公開した。冒頭のWant to beat the hackers at their own game?によると、このサイトは次の3点を学習する目的で設置されているとのことだ。

  • 攻撃者がどのようにセキュリティ脆弱性を見つけ出すか
  • 攻撃者がどのようにWebアプリケーションを攻撃するか
  • 開発者がこれらの攻撃を防ぐには何をすれば良いか

物事を学習するには実際にやってみるのが一番(The best way to learn things is by doing)。このコードラボではさまざまな脆弱性の存在するWebアプリケーション「Jarlsberg」をもちいて、脆弱性の種類/攻撃の方法/守り方をチュートリアル形式で実践する。これらからユーザは

  • クロスサイトスクリプティング(XSS)、クロスサイトリクエストフォージェリ(XSRF)といった一般的なWebセキュリティの脆弱性を突くことで、どのようにWebアプリケーションを攻撃するか
  • 上記の脆弱性に加え、DoS攻撃/情報漏洩/リモートコード実行の恐れがあるバグを見つけ、修正する方法

を学習することが可能だ。

Hello, Jarlsberg! - Jarlsbergの使い方

Jarlsbergで学習・実践できるWebセキュリティの脆弱性は次のとおり(Table of Contentsより抜粋)。

Cross-Site Scripting (XSS) XSS Challenges / File Upload XSS / Reflected XSS / Stored XSS / Stored XSS via HTML Attribute / Stored XSS via AJAX / Reflected XSS via AJAX / More about XSS
Client-State Manipulation Elevation of Privilege / Cookie Manipulation
Cross-Site Request Forgery (XSRF) XSRF Challenge / More about preventing XSRF
Cross Site Script Inclusion (XSSI) XSSI Challenge
Path Traversal Information disclosure via path traversal / Data tampering via path traversal
Denial of Service DoS - Quit the Server / DoS - Overloading the Server / More on Denial of Service
Code Execution Code Execution Challenge / More on Remote Code Execution
Configuration Vulnerabilities Information disclosure #1 / Information disclosure #2 / Information disclosure #3
AJAX vulnerabilities DoS via AJAX / Phishing via AJAX
Other Vulnerabilities Buffer Overflow and Integer Overflow / SQL Injection

Jarlsbergのスタートページにアクセスすると、自分専用のWebアプリケーションが作成される。

http://jarlsberg.appspot.com/(ユニークなID)/

Jarlsbergのホーム画面。背景が同名のチーズのようになっている

Python 2.5が利用できる場合は、http://jarlsberg.appspot.com/jarlsberg-code.zipから成果物一式をダウンロードして使用することも可能だ。

   % unzip jarlsberg-code.zip
   % ./jarlsberg.py

この場合、アクセスするURIは次のようになる。

http://localhost:8008/(ユニークなID)/

Jarlsbergの利用準備ができたらアカウントを作成し、用意されているリファレンスをもとに攻撃・防御の手法を実践していく。アカウントを作成する際は実際に利用しているサービスのパスワードを使わないように注意すること

チュートリアルを実践してぐちゃぐちゃになってしまったWebアプリケーションは、リセットページにアクセスすることで初期状態に戻すことが可能だ。

http://jarlsberg.appspot.com/resetbutton/(ユニークなID)

ぐちゃぐちゃにしてしまっても、リセットページから初期化できるようになっている

リファレンスにはただ単純に攻撃/防御の方法だけではなく、各種脆弱性の概要、「なぜこれらの攻撃が成立するのか」「なぜこのコードで防ぐことができるのか」といった説明と、より詳細を知るための外部サイトへのリンクが網羅されている。JarlsbergはPythonで実装されており、サーバプログラム側の修正例はPythonで記述されているが、原理がわかれば他言語でも応用が効く。

Web Application Exploits and Defenses/Jarlsbergはあくまでも学習用に公開されたサイトだ。権限がないシステムへのアクセスや攻撃は違法行為となる。ここで得た知識は、脆弱なアプリケーションを実装しない、そして未然に危険性を見つけるために活用すること。決して悪用してはいけない。また、ぜひ自分がいままでに書いてきたコードを見直して修正するところまでを実践したいところだ。