総合演習(2)

サイバーセキュリティ演習
― Webセキュリティ基礎&実践―
13. 総合演習(2)
講義内容
1. 2*. Webサイトの仕組みとWebプログラミング基礎
3.4.5*. 不正スクリプトの実行対策
6.7*.
データベースの不正操作対策
8 *.
システムの不正操作対策とHTTPレスポンスの改竄対策
9 *.
偽リクエストによるサービスの不正利用対策
10*.
セッションIDの不正取得対策
11.
総合演習(1)
12*.
未公開ディレクトリの不正横断対策と認証認可制御の欠落
による不正アクセス対策とエラーメッセージからの情報
漏えい対策
13.
総合演習(2)
14.
総合演習(3)
15.
学期末試験
※*はレポートがある回になります。
本日の内容
 以下の脆弱性における検査の総合演習
 クロスサイトスクリプティング(XSS)
 認証制御や認可制御の欠落
 SQLインジェクション
 OSコマンドインジェクション
 エラー情報の表示
クロスサイトスクリプティング
(XSS)
 攻撃者が悪意のあるスクリプトを脆弱性のあるWebサイトに
直接(格納型)または第三者のWebサイト(反射型)に埋め
込み、利用者がそのスクリプトを実行してしまう脆弱性
XSSの攻撃手口
 HTMLの文法上特別な意味を持つ特殊文字がそのまま使
えることを利用して、スクリプトタグを入力フォームや
URLに組み込む。
1. 脆弱性箇所を特定する。
入力フォームに<script>の文字を入れてみる。
脆弱性箇所となるURL上のパラメータ名を確認する。
2. 不正スクリプトを考える
<script>alert(‘Hello’)</script>
3. 不正スクリプトを入力する
脆弱性のあるWebサイトの入力フォームなど(格納型)
認証制御や認可制御の欠落
 認可制御が不適切であるため、アクセス権限のないユー
ザ(攻撃者)にアクセスを許してしまい、情報漏えいを
招く脆弱性
情報
漏えい
情報
漏えい
認証制御や認可制御の攻撃手口
 管理者用ページのURLを表示しないだけとしている箇所
を特定して、不正なパラメータをURLに組み込む。
1. 脆弱性箇所を特定する。
脆弱性箇所となるURL上のパラメータ名を確認する。
2. 不正なパラメータを含むURLを考える。
http://localhost/Web/Scenario124/VulSoft/bond.php?p
age=11
3. 不正なパラメータを含むURLを入力し実行する
脆弱性WebサイトのURL欄など
SQLインジェクション
 悪意のあるSQLを注入(インジェクション)
により、Webアプリケーションが意図しない
SQL文を実行してしまうことで、データベー
スを不正に操作されてしまう脆弱性
SQLインジェクションの攻撃手口
 WHERE句の条件が必ずTRUE(真)になるようにSQL
文を変更する。
1. 脆弱性箇所を特定する。
入力フォームにシングルクォート(’)を入れてみる。
脆弱性箇所となるパラメータ名を確認する。
2. 不正な文字リテラルを考える。
SELECT * FROM user WHERE id = ‘yamada' AND password
= ‘OR ‘A’=’A’ --';
3. 不正な文字リテラルを入力フォームに入力し実行する
ログイン画面の入力フォームなど
OSコマンドインジェクション
 悪意のあるOSコマンドを注入(インジェクション)し、
Webアプリケーションが意図しないOSコマンドを実行して
しまうことで、システムを不正に操作されてしまう脆弱性
OSコマンドインジェクション
の攻撃手口
 一度に複数の機能を実行できるシェル機能を使って、
正規のOSコマンドに不正のOSコマンドを追加する
1. 脆弱性箇所を特定する。
入力フォームに&(アンパサンド)を入れてみる。
脆弱性箇所となる入力フォームを確認する。
2. 不正なOSコマンドを考える。
例: & dir /b c:\
3. 不正なコマンドを入力し実行する
脆弱性Webサイトの入力フォームなど
エラー情報の表示
 エラーメッセージ出力を有効にしたままウェブサ
イトを運用することで、ファイルやデータベース
など、攻撃のきっかけとなる情報を悪意のある人
に与えてしまう脆弱性
エラー情報表示の攻撃手口
 故意にエラーを発生させて、エラー情報より個人情報
を含んだファイルのパスを取得し、個人情報を閲覧す
る
1. 脆弱性箇所を特定する。
入力フォームやURL上のパラメータに不適切な値を代入し、
エラーを発生させる。
例1:<sやシングルクォートなどの文字列入力による構文
エラー
例2:数値リテラルの部分に文字列を入力するなどのデー
タ型不一致のエラー
演習テーマ
脆弱性検査
 「ネット証券」のリンクをクリックしましょう。
演習の進め方
1. Webサイトの挙動を把握する
2. 脆弱性となる箇所を特定する
1.Webサイトの挙動を把握する
 ネット証券にログインし、
3つのメニューの挙動を確
認しましょう。
 IDは「yamada」、パ
スーワードは
「P@ssword」
 ネット証券のメニュー。
 口座残高表示
 株式購入
 持ち株確認
2.脆弱性となる箇所を特定する
 ネット証券には5つの脆弱性があります。
 クロスサイトスクリプティング(XSS)
 認証制御や認可制御の欠落
 SQLインジェクション
 OSコマンドインジェクション
 エラー情報の表示
 誰が最も早く脆弱性箇所を特定できるか競いましょう。
