共通科目情報処理(上級)、インターネットの仕組み、2006年01月31日 電子・情報工学系 新城 靖 <yas@is.tsukuba.ac.jp>
このページは、次の URL にあります。
http://www.coins.tsukuba.ac.jp/~yas/ipe/inet-2005/2006-01-31
あるいは、次のページから手繰っていくこともできます。
http://www.coins.tsukuba.ac.jp/~yas/
http://www.cs.tsukuba.ac.jp/~yas/
http://www.ipe.tsukuba.ac.jp/~yshinjo/
対策
インターネットの危険性
インターネットでの通信は、暗号を使わない限り、 流れるデータを見れば簡単に内容を知ることができる。 (1つひとつのデータグラムは、はがきと同じ。)
活動
ワーム(worm)は、他のプログラムに寄生しない。
世の中で「ウイルス」と呼んでいるものの中には、トロイやワームに分類され るものが多い。
限界
悪意のあるプログラムの多くは、セキュリティ的な脆弱性を攻撃する。
現在のコンピュータは、機械語命令もデータも同じメモリに保存する。 データを機械語命令だと解釈して実行することができる。
悪意を持つプログラムが送られて来た場合、本来はデータとして扱わなければ ならないのに、脆弱性があるプログラムは機械語命令として解釈して制御を移 して実行してしまう。
分類
攻撃対象としては、サーバ(WWWサーバ、メール・サーバ)の他に、ルー タであることもある。
弱い権限で動作させると、万一の時の被害を最小にできる。
遠隔のコンピュータ
インターネットの仕組みの基本:どのコンピュータとコンピュータも通信できる。
防火壁では、そのような本来の仕組みに制限を設け、特定のコンピュータとし か通信できないようにしたり、特定のサービスしかつかえないようにする。
攻撃の対象となるコンピュータの数を減らし、集中的に侵入対策を施すことで、 セキュリティを高める。
防火壁構築は、様々な技術の集合:
壁を越える時には、壁の上でWWW Proxy を動かすことがある。
主体が人間の場合、利用者認証を済ませた後、それで得られた利用者の情報を 使ってアクセス制御を行う。
図? アクセス制御における主体とオブジェクト
個人では、自刎のファイルのモード(ls -l の rwxrwxrwx の表示)に気を付け る。
電子メールなど、たとえ自分でしか読むことができないように設定されている ファイル(モードが 600 (rw-------))であっても、サーバの管理者ならば、見 ようと思えば見える状態になっている。バックアップ(器機の故障に備えてコ ピーを作る)のため。
コンピュータの内部では、様々な操作のログ(log、航海日誌)がファイルに保 存されている。
ログを保存する目的
ログのアクセス権に注意する。ログにアクセスできる人は、ログから他人の活 動を知ることができる。
WWWは、もともと大勢の人にメッセージを伝えるための仕組みだが、 後付けでアクセス制御の仕組みを入れた。 あるページは、ある特定の人(同じ研究室・部署の人)だけに しか見えないように設定することもできる。
WWW ページのアクセス制御では、主体としては、次のような使われる。
/usr/local/etc/httpd/conf/httpd.conf
/usr/local/etc/httpd/conf/access.conf
)
.htaccess
order deny,allow deny from all allow from 130.158.0.0/16 133.51.0.0/16 192.50.17.0/24主体
WWW ブラウザが1つのページをアクセスするたびに HTTP のヘッダにユーザ名 とパスワードを含める。
例:パスワード・ファイル
/home1/yshinjo/etc/passwd-doc1
に登録されているユーザだけが、
.htaccess
があるディレクトリ以下にあるファイルをアクセスできる。
.htaccess:
AuthType Basic AuthName "restricted stuff" AuthUserFile /home1/yshinjo/etc/passwd-doc1 require valid-userこのパスワード・ファイルは、 サーバ上で htpasswd というプログラムで作。
一番最初は、% /usr/local/apache/bin/htpasswd -c /home1/yshinjo/etc/passwd-doc1 user1Adding password for user1. New password:user1のパスワードを打ち込む
Re-type new password:user1のパスワードを打ち込む
% /usr/local/apache/bin/htpasswd /home1/yshinjo/etc/passwd-doc1 user2
Adding user user2 New password:user2のパスワードを打ち込む
Re-type new password:user2のパスワードを打ち込む
%
![]()
-c
オプション付で実行する。passwd
コマ
ンドと同様に、打ち込んだパスワードは、画面には表示されず、また、確
認のために2回打つ必要がある。
htpasswd コマンドの結果、次のようなファイルが作られる。
ユーザ名と暗号化されたパスワード(正確にはパスワードのハッシュ値)から 構成される。user1:1fjr1tHIgoG7U user2:qXaeA9Zge7Yqc
パスワードによるアクセス制御の例:
設定ファイル .htaccess
AuthType Basic AuthName "restricted stuff" AuthUserFile /home1/yshinjo/etc/passwd-doc1 require valid-user
次のようなエラーが返る。GET /dir1/file1.html HTTP/1.1![]()
![]()
HTTP/1.1 401 Authorization Required WWW-Authenticate: Basic realm="restricted stuff" Content-Type: text/html <HTML><HEAD> <TITLE>401 Authorization Required</TITLE> </HEAD><BODY> ... </BODY></HTML>
.htaccess
の AuthType
と AuthName
の内容が、HTTP の応答の WWW-Authenticate:
に現れる。
このページをアクセスするには、クライアント(WWWブラウザ)は、ウインドウ を開いてユーザにユーザ名とパスワードを要求する。そして、次のような GET() 要求をもう一度送る。
GET /dir1/file1.html HTTP/1.1Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==
![]()
![]()
Authorization:
には、ユーザが打ち込んだユーザ名とパスワードが
Base64 (64進数)で符合化されて含まれている。
これを受け取ったサーバは、
AuthUserFile
で指定されたファイルを開いて、ユーザ名とパスワー
ドパスワードを照合して、正しければアクセスを許する。
Base64 は、暗号ではないので、簡単に元にもどせる。このアクセス制御の方 法では、パスワードがそのままネットワークを流れてしまう。盗聴に弱い。
% echo QWxhZGRpbjpvcGVuIHNlc2FtZQ== | openssl base64 -dAladdin:open sesame%
%
![]()
協調して動作しているプログラムの間で、ある一連の作業を識別するための数 を意味する。
WWW(World Wide Web)では、1回のデータ転送ごとに通信路が切断される ので、通常はWWWのブラウザ(クライアント)とWWWサーバの間では、途 中経過を保持することができない。
途中経過を保存したい時:
WWWで途中経過を保存するためには、cookie が使われる。
4. EXAMPLES 4.1 Example 1 Most detail of request and response headers has been omitted. Assume the user agent has no stored cookies. 1. User Agent -> Server POST /acme/login HTTP/1.1 [form data] User identifies self via a form. 2. Server -> User Agent HTTP/1.1 200 OK Set-Cookie2: Customer="WILE_E_COYOTE"; Version="1"; Path="/acme" Cookie reflects user's identity. 3. User Agent -> Server POST /acme/pickitem HTTP/1.1 Cookie: $Version="1"; Customer="WILE_E_COYOTE"; $Path="/acme" [form data] User selects an item for "shopping basket". 4. Server -> User Agent HTTP/1.1 200 OK Set-Cookie2: Part_Number="Rocket_Launcher_0001"; Version="1"; Path="/acme" Shopping basket contains an item. 5. User Agent -> Server POST /acme/shipping HTTP/1.1 Cookie: $Version="1"; Customer="WILE_E_COYOTE"; $Path="/acme"; Part_Number="Rocket_Launcher_0001"; $Path="/acme" [form data] User selects shipping method from form. 6. Server -> User Agent HTTP/1.1 200 OK Set-Cookie2: Shipping="FedEx"; Version="1"; Path="/acme" New cookie reflects shipping method. 7. User Agent -> Server POST /acme/process HTTP/1.1 Cookie: $Version="1"; Customer="WILE_E_COYOTE"; $Path="/acme"; Part_Number="Rocket_Launcher_0001"; $Path="/acme"; Shipping="FedEx"; $Path="/acme" [form data] User chooses to process order. 8. Server -> User Agent HTTP/1.1 200 OK Transaction is complete. The user agent makes a series of requests on the origin server, after each of which it receives a new cookie. All the cookies have the same Path attribute and (default) domain. Because the request-URIs all path-match /acme, the Path attribute of each cookie, each request contains all the cookies received so far.
普通のWWWサーバでは、要求を送ってきたコンピュータのIPアドレスを記 録しているので、コンピュータ単位でのアクセス状況を記録することはできる が、個人を特定することはできない。
クッキーを利用することにより、コンピュータではなくどの個人がアクセスし てきたかを記録することができる。
クッキーから電子メールのアドレスや氏名まで調べることはできない。 しかし、インターネットをサーフしている間にどこかでそれを打ち込んだが最 後、クッキーと電子メール・アドレスや氏名との対応が記録されてしまう危険 性がある。
参考
RFC2965 HTTP State Management Mechanism
Netscape社によるWWWにおけるクッキー実現の案
http://wp.netscape.com/newsref/std/cookie_spec.html
ブラウザを制御する仕組みが、悪用される。 JavaScrit は、信頼しているサイトから送られたときだけ有効にする方法がある。
WWWブラウザでは、信頼しているサイトから送られてくるJavaScriptのプログ ラムだけを実行するようにし、攻撃サイトから送られてくるJavaScriptのプロ グラムを実行しないようにしたい。
脆弱性があるサイトでは、攻撃サイトから送られてきた JavaScript のプログ ラムを中継してしまう。
図? JavaScripの送信元サイトの区別
CGI のプログラムをつくる時には、クロスサイトスクリプティング攻撃に気を つける。これは、クライアントから送られてる文字列の中に <SCRIPT>のようなタグが含まれていた場合、それをそのままクラ イアントに送り返すと問題がある。
さらに、%hh
にも気をつける必要がある。
送られてくるパラメタの中に漢字、
(&自身)、
URLで使えない文字が含まれていた場合、
「%hh
( hh は2桁の16進数)」という形になっている。
---------------------------------------------------------------------- 画面表示 代りに送りだす文字列 & & < < > > " " ----------------------------------------------------------------------
もとは、fishing の意味だが、 f を ph と綴る。これは、 crackerの伝統。
http://www.antiphishing.org/word_phish.html
クロスサイト・スクプリィング攻撃に対して脆弱性があるWWWでは、 フィッシング詐欺に対して弱い。
ヤフーからの通知を装った日本語フィッシングで何が起きていたか
他のプログラムを実行する時には、execve() のようなシステムコールを使い、
かつ、限られたプログラムしか実行しないようにすると安全性が高くなる。ク
ライアントから送られてきた文字列をsystem() や popen() に渡してプログラ
ムを実行する時には、必ず検査する。特にシェルが解釈する特殊な文字
「| & ; && || `
」などが含
まれていた場合、意図しないプログラムが実行されることがある。
char *user ; ... snprintf(cmd,BUFSIZE,"finger %s",user ); f = poepn(cmd,"r");もし、user に
";"
や "|"
が含まれていたら、、、
f = poepn("finger yas; /bin/sh","r");
perl の open() には、危険性がある。 C 言語のライブラリ関数 popen() と同じ動きをすることがある。
open(FILE, "|cmd")Perl の危険な関数、式、
産業技術総合研究所 グリッド研究センター セキュアプログラミングチーム
http://securit.gtrc.aist.go.jp/
)
IPA セキュア・プログラミング講座
http://www.ipa.go.jp/security/awareness/vendor/programming/
C:\Documents and Settings\name\Application Data\Mozilla\Profiles\profname\random\cookies.txt
\
は、「\」、または、「¥」と表示される。