[-]=======================================================================[-] Wizard Bible vol.6 (2003,12,16) [-]=======================================================================[-] x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x ---- 第0章:目次 --- x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x ○第1章:仕様の持つ脆弱性 J-Klein 著 ○第2章:HTTP入門 〜連続投稿の仕組み〜 Kenji Aiko 著 ○第3章:RAWソケット入門 unya 著 ○第4章:FTTHの導入とセキュリティ D 著 ○第5章:Newbieのための数学入門 [第一回] IPUSIRON 著 ○第6章:目指せPCテクニカルライター[第五回] MaD 著 ○第7章:お知らせ ○第8章:著者プロフィール x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x --- 第1章: 仕様の持つ脆弱性 --- 著者:J-Klein x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x ■0x01.) 仕様が持つ脆弱性とは  現在ハッキングやクラッキングと呼ばれるものはソフトウェアのバグを突いた ものがもっとも多いように思います。その中でもバッファオーバーフローを利用 してシェルコードを実行するのが流行といえるでしょう。このような攻撃はハッ キリ言って難しいです。よく掲示板などで「ハッキングってどうやるのですか?」 という書き込みを見ますが、ソフトウェアのバグを突きたいのであれば、「勉強 しろ」としか言えません。  それに対して『仕様が持つ脆弱性』は利用するのが簡単な場合が多いです。正 常な利用方法(または、正常に見える利用方法)でも使う人とアイディアによっ ては攻撃に繋がるからです。なかなか『仕様の持つ脆弱性』を利用して管理者権 限を奪取するような派手なことはできません。それどころかここに書いてあるよ うな事は使い古されたものであり、既に改善されています。  この先何かの仕様を作る機会があった時、何に注意すべきかを知る意味でもこ こにあるようなことは重要だと考えています。注目すべきことは多くのネットワ ークの仕様が出来た当時と現在とでは状況が変わってきていることです。  ここでは『仕様』と『ネットワークプロトコル』をほぼ同義として解釈してい ますが、本質としては『仕様』全般で同じことが言えるでしょう。 ■0x02.) SMTP の脆弱性  この Wizard Bible vol.5 で Kenji Aiko 氏による SMTP でのメールアドレス の偽装方法が紹介されていましたが、実際 SMTP はほとんど誰でも偽装メールを 送れるのが仕様です。スパムメールが後を断たないことからもわかるでしょう。 特に携帯電話ではメールのヘッダを全て見ることが出来ないので、より一層偽装 性が増します。この場合、ヘッダを見れない携帯電話の仕様も脆弱と言えるかも しれません。 SMTP はもう一つ弱点を持っています。これは当時は弱点とは思われていなかっ たのですが、現代では『弱点』と呼んでも差し支えの無いものでしょう。それは SMTP の VRFY と EXPN というコマンドです。  まず、VRFY はユーザ名を確認するためのコマンドです。引数にユーザ名をつけ て実行すると存在すればそのユーザのメールアドレスを教えてくれます。これだ けなら大きなメリットは得られません。しかし、問題はそのユーザ名を含むユー ザが複数いたときのサーバの応答です。仕様上では『複数のユーザが該当する旨 を伝えるか、該当するユーザのリストを返すかしてもよい』と規定されているの です。RFC2821 にある例を引用してみます。これは smith というユーザを VRFY で調べたときのサーバの正常な応答です。 ----- 553 User ambiguous ----- or ----- 553- Ambiguous; Possibilities are 553-Joe Smith 553-Harry Smith 553 Melvin Smith ----- or ----- 553-Ambiguous; Possibilities 553- 553- 553 -----  3通りの応答がありますが、1つ目は『複数のユーザが該当する』ことを伝える だけに留まっていますが、2つ目と3つ目は該当する(smithを含む)ユーザのリス トを返しています。これを見れば VRFY を許可しているサーバを見つけたらユー ザ名のリストを作成することは難しくないことが分かると思います。  これと同様の危険性を持つのが EXPN コマンドです。これは引数がメーリング リストならばその登録メンバーのリストを返します。VRFY も EXPN もスパムメー ル送信業者には役に立つコマンドであることはよく分かるでしょう。では実際ユ ーザ名のリストがあると何が出来るのでしょうか。例えば、サーバが Telnet や ssh などのリモートログインを許可している場合、ユーザのリストがあれば Joe アカウント(ユーザ名とパスワードが同じアカウント)を探すことが容易になり ます。  幸い、現在ではセキュリティ的な理由によりどちらも許可していないサーバが ほとんどです。VRFY を使用できるサーバもたまに見かけますが、嘘の応答(常時 「存在する」という応答)をするものがほとんどです。 ■0x03.) FTP バウンスアタック  FTP を利用した攻撃の一つに FTP バウンスアタック(FTP Bounce Attack)と 呼ばれるものがあります。これを理解するためには FTP のデータ転送形式である アクティブモードの理解が必要になります。詳細はほかへ譲りますが、簡単にア クティブモードによるデータ転送の方法を説明しましょう。  まず、クライアントはサーバに対して PORT コマンドを利用して「○○○○と いう IP アドレスの●番ポートにデータを転送しろ」という要求を送ります。そ してクライアントは指定したポートで待機してサーバがそのポートにデータ(フ ァイルの中身等)を送信します。(宣伝になってしまいますが、私のサイトであ る http://members.jcom.home.ne.jp/j-klein/security/network-proto-ftp.html にてデータ転送の仕組みを解説しているので参照してください)  この仕組み自体が大きな弱点を生んでいます。これを利用すると SMTP による 偽装メールをほぼ完全な匿名メールにすることも可能になるのです。その仕組み を紹介しましょう。まずログインできる FTP サーバを用意します。そして、FTP サーバに接続し、SMTP サーバのあるホスト(HOST B)の IP アドレスの 25 番ポ ートにデータを送るように要求します。そこに SMTP のメール送信コマンドを含 んだファイルを転送させます。(以下の図とデータ参照) ○攻撃の様子 HOST A: 攻撃者のホスト HOST B: SMTP サーバの動いているホスト FTP-Server: バウンスアタックに利用するFTPサーバ +-----------+ +------------+ | HOST A | - HOST B の 25 にデータを送れ -> | FTP-Server | | | <--------------------- 了解 ----- | | +-----------+ +------------+ +-----------+ +------------+ | HOST B(25)| <---------------------- 接続 ---- | FTP-Server | | | <----------------- データ転送 --- | | +-----------+ +------------+ ○転送するデータ ----- HELO MAIL FROM: RCPT TO: DATA Subject: FTP BOUNCE MAIL Good bye. . -----  この結果 SMTP サーバは FTP サーバからの接続だと勘違いするので本当の送信 者が隠されたことになります。この手法はいろいろと応用が考えられます。例え ば nmap ではこれを利用したポートスキャンも実現しています。  この攻撃もまた現在では封じられているケースが多いです。封じる方法もさま ざまですが、いくつか見たところではポート指定時に 1-1024 番ポートを指定す るとエラーにするものが多かったです。1025 以降なら接続できるので工夫すれ ば何か出来るかもしれませんね。 ■0x04.) r 系コマンドの危険性  r 系コマンドとは rlogin・rsh・rcp 等のコマンドのことです。これらのコマ ンドはホームディレクトリにある .rhosts ファイルを見てリモートユーザの信頼 性を検証します。つまり、.rhosts に記述されたホストのユーザのことは信頼し、 認証を行わずにログインすることを許します。例えば以下のような記述の場合 ----- samplehost1.com user1 samplehost2.com user2 samplehost3.com + + + -----  samplehost1.com からのアクセスで user1 というユーザであれば認証を行わな いことになります。特に注意したいのが最後の 2 行です。この "+" は何でも信 じることを意味するので samplehost3.com からのアクセスは 100 %信じ、挙げ 句の果てには最後の行で『すべてのホストから全てのユーザを信じる』と宣言し ています。  r 系コマンドの第一の危険性は IP Spoofing によって IP アドレスを詐称する ことによる信頼の奪取です。第2の危険性は侵入済みの攻撃者が最後の行のよう に "+ +" という記述を追加してしまうことです。  改善策は r 系コマンドの使用するポートを塞ぐことでしょう。 ■0x05.) プロトコルはもともと信頼で出来ている  ここまで見てきた弱点がなぜ存在する(存在した)のか。もともとこれらの仕 様はセキュリティに重点をおいたものではないことが原因です。例えば SMTP で ユーザが存在するかどうかを調べる VRFY コマンドなどはメールを送らずに相手 が存在するかを確認することが出来ますから大変便利です。しかし、メールを送 らなくても存在をチェック出来るということは効率良くスパムメールを送ること を助けます。  いままで仕様というものが『効率』や『汎用性』などに重点をおいていたのに 対し、これから仕様を制定する時は『安全性』に重点を置く必要があるかもしれ ません。冗談のような表現ですが、昔の仕様の半分は信頼で出来ているのです。 これからの仕様はユーザを疑うことから始まるべきかもしれません。認証の無い サービスは攻撃者も利用し、暗号化されない通信は盗聴されることが前提だと考 えるべきでしょう。 ■0x06.) 最後に  今回は有名な脆弱な仕様を紹介しましたが、機会があれば他の脆弱な仕様を探 してみたいですね。なにか面白いものがあったら是非教えて下さい。  では。 x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x --- 第2章: HTTP入門 〜連続投稿の仕組み〜 --- 著者:Kenji Aiko x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x ■0x01.) はじめに  掲示板などに連続投稿を行うプログラムが存在するが、実際にそれらのプログ ラムはどういった仕組みで実現されているのか。具体的にBBSに連続投稿を行う方 法について学んでみようじゃないか。ということでこの記事では実際にいくつか の掲示板にテスト的に投稿していますが、これはあくまでも攻撃に使うわけでは 無いということをご了承ください。連続投稿の仕組みを学ぶのであって、実際に 攻撃するわけでは無いということです。なお、この記事は前回の記事「SMTP入門  〜メールアドレス偽装〜」の続編という位置づけですので Perl がわかる方を 対象としています。 ■0x02.) HTTPとは  HTTP とは Hyper-Text Transfer Protocol の略です。WWW(World Wide Web)に 使用されているプロトコルで一般的にポート番号 80 番を使用します。HTTP につ いて詳しく知りたい方は RFC1945,2068,2616 などを参照してください。 ■0x03.) GET Method  ではいきなりですが telnet で以下のように打ってください。SMTPはポート25 番でしたがHTTPはポート80番です。なおWindows(コマンドプロンプト)の場合は入 力した文字が表示されませんが、ちゃんと入力されてるので心配せずに打ち込ん でください。(スペースなども正確に打ち込んでください)ちなみに'\r\n'は改行です。 ○Windows(コマンドプロンプト) ----- C:\xxxx>telnet www.yahoo.co.jp 80 GET / HTTP/1.0\r\n \r\n ----- ○Linux ----- [kenji@localhost http]$ telnet www.yahoo.co.jp 80 ......... ............... Escape character is '^]'. GET / HTTP/1.0\r\n \r\n -----  無事、YahooのTOPページのデータが取得できたら成功です。(YahooのTOPページ のソースは結構長いので流れていくと思われます)さてまずRFC1945を見てみます。 私が使ったサイトは(ftp://ftp.ring.gr.jp/pub/doc/RFC/rfc1945.txt)ですが 「RFC1945」で検索すればたくさん出てきます。今回のポイントは [Page 23] の 5.1.1 Method 以下です。まずHTTP/1.0の場合 Method には"GET","HEAD","POST" が存在するらしい。RFC2068などを見ると Method が増えてたりしますが HTTP/1.0 の時点ではこれだけしか無かったのでしょう。そして次の章の 5.1.2 Request-URI を見てみると最後にAn example Request-Line would be:という文章がありますの で「リクエストの例を示す」と訳すことができるでしょう。その例とは ----- GET http://www.w3.org/pub/WWW/TheProject.html HTTP/1.0 ----- となっています(telnetでの実演では相対パスでしたが、RFCのこの例は絶対パス で記述されています)。さてさて、じゃあプログラムを書いてみます。 ----- http.pl #!/usr/bin/perl use Socket; $server = 'www.yahoo.co.jp'; $port = getservbyname('http', 'tcp'); $struct = sockaddr_in($port, inet_aton($server)); socket(SOCK, PF_INET, SOCK_STREAM, 0) || die("socket $!"); connect(SOCK, $struct) || die("connect $!"); select(SOCK); $| = 1; select(STDOUT); print SOCK "GET http://www.yahoo.co.jp/ HTTP/1.0\r\n"; print SOCK "\r\n"; while($respons = ){ $respons =~ s/\x0D\x0A|\x0D|\x0A/\r\n/g; print $respons; } close(SOCK); select(STDOUT); exit; ----- ----- 実行例 C:\Perl>perl http.pl > test.txt C:\Perl> -----  出力先を test.txt にします。YahooはEUCなのでメモ帳などで開くと文字化け しますが見事YahooのTOPページが取得できていますね。前回のSMTPと比べるとか なりシンプルです。サーバに接続して ----- GET http://www.yahoo.co.jp/ HTTP/1.0\r\n \r\n ----- という文字列を送っているだけです。(ここでは絶対パスですがもちろん相対パス でもOKです。ただし相対パスでなければ受け付けないサーバもありますので注意 してください)するとサーバからサイトの情報が送られてくるのでそれを受け取っ てprintで出力しています。簡単ですね。んで、ブラウザと呼ばれるソフトがこう いうやり取りをサーバと行っているのでは?というのも想像できます。つまり私 たちがIEのアドレス記入欄に http://www.yahoo.co.jp/ と入力するとブラウザは www.yahoo.co.jp の http(80) に接続し GET http://www.yahoo.co.jp/ HTTP/1.0 \r\n\r\n という文字列を送っているわけなのです(いまのブラウザはHTTP/1.1か もしれませんがやってることは同じです)。さてさて、ということはこのプログラ ムをwhileで回せば、俗にいうF5攻撃(ブラウザの更新ボタンを連打してサーバに 負荷をかける攻撃方法)をプログラムで再現することができるじゃん。ということ です。確かにできますがやるときは自己責任でお願いします。私は一切関係無い 方向で。 ■0x04.) POST METHOD  では次は掲示板などに書き込む場合はどういうリクエストを送らなければなら ないのかを調べます。まずは実験用に簡単なCGIプログラムを書きます。 ----- postTest.cgi #!/usr/bin/perl $name = "postTest.cgi"; if($ENV{'REQUEST_METHOD'} eq "POST") { read(STDIN, $buf, $ENV{'CONTENT_LENGTH'}); } print "Content-Type: text/html\r\n\r\n"; print << "HTML"; POST TEST

$buf

name:
sub:


HTML exit; -----  これはブラウザからPOSTされたデータをそのまま出力するものです。フォーム データの要素名はそれぞれname="name", name="sub", name="comment"となってい ます。このCGIのフォームに適当なデータを入力して送信ボタンを押すと、 ----- name=ddd&sub=eeeee&comment=eeeeeeeeeeeeeeeeeeee ----- というような文字列が表示されるはずです。これはつまりブラウザが送信したデ ータということになりますよね。再び RFC1945 を見てみます。が、どうやら PO ST Method の例は無さそうですので、適当な部分を読んで推測します。 [Page 31] (RFC1945 一部抜粋) A valid Content-Length is required on all HTTP/1.0 POST requests. An HTTP /1.0 server should respond with a 400 (bad request) message if it cannot determine the length of the request message's content.  すべてのPOSTリクエストは Content-Length が必要だ。もしこれが無い場合は サーバはバッドリクエストである 400 をレスポンスとして返すべきである。  かなり適当な翻訳ですが、勘弁してください。でもこういうものはだいたい分 かる単語を繋ぎ合わせていけばなんとか意味が理解できるので良いのです(^^; つまりPOSTリクエストを送る場合は Content-Length が必要であると解釈できま す。Content-Length とはつまり "name=ddd&sub=eeeee&comment=eeeeeeeeeeeeee eeeeee" のような文字列の長さでしょう。つまりまとめると、POST Method を使 う場合は「渡すべき文字列の長さ」と「その文字列」をサーバに渡さなければな らない。となります。では実際に postTest.cgi にPOSTするプログラムを書きま す。 ----- http2.pl #!/usr/bin/perl use Socket; $server = 'localhost'; $port = getservbyname('http', 'tcp'); $struct = sockaddr_in($port, inet_aton($server)); socket(SOCK, PF_INET, SOCK_STREAM, 0) || die("socket $!"); connect(SOCK, $struct) || die("connect $!"); select(SOCK); $| = 1; select(STDOUT); print SOCK "POST /postTest.cgi HTTP/1.0\r\n"; print SOCK "Content-Length: 6\r\n"; print SOCK "\r\n"; print SOCK "AAAAAA\r\n"; while($respons = ){ print $respons; } close(SOCK); select(STDOUT); exit; ----- ----- 実行例 C:\Perl>perl http2.pl > test.txt C:\Perl> -----  test.txtを調べると、無事プログラムがPOSTしたデータ"AAAAAA"が表示されて るはずです。そしてCGIにブラウザが渡したデータは "name=ddd&sub=eeeee&comm ent=eeeeeeeeeeeeeeeeeeee" というように "要素名=データ&要素名=データ&要素 名=データ" という構成になっています。つまり実際に掲示板に連続投稿を考える 場合はこの"AAAAAA"の部分をブラウザが渡したデータのような文字列にして、連 続的にサーバに送信するプログラムを書けば良いということになります。 ■0x05.) KENT WEB 篇 ( http://www.kent-web.com/ )  では実際に配布されてる掲示板で試してみます。おそらくもっとも多くの人に 使用されているであろう掲示板であるKENT氏の掲示板で試します。といってもKE NT氏作の掲示板はたくさんあるのでここでは LIGHT BOARD というのを使うことに します。まずは適当なサーバに設置してください。  そしてこの掲示板にプログラムから投稿してみようと思います(注意:もし実験 的に連続投稿する場合、自分のPCでサーバをたてて実験する場合は良いのですが、 CGI可の無料スペースなどで実験を行う場合はサーバに負荷がかかるので控えめに したほうが良いと思われます)。  まずはどんなデータを送らなければならないのかを知りたいのでブラウザで light.cgi に接続してフォーム情報を調べます。 ----- light.cgiのHTML出力より抜粋
おなまえ
Eメール
タイトル
コメント
参照先
暗証キー (記事メンテ用)
----- (注意:これは 2003/12/01 時点でのlight.cgiです)  formタグで囲まれてるところを抜粋しました。まずターゲットとなるCGIは ./light.cgi です。そして modeの値が regist なのでCGIにPOSTするデータは mode=regist となります。名前は name=name となってるので name=NAME と適当 な名前にします。メールは、name=email となっているので email=test@test.com とします。この調子で name=sub なので sub=TITLE さらに name=comment なので comment=Hello と設定していきます。そしてこれらを繋げてPOSTするデータを作 ります。 ----- mode=regist&name=NAME&email=test@test.com&sub=TITLE&comment=Hello ----- となります。ポイントは、mode=registは固定、name=名前、email=メールアドレ ス、sub=タイトル、comment=本文、というように設定するということです。これ を理解した上で以下のプログラムをみてください。 +--------------------------------------------------+ | http://kenjinet.s26.xrea.com/http/KENT.txt (.pl) | +--------------------------------------------------+  バージョンがHTTP/1.1になってますがヘッダにHostが必要なこと以外は HTTP/ 1.0 と同じです。初期設定の部分だけ抜き出します。 ----- #-- 初期設定 $server = 'www00.tok2.com'; $path = 'http://www00.tok2.com/home/********/bbs/light.cgi'; $body = 'mode=regist&name=NAME&email=test@yahoo.com&sub=title&comment='; $body .= rand(1000); $len = length($body); -----  さて拡張子を .pl にして初期設定をして実行してみてください。おそらく書き 込まれるはずです。これは私が tok2 のサーバスペースを借りて試したものです。 サーバとパスは伏せていますがあとはこのまま試しました。プログラムの詳細な 説明はしませんが、読めば理解できると思います。あとこのプログラムは一度し か投稿しませんが、まぁcommentをランダムな数値にしてるので(よって文字列に よる二重投稿防止は無意味ですね)あとは while で無限に回せば連続投稿が可能 でしょう。何故 while をいれたプログラムをアップしないのか?というと、WBの 記事は検索エンジンに引っかかりますよね。見つかったら怒られそうじゃないで すか(^^; ■0x06.) THEBBS 篇 ( http://www.thebbs.jp/ )  では次は実際に現在運営されてる掲示板に投稿してみましょう。しかしこれは 個人で設置したものでは無いので、連続投稿をするとアクセス拒否される恐れが あります。よって試しに1,2回投稿してみるだけにしましょう。ちなみに私に攻撃 する意図は一切ありません。もしあなたが本当に攻撃したいならば自己責任でお 願いします。私は一切関係無い方向で。というかWBは一切関係無い方向で。  これはTHEBBSのTEST板のあるスレのHTMLのフォームの部分です( 2003/12/05 ) まずはフォームの情報を調べます。 -----
[利用規約]
お名 前を入力してください:  ; クリプトノモト:

コメントを入力してください :

< input type=checkbox name=2 value=1 checked>インデックスを上げる ※各項目の説明 ----- 【編注】上のデータはWizard Bibleの都合のために強制的に改行しています。  改行が無かったのでちょっと読みにくいですが、がんばって読んで下さい(^^;  まずターゲットとなるCGIは http://xtest.dot.thebbs.jp/w.cgi です。これが 書き込みを行うプログラムのようです。次に名前ですが name=0 となってますの でPOST するデータは 0=myName というようにすれば良いですね。次がクリプトノ モトです name=5 なので 5=pass という感じでいいでしょう。この調子でコメン トは name=1 なので 1=comment わけのわからない数字列(おそらくスレッドを管 理するデータ)は name=3 なので 3=1068897594 そしてスレを上げるかどうかの値 ですがこれはTESTなのでsageで行きたいので 2=0 とします。ではこれらの文字列 を繋げます。 ----- 0=myName&5=pass&1=Hello&3=1062995806&2=0 ----- となります。ブラウザで書き込みボタンを押したとき、おそらくこのようなデー タがPOSTされていると考えられますね。投稿すべきCGIは http://xtest.dot.the bbs.jp/w.cgi ですね。ではプログラムを見てください。 +-------------------------------------------------+ | http://kenjinet.s26.xrea.com/http/THE.txt (.pl) | +-------------------------------------------------+  さてここでちょっとおかしなことが。 $path が http://www.thebbs.jp/xtest /w.cgi となっています。$server も違いますね。おいおい、アドレス違うじゃん。 http://xtest.dot.thebbs.jp/w.cgi じゃないのか。と思われますが実はこれで良 いのです。ためしに http://xtest.dot.thebbs.jp/w.cgi として投稿してみると なんと投稿出来ません(私はここでハマりました) 。結果を話すとターゲットのCGI は ----- http://www.thebbs.jp/[サーバ名の最初から'.'までの文字列]/w.cgi ----- にアクセスしなければならない。ということです。つまり http://xtest.dot.th ebbs.jp/w.cgi なら www.thebbs.jp に接続し xtest というディレクトリ以下の w.cgiにデータを渡さなければならないようです。何故こうなってるのかは分かり ません。というか 2003/11/23 にテストした時はこうはなってなかったのです。 でも 2003/12/04 に試してみるとなんか出来ない。正直焦りました。んで急遽こ の章だけ書き直したというわけなんです(以上ネタばれでした^^;)。 ■0x07.) 2ch 篇 ( http://www.2ch.net/ )  最後に「2ちゃんねる」をやります。いままで通りフォーム情報を調べます。こ れは2chの厨房板のあるスレのデータです。( 2003/12/01 ) -----
名前: E-mail (省略可) :
----- 【編注】上のデータはWizard Bibleの都合のために強制的に改行しています。  もう3度目なので詳細な説明はしません。まずターゲットとなるCGIは ../../ ../bbs.cgi ですね。それぞれ適当なデータを持ってきて繋ぎます。 ----- FROM=nanashi&mail=sage&MESSAGE=sage&bbs=kitchen&key=1069576102&time=1070108651 ----- となります。さて上記のプログラムを使って実際に送信してみてください。おそ らく書き込まれません。何故なら 2ch はクッキーを使ってるからです。書き込み を行うPCのIPアドレスをクッキーとして保存させてそれを持ってるならば書き込 みを許可するという風な処理をCGIにさせてるからです。ではどうするのか。答え は簡単。リクエストヘッダに Cookie を追加します。まずブラウザで2chに書き込 みを行ってみてセットされたクッキーを見てみます。クッキーはこちら側(クライ アント)に保存されてるので見ることができます。しかしクッキーがどこに保存さ れてるかはOSによって違いますので各自調べてください。調べてみると PON とい う名前で myhost.co.jp というようなデータが保存されてるのが分かります。こ れをリクエストヘッダに付加してやります。 ----- Cookie:PON=myhost.co.jp -----  こんな感じです。さてこれでもう一度送信してみましょう。おそらくまた書き 込まれません(笑 レスポンスを見てみると、Referer をください。みたいなこと が書かれてあります。よってリクエストヘッダに Refererも付け加えましょう。 ----- Referer:http://tmp2.2ch.net/test/read.cgi/kitchen/**********/l50 -----  これでおそらく書き込みできるはずです。 +-------------------------------------------------+ | http://kenjinet.s26.xrea.com/http/2CH.txt (.pl) | +-------------------------------------------------+  これが(↑)実際に書き込みを行ったプログラムです。初期設定を2ch用に変更、 あとデータ生成の部分に Cookie と Referer を付加してます。  このようにBBSによってどういったデータを欲しがってるのか。どういった仕組 みで実現してるのかは微妙に違います。掲示板を攻撃するならばHTTPの知識は不 可欠です。そのためには実際に自分で掲示板を作ってみるというのも良いでしょ う。 ■0x08.) 最後に  さて、いかがだったでしょうか。掲示板荒らしは結構奥が深いようで掲示板の 作成者によっては、あらゆる手段を使って連続投稿を防止するプログラムを組み 込んでいたりするようです。結局攻撃する方法が分からなければ防御する方法も 分からないわけで、そこは攻撃側と防御側のスキルの競い合いと言ったところで しょうか。どちらにしても HTTP の知識が必要になってくることは間違いないで しょう。最後になりましたが、ここまで付き合って読んでくださった方有り難う ございました。  では、また会う日まで... x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x --- 第3章: RAWソケット入門 --- 著者:unya x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x ■0x01.) はじめに 特に明記しない限り、BSD環境を中心に解説していきます。TCP/IPが一般に公開 されたのは、1983年、4.2BSDに実装されたのが最初でした。以後、改良や拡張が 加えられて、TCP/IPはインターネットの基盤となり、現在、一般公開されている 4.4BSD-Lite2 はFreeBSD, NetBSD, OpenBSDといったBSDを派生させています。又、 ここ数年でLinuxが広く普及しましたが、このUnix互換OSはBSDの実装とは若干異 なる所があり、そのような個所については個別に解説していきます。尚、Linuxに ついては2.4系カーネルを対象にしています。 ■0x02.) SOCK_RAW rawソケットを使用すると、ICMP, IGMPパケットや、カーネルがサポートしない IPv4プロトコルフィールドを持ったパケットをユーザープロセスから読み書き出 来るようになります。又、後述するIP_HDRINCLオプションを設定すれば、独自の IPv4ヘッダーを作成して送信する事が出来ます。IP_HDRINCLオプションを設定し ていない場合は、カーネルが生成するIPヘッダーの後ろに続くデータを作成する 事になります。このとき使われるプロトコルは、socket(2)の第3引数の値になり ます。 身近にあるrawソケットを利用したプログラムにはPing(8)とTraceroute(8)があ ります。ICMPエコー要求送信、ICMPエコー応答の受信を行っているのがPingプロ グラムであり、TracerouteはIPとUDPヘッダーを含む独自のパケットを構築してい ます。 rawソケットを作成するには、socket(2)の第2引数にSOCK_RAWを指定します。 以下はsocket()のプロトタイプ。 ----- #include #include socket(int domein, int type, int protocol); -----  rawソケットの作成は次のようにして行います。 ----- socket(PF_INET, SOCK_RAW, protocol); -----  socket()の第1引数にPF_INETを指定しています。このフィールドをPF_INETと AF_INETのどちらにしたら良いのか迷う方もいると思いますが、PF_INETとAF_INET は同じ値なので、これに対して神経質になる必要はないでしょう。 protocolには、任意のプロトコルを設定する事が出来ます。IPPROTO_RAWを設定 すると、あらゆるIPプロトコルを送信する事が出来ますが、受信に関してはこれ に従いません。LinuxでIPPROTO_RAWを設定すると、IP_HDRINCLオプションが暗黙 のうちに有効になる事に注意する必要があります。 ■0x03.) IP_HDRINCLオプション このオプションは4.3BSD Renoで導入されました。送信するパケットにIPヘッダ ーを含める場合は、IP_HDRINCLオプションを指定します。以下はプロトタイプ。 ----- #include #include int setsockopt(int s, int level, int optname, const void *optval, socklen_t optlen); ----- IP_HDRINCLオプションを設定する場合、 levelはIPPROTO_IPになりoptnameは IP_HDRINCLでoptlenはint型のサイズになります。例えば、次のようにしてソケッ トオプションの設定を行います。 ----- int hincl = 1; setsockopt(sd, IPPROTO_IP, IP_HDRINCL, &hincl, sizeof(hincl)); ----- ■0x04.) IPヘッダーの作成/送信と注意点 パケットの送信は多くの場合、sendto(2)を用いる事になるはずです。これは sendto()が接続していない状態でのパケット送信が可能だからです。sendto()以 外の関数を使用するならば、connect(2)を呼び出す事になります。rawソケットで もconnect()を呼び出す事は可能です。但し、rawソケットはポート番号の概念が 存在しないので、TCPのような接続ではなく、リモートアドレスの設定のみを行い ます。connect()を呼び出したのならば、sendto()の代わりにsend(2),write(2)を 用いる事になります。 IP_HDRINCLオプションを設定してIPヘッダーを作成する場合は自分でそれぞれ のIPv4ヘッダー値を設定する事になりますが、IPv4識別フィールド(IPID)とIPv4 ヘッダチェックサムは0で構いません。IPv4識別フィールドが0に設定されている ならば、カーネルがこのフィールドを埋めます。IPv4ヘッダチェックサムは常に カーネルが計算します。又、全IP長フィールドは、Linuxの場合、実際に送信する サイズが優先され、カーネルによって変更されます。BSDではこのフィールドと実 際に送信するサイズが一致しない場合は送信する事が出来ません。又、バイトオ ーダーにも気をつける必要があります。BSDではip_len(全IP長)とip_off(フラグ メントオフセット)フィールドをホストバイトオーダーに設定しますが、Linuxの 場合、全てのフィールドをネットワークバイトオーダーに設定します。例外とし て、OpenBSDはLinuxと同じ設定を行います。 ■0x05.) rawソケットからの読み込み 全てのパケットをrawソケットから読み込む事が出来るわけではなく、カーネル がUDP/TCPパケットをrawソケットへ渡す事はありません。rawソケットからはIGMP パケットとエコー要求、タイムスタンプ要求、アドレスマスク要求を除くICMPパ ケット、そして、カーネルがサポートしないIPv4プロトコルフィールドを持った パケットがrawソケットへ渡されます。 カーネルは上記のrawソケットへ渡すべきパケットを受信した際、特定の条件と 一致したパケットのみ、rawソケットへ渡します。まず、第1にソケット作成段階 でsocket(2)の第3引数であるプロトコルフィールドに0でない値を設定している 場合、このプロトコルフィールドと受信したプロトコルが一致する必要がありま す。第2に、bind(2)でローカルIPアドレスがバインドされている場合、宛先アド レスがローカルIPアドレスと一致している必要があります。第3に、connect(2) を呼び出して宛先アドレスを指定している場合、このアドレスと受信したパケッ トの送信元アドレスが一致している必要があります。socket()のプロトコルフィ ールドを0に設定している場合は、rawソケットに渡すべきパケットを全て読み込 む事が出来ます。rawソケットから読み出したパケットには、IP_HDRINCLオプショ ンに関係なくIPヘッダーが含まれています。 ■0x06.) BSDとLinuxにおける実装の違い BSDの実装では、受信したUDP/TCPパケットがrawソケットへ渡される事はありま せんが、Linuxではこれらのパケットはrawソケットへ渡されます。"Jackal"とい うステルスポートスキャナーがいい例です。このポートスキャナーはLinux用に書 かれていますが、これをBSDに移植したとしても動作する事はありません。パケッ トの送信を行う事は可能でも、受信する事が出来ないからです。LinuxからBSDに 移行する際は注意が必要です。 もうひとつ気になる実装として、Linuxではrawソケットを作成する際、プロト コルにIPPROTO_IPを設定出来ない、というのがあります。つまり、ソケットタイ プにSOCK_RAWを指定して、プロトコルに0を設定するとエラーになります。これは、 ソケットタイプをSOCK_RAWにした場合のみです。エラーを返す過程はカーネルソ ースコード上で確認する事が出来るので、実際にエラーを返している部分を見て みましょう。 アセンブリでソケットを扱った経験のある方ならばご存じでしょうが、Linuxで のsocket()やbind()等は個別のシステムコールにはなっておらず、sys_socketcall() というソケットシステムコールから呼び出されます。ソケットを作成する流れは 以下のようになります。 ----- sys_socketcall() => sys_socket() => sock_create() => inet_create() => sock_map_fd() -----  エラーコードを返している関数はaf_inet.cに記述されているinet_create()で す。以下はinet_create()のエラーを返している部分を抜き出したものです。 ----- answer = NULL; br_read_lock_bh(BR_NETPROTO_LOCK); list_for_each(p, &inetsw[sock->type]) { answer = list_entry(p, struct inet_protosw, list); /* Check the non-wild match. */ if (protocol == answer->protocol) { if (protocol != IPPROTO_IP) break; } else { /* Check for the two wild cases. */ if (IPPROTO_IP == protocol) { protocol = answer->protocol; break; } if (IPPROTO_IP == answer->protocol) break; } answer = NULL; } br_read_unlock_bh(BR_NETPROTO_LOCK); if (!answer) goto free_and_badtype; if (answer->capability > 0 && !capable(answer->capability)) goto free_and_badperm; if (!protocol) goto free_and_noproto; /* * 省略 */ free_and_badtype: sk_free(sk); return -ESOCKTNOSUPPORT; free_and_badperm: sk_free(sk); return -EPERM; free_and_noproto: sk_free(sk); return -EPROTONOSUPPORT; do_oom: return -ENOBUFS; } -----  このコードは、ソケットタイプに応じたプロトコルの設定を行っています。ソ ケットタイプがSOCK_RAW の場合、SOCK_RAWのデフォルトプロトコルはIPPROTO_IP なので、breakでループを抜ける事が出来ず、answerがNULLになります。answerが NULLの場合、goto文によってラベル "free_and_badtype" へ飛び、"-ESOCKTNOSU PPORT"を戻り値として呼び出し元へ戻ります。 Linuxカーネルは日々変化しています。バージョン2.4.5までは以下のような実 装になっていました。こちらの方が分かりやすいかも知れません。Linux-2.4.5で 実装されているinet_create()のコードです。 ----- switch (sock->type) { case SOCK_STREAM: if (protocol && protocol != IPPROTO_TCP) goto free_and_noproto; protocol = IPPROTO_TCP; prot = &tcp_prot; sock->ops = &inet_stream_ops; break; case SOCK_SEQPACKET: goto free_and_badtype; case SOCK_DGRAM: if (protocol && protocol != IPPROTO_UDP) goto free_and_noproto; protocol = IPPROTO_UDP; sk->no_check = UDP_CSUM_DEFAULT; prot=&udp_prot; sock->ops = &inet_dgram_ops; break; case SOCK_RAW: if (!capable(CAP_NET_RAW)) goto free_and_badperm; if (!protocol) goto free_and_noproto; prot = &raw_prot; sk->reuse = 1; sk->num = protocol; sock->ops = &inet_dgram_ops; if (protocol == IPPROTO_RAW) sk->protinfo.af_inet.hdrincl = 1; break; default: goto free_and_badtype; } /* * 省略 */ free_and_badtype: sk_free(sk); return -ESOCKTNOSUPPORT; free_and_badperm: sk_free(sk); return -EPERM; free_and_noproto: sk_free(sk); return -EPROTONOSUPPORT; do_oom: return -ENOBUFS; } -----  こちらの実装では、"-ESOCKTNOSUPPORT"を戻り値としています。エラーコード が変わるので、当然のことながらエラーメッセージも変わります。 ■0x07.) 参考文献 [1] 「UNIXネットワークプログラミング 第2版 Vol.1」 W. Richard Stevens 著、篠田 陽一 訳、 ピアソン・エデュケーション [2] Linux Programmer's Manual [3] NetBSD Programmer's Manual x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x --- 第4章: FTTHの導入とセキュリティ --- 著者:D x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x ■0x01.) はじめに  最近、ADSLからFTTHに乗り換える方が非常に多くなってきています。提供する 会社の提供エリアの拡大が進んできているためだとは思いますが、非常に良いこ とだと思います。しかし、それに伴い思った以上にスループットが出ないという 事象もあるのは確かなようです。  でわ、FTTHを快適に使うにはどのようにしたら良いのか?  FTTHを快適に使うには性能の良いルータ及びPC、プロバイダが必要です。 ■0x02.) PC  性能の良いPCの最低ラインとは私的に掲げさせていただくなら下記のとおりに なります。 CPU:PentiumⅢ 1GHz Memory:384MB OS:Windows2000またはWindowsXPまたはUNIXベースのOS  この程度をクリアしていればかなりのスループットを期待できるかと思います。 実際、厳密に言えばVRAM(ストリーミングに関係)だとかHDD(ファイル共有に関係) の性能も関係はするのでしょうが、回線速度と考える場合とアプリケーションと 連携させた場合のスループットとは今回は切り離して考えさせていただきます。  また、OSに限って言えばネットワークOSと呼ばれるものを必ず使用してくだ さい。 導入した段階からMTUが最適な状態になっていたり、ネットワーク機器と の連携も非常に良いものであったりするためです(Window9X系で苦労したことの ある方ならわかると思う)。 ■0x03.) ルータ  次にルータです。ルータといえど、様々なものがあります。  この世の常としていってしまえば、値段が高ければ高いもの程良いです。例え て挙げれば、アライドテレシス社のAR450などはかなり良いものです。値段 は99,800円と張るといえば張りますが、私の環境で測った実測値であれば 最高70Mbps、プロバイダ接続した場合は最高50Mbpsをマークしました。また、 ファイアウォール機能も持っているし、VPNも出来るしと良い機能も結構持っ てます。コンフィグファイルを使用して設定するので使い勝手に合わせて難しい 設定も出来ます。  しかし、私も含めた一般家庭で使う人はそんな値段を出せないでしょう。そう なってくるとコレガ社などで取り扱っている1万円から2万円程度のルータとな ります。最近のこれらのルータはスループットで言えば上記のAR450などの ルータに匹敵します。しかし、内部のPCがNIMDAなどに感染した日にはル ータがパケットを処理しきれずにDOWNしてしまう現象が結構多いです(実際 にあるんですよ)。まあ、PCにパッチやウィルス駆除ソフトを導入すれば防げ るので安いルータでも良いのですが、性能面を問えば?マークがつくと思います。 ただ、性能が悪いわけではないので、個人の趣味と使い方に合わせて選ばれるの が良いでしょう。 ■0x03.) プロバイダ  続いてプロバイダです。  はっきり言って、プロバイダが一番ブラックボックスで見えない部分だと思い ます。私もどこのプロバイダが良いと言い切れないです。ただ、キャリア系プロ バイダであれば結構スループットを見込めると思います。例えば、OCN、II J、BIGLOBE、@niftyなどのビッグネームだと安心といえなくもな いです。ただし、地域にヘビーユーザがいるとスループットは悪いそうです。ベ ストエフォートサービスの痛いところですね。どんな加入者がいて、どれだけの ユーザでどのくらいの帯域を共有しているのか。これが見えないためプロバイダ に接続した場合、どの程度速度が出るかわからないのです。なので、品質面を大 きくうたっているプロバイダなら若干は安心だと思います。  ちょっと、話題がそれますがとあるプロバイダのお話になります。「セキュリ ティ面で問題があると巷で話題になっているのですが、実際にはどうですかね?」 とそのプロバイダで働く方に質問したところ、「ええ。うちにはすごい技術者は 何人かいるのですが、その人数が足りないので実際にはセキュリティの方に手が 回ってないのが実状です」。さらに、「個人向けにうちを使ったとしてもせいぜ い踏み台にされる程度だけど、法人(企業)には絶対使わないほうがいいでしょう」 だそうです。こんなこというプロバイダもいるので注意が必要ですね。 ■0x04.) ちょっとマニアな人向けに一言  ちょっとマニアな人向けに一言。 ・ブロードバンドルータは性能の良いものが良い! ・量産されているルータなんか信用できない! ・自分で作ったものが一番!  そう考える方もいらっしゃいます。そんな人はUNIXベースのOSで自作ル ータを作られてはいかがでしょうか?CPUはセレロン1GHzくらいでメモリ も128MB程度もあれば、そこそこ良いものが組めると思いますよ。無責任で すが、私はそこまで技術が高くないので組んだことがありません。なので、実質 良いのかどうかはわかりませんし、上記の仕様でスループットが出るかもわかり ません。しかし、私の周りには「このくらいのものを自分で組んだ方が絶対速い !」と言う方が何人かいるので「そうなのかな?」と思って紹介させていただき ます。ただ、手間がかかるのは確かですよ。 ■0x05.) FTTHを導入した方に一言  FTTHを導入した方に一言。  FTTHの光ファイバーケーブルは出来る限り触れないようにしましょう。また、 物陰において強いショックを与える事は避けましょう。最近の光ファイバーケー ブルは折れにくくなっているみたいですが、折れないわけではありません。実際 にONUの位置を移動したくて、余分に長くしておきリング状にしてまとめておいた ケーブルをほどき、ONUを実際に動かしたら折れてしまい1日使えなくなり、工事 費もかかってしまったという事例もあります。ONUを動かす際には丁寧に扱うよう にしてください。また、ちょっとくらいの移動であまり変わりがないような場合 はLANケーブルを長くすることをお勧めします。その方が危険も少ないですし、コ ストも高くないです。 ■0x06.) おわりに  ではまた来年Wizard Bibleで会いましょう。 x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x --- 第5章: Newbieのための数学入門 [第一回] --- 著者:IPUSIRON x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x ■0x01.) はじめに  「数学」と聞いて何を想像できるだろうか? 苦手だった人なら「合同や相似 の証明が苦手」「計算問題が面倒」「文系だから関係ない」、逆に得意だった人 なら「補助線を引くと一発で図形の証明ができて感動した」「解法さえ暗記すれ ば余裕」「ベクトルは物理の理解にも便利」などと思ったのではないだろうか。 苦手だった人、得意だった人、両人の意見は納得できるが、ここで、ショッキン グなことを述べよう。実は小学校から高校までに習う数学は嘘ばかりなのである。 善の教育者なら嘘ばかりという真実を生徒たちにあからじめ述べているはずであ る。「嘘も方便」(*1)と故事・ことわざもある(*2)が、数学という厳密性を重視 した学問を触れたことがあるならば、嘘・偽りを述べることはできないはずであ る。いや、そうあって欲しい。よって、私は勝手にこの事実に触れるか触れない かで善の教育者か悪の教育者かを判断してきた。実際には善の教師は2割程度しか いなかったと思われる。  ところで話を戻すが、数学が苦手だった理由を色々考察してみると、大抵が次 の要因だと思われる。 [1]教材が悪い [2]教師の教え方が下手、悪の教師にばかり出会ってきた [3]元々理解できる能力が低い  [3]を第三者が解決することは困難だが、少なくとも[1]と[2]は教える側の努力 次第で何とかなりそうである。  「幾何学(*3)に王道はなし」といったのは、有名な数学者のユークリッド(*4) である。ユークリッドは数学の道はそう簡単ではないと王に理解してもらうため に述べたわけだが、「数学に王道はなくても、正道はある」と私は思っている。 ここでいう正道とは厳密性を重視しつつ、理解できたことを体感できるような理 想的な道のりのことである(*5)。  今月号から連載するこの記事は、この理想的な道のりを目指すことにする。こ れにより、数学を学ぼうという意志があるあらゆる人に完全な満足感を与え、確 信させるという意味で決定的となれば本望である。 [注釈] (*1)嘘をつくことはもちろん悪いことだが、時と場合によっては、ものごとを円 滑に運ぶための手段として必要なこともあるということ。 (*2)後に、ことわざや格いが詭弁であることを数学的に証明する予定である。 (*3)この頃は幾何学が数学と同等だった。 (*4)『原論』と呼ぶ現存する最初の幾何学書を著した。この有名なエピソードに ついてはhttp://tombow-web.hp.infoseek.co.jp/gakusya/euclid.htmを参考にせ よ。 (*5)本当は「王道」と「正道」は論理的に何の関係もない。単に語呂がよかった のでいいたかっただけである。 ■0x02.) 数の本質  数学が扱うことがらは2つに大別されうる。対象にあたる「数」と性質にあた る「関係性」である。対象と性質は密接に関係にある。直観的にも、対象がなけ れば性質は存在し得ないようにも思えるし、性質がない対象も存在し得ないよう に思える。そのぐらい対象と性質は裏表の関係なのだ。光(*1)の粒子性と波動性 の二面性に似ているかもしれない。これらを議論する前に、対象そのもの、性質 そのものを具体的に理解しておくのも悪くない。 ■0x03.) 数と教育  今回は、対象にあたる「数」にスポットライトをあててみたい。通常の教育課 程を受けた方ならば、次のような過程で数の体系を教えられてきたはずだ。 [1]小学のとき ・ゼロの存在 例:0 ・自然数(*2) 例:1,2,3,・・・ ・分数 例:1/2,1/3,7/3など [2]中学のとき ・負の数 例:-1,-2,-3,・・・ ・整数 例:・・・,-2,-1,0,1,2,・・・(ゼロと正の数・負の数の全体) [3]高校のとき ・有理数 2つの整数p、q(≠0)の比p/qで表示されるもの ・無理数 例:√2,2√3 ・実数 有理数と無理数の全体 ・有理数 例:実数から無理数を ・虚数 例:i ・複素数 実数と虚数の組み合わせ ・無限大 極限のところで無限大が登場  不幸にも悪の教育者に教えられたならば、何の疑いもないまま1,2,3,4,・・・,10 までを暗記させらたはずです。確かに幼児にこの記事で触れるような数の本質、 数の構成方法(*3)を教えるのは酷かもしれない。しかし、教育に妥協せざる得な い状況であっても、その旨を伝えるのが幼児の将来のためである。そのような疑 問が頭に引っかかったままにしておけば、いつのまにか熟成されて独学で理解で きる可能性もあるからである。  他に、教育法の流れについても触れておく必要があるだろう。上位から下位へ 天下り式に教えてしまうトップダウン型学習法だと効率はよいが自分で発見する 機会が少ないので、単調になりやすい。一方、下位から上位へ自分で発見してい くように学んでいくようにさせる教育であるボトムアップ型学習法は、一見して 正道法だが、おいしいところ(*4)に行き着く前に挫折する人が多いと思われる(*7)。 よって、この記事の流れは、どちらとものメリットを抽出した学習法を採用した い。この学習法をハイブリッド型学習法と呼ぶことにする。 [注釈] (*1)厳密には光子である。 (*2)自然数や整数といった言葉は習わないが概念は習ったはずだ。 (*3)後ほど解説する。 (*6)おもしろいところ。 (*7)どうしてもボトムアップ型学習法をとりたければ、ブルバキの『数学原論』 に挑戦してみるとよいだろう。 ■0x04.) 自然数の構成  では、そろそろ本題に入ろう。  自然数は、数のうちで最も基本的なものである。1,2,3,・・・というのが自然数で ある。本によっては0を自然数に含めるものをあるが、ここでは0は自然数に含め ないものとする。  最初に集合の存在を認めて欲しい。集合とは、簡単にいえば、ものの集まりの ことである(*1)。イメージ的には、ビニール袋のことだと構わない。  ちょっと集合のイメージを豊かにするために例を幾つか挙げてみよう。  例えば、ポチ、ミケ、ネコキチというペットの集合というものは、次のように 表記される。 {ポチ,ミケ,ネコキチ}  このように中カッコ内に収められたものが、(集合の)要素(元)と呼ぶ。  また、集合を用いれば、偶数(全体の集まり)は次のように表記される。 偶数={・・・,-4,-2,0,2,4,・・・}(*2)  もちろんこれでもよいのだが、もっとスマートに書くとすると次のようになる。 偶数={n∈Z|2n}(*3)  前者のように要素を一つずつ中カッコに挟む表記を外延的集合、後者のように 数学の一般形の表記を内包的集合と呼ぶ。  以上で少しは集合の世界に慣れてもらえたと思う。重要なポイントを復習して おこう。 ・ものの集まりのことを集合と呼ぶ。 ・ものの集まりの「もの」たちのことを要素と呼ぶ。 ・集合は要素をカンマ「,」で区切って、中カッコ「{ }」で挟む。 ・集合の表し方には2通りあることがある。  要素が一つも持たない集合の存在することを前提の決まりごととする。 ===== [公理1]空集合の存在 要素を一つも持たない集合が存在する。 =====  具体的にいえば、ビニール袋の存在を認めれば、ビニール袋が何も中に入って いないで1枚だけ存在する状態、中身が入っていないビニール袋の状態のことであ る。この状態を次のように表記できる。 {}  この状態こそが空集合と呼びれるわけである。これを簡便化して、φと表記す ることにする。今後、φという表記を用いることにする。 {}=φ  次に、集合の集合を考えることができるように、次の前提の決まりごとも認め ることにする。 ===== [公理2] 任意の対象aに対して、aだけを要素とする集合が存在する。この公理1で認められ た集合は{a}と書くことにする。 =====  これは集合の集合、集合の集合の集合、・・・を認めるための決まりごとである。  公理1で空集合の存在が保証されたので、これと公理2を組み合わせれば、φだ けを要素とする集合{φ}が考えることができる。ビニール袋の例でいえば、ビニ ール袋の中にビニール袋を入れた状態、即ちビニール袋が2重になった状態であ る。これは次のように表記できる。 {{}} ={φ}  この「{φ}」は便宜的に「1」という記号(*4)で置くことにする。 {φ}〓1(*5)  「{}と{{}}は同じではないのか? 」という声もあるかもしれない。「集合」 と「集合の集合」は言葉上では似ているかもしれないが、全く違うものである。 実際イメージのビニール袋が1枚ある状態とビニール袋が二重になっている状態 は全く違うことは明らかなはずだ。  次に、a,bを集合とするとき(a=bでも構わない)、ちょうどaの元とbの元を全 部足し合わせたものだけを構成要素とするような集合が考えられる。それをa∪b と書き、aとbの和集合(合併集合)と呼ぶ。 ===== [公理3]和集合の存在 与えられた2つの集合a,bに対して、a,bの少なくともどちらかに属する要素から なる集合が存在する。 =====  例えば、次のように和集合を考察することができる。 {φ}∪{a}={a} {a}∪{b}={a,b} {a,b}∪{c}={a,b,c}  それでは、今まで解説した流れをまとめてみよう。 [1]まず、φは空集合である。 [2]次に、φの集合を考える。つまり、空集合の集合である。これを{φ}と表記さ れる。袋が二枚重ねになっていると想像すると分かりやすいだろう。 [3]さらに、{φ}の集合、つまり、空集合の集合の集合を考える。入れ子状態にな っているわけである。 [4]このように繰り返していくと、空集合の集合の集合の集合の…となって、いわ ゆる無限まで続くと推測できる。  したがって、空集合の存在から無限個の集合(空集合の集合や空集合の集合の 集合など)が作ることができた。  この考え方を活かして次の公理4を設定することができる。 ===== [公理4]無限公理 後者集合が少なくとも一つ存在する。つまり、ある集合Aが1を含み、かつnを含め ば、nの次にくるn+1も含むということである。 =====  例えば、「集合aが後者集合である」とは「φ∈aであり、またx∈aならば、xの 後者x'もx'∈aを満たす」という性質を持つことをいう。ちなみに、xの後者x'と はx∪{x}のことである。  この公理4から無限集合の存在がいえる。 ===== [公理5]分出公理α aが集合であるとき、{x|(x∈a)∧P(x)}は集合をなす。ちなみに、{x|(x∈a)∧P(x)} は{(x∈a)|P(x)}と略されることもある。 =====  急に難しくなってしまった(*6)。簡単にいえば、次のようになる。 ===== [公理5]分出公理β 集合a,bがあったときの共通要素a∩bが集合である。 =====  つまり、ビタミンAを含む食べ物の集合AとビタミンAを含む食べ物の集合Bの2つ の集合があったとする。このとき食べ物によってはビタミンAとビタミンBどちら とも含むものがある。このとき、以上の公理たちによって、この食べ物全体も集 合として認められるということである。  共通要素が集合であることから、1とφの2つを要素とする集合を考えることが できる。これを便宜的に「2」と置くことにする。 {φ,1}〓2  今度は、1と2とφの3つを要素とする集合を考えることができる。これを便宜 的に「3」と置くことにする。 {φ,1,2}〓3  同じような作業を繰り返すことにより、無限個(*7)の状態が考えることができ る。以上のように生成された無限個の集合をまとめると次のようになる。 φ 〓 1 {φ,1} 〓 2 {φ,1,2} 〓 3 {φ,1,2,3} 〓 4 {φ,1,2,3,4} 〓 5 ・・・  不思議なことに空集合の存在と集合の作り方によって、無限個の記号1,2,・・・が 生成された。 [注釈] (*1)ここではこの程度の理解で十分である。厳密な集合の定義は後の記事で解説 する予定である。 (*2)実は、負の数も偶数、奇数がある。 (*3)記号の意味はわからなくてもよい。とりあえず違う書き方もあるというだけ 頭の片隅に置いてもらいたい。 (*4)数字の「1」ではなく、単なる記号である。「A」「B」と置いても本質的なこ とは失われない。 (*5)「〓」は左側を右側の表記に置き換えるという意味。本当は数学の専用記号 を使いたいが、デフォルトで記号がWindowsに入っていないので「〓」を使うこと にした。 (*6)数学の得意な人向けの解説をする。この公理は、P(x)を満たすxのうち、aの 要素となっているものに限定すれば、集合(必然的にaの部分集合)となることを 主張しているのである。公理5により、a∩b={x|(x∈a)∧(x∈b)}={x(∈a)|x∈b} だからP(x)をx∈bとすれば分出公理から右辺が集合をなすことが分かるのである。 (*7)この無限個は数学における可算個のこと。今は覚える必要はない。 ■0x05.) ペアノの公理系  上記で生成した記号たちと我々が日常的に使っている自然数は全く数も同じな ので、このように対応付けしても全く支障はない。  要素の数と記号(自然数)の数が一致していることに着目すると、簡単に1億だ ろうが1兆だろうがなんでも作ることができるのが直感的に分かる。ここで直感的 に分かるといったのは、我々人間が無限にアプローチするための代表的な数学的 方法は数学的帰納法と選択公理と呼ばれるものがある。ここでは、選択公理は使 わないので解説は省略するが、数学的帰納法の方は重要である。実は今までやっ てきた作業は数学的帰納法に乗っ取っていて、知らず知らずに使用してきたので ある。イメージ的に、数学的帰納法とはドミノ倒しである。最初のドミノを倒せ ば、全てのドミノを倒す必要なく、自動的に無限個のドミノが倒れることが分か る(*1)。  このように生成する方法のアイデアは、ペアノが最初に発表した。そして、 1910年にラッセルとホワイトヘッドたちが、『数学原理』(プリンピキア・マテ ィマティカ)の中で厳密に公理化した。私たちはこの公理を簡単にであるが辿っ てきたことになる。  ここでペアノの公理系を見てみよう。 ===== [公理]ペアノの公理系α (1)Nには1つの要素eが含まれる。 (2)Nの各要素nに対して、それぞれただ1つの要素n'が定まるような対応が定め られている。 (3)e=n'となるようなNの要素n'は存在しない。 (4)Nの要素m,nに対してm'=n'ならば、m=nである。 (5)Nの部分集合Mが、次の(ⅰ)、(ⅱ)をもてば、MとNは一致する。 (ⅰ)eはMに含まれる。 (ⅱ)nがMの要素であれば、n'もMの要素である。 =====  どうだろうか? はっきりいって分けがわからない人が大半だと思う。  簡単に分からないときは、再読する、アプローチ方法を変える、頭で熟成させ るなどといったことを行うとよいと私は思う。この中で今回採用するのは、アプ ローチ方法を変えるというものである。どんなアプローチ方法に変えるかといえ ば、具体的な例を用いてその世界に慣れ親しんでしまうという方法だ。この方法 は結構強力で様々な場面でも有効である。  例えば、真剣同士の戦いにおいて、剣先と剣先がにらみあっている空間は何も 無い空間だが、真剣を握ってにらみあっている剣士にとってはその何も無い空間 に強烈な何かを感じるのである。宮元武蔵の『五輪書』の中の言葉を借りれば、 「「打つ」の動作の「う」の頭を押さえて押し込む」という奇妙な呼吸があるら しい。この呼吸を理解するには、字面を読み下すことより、実際に体験するのが 早い。  しかし、様々なものごとを体験するのは理想的だが、過去のものごとは体験で きないし、現代のものごとであっても全てを理解するには寿命は少なすぎる。「 何もしない人にとっては人生は長すぎるし、何かをする人にとっては人生は短す ぎる」という言葉もある。私は経験論者ではないので、経験によって真理に到達 できるとは思わないが、確かに経験はインパクトがある。  休話閉口(*2)。  前述したペアノの公理系をもう少し分かりやすい言葉で置き換えてみよう。 ===== [公理]ペアノの公理系β 公理1:1は自然数である。 公理2:aが自然数であれば、aの後続数も自然数である。 公理3:aとbが異なる自然数であれば、aの後続数はbの後続数と等しくない。 公理4:1は、いかなる自然数の後続数でもない。 公理5:1がある性質を持ち、自然数aがその性質を持てば、aの後続数もその性質 を持つとき、全ての自然数はその性質を持つ。 =====  少しは分かりやすくなったと思う。しかし、まだ見たことがない言葉も登場し ている。これらの用語の定義をなぞりながら、ペアノの公理系βを解説してみる。 ===== [定義]後続数 後続数とは、aの後に続く自然数のことである。つまり、aの後続数はa+1という値 になる。 =====  ペアノの公理系βは、自然数を1と後続数という2つの用語によって定義されて いる。これら1と後続数という用語は、公理系そのものから何を意味するのか指示 されていないので、未定義用語と呼ばれている(*3)。  ペアノの公理系αのeとn'は、それぞれペアノの公理系βの1と後続数に対応し ているのである。対応しているとは、もし対応しているもの同士を置き換えても、 意味(*4)が変わらないということである。  それではペアノの公理系βを読んだみよう。公理1は大丈夫だと思う。しかし、 1は自然数と習ったから、公理1はOKと解釈してはならない。公理とは理論の前提 のことなので、ここでは「1を自然数という集合の要素の1つだと決める」という 意味である。  次の公理2を見てみる。この公理で注意して欲しいのは、文の中の「であれば」 という言葉である。これは「ならば」「であったら」「もし〜なら」と置き換え ることあできる。この「であれば」という言葉の前後で文を区切ることができる のである。「aが自然数」であれば、「aの後続数も自然数である」となる。前の 文の「aが自然数」が成り立てば(*5)、後ろの文の「aの後続数も自然数」となる ように決定するのである。ここで注意して欲しいが、前の文が成り立たないとき、 即ち「aが自然数でない」ときには、この公理2は一いもい及していないので考え ない。あくまでも、「aが自然数」なら「aの後続数も自然数」とするわけである。 aの後続数とは、a+1という数なので、この公理2は「aが自然数であれば、a+1も自 然数である」といい換えることができる。  公理1により、1は自然数だと決めた。次に公理2のaに1を代入してみよう。する と、「1が自然数であれば、1の後続数も自然数である」となる。「であれば」の 前の文は成立するころは公理1により分かる。よって、後ろの文「1の後続数も自 然数である」、即ち「2も自然数である」となる。ここまでで、1と2が自然数であ ることが分かる。次に、aに2を代入すれば、3も自然数の仲間であることが分かる はずだ。このように公理1から始まって公理2を適応しつづけると、1,2,3,4,・・・, 100,・・・などの数は自然数といえることが分かるはずだ。これで公理2は理解して もらえたと思う。  それでは公理3を見てみる。この公理にも「であれば」という言葉が出てくる。 公理2のときと同様に前後の文に分割すれば分かりやすい。実際に分割してみれば、 「aとbが異なる自然数」であれば、「aの後続数はbの後続数と等しくない」とな るはずだ。後ろの文の後続数という文字を置き換えれば、「aの後続数はbの後続 数と等しくない」という文は、「a+1はb+1と等しくない」となる。この公理3は次 のようなことをいっているわけである。例えば、「aとbは自然数」でなおかつ 「a≠b」となる数字として、a=3、b=2を選ぶ。すると、後ろの文の「3の後続数は 2の後続数と等しくない」、即ち「3+1は2+1と等しくない」が決定される。  公理4の「1は、いかなる自然数の後続数でもない」とは、a+1=1となるような自 然数はありえないということを述べている。0が自然数なら+1した1が後続数にな りえるが、それは考えないとこの公理は設定しているのである。つまり、公理1と 公理2と公理4によって、1,2,3,・・・たちが自然数全体となる。集合の言葉でいえば、 {1,2,3,・・・}が自然数という集合ということになる。数学では、自然数の集合を {1,2,3,・・・}と何度も記述するのは面倒なので、大文字のアルファベットのNと表 記される(*6)。つまり、「{1,2,3,・・・}〓N」である。  公理5は他の公理と比べてちょっと文章が長いことが分かる。この公理は、数学 的帰納法というドミノ倒しが成立することを保証するための決まりごとである。 簡単にいえば、1が自然数、2が1の後続数なので2も自然数、3が2の後続数なので 3も自然数、4が3の後続数なので4も自然数、・・・と無限回続けることができること を保証しているのである。自然数が数えきること(有限個)ができるなら、公理1 〜4を繰り返して用いることで全ての数が自然数である。自然数が無限個でなけれ ば不都合なので、この公理5の決まりごとを指定しているわけである。  これでペアノの公理系の意味はいい尽くした。  この公理系に慣れてもらうために、「3+2=5」という計算が確実であることを試 してみよう。 1:「3+2=5」を考える。 2:「ペアノの公理系」を見る。 3:「3+1」を考える。 4:「公理1」を見る。 5:「3+1=3の後継数」を受け入れる。 6:「3の後継数=4」を受け入れる。 7:「3+1=4」を受け入れる。 8:「公理2」を見る。 9:「3+2=3+1の後継数」を受け入れる。 10:「ステップ6」を見る。 11:「3+2=4の後継数」を受け入れる。 12:「4の後継数=5」を受け入れる。 13:「3+2=5」とプリント(出力)する。  以上のように、確実さを確かめるには13個のステップが必要となるのである。 [注釈] (*1)ドミノが途中で失敗するというのは物質的なドミノの話であり、仮想的なド ミノはドミノ間の間隔も均等で重さも均等、風や人為的な外的障害も全くないの で、必ず倒れることが分かる。本当は数学的帰納法が信頼できることを数学的に 証明すべきだが、これも後日に見送ることにする。 (*2)それはさておき。 (*3)未定義用語をどのように解釈するのかは意味論上の問題となる。 (*4)ここでの意味とは、構造のことである。 (*5)正しい、真であるという意味。 (*6)通常は太い文字の大文字N(ラージエヌ)で表記される。 ■0x06.) おわりに  本当は次に整数の構成を解説する予定であったが、結構解説が長くなってしま ったので、次回に持ち越したい。  今回の解説で疑問・質問があれば、気軽に掲示板に投稿して欲しい。 x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x --- 第6章: 目指せPCテクニカルライター[第五回] --- 著者:MaD x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x ■0x01.) 漢字の使い方  いよいよ「目指せPCテクニカルライター」も九十六回目(編注:本当はまだ 第五回)となりました。  今回は「漢字の使い方」についてです。  パソコンを使用して文章を書く(タイプする)場合、漢字変換が簡単におこな えるので、なんでもかんでも漢字に変換するクセがついているのではないでしょ うか?  書籍となることを前提にして執筆する場合、難しい漢字や、読み違う可能性の 高い漢字は、ひらがなにする(編集用語では「ひらく」という)ことが読みやす い文章を作る上で重要な要素のひとつとなります。  たとえば「何で〜」という文字を読む場合を考えてみてください。  ライターは「ナンで〜」と表現しているつもりでも「ナニで〜」と読者が読む 場合もあります。その時点で読者を考えさせることなり、思考を停止させてしま うことになります。また「尤も〜(もっとも〜)」といった、普段は使うことの ない漢字を使うライターもたまにいるようですが、小生などの保育園卒程度の知 能レベルでは「イヌも〜」と読んでしまいます。社会にはアホがたくさんいるこ とも忘れないでください。アホでも本を読むわけですから。……ネットランナー しか読まないけど。 【貴方(貴女)】→あなた 【何が〜】→なにが 【何処】→どこ 【何時】→いつ 【殆ど〜】→ほとんど 【因に】→ちなみに 【有り】→あり 【無い】→ない 【即ち】→すなわち 【遂に】→ついに 【〜出来】→でき 【そう言った(場合〜)】→そういった 【〜の事】→のこと 【〜行う】→おこなう 【〜下さい】→ください 【〜為に】→ために 【〜更に】→さらに 【〜幾つ】→いくつ 【〜1つ/一つ】→ひとつ 【成って】→なって 【従って】→したがって 【全て】→すべて 【恐らく】→おそらく 【尚】→なお 【・・・】→…(三点リーダ)  基本的に、これらには業界の中で絶対のルールがあるわけではありません。あ くまでも編集者の考え方によるものです。しかし、いくつか当用漢字にない語句 も存在していることが分かるのではないでしょうか? ■0x02.) 統一  また、これにともない重要となる要素として「統一」があります。「統一」は、 二種類に大別できます。「文体表現の統一」と「単語表現の統一」です。「文体 表現の統一」は「ですます調」などの選択です。「単語表現の統一」は、漢字・ カタカナ・英数字などの統一です。いずれかの単語を漢字にしたのであれば、そ の表現はすべて漢字にするなどです。インターネット関係の文章では次の統一が なされていないケースがよくあります。 Webサイト/webサイト/ウェブサイト/ウエブサイト サーバ/サーバー/Server/鯖 HP/HP/サイト/ホームページ ウイルス/ウィルス  どれが正解というわけでもありませんが、さすがに「HP」は目ん玉が吊上がり ます。  ですので、このあたり、振り返りながら文章を書くことをお奨めします。  余談ですが、スキルが高いといわれる人ほど、その統一性もズバ抜けていると いうことが編集の経験上よくわかりました。スキルが高いといわれる人は、文章 もプログラムを書く感覚で、しっかりとしたルールをもって執筆しているのでし ょう。  これらは、インターネット上でのコンテンツ作成においても、見やすい文章を 心掛けるという点では、役に立つことだと思いますので、ぜひ実践してみてくさ い。 ■0x03.) おわりに  では、来年、IPUSIRONさんのキテレツな新作でお会いしませう〜! x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x --- 第7章:お知らせ --- x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x ○Wizard Bible(http://2600ch.com/)では随時、執筆ライターを募集していま す。  扱う内容のテーマは広義での「under ground」です。例えば、ハッキングから サリンガスの合成法などと幅広い内容を考えています。また、各種、特殊な職業 や趣味を持った方のレクチャーなども含まれます。  一回きりでも構いません。また、必ず、毎回連載する義務もありませんのでで きる範囲で構いません。気軽に声をかけてください。もちろん一回書いたことが ある人も気軽に声をかけてください(全く気にしていない性格なので)。  文字数などの規定は特にありませんが、文字数の多いものは、一部編集を加え て連載とさせていただく場合があります。  ただし、頂いた原稿の内容で、コンセプトにそぐわないものに関しては掲載さ れない場合や、原稿の一部を変更したものを掲載する場合がありますのでご了承 ください。  目標としては、データハウス刊の「危ない28号(現廃刊)」の電脳版といった ところです。これについてデータハウスの協力により、発刊の可能性もあります。  また、各ジャンルにおいて、有望な方は単行本執筆の可能性もあるそうです。  奮ってご応募ください。 ○取り扱う具体的な分野は次に示すものです。 ・ハッキング(セキュリティネタはこちらに含める) ・クラッキング(ウイルスやトロイの木馬系も含む) ・リバースエンジニアリング(シリアル解析、ゲーム改造、オンラインゲームの チートを含む) ・コーディング(純粋なプログラミングネタでもクラッキングに近い内容でもよ い) ・ソーシャルエンジニアリング(開錠技術、侵入技術も含む) ・暗号 ・フリーキング(一般電話、携帯電話、公衆電話などの話題や電話システムの話) ・ツール(ツールに特化した話題はこちら) ・ウェアーズ(共有ソフトやエミュレータはこちらに含める) ・ウォッチング(サイトや掲示板のウォッチングネタ) ・ハードクラッキング(自販機、ゲーセンのゲーム機などの怪しい裏技など) ○目標としては、1ヶ月に1回の頻度で発行したいと思っています(予定では毎 月15日に発行)。 ○誤植などのお知らせはIPUSIRON宛て(ipusiron@ruffnex.oc.to)にお願いしま す。 ○幅広く初心者から上級者までをターゲット層としたいので、執筆陣に参加した い方は気軽にメールください。初心者からパワーユーザーまで幅広い層をターゲ ットにしたいので、マニアックなネタ、読み物系のネタ、初心者向けのネタなど 何でも構いません。オリジナルのネタじゃなくても、読みやすく編集・翻訳した だけでも十分、一つの記事と言えます。  別に『Wizard Bible』でチームを組んでいるわけではないので、他のチームに 属している人であっても気にする必要は無いと思います。  グループやチームに関わらず、自分が興味を持った事柄についてのレポートの 発表の場だと思ってください。 ○Wizard Bible(略してWB)の公式サイトは次のURIです。 http://2600ch.com/(一時休止) http://akademeia.info/wizardbible/(現在はこちらを使ってください)  過去の記事を閲覧できるようにしてあります。 ○支援者、参加希望者用のスレッドを立てました。 http://ruffnex.oc.to/ipusiron/cgi/forum/patio.cgi?mode=view&no=17 x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x ---- 第8章:著者プロフィール --- x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x  今回は各著者にオススメツールを紹介してもらいました。 ■J-Klein ●Job:楽しい事を探す事 ●Web:- Mac Freaks -(http://members.jcom.home.ne.jp/j-klein/) ●Mail: j-klein@jcom.home.ne.jp ●Team(Group):N/A ●Comment:  狙ってるわけではないのに俺の周りにあるものは少数派なものばかり、パソコ ンはMac だし、携帯は tu-ka 、好きなお笑い芸人は松本仁志と鳥肌実。携帯が tu-kaだと気付くと、みんなして不思議そうに「なんで tu-ka なの」と聞かれる。 そしてそれが快感だったりする。 ●お勧めツール: ・gdd(http://www.shadowpenguin.org/sc_toolbox/unix/gdd/index-j.htm)  gdd はいわゆる Sniffer なのですが、使用方法が難しくないので初めてsniffer に触れる人にはお勧めです。簡単なパターン指定によるアクションも設定できる ので IDS に触れるという意味でも勧められますし、個人的にはソースが読みやす かったのも Sniffer の原理を勉強する上で大変役に立ちましたね。 ・su トロイ  su トロイがツールかどうかはさておき、『ハッキングは工夫とアイディアだ』 ということに気付かされたという意味で感慨深い出会いでしたね(大げさ)。 ・NetCat  有名なツールなのであえて多くは語らないですが、個人的には即席のサーバと して利用できるのが一番うれしいかもしれないですね。 ■Kenji Aiko ●Job:Student ●Web:http://kenjinet.s26.xrea.com/ ●Mail:kenjinet@s26.xrea.com ●Team(Group):N/A ●Comment:  どうも。Kenjiです。実はMr.Children(ミスチル)好きです。最近またTVに出始 めたので音楽番組をチェックしたりしてます。好きな曲は「1999年、夏、沖縄」 「旅人」「傘の下の君に告ぐ」「タイムマシーンに乗って」「So Let's Get Truth」 「ALIVE」「I'll be」「everybody goes-秩序のない現代にドロップキック-」「 友とコーヒーと嘘と胃袋」「Everything is made from a dream」「LOVEはじめま した」「one two three」etc...です。音楽に興味ある方は一度聞いてみてくださ れ。いまは買わずとも欲しい曲が手に入る時代ですし(^^; ●オススメツール:Formrun(http://www.big-z.net/info/formrun.html)  HTTP繋がりで紹介。HTTPプロトコルに基づいたリクエストメソッドを生成するプ ログラム。だそうです。評価版が無料でDLできます。なんかものすごく重宝してる 自分がいることに気づいた今日この頃。掲示板のバグを探すのに便利です。 ■unya ●Job: 鍋奉行 ●Web: Lunatic Stream (http://lunatic_stream.tn.st) ●Mail: tmlise@yahoo.co.jp ●Team(Group): Team LISE ●Comment: 少し早いですが皆様、よいお年をヽ(´ー`)ノ ●オススメツール: なし ■D ●Job:SE ●Web:SEの小箱(http://iron_beasty.tripod.co.jp/) ●Mail:death_beasty@hotmail.com ●Team(Group):N/A ●Comment:  新参者のDです。  様々な会社のネットワークの危ない部分を指摘したいと思っています。趣味はヘ ヴィ・メタルを腹のそこから歌うこと。  まだまだ勉強が足りないところがあると思いますが、優しい目で見守ってくださ い。 ●オススメツール:PeerCast(http://www.peercast.org/jp/)  ラジオやTVなどをストリーミングで見ることができるP2Pツールです。また、見 るだけでなく配信もできます。非常に良いと思うツールです。今度、オリジナル の音楽などを作って配信してみようかな。 ■MaD ●Job:DATA HOUSE ●Web:http://www.data-house.co.jp/ ●Mail:mad@data-house.co.jp ●Team(Group):secret ●Comment:  元ハカージャパソと危ない28号の百円ライター。趣味は、空き缶拾いと牛乳瓶 のフタ集め。2ちゃんねるでは「矢崎マサユキ」、「白鶴・丸」、「大同曲芸人 」、「泥棒・詐欺師」として通っている。ウソばかりつくので友達はいない。  現在は会社でヒッキーをしているが、将来はネットカフェの店員なるという目 標に向かってまっしぐら。とぁっ!(`Д´)。 ●オススメツール:T.Clip(http://www.hi-ho.ne.jp/)  メニューバーから、テキストを自在に操るためのユーティリティです。  たとえば、登録した特殊記号や長い文字列を一発入力したり、選択領域の文字 列を1バイトから2バイトに一括変換したりと、あまり知名度は高くありません が、編集者やライターにとって、とても便利なツールです。ぜひインスコしてみ てくさい。  小生はマカ〜ですが、Windows用もあったような気がします。シェアウェアです が、こういったものこそお金をかけてみてはどうでしょか? ■IPUSIRON ●Job:サイト更新 ●Web:- Security Akademeia -(http://akademeia.info/) ●Mail:ipusiron@ruffnex.oc.to ●Team(Group):TeamSA ●Comment:  今月12日に、トップページが改竄されてしまい、閲覧した皆様にご迷惑をおか けしました。詳細は、http://d.hatena.ne.jp/ipusiron/20031214で触れています。 でも、この改竄事件のおかげで少しアクセス数が伸びたのは、不幸中の幸いだっ たかもしれません。これからもWizard Bibleをよろしくお願いします。 ●オススメツール:PuTTY(http://www.chiark.greenend.org.uk/~sgtatham/putty/)  PuTTYはWindowsで動作するフリーのTelnet/SSHクライアントです。TeraTermPro +TTSSHという組み合わせが一般的ですが、TeraTermProが対応している日本語文 字コードはEUCとShiftJISの2種類だけです。アクセス先のLinuxがRedHatならば問 題ありませんが、Fedora Coreだと不都合が生じます。RedHatの日本語文字コード はEUC、Fedora Coreの日本語文字コードはUTF-8だからです。こんなとき、UTF-8 に対応したPuTTYを用いるとよいでしょう。本家から英語版がダウンロードができ、 http://hp.vector.co.jp/authors/VA024651/#PuTTYkj_topから日本語パッチをダ ウンロードできます。