脆弱性体験学習ツール -...

59
Copyright © 2011 独立行政法人 情報処理推進機構 脆弱性体験学習ツール 「AppGoat」ハンズオンセミナー ウェブアプリケーション編

Upload: others

Post on 17-Mar-2020

0 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 脆弱性体験学習ツール - IPA–SQL文の組み立て時に、パラメータの値を正しく リテラルとして展開する • SQL文の組み立ては全てプレースホルダで実装する。

Copyright © 2011 独立行政法人 情報処理推進機構

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

ウェブアプリケーション編

Page 2: 脆弱性体験学習ツール - IPA–SQL文の組み立て時に、パラメータの値を正しく リテラルとして展開する • SQL文の組み立ては全てプレースホルダで実装する。

Copyright © 2011 独立行政法人 情報処理推進機構 2

講義内容

AppGoatの説明

起動手順、学習の進め方、利用シーン紹介

脆弱性学習(演習あり)

SQLインジェクションの脆弱性

クロスサイト・スクリプティングの脆弱性

アンケート記入

Page 3: 脆弱性体験学習ツール - IPA–SQL文の組み立て時に、パラメータの値を正しく リテラルとして展開する • SQL文の組み立ては全てプレースホルダで実装する。

Copyright © 2011 独立行政法人 情報処理推進機構

「AppGoat」の説明

Page 4: 脆弱性体験学習ツール - IPA–SQL文の組み立て時に、パラメータの値を正しく リテラルとして展開する • SQL文の組み立ては全てプレースホルダで実装する。

Copyright © 2011 独立行政法人 情報処理推進機構

AppGoat(アップゴート)とは

学習

ウェブアプリケーション版

サーバ・デスクトップ

アプリケーション版

ウェブアプリケーション版

サーバ・デスクトップアプリケーション版

クロスサイト・スクリプティングやSQLインジェクションなどを題材とした、15の学習テーマから構成されている。

バッファオーバーフローや整数オーバーフローなどを題材とした、13の学習テーマから構成されている。

学習

教材や演習環境を使って、脆弱性を突いた攻撃が成功する仕組みから実際の対策方法までを学習するツール

– 教材:脆弱性対策に必要な情報を図解したもの

– 演習環境:故意に脆弱性を埋め込んだアプリケーション

– 下記の2種類がある

4

本講義では、 ウェブアプリケーション版の演習環境を使います。

Page 5: 脆弱性体験学習ツール - IPA–SQL文の組み立て時に、パラメータの値を正しく リテラルとして展開する • SQL文の組み立ては全てプレースホルダで実装する。

Copyright © 2011 独立行政法人 情報処理推進機構

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

• ウェブアプリケーション版は、下記表の脆弱性を学習可能

5

講義内で演習実施

Page 6: 脆弱性体験学習ツール - IPA–SQL文の組み立て時に、パラメータの値を正しく リテラルとして展開する • SQL文の組み立ては全てプレースホルダで実装する。

Copyright © 2011 独立行政法人 情報処理推進機構

起動手順(準備)

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

6

本講義では、 お手元にあるCD-ROMから ZIPファイルをコピーします。

Page 7: 脆弱性体験学習ツール - IPA–SQL文の組み立て時に、パラメータの値を正しく リテラルとして展開する • SQL文の組み立ては全てプレースホルダで実装する。

Copyright © 2011 独立行政法人 情報処理推進機構

起動手順(手順1)

ZIPファイルを展開し、IPAToolフォルダの中にある、「Start.bat」をダブルクリックします。

7

Page 8: 脆弱性体験学習ツール - IPA–SQL文の組み立て時に、パラメータの値を正しく リテラルとして展開する • SQL文の組み立ては全てプレースホルダで実装する。

Copyright © 2011 独立行政法人 情報処理推進機構

起動手順(手順2)

ランタイムのインストール確認ダイアログが表示されますが、ウェブアプリケーション環境の演習には必要ないため、「いいえ」を選択します。

8

Page 9: 脆弱性体験学習ツール - IPA–SQL文の組み立て時に、パラメータの値を正しく リテラルとして展開する • SQL文の組み立ては全てプレースホルダで実装する。

Copyright © 2011 独立行政法人 情報処理推進機構

起動手順(手順3)

Windowsファイアウォールの警告ダイアログが表示された場合は、「ブロックする」を選択します。

9

Page 10: 脆弱性体験学習ツール - IPA–SQL文の組み立て時に、パラメータの値を正しく リテラルとして展開する • SQL文の組み立ては全てプレースホルダで実装する。

Copyright © 2011 独立行政法人 情報処理推進機構

起動手順(手順4)

ウェブブラウザが起動し、AppGoatの総合メニューが表示されます。これでツールが使用可能になりました。

10

