サイバーセキュリティ基礎論 ― it社会を生き抜くために web 00.pdf ·...
TRANSCRIPT
サイバーセキュリティ演習
岡村耕二
演習システム利用上の注意
•演習で行ったことを、演習システム以外のパソコンで絶対に行わないこと。•好奇心でしたことが、社会的に重い制裁を受ける可能性があります。
最近のサイバー攻撃
• Web サイトを見ただけで感染する。
• パスワードは盗まれていないのに• 重要な情報が盗まれる。
• 自分のポータルが他人からアクセスされる。
Web の仕組み (1)
パソコン
サーバHTTP RequestURL
HTTP ResponseHTML
<!doctype html public "-//W3C//DTD HTML 3.2 Final//EN"><HTML><HEAD><meta http-equiv="Content-Type" content="text/html; charset=iso-2022-jp"><meta http-equiv="Content-Language" content="jp"><link rev=made href="mailto:[email protected]"><TITLE>Home Page of Koji OKAMURA</TITLE></HEAD><BODY><H3 Align="RIGHT"><A HREF="index.html">English</A>/Japanese</H3><HR><BR>岡村 耕二 (おかむら こうじ) <BR><BR>九州大学 教授 <BR> <BR>【略歴 】<UL><LI>1988年 3月 九州大学 工学部 情報工学科 卒業<LI>1990年 3月 九州大学大学院 工学研究科 情報工学専攻 修了<LI>1990年 4月 三菱電機 株式会社 情報電子研究所 入所<LI>1993年 4月 奈良先端科学技術大学院大学 情報科学研究科 助手<LI>1996年 4月 神戸大学 総合情報処理センター 助手<LI>1998年 3月 九州大学大学院 システム情報科学研究科 情報理学専攻 助手<LI>1998年 4月 九州大学 情報処理教育センター 助教授<LI>1998年 10月 九州大学大学院 システム情報科学研究科 (併任)<LI>1999年 4月 九州大学 工学部 兼任<LI>2000年 4月 九州大学 情報基盤センター 助教授
用意されているHTMLファイルをURLで指定する。
HTTP (HyperText Transfer Protocol)HTML (HyperText Markup Language)URL (Uniform Resource Locator)
Webの仕組み(2)
パソコン
サーバHTTP RequestURL(PHPを指定)
HTTP ResponseHTML <html>
<head>
...
</head>
<body>
<?php
print("Hello, World!¥n");
?>
</body>
</html>
"Hello, World!"と印字して,改行しなさい.
<html>
<head>
...
</head>
<body>
Hello, World!
</body>
</html>
PHP (PHP: Hypertext Preprocessor)
Webの仕組み(3)
パソコン
Webサーバ
HTTP RequestURL(PHPを指定)
HTTP ResponseHTML
データベース
パスワードは盗まれていないのに重要な情報が盗まれる。• データベースシステムの脆弱性を狙った攻撃
• SQL インジェクション攻撃
SQLとは
• SQLは、リレーショナルデータベース管理システム (RDBMS) において、データの操作や定義を行うためのデータベース言語(問い合わせ言語)
Webサーバ データベース
SQL
リレーショナルデータベース管理システム(RDBMS)
• データを表に似た構造で管理するデータベース。複数のデータ群が関係と呼ばれる構造で相互連結可能
userテーブル
ログインID(id:文字列)
ユーザ名(name:文字列)
パスワード(password:文字列)
yamada Yamada Taro P@ssword
suzuki Suzuki Jiro 3f858c
accountテーブル
ログインID(id:文字列)
口座番号(account_id:数値)
残高(balance:数値)
yamada 1000001 100,000
yamada 1000002 200,000
suzuki 1000003 300,000
関係を持った複数のテーブルに分けて管理
SQLの基礎
• データを検索する場合、
SELECT カラム1、カラム2 FROM テーブル名[WHERE <条件>];
• SELECT * FROM user WHERE id=‘yamada’;• SELECT *:すべてのカラムを検索する
• FROM user:userテーブルから
• WHERE id=‘yamada’:id=yamadaに一致するレコードの
SQLの基礎
• シングルクォート(’)• SQLでは、データの区切り文字として使う。
• シングルクォートで囲むことで文字列リテラルを定義する
• 数値リテラルの定義の場合は不要
• コメント(--)• SQLでは、2連続のハイフン(--)以降は、コメン
トとして扱う
SQLインジェクションとは
• 悪意のあるSQLを注入(インジェクション)し、Webアプリケーションが意図しないSQL文を実行してしまうことで、データベースを不正に操作されてしまう脆弱性
SQLインジェクションの原理
• ユーザからの入力値をそのまま文字列リテラルに連結してSQL文を組み立てることにより、意図しないSQL文を実行され、データベースを不正に操作されてしまう
SQLを使った認証判定
• ログインページの認証判定でSQLはよく使われる。• WHERE句の条件にあてはまるならば認証OK
• WHERE句の条件にあてはまらないならば認証NG○:SELECT * FROM user WHERE id=‘yamada’ AND password=‘P@ssword’
×:SELECT * FROM user WHERE id=‘suzuki’ AND password=‘12345678’
userテーブル
ログインID(id:文字列)
ユーザ名(name:文字列)
パスワード(password:文字列)
yamada Yamada Taro P@ssword
suzuki Suzuki Jiro 3f858c
一般的なSQL文の組み立て処理のやり方
• 指定したidの個人情報をuserテーブルから取得するSQL文をユーザからの入力値(yamada)を利用して文字列連結により組み立てる
文字列リテラルを用いたSQLインジェクションの攻撃手口
• シングルクォート(’)とコメント(- -)を使って、WHERE句の条件が必ずTRUE(真)になるように内容を変更する
SQLインジェクション体験
• パスワードを使わずに不正ログインをする。
10.0.0.100rootp@ssw0rd3
Webサーバ データベース
10.0.0.1
パスワードは盗まれていないのに自分のポータルがアクセスされる。
• クッキーが盗まれる
• クッキーとは
• クロスサイト・スクリプティングの脆弱性
総務省:国民のための情報セキュリティサイト
クロスサイト・スクリプティングの脆弱性の原理
• ウェブアプリケーションがユーザから受け取った入力データを、そのままの形(実行可能な形)でウェブページの出力に利用してしまう
<html>
<head>
...
</head>
<body>
<?php
?>
</body>
</html>
入力したものが表示される。
<html>
<head>
...
</head>
<body>
</body>
</html>
Printf(“%s”,$_POST[“name”]);
Script が書かれるとそれが実行される。
反射型クロスサイト・スクリプティングの攻撃手口
• HTMLの文法上特別な意味を持つ特殊文字がそのまま使えることを利用して、表示内容を書き換えるスクリプトをURLに組み込む。• JavaScriptの利用は、スクリプトタグを使う。
• <script type=“text/javascript”>~</script>:javascript利用の宣言
特殊文字
&
<
>
“
‘
クロスサイトスクリプティング体験• 名前を入力させるサイトで、警告メッセージや
クッキーを不正に表示させる。
10.0.0.100rootp@ssw0rd3
Webサーバ
10.0.0.1