サイバーセキュリティ演習 ― Webセキュリティ基礎&実践― 11. 総合演習(1)
講義内容 1. 2*. Webサイトの仕組みとWebプログラミング基礎 3.4.5*. 不正スクリプトの実行対策 6.7*. データベースの不正操作対策 8*. システムの不正操作対策とHTTPレスポンスの改竄対策 9*. 偽リクエストによるサービスの不正利用対策 10*. セッションIDの 不正取得対策 11. 総合演習(1) 12*. 公開ディレクトリの不正横断対策と認証認可制御の欠落 による不正アクセス対策とエラーメッセージからの情報 漏えい対策 13. 総合演習(2) 14. 総合演習(3) 15. 学期末試験 ※*はレポートがある回になります。
本日の内容 以下の脆弱性における検査の総合演習 クロスサイトスクリプティング(XSS) SQLインジェクション クロスサイトリクエストフォージェリ (CSRF) OSコマンドインジェクション セッションの管理不備
クロスサイトスクリプティング(XSS) 攻撃者が悪意のあるスクリプトを脆弱性のあるWebサイトに 直接(格納型)または第三者のWebサイト(反射型)に埋め 込み、利用者がそのスクリプトを実行してしまう脆弱性
XSSの攻撃手口 HTMLの文法上特別な意味を持つ特殊文字がそのまま使 えることを利用して、スクリプトタグを入力フォームや URLに組み込む。 脆弱性箇所を特定する。 入力フォームに<script>の文字を入れてみる。 脆弱性箇所となるURL上のパラメータ名を確認する。 不正スクリプトおよび罠のURLを考える http://localhost/Web/Scenario102/VulSoft/enquete.ph p?page=2&sex=0&old=1&company=&xss=1&trouble=1 &content=&name= <script>alert(‘Hello’)</script> 不正スクリプトや罠のURLを投稿する 脆弱性のあるWebサイトの入力フォームなど(格納型) 第三者のWebサイトである掲示板のURL欄など(反射型)
SQLインジェクション 悪意のあるSQLを注入(インジェクション) により、Webアプリケーションが意図しない SQL文を実行してしまうことで、データベー スを不正に操作されてしまう脆弱性
SQLインジェクションの攻撃手口 WHERE句の条件が必ずTRUE(真)になるようにSQL 文を変更する。 脆弱性箇所を特定する。 URL上のパラメータにシングルクォート(’)を入れてみる。 脆弱性箇所となるURL上のパラメータ名を確認する。 不正なリテラルを含むURLを考える。 http://localhost/Web/Scenario108/VulSoft/bank.php?pa ge=2&id=yamada&password=‘ or ‘a’=‘a’ -- 不正なリテラルを含むURLを入力し実行する 脆弱性WebサイトのURL欄など
クロスサイトリクエストフォージェリ(CSRF) 攻撃者が第三者のWebサイトに悪意のあるリクエストを 埋め込み、脆弱性のあるWebサイトにログイン中の利用 者にそのリクエストを実行させるサイト横断型の脆弱性
CSRFの攻撃手口 正規のリクエストを識別する仕組みが無い箇所を特定し て、不正なパラメータをURLに組み込む。 脆弱性箇所を特定する。 トークンが利用されていない箇所を探す。 脆弱性箇所となるURL上のパラメータ名を確認する。 不正なパラメータを含むURLを考える。 http://localhost/Web/Scenario113/VulSoft/sns.php?pag e=4&public=1 不正なパラメータを含むURLを第三者のWebサイトに投 稿する 掲示板のURL欄など
OSコマンドインジェクション 悪意のあるOSコマンドを注入(インジェクション)し、 Webアプリケーションが意図しないOSコマンドを実行して しまうことで、システムを不正に操作されてしまう脆弱性
OSコマンドインジェクションの攻撃手口 一度に複数の機能を実行できるシェル機能を使って、 正規のOSコマンドに不正のOSコマンドを追加する 脆弱性箇所を特定する。 入力フォームに&(アンパサンド)を入れてみる。 脆弱性箇所となる入力フォームを確認する。 不正なOSコマンドを考える。 例: & dir /b c:\ 不正なコマンドを入力し実行する 脆弱性Webサイトの入力フォームなど
セッションの管理不備 セッションIDが規則性を有するため、推測されてし まう脆弱性
セッションID推測の攻撃手口 ログインを繰り返しセッションIDの規則性を推測する 脆弱性箇所を特定する。 ログインを繰り返す。 例:日+時+月+分+年+秒
演習テーマ 脆弱性検査 「グループウェア」のリンクをクリックしましょう。
演習の進め方 Webサイトの挙動を把握する 脆弱性となる箇所を特定する
1.Webサイトの挙動を把握する グループウェアにログイン し、4つのメニューの挙動 を確認しましょう。 グループウェアのメ ニュー。 IDは「yamada」、パ スーワードは 「P@ssword」 グループウェアのメ ニュー。 会議室予約 スケジュール管理 メールフォーム 休暇申請
2.脆弱性となる箇所を特定する グループウェアには5つの脆弱性があります。 誰が最も早く脆弱性箇所を特定できるか競いましょ う。 クロスサイトスクリプティング(XSS) SQLインジェクション クロスサイトリクエストフォージェリ(CSRF) OSコマンドインジェクション セッションの管理不備 誰が最も早く脆弱性箇所を特定できるか競いましょ う。 なお、セッションの管理不備に関しては四者一択の演 習問題になります。
補足事項 「グループウェアに内在する脆弱性を発見しました。」が 表示されたらOKです。 OSコマンド・インジェクション攻撃の方法には、ネット ワークの疎通を確認するコマンドであるpingコマンドを使 用してください。 例えば、自分自身のIPアドレスに対してpingパケットを20回 送信するには、 「/windows/system32/ping 127.0.0.1 –n 20」と指定しま す。 「Hint」や「検査方法の例示および解説」は見ずに自力で 脆弱性を特定するように心がけましょう。 過去のパワーポイントの講義資料は見てもよいです。
まずは、セッション管理不備の演習問題を解きましょう
会議室予約 脆弱性を特定しましょ う。 脆弱性の種類は何でしょ うか? 脆弱性の箇所はどこで しょうか? 制限時間10分
スケジュール管理 脆弱性を特定しましょう。 脆弱性の種類は何でしょ うか? 脆弱性の箇所はどこで しょうか? 制限時間10分
メールフォーム 脆弱性を特定しましょう。 脆弱性の種類は何でしょ うか? 脆弱性の箇所はどこで しょうか? 制限時間10分
休暇申請 脆弱性を特定しましょ う。 脆弱性の種類は何でしょ うか? 脆弱性の箇所はどこで しょうか? 制限時間10分
検査方法の例示および解説 ログインページ 会議室予約 スケジュール管理 メールフォーム 休暇申請 セッションの管理不備 クロスサイトスクリプティング(XSS) スケジュール管理 SQLインジェクション メールフォーム OSコマンドインジェクション 休暇申請 クロスサイトリクエストフォージェリ(CSRF)
ログインページ セッション管理の不備 ログイン後に遷移するグ ループウェアメニュー画面 のソースを表示してみま しょう。 <input type="hidden" name="session_id" value="セッションID" /> ログインの繰り返しにより、 セッションIDの規則性が分 かります。 ユーザID + ログインした 年月日時分秒を反転した値
会議室予約 XSS(格納型) タイトルの入力欄に下記の スクリプトを入力して会議 室予約を登録してみましょ う。 <script>alert("test");</scri pt> 会議室予約画面へアクセス するたびにアラートが表示 されるようになります。
スケジュール管理 SQLインジェクション URL欄に下記の不正リテラ ルを含むURLを指定してア クセスしてみましょう。 http://localhost/Web/Sc enario131/VulSoft/group ware.php?page=4&dat e=2015/12/11' or 'a'='a 他のユーザや日付のスケ ジュールが表示されま す。
メールフォーム OSコマンドインジェク ション メール作成時の件名入力欄 に下記の不正OSコマンド を追記してメールを送信し てみましょう。 &/windows/system32/pi ng 127.0.0.1 -n 20 メール送信処理に遅延 が発生します。
休暇申請 CSRF 掲示板のURL欄に下記の 不正リクエストを含む URLを投稿し、リンクか らアクセスをしてみま しょう。 http://localhost/Web /Scenario131/VulSoft /groupware.php?pa ge=8&holiday_id=1& delete 意図しない休暇申請情 報の削除が行われます。
対策済み検査演習の挙動確認 「対策済み検査演習の挙動確認」のリンクにアクセ スし、脆弱性対策が施されていることを確認しま しょう。 セッションの管理不備 クロスサイトスクリプティング(XSS) SQLインジェクション OSコマンドインジェクション クロスサイトリクエストフォージェリ(CSRF)
ログインページ セッション管理の不備 ログイン後に遷移するグ ループウェアメニュー画面 のソースを表示してみま しょう。 <input type="hidden" name="session_id" value="セッションID" /> 疑似乱数になっていること を確認しましょう。
会議室予約 XSS(格納型) タイトルの入力欄に下記の スクリプトを入力して会議 室予約を登録してみましょ う。 <script>alert("test");</scri pt> エスケープ処理により通常 の文字列として表示される ことを確認しましょう。
スケジュール管理 SQLインジェクション URL欄に下記の不正リテラ ルを含むURLを指定してア クセスしてみましょう。 http://localhost/Web/Sc enario131/VulSoft/group ware.safe.php?page=4 &date=2015/12/11' or 'a'='a URLが少し違うので注意 他のユーザや日付のスケ ジュールが表示されない ことを確認しましょう。
メールフォーム OSコマンドインジェク ション メール作成時の件名入力欄 に下記の不正OSコマンド を追記してメールを送信し てみましょう。 &/windows/system32/pi ng 127.0.0.1 -n 20 メール送信処理に遅延 が発生しないことを確 認しましょう。
休暇申請 CSRF 掲示板のURL欄に下記の不 正リクエストを含むURLを 投稿し、リンクからアク セスをしてみましょう。 http://localhost/Web/S cenario131/VulSoft/gr oupware.safe.php?pa ge=8&holiday_id=1&d elete URLが少し違うので注意 休暇申請情報の削除が行 われないことを確認しま しょう。
時間が余るようであれば、これまでのレ ポート課題をやりましょう。 https://moodle.artsci.kyushu-u.ac.jp/course/view.php?id=2661