サイバーセキュリティ演習 ― Webセキュリティ基礎&実践―

Slides:



Advertisements
Similar presentations
M2B システム (Moodle/Mahara/BookLooper) の使い方. パスワード:<自分のパスワード> SSO-KID (数字10桁)は学生証の裏に パスワードを忘れた場合は、 から「パスワードを忘れた」を選択.
Advertisements

データベースの基礎知識 ACEESS の基本操作. データベースの基礎知識 データベース  特定のテーマや目的に毎のデータの集合体 データベースソフトウェア  データベースを作成、管理するソフトウェアの総 称 Oracle(Oracle) IBM(DB2) Microsoft(SQL Server)
情報アプリケーション1 2006 年 10 月 12 日 第四回資料 担当 重定 如彦. 目次 データの送信とフォーム クイズ CGI 複数のパーツのデータの分割方法 配列変数.
1 安全性の高いセッション管理方 式 の Servlet への導入 東京工業大学 理学部 千葉研究室所属 99-2270-6 松沼 正浩.
1 PHP プログラムの実行(まと め) 担当 岡村耕二 月曜日 2限 平成 22 年度 情報科学 III (理系コア科目・2年生) 本資料の一部は、堀良彰准教授、天野浩文准教授、菅沼明 准教授等による以前の講義資料をもとにしています。
情報処理 第8回第8回第8回第8回. 目次 (1) スタイルの利用 – スタイルの概要 – スタイルの適用 (1) – 「スタイル」ウィンドウを開く – スタイルの適用 (2) – スタイル適用のセオリー – すべてのスタイルを表示 – スタイルの書式を変える (1) – スタイルの書式を変える (2)
サイバーセキュリティ演習 ― Web セキュリティ基礎 & 実践 ― 9. 偽リクエストによるサービスの不正利用対策.
ICT Foundation 1 Copyright © 2010 、 IT Gatekeeper Project – Ohiwa Lab. All rights reserved. ファイルとディレクトリ.
Web アプリをユーザー毎に カスタマイズ可能にする AOP フレームワーク
サイバーセキュリティ演習 ― Webセキュリティ基礎&実践―
4.ユーザー登録マニュアル              Version 年6月10日 国立情報学研究所.
情報処理実習 第05回 Excelマクロ機能入門 操作マクロ入門.
情報理工学部 情報システム工学科 3年 H 井奈波 和也
サイバーセキュリティ演習 ― Webセキュリティ基礎&実践―
JPAを利用した RESTful Webサービスの開発
WEBから確認できる 駐車場管理システムについて
Knowledge Suite(ナレッジスイート) ファーストステップガイド (管理者向け)
talend活用事例 ・ナビゲータグラフのカスタマイズにおける事例 ・CSVダウンロードでのカスタマイズ事例
法人e名刺 ブログ運用マニュアル 社外秘 目次 □ブログ運用ルール
エンタープライズアプリケーション II 第10回 / 2006年7月23日
システムプログラミング 第5回 情報工学科 篠埜 功 ヒアドキュメント レポート課題 main関数の引数 usageメッセージ
5.WEKOコンテンツ登録 準備 マニュアル Version 2.1
サイバーセキュリティ演習 ― Webセキュリティ基礎&実践―
キャンパスクラウドによる 実験環境の構築 情報ネットワーク特論 講義資料.
Phenixサーバ クラックまとめ.
第4回 個人の動画配信補足のためのWeb構築
Webサイト運営 09fi118 橋倉伶奈 09fi131 本間昂 09fi137 三上早紀.
Vulnerability of Cross-Site Scripting
[オンライン学習に登録] [情報ネットワークを安全に利用しよう]
PHP 実用的なサンプル 浅川 和久 2017/3/18 PHP 実用的なサンプル.
第5章 情報セキュリティ(前半) [近代科学社刊]
Web App Semi 2008 #1 Web App Semi 2008 #1.
WebCluster スライドショーで見る操作ガイド
個体識別番号を登録しないとSNSを使えなくする
WebCluster スライドショーで見る操作ガイド
セッション管理 J2EE I 第9回 /
HTTPプロトコルとJSP (1) データベース論 第3回.
サイバーセキュリティ演習 ― Webセキュリティ基礎&実践―
JQueryでAjax 藤田@ジャストプレイヤー ※参考しまくり文献 jQuery日本語リファレンス.
WebCluster スライドショーで見る操作ガイド
HTTPプロトコル J2EE I 第7回 /
Youtubeへの 動画アップロード方法        D8694 初村 聡.
Day3 Day4 Day3 Day4.
サーバ構成と運用 ここから私林がサーバ構成と運用について話します.
サイバーセキュリティ演習 ― Webセキュリティ基礎&実践―
情報セキュリティ読本 四訂版 - IT時代の危機管理入門 -
データベース設計 第9回 Webインタフェースの作成(1)
基幹理工学研究科 情報理工学専攻 後藤研究室 修士1年 魏 元
サンデーPonセットアップマニュアル <目次> 1.動作環境について 2.セットアップ作業 ①. ソースの設置
第8章 Web技術とセキュリティ   岡本 好未.
管理画面操作マニュアル <サイト管理(1)> 基本設定 第9版 改訂 株式会社アクア 1.
情報工学科 3年生対象 専門科目 システムプログラミング 第5回、第6回 ヒアドキュメント レポート課題 情報工学科 篠埜 功.
第2回 SQL インジェクション その攻撃と対処 NECラーニング 山崎 明子.
九州大学キャンパスクラウド 利用法 情報ネットワーク特論 講義資料.
すぐできるBOOK -基本設定編-.
Webセキュリティ 情報工学専攻 1年 赤木里騎 P226~241.
発注者側サイト操作説明書 作成日:2004年6月 Ver1.0 初版 改 訂:2005年9月 Ver1.2 株式会社 コニファ.
オープンソース開発支援のための リビジョン情報と電子メールの検索システム
7-0.SWORD Client for WEKO インストールマニュアル Version 2.2
サイバーセキュリティ演習 ― Webセキュリティ基礎&実践―
Firebaseを用いた 位置情報共有システム
ソフトウェア保守のための コードクローン情報検索ツール
基礎プログラミング演習 第12回.
北海道情報大学 情報メディア学部 情報メディア学科 新井山ゼミ 金子拓磨
Webアプリケーションと JSPの基本 ソフトウェア特論 第4回.
vc-2. Visual Studio C++ のデバッガー (Visual Studio C++ の実用知識を学ぶシリーズ)
プログラムの一時停止時に 将来の実行情報を提供するデバッガ
地理情報コンテンツ・データベースコンテンツ新規作成
ライオン・アカウント 統一ログイン 2019/03/27.
ライオン・アカウント 統一ログイン 2019/03/27.
Presentation transcript:

サイバーセキュリティ演習 ― Webセキュリティ基礎&実践― 12.未公開ディレクトリの不正横断対策と 認証認可制御の欠落による不正アクセス対策と エラーメッセージからの情報漏えい対策

講義内容 1. 2*. Webサイトの仕組みとWebプログラミング基礎 3.4.5*. 不正スクリプトの実行対策 6.7*. データベースの不正操作対策 8*. システムの不正操作対策とHTTPレスポンスの改竄対策 9*. 偽リクエストによるサービスの不正利用対策 10*. セッションIDの 不正取得対策 11. 総合演習(1) 12*. 未公開ディレクトリの不正横断対策と認証認可制御の欠落 による不正アクセス対策とエラーメッセージからの情報 漏えい対策 13. 総合演習(2) 14. 総合演習(3) 15. 学期末試験 ※*はレポートがある回になります。

本日の内容 ディレクトリトラバーサルの脆弱性攻撃体 験と脆弱性の修正 認証制御や認可制御の欠落の脆弱性攻撃体 験と脆弱性の修正 ファイル情報の漏えい 認証制御や認可制御の欠落の脆弱性攻撃体 験と脆弱性の修正 認可制御不備によるページの参照 エラーメッセージからの脆弱性攻撃体験と 脆弱性の修正 エラーメッセージからの情報漏えい

