情報流出、踏み台、システム改竄……これらの事が起きてからでは、もう遅い。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はあくまでも学習用に公開されたサイトだ。権限がないシステムへのアクセスや攻撃は違法行為となる。ここで得た知識は、脆弱なアプリケーションを実装しない、そして未然に危険性を見つけるために活用すること。決して悪用してはいけない。また、ぜひ自分がいままでに書いてきたコードを見直して修正するところまでを実践したいところだ。