Page 11: 脆弱性体験学習ツール - IPA–SQL文の組み立て時に、パラメータの値を正しく リテラルとして展開する • SQL文の組み立ては全てプレースホルダで実装する。

Copyright © 2011 独立行政法人 情報処理推進機構

学習の進め方

左部に表示される「テーマ一覧」から学習テーマを選択します。あとは、流れに沿って学習を進めていきます。

11

学習テーマ選択後の流れ

脆弱性

原理解説 演習 影響解説

対策方法

解説

脆弱性発見!

脆弱性の発見

にチャレンジ!

演習のイメージ

脆弱性を突いた攻撃が成功する仕組みを体験することで、脆弱性をより理解できます。

Page 12: 脆弱性体験学習ツール - IPA–SQL文の組み立て時に、パラメータの値を正しく リテラルとして展開する • SQL文の組み立ては全てプレースホルダで実装する。

Copyright © 2011 独立行政法人 情報処理推進機構

企業での利用シーン紹介

社内のセキュリティ研修で利用する

開発前のスキルチェックで利用する

12

研修担当者が講師となり、

ハンズオン形式で教える。

開発メンバーの理解度を確認する。

AppGoatを使った講義の補助資料を公開しています。

http://www.ipa.go.jp/security/vuln/documents/appgo

at_material01.pdf

「安全なウェブサイトの作り方」と併せて利用すると効果的です。

http://www.ipa.go.jp/security/vuln/websecurity.html

Page 13: 脆弱性体験学習ツール - IPA–SQL文の組み立て時に、パラメータの値を正しく リテラルとして展開する • SQL文の組み立ては全てプレースホルダで実装する。

Copyright © 2011 独立行政法人 情報処理推進機構

AppGoatを使う際の注意事項

AppGoatでは、脆弱性を埋め込んだ演習環境に対して、疑似的に攻撃します。これは攻撃手法を理解して対策につなげるためです。

本講義で学習した知識を基に、下記に該当する行為を行わないようにしましょう。

(1) 第三者のコンピュータシステムの正常な動作に支障をきたす行為

(2) 第三者のウェブサイトへの攻撃行為

13

Page 14: 脆弱性体験学習ツール - IPA–SQL文の組み立て時に、パラメータの値を正しく リテラルとして展開する • SQL文の組み立ては全てプレースホルダで実装する。

Copyright © 2011 独立行政法人 情報処理推進機構

SQLインジェクションの脆弱性

Page 15: 脆弱性体験学習ツール - IPA–SQL文の組み立て時に、パラメータの値を正しく リテラルとして展開する • SQL文の組み立ては全てプレースホルダで実装する。

Copyright © 2011 独立行政法人 情報処理推進機構 15

講義内容

用語の簡易説明

SQLインジェクション脆弱性の概要

演習:AppGoatを用いた疑似攻撃体験

対策のポイント

Page 16: 脆弱性体験学習ツール - IPA–SQL文の組み立て時に、パラメータの値を正しく リテラルとして展開する • SQL文の組み立ては全てプレースホルダで実装する。

Copyright © 2011 独立行政法人 情報処理推進機構

登場する用語の簡易説明

ウェブアプリケーション

– ウェブサーバ上で動作するアプリケーション。

– 利用者はウェブブラウザを用いてウェブサーバにアクセスし、ウェブアプリケーションを利用する。

データベース

– 大量の情報を保存し、効率よく情報にアクセスできるように加工したデータの集まり。

SQL

– データベースを管理するシステム(DBMS)において、データの操作や定義を行うための問合せ言語のこと。

16

Page 17: 脆弱性体験学習ツール - IPA–SQL文の組み立て時に、パラメータの値を正しく リテラルとして展開する • SQL文の組み立ては全てプレースホルダで実装する。

Copyright © 2011 独立行政法人 情報処理推進機構 17

SQLインジェクション脆弱性の概要

脅威

– データベースへの命令(SQL文)の意味を書き換えられ、データベースを不正に操作されてしまう

• 情報の改ざんや漏えい、認証の回避、OSコマンドの実行

原因

– ウェブアプリケーションにおける、データベースへの命令(SQL文)の組み立て方に問題

注意が必要なウェブアプリケーション

– データベースを利用しているウェブアプリケーション

Page 18: 脆弱性体験学習ツール - IPA–SQL文の組み立て時に、パラメータの値を正しく リテラルとして展開する • SQL文の組み立ては全てプレースホルダで実装する。

Copyright © 2011 独立行政法人 情報処理推進機構 18

SQLインジェクション攻撃のイメージ図

SQL インジェクションの脆弱性がある場合、悪意あるリクエストにより、データベースの不正利用をまねく可能性があります。

SQL インジェクション

データベースへの命令文を構成する入力値を送信

データベースへ命令を送信

SQLインジェクションの脆弱性があるウェブアプリケーション

