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

Slides:



Advertisements
Similar presentations
サイバーセキュリティ演習 ― Web セキュリティ基礎 & 実践 ― 3. 不正スクリプトの実行対策.
Advertisements

1 安全性の高いセッション管理方 式 の Servlet への導入 東京工業大学 理学部 千葉研究室所属 99-2270-6 松沼 正浩.
1 PHP プログラムの実行(まと め) 担当 岡村耕二 月曜日 2限 平成 22 年度 情報科学 III (理系コア科目・2年生) 本資料の一部は、堀良彰准教授、天野浩文准教授、菅沼明 准教授等による以前の講義資料をもとにしています。
サイバーセキュリティ演習 ― Web セキュリティ基礎 & 実践 ― 9. 偽リクエストによるサービスの不正利用対策.
実習1:コマンドシェルの使い方.
情報基礎A 情報科学研究科 徳山 豪.
UNIX利用法.
安全なログオン手順 2004/08/26 Port139 伊原 秀明.
UNIX利用法 情報ネットワーク特論資料.
The Perl Conference Japan ’98 朝日奈アンテナによる コンテンツ情報の取得と利用
知能機械工学科 担当:長谷川晶一 TA:新・後藤・ナンバ
サイバーセキュリティ演習 ― Webセキュリティ基礎&実践―
サイバーセキュリティ演習 ― Webセキュリティ基礎&実践―
Webアプリケーションの 通信メカニズム WEBアプリ研究プロジェクト 第2回.
Unix生活 Vol.1
Android と iPhone (仮題) 情報社会とコンピュータ 第13回
WEBから確認できる 駐車場管理システムについて
Struts1.xの脆弱性(CVE ) に対するSDEの対処:推奨タイプ (サンプルソースコードの公開)
受動的攻撃について Eiji James Yoshida penetration technique research site
IaaS 仮想マシン(VM)をネットワーク経由で提供 負荷に応じてVM数や性能を変更できる ハードウェアの導入・管理・維持コストの削減
システムプログラミング 第5回 情報工学科 篠埜 功 ヒアドキュメント レポート課題 main関数の引数 usageメッセージ
5.WEKOコンテンツ登録 準備 マニュアル Version 2.1
ネット時代のセキュリティ2(脅威の例) 2SK 情報機器工学.
情報セキュリティ読本 三訂版 - IT時代の危機管理入門 -
サイバーセキュリティ演習 ― Webセキュリティ基礎&実践―
キャンパスクラウドによる 実験環境の構築 情報ネットワーク特論 講義資料.
第4回 個人の動画配信補足のためのWeb構築
Webサイト運営 09fi118 橋倉伶奈 09fi131 本間昂 09fi137 三上早紀.
OpenID 勉強会 (OpenID Authentication1.1)
Vulnerability of Cross-Site Scripting
PHP 実用的なサンプル 浅川 和久 2017/3/18 PHP 実用的なサンプル.
OSが乗っ取られた場合にも機能するファイルアクセス制御システム
インターネット社会の脅威 (インターネット社会のセキュリティ) 開始 再生時間:5分20秒.
タグライブラリとJSP J2EE I 第10回 /
セッション管理 J2EE I 第9回 /
HTTPプロトコルとJSP (1) データベース論 第3回.
サイバーセキュリティ演習 ― Webセキュリティ基礎&実践―
平成22年度に実施を予定するインターネットを 用いた研修システムによる研修 ライブ配信受講手順書
タグライブラリとJSP J2EE II 第2回 2004年10月7日 (木).
HTTPプロトコル J2EE I 第7回 /
ID一元管理を実現する - OpenIDの紹介 (OpenID Authentication1.1)
EBSCOhost 詳細検索 チュートリアル support.ebsco.com.
(B2) 親: minami, kazuki 多様な認証機器に対応する 認証システム (B2) 親: minami, kazuki.
サイバーセキュリティ演習 ― Webセキュリティ基礎&実践―
情報セキュリティ読本 四訂版 - IT時代の危機管理入門 -
データベース設計 第9回 Webインタフェースの作成(1)
サンデーPonセットアップマニュアル <目次> 1.動作環境について 2.セットアップ作業 ①. ソースの設置
第8章 Web技術とセキュリティ   岡本 好未.
ネットワークプログラミング論 平成28年11月21日 森田 彦.
情報工学科 3年生対象 専門科目 システムプログラミング 第5回、第6回 ヒアドキュメント レポート課題 情報工学科 篠埜 功.
第2回 SQL インジェクション その攻撃と対処 NECラーニング 山崎 明子.
九州大学キャンパスクラウド 利用法 情報ネットワーク特論 講義資料.
セキュリティ(6) 05A2013 大川内 斉.
オープンソフトウェア利用促進事業 第3回OSSモデルカリキュラム導入実証
キャンパスクラウドによる 実験環境の構築 情報ネットワーク特論 講義資料.
制作技術ー3 双方向通信 : CGIシステムと環境変数
Webセキュリティ 情報工学専攻 1年 赤木里騎 P226~241.
VIRUS.
発注者側サイト操作説明書 作成日:2004年6月 Ver1.0 初版 改 訂:2005年9月 Ver1.2 株式会社 コニファ.
オープンソース開発支援のための リビジョン情報と電子メールの検索システム
日本郵便 「Web-EDI」利用ガイド (JP EDIシステム)
ネットワークプログラミング (3回目) 05A1302 円田 優輝.
UNIX演習 情報ネットワーク特論.
コンピュータ プレゼンテーション.
サイバーセキュリティ演習 ― Webセキュリティ基礎&実践―
情報工学科 3年生対象 専門科目 システムプログラミング 第4回 シェルスクリプト 情報工学科 篠埜 功.
北海道情報大学 情報メディア学部 情報メディア学科 新井山ゼミ 金子拓磨
UNIX演習 情報ネットワーク特論資料.
Webアプリケーションと JSPの基本 ソフトウェア特論 第4回.
HTTPプロトコルの詳細 M1 峯 肇史.
Presentation transcript:

サイバーセキュリティ演習 ― Webセキュリティ基礎&実践― 8.システムの不正操作対策とHTTPレスポンスの改 竄対策

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

本日の内容 OSコマンドインジェクション/HTTPヘッダ インジェクションの脆弱性攻撃体験と脆弱 性の修正 システム情報の漏えい Cookie値の変更

OSコマンドとは OSに命令を発行してシステムを操作するコマンド アプリケーション/ソフトウェア シェル(殻)という名称は、OSの機能を実装している中心核部分(カーネル)の外層として動作することからきている OS シェル カーネル システムコール プロセス管理 メモリ管理 デバイス管理 デバイスドライバ Hardware CPU/メモリ HDD NIC

OSコマンドの例 ファイルやディレクトリの一覧を表示 ファイル名の変更 Windows: dirコマンド Linux: lsコマンド dir /b Linux: lsコマンド ls -l ファイル名の変更 Windows: renameコマンド rename [対象のファイル名] [変更後のファイル名] Linux: mvコマンド mv [対象のファイル名] [変更後のファイル名] /b オプション:ファイル名だけ表示

演習テーマ OSコマンドインジェクション 「システムの情報漏えい」のリンクをクリックしま しょう。

OSコマンドインジェクションの原理 ユーザからの入力値をそのままシェルに渡すことにより、意 図しないOSコマンドを実行され、システムを不正に操作さ れてしまう

一般的なOSコマンドの組み立て 対象のファイル名とユーザからの入力値(example.txt)を 利用して文字列連結によりrenameコマンドを組み立てる

入力値に「example.txt & dir」という文字列を与えると シェルによって複数のOSコマンドが実行されます。 その結果、ファイルの一覧が表示されます。

