講義内容 AppGoat の説明 起動手順 学習の進め方 利用シーン紹介 脆弱性学習 ( 演習あり ) SQLインジェクションの脆弱性 クロスサイト スクリプティングの脆弱性 アンケート記入 2

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

WEBシステムのセキュリティ技術

1. SQL インジェクションの問題と脅威 2

内容 ( 演習 1) 脆弱性の原理解説 基礎知識 脆弱性の発見方法 演習 1: 意図しない命令の実行 演習解説 2

べきでない悪意のあるSQL 文が攻撃者から入力された場合 データベースで実行される前にSQL 文として処理されないよう無効化する必要がありますが ( 図 1 1) 無効化されずにデータベースで実行された場合 データベースの操作が可能となります ( 図 1 2) 本脆弱性を悪用するとデータベース接続ユ

安全な Web サイトの作り方 7 版 と Android アプリの脆弱性対策 独立行政法人情報処理推進機構 (IPA) 技術本部セキュリティセンター Copyright 2015 独立行政法人情報処理推進機構

9 WEB監視

SQLインジェクション対策再考

SQLインジェクション・ワームに関する現状と推奨する対策案

今月の呼びかけ 添付資料 ファイル名に細工を施されたウイルスに注意! ~ 見た目でパソコン利用者をだます手口 ~ 2011 年 9 月 IPA に RLTrap というウイルスの大量の検出報告 ( 約 5 万件 ) が寄せられました このウイルスには パソコン利用者がファイルの見た目 ( 主に拡張子

はじめに (1) フィッシング詐欺 ( フィッシング攻撃 ) とは フィッシング詐欺とは インターネットバンキング ショッピングサイト等の利用者のアカウント情報 (ID パスワード等 ) や クレジットカードの情報等を騙し取る攻撃です 典型的な手口としては 攻撃者が本物のウェブサイトと似た偽のウェブ

目次 1. エグゼクティブサマリー 総合評価 総評 内在するリスク 情報漏洩 サービス妨害 対策指針 早急の対策 恒久的な対

SOC Report

不正送金対策 フィッシング対策ソフト PhishWall( フィッシュウォール ) プレミアム のご案内 広島県信用組合では インターネットバンキングを安心してご利用いただくため 不正送金 フィッシング対策ソフト PhishWall( フィッシュウォール ) プレミアム を導入しました 無料でご利用

2011 年第 3 四半期脆弱性対策情報データベース JVN ipedia の登録状況 ( 詳細 ) 1. 脆弱性対策情報の登録状況 1.1 今四半期に登録した脆弱性の種類別件数 す 別紙 2 共通脆弱性タイプ一覧 CWE ( *12) は 脆弱性の種類を識別するための共通の脆弱性タイプの一覧で C

[投影版]見つけられやすい脆弱性とウェブフレームワークに求められるセキュリティ対策_

注意 インストール中に ユーザアカウント制御 ( 以下 UAC といいます ) の実行確認画面が表示されることがあります 表示された場合ははいをクリックして インストールを進めてください なお 管理者以外の場合 管理者への昇格を求める UAC 画面が表示される場合がありますので 管理者アカウントのパ

ブラウザ Internet Explorer 7 の設定について 第3版

HDC-EDI Manager Ver レベルアップ詳細情報 < 製品一覧 > 製品名バージョン HDC-EDI Manager < 対応 JavaVM> Java 2 Software Development Kit, Standard Edition 1.4 Java 2

Microsoft Word - XOOPS インストールマニュアルv12.doc

Shareresearchオンラインマニュアル

Vista IE7 ブラウザの設定手順

Microsoft Word - WebClass Ver 9.08f 主な追加機能・修正点.docx

PowerPoint プレゼンテーション

SciFinder エラーへの対処法

マルウェアレポート 2018年2月度版

情報セキュリティ 10 大脅威 大脅威とは? 2006 年より IPA が毎年発行している資料 10 大脅威選考会 の投票により 情報システムを取巻く脅威を順位付けして解説 Copyright 2017 独立行政法人情報処理推進機構 2

スライド 1

2. 留意事項セキュリティ対策を行う場合 次のことに留意してください 不正侵入対策の設定を行う場合 お使いのソフトウェアによっては今までのように正常に動作しなくなる可能性があります 正常に動作しない場合は 必要に応じて例外処理の追加を行ってください ここで行うセキュリティ対策は 通信内容の安全性を高

( 目次 ) 1. はじめに 開発環境の準備 仮想ディレクトリーの作成 ASP.NET のWeb アプリケーション開発環境準備 データベースの作成 データベースの追加 テーブルの作成

SAMBA Stunnel(Windows) 編 1. インストール 1 セキュア SAMBA の URL にアクセスし ログインを行います xxx 部分は会社様によって異なります xxxxx 2 Windows 版ダウンロード ボ

4. ファイルアップロード機能 使い方 ファイルをドラッグ & ドロップ した状態 図 4-1: ファイルアップロード画面 ( 例 ) 1. 送信するファイルをドラッグ & ドロップしてください 送信するファイルの右のエリアをマウスでクリックする事により 従来のエクスプローラー形式のアップロードも可

共有フォルダ接続手順 1 共有フォルダ接続ツールのダウンロード 展開 CSVEX のトップページから共有フォルダ接続ツールの zip ファイルをダウンロードします ダウンロードした zip ファイルを右クリックして すべて展開 を選択します (Windows 環境では zip ファイルを解凍しなくて

<4D F736F F D AA8E5291E58A778FEE95F B835E B CC91808DEC95FB9640>

目次 1. はじめに 証明書ダウンロード方法 ブラウザの設定 アドオンの設定 証明書のダウンロード サインアップ サービスへのログイン

LCV-Net ファイルコンテナ ユーザーマニュアル

各種パスワードについて マイナンバー管理票では 3 種のパスワードを使用します (1) 読み取りパスワード Excel 機能の読み取りパスワードです 任意に設定可能です (2) 管理者パスワード マイナンバー管理表 の管理者のパスワードです 管理者パスワード はパスワードの流出を防ぐ目的で この操作

はじめに このマニュアルは BACREX-R を実際に使用する前に知っておいて頂きたい内容として 使用する前の設定や 動作に関する注意事項を記述したものです 最初に必ずお読み頂き 各設定を行ってください 実際に表示される画面と マニュアルの画面とが異なる場合があります BACREX-R は お客様の

NSS利用者マニュアル

システム利用前の準備作業2.1 準備作業の流れ 準備作業の流れは 以下のとおりです 2必要なものを用意する 2.2 パソコンインターネット接続回線 E メールアドレス 2.2-(1) 2.2-(2) 2.2-(3) 当金庫からの送付物 2.2-(4) パソコンの設定をする 2.3 Cookie の設

機能性表示食品制度届出データベース届出マニュアル ( 食品関連事業者向け ) 4-6. パスワードを変更する 画面の遷移 処理メニューより パスワード変更 を選択すると パスワード変更 画面が表示されます パスワード変更 画面において パスワード変更 をクリックすると パスワード変更詳細 画面が表示

別紙 年第 3 四半期脆弱性対策情報データベース JVN ipedia の登録状況 ( 詳細 ) 1. 脆弱性対策情報の登録状況 年第 3 四半期に登録した脆弱性の種類別件数図 8 のグラフは JVN ipedia へ 2012 年第 3 四半期に登録した脆弱性対策情

PowerPoint プレゼンテーション

どこでもキャビネットVer1.3 ご紹介資料

PowerPoint プレゼンテーション

PowerPoint プレゼンテーション

Pirates Buster Series Secure Viewer セットアップマニュアル (Web インストーラ)

目次 第 1 章はじめに 電子入札システムを使用するまでの流れ 1 第 2 章 Java ポリシーを設定する前に 前提条件の確認 2 第 3 章 Java のバージョンについて Java バージョン確認方法 Java のアンインストール ( ケース2の

金融工学ガイダンス

(8) [ 全般 ] タブをクリックします (9) [ インターネット一時ファイル ] の [ 設定 ] ボタンをクリックします (10) [ 保存しているページの新しいバージョンの確認 ] から [ ページを表示するごとに確認する ] をクリックします (11) [OK] ボタンをクリックしていき

Microsoft PowerPoint - Userguide-keitai-douga-v1.1.ppt

1 グループ管理者とは ページ設定 ( グループページの設定 ) を行うことができるのがグループ管理者です グループ管理者はパーツのレイアウト変更や グループメンバーの権限設定 メンバーの招待などグループページ内の管理について様々に設定することができます 例えば町内会でグループページを作成し運用して

サイボウズ ツールバー βマニュアル

Microsoft Word 基_シラバス.doc

迷惑メールフィルタリングサービス フィードバック機能マニュアル

PowerPoint Presentation

2.2 Reflected XSS 攻撃攻撃者の用意した悪意のあるリンクとターゲットサーバが同じホストである場合の Reflected XSS 攻撃を, 本稿では Reflected XSS 攻撃と呼ぶ. 例えば, サーバ A の target.php に Reflected XSS 脆弱性があった

不正送金 フィッシング対策ソフト PhishWall( フィッシュウォール ) プレミアム について 中ノ郷信用組合では インターネットバンキングのセキュリティを高めるため 不正送金 フィッシング対策ソフト PhishWall( フィッシュウォール ) プレミアム をご提供しております ( ご利用は

Bizメール&ウェブ プレミアム ブログ(WordPress)マニュアル

SciFinder (Web版) のエラーへの対処法

CloudEdgeあんしんプラス月次レポート解説書(1_0版) _docx

迷惑メールフィルタリングサービス コントロールパネル利用者マニュアル

◎phpapi.indd

<8B9E93738CF092CA904D94CC814090BF8B818F B D836A B B B816A2E786C73>

SOC Report

V-CUBE One

. はじめに はじめに みなと外国為替 WEBをご利用いただくにあたり ブラウザ ( インターネットに接続するソフト ) の設定作業は原則不要ですが お客さまのご利用環境によっては ブラウザの設定が必要となる場合があります お客さまの状況にあわせて手順をご確認ください ブラウザの設定を行う前にお客さ

PALNETSC0184_操作編(1-基本)

金融工学ガイダンス

項番 現象 原因 対応手順書など 4 代理店コードでのダウンロード時に以下のメッセージの画面が表示される サービス時間外のため 現在 このサービスはご利用になれません 当機能のサービス時間外です 以下の時間帯にダウンロードしてください 月曜日 ~ 金曜日 7:00~21:00 土曜日 7:00~17

新環境への移行手順書

スライド 1

.1 準備作業の流れ 準備作業の流れは 以下のとおりです 必要なものを用意する. パソコンインターネット接続回線 E メールアドレス.-(1).-().-(3) 当金庫からの送付物.-(4) パソコンの設定をする.3 Cookie の設定を行う.3-(1) Java の設定を有効にする ( ファイル

管理サイト操作マニュアル Version.1.1. デジアナコミュニケーションズ株式会社

SILAND.JP テンプレート集

独立行政法人産業技術総合研究所 PMID-Extractor ユーザ利用マニュアル バイオメディシナル情報研究センター 2009/03/09 第 1.0 版

印刷アプリケーションマニュアル

PowerPoint プレゼンテーション

金融工学ガイダンス

Proselfの利用方法

PC にソフトをインストールすることによって OpenVPN でセキュア SAMBA へ接続することができます 注意 OpenVPN 接続は仮想 IP を使用します ローカル環境にて IP 設定が被らない事をご確認下さい 万が一仮想 IP とローカル環境 IP が被るとローカル環境内接続が行えなくな

Microsoft Word - Activ 利用の手引きVer2.0.doc

インターネットフィルタリング簡単マニュアル

スライド 1

改版履歴 版数 日付 内容 担当 V /3/9 初版発行 STS V /5/4 エラー画面の削除 STS V //3 サポート環境の追加 サポート環境の説明文章の STS 修正 画面修正 V /2/25 サポート環境変更 STS V

— intra-martで運用する場合のセキュリティの考え方    

KDDI ビジネスメール 一般ユーザ用カスタマーコントロール操作ガイド Ver.2.04 Copyright , KDDI Corporation All rights reserved 1

新規インストールガイド Microsoft Office Professional Plus 2016 本書は Download Station から Microsoft Office Professional Plus 2016( 以下 Office) をダウンロ ドし 新規インストールを行う手順

PowerPoint プレゼンテーション

3 ハイパーサーバサービスの諸設定を行う為の コントロールパネル のメイン画面が表示されます ウェブサイトとドメイン タブの データベース 欄にある 新規データベースを追加 をクリックします ( 新規データベースを追加 ボタンがない場合は データベース をクリックし データベース画面にある 新しいデ

Si 知識情報処理

安全なウェブサイトの作り方 7 版 の内容と資料活用例 2

2. ccmybox を利用するには ccmybox の利用には Web ブラウザが必要ですが パソコンの Web ブラウザだけでなく スマートフォンなどのモバイル機器の Web ブラウザからも接続が可能です また Web ブラウザを利用した接続方法以外に 専用接続ツールがメーカーより提供されていま

ファイルのアップロード. 上メニューから [ アップロード ] を選択します. [ アップロード ] 画面に移行しますので, 以下の手順で操作を行います アップロードするファイルを選択し, 指定場所へ [ ドラッグ & ドロップ ] します ドラッグ & ドロップ ファイルがリストアップされたことを

ご利用のコンピュータを設定する方法 このラボの作業を行うには 事前設定された dcloud ラボを使用するか 自身のコンピュータをセットアップします 詳細については イベントの事前準備 [ 英語 ] とラボの設定 [ 英語 ] の両方のモジュールを参照してください Python を使用した Spar

目次 1. はじめに... 1 動作環境... 1 その他 他の人が利用する ID を発行したい... 2 ユーザー ID 作成を作成しましょう パソコンのデータを自動でアップロードしたい... 4 PC 自動保管機能を使用してみましょう 不特定多数の

高知大学 学生用

Microsoft Word - FTTH各種設定手順書(鏡野地域対応_XP項目削除) docx

金融工学ガイダンス

更新用証明書インポートツール 操作マニュアル 2011 年 10 月 31 日 セコムトラストシステムズ株式会社 Copyright 2011 SECOM Trust Systems CO.,LTD. All rights reserved. P-1

Transcription:

脆弱性体験学習ツール AppGoat ハンズオンセミナー ウェブアプリケーション編

講義内容 AppGoat の説明 起動手順 学習の進め方 利用シーン紹介 脆弱性学習 ( 演習あり ) SQLインジェクションの脆弱性 クロスサイト スクリプティングの脆弱性 アンケート記入 2

AppGoat の説明

AppGoat( アップゴート ) とは 本講義では ウェブアプリケーション版の演習環境を使います 教材や演習環境を使って 脆弱性を突いた攻撃が成功する仕組みから実際の対策方法までを学習するツール 教材 : 脆弱性対策に必要な情報を図解したもの 演習環境 : 故意に脆弱性を埋め込んだアプリケーション 下記の 2 種類がある ウェブアプリケーション版 ウェブアプリケーション版 クロスサイト スクリプティングや SQL インジェクションなどを題材とした 15 の学習テーマから構成されている 学習 サーバ デスクトップアプリケーション版 サーバ デスクトップアプリケーション版 バッファオーバーフローや整数オーバーフローなどを題材とした 13 の学習テーマから構成されている 学習 4

学習テーマ一覧 - ウェブアプリケーション版 - ウェブアプリケーション版は 下記表の脆弱性を学習可能 講義内で演習実施 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 6

起動手順 ( 手順 1) ZIP ファイルを展開し IPATool フォルダの中にある Start.bat をダブルクリックします 7

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

起動手順 ( 手順 3) Windows ファイアウォールの警告ダイアログが表示された場合は ブロックする を選択します 9

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

学習の進め方 左部に表示される テーマ一覧 から学習テーマを選択します あとは 流れに沿って学習を進めていきます 学習テーマ選択後の流れ 脆弱性原理解説 演習 影響解説 対策方法解説 演習のイメージ 脆弱性の発見にチャレンジ! 脆弱性発見! 脆弱性を突いた攻撃が成功する仕組みを体験することで 脆弱性をより理解できます 11

企業での利用シーン紹介 社内のセキュリティ研修で利用する 研修担当者が講師となり ハンズオン形式で教える 開発前のスキルチェックで利用する AppGoat を使った講義の補助資料を公開しています http://www.ipa.go.jp/security/vuln/documents/appgo at_material01.pdf 開発メンバーの理解度を確認する 安全なウェブサイトの作り方 と併せて利用すると効果的です http://www.ipa.go.jp/security/vuln/websecurity.html 12

AppGoat を使う際の注意事項 AppGoat では 脆弱性を埋め込んだ演習環境に対して 疑似的に攻撃します これは攻撃手法を理解して対策につなげるためです 本講義で学習した知識を基に 下記に該当する行為を行わないようにしましょう (1) 第三者のコンピュータシステムの正常な動作に支障をきたす行為 (2) 第三者のウェブサイトへの攻撃行為 13

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

講義内容 用語の簡易説明 SQLインジェクション脆弱性の概要 演習 :AppGoatを用いた疑似攻撃体験 対策のポイント 15

登場する用語の簡易説明 ウェブアプリケーション ウェブサーバ上で動作するアプリケーション 利用者はウェブブラウザを用いてウェブサーバにアクセスし ウェブアプリケーションを利用する データベース 大量の情報を保存し 効率よく情報にアクセスできるように加工したデータの集まり SQL データベースを管理するシステム (DBMS) において データの操作や定義を行うための問合せ言語のこと 16

SQL インジェクション脆弱性の概要 脅威 データベースへの命令 (SQL 文 ) の意味を書き換えられ データベースを不正に操作されてしまう 原因 情報の改ざんや漏えい 認証の回避 OS コマンドの実行 ウェブアプリケーションにおける データベースへの命令 (SQL 文 ) の組み立て方に問題 注意が必要なウェブアプリケーション データベースを利用しているウェブアプリケーション 17

SQL インジェクション攻撃のイメージ図 SQL インジェクション SQL インジェクションの脆弱性がある場合 悪意あるリクエストにより データベースの不正利用をまねく可能性があります 悪意のある人 ウェブサイト SQL 文の組み立て方に問題 データベースへの命令文を構成する入力値を送信 データベースへ命令を送信 消去 情報漏えい データベース 改ざん SQL インジェクションの脆弱性があるウェブアプリケーション 18

SQL 文の組み立て方に問題があると ID を入力すると 該当するユーザ情報を表示するウェブアプリ SQL 文例 SELECT * FROM user WHERE id= $ID 全て を意味する 1 ID 入力欄に下記文字列を入力しリクエストを送信する john OR A = A 2 SELECT * FROM user WHERE id= john OR A = A john OR A = A ユーザの入力値をもとに SQL 文を組み立て データベースに送信する 悪意がある人 全てのユーザ情報 4 全てのユーザの情報を参照できる ウェブサーバ + ウェブアプリ 3 SQL 文の実行結果をウェブアプリに返す user データベース データベースが不正に操作されてしまう!! 19

攻撃により SQL 文の意味が書き換えられる アプリケーション開発者が想定していた SQL 文 SELECT * FROM user WHERE id=' john 攻撃により 意味が書き換えられた SQL 文 はユーザからの入力値を表す 条件 : Id 列の値と ' で括られた文字列リテラル ( ) が一致する行 SELECT * FROM user WHERE id=' john' OR 'A'='A '; 条件 : Id 列の値と 文字列リテラル john が一致する行または文字列リテラル A と文字列リテラル A が一致する行 ( 常に成立する条件 ) '; SQL 文中の 'john' のような定数をリテラルと呼び 文字列としてのリテラルを文字列リテラルと呼ぶ 数値は数値リテラルと呼ぶ 文字列リテラルは ' で括り 数値リテラルは ' で括らない 20

SQL インジェクション攻撃の脅威 脅威は情報漏えいに限らない データベースを制御され データが作成 / 読み込み / 更新 / 削除される可能性がある Create ( 作成 ): 偽データの追加の脅威 Read ( 読込 ): データの漏えいの脅威 Update( 更新 ): 偽データでの上書きの脅威 Delete ( 削除 ): データの削除の脅威 OS コマンドの実行 ストアドプロシージャ等を利用したOSコマンドの実行の可能性がある 21

SQLインジェクションの脆弱性を取り巻く状況 クレジットカード番号や個人情報の漏えい 音響機器 楽器販売サイト 健康食品や医薬品販売サイト 化粧品販売サイト 雑貨販売サイト ウイルス感染などを引き起こすウェブサイトの改ざん ウイルス対策ソフト開発会社 自動車情報サイト 政府関連のウェブサイト 22

[ 演習 ]AppGoat を用いた疑似攻撃体験 [ 時間 ]30 分 ( 解説含む ) AppGoat を起動し SQL インジェクションの下記テーマの演習を実施してください 不正なログイン ( 文字列リテラル ) 画面上に Congratulations!! と表示されると演習クリアです クリアした方は 下記テーマの演習に挑戦してみてください 情報漏えい ( 数値リテラル ) 23

[ 演習 ] 演習環境へのアクセス方法 AppGoat 起動後 1 学習テーマを選択し 2 パンくずリストの 演習 をクリックします 24

[ 演習 ] 演習の進め方 下記のように ウェブアプリケーションがどのように SQL 文を組み立てているのか 想像しながら演習問題を解いてみましょう 前提条件 ボタンを押下し どのような SQL 文が使用されているか確認する 様々な値でログインを試み ウェブアプリケーションの挙動を確認する ログイン ID に yamada パスワードに P@ssword を入力する ログイン ID パスワードともに yamada を入力する 入力欄のいずれかにシングルクォート ' を入力する 25

[ 演習 ] 行き詰まった場合 問題を解くのに行き詰まった場合は AppGoat のヒント機能を参考に演習を進めてください AppGoat のヒント機能 不明な点がございましたら お気軽にお声掛けください ( または挙手 ) 補助講師が伺います 26

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

SQL インジェクション脆弱性の対策 根本的解決 脆弱性の原因を作り込まない実装 SQL 文の組み立て時に パラメータの値を正しくリテラルとして展開する SQL 文の組み立ては全てプレースホルダで実装する SQL 文の組み立てを文字列連結により行う場合は エスケープ処理等を行うデータベースエンジンの API を用いて SQL 文のリテラルを正しく構成する 保険的対策 攻撃による影響を軽減する対策 詳細なエラーメッセージの抑止 データベースアカウントの権限見直し 脆弱性の原因そのものを無くす対策ではない 28

根本的解決 プレースホルダによる SQL 文の組み立て パラメータを? などの記号で示しておき 後に そこへ実際の値を機械的な処理で割り当てる方法のこと 記号? をプレースホルダと呼び そこへ実際の値を割り当てることを バインドする と呼ぶ プレースホルダを用いることで SQL インジェクション攻撃により SQL 文の構文を変化させられないようにする PreparedStatement prep = conn.preparestatement("select * FROM employee WHERE name=?"); prep.setstring(1, " 山田 "); バインドする プレースホルダ Java 29

根本的解決 プレースホルダの種類 バインドをいつ行うのかによって 下記の2 種類に分けられる 静的プレースホルダ データベース側がバインド処理 後から SQL 文の構文が変化することがなく 原理的に SQL インジェクションの可能性がない 動的プレースホルダ 静的プレースホルダを推奨 ウェブアプリケーション側のライブラリ内でバインド処理 ライブラリの実装にバグがあった場合は 攻撃により SQL 文の構文を変化させられてしまう可能性を否定できない 30

静的プレースホルダ使用時の SQL 文実行の流れ 静的プレースホルダ 利用者 ウェブサイト ウェブアプリケーション データベース SELECT *FROM table WHERE id = and passwd = SELECT *FROM table WHERE id = and passwd = =satou, =a15t =satou, =a15t SELECT *FROM table WHERE id = satou and passwd = a15t 実行結果 実行結果 =takana, =vri5 実行結果 =takana, =vri5 SELECT *FROM table WHERE id = takana and passwd = vri5 実行結果 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 呼び出しのサンプルコード 32

保険的対策 攻撃による影響を低減する対策 詳細なエラーメッセージを表示しないようにする 詳細なデータベースに関するエラーメッセージをウェブページに表示させない エラーを表示するとしても 内容は最小限にする データベースアカウントの権限見直し 権限全部入り のアカウントは使わない 既存のテーブルを読み書きするだけなのに テーブル操作や管理等の権限はいらない 権限を必要最小限にすれば 防げる攻撃もある その他の対応 収集する情報および データベースに格納する情報を見直す ウェブサイト利用者のパスワードはそのまま保存しない 33

対策のおさらい SQL 文の組み立て時には プレースホルダを使用して パラメータを正しくリテラルとして展開する その他の対策は 安全なウェブサイトの作り方 安全な SQL の呼び出し方 を参照 安全なウェブサイトの作り方改訂第 5 版 別冊 : 安全な SQL の呼び出し方 http://www.ipa.go.jp/security/vuln/websecurity.html 34

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

講義内容 用語の簡易説明 クロスサイト スクリプティング脆弱性の概要 実習 :AppGoatを用いた疑似攻撃体験 対策のポイント 36

登場する用語の簡易説明 HTML ウェブページを記述するためのマークアップ言語 文書の一部を < と > で挟まれた タグ と呼ばれる特別な文字列で囲うことにより 文章の構造や修飾についての情報を文書に埋め込んで記述することができる Cookie ウェブサーバとウェブブラウザ間で状態を管理するために使われる 例えば ウェブサイトの訪問回数や ユーザ認証後の状態を管理するために使われる 37

クロスサイト スクリプティング脆弱性の概要 脅威 出力するウェブページ (HTML) を書き換えられ ウェブページを操作されてしまう 原因 本物サイト上に偽のページが表示される Cookie を取得される等 ウェブページ出力 (HTML 生成 ) の実装に問題 注意が必要なウェブアプリケーション 動的にウェブページを出力するウェブアプリケーション 38

クロスサイト スクリプティング攻撃の イメージ図 罠ページや罠リンクへのアクセスから 利用者が被害を受ける 悪意のある人が用意した罠ページ 1-a. 罠とは知らず 悪意あるサイトの罠ページを閲覧 利用者のブラウザ ウェブサイト クリック! 悪意のある人 1-b. 罠リンクを含むメールを送信 利用者のメーラ リンク 2. クリック等により スクリプトを含む文字列を送信 ウェブアプリケーション Cookie 漏えい 5. スクリプトの内容によっては Cookie 情報などが漏えい 利用者 スクリプト実行 偽ページの表示 4. 利用者のブラウザ上でスクリプトが実行 3. スクリプトを含むウェブページを出力 HTML 生成の実装に問題 39

HTML 生成の実装に問題があると 正常系 利用者 異常系 利用者 検索キーワード IPA 3 IPA を含む検索結果 検索キーワード <s>ipa</s> 3 IPA を含む検索結果 1 1 2 ウェブサーバ + ウェブアプリ <s> は 取り消し線を引く HTML タグ 2 ウェブサーバ + ウェブアプリ <html> IPA IPA を含む検索結果 </html> <html> <s>ipa</s> を含む検索結果 </html> "<" および ">" が出力され HTMLタグとして認識されてしまう ( 表示が崩れる ) 40

攻撃により HTML を書き換えられる アプリケーション開発者が想定していた HTML HTML ソース <html> IPA IPA を含む検索結果 </html> 攻撃により 書き換えられた HTML HTML ソース <html> <s>ipa</s> を含む検索結果 </html> ウェブブラウザ IPA を含む検索結果 ウェブブラウザ IPA を含む検索結果 攻撃により <script> タグとして認識させた場合には 利用者のウェブブラウザ上で任意のスクリプトが実行されてしまう 41

HTML を書き換えられてしまうと 偽情報の表示 悪意あるサイトへの誘導 なりすましにつながる情報の窃取 42

クロスサイト スクリプティング攻撃の脅威 本物サイト上に偽のページが表示される 偽の情報の流布による混乱 フィッシング詐欺による重要情報の漏えい アドレスバーに表示されているドメインは正規のものであるため 利用者が罠と気付きにくい ブラウザが保存している Cookie を取得される Cookie にセッション ID が格納されている場合 さらに利用者への成りすましにつながる 任意の Cookie をブラウザに保存させられる セッションIDが利用者に送り込まれ セッションIDの固定化 攻撃に悪用される 43

クロスサイト スクリプティングの脆弱性を取り巻く状況 脆弱性による被害や騒動があったサイト 動画共有サービス ミニブログサイト バグ管理システム ウェブメール クラウドを使ったデータ管理サービス IPA に届け出られたクロスサイト スクリプティングの脆弱性は 2300 件以上 (2011 年 3 月末 ) 44

[ 演習 ]AppGoat を用いた疑似攻撃体験 [ 時間 ]30 分 ( 解説含む ) AppGoat を起動し クロスサイト スクリプティングの下記テーマの演習を実施してください アンケートページの改ざん ( 反射型 ) 画面上に Congratulations!! と表示されると演習クリアです クリアした方は 下記テーマの演習に挑戦してみてください 掲示板に埋め込まれるスクリプト ( 格納型 ) 45

[ 演習 ] 演習環境へのアクセス方法 AppGoat 起動後 1 学習テーマを選択し 2 パンくずリストの 演習 をクリックします 46

[ 演習 ] 演習の進め方 下記のように ウェブアプリケーションがどのように HTML を生成しているのか 想像しながら演習問題を解いてみましょう アンケートページで様々な値を入力し 入力内容確認ページやエラーページを表示させる アンケートページで入力した値が どのように HTML に反映されているか確認する Internet Explorer アンケートページ上で右クリックし ソースを表示 でHTMLソースを表示する Firefox アンケートページ上で右クリックし このフレーム フレームのソースを表示 でHTMLソースを表示する 47

[ 演習 ] 行き詰まった場合 問題を解くのに行き詰まった場合は AppGoat のヒント機能を参考に演習を進めてください AppGoat のヒント機能 次のスライドの財団法人地方自治情報センター (LASDEC) の資料抜粋 ( 項番 2.4) を参照ください 脆弱性の検出パターンや脆弱性有無の判定基準の目安が記載されています ウェブ健康診断 - 財団法人地方自治情報センター (LASDEC) 平成 22 年度版ウェブ健康診断仕様 Internet 公開用 https://www.lasdec.or.jp/cms/resources/content/1284/h22_web_kenko_shindan.pdf 48

[ 参考 ] 平成 22 年度版ウェブ健康診断仕様 ( 抜粋 ) 地方自治体向けの脆弱性有無確認の参考資料 平成 22 年度版ウェブ健康診断仕様 Internet 公開用 https://www.lasdec.or.jp/cms/resources/content/1284/h22_web_kenko_shindan.pdf 49

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

クロスサイト スクリプティング脆弱性の対策 HTML テキストの入力を許可しない場合 - 根本的解決 HTML における特別な記号文字をエスケープ処理する URL 出力時のスキームを制限する スクリプト要素の内容を動的に生成しない - 保険的対策 入力値チェックをする HTML テキストの入力を許可する場合 - 根本的解決 構文解析木を作成して 必要な要素のみを抽出する - 保険的対策 入力された HTML テキストから スクリプトを除く 全てのウェブアプリケーションに共通の対策 文字コードを正しく指定する 検索や情報登録等の機能を有するアプリ 掲示板やブログ等のアプリ 51

エスケープ処理 (HTML 不許可 / 根本的解決 ) HTML における特別な意味を持つ 記号文字 を文字参照に置換 (HTML を許可しない場合 ) 例 : & & < < " " > > ' &#039; 入力値 :<script>alert("test");</script> 置換後 : <script>alert("test");</script> 52

エスケープ処理 (HTML 不許可 / 根本的解決 ) エスケープ処理なし HTMLソース <input type="text" id="test" value=""><script>alert('ipa');</script>" /> ウェブブラウザ上の表示 エスケープ処理あり script タグとして解釈された HTMLソース <input type="text" id="test" value=""><script>alert(&#039;ipa&#039;);</script>" /> ウェブブラウザ上の表示 Input タグの value 属性の値と解釈された 53

そもそもエスケープ処理って? HTML や SQL の構文毎に異なる 特別な意味を持つ 記号文字 ( 特殊記号 ) を " 文字そのもの " として扱うために行う処理 HTML における特殊記号は < " ' & など SQL における特殊記号は ' _ % など 特殊記号の中でも データの区切り を表す記号をエスケープすることが セキュリティ上重要 HTML におけるデータの区切り記号は < " など SQL におけるデータの区切り記号は ' など 54

入力値チェックの位置づけ ( 保険的対策 ) 入力値チェックとは 利用者が入力した値の書式を確認することが主目的 例 : パスワードの長さや使用可能な文字種のチェック電話番号やメールアドレスの書式チェック 脆弱性による被害を低減する役割を果たすことがあるが 入力値チェックだけでは防げない 参考 : 脆弱性体験学習ツール AppGoat クロスサイト スクリプティングの 不完全な対策 55

[ 参考 ] ウェブブラウザ側のクロスサイト スクリプティング対策 ウェブブラウザには クロスサイト スクリプティング攻撃を防ぐ XSS フィルタ 機能が備わっているものがある XSS フィルタの検知ロジックは様々 誤検知や検知しない可能性もある 根本的には ウェブアプリケーション側で対策する必要がある 56

対策のおさらい ウェブページを出力する際には HTML における特別な意味を持つ記号文字をエスケープすることが必要 ウェブサイトの性質によってエスケープ方法が異なる場合がある 詳しくは 安全なウェブサイトの作り方 を参照 安全なウェブサイトの作り方改訂第 5 版 http://www.ipa.go.jp/security/vuln/websecurity.html 57

最後に 脆弱性が生まれる原理や対策方法の理解を深めるために AppGoat を使ってウェブアプリケーションの挙動を確認しました 脆弱性対策を学習するために AppGoat を活用いただけましたら幸いです セミナー講師が脆弱性対策を教える際の補助ツールとして 社内への脆弱性対策の教育に アプリケーション開発者に対する脆弱性対策学習を支援するツールとして 58

アンケート記入 お疲れ様でした AppGoat に対する要望や意見を収集するために IPA のアンケートにご協力お願いします 59