悪意のある人 ウェブサイト

データベース

改ざん情報漏えい

消去

SQL文の組み立て方に問題

Page 19: 脆弱性体験学習ツール - IPA–SQL文の組み立て時に、パラメータの値を正しく リテラルとして展開する • SQL文の組み立ては全てプレースホルダで実装する。

Copyright © 2011 独立行政法人 情報処理推進機構

SQL文の組み立て方に問題があると

ウェブサーバ +

ウェブアプリ

データベース

user 全てのユーザ情報

SELECT * FROM user WHERE id=‘$ID’ SQL文例

① ②

③ ④

19

・データベースが不正に操作されてしまう!!

ID入力欄に下記文字列を入力し

リクエストを送信する。

ユーザの入力値をもとにSQL文を組み立て、データベースに送信する。

SQL文の実行結果を

ウェブアプリに返す。 全てのユーザの情報を参照できる

悪意がある人

john ’ OR ‘A’=‘A

SELECT * FROM user

WHERE id= ‘ john’ OR ‘A’=‘A ’ john’ OR ‘A’=‘A

「全て」を意味する

IDを入力すると、該当するユーザ情報を表示するウェブアプリ

Page 20: 脆弱性体験学習ツール - IPA–SQL文の組み立て時に、パラメータの値を正しく リテラルとして展開する • SQL文の組み立ては全てプレースホルダで実装する。

Copyright © 2011 独立行政法人 情報処理推進機構 20

アプリケーション開発者が想定していたSQL文

SELECT * FROM user WHERE id=' ';

攻撃により、意味が書き換えられたSQL文

SELECT * FROM user WHERE id=' john' OR 'A'='A ';

※SQL文中の「'john'」のような定数をリテラルと呼び、文字列としてのリテラルを文字列リテラルと呼ぶ。数値は数値リテラルと呼ぶ。

文字列リテラルは「'」で括り、数値リテラルは「'」で括らない。

攻撃によりSQL文の意味が書き換えられる

条件: Id列の値と、「'」で括られた文字列リテラル(※)が一致する行

条件: Id列の値と、文字列リテラル john が一致する行

または

文字列リテラルAと文字列リテラルAが一致する行(常に成立する条件)

john

john' OR 'A'='A

はユーザからの入力値を表す

Page 21: 脆弱性体験学習ツール - IPA–SQL文の組み立て時に、パラメータの値を正しく リテラルとして展開する • SQL文の組み立ては全てプレースホルダで実装する。

Copyright © 2011 独立行政法人 情報処理推進機構 21

脅威は情報漏えいに限らない。データベースを制御され、データが作成/読み込み/更新/

削除される可能性がある。

– Create (作成): 偽データの追加の脅威

– Read (読込): データの漏えいの脅威

– Update(更新): 偽データでの上書きの脅威

– Delete (削除): データの削除の脅威

OSコマンドの実行 – ストアドプロシージャ等を利用したOSコマンドの実行の可能性がある。

SQLインジェクション攻撃の脅威

Page 22: 脆弱性体験学習ツール - IPA–SQL文の組み立て時に、パラメータの値を正しく リテラルとして展開する • SQL文の組み立ては全てプレースホルダで実装する。

Copyright © 2011 独立行政法人 情報処理推進機構

SQLインジェクションの脆弱性を 取り巻く状況

22

クレジットカード番号や個人情報の漏えい

– 音響機器・楽器販売サイト

– 健康食品や医薬品販売サイト

– 化粧品販売サイト

– 雑貨販売サイト

ウイルス感染などを引き起こすウェブサイトの改ざん

– ウイルス対策ソフト開発会社

– 自動車情報サイト

– 政府関連のウェブサイト

Page 23: 脆弱性体験学習ツール - IPA–SQL文の組み立て時に、パラメータの値を正しく リテラルとして展開する • SQL文の組み立ては全てプレースホルダで実装する。

Copyright © 2011 独立行政法人 情報処理推進機構

[演習]AppGoatを用いた疑似攻撃体験 [時間]30分(解説含む)

AppGoatを起動し、SQLインジェクションの下記テーマの演習を実施してください。

「不正なログイン(文字列リテラル)」

画面上に「Congratulations!! 」と表示されると演習クリアです。

23

クリアした方は、下記テーマの演習に挑戦してみてください。

「情報漏えい(数値リテラル)」

Page 24: 脆弱性体験学習ツール - IPA–SQL文の組み立て時に、パラメータの値を正しく リテラルとして展開する • SQL文の組み立ては全てプレースホルダで実装する。

Copyright © 2011 独立行政法人 情報処理推進機構

[演習]演習環境へのアクセス方法

AppGoat起動後、①学習テーマを選択し、

②パンくずリストの「演習」をクリックします。

24

