総合演習(1)

サイバーセキュリティ演習
― 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に組み込む。
1. 脆弱性箇所を特定する。
入力フォームに<script>の文字を入れてみる。
脆弱性箇所となるURL上のパラメータ名を確認する。
2. 不正スクリプトおよび罠の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>
3. 不正スクリプトや罠のURLを投稿する
脆弱性のあるWebサイトの入力フォームなど(格納型)
第三者のWebサイトである掲示板のURL欄など(反射型)
SQLインジェクション
 悪意のあるSQLを注入(インジェクション)
により、Webアプリケーションが意図しない
SQL文を実行してしまうことで、データベー
スを不正に操作されてしまう脆弱性
SQLインジェクションの攻撃手口
 WHERE句の条件が必ずTRUE(真)になるようにSQL
文を変更する。
1. 脆弱性箇所を特定する。
URL上のパラメータにシングルクォート(’)を入れてみる。
脆弱性箇所となるURL上のパラメータ名を確認する。
2. 不正なリテラルを含むURLを考える。
http://localhost/Web/Scenario108/VulSoft/bank.php?pa
ge=2&id=yamada&password=‘ or ‘a’=‘a’ --
3. 不正なリテラルを含むURLを入力し実行する
脆弱性WebサイトのURL欄など
クロスサイトリクエストフォー
ジェリ(CSRF)
 攻撃者が第三者のWebサイトに悪意のあるリクエストを
埋め込み、脆弱性のあるWebサイトにログイン中の利用
者にそのリクエストを実行させるサイト横断型の脆弱性
CSRFの攻撃手口
 正規のリクエストを識別する仕組みが無い箇所を特定し
て、不正なパラメータをURLに組み込む。
1. 脆弱性箇所を特定する。
トークンが利用されていない箇所を探す。
脆弱性箇所となるURL上のパラメータ名を確認する。
2. 不正なパラメータを含むURLを考える。
http://localhost/Web/Scenario113/VulSoft/sns.php?pag
e=4&public=1
3. 不正なパラメータを含むURLを第三者のWebサイトに投
稿する
掲示板のURL欄など
OSコマンドインジェクション
 悪意のあるOSコマンドを注入(インジェクション)し、
Webアプリケーションが意図しないOSコマンドを実行して
しまうことで、システムを不正に操作されてしまう脆弱性
OSコマンドインジェクション
の攻撃手口
 一度に複数の機能を実行できるシェル機能を使って、
正規のOSコマンドに不正のOSコマンドを追加する
1. 脆弱性箇所を特定する。
入力フォームに&(アンパサンド)を入れてみる。
脆弱性箇所となる入力フォームを確認する。
2. 不正なOSコマンドを考える。
例: & dir /b c:\
3. 不正なコマンドを入力し実行する
脆弱性Webサイトの入力フォームなど
セッションの管理不備
 セッションIDが規則性を有するため、推測されてし
まう脆弱性
セッションID推測の攻撃手口
 ログインを繰り返しセッションIDの規則性を推測する
1. 脆弱性箇所を特定する。
ログインを繰り返す。
ソースコードのセッションIDの変化・規則性を確認する。
例:日+時+月+分+年+秒
演習テーマ
脆弱性検査
 「グループウェア」のリンクをクリックしましょう。
演習の進め方
1. Webサイトの挙動を把握する
2. 脆弱性となる箇所を特定する
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