...

脆弱性体験学習ツール 「AppGoat」 - IPA 独立行政法人 情報処理推進機構

by user

on
Category: Documents
5

views

Report

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を許可しない場合)
•例:
& → &amp;
" → &quot;
' → &#039;
< → &lt;
> → &gt;
入力値:<script>alert("test");</script>
置換後:
&lt;script&gt;alert(&quot;test&quot;);&lt;/script&gt;
Copyright © 2011 独立行政法人 情報処理推進機構
52
エスケープ処理(HTML不許可/根本的解決)
 エスケープ処理なし
HTMLソース
<input type="text" id="test" value=""><script>alert('ipa');</script>" />
ウェブブラウザ上の表示
scriptタグとして
解釈された
 エスケープ処理あり
HTMLソース
<input type="text" id="test"
value="&quot;&gt;&lt;script&gt;alert(&#039;ipa&#039;);&lt;/script&gt;" />
ウェブブラウザ上の表示
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
Fly UP