Page 25: 脆弱性体験学習ツール - IPA–SQL文の組み立て時に、パラメータの値を正しく リテラルとして展開する • SQL文の組み立ては全てプレースホルダで実装する。

Copyright © 2011 独立行政法人 情報処理推進機構

[演習]演習の進め方

下記のように、ウェブアプリケーションがどのようにSQL文を組み立てているのか、想像しながら演習問題を解いてみましょう。

– 「前提条件」ボタンを押下し、どのようなSQL文が使用されているか確認する。

– 様々な値でログインを試み、ウェブアプリケーションの挙動を確認する。

• ログインIDに「yamada」、パスワードに「P@ssword」を入力する。

• ログインID、パスワードともに「yamada」を入力する。

• 入力欄のいずれかにシングルクォート「'」を入力する。

25

Page 26: 脆弱性体験学習ツール - IPA–SQL文の組み立て時に、パラメータの値を正しく リテラルとして展開する • SQL文の組み立ては全てプレースホルダで実装する。

Copyright © 2011 独立行政法人 情報処理推進機構

[演習]行き詰まった場合

問題を解くのに行き詰まった場合は、AppGoatの

ヒント機能を参考に演習を進めてください。

不明な点がございましたら、お気軽にお声掛けください(または挙手)。補助講師が伺います。

26

AppGoatのヒント機能

Page 27: 脆弱性体験学習ツール - IPA–SQL文の組み立て時に、パラメータの値を正しく リテラルとして展開する • SQL文の組み立ては全てプレースホルダで実装する。

Copyright © 2011 独立行政法人 情報処理推進機構

[演習解説]

演習解説は、別紙を参照してください。別紙は、演習時間終了後に閲覧するようにしてください。

27

Page 28: 脆弱性体験学習ツール - IPA–SQL文の組み立て時に、パラメータの値を正しく リテラルとして展開する • SQL文の組み立ては全てプレースホルダで実装する。

Copyright © 2011 独立行政法人 情報処理推進機構

SQLインジェクション脆弱性の対策

根本的解決 「脆弱性の原因を作り込まない実装」 – SQL文の組み立て時に、パラメータの値を正しくリテラルとして展開する

• SQL文の組み立ては全てプレースホルダで実装する。

• SQL文の組み立てを文字列連結により行う場合は、エスケープ処理等を行うデータベースエンジンのAPIを用いて、SQL文のリテラルを正しく構成する。

保険的対策 「攻撃による影響を軽減する対策」※

–詳細なエラーメッセージの抑止

–データベースアカウントの権限見直し

28 ※ 脆弱性の原因そのものを無くす対策ではない

Page 29: 脆弱性体験学習ツール - IPA–SQL文の組み立て時に、パラメータの値を正しく リテラルとして展開する • SQL文の組み立ては全てプレースホルダで実装する。

Copyright © 2011 独立行政法人 情報処理推進機構

根本的解決

プレースホルダによるSQL文の組み立て – パラメータを「?」などの記号で示しておき、後に、そこへ実際の値を機械的な処理で割り当てる方法のこと

– 記号「?」をプレースホルダと呼び、そこへ実際の値を割り当てることを「バインドする」と呼ぶ

– プレースホルダを用いることで、SQLインジェクション攻撃によりSQL文の構文を変化させられないようにする

29

PreparedStatement prep = conn.prepareStatement("SELECT * FROM employee WHERE name=?");

prep.setString(1, "山田"); Java

プレースホルダ

バインドする

Page 30: 脆弱性体験学習ツール - IPA–SQL文の組み立て時に、パラメータの値を正しく リテラルとして展開する • SQL文の組み立ては全てプレースホルダで実装する。

Copyright © 2011 独立行政法人 情報処理推進機構

根本的解決

プレースホルダの種類

–バインドをいつ行うのかによって、下記の2種類に分けられる。

30

静的プレースホルダ

データベース側がバインド処理

後からSQL文の構文が変化することがなく、原理的にSQLインジェクションの可能性がない

動的プレースホルダ

ウェブアプリケーション側のライブラリ内でバインド処理

ライブラリの実装にバグがあった場合は、攻撃によりSQL文の構文を変化させられてしまう可能性を否定できない

静的プレースホルダを推奨

Page 31: 脆弱性体験学習ツール - IPA–SQL文の組み立て時に、パラメータの値を正しく リテラルとして展開する • SQL文の組み立ては全てプレースホルダで実装する。

Copyright © 2011 独立行政法人 情報処理推進機構

静的プレースホルダ使用時のSQL文実行の流れ

31

ウェブサイト 利用者

SELECT *FROM table WHERE id = ‘●’ and passwd = ‘▲’

●=satou, ▲=a15T ●=satou, ▲=a15T

SELECT *FROM table WHERE id = ‘satou’ and passwd = ‘a15T’

