Transcript 第九回
インターネット概論
第9回12月11日
Webって、どんなシステム?
WWW
World Wide Web の略
語源:世界規模の蜘蛛の巣
世界中の情報を蜘蛛の巣状に関連付けた情報
ネットワークサービス
WWWの起源
1989年、CERN(欧州合同原子核研究機関)
で文書情報のやり取りを目的として開発された
互いに公開可能な情報を持っていたが、その情報
を円滑に共有しあう手段がなかった
Tim Berners-Lee氏が文書情報を簡単に共有で
きるシステムを開発した
関連付け(Hyper Link)
1989年に開発された情報共有機構の特徴
他のコンピュータにある情報に対してLinkを張れる
この情報は
こっちにあるよ
初期型WWW
NeXT社のSTEPでしか動作しなかった
考案者は仕様をインターネットで公開した
HTML言語など
瞬く間にみんなが作った
今日では、どんなOSでもWWWが見れる
Webを実現する
コンピュータネットワーク
WWWの普及には異種OS間通信の実現がある
ネットワーク上のプロトコルだけが決まっている
OSが違っていても通信可能
LinuxとWindowsでも通信できる
WindowsとMacでも通信できる
UnixとWindowsでも通信できる
どんなOSでもプロトコルに沿って通信をすれば通信
できる
通信プロトコル
「こういう風に聞いてきたら、こういう風に答えな
さい」みたいな決まりの集合
例えば、WWWでは、
GET /index.html HTTP/1.0
というと index.html というファイルの中身が見れる
プロトコル
プロトコル:議定書、条件などの原案
共通のコミュニケーションルール
全員が同じルールで通信をするのでお互いに理解が
可能
日本語と日本語だと理解し合えるが、日本語とスワヒ
リ語だと会話が成り立たない
インターネットとWWW
インターネットの通信プロトコルは公開されている
異種OS間で通信ができた
WWWのプロトコルも公開されていた
インターネットの代表的なアプリケーションになった
WWWは爆発的に広がった
WWWはWebサーバの集合体
インターネットは膨大な数のコンピュータが互い
に手を取り合う世界規模のネットワーク
Webサーバは個別にデータを持っている
私たちはWebサーバの一つ一つにアクセスしている
Webを構成する3つの重要な概念
URL: Universal Resource Locator
HTTP: HyperText Transfer Protocol
情報オブジェクト(リソース)の位置を記述するための
シンタックスあるいはその記述
トランスポートプロトコル
HTML: HyperText Markup Language
マークアップ(プレゼンテーション)記述言語
11
Webサーバの動作
WWW = ‘‘クライアント・サーバ’’ アプリケーション
Web ブラウザからのドキュメント取得要求を受け付
ける
個々の要求から必要なファイル(オブジェクト)や動
作を決定する
結果を送る
サーバ
Request
クライアント
Response
12
サーバ・クライアントプロトコル
HTTP
http://www.ics.uci.edu/pub/ietf/http
/draft-ietf-http-v10-spec-01.txt
Webのブラウザは、クライアントとして動く
Webは、他のインターネットアプリケーションも包
含する
FTP, Gopher, WAIS, NNTP and telnet
13
HTTPとHTMLの関係
HTTP
メッセージ
リクエスト
レスポンス
Request Line
Status Line
HTTP Headers
CRLF
Payload
(Entity Body)
HTTP Headers
CRLF
Payload
(Entity Body)
ペイロードがHTML
(ハイパーテキスト
ドキュメントの場合)
14
Webサーバとデータ形式
Web Server Knows:
HTTPのリクエストの受け付けかたと返事の仕方
サービスに必要なドキュメントの探しかた
Does Not Know:
ドキュメント間のハイパーテキストのリンクの意味
インライン イメージ
ドキュメントの作者が正しくMIMEタイプをつけている
か
ほかのWebサーバのこと(Proxyサーバは、唯一ほ
かのサーバも知っている
15
Webドキュメントのいろいろ
ドキュメントタイプ
HTML
Plain ASCIIテキスト
整形済みのドキュメント(PS)
静止画(GIF, JPEG)
音声(AU, AIFF)
動画像(Quicktime, MPEG)
3次元空間(VRML)
Java ‘applet’
...
16
HTTPにとってのWebドキュメント
どんなタイプのドキュメントもバイナリデータとし
て保管、転送される
ブラウザ側で正しく処理するためにタイプ情報を
用いる
Webサーバはドキュメントの内容に関知しない
データを送る前にデータに関する情報を送っている
タイプは、Content-typeを使って送る
サーバがタイプ情報を知る方法
ファイル名の拡張子からのマッピング
HTMLドキュメン: .html
GIFフォーマット: .gif
17
タイプと拡張子
html, htm
PostScript
GIFイメージ
JPEGイメージ
wrl, vrml
VRMLシーン記述
TIFFイメージ
mpeg
Audio (Sun)
tiff
フォーマットなしASCIIテキスト
au
jpeg
txt
gif
HTML ドキュメント
ps
MPEGイメージ
java
JAVAアプレット
18
HTML
Hypertext Markup Language
WWWの基本言語
ブラウザは、必ず処理できなければいけない
Anchorをいれることができる
http://www.w3.org/hypertext/WWW/M
arkUp/html-spec/html-spec.ps.gz
19
外部プログラム
ブラウザの取り扱えない動作や知らないタイプ
の情報を扱う方法
helperプログラム
外部ビューワ
イメージや音の再生など
20
Content-Encoding
型(ドキュメントのタイプ)とは別に、データストリームのエン
コーディングをヘッダ中で指定することが可能
圧縮がかけられているドキュメント
Content-type: application/postscript
Content-encoding: gzip
HTTPヘッダ
gzipで圧縮
されている
PSデータ
HTTPペイロード
21
HTTP: Hypertext Transfer
Protocol
単純なRequest/response
クライアントは、サーバとコネクションを設定する
クライアントがサーバにリクエストを投げる
サーバがリクエストにしたがってリプライを返す
TCP上で実装されていることが多い。
22
リクエスト (クライアントから
サーバへ)
HTTPリクエストの構成要素
Method: 可能な動作のうち一つ
URI: Universal Resource Identifier
プロトコルバージョン
(Optionally) その他の情報(ヘッダ情報)
23
URLと URI
3つの部分から構成されている
転送に用いるプロトコルの識別子
サービス(サーバプロセス)識別子
ドキュメントの名前
URI: URLのサブセット
サービス = サーバ名 + ポート番号 (TCP/IPの場合)
ドキュメント名 = ファイルシステム上のパス名
http://ds.internic.net:80/rfc/rfc1630.txt
メソッド
サーバ名+ポート番号
フルパス名
24
TCPポート80 !
HTTPのデフォルトポート番号: 80
http://www.server.org/sample.html (port 80)
http://www.server.org:8000/sample.html
(port8000)
25
HTTPメソッド = リクエストの種類
GET:
HEAD:
(e.g.: タイムスタンプ)のみを返し、オブジェクトそのものは返さ
ない。
POST:
オブジェクトを返す。つまり情報を引き出す。
オブジェクトに関する情報
サーバへデータを送る。
普通はスクリプトへの入力に用いる。
データの蓄積を目的としてサーバへデータ
を送る。
DELETE:
データを削除する。
Other
PUT:
26
クライアントからサーバに送る
(ヘッダ)情報
User-Agent
If-Modified-Since
キャッシュのファイルのタイムスタンプを送り、変更さ
れていた場合にのみファイルを受け取る
Accept
ブラウザ名
ブラウザが受け取れるMIME-type
Authorization
パスワードやその他の認証子
27
リクエストの例
GET /Staff/Funny/silly.html HTTP/1.0
User-agent: NCSA Mosaic for the X Window System/2.5
Accept: text/plain
Accept: text/html
Accept: application/postscript
Accept: image/gif
(Accept: */* )
28
レスポンス
(サーバからクライアント)
ステータス
要求が成功したか失敗したか
HTTP-version Status-code Reason
メタ情報
返送する情報の情報
コンテント・タイプ
コンテント・エンコーディング
実際のデータ
29
HTTPのステータスコード (抜粋1)
200: Document follows
301: Moved Permanently
指定されたドキュメントは新しいURLに移動した
302: Moved Temporarily
リクエストは受け付けられた。続いてデータの転送が
行われる
指定されたドキュメントは一時的に新しいURLに移動
している
304: Not Modified
指定されたドキュメントは、リクエストのパラメータで
指定された日付より後に変更されていない
30
HTTPのステータスコード (抜粋2)
401: Unauthorized
403: Forbidden
アクセスは禁止されている
404: Not Found
情報へのアクセスは制限されており、正しい認証が
行われる必要がある
指定された情報が見つからないか、アクセス制限が
働いた
500: Server Error
サーバの内部エラーが発生した
31
HTTPトランザクション例
Telnet
リクエスト
is26e0s00[3] telnet shinoda-www.jaist.ac.jp 80
Trying 150.65.190.124 ...
Connected to shinoda-www.jaist.ac.jp.
Escape character is '^]'.
リクエストライン
GET / HTTP/1.0
CRLF
レスポンス HTTP/1.0 200 OK
(HTTPヘッダ+Entity Body = 空)
ステータスライン
Date: Sat, 30 Nov 1996 11:07:39 GMT
Server: Apache/1.1b2
Content-type: text/html
HTTPヘッダ (空)
Content-length: 975
Last-modified: Fri, 08 Nov 1996 07:28:11 GMT
CRLF
<HTML>
<HEAD>
<TITLE>Shinoda Lab. Home Page (In English)</TITLE>
</HEAD>
...
Telnet
</BODY>
</HTML>
Connection closed by foreign host.
32
ダイナミックドキュメント
CGI --- Common Gateway Interface
SSI --- Server Side Include
独立したプログラムが起動
リクエストの入力はプログラムの入力へ
プログラムの出力がクライアントに渡される
html中にコメントの形でプログラム実行を記述
プログラムの出力は、元のドキュメントに埋め込まれる
Other
サーバ拡張API: NSAPI, Apache Modules, ...
Remote Program Execution: Java, JavaScript,
mBED...
33
WWWサーバ: 基本中の基本
GET methodのみを処理する簡単なWebサー
バ
コネクションを受け付ける
リクエストラインを入力し、URI(パス名)を取り出す
適当なステータスラインとヘッダを出力する
URIで指定されたオブジェクトを出力する
掃除をしてから最初に戻る
もっともコンパクトなサーバの大きさはどれくらい
か
34
#!/usr/local/bin/perl
use IO::Socket;
sub endProg () {
$sockNew->close ();
$sock->close ();
$sock = new IO::Socket::INET (LocalAddr =>
"localhost:8007", Listen => 5);
exit;
die "can not create socket : $!\n" unless $sock;
}
$sockNew = $sock->accept ();
sub errMsg () {
$message = <$sockNew>;
$date = `date`;
$message2 = <$sockNew>;
print $sockNew <<ERRMSG
print $message;
HTTP/1.0 404 Not Found
Date: $date
chop $message;
Server: SIMPLE SAMPLE SERVER (Unix)
@msg = split (" ", $message);
Connection: close
Content-Type: text/html
if ($msg[0] eq "GET") {
if ($msg[2] eq "HTTP/1.0") {
open (FILE, $msg[1]) || &errMsg();
ERRMSG
while (<FILE>) {
&endProg();
print $sockNew $_;
}
close (FILE);
}
}
ERROR MESSAGE
}
WWW
Webサーバに問い合わせることにより実現
この情報
見せて
DATA
表示
DATA
Java、ActiveXなど
WWW上で動作なども記述できるようになった
WWWの用途の多様化
しかし、できることが多くなった分、セキュリティ
ホールも増えた
無防備に使っていると問題が発生する事もある
WWWまわりで危険なこと
知らないうちに個人情報を抜き取られる
知らないうちにウィルスに感染する
手元のコンピュータが停止させられる
ウィルスに感染し、自分自身が知らない間に加
害者になっている
WWWでサーバに送信される情報
実は、WWWクライアントからもサーバに情報は
送信されている
クライアントのIPアドレス
WWWブラウザの種類
直前まで見ていたWWWページの場所
その他
それらからわかること
例えば、REMOTE_HOSTが
「paexxxx.tokyont01.so-net.ne.jp」だった場合
WWWページを見にきた人は
SO-NETに入会している
東京から接続している
フレッツISDNユーザである
といった感じのことがわかります
例
http://www.sfc.wide.ad.jp/InternetGairon2001/printenv.cgi
自分のマシンのIPアドレスがば
れて何が嫌か?
例えば、WWW上の掲示板などで悪態をついて、
恨みを買ったとする
自分のIPアドレスがばれると、恨みを持った人達
が徒党を組んで攻撃してくる
不正進入を試みたり
DoSアタックをかけたり
DoS(Denial of Service)
サービスを中断させる
簡単なDoS
パケットを大量に送信する
防ぐことが難しい
例えば、128kpbsの回線に100Mbps分のパケッ
トを送信する
回線は混雑しすぎて何もできなくなる
IPアドレスが分かってしまう問題
対応策
IPアドレスを分からないようにすることは、“基本
的には出来ない!!”
信頼できそうもないようなWebサーバにはアクセ
スしない
他人に迷惑や不快な思いはさせない
システムとしては、分からないような情報を不用
意に入力しない
ソフトウェアのバグ
ウィルスなどはソフトウェアのバグを利用してい
る
全てのソフトウェアにはバグがある
中には悪用できるものもある
本来あり得ない情報を送り込むことでユーザ情報を
取得する
ページを見るだけでシステムハングアップさせる
バグ
ソフトウェアのバグの修正プログラムの多くは配
布されている
しかし、修正プログラムを使わない人も多い
皆様 Windows Update してますか?
IEのバグを悪用した例
IEの新しいウィンドウを数千個(もしくは無限に)
出す
メモリがなくなって、システムが止まってしまう
「このページは見てはいけません」と書いたリン
クを作ってそれをクリックした人がはまる
Java, javascript, activeX
便利な機能を備えている
HTMLだけでは実現できないことができる
しかし、危険も伴う
得体の知れないファイルを勝手にダウンロードされて、
実行される
ウィルスを注入される
防衛策
「インターネットオプション」の「セキュリティ」項目
でセキュリティレベルを「中」以上にする
セキュリティレベル「低」は使わない
やばそうな場所を見るときには「高」にする
その他の危険
WWWを見なくても、ネットワークに接続している
だけでも侵入される
ネットワークにつながるということは、他のマシン
もこちらを見れるということ
インターネットにつなげているだけ
で進入される例
Nimdaなどのワームに攻撃される
IISというWWWサーバをWindows上で起動している
と侵される
IISは、マイクロソフトの特定のソフトウェアをインス
トールすると勝手にインストールされるので注
意!!!
研究室に対する攻撃数
Nimdaだけで、大体、1日8000件ぐらい
Nimda
IIS、メール、共有、WWW閲覧などを通じて感染
マイクロソフトの Well Known セキュリティホー
ルを惜しまず使ったウィルス
自己増殖型ウィルス
万能型ウィルス
Nimda
Nimdaに感染すると、数万個のホストからIISが
起動しているものを探し始める
大量にWWWコネクションを張りにいく
IISを発見するとセキュリティホールをついて侵入を試
みる
成功すると自分自身をコピーする
侵入されたホストは、また、インターネット上のIISを探
し始める
Nimda
Nimdaは、ウィンドウズの「共有」も利用する
感染すると、同じセグメントのマシン全部を攻撃
し始める
攻撃が成功すると自分自身を対象のホストにコ
ピーする
Nimda
Outlookも利用する
Nimdaに感染すると、アドレス帳上のメールアド
レスに対してウィルスを添付して送信する
メールを受け取った先がOutlookでメールを読ん
でいると、感染する
Nimda
NimdaにやられたマシンがWWWサーバだった
場合、WWWページにウィルスが仕込まれる
WWWページを古いIEで見ると見た人が感染す
る
まとめ
こまめにWindows Updateをする
自分が通信できるということは、他人も自分のと
ころまで通信できるということであることを忘れな
い
注意を怠らない
インターネットは匿名性があると言われるが、必ずし
もそうとは言い切れない