...

脆弱性体験学習ツール 「AppGoat」ハンズオンセミナー

by user

on
Category: Documents
29

views

Report

Comments

Transcript

脆弱性体験学習ツール 「AppGoat」ハンズオンセミナー
脆弱性体験学習ツール
「AppGoat」ハンズオンセミナー
~ウェブアプリケーション編~
独立行政法人 情報処理推進機構 (IPA)
技術本部 セキュリティセンター
本資料は、下記URLで公開しています。
情報処理推進機構:情報セキュリティ:脆弱性対策
http://www.ipa.go.jp/security/vuln/index.html#seminar
Copyright © 2011 独立行政法人 情報処理推進機構
講義内容
ウェブサイトを狙った攻撃の実情
脆弱性体験学習
SQLインジェクション
クロスサイト・スクリプティング
クロスサイト・リクエスト・フォージェリ
 IPAにおける脆弱性対策の取組み
Copyright © 2011 独立行政法人情報処理推進機構
AppGoat ハンズオンセミナー
2
ウェブサイトを狙った攻撃の実情(1)
~組織がターゲットになる攻撃~
 情報窃取を目的としたウェブサイトへのサイバー攻撃の発生
複数の有名企業を標的としたサイバー攻撃の発生。
1億件を超える個人情報が漏えいし、1ヶ月近くに渡りウェブサービスが停止。
ウェブサイトを経由し、ソフトウェアの脆弱性を狙ったサイバー攻撃。
大規模なハッカー組織による攻撃として世間を賑せた。
攻撃
ハッカー集団
情報の窃取
大手企業 ウェブサイト
ウェブサイト上の個人情報やカード情報がターゲットとなる
Copyright © 2011 独立行政法人情報処理推進機構
AppGoat ハンズオンセミナー
3
ウェブサイトを狙った攻撃の実情(2)
~ウイルス配布サイトへ改変~
 大手を含む複数企業のウェブサイトが改ざんされ、企業イメージの低下
利用者をフィッシングサイトや、ウイルス感
染サイトへ誘導し、情報を窃取する。
ウェブサイトが改ざんされ攻撃者の踏み台
となり、結果として犯罪に加担。
利用者からのクレームや報道等により、組
織のイメージ低下が避けられない。
ウェブページ改ざんには、XSSやSQLイン
ジェクションの脆弱性が悪用されている。
ウェブサイトに多くのユーザがアクセスする
為に、狙われやすい。
攻撃者の狙いは、ウェブサイトではなく利用者にある
Copyright © 2011 独立行政法人情報処理推進機構
AppGoat ハンズオンセミナー
4
ウェブサイトを狙った攻撃の実情(3)
~ミニブログサービスやSNSの利用者を狙った攻撃~
Twitter,mixi,Facebookなどの気軽に投稿
するサービスが流行
SNSサイトで「CSRF」の悪用
利用者が他者を中傷するようなコメントを、意図
せず投稿してしまう被害が発生
Twitterで「XSS」の悪用
Twitterの利用者に意図していない投稿を行わせ
たり、利用者のTwitterの表示を崩してしまう被害
が発生
利用者が多いことに目を付けた攻撃の発生
Copyright © 2011 独立行政法人情報処理推進機構
AppGoat ハンズオンセミナー
5
ウェブサイトへの攻撃件数の推移
~iLogScanner による JVNiPedia のログ解析事例~
解析したウェブサーバのアクセスログの期間:2010年9月~2011年8月
攻撃があったと思われる件数:平均2.8件/日、攻撃が成功した可能性の高い件数:0件
 20件/日の攻撃を受ける月もあり、脆弱性対策を行うことが重要
 ディレクトリ・トラバーサルやSQLインジェクションの攻撃が顕著
Copyright © 2011 独立行政法人情報処理推進機構
AppGoat ハンズオンセミナー
6
ウェブサイトの脆弱性届出の傾向
~XSS、SQLインジェクションの脆弱性が全体の78%~
 企業のウェブサイトを中心に複数の脆弱性が確認され、IPAへ届出られて
いる
クロスサイト・スクリプティング
SQLインジェクション
ファイルの誤った公開
セッション管理の不備
HTTPSの不適切な利用
認証に関する不備
その他
企業(株式・上場)
企業(株式・非上場)
企業(その他)
5%
3%
8%
団体
政府機関
地方公共団体
3%
3%
3%
5%
8%
21%
10%
68%
58%
5%
 IPAに届出られる脆弱性の8割がXSSとSQLインジェクション
 企業や政府機関のウェブサイトに脆弱性が確認されている
 国内では、XSSとSQLインジェクションの脆弱性を作り込みやすい傾向
Copyright © 2011 独立行政法人情報処理推進機構
AppGoat ハンズオンセミナー
7
対策されていないウェブサイトの割合
~脆弱性届出制度におけるウェブサイトの状況~
 2年間以上対策されないウェブサイト
(出典)IPA:ソフトウェア等の脆弱性関連情報に関する届出状況
2010第4四半期
 IPAが取り扱っている脆弱性情報について、200件以上のウェブサ
イトが修正されていない状態である
 開発工数の問題で対応できないという回答だけでなく、開発ベンダ
と連絡を取れずに対策ができないとの回答や、開発ベンダにメンテ
ナンスできる人材が不在で対策できないとの回答が散見された
Copyright © 2011 独立行政法人情報処理推進機構
AppGoat ハンズオンセミナー
8
攻撃が成功してしまう背景
 ウェブサイトへの攻撃が成功してしまう要因(一例)
① 脆弱性の放置
脆弱性を突いた攻撃に晒される危険
② 不適切なアクセス権の付与
不正アクセス・不正ログインの誘発
③ システムの設定不備
攻撃者が攻撃を行いやすくなる環
境の創出
・
・
・
開発工程において脆弱性や設定不備を作り込まないことが重要
セキュリティ・脆弱性対策を学ぶには、攻撃の仕組みを理
解することが重要
Copyright © 2011 独立行政法人情報処理推進機構
AppGoat ハンズオンセミナー
9
AppGoatによる学習の効果
AppGoat のコンセプト
攻撃が成功する仕組みを理解することで、脆弱性を引き起
こす脅威や正しい対策方法を身に付ける
 AppGoat の学習の目的
Step1
攻撃の仕組みを理解する
攻撃の仕組みを理解し、脆弱とな
る作りや仕様を理解する
Step2
実機で試してみる
脆弱性により引き起こされる脅威
を正しく理解する
Step3
対策方法を理解する
Copyright © 2011 独立行政法人情報処理推進機構
Step1,2で学習したことを基に、安
全な実装方法を身に付ける
AppGoat ハンズオンセミナー
10
AppGoatによる学習の効果
 教材と演習環境をセットにした学習ツール
– 教材:脆弱性対策に必要な情報を図解したもの
– 演習環境:故意に脆弱性を埋め込んだアプリケーション
知識の習得
学習教材
学習者
実践レベルの
スキルの習得
安全なソフトウェア開発の実現
演習環境
Copyright © 2011 独立行政法人情報処理推進機構
AppGoat ハンズオンセミナー
11
講義内容
ウェブサイトを狙った攻撃の実情
脆弱性体験学習
SQLインジェクション
 脆弱性の原理解説
 演習:AppGoatを用いた疑似攻撃体験
 脆弱性の対策解説
クロスサイト・スクリプティング
クロスサイト・リクエスト・フォージェリ
 IPAにおける脆弱性対策の取組み
Copyright © 2011 独立行政法人情報処理推進機構
AppGoat ハンズオンセミナー
12
SQLインジェクション脆弱性とは
 注意が必要なウェブアプリケーション
データベースを利用しているウェブアプリケーション
• コンテンツ管理システム(CMS)に脆弱性が見つかることも
 脅威
データベースへの命令(SQL文)の意味を書き換えら
れ、データベースを不正に操作されてしまう
• 情報の改ざんや漏えい、認証の回避、OSコマンドの実行
 原因
