Comments
Description
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タグの挿入が可能だったのか? 文字列を出力する際、「文字そのもの」として出力することを 想定しているにもかかわらず、その実現に必要な処理 (エスケープ処理)を実装していないため。 例:「< → <」、「> → >」 「" → "」、「 & → &」など 「文字そのもの」として出力することを想定した箇所に 「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を許可しない場合) •例: & → & " → " ' → ' < → < > → > 入力値:<script>alert("test");</script> 置換後: <script>alert("test");</script> 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=" "><script>alert(&# 039;ipa');</script> "/> 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