OSコマンドインジェクションの攻撃手口 一度に複数の機能を実行できるシェル機能を使って、 本来のOSコマンドに不正のOSコマンドを追加し、 ファイル名の変更などシステムを不正に操作する 本来のOSコマンド rename test.tx exampe.txt 不正なOSコマンド & dir /b c:\ c:\ドライブのファイル名 とフォルダ名の一覧が表示 される。

参考:シェルの特殊文字の例 コマンド1 & コマンド2 コマンド1 | コマンド2 コマンド < ファイル コマンド1を実行後にコマンド2を実行する コマンド1 | コマンド2 コマンド1の出力をコマンド2の入力として実行する。 コマンド < ファイル コマンドの入力をファイルから読み取る。 コマンド > ファイル コマンドの出力をファイルへ書き出す。

演習内容(疑似的な攻撃) ネットショッピングに対して、不正なOSコマンドを入 力し、Cドライブ直下のファイル名とフォルダ名の一覧 を取得する 脆弱性があるウェブサイト ネットショッピング

演習の進め方 Webサイトの挙動を把握する 脆弱性となる箇所を特定する 不正なOSコマンドを考える 不正に情報を取得する

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

2.脆弱性となる箇所を特定する 変更後のファイル名にexample.txt &を入力してみる 正常(エラー)

3.不正なOSコマンドを考える ファイル名変更処理では、次のOSコマンドが使用 されています。 rename test.txt [変更後のファイル名] DOSコマンドのアンパサンド(&) を使用してCド ライブ直下のファイル名とフォルダ名の一覧を取得 するOSコマンドを考えましょう。 exampe.txt & dir /b c:\

4.不正に情報を取得する 考えたOSコマンドを使って不正に情報が取得でき るか確認しましょう。 まずは、suzukiのIDでログインしましょう。 ログインIDは「suzuki」 パスワードは「Administr@tor」 ログイン後、商品管理にある変更後のファイル名の 入力欄に考えたOSコマンドを入力しましょう。 exampe.txt & dir /b c:\

4.不正に情報を取得する 「Congratulations!!演習の目標を達成しまし た。」と表示されたら、OKです。

OSコマンドインジェクションの一般的な影響 サーバ内のファイルが不正に操作される ファイルの閲覧による個人情報、機密情報などの漏えいなどの 被害が発生する可能性がある 不正にシステムを操作される 意図しないOSのシャットダウンやユーザの追加、変更が行われ たりする可能性がある。 不正なプログラムがダウンロード、実行される ウィルスやボットの感染、システムへ次回も不正に侵入が行え るようバックドアが設置させられたりしてしまう可能性がある。 他システムへの攻撃の踏み台にされる システムが乗っ取られることで他システムへの攻撃の踏み台に され、他システムのサービスを不能にしてしまうなど加害者と なってしまう可能性がある。

対処方法 原因 外部から入力できるパラメータをそのまま文字列連結 してOSコマンドを実行しているため、一度に複数のOS コマンドを実行するシェル機能を応用することにより 本来のOSコマンドが変更されてしまい、そのまま処理 が実行される 対処方法 外部からのパラメータ入力による外部コマンドの実行 方法を避けて、代替が可能なPHPの関数で実装する。 escapeshellarg関数を用いて外部からのパラメータをエ スケープ処理する方法もやり方の一つ。

PHPの外部コマンド実行関数 system()関数 外部プログラムを実行し、出力を表示する system(OSコマンド) その他にもexec()関数やshell_exec()関数などもある system(OSコマンド) renameコマンドの場合、 <?php $filename = [変更後のファイル名]; rename("test.txt", $filename); ?>

代替え可能なPHP関数の例 OSコマンド PHP関数 ファイルの削除 ファイルの削除 ファイルのコピー ファイルのコピー ファイル名の変更 Windows: delコマンド、 Linux: rmコマンド ファイルのコピー Windows: copyコマンド、 Linux: cpコマンド ファイル名の変更 Windows: renameコマン ド、Linux: mvコマンド PHP関数 ファイルの削除 unlink()関数 ファイルのコピー copy()関数 ファイル名の変更 rename()関数

