Comments
Transcript
脆弱性体験学習ツール 「AppGoat」 - IPA 独立行政法人 情報処理推進機構
脆弱性体験学習ツール 「AppGoat」ハンズオンセミナー ウェブアプリケーション編 Copyright © 2011 独立行政法人 情報処理推進機構 講義内容 AppGoatの説明 起動手順、学習の進め方、利用シーン紹介 脆弱性学習(演習あり) SQLインジェクションの脆弱性 クロスサイト・スクリプティングの脆弱性 アンケート記入 Copyright © 2011 独立行政法人 情報処理推進機構 2 「AppGoat」の説明 Copyright © 2011 独立行政法人 情報処理推進機構 AppGoat(アップゴート)とは 本講義では、 ウェブアプリケーション版 の演習環境を使います。 教材や演習環境を使って、脆弱性を突いた攻撃が成功する 仕組みから実際の対策方法までを学習するツール – 教材:脆弱性対策に必要な情報を図解したもの – 演習環境:故意に脆弱性を埋め込んだアプリケーション ウェブアプリケーション版 – 下記の2種類がある ウェブアプリケーション版 学習 クロスサイト・スクリプティングやSQLイン ジェクションなどを題材とした、15の学習 テーマから構成されている。 サーバ・デスクトップ アプリケーション版 サーバ・デスクトップアプリケーション版 バッファオーバーフローや整数オーバーフ ローなどを題材とした、13の学習テーマか ら構成されている。 Copyright © 2011 独立行政法人 情報処理推進機構 学習 4 学習テーマ一覧 -ウェブアプリケーション版• ウェブアプリケーション版は、下記表の脆弱性を学習可能 講義内で 演習実施 ● Copyright © 2011 独立行政法人 情報処理推進機構 5 起動手順(準備) 本講義では、 お手元にあるCD-ROMから ZIPファイルをコピーします。 IPAまたはVectorのウェブサイトからZIPファイルをダ ウンロードします。 – 下記からダウンロード可能です http://www.ipa.go.jp/security/vuln/appgoat/index.html http://www.vector.co.jp/soft/dl/winnt/edu/se488644.html – 動画による使い方の解説もあります http://www.youtube.com/watch?v=uuH8JBgTdLc Copyright © 2011 独立行政法人 情報処理推進機構 6 起動手順(手順1) ZIPファイルを展開し、IPAToolフォルダの中にある、 「Start.bat」をダブルクリックします。 Copyright © 2011 独立行政法人 情報処理推進機構 7 起動手順(手順2) ランタイムのインストール確認ダイアログが表示され ますが、ウェブアプリケーション環境の演習には必要 ないため、「いいえ」を選択します。 Copyright © 2011 独立行政法人 情報処理推進機構 8 起動手順(手順3) Windowsファイアウォールの警告ダイアログが表示 された場合は、「ブロックする」を選択します。 Copyright © 2011 独立行政法人 情報処理推進機構 9 起動手順(手順4) ウェブブラウザが起動し、AppGoatの総合メニューが 表示されます。これでツールが使用可能になりました。 Copyright © 2011 独立行政法人 情報処理推進機構 10 学習の進め方 左部に表示される「テーマ一覧」から学習テーマを 選択します。あとは、流れに沿って学習を進めてい きます。 学習テーマ選択後の流れ 脆弱性 原理解説 演習 影響解説 対策方法 解説 演習のイメージ 脆弱性の発見 にチャレンジ! 脆弱性発見! Copyright © 2011 独立行政法人 情報処理推進機構 脆弱性を突いた攻撃が 成功する仕組みを体験 することで、脆弱性をより 理解できます。 11 企業での利用シーン紹介 社内のセキュリティ研修で利用する 研修担当者が講師となり、 ハンズオン形式で教える。 AppGoatを使った講義の補助資料を公開しています。 http://www.ipa.go.jp/security/vuln/documents/appgo at_material01.pdf 開発前のスキルチェックで利用する 開発メンバーの理解度を確認する。 「安全なウェブサイトの作り方」と併せて利用すると効 果的です。 http://www.ipa.go.jp/security/vuln/websecurity.html Copyright © 2011 独立行政法人 情報処理推進機構 12 AppGoatを使う際の注意事項 AppGoatでは、脆弱性を埋め込んだ演習環境に 対して、疑似的に攻撃します。これは攻撃手法を 理解して対策につなげるためです。 本講義で学習した知識を基に、下記に該当する行為を行 わないようにしましょう。 (1) 第三者のコンピュータシステムの正常な動作に支障をきたす行為 (2) 第三者のウェブサイトへの攻撃行為 Copyright © 2011 独立行政法人 情報処理推進機構 13 SQLインジェクションの脆弱性 Copyright © 2011 独立行政法人 情報処理推進機構 講義内容 用語の簡易説明 SQLインジェクション脆弱性の概要 演習:AppGoatを用いた疑似攻撃体験 対策のポイント Copyright © 2011 独立行政法人 情報処理推進機構 15 登場する用語の簡易説明 ウェブアプリケーション – ウェブサーバ上で動作するアプリケーション。 – 利用者はウェブブラウザを用いてウェブサーバにアクセス し、ウェブアプリケーションを利用する。 データベース – 大量の情報を保存し、効率よく情報にアクセスできるよう に加工したデータの集まり。 SQL – データベースを管理するシステム(DBMS)において、デー タの操作や定義を行うための問合せ言語のこと。 Copyright © 2011 独立行政法人 情報処理推進機構 16 SQLインジェクション脆弱性の概要 脅威 – データベースへの命令(SQL文)の意味を書き換えられ、 データベースを不正に操作されてしまう • 情報の改ざんや漏えい、認証の回避、OSコマンドの実行 原因 – ウェブアプリケーションにおける、データベースへの命令 (SQL文)の組み立て方に問題 注意が必要なウェブアプリケーション – データベースを利用しているウェブアプリケーション Copyright © 2011 独立行政法人 情報処理推進機構 17 SQLインジェクション攻撃のイメージ図 SQL インジェクション SQL インジェクションの脆弱性がある場合、 悪意あるリクエストにより、データ ベースの不正利用をまねく可 能性があります。 ウェブサイト SQL文の組み立て方に問題 悪意のある人 データベースへの命令文 を構成する入力値を送信 データベースへ命令を送信 消去 データ ベース 情報 漏えい 改ざん SQLインジェ クションの脆弱性 があるウェブアプリケーション Copyright © 2011 独立行政法人 情報処理推進機構 18 SQL文の組み立て方に問題があると IDを入力すると、該当するユーザ情報を表示するウェブアプリ SQL文例 SELECT * FROM user WHERE id=‘$ID’ 「全て」を意味する SELECT * FROM user WHERE id= ‘ john’ OR OR ‘A’=‘A ’ ② ユーザの入力値をもとにSQL文を組み立て、 ① ID入力欄に下記文字列を入力し データベースに送信する。 リクエストを送信する。 john ’ OR ‘A’=‘A 悪意がある人 user 全てのユーザ情報 ④ 全てのユーザの 情報を参照できる ウェブサーバ + ウェブアプリ ③ SQL文の実行結果を データベース ウェブアプリに返す。 ・データベースが不正に操作されてしまう!! Copyright © 2011 独立行政法人 情報処理推進機構 19 攻撃によりSQL文の意味が書き換えられる はユーザからの入力値を表す アプリケーション開発者が想定していたSQL文 SELECT * FROM user WHERE id=' john '; 条件: Id列の値と、「'」で括られた文字列リテラル(※)が一致する行 攻撃により、意味が書き換えられたSQL文 SELECT * FROM user WHERE id=' john' john' OR OR 'A'='A 'A'='A '; 条件: Id列の値と、文字列リテラル john が一致する行 または 文字列リテラルAと文字列リテラルAが一致する行(常に成立する条件) ※SQL文中の「'john'」のような定数をリテラルと呼び、文字列としてのリテラル を文字列リテラルと呼ぶ。数値は数値リテラルと呼ぶ。 文字列リテラルは「'」で括り、数値リテラルは「'」で括らない。 Copyright © 2011 独立行政法人 情報処理推進機構 20 SQLインジェクション攻撃の脅威 脅威は情報漏えいに限らない。データベース を制御され、データが作成/読み込み/更新/ 削除される可能性がある。 – Create (作成): – Read (読込): – Update(更新): – Delete (削除): 偽データの追加の脅威 データの漏えいの脅威 偽データでの上書きの脅威 データの削除の脅威 OSコマンドの実行 – ストアドプロシージャ等を利用したOSコマンドの実行の 可能性がある。 Copyright © 2011 独立行政法人 情報処理推進機構 21 SQLインジェクションの脆弱性を 取り巻く状況 クレジットカード番号や個人情報の漏えい – – – – 音響機器・楽器販売サイト 健康食品や医薬品販売サイト 化粧品販売サイト 雑貨販売サイト ウイルス感染などを引き起こすウェブサイトの改ざん – ウイルス対策ソフト開発会社 – 自動車情報サイト – 政府関連のウェブサイト Copyright © 2011 独立行政法人 情報処理推進機構 22 [演習]AppGoatを用いた疑似攻撃体験 [時間]30分(解説含む) AppGoatを起動し、SQLインジェクションの下 記テーマの演習を実施してください。 「不正なログイン(文字列リテラル)」 画面上に「Congratulations!! 」と表示される と演習クリアです。 クリアした方は、下記テーマの演習に挑戦してみてください。 「情報漏えい(数値リテラル)」 Copyright © 2011 独立行政法人 情報処理推進機構 23 [演習]演習環境へのアクセス方法 AppGoat起動後、①学習テーマを選択し、 ②パンくずリストの「演習」をクリックします。 Copyright © 2011 独立行政法人 情報処理推進機構 24 [演習]演習の進め方 下記のように、ウェブアプリケーションがどのように SQL文を組み立てているのか、想像しながら演習問 題を解いてみましょう。 – 「前提条件」ボタンを押下し、どのようなSQL文が使用され ているか確認する。 – 様々な値でログインを試み、ウェブアプリケーションの挙動 を確認する。 • ログインIDに「yamada」、パスワードに「P@ssword」を入力する。 • ログインID、パスワードともに「yamada」を入力する。 • 入力欄のいずれかにシングルクォート「'」を入力する。 Copyright © 2011 独立行政法人 情報処理推進機構 25 [演習]行き詰まった場合 問題を解くのに行き詰まった場合は、AppGoatの ヒント機能を参考に演習を進めてください。 AppGoatのヒント機能 不明な点がございましたら、お気軽にお声掛けくだ さい(または挙手)。補助講師が伺います。 Copyright © 2011 独立行政法人 情報処理推進機構 26 [演習解説] 演習解説は、別紙を参照してください。別紙 は、演習時間終了後に閲覧するようにしてく ださい。 Copyright © 2011 独立行政法人 情報処理推進機構 27 SQLインジェクション脆弱性の対策 根本的解決 「脆弱性の原因を作り込まない実装」 – SQL文の組み立て時に、パラメータの値を正しく リテラルとして展開する • SQL文の組み立ては全てプレースホルダで実装する。 • SQL文の組み立てを文字列連結により行う場合は、エスケープ処 理等を行うデータベースエンジンのAPIを用いて、SQL文のリテラ ルを正しく構成する。 保険的対策 「攻撃による影響を軽減する対策」※ – 詳細なエラーメッセージの抑止 – データベースアカウントの権限見直し ※ 脆弱性の原因そのものを無くす対策ではない Copyright © 2011 独立行政法人 情報処理推進機構 28 根本的解決 プレースホルダによるSQL文の組み立て – パラメータを「?」などの記号で示しておき、後に、そこへ実 際の値を機械的な処理で割り当てる方法のこと – 記号「?」をプレースホルダと呼び、そこへ実際の値を割り 当てることを「バインドする」と呼ぶ – プレースホルダを用いることで、SQLインジェクション攻撃 によりSQL文の構文を変化させられないようにする PreparedStatement prep = conn.prepareStatement("SELECT * FROM employee WHERE name=?"); プレース prep.setString(1, "山田"); ホルダ Java バインドする Copyright © 2011 独立行政法人 情報処理推進機構 29 根本的解決 プレースホルダの種類 – バインドをいつ行うのかによって、下記の2種類 に分けられる。 静的プレースホルダ 静的プレースホルダ を推奨 データベース側がバインド処理 後からSQL文の構文が変化することがなく、原理的にSQL インジェクションの可能性がない 動的プレースホルダ ウェブアプリケーション側のライブラリ内でバインド処理 ライブラリの実装にバグがあった場合は、攻撃によりSQL 文の構文を変化させられてしまう可能性を否定できない Copyright © 2011 独立行政法人 情報処理推進機構 30 静的プレースホルダ使用時のSQL文実行の流れ 静的プレースホルダ 利用者 ウェブサイト ウェブアプリケーション データベース SELECT *FROM table WHERE id = ‘●’ and passwd = ‘▲’ ●=satou, ▲=a15T SELECT *FROM table WHERE id = ‘●’ and passwd = ‘▲’ ●=satou, ▲=a15T SELECT *FROM table WHERE id = ‘satou’ and passwd = ‘a15T’ 実行結果 実行結果 ●=takana, ▲=vRi5 ●=takana, ▲=vRi5 SELECT *FROM table WHERE id = ‘takana’ and passwd = ‘vRi5’ 実行結果 実行結果 Copyright © 2011 独立行政法人 情報処理推進機構 31 プレースホルダの使用例 (根本的解決) 静的プレースホルダを使用(PHP + PostgreSQL) <?php require_once 'MDB2.php';//ライブラリのロード $db = MDB2::connect('pgsql://username:password@hostname/dbname' . '?charset=utf8'); if(PEAR::isError($db)) { //エラー処理 } $stmt = $db->prepare('SELECT * FROM atable WHERE name=? and num=?', array('text', 'integer'), array('text', 'text', 'integer')); $rs = $stmt->execute(array($name, $num)); // 文字列型と整数型の変数 if(PEAR::isError($rs)) { //エラー処理 } // 以下は検索結果の表示 while($row = $rs->fetchRow()) { printf("%s:%s:%s¥n", $row[0], $row[1], $row[2]); } 参考:「安全なSQLの呼び出し方」P.19 MDB2を用いたSQL呼び出しのサンプルコード Copyright © 2011 独立行政法人 情報処理推進機構 32 保険的対策 攻撃による影響を低減する対策 詳細なエラーメッセージを表示しないようにする – 詳細なデータベースに関するエラーメッセージをウェブページに表示 させない – エラーを表示するとしても、内容は最小限にする データベースアカウントの権限見直し – 「権限全部入り」のアカウントは使わない • 既存のテーブルを読み書きするだけなのに、テーブル操作や管理等の 権限はいらない • 権限を必要最小限にすれば、防げる攻撃もある その他の対応 – 収集する情報および、データベースに格納する情報を見直す – ウェブサイト利用者のパスワードはそのまま保存しない Copyright © 2011 独立行政法人 情報処理推進機構 33 対策のおさらい SQL文の組み立て時には、プレースホルダを使 用して、パラメータを正しくリテラルとして展開する。 その他の対策は、「安全なウェブサイトの作り方」、 「安全なSQLの呼び出し方」を参照。 安全なウェブサイトの作り方 改訂第5版 別冊:「安全なSQLの呼び出し方」 http://www.ipa.go.jp/security/vuln/websecurity.html Copyright © 2011 独立行政法人 情報処理推進機構 34 クロスサイト・スクリプティングの脆弱性 Copyright © 2011 独立行政法人 情報処理推進機構 講義内容 用語の簡易説明 クロスサイト・スクリプティング脆弱性の概要 実習:AppGoatを用いた疑似攻撃体験 対策のポイント Copyright © 2011 独立行政法人 情報処理推進機構 36 登場する用語の簡易説明 HTML – ウェブページを記述するためのマークアップ言語。 – 文書の一部を“<”と“>”で挟まれた「タグ」と呼ばれる特別な 文字列で囲うことにより、文章の構造や修飾についての情 報を文書に埋め込んで記述することができる。 Cookie – ウェブサーバとウェブブラウザ間で状態を管理するために 使われる。例えば、ウェブサイトの訪問回数や、ユーザ認 証後の状態を管理するために使われる。 Copyright © 2011 独立行政法人 情報処理推進機構 37 クロスサイト・スクリプティング脆弱性の概要 脅威 – 出力するウェブページ(HTML)を書き換えられ、ウェブ ページを操作されてしまう • 本物サイト上に偽のページが表示される、Cookieを取得される等 原因 – ウェブページ出力(HTML生成)の実装に問題 注意が必要なウェブアプリケーション – 動的にウェブページを出力するウェブアプリケー ション Copyright © 2011 独立行政法人 情報処理推進機構 38 クロスサイト・スクリプティング攻撃の イメージ図 • 罠ページや罠リンクへのアクセスから、利用者が被害を受ける 悪意のある人が 用意した罠ページ 1-a.罠とは知ら ず、悪意あるサイト の罠ページを閲覧 ウェブサイト 利用者のブラウザ クリック! 利用者のメーラ 悪意の ある人 1-b.罠リンクを含 むメールを送信 2. クリック等 により、 スク リ プトを 含む 文 字列を送信 リンク ウェブ アプリケーション 利用者 Cookie 漏えい 5.スクリプトの内容によって はCookie情報などが漏えい Copyright © 2011 独立行政法人 情報処理推進機構 スクリプト 実行 偽ページ の表示 4.利用者のブラウザ上でスクリプトが実行 3.スクリプトを含む ウェブページを出力 HTML生成の 実装に問題 39 HTML生成の実装に問題があると 正常系 検索キーワード ① IPA ③ ② 利用者 ウェブサーバ +ウェブアプリ 【IPA】を含む 検索結果 異常系 検索キーワード <s>IPA</s> ③’ 利用者 【IPA】を含む 検索結果 Copyright © 2011 独立行政法人 情報処理推進機構 <html> 【IPA IPA 】を含む検索結果 …</html> <s>は、取り消し線 を引くHTMLタグ ①’ ②’ ウェブサーバ +ウェブアプリ <html> 【<s>IPA</s> <s>IPA</s> 】を含む 検索結果 …</html> "<" および ">" が出力され、HTMLタグとして認識 されてしまう (表示が崩れる)。 40 攻撃によりHTMLを書き換えられる アプリケーション開発者が想定していたHTML HTMLソース ウェブブラウザ <html> 【IPA IPA 】を含む検索結果 …</html> 【IPA】を含む検索結果 攻撃により、書き換えられたHTML HTMLソース ウェブブラウザ <html> 【<s>IPA</s> <s>IPA</s> 】を含む 検索結果 …</html> 【IPA】を含む検索結果 攻撃により、<script>タグとして認識させた場合には、利用者のウェ ブブラウザ上で任意のスクリプトが実行されてしまう。 Copyright © 2011 独立行政法人 情報処理推進機構 41 HTMLを書き換えられてしまうと 偽情報の表示 悪意あるサイト への誘導 なりすましに つながる 情報の窃取 Copyright © 2011 独立行政法人 情報処理推進機構 42 クロスサイト・スクリプティング攻撃の脅威 本物サイト上に偽のページが表示される – 偽の情報の流布による混乱 – フィッシング詐欺による重要情報の漏えい – アドレスバーに表示されているドメインは正規のものである ため、利用者が罠と気付きにくい ブラウザが保存しているCookie を取得される – Cookieにセッション ID が格納されている場合、さらに利用 者への成りすましにつながる 任意のCookieをブラウザに保存させられる – セッションIDが利用者に送り込まれ、「セッションIDの固定 化」攻撃に悪用される Copyright © 2011 独立行政法人 情報処理推進機構 43 クロスサイト・スクリプティングの脆弱性を 取り巻く状況 脆弱性による被害や騒動があったサイト – – – – – 動画共有サービス ミニブログサイト バグ管理システム ウェブメール クラウドを使ったデータ管理サービス IPAに届け出られたクロスサイト・スクリプティング の脆弱性は、2300件以上(2011年3月末) Copyright © 2011 独立行政法人 情報処理推進機構 44 [演習]AppGoatを用いた疑似攻撃体験 [時間]30分(解説含む) AppGoatを起動し、クロスサイト・スクリプティ ングの下記テーマの演習を実施してください。 「アンケートページの改ざん(反射型)」 画面上に「Congratulations!! 」と表示されると 演習クリアです。 クリアした方は、下記テーマの演習に挑戦してみてください。 「掲示板に埋め込まれるスクリプト(格納型) 」 Copyright © 2011 独立行政法人 情報処理推進機構 45 [演習]演習環境へのアクセス方法 AppGoat起動後、①学習テーマを選択し、 ②パンくずリストの「演習」をクリックします。 Copyright © 2011 独立行政法人 情報処理推進機構 46 [演習]演習の進め方 下記のように、ウェブアプリケーションがどのように HTMLを生成しているのか、想像しながら演習問題 を解いてみましょう。 – アンケートページで様々な値を入力し、入力内容確認ペー ジやエラーページを表示させる。 – アンケートページで入力した値が、どのようにHTMLに反 映されているか確認する。 Internet Explorer アンケートページ上で右クリックし、「ソースを表示」でHTMLソースを表示する。 Firefox アンケートページ上で右クリックし、「このフレーム」⇒「フレームのソースを表示」 でHTMLソースを表示する。 Copyright © 2011 独立行政法人 情報処理推進機構 47 [演習]行き詰まった場合 問題を解くのに行き詰まった場合は、AppGoatの ヒント機能を参考に演習を進めてください。 AppGoatのヒント機能 次のスライドの財団法人 地方自治情報センター (LASDEC)の資料抜粋(項番2.4)を参照ください。 脆弱性の検出パターンや脆弱性有無の 判定基準の目安が記載されています ウェブ健康診断 - 財団法人 地方自治情報センター(LASDEC) 平成22年度版ウェブ健康診断仕様 Internet公開用 https://www.lasdec.or.jp/cms/resources/content/1284/H22_web_kenko_shindan.pdf Copyright © 2011 独立行政法人 情報処理推進機構 48 [ 参 考 平成22年度版ウェブ健康診断仕様(抜粋) ] 地方自治体向けの脆弱性有無確認の参考資料 平成22年度版ウェブ健康診断仕様 Internet公開用 https://www.lasdec.or.jp/cms/resources/content/1284/H22_web_kenko_shindan.pdf Copyright © 2011 独立行政法人 情報処理推進機構 49 [演習解説] 演習解説は、別紙を参照してください。別紙 は、演習時間終了後に閲覧するようにしてく ださい。 Copyright © 2011 独立行政法人 情報処理推進機構 50 クロスサイト・スクリプティング脆弱性の対策 HTML テキストの入力を許可しない場合 検索や情報登録等の機能 を有するアプリ -根本的解決 ・HTMLにおける特別な記号文字をエスケープ処理する ・URL 出力時のスキームを制限する ・スクリプト要素の内容を動的に生成しない -保険的対策 ・入力値チェックをする HTML テキストの入力を許可する場合 掲示板やブログ等のアプリ -根本的解決 ・構文解析木を作成して、必要な要素のみを抽出する -保険的対策 ・入力された HTML テキストから、スクリプトを除く 全てのウェブアプリケーションに共通の対策 ・文字コードを正しく指定する Copyright © 2011 独立行政法人 情報処理推進機構 51 エスケープ処理(HTML不許可/根本的解決) •HTMLにおける特別な意味を持つ「記号文字」 を文字参照に置換 (HTMLを許可しない場合) •例: & → & " → " ' → ' < → < > → > 入力値:<script>alert("test");</script> 置換後: <script>alert("test");</script> Copyright © 2011 独立行政法人 情報処理推進機構 52 エスケープ処理(HTML不許可/根本的解決) エスケープ処理なし HTMLソース <input type="text" id="test" value=""><script>alert('ipa');</script>" /> ウェブブラウザ上の表示 scriptタグとして 解釈された エスケープ処理あり HTMLソース <input type="text" id="test" value=""><script>alert('ipa');</script>" /> ウェブブラウザ上の表示 Copyright © 2011 独立行政法人 情報処理推進機構 Inputタグのvalue属性の 値と解釈された 53 そもそもエスケープ処理って? HTMLやSQLの構文毎に異なる、特別な意味を 持つ「記号文字」(特殊記号)を"文字そのもの" として扱うために行う処理。 – HTMLにおける特殊記号は、「<」「"」「'」「&」など – SQLにおける特殊記号は、「'」「_」「%」など 特殊記号の中でも「データの区切り」を表す記号 をエスケープすることが、セキュリティ上重要。 – HTMLにおけるデータの区切り記号は、「<」「"」など – SQLにおけるデータの区切り記号は、「'」など Copyright © 2011 独立行政法人 情報処理推進機構 54 入力値チェックの位置づけ(保険的対策) 入力値チェックとは、利用者が入力した値の書式を 確認することが主目的。 – 例:パスワードの長さや使用可能な文字種のチェック 電話番号やメールアドレスの書式チェック 脆弱性による被害を低減する役割を果たすことが あるが、入力値チェックだけでは防げない。 参考:脆弱性体験学習ツールAppGoat クロスサイト・スクリプティングの「不完全な対策」 Copyright © 2011 独立行政法人 情報処理推進機構 55 [ ] 参 ウェブブラウザ側の 考 クロスサイト・スクリプティング対策 ウェブブラウザには、クロスサイト・スクリプティング 攻撃を防ぐ「XSSフィルタ」機能が備わっているもの がある。 XSSフィルタの検知ロジックは様々。誤検知や検知 しない可能性もある。 根本的には、ウェブアプリケーション側で対策する 必要がある。 Copyright © 2011 独立行政法人 情報処理推進機構 56 対策のおさらい ウェブページを出力する際には、HTMLにおける特 別な意味を持つ記号文字をエスケープすることが必 要。 ウェブサイトの性質によってエスケープ方法が異な る場合がある。詳しくは「安全なウェブサイトの作り 方」を参照。 安全なウェブサイトの作り方 改訂第5版 http://www.ipa.go.jp/security/vuln/websecurity.html Copyright © 2011 独立行政法人 情報処理推進機構 57 最後に 脆弱性が生まれる原理や対策方法の理解を深める ために、AppGoatを使ってウェブアプリケーションの 挙動を確認しました。 脆弱性対策を学習するために、AppGoatを活用いた だけましたら幸いです。 – セミナー講師が脆弱性対策を教える際の補助ツールとして – 社内への脆弱性対策の教育に – アプリケーション開発者に対する脆弱性対策学習を支援す るツールとして Copyright © 2011 独立行政法人 情報処理推進機構 58 アンケート記入 お疲れ様でした AppGoatに対する要望や意見を収集するため に、IPAのアンケートにご協力お願いします。 Copyright © 2011 独立行政法人 情報処理推進機構 59