演習テーマ ディレクトリトラバーサル 「ファイル情報の漏えい」のリンクをクリックしま しょう。

ディレクトリトラバーサルとは 攻撃者がディレクトリ(フォルダ)をトラバーサル (横断)するパラメータを含んだURLのアクセスを実 行することで、通常はアクセスできないファイルや ディレクトリの内容を取得されてしまう脆弱性

ディレクトリの基礎知識 ルートディレクトリ ツリー構造の最上階にあるディレクトリ 一つ上の階層を指定する場合は、「../」を使う。 多過ぎた「../」は無視される。 C: docroot/../../ \apache \secret docroot/../ \docroot \php \mysql \personal

Webアプリのファイル指定方法

ディレクトリトラバーサルの攻撃手口

参考:絶対パスと相対パス 絶対パス 相対パス ルートディレクトリを基準に目的のファイルや ディレクトリを指定するパス C:\apache\docroot\public.html 相対パス 現在の階層を基準に目的のファイルやディレク トリを指定するパス public.html/../../../ = C:

演習内容(疑似的な攻撃) ディレクトリをトラバーサルするURLのアクセスを実行 し、公開されていないwin.iniファイルを表示する 脆弱性がある ウェブサイト オンライン ストア

演習の進め方 Webサイトの挙動を把握する 脆弱性となる箇所を特定する 不正アクセスのファイルパスを考える 不正アクセスのファイルパスを入力する 不正アクセスが可能なことを確認する

1.Webサイトの挙動を把握する ネットショッピングにログ インして、商品管理ページ で商品登録の挙動を確認し ましょう。 ログインID「suzuki」 パスワード「Administr@tor」 攻撃者として、利用できる ことを考える。 ソースコードを確認しま しょう。 商品登録後のURLも確認しま しょう。

2.脆弱性となる箇所を特定する 商品登録の確認ページで、ファイル名が指定された パラメータを確認できましたか? http://localhost/Web/Scenario119/VulSoft/netsho pping.php?page=15&token=448f5a761fc6d0c8cd f3e8a9bfe5e8f6cb83c4051c8a535d29d70f4fd01d9 c09&filename=av.txt filenameのパラメータに「../netshopping.php」を入力 するとどうなりましたか? http://localhost/Web/Scenario119/VulSoft/netsho pping.php?page=15&token=448f5a761fc6d0c8cd f3e8a9bfe5e8f6cb83c4051c8a535d29d70f4fd01d9 c09&filename=../netshopping.php

3.不正アクセスのファイルパスを考える 商品登録のファイルパスを確認しましょう。 ルートディレクトリのディレクトリパスを考えましょう。 C:\AppGoat01\IPATool\Scenarios\Web\Scenario11 9\VulSoft\GoodsFile\av.txt ルートディレクトリのディレクトリパスを考えましょう。 GoodsFile\VulSoft\Scenario119Web\Scenarios\IPAT ool\AppGoat01\c: ../../../../../../../(../は7個以上) win.iniファイルにアクセスするファイルパスを考えま しょう。 C:\Windows\win.ini ../../../../../../../windows/win.ini

4.不正アクセスのファイルパスを入力する 商品登録の確認ページには、次のURL文が作成されます。 http://localhost/Web/Scenario119/VulSoft/netshopp ing.php?page=15&token=448f5a761fc6d0c8cdf3e8 a9bfe5e8f6cb83c4051c8a535d29d70f4fd01d9c09&fi lename=av.txt 不正アクセスのファイルパスを含むURLを考え実行しま しょう。 http://localhost/Web/Scenario119/VulSoft/netshopp ing.php?page=15&token=448f5a761fc6d0c8cdf3e8 a9bfe5e8f6cb83c4051c8a535d29d70f4fd01d9c09&fi lename=../../../../../../../windows/win.ini