演習内容(脆弱性の修正) ネットショッピングのOSコマンドインジェクションの 脆弱性となるコードを特定し、シェルを使用しないプロ グラムに修正を行う

修正プログラム ネットショッピング netshopping.php netshopping117.class.php メッセージ割り当て テンプレート表示 netshopping117.class.php ネットショッピングのデータの初期設定 演習課題の攻撃成功判定 管理用メニューの商品一覧の設定 ファイル名変更画面処理

脆弱性の修正の手順 netshopping117.class.php ファイル名変更画面処理の内容の確認。 system関数を使用する箇所の特定。 rename関数を使用するプログラムの修正。

セッション管理に用いられるトークン(認証用乱数)の検証 1.ファイル名変更画面処理の内容の確認 public function proc_rename_file() { if (!$this->check_token()) { $this->proc_logout(); return; } if ($this->is_non_admin()) { $this->set_page(parent::PAGE_GOODS); $this->proc_goods_list(); $param = $this->get_param(); $oldname = (string)$param[parent::OLDNAME]; $newname = (string)$param[parent::NEWNAME]; (次ページに続く) セッション管理に用いられるトークン(認証用乱数)の検証 商品ページのセット ファイル名変更要求時のパラメータ取得

1.ファイル名変更画面処理の内容の確認 変更前後のファイル名の入力が無い場合の警告処理 (つづき) if (!isset($oldname) || ($oldname == "")) { $this->set_content(parent::WARNING9, true); } else if (!isset($newname) || ($newname == "")) { $this->set_content(parent::WARNING10, true); } else if ($oldname == $newname) { $this->set_content(parent::WARNING11, true); } else { $oldname = parent::GOODS_FILE_PATH. basename($oldname); (次ページに続く) 変更前後のファイル名が同じ場合の警告処理 変更前のファイル名を指定

変更前のファイルが存在しない場合の警告処理 1.ファイル名変更画面処理の内容の確認 (つづき) if (is_file($oldname)) { $result = system("rename " . $oldname . " " . $newname); if ($this->is_rename()) { $this->set_content(parent::WARNING12, true); } else { $this->set_content(parent::WARNING13, true); } $this->is_success($result); $this->set_content(parent::WARNING8, true); (次ページに続く) ファイル名を変更するコマンド実行 ファイル名変更の成否時の処理 演習課題攻撃成功判定 変更前のファイルが存在しない場合の警告処理

1.ファイル名変更画面処理の内容の確認 (つづき) $this->set_page(parent::PAGE_ADMIN_GOODS); $this->proc_admin_goods(); } 商品管理画面の表示

2. system関数を使用する箇所の特定 $oldname = parent::GOODS_FILE_PATH. basename($oldname); if (is_file($oldname)) { $result = system("rename " . $oldname . " " . $newname); if ($this->is_rename()) { $this->set_content(parent::WARNING12, true); } else { $this->set_content(parent::WARNING13, true); } $this->is_success($result); (省略)

3. rename関数を使用するプログラムの修正 $oldname = parent::GOODS_FILE_PATH. basename($oldname); if (is_file($oldname)) { $newname = parent::GOODS_FILE_PATH.$newname; $result = rename($oldname, $newname); if ($this->is_rename()) { $this->set_content(parent::WARNING12, true); } else { $this->set_content(parent::WARNING13, true); } $this->is_success($result); (省略)

動作確認 ログインIDに「suzuki」、パスワードに 「Administr@tor」を入力してログインしてみましょう。 商品管理ページの変更後ファイル名入力欄に以下のOS コマンドを入力してみましょう。 exampe.txt & dir /b c:\ ファイル名が変更されなければOKです。

OSコマンドインジェクションの要点 OSコマンドインジェクションの脆弱性の原因は、ユー ザから受け取った入力値をそのまま文字連結してOSコ マンドを組み立てていることです。 意図しないOSコマンドの実行を防ぐために、外部から のパラメータ入力による外部コマンドの実行方法を避け て、PHPが提供する代替可能な関数を利用するようにし ましょう。なお、外部からのパラメータを用いたOSコ マンドの実行が必要な場合は、入力パラメータをエス ケープ処理するようにしましょう。

本日の内容 OSコマンドインジェクション/HTTPヘッダ インジェクションの脆弱性攻撃体験と脆弱 性の修正 システム情報の漏えい Cookie値の変更

Webの基本的な動作 HTTP通信によるクライアントサーバモデル WebブラウザはHTTPリクエストでWebサーバに要求する。 HTTP(HyperText Transfer Protocol)は、HTML文書などのコン テンツの送受信に用いる通信手順 Webサーバソフトウェア データベース Webブラウザ 検索 HTTPリクエスト HTTPレスポンス クライアント Webサーバ

HTTPリクエストの例 GET http://(省略) HTTP/1.1 Host: www.kyushu-u.ac.jp Connection: keep-alive Accept: text/html,application/xhtml+xml,application/xml;q=0 .9,image/webp,*/*;q=0.8 User-Agent: Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2508.0 Safari/537.36 Referer: http://www.kyushu-u.ac.jp/ Accept-Encoding: gzip, deflate, sdch Accept-Language: ja,en-US;q=0.8,en;q=0.6 Cookie: (省略) リクエストメッセージ リクエストヘッダ

HTTPレスポンスの例 HTTP/1.1 200 OK Date: Thu, 24 Sep 2015 01:05:20 GMT Server: Apache/2 Cache-Control: no-cache Expires: 0 Connection: close Transfer-Encoding: chunked Content-Type: text/html; charset=shift_jis Location: http://survey.html Set-Cookie: ssid=123456789;path=/var/www/html/ <html>(省略)</html> レスポンスメッセージ レスポンスヘッダ レスポンスボディ

HTTPヘッダの構文 ヘッダ名:ヘッダ値 ヘッダ値の部分にHTTPの改行コード(\r\n)が挿入され ると、改行後の文字列は次のヘッダとして解釈される。 連続する改行コードが挿入されると、改行後の文字列は ボディ部として解釈される。 Date: Thu, 24 Sep 2015 01:05:20 GMT Server: Apache/2 (省略) Location: http://survey.html Set-Cookie: ssid=123456789;path=/var/www/html/ <html>(省略)</html> レスポンスヘッダ レスポンスボディ

演習テーマ HTTPヘッダインジェクション 「Cookie値の変更」のリンクをクリックしましょう。

HTTPヘッダインジェクションの原理 ユーザからの入力値をそのまま利用してHTTP通信を実行する ことにより、HTTPヘッダの内容が変更された意図しないHTTP 通信が実行されてしまう

HTTPヘッダインジェクションの攻撃手口 改行コードと不正のHTTPヘッダを注入し、Cookie の値を書き換えることにより、ユーザになりすまし 不正行為を行う

Cookieに保存されたのセッションIDを送信 参考:セッションIDとCookie セッションIDはWebサーバが発行するセッションの識別。 セッション変数はセッションIDと関連パラメータ(ログイ ンIDや日付など)を紐づけした情報を格納する領域 Cookieはブラウザが保持するセッションID。 ログイン情報送信 ID・パスワード認証 セッション変数格納 セッションIDを発行 該当するユーザ専用ページを送付 クライアント Webサーバ セッション変数参照 ログイン済みのアクセス Cookieに保存されたのセッションIDを送信 セッションID検証 該当するページを送付 Webサーバ

演習内容(疑似的な攻撃) ネットショッピングに対して、HTTPヘッダ内容を変更 する不正なURLを入力し、Cookieの値を変更する 脆弱性があるウェブサイト ネットショッピング

演習の進め方 Webサイトの挙動を把握する Cookieを書き換える不正のHTTPヘッダを考える HTTPヘッダ内容を変更するURLを作成し実行する

1.Webサイトの挙動を把握する ネットショッピングのロ グイン後の挙動を確認す る。 攻撃者として、利用でき ることを考える。 ログインID 「yamada」、パス ワード「P@ssword」 ログイン後のHTMLの ソースを確認しましょう。 ログイン失敗時のURLも 確認しましょう。

1.Webサイトの挙動を把握する ログイン後のHTMLソースからCookie値を確認でき ましたか? <form id="form1" name="form3" action="/Web/Scenario121/VulSoft/shop.php" method="get"> <input type="hidden" name="secret" id="secret" value="r1jgsg7r70bt1pptua92c7gr34" /> ログイン失敗時のURLをどのようになっていますか? http://localhost/Web/Scenario121/VulSoft/shop.php?p age=2&login_id=yamada&password=Adminstr%40tor& url=welcome.php&submit=%E3%83%AD%E3%82%B0%E3 %82%A4%E3%83%B3

1.Webサイトの挙動を把握する ログイン失敗時のURLをもとに、 password=P@sswordとしたURLを入力するとどうな りますか? http://localhost/Web/Scenario121/VulSoft/shop.p hp?page=2&login_id=yamada&password=P@ssw ord&url=welcome.php&submit=%E3%83%AD%E3% 82%B0%E3%82%A4%E3%83%B3 ログイン失敗時はGET送信によってパラメータ情報が わかります。 入力フォームにIDとパスワードを入れなくても、この URLをURL欄に入力すればログインできます。

2.Cookieを書き換える不正のHTTPヘッダを考える Set-Cookieの文法 Set-Cookie: [Cookie名=値]; [expires=期限]; [path=Cookieが使用されるURLのパス名]; [domain=Webサーバ名]; secure Cookie名=値の属性は必ず指定する必要がある URLに含めるSet-Cookieを考える Cookie名を「PHPSESSID」、Cookie値を「attackID」、 PATHの値を「/Web/Scenario121」としましょう。 Set-Cookie:+PHPSESSID=attackID;+PATH=/Web/Scenario121 URL上で+は、スペースを意味する。

3.HTTPヘッダ内容を変更するURLを作成し実行する ログイン失敗時のURL参考に、悪用に使えそうな URLは以下の通りです。 http://localhost/Web/Scenario121/VulSoft/shop. php?page=2&login_id=yamada&password=P@ss word&url=welcome.php URLにSet-Cookieヘッダを追記しましょう。 http://localhost/Web/Scenario121/VulSoft/shop. php?page=2&login_id=yamada&password=P@ss word&url=welcome.php%0DSet- Cookie:+PHPSESSID=attackID;+PATH=/Web/Scen ario121

3.HTTPヘッダ内容を変更するURLを作成し実行する URL欄に作成したURLを入力し、ログインできるか 確認しましょう。 ログイン後のソースコードを見てCookieの値が変 更してるか確認しましょう。

3.HTTPヘッダ内容を変更するURLを作成し実行する 「Congratulations!!演習の目標を達成しまし た。」と表示されたら、OKです。

HTTPヘッダインジェクションの一般的な影響 任意のCookieの発行 Set-Cookieヘッダを注入されると、任意のCookieが追加され、 利用者のブラウザに保存される可能性があり、成りすまし攻撃 の被害が起こりえる 表示内容の改ざん 任意のレスポンスボディを注入されると、利用者のブラウザ上 で偽の情報を表示させられたり、任意のスクリプトを埋め込ま れたりする可能性がある。 キャッシュサーバのキャッシュ汚染 任意のレスポンスボディをキャッシュさせることが可能になり、 ウェブページの差し替え(キャッシュ汚染)が発生し、ウェブ ページ改ざんの脅威が生じる。

対処方法 原因 外部から入力できるパラメータをそのまま文字列連結し てHTTPヘッダを作成しているため、改行コードと不正 な処理のコードの注入によりHTTPヘッダが変更されて しまい、そのままHTTPの処理が実行される 対処方法 HTTPレスポンスヘッダに外部からのパラメータを使用 しない実装とする。 HTTPレスポンスヘッダに外部からのパラメータを使用 する必要がある場合、取得したパラメータに対して改行 コードを(正規表現で)チェックする機能を実装する。 改行コードをエスケープ処理する。

演習内容(脆弱性の修正) ネットショッピングのHTTPヘッダインジェクションの 脆弱性となるコードを特定し、外部からの入力値に対す る改行コードのチェック機能の実装を行う

修正プログラム ネットショッピング shop.php shop121.class.php welcome.php メッセージ割り当て テンプレート表示 shop121.class.php ネットショッピングのデータの初期設定 ログイン処理 welcome.php ログイン成功後の遷移画面

脆弱性の修正の手順 shop121.class.php ログイン処理の内容の確認。 改行コードのチェックが必要な箇所の特定。 改行コードチェック機能の実装。

LocationヘッダにそのままURL含めてを送信 1.ログイン処理の内容の確認 public function login() { $param = $this->get_param(); $result = parent::login(); $url = $_GET["url"]; if ($result) { header ("Location: ". $url); exit; } return $result; 遷移先のURLをGETパラメータで取得 LocationヘッダにそのままURL含めてを送信

2.改行コードのチェックが必要な箇所の特定 public function login() { $param = $this->get_param(); $result = parent::login(); $url = $_GET["url"]; if ($result) { header ("Location: ". $url); exit; } return $result;

3.改行コードチェック機能の実装 preg_match関数で 正規表現によるマッチングを行う 正規表現によるマッチングの条件に合わなければ、 public function login() { $param = $this->get_param(); $result = parent::login(); $url = $_GET["url"]; if ($result) { if (preg_match("/[\\r\\n]/", $url) === 0) { header ("Location: ". $url); exit; } else { parent::proc_logout_headerinjection(); } return $result; preg_match関数で 正規表現によるマッチングを行う 正規表現によるマッチングの条件に合わなければ、 インジェクション攻撃を受けた場合のログアウト処理 Scenario_Shop/base_shop.class.phpのproc_logout_headerinjection()を実行

正規表現 preg_match関数 文字列の集合を一つの文字列で表現する方法の一つ。 文字列のパターンマッチングで良く用いられる。 / /:スラッシュ内に含まれる文字列にマッチする。 [ ]:カッコ内の含まれる一文字にマッチする。 \:\以降の文字をエスケープする。 preg_match関数 preg_match(検索パターンの文字列, 対象文字列) If(preg_match("/[\\r\\n]/", $url) === 0) URLに\r\nが含まれており、同じ型である場合、 \r\n:HTTPの改行コード ===:等しく、および同じ型である場合に TRUE

動作確認 URL欄に次のURLを入力してみましょう ログインができず、攻撃サイトへ遷移しなければOKで す。 http://localhost/Web/Scenario121/EditSoft/shop.php ?page=2&login_id=yamada&password=P@ssword&u rl=welcome.php%0DSet- Cookie:+PHPSESSID=attackID;+PATH=/Web/Scenario1 21 ログインができず、攻撃サイトへ遷移しなければOKで す。

HTTPヘッダインジェクションの要点 HTTPヘッダインジェクションの脆弱性の原因は、ユー ザから受け取った入力値をそのまま使ってHTTPヘッダ を作成していることです。 HTTPヘッダインジェクションの攻撃を防ぐためには、 HTTPレスポンスヘッダに外部からのパラメータを使用 しない実装とするようにしましょう。また、HTTPレス ポンスヘッダに外部からのパラメータを使用する必要が ある場合は、取得したパラメータに対して改行コードを チェックする機能を実装する、あるいは改行コードをエ スケープ処理するようにしましょう。

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