ウェブアプリケーションにおける、データベースへ
の命令(SQL文)の組み立て方に問題
Copyright © 2011 独立行政法人情報処理推進機構
AppGoat ハンズオンセミナー
13
SQLの基礎知識(演習を解く為のポイント)
 リテラル
SQL文中で使用される定数をリテラルと呼び、文字列型、数値型、日時型などがある
文字列型
SELECT name FROM employee WHERE employee_name = 'john'
数値型
SELECT name FROM employee WHERE age >= 25
 クォート(‘’)
SQLにおいて、データの区切り文字として使われる特殊な意味を持つ記号。
シングルクォートを使い、文字列リテラルの範囲を示す。
文字列リテラルの始まり
終わり
SELECT name FROM employee WHERE employee_name = 'john'
 コメント(--)
SQLにおいて、-- 以降は、命令文ではなくコメントとして扱う。
SQL文として無効となる
SELECT name FROM employee -- WHERE employee_name = ‘john'
Copyright © 2011 独立行政法人情報処理推進機構
AppGoat ハンズオンセミナー
14
SQLインジェクション攻撃のイメージ図
攻撃者がウェブアプリケーションの脆弱性を悪用して、不正な
SQL文を発行し、外部からデータベースを操作する攻撃
SQL インジェクション
SQL インジェクションの脆弱性がある場合、 悪意あるリクエストにより、データ ベースの不正利用をまねく可
能性があります。
ウェブサイト
悪意のある人
データベースへの命令文
を構成する入力値を送信
SQL文の組み立て方に問題
データベースへ命令を送信
消去
データ
ベース
情報
漏えい
改ざん
SQLインジェ クションの脆弱性
があるウェブアプリケーション
Copyright © 2011 独立行政法人情報処理推進機構
AppGoat ハンズオンセミナー
15
SQL文の組み立て方に問題があると
 例:IDとパスワードで認証するウェブアプリケーション
通常時
ID、パスワードを入力し、
認証ボタンをクリックする。
ユーザの入力値をもとにSQL文を組
み立て、データベースに送信する。
SELECT * FROM user WHERE
id= ' hanako ' AND pass='
id=hanako
pass=test
test
'
user
利用者
ウェブサーバ
データベース
+
認証後の画面を表示
する。
Copyright © 2011 独立行政法人情報処理推進機構
ウェブアプリ
AppGoat ハンズオンセミナー
SQL文の実行結果を
ウェブアプリに返す。
16
SQL文の組み立て方に問題があると
 例:IDとパスワードで認証するウェブアプリケーション
攻撃時
ID、パスワードを入力し、
認証ボタンをクリックする。
ユーザの入力値をもとにSQL文を組
み立て、データベースに送信する。
SELECT * FROM user WHERE
id= ' hanako' -- ' AND pass=' 123'
id=hanako' -pass=123
user
悪意がある人
ウェブサーバ
データベース
+
認証後の画面を表示
する。
ウェブアプリ
パスワード認証なしの
SQL文が実行され、認
証成功と判断される。
・データベースが不正に操作されてしまう!!
Copyright © 2011 独立行政法人情報処理推進機構
AppGoat ハンズオンセミナー
17
攻撃によりSQL文の意味が書き換えられる
はユーザからの入力値を表す
 通常時のSQL文
SELECT * FROM user WHERE id=' hanako ' AND pass= ' test '
条件: Idがhanakoかつパスワードがtestに一致する行
 攻撃時のSQL文
SELECT * FROM user WHERE id=' hanako'' -- ' AND pass= ' 123 '
条件: Idがhanakoに一致する行
-- 以降はコメント文として解釈される
※SQL文中の「'hanako'」のような定数をリテラルと呼び、文字列としてのリテラル
を文字列リテラルと呼ぶ。数値は数値リテラルと呼ぶ。
文字列リテラルは「'」で括り、数値リテラルは「'」で括らない。
Copyright © 2011 独立行政法人情報処理推進機構
AppGoat ハンズオンセミナー
18
SQL文の意味を書き換えられてしまうと
データベースに蓄積された
非公開情報の閲覧
非公開情報
の漏えい
ウェブページ
改ざん
データベースに蓄積され
た情報の改ざんによる、
ウェブページの改ざん
Copyright © 2011 独立行政法人情報処理推進機構
認証回避による
不正ログイン
AppGoat ハンズオンセミナー
不正ログイン
19
[演習]AppGoatを用いた疑似攻撃体験
[時間]20分(解説含む)
SQLインジェクションの下記テーマの演習を
実施しましょう。
「不正なログイン(文字列リテラル)」
画面上に「Congratulations!! 」と表示される
と演習クリアです。
クリアした方は、下記テーマの演習に挑戦してみてください。
「情報漏えい(数値リテラル)」
Copyright © 2011 独立行政法人情報処理推進機構
AppGoat ハンズオンセミナー
20
[演習]演習環境の説明
 「不正なログイン(文字列リテラル)」の演習環境
登場人物
• 攻撃者
演習中は、自身が攻撃者として行動し
ていると考えてください。
登場ウェブサイト
• SQLインジェクション脆弱性のあるオンラインバンキン
グサイト
脆弱性のあるウェブサイトに直接攻撃
します。
Copyright © 2011 独立行政法人情報処理推進機構
AppGoat ハンズオンセミナー
21
[演習]擬似攻撃のイメージ
SQL
HTTP
HTTP
Copyright © 2011 独立行政法人情報処理推進機構
AppGoat ハンズオンセミナー
SQL
22
[演習]演習の進め方
Step1:正常時のウェブアプリの動作を確認する
手順1:「前提条件」を押下し、ユーザ認証処理に使われるSQL文を確認する。
手順2:正規のID、パスワードでログインする。
着眼ポイント
ユーザからの入力値がSQL文中のどこに使われているか確認しましょう
Step2:脆弱性となる箇所を見つける
手順3:ログイン画面の入力フィールドに様々な値を入力して、動作を確認する。
着眼ポイント
SQL文で特別な意味を持つ文字を入力してみましょう
Step3:脆弱性を突いてみる
手順4:「前提条件」を参考に、認証を回避するようなSQL文を考える。
手順5:手順4のSQL文を発行するよう入力フィールドに値を入力しログインする。
着眼ポイント
パスワード認証を無効とするようなSQL文を発行してみましょう
Copyright © 2011 独立行政法人情報処理推進機構
AppGoat ハンズオンセミナー
23
[演習]行き詰まった場合
 問題を解くのに行き詰まった場合は、AppGoatの
ヒント機能を参考に演習を進めてください。
AppGoatのヒント機能
 不明な点がございましたら、お気軽にお声掛けくだ
さい(または挙手)。補助講師が伺います。
 問題が解けた方は、認証を回避して佐藤さん(sato)
としてログインしてみましょう。
Copyright © 2011 独立行政法人情報処理推進機構
AppGoat ハンズオンセミナー
24
[手順1]
ユーザ認証処理に使われるSQL文の確認する
 「前提条件」ボタンを押すと、ユーザ認証処理にど
のようなSQL文が使用されているか確認することが
できます。
Copyright © 2011 独立行政法人情報処理推進機構
AppGoat ハンズオンセミナー
25
[手順2]
正規のID、パスワードでログインする
着眼ポイント
ユーザからの入力値がSQL文中のどこに使われているか確認しましょう
 着眼ポイントに注目して、正規のID、パスワードでログインしてみましょう。
ログインできたらログアウトしてください。
Copyright © 2011 独立行政法人情報処理推進機構
AppGoat ハンズオンセミナー
26
[手順3]
ログイン画面の入力フィールドに様々な値を入力する
着眼ポイント
SQL文で特殊な意味を持つ文字を入力してみましょう
 入力フィールドにシングルクォート「'」を入力し、ログインしてみましょう。
 その結果、下記のようなSQL文が作成されることが推測できます。