補足事項
 「ネット証券に内在する脆弱性を発見しました。」が表示
されたらOKです。
 OSコマンド・インジェクション攻撃の方法には、ネット
ワークの疎通を確認するコマンドであるpingコマンドを使
用してください。
 例えば、自分自身のIPアドレスに対してpingパケットを20回
送信するには、
「/windows/system32/ping 127.0.0.1 –n 20」と指定します。
 「Hint」や「検査方法の例示および解説」は見ずに自力で
脆弱性を特定するように心がけましょう。
 過去のパワーポイントの講義資料は見てもよいです。
口座残高表示
 脆弱性を特定しましょう。
 脆弱性の種類は何でしょ
うか?
 脆弱性の箇所はどこで
しょうか?
 制限時間10分
株式購入
 脆弱性を特定しましょう。
 脆弱性の種類は何でしょ
うか?
 脆弱性の箇所はどこで
しょうか?
 制限時間10分
持ち株確認
 脆弱性を特定しましょう。
 脆弱性の種類は何でしょ
うか?
 脆弱性の箇所はどこで
しょうか?
 制限時間10分
お問い合わせ
 脆弱性を特定しましょう。
 脆弱性の種類は何でしょ
うか?
 脆弱性の箇所はどこで
しょうか?
 制限時間10分
検査方法の例示および解説
 ログインページ
 SQLインジェクション
 口座残高表示
 認証制御や認可制御の欠落
 株式購入
 クロスサイトスクリプティング(XSS)
 持ち株確認
 エラー情報の表示
 お問い合わせ
 OSコマンドインジェクション
ログインページ
 SQLインジェクション
 ログイン画面のログインID、
パスワード入力欄にそれぞ
れ次の攻撃リクエストを入
力してみましょう。
 ログインID「yamada」
 パスワード「P@ssword’
and ‘a’=‘a」
 パスワードに余分な条件が
付いていてもログインを許
可してしまいます。
口座残高表示
 認証制御や認可制御の欠落
 URLに下記の攻撃リクエスト
を指定してアクセスしてみ
ましょう。
 http://localhost/Web/Sc
enario129/VulSoft/bond.
php?page=3&account_i
d=1000003
 画面に閲覧権限のない口座
の情報が表示されます。
株式購入
 クロスサイトスクリプティ
ング(XSS)
 購入株数入力欄に下記の攻
撃リクエストを入力してみ
ましょう。
 <script>alert(document.
cookie); </script>
 画面にクッキー情報がア
ラート表示されます。
持ち株確認
 エラー情報の表示
 URLに下記の攻撃リクエ
ストを指定してアクセス
してみましょう。
 http://localhost/Web
/Scenario129/VulSoft
/bond.php?page=10
&account_id=aaa
 エラー情報の表示により
エラーが発生したファイ
ルの名前が表示されます。
お問い合わせ
 OSコマンドインジェク
ション
 お問い合わせ内容入力欄に
下記の攻撃リクエストを入
力してみましょう。
 &/windows/system32/pi
ng 127.0.0.1 -n 20
 メール送信処理に遅延が発
生します。
対策済み検査演習の挙動確認
 「対策済み検査演習の挙動確認」のリンクにアクセ
スし、脆弱性対策が施されていることを確認しま
しょう。
 SQLインジェクション
 認証制御や認可制御の欠落
 クロスサイトスクリプティング(XSS)
 エラー情報の表示
 OSコマンドインジェクション
ログインページ
 SQLインジェクション
 ログイン画面のログインID、
パスワード入力欄にそれぞ
れ次の攻撃リクエストを入
力してみましょう。
 ログインID「yamada」
 パスワード「P@ssword’
and ‘a’=‘a」
 パスワードに余分な条件が
付いていたらログインでき
ないことを確認しましょう。
口座残高表示
 認証制御や認可制御の欠落
 URLに下記の攻撃リクエスト
を指定してアクセスしてみ
ましょう。
 http://localhost/Web/Sc
enario129/VulSoft/bond.s
afe.php?page=3&accou
nt_id=1000003
 URLが少し違うので注意
 権限のない口座情報が表示
されないことを確認しま
しょう。
株式購入
 クロスサイトスクリプティ
ング(XSS)
 購入株数入力欄に下記の攻
撃リクエストを入力してみ
ましょう。
 <script>alert(document.
cookie); </script>
 エスケープ処理により通常
の文字列として表示され、
画面にクッキー情報がア
ラート表示されないことを
確認しましょう。
持ち株確認
 エラー情報の表示
 URLに下記の攻撃リクエ
ストを指定してアクセス
してみましょう。
 http://localhost/Web/
Scenario129/VulSoft/b
ond.safe.php?page=1
0&account_id=aaa
 URLが少し違うので注意
 エラー情報の表示により
エラーが発生したファイ
ルの名前が表示されない
ことを確認しましょう。
お問い合わせ
 OSコマンドインジェク
ション
 お問い合わせ内容入力欄に
下記の攻撃リクエストを入
力してみましょう。
 &/windows/system32/pi
ng 127.0.0.1 -n 20
 メール送信処理に遅延が発
生しないことを確認しま
しょう。
 時間が余るようであれば、これまでのレ
ポート課題をやりましょう。
https://moodle.artsci.kyushu-u.ac.jp/course/view.php?id=2661