実行結果

ウェブアプリケーション データベース

静的プレースホルダ

SELECT *FROM table WHERE id = ‘●’ and passwd = ‘▲’

実行結果

●=takana, ▲=vRi5 ●=takana, ▲=vRi5

SELECT *FROM table WHERE id = ‘takana’ and passwd = ‘vRi5’

実行結果

実行結果

Page 32: 脆弱性体験学習ツール - IPA–SQL文の組み立て時に、パラメータの値を正しく リテラルとして展開する • SQL文の組み立ては全てプレースホルダで実装する。

Copyright © 2011 独立行政法人 情報処理推進機構 32

プレースホルダの使用例 (根本的解決)

静的プレースホルダを使用(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呼び出しのサンプルコード

Page 33: 脆弱性体験学習ツール - IPA–SQL文の組み立て時に、パラメータの値を正しく リテラルとして展開する • SQL文の組み立ては全てプレースホルダで実装する。

Copyright © 2011 独立行政法人 情報処理推進機構 33

保険的対策

攻撃による影響を低減する対策

詳細なエラーメッセージを表示しないようにする – 詳細なデータベースに関するエラーメッセージをウェブページに表示 させない

– エラーを表示するとしても、内容は最小限にする

データベースアカウントの権限見直し – 「権限全部入り」のアカウントは使わない

• 既存のテーブルを読み書きするだけなのに、テーブル操作や管理等の 権限はいらない

• 権限を必要最小限にすれば、防げる攻撃もある

その他の対応 – 収集する情報および、データベースに格納する情報を見直す

– ウェブサイト利用者のパスワードはそのまま保存しない

Page 34: 脆弱性体験学習ツール - IPA–SQL文の組み立て時に、パラメータの値を正しく リテラルとして展開する • SQL文の組み立ては全てプレースホルダで実装する。

Copyright © 2011 独立行政法人 情報処理推進機構

SQL文の組み立て時には、プレースホルダを使用して、パラメータを正しくリテラルとして展開する。

その他の対策は、「安全なウェブサイトの作り方」、「安全なSQLの呼び出し方」を参照。

対策のおさらい

34

安全なウェブサイトの作り方 改訂第5版

別冊:「安全なSQLの呼び出し方」 http://www.ipa.go.jp/security/vuln/websecurity.html

Page 35: 脆弱性体験学習ツール - IPA–SQL文の組み立て時に、パラメータの値を正しく リテラルとして展開する • SQL文の組み立ては全てプレースホルダで実装する。

Copyright © 2011 独立行政法人 情報処理推進機構

クロスサイト・スクリプティングの脆弱性

Page 36: 脆弱性体験学習ツール - IPA–SQL文の組み立て時に、パラメータの値を正しく リテラルとして展開する • SQL文の組み立ては全てプレースホルダで実装する。

Copyright © 2011 独立行政法人 情報処理推進機構 36

講義内容

用語の簡易説明

クロスサイト・スクリプティング脆弱性の概要

実習:AppGoatを用いた疑似攻撃体験

対策のポイント

Page 37: 脆弱性体験学習ツール - IPA–SQL文の組み立て時に、パラメータの値を正しく リテラルとして展開する • SQL文の組み立ては全てプレースホルダで実装する。

Copyright © 2011 独立行政法人 情報処理推進機構

登場する用語の簡易説明

HTML

– ウェブページを記述するためのマークアップ言語。

– 文書の一部を“<”と“>”で挟まれた「タグ」と呼ばれる特別な文字列で囲うことにより、文章の構造や修飾についての情報を文書に埋め込んで記述することができる。

Cookie

– ウェブサーバとウェブブラウザ間で状態を管理するために使われる。例えば、ウェブサイトの訪問回数や、ユーザ認証後の状態を管理するために使われる。

37

Page 38: 脆弱性体験学習ツール - IPA–SQL文の組み立て時に、パラメータの値を正しく リテラルとして展開する • SQL文の組み立ては全てプレースホルダで実装する。

Copyright © 2011 独立行政法人 情報処理推進機構 38

クロスサイト・スクリプティング脆弱性の概要

脅威

– 出力するウェブページ(HTML)を書き換えられ、ウェブページを操作されてしまう

• 本物サイト上に偽のページが表示される、Cookieを取得される等

原因

– ウェブページ出力(HTML生成)の実装に問題

注意が必要なウェブアプリケーション

– 動的にウェブページを出力するウェブアプリケー

ション

Page 39: 脆弱性体験学習ツール - IPA–SQL文の組み立て時に、パラメータの値を正しく リテラルとして展開する • SQL文の組み立ては全てプレースホルダで実装する。

Copyright © 2011 独立行政法人 情報処理推進機構 39

クロスサイト・スクリプティング攻撃のイメージ図

ウェブアプリケーション

3.スクリプトを含むウェブページを出力

悪意のある人

利用者のブラウザ悪意のある人が用意した罠ページ

1-a.罠とは知らず、悪意あるサイトの罠ページを閲覧

1-b.罠リンクを含むメールを送信

ウェブサイト

リンク

クリック!

利用者のメーラ

2.クリック等により、スクリプトを含む文字列を送信

4.利用者のブラウザ上でスクリプトが実行

Cookie漏えい

偽ページの表示

スクリプト実行

5.スクリプトの内容によってはCookie情報などが漏えい

利用者

• 罠ページや罠リンクへのアクセスから、利用者が被害を受ける

HTML生成の

実装に問題

Page 40: 脆弱性体験学習ツール - IPA–SQL文の組み立て時に、パラメータの値を正しく リテラルとして展開する • SQL文の組み立ては全てプレースホルダで実装する。

Copyright © 2011 独立行政法人 情報処理推進機構

HTML生成の実装に問題があると

ウェブサーバ +ウェブアプリ

検索キーワード IPA

検索キーワード <s>IPA</s>

ウェブサーバ +ウェブアプリ

<s>は、取り消し線を引くHTMLタグ

<html> 【IPA 】を含む検索結果 …</html>

IPA

<html> 【<s>IPA</s> 】を含む 検索結果 …</html>

<s>IPA</s>

"<" および ">" が出力され、HTMLタグとして認識されてしまう (表示が崩れる)。

【IPA】を含む 検索結果

【IPA】を含む 検索結果

② ③

①’

②’ ③’

利用者

利用者

40

正常系

異常系

Page 41: 脆弱性体験学習ツール - IPA–SQL文の組み立て時に、パラメータの値を正しく リテラルとして展開する • SQL文の組み立ては全てプレースホルダで実装する。

Copyright © 2011 独立行政法人 情報処理推進機構 41

アプリケーション開発者が想定していたHTML

攻撃により、書き換えられたHTML

攻撃によりHTMLを書き換えられる

<html> 【IPA 】を含む検索結果 …</html>

IPA

<html> 【<s>IPA</s> 】を含む 検索結果 …</html>

<s>IPA</s>

【IPA】を含む検索結果

【IPA】を含む検索結果

HTMLソース ウェブブラウザ

HTMLソース ウェブブラウザ

攻撃により、<script>タグとして認識させた場合には、利用者のウェブブラウザ上で任意のスクリプトが実行されてしまう。

Page 42: 脆弱性体験学習ツール - IPA–SQL文の組み立て時に、パラメータの値を正しく リテラルとして展開する • SQL文の組み立ては全てプレースホルダで実装する。

Copyright © 2011 独立行政法人 情報処理推進機構

HTMLを書き換えられてしまうと

42

偽情報の表示

悪意あるサイトへの誘導

なりすましに

つながる

情報の窃取

Page 43: 脆弱性体験学習ツール - IPA–SQL文の組み立て時に、パラメータの値を正しく リテラルとして展開する • SQL文の組み立ては全てプレースホルダで実装する。

Copyright © 2011 独立行政法人 情報処理推進機構 43

クロスサイト・スクリプティング攻撃の脅威

本物サイト上に偽のページが表示される

– 偽の情報の流布による混乱

– フィッシング詐欺による重要情報の漏えい

– アドレスバーに表示されているドメインは正規のものであるため、利用者が罠と気付きにくい

ブラウザが保存しているCookie を取得される

– Cookieにセッション ID が格納されている場合、さらに利用者への成りすましにつながる

任意のCookieをブラウザに保存させられる

– セッションIDが利用者に送り込まれ、「セッションIDの固定化」攻撃に悪用される

Page 44: 脆弱性体験学習ツール - IPA–SQL文の組み立て時に、パラメータの値を正しく リテラルとして展開する • SQL文の組み立ては全てプレースホルダで実装する。

Copyright © 2011 独立行政法人 情報処理推進機構

クロスサイト・スクリプティングの脆弱性を取り巻く状況

脆弱性による被害や騒動があったサイト

– 動画共有サービス

– ミニブログサイト

– バグ管理システム

– ウェブメール

– クラウドを使ったデータ管理サービス

IPAに届け出られたクロスサイト・スクリプティングの脆弱性は、2300件以上(2011年3月末)

44

Page 45: 脆弱性体験学習ツール - IPA–SQL文の組み立て時に、パラメータの値を正しく リテラルとして展開する • SQL文の組み立ては全てプレースホルダで実装する。

Copyright © 2011 独立行政法人 情報処理推進機構

[演習]AppGoatを用いた疑似攻撃体験 [時間]30分(解説含む)

AppGoatを起動し、クロスサイト・スクリプティングの下記テーマの演習を実施してください。

「アンケートページの改ざん(反射型)」

画面上に「Congratulations!! 」と表示されると演習クリアです。

45

クリアした方は、下記テーマの演習に挑戦してみてください。

「掲示板に埋め込まれるスクリプト(格納型) 」

Page 46: 脆弱性体験学習ツール - IPA–SQL文の組み立て時に、パラメータの値を正しく リテラルとして展開する • SQL文の組み立ては全てプレースホルダで実装する。

Copyright © 2011 独立行政法人 情報処理推進機構

[演習]演習環境へのアクセス方法

AppGoat起動後、①学習テーマを選択し、

②パンくずリストの「演習」をクリックします。

46

Page 47: 脆弱性体験学習ツール - IPA–SQL文の組み立て時に、パラメータの値を正しく リテラルとして展開する • SQL文の組み立ては全てプレースホルダで実装する。

Copyright © 2011 独立行政法人 情報処理推進機構

[演習]演習の進め方

下記のように、ウェブアプリケーションがどのようにHTMLを生成しているのか、想像しながら演習問題を解いてみましょう。

– アンケートページで様々な値を入力し、入力内容確認ページやエラーページを表示させる。

– アンケートページで入力した値が、どのようにHTMLに反映されているか確認する。

47

アンケートページ上で右クリックし、「ソースを表示」でHTMLソースを表示する。

Internet Explorer

アンケートページ上で右クリックし、「このフレーム」⇒「フレームのソースを表示」でHTMLソースを表示する。

Firefox

Page 48: 脆弱性体験学習ツール - IPA–SQL文の組み立て時に、パラメータの値を正しく リテラルとして展開する • SQL文の組み立ては全てプレースホルダで実装する。

Copyright © 2011 独立行政法人 情報処理推進機構

[演習]行き詰まった場合

問題を解くのに行き詰まった場合は、AppGoatの

ヒント機能を参考に演習を進めてください。

次のスライドの財団法人 地方自治情報センター

(LASDEC)の資料抜粋(項番2.4)を参照ください。

48

ウェブ健康診断 - 財団法人 地方自治情報センター(LASDEC) 平成22年度版ウェブ健康診断仕様 Internet公開用

https://www.lasdec.or.jp/cms/resources/content/1284/H22_web_kenko_shindan.pdf

AppGoatのヒント機能

脆弱性の検出パターンや脆弱性有無の判定基準の目安が記載されています

Page 49: 脆弱性体験学習ツール - IPA–SQL文の組み立て時に、パラメータの値を正しく リテラルとして展開する • SQL文の組み立ては全てプレースホルダで実装する。

Copyright © 2011 独立行政法人 情報処理推進機構

平成22年度版ウェブ健康診断仕様(抜粋)

地方自治体向けの脆弱性有無確認の参考資料

49

[

参考]

平成22年度版ウェブ健康診断仕様 Internet公開用

https://www.lasdec.or.jp/cms/resources/content/1284/H22_web_kenko_shindan.pdf

Page 50: 脆弱性体験学習ツール - IPA–SQL文の組み立て時に、パラメータの値を正しく リテラルとして展開する • SQL文の組み立ては全てプレースホルダで実装する。

Copyright © 2011 独立行政法人 情報処理推進機構

[演習解説]

演習解説は、別紙を参照してください。別紙は、演習時間終了後に閲覧するようにしてください。

50

Page 51: 脆弱性体験学習ツール - IPA–SQL文の組み立て時に、パラメータの値を正しく リテラルとして展開する • SQL文の組み立ては全てプレースホルダで実装する。

Copyright © 2011 独立行政法人 情報処理推進機構

クロスサイト・スクリプティング脆弱性の対策

HTML テキストの入力を許可しない場合

HTML テキストの入力を許可する場合

全てのウェブアプリケーションに共通の対策

51

-根本的解決

・HTMLにおける特別な記号文字をエスケープ処理する

・URL 出力時のスキームを制限する

・スクリプト要素の内容を動的に生成しない

-保険的対策

・入力値チェックをする

-根本的解決

・構文解析木を作成して、必要な要素のみを抽出する

-保険的対策

・入力された HTML テキストから、スクリプトを除く

掲示板やブログ等のアプリ

検索や情報登録等の機能を有するアプリ

・文字コードを正しく指定する

Page 52: 脆弱性体験学習ツール - IPA–SQL文の組み立て時に、パラメータの値を正しく リテラルとして展開する • SQL文の組み立ては全てプレースホルダで実装する。

Copyright © 2011 独立行政法人 情報処理推進機構 52

& → &amp; < → &lt; " → &quot; > → &gt; ' → &#039;

•HTMLにおける特別な意味を持つ「記号文字」を文字参照に置換 (HTMLを許可しない場合)

•例:

入力値:<script>alert("test");</script>

置換後:&lt;script&gt;alert(&quot;test&quot;);&lt;/script&gt;

エスケープ処理(HTML不許可/根本的解決)

Page 53: 脆弱性体験学習ツール - IPA–SQL文の組み立て時に、パラメータの値を正しく リテラルとして展開する • SQL文の組み立ては全てプレースホルダで実装する。

Copyright © 2011 独立行政法人 情報処理推進機構 53

エスケープ処理なし

エスケープ処理あり

エスケープ処理(HTML不許可/根本的解決)

<input type="text" id="test" value=""><script>alert('ipa');</script>" />

HTMLソース

<input type="text" id="test"

value="&quot;&gt;&lt;script&gt;alert(&#039;ipa&#039;);&lt;/script&gt;" />

HTMLソース

ウェブブラウザ上の表示

ウェブブラウザ上の表示

scriptタグとして解釈された

Inputタグのvalue属性の値と解釈された

Page 54: 脆弱性体験学習ツール - IPA–SQL文の組み立て時に、パラメータの値を正しく リテラルとして展開する • SQL文の組み立ては全てプレースホルダで実装する。

Copyright © 2011 独立行政法人 情報処理推進機構

そもそもエスケープ処理って?

54

HTMLやSQLの構文毎に異なる、特別な意味を持つ「記号文字」(特殊記号)を"文字そのもの"

として扱うために行う処理。

– HTMLにおける特殊記号は、「<」「"」「'」「&」など

– SQLにおける特殊記号は、「'」「_」「%」など

特殊記号の中でも「データの区切り」を表す記号をエスケープすることが、セキュリティ上重要。

– HTMLにおけるデータの区切り記号は、「<」「"」など

– SQLにおけるデータの区切り記号は、「'」など

Page 55: 脆弱性体験学習ツール - IPA–SQL文の組み立て時に、パラメータの値を正しく リテラルとして展開する • SQL文の組み立ては全てプレースホルダで実装する。

Copyright © 2011 独立行政法人 情報処理推進機構

入力値チェックの位置づけ(保険的対策)

入力値チェックとは、利用者が入力した値の書式を確認することが主目的。

– 例:パスワードの長さや使用可能な文字種のチェック

電話番号やメールアドレスの書式チェック

脆弱性による被害を低減する役割を果たすことがあるが、入力値チェックだけでは防げない。

55

参考:脆弱性体験学習ツールAppGoat

クロスサイト・スクリプティングの「不完全な対策」

Page 56: 脆弱性体験学習ツール - IPA–SQL文の組み立て時に、パラメータの値を正しく リテラルとして展開する • SQL文の組み立ては全てプレースホルダで実装する。

Copyright © 2011 独立行政法人 情報処理推進機構

ウェブブラウザ側の クロスサイト・スクリプティング対策

ウェブブラウザには、クロスサイト・スクリプティング攻撃を防ぐ「XSSフィルタ」機能が備わっているものがある。

XSSフィルタの検知ロジックは様々。誤検知や検知しない可能性もある。

根本的には、ウェブアプリケーション側で対策する必要がある。

56

[

参考]

Page 57: 脆弱性体験学習ツール - IPA–SQL文の組み立て時に、パラメータの値を正しく リテラルとして展開する • SQL文の組み立ては全てプレースホルダで実装する。

Copyright © 2011 独立行政法人 情報処理推進機構

対策のおさらい

ウェブページを出力する際には、HTMLにおける特

別な意味を持つ記号文字をエスケープすることが必要。

ウェブサイトの性質によってエスケープ方法が異なる場合がある。詳しくは「安全なウェブサイトの作り

方」を参照。

57

安全なウェブサイトの作り方 改訂第5版

http://www.ipa.go.jp/security/vuln/websecurity.html

Page 58: 脆弱性体験学習ツール - IPA–SQL文の組み立て時に、パラメータの値を正しく リテラルとして展開する • SQL文の組み立ては全てプレースホルダで実装する。

Copyright © 2011 独立行政法人 情報処理推進機構

最後に

脆弱性が生まれる原理や対策方法の理解を深めるために、AppGoatを使ってウェブアプリケーションの挙動を確認しました。

脆弱性対策を学習するために、AppGoatを活用いただけましたら幸いです。

– セミナー講師が脆弱性対策を教える際の補助ツールとして

– 社内への脆弱性対策の教育に

– アプリケーション開発者に対する脆弱性対策学習を支援するツールとして

58

Page 59: 脆弱性体験学習ツール - IPA–SQL文の組み立て時に、パラメータの値を正しく リテラルとして展開する • SQL文の組み立ては全てプレースホルダで実装する。

Copyright © 2011 独立行政法人 情報処理推進機構

アンケート記入

お疲れ様でした

AppGoatに対する要望や意見を収集するために、IPAのアンケートにご協力お願いします。

59