SELECT * FROM user WHERE id = ‘test‘ AND password = ‘’‘ ;
「’」を入力したことにより、SQL文の構文エラーが発生したと推測
⇒SQLインジェクションの脆弱性が存在する可能性
Copyright © 2011 独立行政法人情報処理推進機構
AppGoat ハンズオンセミナー
27
[手順4]
認証を回避するようなSQL文を考える
 論理演算子(OR)と(')を使って条件式を書き換える
SELECT * FROM user WHERE id = '1' AND password = 'A' OR 'A'='A';
常に成立する条件
 [参考]コメント(--)を使って条件式を書き換える
SELECT * FROM user WHERE id = 'yamada' --' AND password = 'a';
SQL文として無効となる
Copyright © 2011 独立行政法人情報処理推進機構
AppGoat ハンズオンセミナー
28
[手順5]
攻撃により、手順4のSQL文を発行させる
着眼ポイント
パスワード認証を無効とするようなSQL文を発行してみましょう
1. 攻撃者がオンラインバンキングのログインフォームのID欄に適
当な文字列、パスワード欄に「A' OR 'A'='A」の文字列を入力し
ログインを試みます。
2. その結果、攻撃者が山田さんとしてログインできてしまいます。
Copyright © 2011 独立行政法人情報処理推進機構
AppGoat ハンズオンセミナー
29
なぜSQL文の書き換えが可能だったのか?
DBMSにおいて特別な意味を持つ記号文字「‘」の扱いが不適切
だったため。
 SQL文
SELECT * FROM user WHERE id='$i' AND pass='$p';
 $i=yamada $p=P@ssword の場合
SELECT * FROM user WHERE id='yamada' AND pass=‘ P@ssword ';
 $i=yamada $p=A' OR ‘A'=‘A の場合
SELECT * FROM user WHERE id='yamada' AND pass=‘ A' OR ‘A'=‘A ';
変数中の ’ が文字列リテラルの区切り文字として解釈され、
SQL文の構文が書き換えられてしまった。
Copyright © 2011 独立行政法人情報処理推進機構
AppGoat ハンズオンセミナー
30
[演習]AppGoatを用いた疑似攻撃体験
SQLインジェクションの下記テーマの演習を
実施しましょう。
「情報漏えい(数値リテラル)」
画面上に「Congratulations!! 」と表示される
と演習クリアです。
Copyright © 2011 独立行政法人情報処理推進機構
AppGoat ハンズオンセミナー
31
[演習]演習の進め方
Step1:正常時のウェブアプリの動作を確認する
手順1:「前提条件」を押下し、口座残高照会処理に使われるSQL文を確認する。
手順2:ログイン後、口座残高照会ページを閲覧する。
着眼ポイント
URLパラメータの値がSQL文中のどこに使われているか確認しましょう
Step2:脆弱性となる箇所を見つける
手順3:URLパラメータに様々な値を入力して、動作を確認する。
着眼ポイント
account_idに入力する値を変えて、エラーの発生有無を確認しましょう
Step3:脆弱性を突いてみる
手順4:「前提条件」を参考に、他人の口座残高情報を取得するSQL文を考える。
手順5:手順4のSQL文を発行するようURLパラメータに値を入力しログインする。
着眼ポイント
他人の口座残高情報を取得するようなSQL文を発行してみましょう
Copyright © 2011 独立行政法人情報処理推進機構
AppGoat ハンズオンセミナー
32
[手順1]
口座残高照会処理に使われるSQL文の確認する
 「前提条件」ボタンを押すと、口座残高照会処理にどのよう
なSQL文が使用されているか確認することができます。
 account_idは、数値リテラルを扱うことを確認します。
「’」で括られている
⇒文字列リテラル
Copyright © 2011 独立行政法人情報処理推進機構
AppGoat ハンズオンセミナー
「’」で括られていない
⇒数値リテラル
33
[手順2]
ログイン後、口座残高照会ページを閲覧する
着眼ポイント
URLパラメータの値がSQL文中のどこに使われているか確認しましょう
 口座残高照会ページを閲覧してみましょう。
選択値がSQL文のWHERE句
で使用されていると推測できる
Copyright © 2011 独立行政法人情報処理推進機構
AppGoat ハンズオンセミナー
34
[手順3]
URLパラメータに様々な値を入力して、動作を確認する
着眼ポイント
account_idに入力する値を変えて、エラーの発生有無を確認しましょう
 URLパラメータ( account_id )に test という文字列を入力し、アクセ
スしてみましょう。
 その結果、下記のようなSQL文が作成されることが推測できます。
SELECT * FROM account WHERE id = ‘yamada‘ AND account_id = test ;
文字列リテラルを入力値としたことで、SQL文の構文エラーが発生したと推測
⇒SQLインジェクションの脆弱性が存在する可能性
Copyright © 2011 独立行政法人情報処理推進機構
AppGoat ハンズオンセミナー
35
[手順4]
他人の口座残高情報を参照するSQL文を考える
 論理演算子(OR)を使って条件式を書き換える
⇒WHERE句が常に成立する条件式を作ります。
SELECT * FROM account WHERE id = 'yamada' AND account_id = 1 OR 1=1;
Copyright © 2011 独立行政法人情報処理推進機構
AppGoat ハンズオンセミナー
36
[手順5]
攻撃により、手順4のSQL文を発行させる
着眼ポイント
他人の口座残高情報を取得するようなSQL文を発行してみましょう
1. オンラインバンキングにログイン済みの攻撃者が、 URLパラメ
ータ( account_id )に「1 OR 1=1」の文字列を入力し、アクセス
します。
2. その結果、攻撃者が他人の口座情報を取得できてしまいます。
Copyright © 2011 独立行政法人情報処理推進機構
AppGoat ハンズオンセミナー
37
なぜSQL文の書き換えが可能だったのか?
変数に数値が入ることを想定している箇所に、数値以外の値が含
まれていたため、SQL文の意味が書きかえられた。
 SQL文
SELECT * FROM account WHERE id='$i' AND account_id=$ai;
 $i=yamada $ai=1 の場合
SELECT * FROM account WHERE id='yamada' AND account_id= 1 ;
 $i=yamada $ai=1 OR 1=1 の場合
SELECT * FROM account WHERE id='yamada' AND account_id= 1 OR 1=1 ;
変数中の文字列 OR が、SQL文の命令として解釈されてしまった
Copyright © 2011 独立行政法人情報処理推進機構
AppGoat ハンズオンセミナー
38
SQLインジェクション脆弱性の対策
 根本的解決 「第三者によるSQL文の発行を防止する実装」
SQL文の組立ては全てプレースホルダで実装する
SQL文の組立てを文字列連結により行う場合は、エスケープ処理等を
行うデータベースAPIを用いて、SQL文のリテラルを正しく構成する
ウェブアプリケーションに渡されるパラメータにSQL文を直接指定しない
POINT
パラメータから本来の意味を書き換えるSQL文を発行できなくする実装
 保険的対策 「攻撃による影響を軽減する対策」※
詳細なエラーメッセージの抑止
データベースアカウントの権限見直し
POINT
攻撃者にヒントとなる情報を与えない。仮にSQL文が発行できても、操作を最小
限に抑えることで影響を小さくする
※ 脆弱性の原因そのものを無くす対策ではない
Copyright © 2011 独立行政法人情報処理推進機構
AppGoat ハンズオンセミナー
39
根本的解決
~静的プレースホルダを利用した対策例~
 静的プレースホルダを利用して、事前に用意したテンプレートに
沿ったSQL文を発行
プレース
ホルダ
SQL文テンプレート
SELECT * FROM employee WHRE id=‘■’ AND password=‘▲’;
実行されるSQL文
値を割
当てる
パラメータ
yamada
パラメータ
P@ssword
SELECT * FROM employee WHRE id=‘yamada’ AND password=‘P@ssword’;
データベースエンジンで、先にSQL文の構文を確定(コンパイル)させ、後
からパラメータの値を機械的な処理で割り当てる方式
SQL文の組立てをデータベースエンジンで行わせることで、意図しない
SQL文の発行を防止
Copyright © 2011 独立行政法人情報処理推進機構
AppGoat ハンズオンセミナー
40
静的プレースホルダ使用時のSQL文実行の流れ
静的プレースホルダ
利用者
SQL文構文解析
(SQL文確定)
ウェブサイト
ウェブアプリケーション
データベース
SELECT *FROM table WHERE
id = ‘●’ and passwd = ‘▲’
●=satou, ▲=a15T
構文解析済の
SQL文にパラ
メータを追加
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 独立行政法人情報処理推進機構
AppGoat ハンズオンセミナー
41
【ご参考】:「安全なSQLの呼出し方」
http://www.ipa.go.jp/security/vuln/websecurity.html
プレースホルダの実装方法について、
プログラム言語とデータベース種別
毎にサンプルコードとして収録
Java + Oracle
ASP.NET + Microsoft SQL Server
Copyright © 2011 独立行政法人情報処理推進機構
Java + MySQL
Perl + MySQL
AppGoat ハンズオンセミナー
PHP + PostgreSQL
42
講義内容
ウェブサイトを狙った攻撃の実情
脆弱性体験学習
SQLインジェクション
クロスサイト・スクリプティング
 脆弱性の原理解説
 演習:AppGoatを用いた疑似攻撃体験
 脆弱性の対策解説
クロスサイト・リクエスト・フォージェリ
 IPAにおける脆弱性対策の取組み
Copyright © 2011 独立行政法人情報処理推進機構
AppGoat ハンズオンセミナー
43
クロスサイト・スクリプティング(XSS)脆弱性とは
 注意が必要なウェブアプリケーション
動的にウェブページを出力するウェブアプリケーション
 脅威
出力するウェブページ(HTML)を書き換えられ、ウェブ
ページを操作されてしまう
• 本物サイト上に偽のページが表示される、Cookieを取得される等
 原因
ウェブページ出力(HTML生成)の実装に問題
Copyright © 2011 独立行政法人情報処理推進機構
AppGoat ハンズオンセミナー
44
HTMLの基礎知識(演習を解く為のポイント)
 タグ(< >)
HTML文中で使用される記号<>をタグと呼ぶ。<s>テキスト</s>は、テキスト部分に取り消
し線を表示し、<script>スクリプト</script>は、スクリプト(JavaScript)を実行する。
ウェブブラウザ
HTMLソース
<html>
<s>IPA</s>
…</html>
IPA
 クォート(' または ")
HTMLにおいて、属性値の区切り文字として使われる記号。
シングルクォート(')やダブルクォート(")を使い、属性値の範囲を示す。
HTMLソース
属性値の始まり
終わり
ウェブブラウザ
<input type= "text" name="key" value="IPA" />
Copyright © 2011 独立行政法人情報処理推進機構
AppGoat ハンズオンセミナー
45
XSS攻撃のイメージ図
攻撃者が罠リンクや罠サイトを用意し、利用者を罠に誘導させること
で、利用者のブラウザ上でスクリプト等を実行させる攻撃
悪意のある人が
用意した罠ページ
1-a.罠とは知ら
ず、悪意あるサイト
の罠ページを閲覧
ウェブサイト
利用者のブラウザ
クリック!
利用者のメーラ
悪意の
ある人
1-b.罠リンクを含
むメールを送信
2. クリック等
により、 スク リ
プトを 含む 文
字列を送信
リンク
ウェブ
アプリケーション
利用者
Cookie
漏えい
5.スクリプトの内容によって
はCookie情報などが漏えい
Copyright © 2011 独立行政法人情報処理推進機構
スクリプト
実行
偽ページ
の表示
4.利用者のブラウザ上でスクリプトが実行
AppGoat ハンズオンセミナー
3.スクリプトを含む
ウェブページを出力
HTML生成の
実装に問題
46
HTML生成の実装に問題があると
通常時
検索キーワード
①
IPA
③
②
利用者
ウェブサーバ
+ウェブアプリ
【IPA】を含む
検索結果
異常時
検索キーワード
<s>IPA</s>
<s>は、取り消し線
を引くHTMLタグ
①’
②’
③’
利用者
【IPA】を含む
検索結果
Copyright © 2011 独立行政法人情報処理推進機構
<html>
【IPA
IPA 】を含む検索結果
…</html>
ウェブサーバ
+ウェブアプリ
<html>
【<s>IPA</s>
<s>IPA</s> 】を含む
検索結果
…</html>
"<" および ">" が出力され、HTMLタグとして認識
されてしまう (表示が崩れる)。
AppGoat ハンズオンセミナー
47
<script>タグとして認識させられると
通常時のHTML
HTMLソース
ウェブブラウザ
<html>
【IPA
IPA 】を含む検索結果
…</html>
【IPA】を含む検索結果
攻撃時のHTML
scriptタグとして解釈された
HTMLソース
ウェブブラウザ
<html>
【 <script>alert('ipa')</script> 】
を含む検索結果
…</html>
【
攻撃により、<script>タグとして認識させた場合には、利用者のウェブブ
ラウザ上で任意のスクリプトが実行され、表示の改ざんなどが可能になる
Copyright © 2011 独立行政法人情報処理推進機構
AppGoat ハンズオンセミナー
48
攻撃対象者を罠に誘導させる
 攻撃対象者を罠リンクや罠サイトに誘導させることで、
他人を攻撃することができてしまう。
他人を攻撃
サイトAに期間限定情報が載ってるよ
このリンクをクリック!!
攻撃者
自分自身を攻撃
Click
スクリプト
実行
スクリプト
実行
攻撃者
XSS脆弱性のある
サイトA
Copyright © 2011 独立行政法人情報処理推進機構
攻撃対象者
AppGoat ハンズオンセミナー
XSS脆弱性のある
サイトA
49
スクリプトを実行されてしまうと
ブラウザ上に表示されている情報
が偽情報に書き換えられる
偽情報の表示
悪意あるサイト
への誘導
気付かぬうちに
悪意あるサイトへ
誘導される
Copyright © 2011 独立行政法人情報処理推進機構
なりすましに
つながる
情報が窃取される
AppGoat ハンズオンセミナー
情報窃取
50
[演習]AppGoatを用いた疑似攻撃体験
[時間]20分(解説含む)
クロスサイト・スクリプティングの下記テーマの
演習を実施しましょう。
「アンケートページの改ざん(反射型)」
画面上に「Congratulations!! 」と表示されると
演習クリアです。
クリアした方は、下記テーマの演習に挑戦してみてください。
「掲示板に埋め込まれるスクリプト(格納型) 」
Copyright © 2011 独立行政法人情報処理推進機構
AppGoat ハンズオンセミナー
51
[演習]演習環境の説明
 「アンケートページの改ざん(反射型)」の演習環境
登場人物
• 攻撃者
利用者
演習中は、攻撃者としての行動と、利用者とし
ての行動を区別するよう意識してください。
登場ウェブサイト
• XSS脆弱性のあるアンケートサイト
• 一般的な掲示板サイト
掲示板サイトに罠をしかけて、アンケートサイトの脆弱性を悪
用します。悪用された結果、利用者が被害を受けます。
Copyright © 2011 独立行政法人情報処理推進機構
AppGoat ハンズオンセミナー
52
[演習]疑似攻撃のイメージ
掲示板サイト
Click
利用者
スクリプト
実行
Copyright © 2011 独立行政法人情報処理推進機構
XSS脆弱性のある
アンケートサイト
AppGoat ハンズオンセミナー
53
[演習]演習の進め方
Step1:脆弱性となる箇所を見つける
手順1:アンケートページの入力フィールドに様々な値を入力して、動作を確認する。
着眼ポイント
HTMLにおける特別な意味を持つ文字を入力してみましょう
Step2:罠リンクを設置する
手順2:「ヒント」などを参考に、スクリプトを実行させるURLを考える。
手順3:罠リンクを設置するため、手順2のURLを掲示板サイトに投稿する。
着眼ポイント
攻撃者の立場で、罠リンクの作成や設置に必要な手順を考えてみましょう
Step3:罠リンク経由でアンケートサイトにアクセスする
手順4:罠リンクをクリックして、スクリプトが実行されることを確認する。
着眼ポイント
利用者の立場になり、罠リンクをクリックした後の影響を考えてみましょう
Copyright © 2011 独立行政法人情報処理推進機構
AppGoat ハンズオンセミナー
54
[演習]演習の進め方
 演習を円滑に進めるために
攻撃用のスクリプトを短時間で作成することは困難ですの
で、下記のスクリプトが実行できることをもって、演習成功
と判断してください。
アンケートのタイトルを書き換えるスクリプト
<script>document.getElementById('title').innerHTML='hack'</script>
下記の手順で、アンケートページで入力した値がどのよう
にHTMLに反映されているかを確認できます。
Internet Explorer
アンケートページ上で右クリックし、「ソースを表示」でHTMLソースを表示する。
Firefox
アンケートページ上で右クリックし、「このフレーム」⇒「フレームのソースを表示」
でHTMLソースを表示する。
Copyright © 2011 独立行政法人情報処理推進機構
AppGoat ハンズオンセミナー
55
[手順1]
入力フィールドに様々な値を入力する
着眼ポイント
HTMLにおける特別な意味を持つ文字を入力してみましょう
 アンケートサイトに存在する脆弱性の箇所を探します。複数の
入力欄に「'>"><s>」を入れて、アンケート内容に関するエラー
ページを表示してみましょう。
 エラーページ出力(HTML生成)時において、名前欄(nameパ
ラメータ)に入力した値がそのまま使われていることが確認でき
ます。
HTMLソース
ウェブブラウザ上の表示
Copyright © 2011 独立行政法人情報処理推進機構
AppGoat ハンズオンセミナー
56
[手順2]
スクリプトを実行させるURLを考える
 アンケートサイトのXSS脆弱性を突いて、下記のスクリプトを実行さ
せるURLを考えましょう。
アンケートのタイトルを書き換えるスクリプト
<script>document.getElementById('title').innerHTML='hack'</script>
1. アンケートに答えて「アンケート投稿」ボタンを押下し、アクセスするURL
を確認します。
アクセスするURL
http://localhost/Web/Scenario102/VulSoft/enquete.php?page=2&name=
test&sex=0&old=30&company=&xss=1&trouble=1&content=
2. 脆弱性となる箇所(nameパラメータ)に、スクリプトに相当する文字列を
入れます。
スクリプトを実行させるURL
http://localhost/Web/Scenario102/VulSoft/enquete.php?page=2&name=
<script>document.getElementById('title').innerHTML='hack'</script>&s
ex=0&old=30&company=&xss=1&trouble=1&content=
Copyright © 2011 独立行政法人情報処理推進機構
AppGoat ハンズオンセミナー
57
[手順3]
手順2のURLを掲示板サイトに投稿する
1. 攻撃者の立場になり、掲示板に罠のリンクを作成します。罠の
リンクには、先ほど作成したスクリプトを実行させるURLを入
力します。
2. 「投稿」ボタンを押下します。これで罠リンクの設置が完了しま
した。
Copyright © 2011 独立行政法人情報処理推進機構
AppGoat ハンズオンセミナー
58
[手順4]
スクリプトが実行されることを確認する
1. 利用者の立場になり、罠のリンクをクリックし、アンケートページ
にアクセスします。
2. その結果、利用者のウェブブラウザ上でスクリプトが実行され、
アンケートのタイトルが書きかえられることが確認できます。
Copyright © 2011 独立行政法人情報処理推進機構
AppGoat ハンズオンセミナー
59
なぜHTMLタグの挿入が可能だったのか?
 文字列を出力する際、「文字そのもの」として出力することを
想定しているにもかかわらず、その実現に必要な処理
(エスケープ処理)を実装していないため。
例:「< → &lt;」、「> → &gt;」
「" → &quot;」、「 & → &amp;」など
 「文字そのもの」として出力することを想定した箇所に
「HTML タグ」として出力することができてしまうため、セキュ
リティ上の問題となる。
Copyright © 2011 独立行政法人情報処理推進機構
AppGoat ハンズオンセミナー
60
[演習]AppGoatを用いた疑似攻撃体験
クロスサイト・スクリプティングの下記テーマの
演習を実施しましょう。
「掲示板に埋め込まれるスクリプト(格納型)」
画面上に「Congratulations!! 」と表示されると
演習クリアです。
Copyright © 2011 独立行政法人情報処理推進機構
AppGoat ハンズオンセミナー
61
XSS脆弱性のタイプ
反射型
攻撃には、罠サイトと脆弱性サイトを利用します。
罠サイトから脆弱性のあるサイト(ウェブアプリ)にアクセス
すると、スクリプトが実行されます。
格納型
攻撃には、脆弱性サイトを利用します。
脆弱性のあるサイト(ウェブアプリ)にスクリプトを埋め込め
るタイプです。埋め込まれた後は、当該サイトにアクセスす
るたびにスクリプトが実行されます。
Copyright © 2011 独立行政法人情報処理推進機構
AppGoat ハンズオンセミナー
62
[演習]演習環境の説明
 「掲示板に埋め込まれるスクリプト(格納型)」の
演習環境
登場人物
• 攻撃者
• 利用者
演習中は、攻撃者としての行動と、利用者とし
ての行動を区別するよう意識してください。
登場ウェブサイト
• XSS脆弱性のある掲示板サイト
攻撃者は、掲示板サイトのXSS脆弱性を悪用してスクリプトを
埋め込みます。その後、利用者が掲示板を閲覧した際に被害
を受けます。
Copyright © 2011 独立行政法人情報処理推進機構
AppGoat ハンズオンセミナー
63
[演習]疑似攻撃のイメージ
○○○○○○○○
■■■■■■■■■■■■■■
■■■■■■■■■■■■■■
■■■■■■
○○○○○○○○
■■■■■■■■■■■■■■
■■■■■■■■■■■■■■
■■■■■■
■■■■■■■■■■■■■■
■■■■■■■■■■■■■■
■■■■■■
■■■■■■■■■■■■■■
■■■■■■■■■■■■■■
■■■■■■
Copyright © 2011 独立行政法人情報処理推進機構
AppGoat ハンズオンセミナー
64
[演習]演習の進め方
Step1:脆弱性となる箇所を見つける
手順1:掲示板の入力フィールドに様々な値を入力して、動作を確認する。
着眼ポイント
HTMLにおける特別な意味を持つ文字を入力してみましょう
Step2:スクリプトを含むコメントを投稿する
手順2:スクリプトを掲示板サイトに投稿する。
着眼ポイント
攻撃者の立場で、罠の設置に必要な手順を考えてみましょう
Step3:掲示板サイトにアクセスする
手順3:掲示板サイトにアクセスして、スクリプトが実行されることを確認する。
着眼ポイント
利用者の立場になり、罠サイトにアクセスした後の影響を考えてみましょう
Copyright © 2011 独立行政法人情報処理推進機構
AppGoat ハンズオンセミナー
65
[演習]演習の進め方
 演習を円滑に進めるために
攻撃用のスクリプトを短時間で作成することは困難ですの
で、下記のスクリプトが実行できることをもって、演習成功
と判断してください。
ダイアログが表示されるスクリプト
<script>alert('Dialog by XSS')</script>
下記の手順で、掲示板に入力した値がどのようにHTMLに
反映されているかを確認できます。
Internet Explorer
掲示板上で右クリックし、「ソースを表示」でHTMLソースを表示する。
Firefox
掲示板上で右クリックし、「このフレーム」⇒「フレームのソースを表示」でHTML
ソースを表示する。
Copyright © 2011 独立行政法人情報処理推進機構
AppGoat ハンズオンセミナー
66
[手順1]
入力フィールドに様々な値を入力する
着眼ポイント
HTMLにおける特別な意味を持つ文字を入力してみましょう
 掲示板に存在する脆弱性の箇所を探します。複数の入力欄に
「<s>test</s>」を入れて、取り消し線が引かれているところを探
しましょう。
 「本文」を入力する箇所で、入力した値がそのまま使われてい
ることが確認できます。
HTMLソース
ウェブブラウザ上の表示
Copyright © 2011 独立行政法人情報処理推進機構
AppGoat ハンズオンセミナー
67
[手順2]
スクリプトを掲示板サイトに投稿する
1. 攻撃者の立場になり、掲示板にスクリプトを埋め込みます。メ
ッセージダイアログを表示させるスクリプトを使います。
2. 「投稿」ボタンを押下します。これでスクリプトの埋め込みが完
了しました。
Copyright © 2011 独立行政法人情報処理推進機構
AppGoat ハンズオンセミナー
68
[手順3]
スクリプトが実行されることを確認する
1. 利用者の立場になり、掲示板サイトにアクセスします。
2. その結果、利用者のウェブブラウザ上でスクリプトが実行され
ます。
Copyright © 2011 独立行政法人情報処理推進機構
AppGoat ハンズオンセミナー
69
XSS脆弱性の対策
 HTML テキストの入力を許可しない場合
検索や情報登録等の機能
を有するアプリ
-根本的解決
・HTMLにおける特別な記号文字をエスケープ処理する
・URL 出力時のスキームを制限する
・スクリプト要素の内容を動的に生成しない
-保険的対策
・入力値チェックをする
 HTML テキストの入力を許可する場合
掲示板やブログ等のアプリ
-根本的解決
・構文解析木を作成して、必要な要素のみを抽出する
-保険的対策
・入力された HTML テキストから、スクリプトを除く
 全てのウェブアプリケーションに共通の対策
・文字コードを正しく指定する
Copyright © 2011 独立行政法人情報処理推進機構
AppGoat ハンズオンセミナー
70
根本的解決
~特別な意味を持つ記号のエスケープ処理~
•HTMLにおける特別な意味を持つ「記号文字」
を文字参照に置換 (HTMLを許可しない場合)
•例:
& → &amp;
" → &quot;
' → &#039;
< → &lt;
> → &gt;
入力値:<script>alert("test");</script>
置換後:
&lt;script&gt;alert(&quot;test&quot;);&lt;/script&gt;
Copyright © 2011 独立行政法人情報処理推進機構
AppGoat ハンズオンセミナー
71
根本的解決
~特別な意味を持つ記号のエスケープ処理~
エスケープ処理なし
scriptタグとして解釈された
ウェブブラウザ
HTMLソース
<input type="text" id="test"
value=" "><script>alert('ipa');</script> "
/>
エスケープ処理あり
Inputタグのvalue属性の値と解釈された
ウェブブラウザ
HTMLソース
<input type="text" id="test"
value=" &quot;&gt;&lt;script&gt;alert(&#
039;ipa&#039;);&lt;/script&gt; "/>
Copyright © 2011 独立行政法人情報処理推進機構
AppGoat ハンズオンセミナー
72
そもそもエスケープ処理って?
 HTMLやSQLの構文毎に異なる、特別な意味を
持つ「記号文字」(特殊記号)を"文字そのもの"
として扱うために行う処理。
HTMLにおける特殊記号は、「<」「"」「'」「&」など
SQLにおける特殊記号は、「'」「_」「%」など
 特殊記号の中でも「データの区切り」を表す記号
をエスケープすることが、セキュリティ上重要。
HTMLにおけるデータの区切り記号は、「<」「"」など
SQLにおけるデータの区切り記号は、「'」など
Copyright © 2011 独立行政法人情報処理推進機構
AppGoat ハンズオンセミナー
73
保険的対策
~入力値チェックの位置づけ~
 入力値チェックとは、利用者が入力した値の書式を
確認することが主目的。
例:パスワードの長さや使用可能な文字種のチェック
電話番号やメールアドレスの書式チェック
 脆弱性による被害を低減する役割を果たすことが
あるが、入力値チェックだけでは防げない。
参考:脆弱性体験学習ツールAppGoat
クロスサイト・スクリプティングの「不完全な対策」
Copyright © 2011 独立行政法人情報処理推進機構
AppGoat ハンズオンセミナー
74
【ご参考】:安全なウェブサイトの作り方
 その他の対策方法については、「安全なウェブサイ
トの作り方」を参照してください。
 「安全なウェブサイトの作り方」には脆弱性を作り込
んでしまった失敗事例も掲載されています。
安全なウェブサイトの作り方 改訂第5版
http://www.ipa.go.jp/security/vuln/websecurity.html
Copyright © 2011 独立行政法人情報処理推進機構
AppGoat ハンズオンセミナー
75
講義内容
ウェブサイトを狙った攻撃の実情
脆弱性体験学習
SQLインジェクション
クロスサイト・スクリプティング
クロスサイト・リクエスト・フォージェリ
 脆弱性の原理解説
 演習:AppGoatを用いた疑似攻撃体験
 脆弱性の対策解説
 IPAにおける脆弱性対策の取組み
Copyright © 2011 独立行政法人情報処理推進機構
AppGoat ハンズオンセミナー
76
クロスサイト・リクエスト・フォージェリ(CSRF)
脆弱性とは
 注意が必要なウェブアプリケーション
ログインした利用者からのみ受け付ける処理が存在
するウェブアプリケーション
 影響
利用者が意図しない処理を実行させられてしまう
 原因
利用者が意図したリクエストであるかどうかを
識別する仕組みがない
Copyright © 2011 独立行政法人情報処理推進機構
AppGoat ハンズオンセミナー
77
CSRF攻撃のイメージ図
攻撃者が罠リンクや罠サイトを用意し、ログイン済みの利用者を罠に
誘導させることで、利用者の意図しない処理をさせる攻撃
CSRF (クロスサイト・リクエスト・フォージェリ)
ウェブサイトにCSRFの脆弱性が
ある場合、悪意ある人により、利
用者が予期しない処理を実行さ
せられてしまう可能性があります。
利用者
1.通常通り
ログイン
2.セッション
IDを発行
クリック!
4.罠とは知らず、悪意ある
サイトの罠ページ等を閲覧
悪意のある人
Copyright © 2011 独立行政法人情報処理推進機構
ウェブ
アプリケーション
(ログイン用)
3.ログイン し
た状態を維持
利用者
罠サイト
ウェブサイト
設定変更
退会
5.リンクのクリック等によ
り、利用者の意図しない攻
撃リクエストをウェブアプリ
ケーションに送信
AppGoat ハンズオンセミナー
強制投稿
CSRFの脆弱性がある
ウェブアプリケーション
78
利用者が意図したリクエストかどうかを
識別する仕組みがないと
通常時
① 利用者が、パスワード変更のリクエスト
② 利用者Aからパスワード変更依頼
をウェブサーバB に送る
p@3#agdM
があったと判断し、パスワードを
p@3#agdM に変更する
ログイン済みの
利用者A
ウェブサーバB+ウェブアプリ
ログイン中
攻撃者は、下記の罠ページを事前に用意する。
① 利用者が、攻撃者が用意した
罠のページを閲覧する
攻撃者
「パスワードを aaaaaa に変更するリクエストをウェブ
サーバB に送る」罠のページ
攻撃時
③ 利用者Aからパスワード変更依頼
aaaaaa
② 閲覧した結果、意図せずパスワード変更の
リクエストをサーバB に送ってしまう
ログイン済みの
利用者A
ログイン中
があったと判断し、パスワードを
aaaaaa
に変更する
ウェブサーバB+ウェブアプリ
利用者が意図しない処理が実行されてしまう。
上記の場合は、パスワードが aaaaaa に変更されてしまった。
Copyright © 2011 独立行政法人情報処理推進機構
AppGoat ハンズオンセミナー
79
意図しないリクエストを送信させられると
意図せず、個人情報を
公開するように設定してしまう
各種設定の
不正な変更
不正な送金
意図せず、他人
に送金してしまう
意図しない内容を
掲示板に投稿してしまう
Copyright © 2011 独立行政法人情報処理推進機構
AppGoat ハンズオンセミナー
掲示板への不適切な
書き込み
80
[演習]AppGoatを用いた疑似攻撃体験
[時間]15分(解説含む)
クロスサイト・リクエスト・フォージェリの下記テー
マの演習を実施しましょう。
「意図しない命令の実行」
画面上に「Congratulations!! 」と表示されると
演習クリアです。
Copyright © 2011 独立行政法人情報処理推進機構
AppGoat ハンズオンセミナー
81
[演習]演習環境の説明
 「意図しない命令の実行」の演習環境
登場人物
• 攻撃者
• 利用者
演習中は、攻撃者としての行動と、利用者とし
ての行動を区別するよう意識してください。
登場ウェブサイト
• CSRF脆弱性のあるSNSサイト
• 一般的な掲示板サイト(CSRF脆弱性はない)
掲示板サイトに罠をしかけて、SNSサイトの脆弱性を悪用します。悪
用された結果、意図せずSNSサイトの設定が変更されてしまいます。
Copyright © 2011 独立行政法人情報処理推進機構
AppGoat ハンズオンセミナー
82
[演習]疑似攻撃のイメージ
掲示板サイト
Click
ログイン中
設定変更
利用者
CSRF脆弱性のある
SNSサイト
Copyright © 2011 独立行政法人情報処理推進機構
AppGoat ハンズオンセミナー
83
[演習]演習の進め方
Step1:脆弱性となる箇所を見つける
手順1: SNSサイトで設定変更する際、どのようなリクエストを送っているか確認する
。
着眼ポイント
SNSサイトにおいて、ユーザ設定を変更する際のリクエストを確認しましょう
Step2:罠リンクを設置する
手順2:「ヒント」などを参考に、罠リンクのURLを考える。
手順3:罠リンクを設置するため、手順2のURLを掲示板サイトに投稿する。
着眼ポイント
攻撃者の立場で、ユーザ設定を変更するためのリクエストを考えてみましょう
Step3:罠リンク経由でSNSサイトにアクセスする
手順4:罠リンクをクリックして、設定変更されてしまうことを確認する。
着眼ポイント
利用者の立場になり、罠リンクをクリックした後の影響を考えてみましょう
Copyright © 2011 独立行政法人情報処理推進機構
AppGoat ハンズオンセミナー
84
[手順1]
どのようなリクエストを送っているか確認する
着眼ポイント
SNSサイトにおいて、ユーザ設定を変更する際のリクエストを確認しましょう
 SNSサイトにログインして、設定変更する際にどのようなリクエ
ストを送信しているのか確認しましょう。
送信されるリクエスト
http://localhost/Web/Scenario113/VulSoft/sns.php?page=4&name=yamada&ye
ar=1990&month=1&day=1&mail=yamada%40example.com&public=1
Copyright © 2011 独立行政法人情報処理推進機構
AppGoat ハンズオンセミナー
85
[手順2]
罠リンクのURLを考える
 SNSサイトのCSRF脆弱性を突いて、「個人情報公開」の設定を「公
開する」に変更するURLを考えてみましょう。
1. 前スライドで確認したリクエストから、不要なパラメータを削除します。赤
字が不要なパラメータです。
確認したリクエスト
http://localhost/Web/Scenario113/VulSoft/sns.php?page=4&name=yamada
&year=1990&month=1&day=1&mail=yamada%40example.com&public=1
2. 不要なパラメータを削除すると下記のようなリクエストになります。下記の
リクエストが送信されるように罠リンクを設置します。
罠リンクのURL
http://localhost/Web/Scenario113/VulSoft/sns.php?page=4&public=1
Copyright © 2011 独立行政法人情報処理推進機構
AppGoat ハンズオンセミナー
86
[手順3]
手順2のURLを掲示板サイトに投稿する
1. 攻撃者の立場になり、掲示板に罠のリンクを作成します。罠の
リンクには、先ほど作成したURLを入力します。
2. 「投稿」ボタンを押下します。これで罠リンクの設置が完了しま
した。
Copyright © 2011 独立行政法人情報処理推進機構
AppGoat ハンズオンセミナー
87
[手順4]
設定変更されてしまうことを確認する
1. (SNSサイトにログインした)利用者の立場になり、罠のリンク
をクリックし、アンケートページにアクセスします。
2. その結果、利用者のSNS設定情報が変更されてしまいます。
Copyright © 2011 独立行政法人情報処理推進機構
AppGoat ハンズオンセミナー
88
なぜ意図しない処理が実行されたのか?
 罠ページを経由した攻撃と正規のリクエストを識別で
きないため
攻撃者
リクエストA、Bの違いを
識別することができない
A: 罠ページからのリクエスト
ログイン済みの
利用者A
B: 利用者が意図したリクエスト
Copyright © 2011 独立行政法人情報処理推進機構
ログイン中
AppGoat ハンズオンセミナー
CSRF脆弱性のある
ウェブアプリケーション
89
CSRF脆弱性の対策
 根本的解決 「意図したリクエストであるかどうかを識別する実装」
POSTメソッドでアクセスするようにし、その「hiddenパラメータ」に秘密情
報が挿入されるよう、前のページを自動生成して、実行ページではその値
が正しい場合のみ処理を実行する
処理を実行する直前のページで再度パスワードの入力を求め、実行ペー
ジでは、再度入力されたパスワードが正しい場合のみ処理を実行する
Refererが正しいリンク元かを確認し、正しい場合のみ処理を実行する
POINT
利用者しか知らない情報の確認や、本来の画面遷移を経ているかの確認をする
 保険的対策 「攻撃による影響を軽減する対策」
重要な操作を行った際に、その旨を登録済みのメールアドレスに自動送
信する
POINT
CSRF攻撃を防ぐことはできないが、利用者が異変に気付くきっかけを作ること
ができる。メール本文にプライバシーに関わる重要な情報を入れないように注意
Copyright © 2011 独立行政法人情報処理推進機構
AppGoat ハンズオンセミナー
90
根本的解決
~秘密情報を利用した対策例~
 秘密情報の埋め込み
処理を実行する際に、秘密情報(第三者が予測困難な値)を要求し、
その値が正しい場合のみに処理を実行する。
秘密情報に、セッションIDを用いる方法がある。
秘密情報は、hiddenフィールドを使用しPOSTメソッドで送る。
Copyright © 2011 独立行政法人情報処理推進機構
AppGoat ハンズオンセミナー
91
講義内容
ウェブサイトを狙った攻撃の実情
脆弱性体験学習
SQLインジェクション
クロスサイト・スクリプティング
クロスサイト・リクエスト・フォージェリ
 IPAにおける脆弱性対策の取組み
Copyright © 2011 独立行政法人情報処理推進機構
AppGoat ハンズオンセミナー
92
対策の考え方や方向性の解説
 「情報システムの設計・実装や運用に起因する脅威」
企画、設計・開発、運用、廃棄フェーズそれぞれにおいて脆
弱性対策が必要
セ ■ 調査、動向把握、
キ 開発方針・体制整備 ■ セキュアプログラミング
ュ (ビジネスインパクト分析含む)
■ ソースコード診断
リ
■ テスト(ファジング他)
テ
■ 脆弱性診断(ペネトレーション)
ィ
対
■ 運用時対策
策
■ 脆弱性対策
ラシ
イス
フテ
サム
イ
ク
ル
1. 企画
2. 設計
脅威、動向
Copyright © 2011 独立行政法人情報処理推進機構
3. 実装
4. テスト
脆弱性
AppGoat ハンズオンセミナー
5. 運用/利用
6. 廃棄
攻撃
93
対策の考え方や方向性の解説
 企画
当該システムに想定される脅威の洗い出し
防御機能の検討と設計方針の決定
 設計・開発工程
セキュアプログラミングや脆弱性テストを実施し、脆弱性を除去する
 運用時
定常的な脆弱性対策の実施。定期的な診断の実施。
問題発生時に対応できる体制や手順の整備
 廃棄時(サービス終了)
利用者へのアナウンスの実施。
サービスの確実な停止(ページ残し)
Copyright © 2011 独立行政法人情報処理推進機構
AppGoat ハンズオンセミナー
94
IPAが公開しているツール・資料の紹介
Copyright © 2011 独立行政法人 情報処理推進機構
95
知っていますか?脆弱性
http://www.ipa.go.jp/security/vuln/vuln_contents/
1.企画
2.設計
3.実装
4.テスト
5.運用
/利用
6.廃棄
脆弱性を分かりやすくアニメで解説。
ウェブサイト運営者が知っておくべき、
ウェブサイトにおける代表的な10の脆弱
性(セキュリティ上の弱点)をアニメで紹
介し、脅威と仕組みについて解説。
ウェブサイトにおける代表的な10の脆弱性
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
SQLインジェクション
クロスサイト・スクリプティング
CSRF(クロスサイト・リクエスト・フォージェリ)
パス名パラメータの未チェック/ディレクトリ・トラバーサル
OSコマンド・インジェクション
セッション管理の不備
HTTPヘッダ・インジェクション
HTTPSの不適切な利用
サービス運用妨害(DoS)
メール不正中継
累計アクセス数
592,232件(2007/7/12~2011/3/31)
Copyright © 2011 独立行政法人情報処理推進機構
AppGoat ハンズオンセミナー
96
安全なウェブサイトの作り方
http://www.ipa.go.jp/security/vuln/websecurity.html
1. 企画
2.設計
3.実装
4.テスト
5.運用
/利用
6.廃棄
失敗から学ぶ。
IPAに届出られた脆弱性関連情報
をもとに、対策をまとめたガイド
脆弱性ごとに解説と「根本的解
決」「保険的対策」を記載(9種類)
「ウェブサイトの安全性向上のため
の取り組み」を記載(6項目)
「失敗例」として解説と修正例に
ついて記載(6種類)
ウェブセキュリティの実装状況の
チェックリストつき
ダウンロード数
初版からの累計で、250万件突破
IPA ヒットコンテンツ!
Copyright © 2011 独立行政法人情報処理推進機構
AppGoat ハンズオンセミナー
97
安全なウェブサイトの作り方
http://www.ipa.go.jp/security/vuln/websecurity.html
1. 企画
巻末チェックリスト
2.設計
3.実装
4.テスト
5.運用
/利用
6.廃棄
網羅性
巻末にはチェックリストを記載。対策の網羅性確保のた
めに使用できる。Excel 版も公開。
設計指針として
設計段階からの考慮を要する点を一望できるので、ア
プリケーション設計時の指針として使用可能。
発注要件として
発注者がウェブアプリケーション発注時の要件として本
チェックリストを使用すれば、セキュリティ上の注意点を
明確化して契約できる。
Copyright © 2011 独立行政法人情報処理推進機構
AppGoat ハンズオンセミナー
98
ウェブサイト攻撃の検出ツール iLogScanner
http://www.ipa.go.jp/security/vuln/iLogScanner/index.html
1. 企画
3.実装
4.テスト
5.運用
/利用
6.廃棄
ログからウェブサイトの攻撃痕跡を
簡易に確認できます。
iLogScanner提供環境
IPAのiLogScanner
提供サイト
利用者環境
②
アクセスログ
ファイル
③
Webブラウザ
④
Webサイト
2.設計
①
iLogScanner
⑤
利用者
(Webサイト管理者)
①解析対象のアクセスログファイ
ルを用意
②iLogScannerページへ接続
③iLogScannerをダウンロード
④アクセスログファイルを指定し
iLogScannerを実行
⑤解析結果表示・出力
ウェブサーバのアクセスログを解析すること
で、攻撃の痕跡をレポート出力します。
JavaApplet形式である為、IPAのウェブサイ
ト上で簡易にチェックできます。
ログを解析することにより、脆弱性対策に
役立てることができます。
解析結果出力
Copyright © 2011 独立行政法人情報処理推進機構
AppGoat ハンズオンセミナー
99
ウェブサイト攻撃の検出ツール iLogScanner
http://www.ipa.go.jp/security/vuln/ilogscanner/index.html
1. 企画
2.設計
3.実装
4.テスト
5.運用
/利用
6.廃棄
解析レポート例
それぞれの
脆弱性を狙った
攻撃を検出
攻撃成功の
可能性
は検出され
なかった。
解析結果レポートで
「攻撃成功の可能性」が
検出された場合は、即時に
原因を調査し、対策を行って
ください。
攻撃成功
は0件
Copyright © 2011 独立行政法人情報処理推進機構
AppGoat ハンズオンセミナー
100
ソフトウェアのバージョンを確認するツール
MyJVN バージョンチェッカ
http://jvndb.jvn.jp/apis/myjvn/index.html
1. 企画
2.設計
3.実装
4.テスト
5.運用
/利用
6.廃棄
ブラウザでアクセスするだけで、PCにインストールされているソフトウェア製品のバージョンが
最新であるかを、簡単な操作で確認するツールです。
チェック対象のソフト
ウェア製品名一覧
最新のバージョンであるか
を「○」「×」でシンプルに
表示
バージョンに関する詳細情
報やバージョンアップ方法
を提示
Copyright © 2011 独立行政法人情報処理推進機構
AppGoat ハンズオンセミナー
101
Web Application Firewall (WAF)読本
http://www.ipa.go.jp/security/vuln/waf.html
1. 企画
2.設計
3.実装
4.テスト
5.運用
/利用
6.廃棄
攻撃による影響を低減。
WAFの動作概要、機能詳細、導入にお
けるポイントをまとめた手引書
各機関におけるWAFの取り組みの紹介
を記載
「WAF」がどのような物であるかについて
概要を記載
「WAF」の機能説明、機能の留意点を記
載
「WAF」導入の際の各フェーズにおけるポ
イントを記載
Copyright © 2011 独立行政法人情報処理推進機構
AppGoat ハンズオンセミナー
102
5分でできる!情報セキュリティポイント学習
http://www.ipa.go.jp/security/vuln/5mins_point/
1. 企画
2.設計
3.実装
4.テスト
5.運用
/利用
6.廃棄
1テーマ5分でセキュリティ対策を学習。
重要なセキュリティポイントを気軽に学習
できる時間設定(1テーマ5分)
IPAの「5分でできる!中小企業のための
情報セキュリティ自社診断」(右下図およ
びURL参照)の診断項目を基に学習。
職場の日常の1コマを取り入れた親しみ
やすい学習テーマで、様々な業種・業態・
従業員の構成の中小企業に対応。
2業種3職位、全105の学習テーマ
http://www.ipa.go.jp/security/manager/know/sme-guide/
Copyright © 2011 独立行政法人情報処理推進機構
AppGoat ハンズオンセミナー
103
おわりに
システムライフサイクルに沿ったトータルな対応
■ 脆弱性を作り込まない
■ 脆弱性を早期に検出する
■ 脆弱性を体系的に対策する
IPAは、安心安全な情報システム、社会インフラの
実現を目指します。
独立行政法人 情報処理推進機構 セキュリティセンター
http://www.ipa.go.jp/security/index.html
http://www.ipa.go.jp/security/vuln/index.html
Copyright © 2011 独立行政法人情報処理推進機構
AppGoat ハンズオンセミナー
104
Fly UP