5.不正アクセスが可能なことを確認する 「Congratulations!!演習 の目標を達成しまし た。」とwin.iniの中身が 表示されたら、OKです。

ディレクトリトラバーサルの一般的な影響 ウェブサーバ内のファイルが不正に閲覧される ウェブサーバ内のファイルが不正に改ざん、削除される 本来公開していないファイルを閲覧されることで、重要情報 の漏えいにつながる ウェブサーバ内のファイルが不正に改ざん、削除される ウェブコンテンツ改ざんによるデマ、誹謗中傷の書き込みや、 スクリプトファイルや設定ファイル削除によるサーバ機能停 止などの被害を受ける可能性がある

対処方法 原因 外部から入力できるパラメータをそのまま文字列連結 してファイルパスを組み立てるため、相対パスを含む ファイル名の入力により、意図しないディレクトリの ファイルが表示されてしまい、情報が漏えいする 対処方法 ファイル名を指定する際にディレクトリ名が含まれな いように、ファイル名だけを取得するPHPの関数を用 いて実装する 入力パラメータによるファイルパスの組み立てを避ける、 あるいは記号文字の使用を避けるといった実装も対策の 方法の一つ

演習内容(脆弱性の修正) オンラインストアのディレクトリトラバーサルの脆弱性 となるコードを特定し、入力ファイル名をチェックする 実装を行う

パスのファイル名のみを返すPHP関数 basename() 引数のファイルパス/ディレクトリパスを含む文字列を 受け取って、 最後にある名前の部分を返す。 スラッシュ(/) とバックスラッシュ (\) の両方がディレ クトリ区切り文字として使われる <?php $filename = C:\Windows\win.ini $filepath = basename($filename); echo $filepath ; ?> win.ini

修正プログラム オンラインショッピング netshopping.php netshopping119.class.php メッセージ割り当て テンプレート表示 netshopping119.class.php オンラインショッピングの内容(データベースのデータ) の初期設定 攻撃成功判定 管理用メニュー商品一覧の処理 商品登録ファイル確認画面の処理

脆弱性の修正の手順 netshopping119.class.php 処理内容の確認。 ファイルパスの作成箇所の特定。 public function proc_readfile() 処理内容の確認。 ファイルパスの作成箇所の特定。 ファイル名のみを取得する。

