攻撃者の立場で脆弱性を学ぶAppGoatによる演習の勧め10個のツールで学ぶ、備える!情報セキュリティの脅威と対策

IPA提供のツールを活用して企業が留意すべきセキュリティについて学ぶ連載の10回目は、脆弱性体験学習ツール「AppGoat」を紹介します。開発に携わる初心者から上級者までを対象に、脆弱性の発見と対策を体系的に学習できるツールです。

» 2012年01月30日 08時00分 公開
[情報処理推進機構,ITmedia]

 情報処理推進機構(IPA)は、実習形式で脆弱性の発見方法や対策の取り方を学習できるツール「AppGoat」を公開しています。AppGoatは、開発者をターゲットとして開発された体験型の脆弱性対策学習ソフトです。開発経験の浅いプログラマーから上級者まで幅広くカバーできる学習テーマを準備しています。

 AppGoatは学習対象とするアプリケーションによって「ウェブアプリケーション版」と「サーバ・デスクトップアプリケーション版」の二つに分かれています。内容は「ウェブアプリケーション版」では15テーマ、「サーバ・デスクトップアプリケーション版」では13テーマから構成されています。

AppGoatのダウンロードと導入方法

 AppGoatは、プログラムをダウンロードして実行します。動作要件は以下の通りです。

項目 要件
OS Microsoft Windows XP SP3/Vista SP2/7(32bit版)
CPU OSの動作に支障がないこと
メモリ OSの動作に支障がないこと
HDD 100Mバイト以上の空き容量
モニター 解像度1024×768ピクセル以上
Webブラウザ Internet Explorer 7またはFirefox 3.6以上
その他 Adobe Reader 9以上がインストールされていること

 動作要件に問題がなければ、AppGoatの紹介ページにあるリンクから、「ウェブアプリケーション版」または「サーバ・デスクトップアプリケーション版」をダウンロードします。ZIPファイルがダウンロードされるので展開してください。

 セットアップやインストールといった作業は特に必要なく、IPA Toolフォルダにあるstart.batファイルをダブルクリックして実行するとAppGoatが起動します。

 なお、AppGaotではローカルPC上にWebサーバであるApache 2.2を稼働させ、このApacheを通してWebブラウザ上で演習を行います。そのため、AppGoatを使用するPCにApacheないし、MicrosoftのInternet Information Services(IIS)といったWebサーバが既に稼働している場合は、正しく動作しません。実行時にエラーメッセージ(図1)が出た場合には、使用中のWebサーバを停止するか、稼働時のポート番号を80番以外に設定してください。

図1:既にポート80番を占有しているアプリケーションが動作している場合には起動できません

 起動後にコマンドプロンプトで実行に必要な環境が整っているのかどうかのチェックが入ります。上述の80番ポートの使用可否の他に、実行に必要なVisual C++のランタイムがインストールされているかどうかのチェックも行われます。画面の指示に従ってください。

「ウェブアプリケーション版」の実行例

 start.batから実行するとWebブラウザが自動で立ち上がり、トップページが表示されます(図2)。

図2:AppGoatの実行画面。最初は練習ページからチュートリアルを行っておくといいでしょう

 「ウェブアプリケーション実習環境へ」というリンクをクリックすると本編に進みます。この演習では実際に実装上の問題があるWebアプリケーションを使って、脆弱性によってどういった問題が発生するのかを体験します。「ウェブアプリケーション版」では次の15テーマが解説されます。

「ウェブアプリケーション版 学習テーマ一覧」

クロスサイト・スクリプティング

  • クロスサイト・スクリプティングとは
  • アンケートページの改ざん(反射型)
  • 掲示板に埋め込まれるスクリプト(格納型)
  • 入力情報の漏えい(反射型)
  • ウェブページの改ざん(DOMベース)
  • 不完全な対策

SQLインジェクション

  • SQLインジェクションとは
  • 不正なログイン(文字列リテラル)
  • 情報漏えい(数値リテラル)
  • 他テーブル情報の漏えい(数値リテラル)
  • データベースの改ざん(数値リテラル)

CSRF(クロスサイト・リクエスト・フォージェリ)

  • CSRF(クロスサイト・リクエスト・フォージェリ)とは
  • 意図しない命令の実行
  • 不完全な対策

その他

  • エラーメッセージからの情報漏えい

 各テーマは概要の説明から始まり、脆弱性の原理、演習、影響の解説、対策方法の解説と進んでいきます(図3)。

図3:各テーマの流れ。演習部分では実際に脆弱性を突いた攻撃を試すこともできます(注:赤枠はサーバ・デスクトップアプリケーション版のみに存在するステージです)

 AppGoatが従来の脆弱性対策に関するツールや教材と大きく異なるのは、実際にプログラムを動作させながら、攻撃の仕組みや影響、対策を実体験を基に学習できる点です。例えば、SQLインジェクションについて解説しているテーマでは、架空の銀行サイトに対してログインを試行しますが、ここでSQL文を混入したIDで不正ログインができるかどうかを体験できます。演習では、「こう入力してください」という掲示はありません。ヒントはポップアップで確認することができます。ヒントは2段階で表示されますので、1つ目のヒントで攻撃が成功しない場合は、2つ目のヒントを見てみましょう(図4および図5)。

図4:この画面から仮想オンライン銀行に不正ログインを試みることができます
図5:具体的な入力例はないので、分からない人はヒントを見ながら攻撃を試みましょう

 開発の中級者であれば、1つ目のヒントから不正ログインに成功できるかもしれません。こうした脆弱性があるのだということと、実際に脆弱性を突いて不正にログインできたことを自身の開発案件と照らし合わせて対策の必要性について考えてみてください。難なく不正ログインできるスキルを持った開発上級者は、その脆弱性を回避するために具体的にどうしたらいいのか、どういうコードを書くべきかを考えて、後進に伝える方法も検討してください。対策については演習後のページに解説があります。例えばSQLインジェクションではプレースホルダーによりSQL文を組み立てる対策が一例として解説されています(図6)。

図6:SQLインジェクション対策の説明ページにある図。プレースホルダーを使った対策の説明図

 AppGoatは、このように演習を通して脆弱性を突いた攻撃を体験するという、今までにはない視点で作られている脆弱性対策学習ツールです。実際にコーディングを行い、問題があれば対策を立てなくてはならない開発者だけでなく、システム管理者もこうした脆弱性があって、実際に「こうやって攻撃されるんだ」ということを学習しておくといいでしょう。攻撃のパターンを体験すれば、脆弱性を突こうとした攻撃の痕跡を発見するスキルも向上します。

編集部より……「10個のツールで学ぶ、備える!情報セキュリティの脅威と対策」シリーズは今回が最終回となります。

Copyright © ITmedia, Inc. All Rights Reserved.

注目のテーマ