Web アプリケーションの脆弱性に対する攻撃と防御

概要

これは Web Application Exploits and Defenses を日本語に訳したものです。

本家ガイドは CC-By 3.0 ライセンス の基で公開されています。 また、日本語訳された本ガイドも同ライセンスを継承します。

本家ガイドの著者は以下の通りです。

  • Bruce Leban
  • Mugdha Bendre
  • Parisa Tabriz

また、本ガイドの翻訳者は以下の通りです。

  • Kosei Kitahara

本ガイドに誤植、誤訳があった場合は issue で教えてください。 その他本ガイドに関する問い合わせは、サイト最下部に記載のメールアドレスか @Surgo にお願いします。

本家ガイドの著作権は Google が有しています。 利用に当たっては Google の Terms of Service を参照してください。

更新

  • 2010-06-13: Codelab アプリケーションの名前を Gruyere (旧 Jarlsberg) に変更。ブックマークを更新してください。

ハッカーを打ち負かしたいですか ?

  • ハッカーがどのようにしてセキュリティの脆弱性を見つけるのかを学ぶ !
  • ハッカーがどのように Web アプリケーションを攻撃するのかを学ぶ !
  • それをどのように防ぐかを学ぶ !

この codelab では、どのようにして Web アプリケーションの脆弱性が攻撃されるか、 またその攻撃をどのように防御するかを見ることができます。 学習するための最善の道は実際にやってみることであり、 実アプリケーションに対して侵入をテストすることができます。 具体的には、以下の内容を学習します:

  • どのようにして、アプリケーションへの クロスサイトスクリプティング (XSS) やクロスサイトリクエストフォージェリー (XSRF|CSRF) のような Web セキュリティに共通する脆弱性を利用する攻撃ができるようになるか
  • どのようにして、そのような脆弱性やその他、情報漏えい、サービス不能 (DoS) 攻撃、 遠隔地からのコード実行などのセキュリティ事件・事故につながるバグを見つけ、 解決し、防止するか。

この lab を最大限に活用するためには、 Web アプリケーションの動作原理 (例えば、HTML, テンプレート, Cookies, AJAX 等に関する一般的な知識) に精通している必要があります。

Gruyere

Gruyere

この codelab に構築された Gruyere は、 小規模で、ユーザが簡単なスニペット (テキスト) の投稿や様々なファイルを保存できる、 チーズのよう (安価) な Web アプリケーションです。 “残念なことに”、Gruyere には、 クロスサイトスクリプティングやクロスサイトリクエストフォージェリーによる 情報漏えい、サービス不能 (DoS) 攻撃、 遠隔地からのコード実行 (remote code execution) などの多くのセキュリティ欠陥があります。 この codelab の目標は、このような欠陥の発見とその解決方法を Gruyere と一般的な例を交えて学びます。

codelab は脆弱性の種類毎に構成されています。 それぞれのセクションでは、脆弱性の概要を読み、Gruyere 内にあるその脆弱性を探してください。 悪意のあるハッカーになりきり、セキュリティ欠陥を探しだし、悪用するのがあなたの仕事です。 この codelab では、ブラックボックスハッキングとホワイトボックスハッキングの両方を使えます。 ブラックボックスハッキング では、 アプリケーションをテストし、入力フィールドと URL パラメータに手を加え、 セキュリティバグを見つけ、 HTTP リクエストとレスポンスからサーバの動作を推測します。 ソースコードにアクセスしませんが、ソースの見方を理解していうことと、 HTTP ヘッダーを参照 (ChromeFirefoxLiveHTTPHeaders) できることは大切です。 BurpWebScarab のような Web プロキシを使うと、リクエストの作成や変更が幸せになれます。 ホワイトボックスハッキング では、 ソースコードにアクセスし、バグを確認するために自動または手動で分析します。 Gruyere は、オープンソースと同様に取り扱い可能です: バグを見つけるためにソースコードの全てを読むことができます。 Gruyere は Python で書かれているため、Python に精通していると幸せになれます。 ただし、対象となるセキュリティ脆弱性は Python 固有のものではなく、 コードを読まなくても lab のほとんどを実施することができます。 ハックのために、ローカルに Gruyere インスタンスを起動することができます: 例えば、管理機能がどのように動作するかを学んだら、 ローカルインスタンスに管理者アカウントを作成し、ハッキングに利用できます。 実際多くの場合において、セキュリティ研究者は両ハッキングテクニックを利用しています。

それぞれの課題を解決するために必要なテクニックにタグをつけています:

black box ブラックボックステクニックのみを利用して解決できる課題

white box Gruyere のソースコードを見て解決する必要がある課題

both 最初のヒントで提供される Gruyere に関する具体的な知識が必要な課題

警告

認可のないコンピュータシステムへのアクセスや攻撃は、多くの国において (もちろん日本でも) 違法です。 codelab においては、指定された Gruyere アプリケーションへの攻撃を特別に許可します。 App Engine やその他の Google のサービスを攻撃しないように、 この codelab で記載されている方法以外での Gruyere への攻撃も禁止します。 codelab は自身のアプリケーションをよりセキュアにするための学習のみに利用してください。 自身、または適切な機関 (例えば会社のセキュリティチーム) から許可されたアプリケーション以外、 どんなアプリケーションへも利用しないでください。