1.処理内容の確認 public function proc_readfile() { if (!$this->check_token()) { $this->proc_logout(); return; } if ($this->is_non_admin()) { $this->set_page(parent::PAGE_GOODS); $this->proc_goods_list(); (次ページに続く) トークンチェックがNGの場合はログアウト処理 管理者権限以外ならば、商品リストのみのページを設定

1.処理内容の確認 リクエストパラメタからファイル名を取得 (つづき) $param = $this->get_param(); $filename = (string)$param[parent::FILENAME]; if ((isset($filename)) && ($filename != "")) { $filePath = parent::GOODS_FILE_PATH. $filename; if (is_file($filePath)) { $lineData = file($filePath); (次ページに続く) ファイル名がセットされている場合 商品登録ファイルへのパスを作成 商品登録ファイルが存在する場合、ファイルを読み込んで配列に格納する(配列の各要素は行データ)

1.処理内容の確認 特殊文字をHTMLエンティティに変換して、コンテンツに設定 (つづき) $this->set_content("fileData", array_map('htmlspecialchars', $lineData)); $this->set_content("fileName", $filename); $this->set_content(parent::TOKEN, hash("sha256", session_id())); $this->is_success($filename); (次ページに続く)

1.処理内容の確認 商品登録ファイルが存在しない場合 商品管理画面を表示 (つづき) } else { $this->set_content(parent::WARNING8, true); $this->set_page(parent::PAGE_ADMIN_GOODS); $this->proc_admin_goods(); } $this->set_content(parent::WARNING7, true); ファイル名がセットされていない場合 商品管理画面を表示

2.ファイルパスの作成箇所の特定 (つづき) $param = $this->get_param(); $filename = (string)$param[parent::FILENAME]; if ((isset($filename)) && ($filename != "")) { $filePath = parent::GOODS_FILE_PATH. $filename; if (is_file($filePath)) { $lineData = file($filePath); (次ページに続く)

3.ファイル名のみを取得する (つづき) $param = $this->get_param(); $filename = (string)$param[parent::FILENAME]; if ((isset($filename)) && ($filename != "")) { $filePath = parent::GOODS_FILE_PATH. basename($filename); if (is_file($filePath)) { $lineData = file($filePath); (次ページに続く)

動作確認 管理者でログインして商品管理画面のソースからトー クンを確認しましょう。 URL欄にトークンを含む次のURLを投稿しましょう ログインIDは「suzuki」、パスワードは 「Administr@tor 」 トークンはhiddenパラメータに格納されています。 <input type="hidden" name="session_id" value="t5ahoouj0ojgknjdv6ssguct44" /> URL欄にトークンを含む次のURLを投稿しましょう http://localhost/Web/Scenario119/EditSoft/net shopping.php?page=15&token= t5ahoouj0ojgknjdv6ssguct44 &filename=../../../../../../../windows/win.ini

動作確認 ログアウトになり、win.iniファイルの内容が表示され なければOKです。

ディレクトリトラバーサルの要点 ディレクトリトラバーサルの脆弱性の原因は、外部から 入力できるパラメータをそのまま文字列連結してファイ ルパスを組み立てていることです。 ディレクトリトラバーサルを防ぐためには、ファイル名 を指定する際にディレクトリ名が含まれないようにファ イル名だけを取得するようにしましょう。また、ファイ ル名を直接指定する必要が無い場合は、外部からファイ ル名を指定する実装を避けるようにしましょう。

本日の内容 ディレクトリトラバーサルの脆弱性攻撃体 験と脆弱性の修正 認証制御や認可制御の欠落の脆弱性攻撃体 験と脆弱性の修正 ファイル情報の漏えい 認証制御や認可制御の欠落の脆弱性攻撃体 験と脆弱性の修正 認可制御不備によるページの参照 エラーメッセージからの脆弱性攻撃体験と 脆弱性の修正 エラーメッセージからの情報漏えい

認証と認可 認証は対象の正当性を確認する行為 認可は対象に権限を与える行為 本人認証に使う要素 アクセス権限 正規の利用者のみが知っている情報 パスワード、PINコード 正規の利用者のみが持っているもの ICカード、本人のスマートフォンなど 正規の利用者の身体の情報 指紋・虹彩・静脈など 認可は対象に権限を与える行為 アクセス権限 スマホで使われている、PIN=Personal Identification Numberコード。 虹彩(こうさい)

認証制御の欠落の事例1 第三者でも知り得る情報を用いた認証

認証制御の欠落の事例2 認証が必要なページに対する認証処理の不備

認証制御欠落の対策 ウェブサイトで非公開とされるべき情報を取り扱う場 合や、利用者本人のみデータの変更や編集を許可する ことを想定する場合には、利用者本人のみが知る情報 を用いた認証制御の機能を実装するようにしましょう。

認可制御の欠落の事例 認可が必要なページに対する権限の確認処理の不備 情報 漏えい 情報 漏えい

認証認可制御欠落の一般的な影響 ユーザの非公開情報を閲覧される 権限のあるユーザのみが編集可能な情報を改ざん、 消去される ユーザの非公開情報を閲覧されることで、個人情報や機 密情報などが漏えいする可能性がある。 権限のあるユーザのみが編集可能な情報を改ざん、 消去される ユーザのみが編集可能な設定や個人情報が改ざん、消去 されてしまう可能性がある。

演習テーマ 認証制御や認可制御の欠落 「認可制御不備によるページの参照」のリンクをク リックしましょう。

演習内容(疑似的な攻撃) ネット証券の管理者用のページにアクセスする 脆弱性があるウェブサイト ネット証券

演習の進め方 Webサイトの挙動を把握する 脆弱性となる箇所を特定する 管理者用のページにアクセスする

1.Webサイトの挙動を把握する ネット証券に管理者アカウント でログインしユーザ管理ページ にアクセスできることを確認し ましょう。 IDは「suzuki」、パスーワード は「admin」 ユーザ管理ページのURLも確認 しましょう。 確認できたらログアウトしま しょう。

1.Webサイトの挙動を把握する ネット証券に利用者アカウント でログインしユーザ管理のリン クがないことを確認しましょう。 IDは「yamada」、パスー ワードは「P@ssword」

2.脆弱性となる箇所を特定する ネット証券の各メニューのURLはどのようになってい ますか? http://localhost/Web/Scenario124/VulSoft/bond.p hp?page=3 http://localhost/Web/Scenario124/VulSoft/bond.p hp?page=4 ページ番号がインクリメントされていて規則性がある ことがわかります。 ユーザ管理ページのURLはどのようになっています か? http://localhost/Web/Scenario124/VulSoft/bond.p hp?page=11

3.管理者用のページにアクセスする ネット証券に利用者アカウントでログインしましょう。 IDは「yamada」、パスーワードは「P@ssword」 URL欄に管理者用ページのURLを入力し、アクセスしま しょう。 http://localhost/Web/Scenario124/VulSoft/bond.p hp?page=11

3.管理者用のページにアクセスする 「Congratulations!!演習の目標を達成しました。」 と表示されたら、OKです。

対処方法 原因 管理者用ページのURLを表示しないだけとしているため、 アクセス権限のないユーザにアクセスを許してしまい、 情報漏えいを招く 対処方法 認可制御の欠落の対策としては、管理者用ページを参 照する際に利用者の権限と各ページの表示が許可され た権限と一致するかを確認する。

演習内容(脆弱性の修正) ネット証券の認可制御欠落の脆弱性となるコードを特定 し、管理者用ページを参照する際にユーザの権限を チェックする機能を実装する。

セッションID生成のPHP関数 session_id() mcrypt関数 自動的に疑似乱数を設定する。現在のセッション ID を 取得 または指定のセッションIDの設定も可能。 <?php $sessionid = session_id(); session_start(); ?> mcrypt関数 暗号理論的に安全な疑似乱数を生成することが可能。 セッション管理機構を自作しなければいけない場合は、 mcrypt関数を利用すべき。

修正プログラム ネット証券 bond.php bond124.class.php bond124.class.phpの処理内容をゲット メッセージ割り当て テンプレート表示 bond124.class.php ネット証券の内容(データベースのデータ)の初期設定 認証および入力チェック処理 管理者画面用ログインチェック処理 ユーザ名および権限の設定処理 攻撃成功判定

脆弱性の修正の手順 bond124.class.php 処理内容の確認。 権限チェック箇所の特定。 権限チェック機能の実装。 public function validate_id_logined_admin() 処理内容の確認。 権限チェック箇所の特定。 権限チェック機能の実装。

1.処理内容の確認 管理者画面でログイン状態で無ければ エラーメッセージおよび遷移ページをログイン画面に設定 public function validate_is_logined_admin() { $session = $this->get_session(); if (!(in_array((string)$this->get_page(), $this- >_non_login_pages)) && ($this->is_not_login())) { $this->set_session($this->get_login(), false); $this->set_page(parent::PAGE_LOGIN); $this->set_content(parent::WARNING2, true); return $this; } else { $this->is_success(); return true; } 管理者画面でログイン状態で無ければ エラーメッセージおよび遷移ページをログイン画面に設定 そうでなければ、管理者画面にログイン状態であることを通知

2.権限チェック箇所の特定 public function validate_is_logined_admin() { $session = $this->get_session(); if (!(in_array((string)$this->get_page(), $this->_non_login_pages)) && ($this->is_not_login())) { $this->set_session($this->get_login(), false); $this->set_page(parent::PAGE_LOGIN); $this->set_content(parent::WARNING2, true); return $this; } else { $this->is_success(); return true; }

エラーメッセージおよび遷移ページをログイン画面に設定 3.権限チェック機能の実装 public function validate_is_logined_admin() { $session = $this->get_session(); if (!(in_array((string)$this->get_page(), $this->_non_login_pages)) && ($this->is_not_login())) { $this->set_session($this->get_login(), false); $this->set_page(parent::PAGE_LOGIN); $this->set_content(parent::WARNING2, true); return $this; } elseif ($session[$this->get_login()]["auth"] !== "admin") { $this->set_content(parent::WARNING12, true); } else { $this->is_success(); return true; } ログイン状態がadminで無い場合 エラーメッセージおよび遷移ページをログイン画面に設定

動作確認 ネット証券にログイン後、URLを以下の値に変更してみ ましょう。 ログインIDは「yamada」、パスワードは 「P@ssword 」 http://localhost/Web/Scenario124/EditSoft/bond.php ?page=11 「管理者権限がありません。」と表示され、ログアウト されたらOKです。

認可制御の欠落の要点 認可制御欠落の脆弱性の原因は、認可制御の機能が管理 者用ページのURLを非表示だけとなっていることです。 認可制御の欠落を防ぐためには、管理者用ページを参照 する際に利用者の権限と各ページの表示が許可された権 限と一致するかを確認するようにしましょう。

本日の内容 ディレクトリトラバーサルの脆弱性攻撃体 験と脆弱性の修正 認証制御や認可制御の欠落の脆弱性攻撃体 験と脆弱性の修正 ファイル情報の漏えい 認証制御や認可制御の欠落の脆弱性攻撃体 験と脆弱性の修正 認可制御不備によるページの参照 エラーメッセージからの脆弱性攻撃体験と 脆弱性の修正 エラーメッセージからの情報漏えい

演習テーマ その他 「エラーメッセージからの情報漏えい」のリンクをク リックしましょう。

エラーメッセージ 予期しない状態が発生したときに所定の処理を続行で きない旨をユーザーに通知するメッセージ エラーメッセージの表示の原則 ユーザの注意をひきつける ユーザがエラーメッセージであることに気づく 何が問題なのか説明する 初心者でもわかるように専門用語を使わずに問題を説明す る 発生箇所を示し、対策を示唆する ユーザが問題を把握するのを助けるような情報を提供する (Wikipediaより)

エラーメッセージ出力 実行環境設定によるエラーメッセージ出力 デバッグオプションによるデバッグメッセージ出力 ウェブアプリケーションにエラーが発生した際に、実行 環境設定により自動的にプログラムに関するエラーや警 告がウェブページに出力すること PHPの設定ファイル(php.ini)でエラーメッセージ出力設 定を有効にした場合に出力される。 デバッグオプションによるデバッグメッセージ出力 開発者がバグを取り除く(デバッグ)作業のため、ウェ ブアプリケーションにデバッグオプションを指定するこ とにより、処理内容や変数の値などを出力すること デバッグ情報を出力する機能を実装し、URLパラメータに 「debug=yes」などの値を与えることで出力される。

エラーメッセージからの情報漏えいの原因 エラーメッセージ出力を有効にしたままウェブサイト を運用することで、ファイルやデータベースなど、攻 撃のきっかけとなる情報を悪意のある人に与えてしま う

演習内容(疑似的な攻撃) アンケートページでエラーを発生させて、エラー情報よ り個人情報を含んだファイルのパスを取得し、個人情報 を閲覧する。 脆弱性があるウェブサイト アンケートページ

演習の進め方 Webサイトの挙動を把握する 脆弱性となる箇所を特定する エラーを発生させる 個人情報を閲覧する

1.Webサイトの挙動を把握する アンケートページの入力 フィールドに様々な値を入力 して動作を確認しましょう。

2.脆弱性となる箇所を特定する <sの文字列をそれぞれの入力 フォームに入力して投稿して みましょう。 アンケート投稿後にエラーが 発生する箇所は?

3.エラーを発生させる 名前の入力フォームに<sの文 字列を入れてアンケートを投 稿してみましょう。

3.エラーを発生させる 「Congratulations!!演習の 目標を達成しました。」と表 示されたら、OKです。

4.個人情報を閲覧する エラーメッセージに表示される内容を確認しましょう。 Warning: write_xml(): enquete.xml:62: parser error : error parsing attribute name in C:\AppGoat01\IPATool\Scenarios\Web\Scen ario115\VulSoft\enquete115.class.php on line 214 in  上記のファイルパスを参考に、ブラウザで enquete.xmlにアクセスしましょう。 http://localhost/Web/Scenario115/VulSoft/enq uete.xml

演習テーマ その他 「エラーメッセージからの情報漏えい」の「類似問題 の演習」リンクをクリックしましょう。

演習内容(疑似的な攻撃) デバッグオプションを推測しURLのパラメータに指定す ることで、デバッグメッセージに本来公開されないはず のデータベースのテーブル名を表示させる。 脆弱性があるウェブサイト SNS

演習の進め方 Webサイトの挙動を把握する エラーメッセージを出力させる

1.Webサイトの挙動を把握する SNSにログインしましょう。 IDは「yamada」、パスー ワードは「P@ssword」

2.エラーメッセージを出力させる URLパラメータを操作して、デバッグメッセージ の出力を有効にしてみましょう。 デバッグメッセージを出力するパラメータは 以下の通りです。 debug=yes URL欄に以下のURLを入力しましょう。 http://localhost/Web/Scenario115/VulSoft /sns.php?debug=yes

2.エラーメッセージを出力させる 「Congratulations!!演習の 目標を達成しました。」と表 示されたら、OKです。

エラーメッセージからの情報漏えいにおける一般的な影響 ファイルやデータベースの情報が閲覧される エラーメッセージやデバッグメッセージが出力さ れることで、ファイルやデータベースの情報が漏 えいし、悪意のある人に、ファイルの内容を閲覧 される、SQLインジェクション攻撃を行われるなど の別の攻撃の手がかりを与えてしまう。

エラーメッセージからの情報漏えい対策 エラーメッセージからの情報漏えいの原因は、 エラーメッセージ出力を有効にしたままウェブ サイトを運用することです。 エラーメッセージからの情報漏えいを防ぐため に、ウェブサイトの運用開始時には実行環境設 定によるエラー出力やデバッグオプションによ るデバッグ出力を無効にするようにしましょう。 php.iniのdisplay_errorsをoffに設定する 本番用のソースコードではデバッグ出力機能を削 除/コメントアウトしておく

課題 実際に、 ディレクトリトラバーサルの脆弱 性を突かれて被害を受けた事件を調査し、 1)被害の内容と時期、2)攻撃方法とそ の攻撃で可能だったこと、3)脆弱性が生 まれた原因、4)実施された対策について、 参考にした情報源などを引用しつつ簡潔に まとめてください。 本講義の感想、要望、質問などあれば、書 いてください。 https://moodle.artsci.kyushu-u.ac.jp/course/view.php?id=2661