2010年10月30日土曜日

最近のSSHアタックで気づいたこと

こすげです。

台風来てますねぇ。今日は本来なら学園祭なのですが、台風が接近しているのでお休みになりました。で、今、自宅にいます。
さて、アタックの傾向を見ていて気になる傾向があることに気づきました。
僕はかなり物理的にかなり離れたIPアドレスを持った2つのホストでSSHアタックを観測しているのですが、かなり短い時間間隔で、同じホストからアタックを受けるケースが増えているんですね。僕がSSHアタックを観測しているのを趣味(笑)にしているという事を知っているのは、ごく一部の日本人だけでしょうから、これはうちのホストを狙い撃っているのではなく、単にSSHアタックを行っているアタックツールが、高速スキャンを行っている結果なんじゃないかと思っています。

例えば、今朝方、1つのホストにあったアタックなんですけどね
67.43.56.146 2010-10-30 03:17:21
こんなアタックがあったんです。その後、およそ3時間後に、全く異なるIPを持つホストに
67.43.56.146 2010-10-30 06:36:16
こんな感じのアタックがありました。

これって、同じアタックツールが出した不正アクセスを目的としたパケットなんでしょうけど、もしIPアドレスを順番にアタックしているのだとすると、かなり高速にスキャンをしているように思います。このIPアドレスに対して、こちらからポートスキャンをしてみると

PORT STATE SERVICE
22/tcp open ssh
25/tcp filtered smtp
80/tcp open http
137/tcp filtered netbios-ns
138/tcp filtered netbios-dgm
139/tcp filtered netbios-ssn
445/tcp filtered microsoft-ds
843/tcp open unknown
1720/tcp filtered H.323/Q.931
4000/tcp open remoteanything
5060/tcp open sip
8080/tcp open http-proxy
31337/tcp open Elite

って感じです。まず、httpポートが開いているんですけど、たたいてみるとレスポンス自体はあるのですが、内容は何もないようです。
また、見慣れない、4000/tcp、31337/tcp が開いていますけど、これらはちょっと古い情報ですがここによると、
4000/tcpは
Skydance, Remote Anything , ZZMM, Hostem
また、31337/tcpは
Baron Night, BO client, BO2, Bo Facil, ADM worm, Back Fire, Back Orifice (Lm), Back Orifice russian, BlitzNet, Freak88, Freak2k, NoBackO
なんて、トロイの木馬が使用しているポートみたいです。この情報最終更新が5年前なのでかなり古い情報ですし、どこまで信じて良いのか分かりません。ですが、伝統ある(笑)不正アクセスプログラムが使用するポートのようです

まあ、ここで言えるのは、広範にIPアドレスをスキャンする、スキャン速度の高いアタックツールが出回っているって事なんですけどね。

2010年10月28日木曜日

日本OSS貢献者賞授賞式

こすげです

いやぁ、雨の中「日本OSS貢献者賞」の授賞式行って来ました。写真をたくさん撮ったんですけどね、どうも露光不足なんでろくな写真がありません。まあ、見られる写真をここにアップしましたので、見たい人は見てください。

昨日、ブログを更新するとか言ってましたけど、パケット出せないんじゃ、更新できないですよね(笑

OSS貢献者賞の授賞式と同時に、未踏プロジェクト関連の「スーパークリエーター」認定証授与式もあったんですけど、受賞者はみんな若い。中にはうちの息子ぐらいのスーパークリエーター認定者もいました。未踏プロジェクトは、「本体」(このネーミングなんとかならんのかなぁ)、「ユース」って区分があるのですが、せひシニア部門もほしい(笑。
まあ、すでにがりがりソースを書く年齢ではないのですが、書きたかったりするんですよね。自分としては

2010年10月27日水曜日

台湾からの招かざる訪問者

こんばんわ、今日2度目のこすげです。

毎晩やっているランニングから帰ってPCの電源を入れて、本日のニュースを眺めてみるとノーベル研究所、ハッカー被害 台湾からアクセス記録もなんて記事がありました。うちでも、不正アクセスをなかば趣味的にずーっと記録し続けている(ここここ)ので、当然台湾からの不正アクセスもありますが、国としてはそんなに多い方じゃありません。まあ、台湾というと、不正アクセスより、不正中継を狙ったsmtpサーバへのアクセスやスパムメールって印象が強くあります。
ですが、気になっていたことがあるんですね。以下、台湾からの不正アクセス元をwhoisで引くと何が出てくるかってのを調べてみました。以下が不正アクセス元の組織名なんですけど、

Ministry of Education Computer Center
TAIWAN PROVINCIAL HSIN-HUA VOCATIONAL HIGH SCHOOL
T-TCRC.EDU.TW-NET
Yangtek Electronics Co., Ltd.
kbro CO. Ltd.
National Central University
National Taiwan University of Science and Technology
CHTD, Chunghwa Telecom Co., Ltd.
HINET-NET
HINET-NET
SZEHAI INSTITUTE OF TECHNOLOGY AND COMMERCE
Kai Xin Business Co., Ltd.
T-HCRC.EDU.TW-NET
Chonglin Business Co., Ltd
TFN-NET
National Changhua University of Education
prohostCO.,Ltd
National Chiao Tung University
HINET-NET
Reach & Range Inc.
New Century InfoComm Tech Co., Ltd
HINET-NET
HINET-TW
T-HCRC.EDU.TW-NET
Ministry of Education Computer Center
HINET-NET
kbro CO. Ltd.
HINET-NET
National Sun Yat-sen University
National Sun Yat-sen University

一見して分かるのが、学校および教育機関が多いって事ですね。しかも、Ministry of Education Computer Center って台湾の文部省コンピュータセンタ-? ってお役所じゃん(笑。(日本も含めて)他の国も学校および教育機関の割合が多いのですが、台湾みたいに約半数が学校および教育機関って国もないです。

台湾って、某国に対抗して国ぐるみでクラッカーを養成しているのか、それとも、セキュリティー的に大甘な設定にでもなっているんでしょうか・・・。件の記事もノーベル研究所に進入したクラッカーの直接のIPアドレスは、「台湾の国立交通大学」って事になってますけどねぇ。。。
まあ、IPなんてセキュリティが甘いホストを乗っ取って、そんでログを消去しちゃえば、どこからアクセスしているかなんて、まったくわかんなくなっちゃうのでなんとも言えないですけどね。。。まあ、常識から言って、ログは消去されているだろうなぁ。平均的な腕を持ったクラッカーならねぇ

って書いていたら、「攻殻機動隊」にでてくる他称「笑い男」のAOI君を思い出しました。明日から学園祭期間で、手も足もパケットも出せない状況なんで、またブログへの投稿が増えるかもしれません

口から火を噴くぜ

こんばんわ、小菅です

僕は16歳から結婚する33歳まで一人暮らしをしていたので、一通りの料理は作れるのですが、結婚して子供ができて嫁さんが専業主婦になった段階で、料理はしなくなったんですね。まあ、料理をしたと言っても、カレーを大鍋(知り合いの料理屋が廃業する時にもらった寸胴)いっぱい作って、それを1ヶ月ぐらい食べては作り足し、食べては作り足しをしていたので、とうてい料理と呼べるものではなかったような気がしますけど。
で、今年、あるところから「食べるラー油」をもらって、食べてみるとこれはうまい。でも、なんだか人気で売っていない、という状況になって、辛さに弱い嫁さんに、「ラー油を作って」とも言えず、しょうがないので自分で作ることにしました。そのラー油、同僚の塩沢先生に差し上げたところ、「まあまあ、いける」とのことで、レシピを教えてほしいと言うことになったので、ここでレシピを書くことにしました。

材料 だいたい完成500ml分ぐらい
タマネギ・・・・・・2個
長ネギ・・・・・・・2本
ショウガ・・・・・・大きめ2かけ
ニンニクチップ・・・一袋(*1)
唐辛子(輪切り)・・一袋(*1)
白ゴマ・・・・・・・一袋(*1)
乾燥エビ・・・・・・一袋
ごま油・・・・・・・一本
塩・・・・・・・・・適量
が、必須の材料ですね。それ以外に、冷蔵庫の野菜庫に眠っている葉っぱ系以外の野菜は何でも入れてOKです
ちなみに、今回は「しなびたレンコンとナス」、「嫁が何かに使おうとしてたシメジ」、「乾物棚のなかで眠っていた松の実」、「酒のつまみの残りのサキイカ」なんかも入れました。あ、材料の中の(*1)は、100円均一ショップで売っていたものです。材料費は、うちの台所にあるものをちょろまかせて、だいたい6~800円も見ておけば、十分でしょう(笑。

下準備
タマネギはすべて木っ端みじん切り(笑
長ネギは輪切り
ショウガは千切り
にします。また、その他のものは、すべて木っ端みじん切りにしておきます。フード・プロセッサがあると便利なんでしょうけど、うちにはセントラル・プロセッシング・ユニットや、ワード・プロセッサはたくさんありますけど、フード・プロセッサがないので、包丁でぜーんぶ切ります

プロセッシング
まず、フライパンに普通の油を多めに入れて、木っ端みじん切りにしたタマネギを入れて中火で炒めます。どこまで炒めるかは、そのときの気分ですけど、まあ、タマネギに透明感が出て、その後見た目に変化がなくなって飽きてくるまでにしましょう。

次に、長ネギ、ショウガをフライパンに投入し、さらに炒めます。油が足りなくなったら、適当に加えて、焦げないように炒めて行きます。その後、ニンニクチップ、白ごまを加えます。どこまで炒めるかは、、、うーん、僕は投入した時点の分量の半分ぐらいになるまで、根気よく炒めました。まあ、これは修行ではないので、楽しいなと思える範囲でやっていただければいいんじゃないでしょうか。最後に乾燥エビ、その他の食材を加えて、火を弱火にして煮込むように火を加えてゆきます。
このときに注意しなければいけないのが「決して焦がさないこと」です。ここまでの行程はだいたい1時間ぐらいでしょうか。冬寒くなったら、石油ストーブの上にフライパンを置いてでも良いでしょうね。途中で塩を加えていって、自分の好みの塩加減にします。基本的におかずにするには、塩味を濃くした方がおいしい感じです。

で、そろそろとなったら、別鍋にごま油を入れて熱します。どこまで熱するかというと表面からうっすらと油煙が立ち上るぐらい。それができたら、フライパンに唐辛子を入れて、(唐辛子が上に乗っている状態で)上から熱したごま油を回しがけします。ここが楽しい(笑

で、その後、適当に混ぜて、密閉できる瓶(これも100円均一ショップで売っていた)に移して冷まします。冷えたら口を閉じます。あとは、常温で1週間程度熟成させれば完成って感じです。できあがったものは、常温で保存しても、だいたい1ヶ月から2ヶ月は楽しめます

で、できあがったラー油というか、自分風唐辛子炒め(笑、食べると口から火を噴くほど辛い。基本的に食べて30分ぐらいは口の中が痛い感じです(笑。もう、熱いお茶なんか飲めないですね(笑。まーそんときは、牛乳でも飲んでください

実は、今年の初夏に、娘の学校のバザーで、「ハバネロ」の苗を買っておいたんですね。で、その実が熟して真っ赤になったので、それをこのラー油に入れてみたんですけど。。。その実(の残骸)を食べた時、一瞬にしてむせて、その後、涙は出てくるわ、鼻水を垂れるは、味覚が正常に戻ったのは2時間後でした(笑

2010年10月25日月曜日

本日のおまけ

あ、こすげです。

めずらしく、読者さんから、dd_ssh の使用する不正アクセスユーザーIDで示した、不正アクセスに使用されたIDを、使用された順で降順に整列して表示するのって、専用のツールを使っているんですか? って質問があったので、とりあえず書いておきますね。。。

#cat /var/log/secure /var/log/secure.[1-9]|grep 'input_userauth_request'|awk '{print $9}'|sort|uniq -c|sort -r

こんだけですよ、こんだけ

電子成績証明書・・・

こすげです。

ええと、学生が就職試験から帰ってきて自分のメールアドレスをチェックしたら、別な会社からの就職のご案内が来ていたんだそうです。で、「先生、先生、ちょっと見てください」と言うので、メールを見てみると・・・。

「・・・つきましては、このメールに、履歴書、卒業見込書、成績証明書を添付してご返信ください・・・」

なんてことが書いてありまして、「おー、よかったじゃん」って言ったんですけど、、、

履歴書、卒業見込書、成績証明書を添付して

え。。。成績証明書を添付して。。。

これってなんかの間違えじゃない????? 成績証明書をスキャンして送れってこと?????
それって、いくらでも自分の成績書き換えられるじゃん。。。。

って、思って「最近の就職活動では、そんなことあるん?」って、うちの就職部に確認の電話をかけたんですけどね、、、就職部曰く「そのようにしてください」だって。僕としては、学生に問い合わせさせるより、就職部から問い合わせをさせた方が、角が立たなくて良いと思って、就職部に連絡したんですけどね。

まあ、後から有印の成績証明書を提出させて、メールで送ったものとインシデントとれば、偽造しても分かっちゃうわけですけど。。。なんとなく、納得できないなぁ。せめて「成績証明書をPDF形式にして、学校の秘密鍵で暗号化して送って下さい」ってのは分かるけど、さすがにそこまでの対応はうちの学校でもやっていないしね。。。

きっと、この人事担当者、忙しすぎて、ついうっかり間違えちゃったんでしょうけど、、、例えば「履歴書に、卒業見込書、成績証明書を添付して郵送してください」って書こうとして、うっかりこのメールに添付して返信してくださいって書いちゃったのかなぁ。。。それとも、その間違えに気づいたら合格とか、ないだろうなぁ。。。さすがに
でも、その求人「テスト・エンジニア」を募集しているんだよなぁ。。。そんなミスを発見するのもテスト・エンジニアの仕事なんだけどね。。。と、深読みをしまくって、頭を抱えていたんですけど。。うう、悩ましい

dd_ssh の使用する不正アクセスユーザーID

こんにちは、こすげです。
今週末にうちの学校の学園祭があることにくわえ、就職活動で学生がほとんど来ていないので、することがなくぼーっとしています。なので、ここ最近増えてきた不正アクセスの分析でもしてみようと思い、最近の10週間分のログ精査をしてみたのですが、あーーーーと驚く?ような結果が出てきました。以下が、不正アクセスを試みたIDの一覧なのですが・・・
=====ID一覧(ここから)=====
34 test
24 uwasa
24 ishida
24 amisketch
21 admin
20 anzen
15 yunuma
15 yagyo
15 tsurumi
15 taurus
15 suwa
15 ryu
15 rui
15 onsen
15 momo
15 kansai
15 ik
15 haiju
15 fumio
15 axe
15 asumin
13 matsuo
12 yuuryouji
12 yukepr
12 yougodzilla
12 yorozuya
12 wailani
12 utanorakuen
12 uotoshi
12 tsumori
12 toripuru
12 tetsuyaakita
12 takasu
12 shinsaku
12 shigeyuki
12 serjiho
12 raydive
12 nekomirin
12 nagios
12 n-kankou
12 moeyoken
12 miyu
12 miyarihonda
12 minority
12 minanotabo
12 maxlovemie
12 marino
12 kosyou
12 komaru
12 koizuka
12 kobayashi
12 kawasaki
12 katsuya
12 kamakurasirasu
12 kakuremino
12 kag
12 jyoubakurabu
12 judooyaji
12 jinon
12 hokkiya
12 hayakita
12 guest
12 fuyuty
12 eyemake
12 elleika
12 dokokai
12 charanori
12 aoharu
10 takumi
10 sara
8 yoshimi
8 yokohama
8 yamamoto
8 wada
8 user
8 tyube
8 toshiya
8 toramomo
8 temp
8 teiki
8 tantan
8 tanaka
8 takeda
8 takagi
8 taichi
8 student
8 soleil
8 soka
8 sho
8 shimoyama
8 seijikouda
8 seiji
8 sakue
8 rumin
8 rinku
8 ponpon
8 pachinko
8 oekakisakie
8 namhill
8 nakahira
8 momotaro
8 mituse
8 med
8 mario
8 kitsuen
8 kinshokuji
8 kekkan
8 kazu
8 kawanobe
8 kawade
8 kanou
8 kanemitsu
8 kamijoh
8 kage
8 jyuuken
8 jyujiya
8 imai
8 ichinose
8 ichigochan
8 hos
8 hirosi
8 hiroaki
8 higuchi
8 harada
8 gonta
8 gakusai
8 emiko
8 eiko
8 eightban
8 chisato
8 bal
8 awawa
8 attoodoroku
8 area
8 arc
8 angera
8 amano
8 akubi
8 ajisai
7 oracle
6 rajesh
6 postgres
6 noda
6 nao
6 maya
6 luckas
6 kamil
6 ittan
6 geotsai
6 fukuyama
6 elina
6 clmike
5 truzzo
5 testing
5 nyoko
5 numata
5 numajiri
5 nozomi
5 nozara
5 nozaki
5 nose
5 nosaka
5 norogumi
5 noro
5 noriyuki
5 noriyori
5 noritoshi
5 noritada
5 norishige
5 norio
5 norinaga
5 norimatsu
5 noriko
5 norihisa
5 norihide
5 norie
5 noriaki
5 nori
5 nonomura
5 nono
5 nomura
5 nomi
5 nogushi
5 noguchi
5 nogi
5 nobuyoshi
5 nobuyori
5 nobuyoki
5 nobusuke
5 noburo
5 nobuo
5 nobunaga
5 nobukazu
5 nobuhito
5 nobuhisa
5 nobuhiko
5 nobuharu
5 nobuatsu
5 noboru
5 nitta
5 nissho
5 nishio
5 nishimuraya
5 nishimoto
5 nishikawa
5 nishi
5 niou
5 ninsei
5 ninomiya
5 nijo
5 niijima
5 nichiren
5 nene
5 nemoto
5 nayoko
5 nawabe
5 natsuo
5 natsumi
5 natsume
5 natsuko
5 natsu
5 nataga
5 narumi
5 naruhiko
5 narita
5 nariko
5 narihira
5 narihari
5 nariakira
5 nariaki
5 nari
5 narato
5 narahiko
5 narahashi
5 naozane
5 naoya
5 naosuke
5 naora
5 naonobu
5 naomichi
5 naomi
5 naoko
5 naoki
5 naohiro
5 naofumi
5 naoaki
5 nanami
5 nanako
5 nana
5 nampo
5 namiyo
5 namiko
5 namiki
5 namika
5 namie
5 nami
5 namboku
5 nakazo
5 nakazawa
5 nakayama
5 nakatoni
5 nakata
5 nakasone
5 nakasawa
5 nakasato
5 nakao
5 nakano
5 nakanishi
5 nakamura
5 nakamoto
5 nakamaro
5 nakajima
5 nakahara
5 nakagawa
5 nakae
5 nakadan
5 nakadai
5 nakada
5 naizen
5 naito
5 nahoko
5 naho
5 nagumo
5 nagatsuka
5 nagata
5 nagase
5 nagasawa
5 naganori
5 nagano
5 nagai
5 nagahama
5 mutsuko
5 mutsohito
5 mushanokoji
5 murkami
5 murasaki
5 murai
5 munkata
5 munemori
5 motoyuki
5 mototsune
5 motonobu
5 moto
5 moromao
5 morishita
5 morimasa
5 morie
5 monomonoi
5 momoru
5 mokichi
5 mojo
5 mochihito
5 mizuno
5 mizoguchi
5 miyo
5 miyamoto
5 miyake
5 miyagi
5 miwa
5 mitsuzuka
5 mitsuwa
5 mitsunari
5 mitsukuni
5 mitsuko
5 mitsuhide
5 mitsuharu
5 mito
5 misato
5 misao
5 misa
5 mio
5 minobe
5 mino
5 minatoya
5 minamoto
5 minako
5 minabuchi
5 mimasuya
5 miliko
5 miiko
5 mihoko
5 mihashi
5 mifune
5 midori
5 michizane
5 michinori
5 michinaga
5 michihiro
5 michi
5 megumi
5 megu
5 mazawa
5 mazaki
5 mayumi
5 mayuko
5 mayoko
5 mayo
5 matsuzawa
5 matsuya
5 matsuta
5 matsushita
5 matsushina
5 matsuoka
5 matsumoto
5 matsumara
5 matsukata
5 matsudaira
5 matsu
5 matoke
5 matashichi
5 matano
5 masuzoe
5 masutaro
5 masumi
5 masuko
5 masuhiro
5 masudu
5 masoni
5 mashita
5 mashai
5 masazumi
5 masayoshi
5 masato
5 masashige
5 masashi
5 masaoka
5 masao
5 masanobu
5 masami
5 masakazu
5 masahiko
5 masafumi
5 maruyama
5 marugo
5 mariko
5 maresuke
5 manabu
5 mamoru
5 makuda
5 makioka
5 makiguchi
5 maiko
5 magobei
5 maemi
5 maeda
5 machiko
5 dino
5 cvsuser
5 amanda
=====ID一覧(以下略)=====
上は使用回数5回以上のユーザーIDの一覧です。

以前、不正アクセスを試みるユーザーIDは、「root」が圧倒的に多く、全体の半分近くを占めていたのですが、なぁんと「root」がほとんど消えていることが分かります。また、「root」以外のユーザーIDも、以前は「Bill」だとか「Gates」だとか、日本人名ではなく欧米諸国で使われる名前が圧倒的だったのですが、それが日本人風に変化してきています。
この傾向は、どうも「dd_ssh」の登場以来、顕著になってきた様で、もしかすると「dd_ssh」ってアタック辞書を状況に合わせて(アタックする国によって)動的に変える機能を持っているのかもしれません。また、これは考えたくないことですが、dd_ssh の改造を日本人がやった可能性もあります。
ええと、掲載しませんが、ユーザーIDとペアになるパスワードですが、以前はユーザーID「root」に対して様々なパスワードを試してきていたのですが、最近の傾向ではユーザーIDと同じパスワード、「qwerty」とか「123」とかキーボード配列に依存した「良くある」パスワードを数回試して次のユーザーIDに移ると言った手口が多くなってきているようです。

さてさて、以上の観測事実から、dd_ssh(には限らず)対策には、以下の点が重要なようです。
  • 「単純な氏名のID」は使わない
  • 「学籍番号」のような連番は絶対駄目
  • 「固有名詞+数文字のランダムな文字」みたいな感じでユーザーIDを作成する

    これまでは、パスワードが需要なセキュリティ上のアイテムでしたが、それとペアになるユーザーIDにも、その役割を分担させる時期がきているようです。
  • 2010年10月19日火曜日

    ネットワークアドレス計算アプレットのソース

    あー、こすげです。前エントリのソースコードを掲載するのを忘れていましたので、載せておきますね。

    package com.google.kosugetti.netcalc;
    
    import java.applet.Applet;
    import java.awt.HeadlessException;
    import java.awt.*;
    import java.awt.event.*;
    import java.util.*;
    import javax.swing.*;
    
    public class NetCalc extends Applet {
        static final long serialVersionUID = 1;
        JTextField  txtIPArea;
        JTextField  txtResult;
        JButton     btnExec;
    
        public NetCalc() throws HeadlessException {
            txtIPArea = new JTextField("");
            txtResult = new JTextField("");
            btnExec   = new JButton("計算");
        }
        public void init() {
            String  param = getParameter("iparea");
            if (param != null) {
                txtIPArea.setText(param);
            }
            this.setLayout(new GridLayout(3, 1));
            this.add(txtIPArea);
            this.add(txtResult);
            this.add(btnExec);
    
            btnExec.addActionListener(new BtnExecClicked());
            txtIPArea.addKeyListener(new TxtIPAreaTyped());
        }
        public class BtnExecClicked implements ActionListener {
            public void actionPerformed(ActionEvent e) {
                execCalcCDIR();
            }
        }
        public class TxtIPAreaTyped extends KeyAdapter {
            public void keyPressed(KeyEvent e) {
                if (e.getKeyCode() == KeyEvent.VK_ENTER) {
                    execCalcCDIR();
                }
            }
        }
        private void execCalcCDIR() {
            long    startAddress = 0L;
            long    endAddress = 0L;
            long    andValue;
            int     mask = 0;
            String  s = txtIPArea.getText();
            StringTokenizer t = new StringTokenizer(s, " .-\t", false);
            if (t.countTokens() == 8) {
                try {
                    for (int i = 0; i < 4; i++) {
                        startAddress <<= 8;
                        startAddress += Integer.parseInt(t.nextToken());
                    }
                    for (int i = 0; i < 4; i++) {
                        endAddress <<= 8;
                        endAddress += Integer.parseInt(t.nextToken());
                    }
                    andValue = startAddress ^ endAddress;
                    for (mask = 0; mask < 32; mask++) {
                        if ((andValue & 0x01) == 0x00) {
                            break;
                        }
                        andValue >>= 1;
                    }
                    int     top = (int)(startAddress & 0xff000000) >> 24;
                    if (top < 0) {
                        top += 256;
                    }
                    String   result =
                                Integer.toString(top) + "." +
                                Integer.toString((int)(startAddress & 0x00ff0000) >> 16) + "." +
                                Integer.toString((int)(startAddress & 0x0000ff00) >>  8) + "." +
                                Integer.toString((int)(startAddress & 0x000000ff)      ) + "/" +
                                Integer.toString(32 - mask);
                    txtResult.setText(result);
                    txtResult.requestFocus();
                    txtResult.selectAll();
                } catch (NumberFormatException e) {
                    txtResult.setText("IPAddressが不正");
                }
            } else {
                txtResult.setText("IPAddressが不正");
            }
        }
    }
    で、いつも思うんですけど、javaってunsignedのデータ型がないんで、苦労するんですよね。
    あ、このソースのライセンスは、GPLv2ということで

    てすとプリーズ

    すみません、これは、アプレットのテストです。




    え、何のテストかって? そりゃアプレットのテストなんですけどね、whois データベースで、ipアドレス引っ張ると、ネットーワークってこんな感じで表示されちゃうんですね(場所によりますけど)。

    [Querying whois.ripe.net]
    [whois.ripe.net]
    % This is the RIPE Database query service.
    % The objects are in RPSL format.
    %
    % The RIPE Database is subject to Terms and Conditions.
    % See http://www.ripe.net/db/support/db-terms-conditions.pdf
    
    % Note: This output has been filtered.
    %       To receive output for a database update, use the "-B" flag.
    
    % Information related to '212.154.153.80 - 212.154.153.95'
    
    inetnum:        212.154.153.80 - 212.154.153.95
    netname:        IP_One_Touch_Technologies
    descr:          Erzhan Nurshanov
    descr:          Co-location servers
    descr:          Almaty
    country:        KZ
    admin-c:        EN1258-RIPE
    tech-c:         EN1258-RIPE
    status:         ASSIGNED PA
    mnt-by:         KNIC-MNT
    source:         RIPE # Filtered
    
    person:         Erzhan Nurshanov
    address:        LLC "One Touch Technologies"
    address:        Almaty, 050043, microdistrict Orbita-3, 25, ap.8
    address:        Kazakhstan
    phone:          +7 727 3943755
    e-mail:         info@ott.kz
    nic-hdl:        EN1258-RIPE
    source:         RIPE # Filtered
    
    % Information related to '212.154.128.0/17AS9198'
    
    route:        212.154.128.0/17
    descr:        Kazakhtelecom Data Network Administration
    origin:       AS9198
    mnt-by:       KNIC-MNT
    source:       RIPE # Filtered
    
    % Information related to '212.154.128.0/19AS9198'
    
    route:        212.154.128.0/19
    descr:        Kazakhtelecom Data Network Administration
    origin:       AS9198
    mnt-by:       KNIC-MNT
    source:       RIPE # Filtered
    

    inetnum:        212.154.153.80 - 212.154.153.95
    

    って書き方、iptables でパケット弾くにはすげー使いにくいわけです。「212.154.153.80/28」なんてCDIR形式で表示してほしいんですよね。でも、しょうがないので、「212.154.153.80 - 212.154.153.95」ってネットワークの表記から「212.154.153.80/28」というCDIR形式への変換を行う、アプレット作って使っているんですけど、それがここで動くかどうか。。。それのテストです。

    ちなみに、一番上の欄に「212.154.153.80 - 212.154.153.95」って入れて、一番下のボタンをクリックすると、真ん中の欄にCDIR形式にしたネットワークの表記が出てきます(これを書いている時点では、「出てくるはず」ですね)。さぁ、保存して動くかどうかやってみよう。

    あ、このアプレットに、バグはありますよー。1つのCDIRで表すことができない範囲を指定した場合、広く出ちゃいます

    げぇ~まともじゃん

    こんにちは、こすげです

    この前書いたように先週の日曜日に情報処理技術者試験が行われたようです。そのときの問題と解答がIPAのサイトに公開されています。で、午前の問題を見た限りにおいての感想は、「おー、問題の使いまわしをするようになってから、ずいぶんまともになったじゃん」ってことです。ずーっと以前は「同じ問題を使わない」ということで、何問というか珍問が見受けられた情報処理技術者試験の午前問題ですが、(良問を)使いまわすことによって、ようやくまともになってきたんじゃないかと思います。
    ただ、出題される問題を使いまわすことで、ただ過去に出題された問題をやっておけば基礎力がなくても合格できちゃうって問題があるのですが、それに対して、IPAは午後の問題では基礎力を重視する姿勢を打ち出して?、今回それに沿った出題がちゃんとされていることに、(いい意味で)驚きました。

    上のリンクをたどって、午後の問題を見てほしいんですが、私が問題の質を評価できる問は、以下の
    問1 ハードウエア(組み込みシステム)
    問3 ネットワーク(CRC)
    問4 情報セキュリティ(認証システム)
    問8 データ構造及びアルゴリズム(符号付き2進数の乗算)
    問9 ソフトウエア開発(C言語)
    問11 ソフトウエア開発(Java言語)
    問12 ソフトウエア開発(アセンブラ)
    ぐらいなんです。ですが、いずれも「概ね」良問だとおもいます。

    実は午後の問題は、情報科学や情報技術の勉強を始めて数年の人には幅が広すぎるのですが、ちゃんと問題分の中に解説があるので、それをきちんと読みこなすことができれば、まったく知らない分野からの出題であっても、困難なく解けるようになっているんですね。今回は、幅を広げながら、問題の中での解説がきちんと行われており、国語力や数学力と、(いままで自分が知らない分野を理解しなければならないという)困難に立ち向かう覚悟を持っていれば、ちゃんと解ける問題ばかりです。ただ、試験時間が人によっては、ちょい足りないかもしれないけど。

    特に問3は問題としてよりも、この問題を教材にして、CRCのことを教えたいくらい良い出来ですね。
    あー、でもソフトウエア開発に関して言えば、C言語やJava言語の難易度と、アセンブラの難易度が揃ってない(アセンブラが極端に簡単)気がします。その辺が問題かな。

    あ、ついでにこれも書いておこう。

    基本情報技術者試験のアセンブラで採用されている「システム COMET II」なんですけど、これぜひ、スタックポインタと汎用レジスタの間で、データのやりとりが行えるようにしてほしいなぁ。現状では、スタックポインタの値はOSによって制御され、プログラムでは操作できないような仕様になってますけどね。
    それは、なぜかというと、近代的なプログラミング言語では、関数(サブルーチン、メソッド、プロシージャ、、、いろーんな呼び方がありますけど)への値の引き渡しにはスタックを使うのが当たり前だし、一時的な変数もスタック上に置かれることが多いからです。
    まあ、それが原因で、バッファーオーバーフローなんていう脆弱性も生まれちゃっているわけで、スタック領域をプログラムが利用することは、現代のプログラミング言語の負の側面も含めた常識になっているわけです。それを情報処理技術者試験のアセンブラで取り上げることは、情報処理技術者の質の向上と言った面で意味のあることになります。まあ、不満があるにはあるのですが、スタックポインタと汎用レジスタの間でのデータのやりとりが可能になれば、近代的な意味で出題に幅が広がるわけですね。
    いつまでもサブルーチンへの値の引き渡しに、レジスタつかっているなんて、ないでしょうよ。レジスタ依存していたら、それこそ移植性に問題でちゃうじゃん。

    こんな問題も作れるしさぁ。。。

    問 以下のアセンブルコードは、どのC言語のプログラムをコンパイルしたものか。選択肢の中から記号で答えよ。

    問 C言語から4バイト長符号なし整数に格納したIPアドレスとサブネットマスクを引き渡すとそのネットワークのブロードキャストアドレスを4バイト長符号なし整数を戻す関数 unsigned int getBroadcastAddress(unsigned int ip, unsigned int mask) を、CASL IIで記述した以下のプログラムについて設問に答えよ。ただし、C言語のプログラムを「システム COMET II」で動作させるための、拡張OSやコンパイラなどの仕様は巻末の資料を参照すること。

    うぷぷ。

    なんだったら、整数限定のサブセットでシステム COMET II用、C言語のクロスコンパイラ、オープンソースで提供してもいいでっせぇ(大笑。

    パブリックコメントの募集があったら、この件を出しておこう。。。って、忘れるんだよなぁ、いつも(笑

    2010年10月18日月曜日

    dd_ssh なのかな

    こすげです。

    先月からSSHポートに対する攻撃が増えてしています(このページの一番下をご覧ください)が、どうもそれは「dd_ssh」なるブルートフォース・アタックが原因みたいです。どうも、これは、phpMyAdminというツールの脆弱性を使って、/tmp に、dd_ssh という ssh ポートを対象にブルートフォース・アタックをやらかすものみたいですね(情報源はここ)。この記事が出たのが8月の中旬ですけど、9月からうちのサイトへの攻撃も増加傾向にあります。
    一時、日本国内からの攻撃も減っていたのですが、今月に入ってから連続して4件攻撃が起きています。そのほとんどが、dd_sshの仕業みたいです。で、このツール、どこかで日本のサイト用の辞書を取り込んだらしく、日本人の名前を使ってくるので、よくある名字や名前をIDにしちゃっているところは、注意が必要でしょうね。
    うちの学校も、以前ログインIDは学籍番号を使用していたのですが、それだと1人のIDが分かると芋づる式にIDが分かっちゃう。だから、ログインIDも「学籍番号+ランダムな文字列」にして、芋づる式に分からない様にしろって、口を酸っぱくして言っていたんですが、ようやく今年度からそうなったみたいです。

    しかし、phpMyAdminってツールは使ったことが無いのでわからないのですが、そんなに便利なツールなんでしょうかねぇ。sshで接続できればそれで済んじゃうような気がするのですが、最近の技術者はコマンドラインを叩くのがそんなに嫌なのかなぁ。
    でも、考えてみると、どうもサーバの設定にGUIツールを使うこと、それがクラッカー天国になっている原因じゃないようです。様はLinuxでもなんでも、サーバを立てる敷居が低くなっていることが問題で、よくわかっていない技術者、会社でも簡単にサーバを立てることができてしまうことが、原因みたいです。だって、phpMyAdminを使ったって、ちゃんとセキュリティを確保することは可能なはずなんですけど、それができていないんですから。

    どうも僕達は、都合の悪いことは道具のせいにしたがる傾向あるので、phpMyAdminが悪いなんて思っちゃうわけですね。

    ITProにも「Linuxは本当に安くて安心か」って記事が出ていましたけど(記事を読んでみると僕の主張とはちがー内容ですけどね)、Linuxを使っても安心じゃないんです。でもWindowsは、Linux以上に技術者の質がものをいうと思いますね。生半可な知識でサーバを立ててインターネットで公開したら、即、って感じがします。もちろん十分に熟達した技術者がサーバを立てれば、どのOSを使っても比較的安全なサイトが出きるんでしょうね。僕ではWindowsサーバは扱えませんが。。。

    まず、インターネット上でセキュリティを確保するためには、何をすることが必要か。そのことが分からず、ノウハウ本を見よう見まねでサーバを立てちゃう、安易な技術者や会社が後を立たないのが原因の様に思います。もちろん、僕のサイトだって、いつクラックされるか分かりません。だから偉そうなことは言えないのですが。。。

    「他力本願」、いやぁ、僕、この言葉大好きなんですけど(笑。なんだかなぁ。世間はおじさんに楽をさせてくれない。こんな世の中間違っているね。絶対

    がんばれ!!!ゲイツくん 関連のメモ

    こすげです。最近めっきり歳をとってしまい、こんなことも覚えられなくなってしまったので、メモを載せておきます。
    え、「ここにメモを作ったことを忘れないか」って? あー、ここに載せておけば誰かさんに聞けば、どこにあるか教えてもらえますから。

    Linux初出

    雇用対策ジョーク

    KNOPPIX初出

    いちばん有名なスパムメールの話

    KNOPPIX for MPI

    2010年10月17日日曜日

    KNOPPIXの思い出

    こんばんは、こすげです
    須崎さんが「日本OSS貢献者賞」を受賞し、うちの卒業生の塚田君が「2010年度日本OSS奨励賞」を受賞したので、まあ、なんというか私とKNOPPIXとの出会いと思い出をまとめておこうと思います。

    KNOPPIXのことを始めて知ったのは、がんばれ!!ゲイツ君というWebページででした。当時、僕はうちの学校で「コンピュータネットワーク研究科」という学科の責任者をしていて、学科の主要OSとしてLinuxを使っていたのですが、学生がなかなか自宅のパソコンでLinuxをインストールしてくれないことに悩んでいたんですね。どんなに学生に対してサポートをしてもおよそ3割の学生しか、自宅の環境にLinuxをインストールしてくれない。それを何とかしたいと思っていました。
    そんなときに、がんばれ!!ゲイツ君に掲載されていたKNOPPIXに飛びついたわけですが、それは2003年初秋のことだったと思います。ちょうど直後に、新宿NSビルで「Linux World」が開催され、そこに出展していた須崎さんと始めてお会いしました。
    そのときに、今でも使っていますが、algolAlpha という教育用インタープリタで、「関西オープンソース・フリーソフト」というイベントに出店する予定でしたので、そのことを須崎さんに伝え、大阪で須崎さんとKNOPPIXのBOFに参加することになりました。そのBOFで、拓殖大学の佐々木先生や、Alpha Systems の千葉さんとも知りありになり、私のKNOPPIXライフが開始されることになったのです。
    翌年の3月、慶応大学湘南校舎で開催された情報処理学会で東北学院大学の志子田先生とも知り合いになり、私のKNOPPIX人脈はできあがったのですが、そのときに特筆すべきことは、「USB-KNOPPIX」のアイディアがパネルセッションでの雑談で生まれたことです。
    今でこそ、USBメモリはとても安価になって、しかも、USBメモリからPCを起動するという発想は常識になっていますが、2004年当時はかなり高価で、USBメモリにOSを格納してそこからPCをブートするという発想はありませんでした。ですが、うちの丸山君の「syslinux」をUSBメモリーからKNOPPIXをブートすることが可能ではないかという発想で作られたKNOPPIX512Mは動作するマザーボードのBIOSメーカーは選ぶものの、実用レベルでUSBメモリーからOSを起動する先駆けになった、とても思い出深いものになりました。
    その後、USB-KNOPPIXは256MBバージョンの開発、64MByteバージョンの開発などさまざまなバージョンが開発され、Trubo Linuxが発売した wizpy にもその技術が利用されるなどしましたが、現在ではUSBメモリからのOSの起動は常識的なものになってゆきました。うちの実習室で実証実験を行い、それがCECのOSCプロジェクトの仙台チームで利用された、CFカードをIDE接続しそこからOSを起動する技術の開発など、さまざまな面での展開をすることができました。
    そして、現在日本各地で実施されている「オープンソース・カンファレンス」の初回をうちの学校の7号館で行えたことも良い思い出です。
    また、今では学校関係のCMSとして広く使われている「NetCommons」の国立情報学研究所の新井先生とも、共同研究を行わせて頂き、NetCommosの研修用に「KNOPPIX for NetCommos」の開発を行い、そして技術移転を行ったことも良い思い出です。実はこの10月の頭に、新車を買ったのが嬉しくて、嫁の父母を誘って草津温泉に行ったのですが、その道すがら軽井沢のそば屋で新井先生ご一行に、偶然お会いしたのには、とても驚きました。

    こう書いてみると、単なるLinuxユーザーであった私が、オープンソース・シーンに登場できたのも、KNOPPIXのおかげと言うわけで、今回の須崎さんの「日本OSS貢献者賞」受賞は、ある意味で自分が受賞したことよりも、何倍も嬉しいわけです。

    と、同時にうちの卒業生の塚田君が「2010年度日本OSS奨励賞」をしたことも、すごい嬉しい。塚田君のことは、彼が1年の冬に行われた、卒業生の作品発表会で知ったのですが、確か「タイムレコーダー」のプログラムで卒業生に混じって、1年生の塚田君が作品発表をしていたときだと思います。それ以来、彼の活躍は漏れ聞いていたのですが、3年(塚田君がいたのは3年生学科)のときに、ぜひ学会発表をしてもらおうということで、情報処理学会に発表を行い、その予稿、および発表の指導をしたわけです。そのときのテーマが、「KNOPPIXを使ってPHP学習環境を作成する」というものであり、やっぱりKNOPPIXに関連したものであったわけです。

    まあ、何にしても、KNOPPIXは僕にとって、忘れ得ぬLinuxのディストリビューションであり、もし私が死んで(多分いずれ死ぬでしょう)墓碑銘が必要になった時には、「USB-KNOPPIX」と彫ってもらおうかと本気で考えていたりする今日この頃です。

    実装屋として、OS作りやプロデュースなどは専門外で、自分にとって珠玉のプロダクトは、教育用インタープリタである「algol Alpha」と、「open CASL」なのですが、人生ままならないもので、KNOPPIXでの方が有名になってしまったのも、運命というものなんでしょうね。
    しかし、USB-KNOPPIXが始めて起動した時に、体中が血液が沸き立ち逆流したような感覚は、いまでも忘れられない感覚です。

    2010年10月16日土曜日

    テンプレート

    こんにちは、こすげです

    今日はすることがないのに出勤なので、暇をもてあましてます。午後は休みを取ってかえろう。

    で、前からもここで愚痴っているのですが、不正アクセスが絶えない。不正アクセスのリアルタイム情報は、ここここで公開しているのですが、まー、飽きもせずよく来ること。でも考えてみれば、「飽きない」「疲れない」「正確」「速い」ってのが、コンピュータが人間より優れている点なので、しょうがないかなとも思います。

    僕は日本から不正アクセスがあったときには、そのサイトの管理者などに通報しているのですが、ある特定のレンタルサーバ会社のホストから不正アクセスがあったので、サイトの管理者とそのレンタルサーバの会社に通報したところ以下のようなメールが戻ってきました

    =====返信メール(ここから)=====
    日本電子専門学校 情報系主任研究員
    小菅 貴彦 様


    お世話になっております。
    ○○○○○○○○○○株式会社と申します。

    この度は大変ご迷惑をお掛けしまして、誠に申し訳ございません。

    該当IPアドレスを調査したところ、
    弊社契約者が利用するレンタルサーバにて、
    特定アカウントがクラッキングを受け不正なファイルが設置されていることを
    確認いたしました。

    上記に伴いクラッキングを受けたアカウントのパスワードを削除の上
    不正ファイルの移動を行ったことをご報告いたします。
    =====返信メール(ここまで)=====

    このメールを受けたのが、今年の8/20なんです。で、また2~3日前に、同じレンタルサーバ会社のホストから不正アクセスを受けて、通報メールを出したのですが、その内容が

    =====返信メール(ここから)=====
    小菅 貴彦 様


    お世話になっております。
    ○○○○○○○○○○株式会社と申します。

    この度は大変ご迷惑をお掛けしまして、誠に申し訳ございません。

    該当IPアドレスを調査したところ、
    弊社契約者が利用するレンタルサーバにて、
    特定アカウントがクラッキングを受け不正なファイルが設置されていることを
    確認いたしました。

    上記に伴いクラッキングを受けたアカウントのパスワードを無効とした上
    不正ファイルの移動を行ったことをご報告いたします。

    ※上記に併せサーバ設定を見直すよう
    契約者まで連絡しております。
    =====返信メール(ここまで)=====

    わはは、お分かりでしょうか、8/10に受信したお詫びメールとほぼ同文なんですね。特に

    =====ここから=====
    該当IPアドレスを調査したところ、
    弊社契約者が利用するレンタルサーバにて、
    特定アカウントがクラッキングを受け不正なファイルが設置されていることを
    確認いたしました。

    上記に伴いクラッキングを受けたアカウントのパスワードを無効とした上
    不正ファイルの移動を行ったことをご報告いたします。
    =====ここまで=====

    の部分は、まったく同文、テンプレートなんですね。わはは、このレンタルサーバの会社では、不正アクセスのお詫びってテンプレートを作るほど日常茶飯事なんでしょうかねぇ。うちに不正アクセスをしてきた手口から考えると、phpMyAdminだったかな、たぶんそのツールの脆弱性をついてアカウントハックされ、なにやらスクリプトを仕込まれた感じなんですけど、いちいちお詫びメールを書くのもめんどくさいので、テンプレートを作ったんでしょうか。

    まあ、phpMyAdminってソフトには脆弱性がたくさんあるというか、わかっているというのか、以下のようなHTTPに対するアクセスが多数観測されています。

    =====アクセスログ(ここから)=====
    [Tue Oct 12 04:02:36 2010] [error] [client 213.136.108.190] File does not exist: /var/www/html/w00tw00t.at.blackhats.romanian.anti-sec:)
    [Tue Oct 12 04:02:38 2010] [error] [client 213.136.108.190] File does not exist: /var/www/html/scripts
    [Tue Oct 12 04:02:38 2010] [error] [client 213.136.108.190] File does not exist: /var/www/html/admin
    [Tue Oct 12 04:02:39 2010] [error] [client 213.136.108.190] File does not exist: /var/www/html/admin
    [Tue Oct 12 04:02:40 2010] [error] [client 213.136.108.190] File does not exist: /var/www/html/admin
    [Tue Oct 12 04:02:41 2010] [error] [client 213.136.108.190] File does not exist: /var/www/html/db
    [Tue Oct 12 04:02:42 2010] [error] [client 213.136.108.190] File does not exist: /var/www/html/dbadmin
    [Tue Oct 12 04:02:42 2010] [error] [client 213.136.108.190] File does not exist: /var/www/html/myadmin
    [Tue Oct 12 04:02:43 2010] [error] [client 213.136.108.190] File does not exist: /var/www/html/mysql
    [Tue Oct 12 04:02:44 2010] [error] [client 213.136.108.190] File does not exist: /var/www/html/mysqladmin
    [Tue Oct 12 04:02:45 2010] [error] [client 213.136.108.190] File does not exist: /var/www/html/typo3
    [Tue Oct 12 04:02:45 2010] [error] [client 213.136.108.190] File does not exist: /var/www/html/phpadmin
    [Tue Oct 12 04:02:46 2010] [error] [client 213.136.108.190] File does not exist: /var/www/html/phpMyAdmin
    [Tue Oct 12 04:02:47 2010] [error] [client 213.136.108.190] File does not exist: /var/www/html/phpmyadmin
    [Tue Oct 12 04:02:48 2010] [error] [client 213.136.108.190] File does not exist: /var/www/html/phpmyadmin1
    [Tue Oct 12 04:02:48 2010] [error] [client 213.136.108.190] File does not exist: /var/www/html/phpmyadmin2
    [Tue Oct 12 04:02:49 2010] [error] [client 213.136.108.190] File does not exist: /var/www/html/pma
    [Tue Oct 12 04:02:50 2010] [error] [client 213.136.108.190] File does not exist: /var/www/html/web
    [Tue Oct 12 04:02:51 2010] [error] [client 213.136.108.190] File does not exist: /var/www/html/xampp
    [Tue Oct 12 04:02:52 2010] [error] [client 213.136.108.190] File does not exist: /var/www/html/web
    [Tue Oct 12 04:02:52 2010] [error] [client 213.136.108.190] File does not exist: /var/www/html/php-my-admin
    [Tue Oct 12 04:02:53 2010] [error] [client 213.136.108.190] File does not exist: /var/www/html/websql
    [Tue Oct 12 04:02:54 2010] [error] [client 213.136.108.190] File does not exist: /var/www/html/phpmyadmin
    [Tue Oct 12 04:02:55 2010] [error] [client 213.136.108.190] File does not exist: /var/www/html/phpMyAdmin
    [Tue Oct 12 04:02:55 2010] [error] [client 213.136.108.190] File does not exist: /var/www/html/phpMyAdmin-2
    [Tue Oct 12 04:02:56 2010] [error] [client 213.136.108.190] File does not exist: /var/www/html/php-my-admin
    [Tue Oct 12 04:02:57 2010] [error] [client 213.136.108.190] File does not exist: /var/www/html/phpMyAdmin-2.2.3
    [Tue Oct 12 04:02:58 2010] [error] [client 213.136.108.190] File does not exist: /var/www/html/phpMyAdmin-2.2.6
    [Tue Oct 12 04:02:58 2010] [error] [client 213.136.108.190] File does not exist: /var/www/html/phpMyAdmin-2.5.1
    [Tue Oct 12 04:02:59 2010] [error] [client 213.136.108.190] File does not exist: /var/www/html/phpMyAdmin-2.5.4
    [Tue Oct 12 04:03:00 2010] [error] [client 213.136.108.190] File does not exist: /var/www/html/phpMyAdmin-2.5.5-rc1
    [Tue Oct 12 04:03:01 2010] [error] [client 213.136.108.190] File does not exist: /var/www/html/phpMyAdmin-2.5.5-rc2
    [Tue Oct 12 04:03:02 2010] [error] [client 213.136.108.190] File does not exist: /var/www/html/phpMyAdmin-2.5.5
    [Tue Oct 12 04:03:02 2010] [error] [client 213.136.108.190] File does not exist: /var/www/html/phpMyAdmin-2.5.5-pl1
    [Tue Oct 12 04:03:03 2010] [error] [client 213.136.108.190] File does not exist: /var/www/html/phpMyAdmin-2.5.6-rc1
    [Tue Oct 12 04:03:04 2010] [error] [client 213.136.108.190] File does not exist: /var/www/html/phpMyAdmin-2.5.6-rc2
    [Tue Oct 12 04:03:05 2010] [error] [client 213.136.108.190] File does not exist: /var/www/html/phpMyAdmin-2.5.6
    [Tue Oct 12 04:03:05 2010] [error] [client 213.136.108.190] File does not exist: /var/www/html/phpMyAdmin-2.5.7
    [Tue Oct 12 04:03:06 2010] [error] [client 213.136.108.190] File does not exist: /var/www/html/phpMyAdmin-2.5.7-pl1
    [Tue Oct 12 04:03:07 2010] [error] [client 213.136.108.190] File does not exist: /var/www/html/phpMyAdmin-2.6.0-alpha
    [Tue Oct 12 04:03:08 2010] [error] [client 213.136.108.190] File does not exist: /var/www/html/phpMyAdmin-2.6.0-alpha2
    [Tue Oct 12 04:03:08 2010] [error] [client 213.136.108.190] File does not exist: /var/www/html/phpMyAdmin-2.6.0-beta1
    [Tue Oct 12 04:03:09 2010] [error] [client 213.136.108.190] File does not exist: /var/www/html/phpMyAdmin-2.6.0-beta2
    [Tue Oct 12 04:03:10 2010] [error] [client 213.136.108.190] File does not exist: /var/www/html/phpMyAdmin-2.6.0-rc1
    [Tue Oct 12 04:03:11 2010] [error] [client 213.136.108.190] File does not exist: /var/www/html/phpMyAdmin-2.6.0-rc2
    [Tue Oct 12 04:03:12 2010] [error] [client 213.136.108.190] File does not exist: /var/www/html/phpMyAdmin-2.6.0-rc3
    [Tue Oct 12 04:03:12 2010] [error] [client 213.136.108.190] File does not exist: /var/www/html/phpMyAdmin-2.6.0
    [Tue Oct 12 04:03:13 2010] [error] [client 213.136.108.190] File does not exist: /var/www/html/phpMyAdmin-2.6.0-pl1
    [Tue Oct 12 04:03:14 2010] [error] [client 213.136.108.190] File does not exist: /var/www/html/phpMyAdmin-2.6.0-pl2
    [Tue Oct 12 04:03:15 2010] [error] [client 213.136.108.190] File does not exist: /var/www/html/phpMyAdmin-2.6.0-pl3
    [Tue Oct 12 04:03:15 2010] [error] [client 213.136.108.190] File does not exist: /var/www/html/phpMyAdmin-2.6.1-rc1
    [Tue Oct 12 04:03:16 2010] [error] [client 213.136.108.190] File does not exist: /var/www/html/phpMyAdmin-2.6.1-rc2
    [Tue Oct 12 04:03:17 2010] [error] [client 213.136.108.190] File does not exist: /var/www/html/phpMyAdmin-2.6.1
    [Tue Oct 12 04:03:18 2010] [error] [client 213.136.108.190] File does not exist: /var/www/html/phpMyAdmin-2.6.1-pl1
    [Tue Oct 12 04:03:18 2010] [error] [client 213.136.108.190] File does not exist: /var/www/html/phpMyAdmin-2.6.1-pl2
    [Tue Oct 12 04:03:19 2010] [error] [client 213.136.108.190] File does not exist: /var/www/html/phpMyAdmin-2.6.1-pl3
    [Tue Oct 12 04:03:20 2010] [error] [client 213.136.108.190] File does not exist: /var/www/html/phpMyAdmin-2.6.2-rc1
    [Tue Oct 12 04:03:21 2010] [error] [client 213.136.108.190] File does not exist: /var/www/html/phpMyAdmin-2.6.2-beta1
    [Tue Oct 12 04:03:22 2010] [error] [client 213.136.108.190] File does not exist: /var/www/html/phpMyAdmin-2.6.2-rc1
    [Tue Oct 12 04:03:22 2010] [error] [client 213.136.108.190] File does not exist: /var/www/html/phpMyAdmin-2.6.2
    [Tue Oct 12 04:03:23 2010] [error] [client 213.136.108.190] File does not exist: /var/www/html/phpMyAdmin-2.6.2-pl1
    [Tue Oct 12 04:03:24 2010] [error] [client 213.136.108.190] File does not exist: /var/www/html/phpMyAdmin-2.6.3
    [Tue Oct 12 04:03:25 2010] [error] [client 213.136.108.190] File does not exist: /var/www/html/phpMyAdmin-2.6.3-rc1
    [Tue Oct 12 04:03:25 2010] [error] [client 213.136.108.190] File does not exist: /var/www/html/phpMyAdmin-2.6.3
    [Tue Oct 12 04:03:26 2010] [error] [client 213.136.108.190] File does not exist: /var/www/html/phpMyAdmin-2.6.3-pl1
    [Tue Oct 12 04:03:27 2010] [error] [client 213.136.108.190] File does not exist: /var/www/html/phpMyAdmin-2.6.4-rc1
    [Tue Oct 12 04:03:28 2010] [error] [client 213.136.108.190] File does not exist: /var/www/html/phpMyAdmin-2.6.4-pl1
    [Tue Oct 12 04:03:29 2010] [error] [client 213.136.108.190] File does not exist: /var/www/html/phpMyAdmin-2.6.4-pl2
    [Tue Oct 12 04:03:29 2010] [error] [client 213.136.108.190] File does not exist: /var/www/html/phpMyAdmin-2.6.4-pl3
    [Tue Oct 12 04:03:30 2010] [error] [client 213.136.108.190] File does not exist: /var/www/html/phpMyAdmin-2.6.4-pl4
    [Tue Oct 12 04:03:31 2010] [error] [client 213.136.108.190] File does not exist: /var/www/html/phpMyAdmin-2.6.4
    [Tue Oct 12 04:03:32 2010] [error] [client 213.136.108.190] File does not exist: /var/www/html/phpMyAdmin-2.7.0-beta1
    [Tue Oct 12 04:03:32 2010] [error] [client 213.136.108.190] File does not exist: /var/www/html/phpMyAdmin-2.7.0-rc1
    [Tue Oct 12 04:03:33 2010] [error] [client 213.136.108.190] File does not exist: /var/www/html/phpMyAdmin-2.7.0-pl1
    [Tue Oct 12 04:03:34 2010] [error] [client 213.136.108.190] File does not exist: /var/www/html/phpMyAdmin-2.7.0-pl2
    [Tue Oct 12 04:03:35 2010] [error] [client 213.136.108.190] File does not exist: /var/www/html/phpMyAdmin-2.7.0
    [Tue Oct 12 04:03:35 2010] [error] [client 213.136.108.190] File does not exist: /var/www/html/phpMyAdmin-2.8.0-beta1
    [Tue Oct 12 04:03:36 2010] [error] [client 213.136.108.190] File does not exist: /var/www/html/phpMyAdmin-2.8.0-rc1
    [Tue Oct 12 04:03:37 2010] [error] [client 213.136.108.190] File does not exist: /var/www/html/phpMyAdmin-2.8.0-rc2
    [Tue Oct 12 04:03:38 2010] [error] [client 213.136.108.190] File does not exist: /var/www/html/phpMyAdmin-2.8.0
    [Tue Oct 12 04:03:39 2010] [error] [client 213.136.108.190] File does not exist: /var/www/html/phpMyAdmin-2.8.0.1
    [Tue Oct 12 04:03:39 2010] [error] [client 213.136.108.190] File does not exist: /var/www/html/phpMyAdmin-2.8.0.2
    [Tue Oct 12 04:03:40 2010] [error] [client 213.136.108.190] File does not exist: /var/www/html/phpMyAdmin-2.8.0.3
    [Tue Oct 12 04:03:41 2010] [error] [client 213.136.108.190] File does not exist: /var/www/html/phpMyAdmin-2.8.0.4
    [Tue Oct 12 04:03:42 2010] [error] [client 213.136.108.190] File does not exist: /var/www/html/phpMyAdmin-2.8.1-rc1
    [Tue Oct 12 04:03:42 2010] [error] [client 213.136.108.190] File does not exist: /var/www/html/phpMyAdmin-2.8.1
    [Tue Oct 12 04:03:43 2010] [error] [client 213.136.108.190] File does not exist: /var/www/html/phpMyAdmin-2.8.2
    [Tue Oct 12 04:03:44 2010] [error] [client 213.136.108.190] File does not exist: /var/www/html/sqlmanager
    [Tue Oct 12 04:03:45 2010] [error] [client 213.136.108.190] File does not exist: /var/www/html/mysqlmanager
    [Tue Oct 12 04:03:46 2010] [error] [client 213.136.108.190] File does not exist: /var/www/html/p
    [Tue Oct 12 04:03:46 2010] [error] [client 213.136.108.190] File does not exist: /var/www/html/PMA2005
    [Tue Oct 12 04:03:47 2010] [error] [client 213.136.108.190] File does not exist: /var/www/html/pma2005
    [Tue Oct 12 04:03:48 2010] [error] [client 213.136.108.190] File does not exist: /var/www/html/phpmanager
    [Tue Oct 12 04:03:49 2010] [error] [client 213.136.108.190] File does not exist: /var/www/html/php-myadmin
    [Tue Oct 12 04:03:50 2010] [error] [client 213.136.108.190] File does not exist: /var/www/html/phpmy-admin
    [Tue Oct 12 04:03:50 2010] [error] [client 213.136.108.190] File does not exist: /var/www/html/webadmin
    [Tue Oct 12 04:03:51 2010] [error] [client 213.136.108.190] File does not exist: /var/www/html/sqlweb
    [Tue Oct 12 04:03:52 2010] [error] [client 213.136.108.190] File does not exist: /var/www/html/websql
    [Tue Oct 12 04:03:53 2010] [error] [client 213.136.108.190] File does not exist: /var/www/html/webdb
    [Tue Oct 12 04:03:54 2010] [error] [client 213.136.108.190] File does not exist: /var/www/html/mysqladmin
    [Tue Oct 12 04:03:55 2010] [error] [client 213.136.108.190] File does not exist: /var/www/html/mysql-admin
    =====アクセスログ(ここまで)=====

    ひぇ~~~~、phpMyAdminの各バージョンを見つけているのかぁ。すげーな、これ。まあ、これを見れば、どんなアプリのどんなバージョンに脆弱性があるかまるわかりなんですけどね。ちなみに、この 213.136.108.190 ってIPアドレス、アフリカのコートジボアールのもので、80番ポートでアクセスしてみると「It works!」って表示されるんで、apacheが動いていそうですね。

    で、たぶん件のレンタルサーバ会社のホストも、こんな感じの攻撃によってアカウントハックされたんじゃないかと思います。アカウントハックされたサイトは、あるNPO法人と、なんとかって自動車関連の会社のサイトなんですけど、そのNPO法人からは
    =====ここから=====
    小菅様

    お世話になります。
    小生、○○○○を運営している○○○○の代表をしている○○○○と申します。
    この度は、ご連絡頂き誠にありがとうございました。また、ご迷惑をおかけし失礼致しました。
    申し訳ありませんでした。
    早速、当サイトの管理をしているシステム会社さんに連絡をし、不正アクセス排除の対応を致した次第です。

    正直、メールを読んで驚きました。
    当サイトは、環境問題を取り扱っているサイトで、こういう表現は正しいかどうかはわかりませんが、真面目に環境を考えている人たちが集うサイトです。加えて研究機関とも連携して貴重なデータ収集も実施しているものですから、今後、さらにセキュリティー・レベルを上げなければと、気付かせていただいた次第です。

    大変ご迷惑をおかけし恐縮していると同時に、貴重なご連絡、誠にありがとうございました。
    感謝申し上げます。

    今後とも、どうぞ宜しくお願い申し上げます。

    以上
    ○○○○拝
    =====ここまで=====

    ってな感じで、すごい真面目なメールが届いたのですが、セキュリティに関して普通の素人さんレベルの知識と、一般社会人として必要にして十分な知識経験をお持ちの方が、うちのサイトに不正アクセスをしてきたサーバーのレンタル主さんなんですね。
    で、アカウントハックってことなんですけど、同じレンタルサーバ会社が運営している、まったく違うレンタル主さんのサーバが、同じような手口でアカウントハックされるって、たしかにレンタル主さんの責任ではあるのでしょうけど、レンタルサーバ会社に問題はないんでしょうかねぇ。どんな契約になっているのかよくわかりませんが、こんな善良で真面目な?レンタル主さんに代わって、このレンタルサーバ業者さん、セキュリティ面でユーザーの信頼を得るためのベストワークをしているとは決して思えなかったりするのですが。。。

    もう1つの自動車関連の会社さんの場合は、もっと問題で、メールを出したら、結果としてリジェクとされて戻ってきちゃったんですけど、そのメールの転送先が丸見え・・・・、IDがエイリアスで、転送先のIDが(その担当さんが退職されたとかかな)無効になって、エイリアスの書き換えが行われていない・・・なぁんて、お粗末な状況で、しかもSMTPサーバの製品名やバージョンまで丸見え・・・。これってレンタルサーバ会社としてやばくない?

    まあ、わりと有名なレンタルサーバ会社さんみたいなんですけど、あんまりお勧めできる会社ではないようです。

    2010年10月15日金曜日

    「2010年度日本OSS貢献者賞・日本OSS奨励賞」

    こすげです。嬉しいことがあったので、本日2度目の投稿です。

    うーん、わたし、とりあえず自称 KNOPPIX 関係者なんですけど、KNOPPIX 関連で、産総研の須崎さんが、「2010年度日本OSS貢献者賞」を受賞したとの知らせが入ってきました。KNOPPIXはCD-ROMから起動するLinuxのディストリビューションの先駆けで、開発はドイツ人なのですが、須崎さんがこれに目をつけ日本語化して公開したものです

    で、実は、うちの卒業生も、同時に「2010年度日本OSS奨励賞」を受賞しちゃったんで、すげーうれしいわけです。

    塚田 朗弘(つかだ あきひろ)⽒
    学校法人 日本電子専門学校内のコミュニティ活動「電設部」においてIT勉強会プロジェクトのリーダ
    ーを務めた。OSS技術者の貴重な情報交換や連携の機会となっている勉強会を学生にも浸透させよう
    と考え、社会人向けの勉強会に積極的に参加するとともに、学生向けの勉強会を主催した。現在は、
    電設部の仲間が立ち上げた「SetucoCMS9」の主要メンバーとして、SourceForge、GitHub等で活動
    を続けている。

    ってのが、受賞の理由なんだそうで。。。自分が受賞したより(しないけど)、たぶん嬉しい

    勝手に圧縮するんじゃねぇよ

    こんにちは、こすげです。
    ブログというのは、更新をすると連続してしまうもので、昨日更新したら今日も更新したくなってしまいました。

    で、今日のお題は、講義ネタについてです。ええと今週末に情報処理技術者試験があるので、嫌で嫌でたまらなかった講義での試験対策も今週で終わり、来週からはまともな(?)ネットワークの講義ができちゃうんですねぇ。学生さんからみたら、災厄のはじまりなんですけどね。

    で、まず初回の講義で、HTTPサーバとWebブラウザのデータのやりとりを tcpdump でリアルタイムに観測するのを実演しようと思って、とりあえず自分でやってみたんですけどね。

    とりあえず、職場のサーバにかーんたんなhtmlドキュメントを作成して、クライアントで tcpdump を起動し、同時にブラウザを起動して、サーバー上のhtmlドキュメントにアクセスしてみました。
    アドレスバーに入力したのは
    「http://kserv.jec.ac.jp/test.html」
    なんで、まず、「http:」ってのは HTTPプロトコルだよーん。って意味で、「kserv.jec.ac.jp」はコンテンツが置いてあるサーバのFQDN、で、そのサーバの「/test.html」ってコンテンツを取ってきて表示しろって意味だってことは、さらりと流して(こんなこともわかんない、想像できないなら、情報科学や情報技術を学ぶ資格なし)ですね、さくっとパケットの中身を見ちゃう訳です。
    # tcpdump -vv -s 8192 -X -i eth0 tcp port http
    tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 8192 bytes
    
    コネクション張り(Client->Server SYN)
    11:44:19.516906 IP (tos 0x0, ttl 64, id 37211, offset 0, flags [DF], proto TCP (6), length 60)
        kosuge00.jd.jec.ac.jp.50233 > kserv.jec.ac.jp.http: Flags [S], cksum 0x988d (correct), seq 1342296679, win 5840, options [mss 1460,sackOK,TS val 344892 ecr 0,nop,wscale 6], length 0
     0x0000:  4500 003c 915b 4000 4006 3af1 c0a8 0110  E..<.[@.@.:.....
     0x0010:  da2d d289 c439 0050 5001 d267 0000 0000  .-...9.PP..g....
     0x0020:  a002 16d0 988d 0000 0204 05b4 0402 080a  ................
     0x0030:  0005 433c 0000 0000 0103 0306            ..C<........
    
    コネクション張り(Server -> Client SYN+ACK)
    11:44:19.523040 IP (tos 0x0, ttl 62, id 0, offset 0, flags [DF], proto TCP (6), length 60)
        kserv.jec.ac.jp.http > kosuge00.jd.jec.ac.jp.50233: Flags [S.], cksum 0xb20a (correct), seq 1515273536, ack 1342296680, win 5792, options [mss 1460,sackOK,TS val 1510733064 ecr 344892,nop,wscale 2], length 0
     0x0000:  4500 003c 0000 4000 3e06 ce4c da2d d289  E..<..@.>..L.-..
     0x0010:  c0a8 0110 0050 c439 5a51 3d40 5001 d268  .....P.9ZQ=@P..h
     0x0020:  a012 16a0 b20a 0000 0204 05b4 0402 080a  ................
     0x0030:  5a0b f508 0005 433c 0103 0302            Z.....C<....
    
    コネクション張り(Client -> Server ACK)
    11:44:19.523130 IP (tos 0x0, ttl 64, id 37212, offset 0, flags [DF], proto TCP (6), length 52)
        kosuge00.jd.jec.ac.jp.50233 > kserv.jec.ac.jp.http: Flags [.], cksum 0xf70f (correct), seq 1, ack 1, win 92, options [nop,nop,TS val 344898 ecr 1510733064], length 0
     0x0000:  4500 0034 915c 4000 4006 3af8 c0a8 0110  E..4.\@.@.:.....
     0x0010:  da2d d289 c439 0050 5001 d268 5a51 3d41  .-...9.PP..hZQ=A
     0x0020:  8010 005c f70f 0000 0101 080a 0005 4342  ...\..........CB
     0x0030:  5a0b f508                                Z...
    
    HTTPのGETコマンド(client -> Server GET /test.html .......)
    11:44:19.523466 IP (tos 0x0, ttl 64, id 37213, offset 0, flags [DF], proto TCP (6), length 516)
        kosuge00.jd.jec.ac.jp.50233 > kserv.jec.ac.jp.http: Flags [P.], cksum 0x7066 (incorrect -> 0xefd4), seq 1:465, ack 1, win 92, options [nop,nop,TS val 344899 ecr 1510733064], length 464
     0x0000:  4500 0204 915d 4000 4006 3927 c0a8 0110  E....]@.@.9'....
     0x0010:  da2d d289 c439 0050 5001 d268 5a51 3d41  .-...9.PP..hZQ=A
     0x0020:  8018 005c 7066 0000 0101 080a 0005 4343  ...\pf........CC
     0x0030:  5a0b f508 4745 5420 2f74 6573 742e 6874  Z...GET./test.ht
     0x0040:  6d6c 2048 5454 502f 312e 310d 0a48 6f73  ml.HTTP/1.1..Hos
     0x0050:  743a 206b 7365 7276 2e6a 6563 2e61 632e  t:.kserv.jec.ac.
     0x0060:  6a70 0d0a 436f 6e6e 6563 7469 6f6e 3a20  jp..Connection:.
     0x0070:  6b65 6570 2d61 6c69 7665 0d0a 4361 6368  keep-alive..Cach
     0x0080:  652d 436f 6e74 726f 6c3a 206e 6f2d 6361  e-Control:.no-ca
     0x0090:  6368 650d 0a50 7261 676d 613a 206e 6f2d  che..Pragma:.no-
     0x00a0:  6361 6368 650d 0a41 6363 6570 743a 2061  cache..Accept:.a
     0x00b0:  7070 6c69 6361 7469 6f6e 2f78 6d6c 2c61  pplication/xml,a
     0x00c0:  7070 6c69 6361 7469 6f6e 2f78 6874 6d6c  pplication/xhtml
     0x00d0:  2b78 6d6c 2c74 6578 742f 6874 6d6c 3b71  +xml,text/html;q
     0x00e0:  3d30 2e39 2c74 6578 742f 706c 6169 6e3b  =0.9,text/plain;
     0x00f0:  713d 302e 382c 696d 6167 652f 706e 672c  q=0.8,image/png,
     0x0100:  2a2f 2a3b 713d 302e 350d 0a55 7365 722d  */*;q=0.5..User-
     0x0110:  4167 656e 743a 204d 6f7a 696c 6c61 2f35  Agent:.Mozilla/5
     0x0120:  2e30 2028 5831 313b 2055 3b20 4c69 6e75  .0.(X11;.U;.Linu
     0x0130:  7820 6936 3836 3b20 656e 2d55 5329 2041  x.i686;.en-US).A
     0x0140:  7070 6c65 5765 624b 6974 2f35 3334 2e33  ppleWebKit/534.3
     0x0150:  2028 4b48 544d 4c2c 206c 696b 6520 4765  .(KHTML,.like.Ge
     0x0160:  636b 6f29 2043 6872 6f6d 652f 362e 302e  cko).Chrome/6.0.
     0x0170:  3437 322e 3633 2053 6166 6172 692f 3533  472.63.Safari/53
     0x0180:  342e 330d 0a41 6363 6570 742d 456e 636f  4.3..Accept-Enco
     0x0190:  6469 6e67 3a20 677a 6970 2c64 6566 6c61  ding:.gzip,defla
     0x01a0:  7465 2c73 6463 680d 0a41 6363 6570 742d  te,sdch..Accept-
     0x01b0:  4c61 6e67 7561 6765 3a20 6a61 2c65 6e2d  Language:.ja,en-
     0x01c0:  5553 3b71 3d30 2e38 2c65 6e3b 713d 302e  US;q=0.8,en;q=0.
     0x01d0:  360d 0a41 6363 6570 742d 4368 6172 7365  6..Accept-Charse
     0x01e0:  743a 2053 6869 6674 5f4a 4953 2c75 7466  t:.Shift_JIS,utf
     0x01f0:  2d38 3b71 3d30 2e37 2c2a 3b71 3d30 2e33  -8;q=0.7,*;q=0.3
     0x0200:  0d0a 0d0a                                ....
    
    命令を正常に受領したことに対するACK(Server -> Client ACK)
    11:44:19.526557 IP (tos 0x0, ttl 62, id 51277, offset 0, flags [DF], proto TCP (6), length 52)
        kserv.jec.ac.jp.http > kosuge00.jd.jec.ac.jp.50233: Flags [.], cksum 0xeee1 (correct), seq 1, ack 465, win 1716, options [nop,nop,TS val 1510733069 ecr 344899], length 0
     0x0000:  4500 0034 c84d 4000 3e06 0607 da2d d289  E..4.M@.>....-..
     0x0010:  c0a8 0110 0050 c439 5a51 3d41 5001 d438  .....P.9ZQ=AP..8
     0x0020:  8010 06b4 eee1 0000 0101 080a 5a0b f50d  ............Z...
     0x0030:  0005 4343                                ..CC
    
    クライアントへコンテンツを戻す(Server -> Client レスポンスコード 200)☆☆☆
    11:44:19.533314 IP (tos 0x0, ttl 62, id 51279, offset 0, flags [DF], proto TCP (6), length 726)
        kserv.jec.ac.jp.http > kosuge00.jd.jec.ac.jp.50233: Flags [P.], cksum 0x4275 (correct), seq 1:675, ack 465, win 1716, options [nop,nop,TS val 1510733074 ecr 344899], length 674
     0x0000:  4500 02d6 c84f 4000 3e06 0363 da2d d289  E....O@.>..c.-..
     0x0010:  c0a8 0110 0050 c439 5a51 3d41 5001 d438  .....P.9ZQ=AP..8
     0x0020:  8018 06b4 4275 0000 0101 080a 5a0b f512  ....Bu......Z...
     0x0030:  0005 4343 4854 5450 2f31 2e31 2032 3030  ..CCHTTP/1.1.200
     0x0040:  204f 4b0d 0a44 6174 653a 2046 7269 2c20  .OK..Date:.Fri,.
     0x0050:  3135 204f 6374 2032 3031 3020 3032 3a34  15.Oct.2010.02:4
     0x0060:  363a 3232 2047 4d54 0d0a 5365 7276 6572  6:22.GMT..Server
     0x0070:  3a20 4170 6163 6865 0d0a 4c61 7374 2d4d  :.Apache..Last-M
     0x0080:  6f64 6966 6965 643a 2054 6875 2c20 3134  odified:.Thu,.14
     0x0090:  204f 6374 2032 3031 3020 3034 3a34 393a  .Oct.2010.04:49:
     0x00a0:  3337 2047 4d54 0d0a 4554 6167 3a20 2232  37.GMT..ETag:."2
     0x00b0:  3763 3239 652d 3234 612d 3666 6531 6661  7c29e-24a-6fe1fa
     0x00c0:  3430 220d 0a41 6363 6570 742d 5261 6e67  40"..Accept-Rang
     0x00d0:  6573 3a20 6279 7465 730d 0a56 6172 793a  es:.bytes..Vary:
     0x00e0:  2041 6363 6570 742d 456e 636f 6469 6e67  .Accept-Encoding
     0x00f0:  2c55 7365 722d 4167 656e 740d 0a43 6f6e  ,User-Agent..Con
     0x0100:  7465 6e74 2d45 6e63 6f64 696e 673a 2067  tent-Encoding:.g
     0x0110:  7a69 700d 0a43 6f6e 7465 6e74 2d4c 656e  zip..Content-Len
     0x0120:  6774 683a 2033 3434 0d0a 4b65 6570 2d41  gth:.344..Keep-A
     0x0130:  6c69 7665 3a20 7469 6d65 6f75 743d 3135  live:.timeout=15
     0x0140:  2c20 6d61 783d 3130 300d 0a43 6f6e 6e65  ,.max=100..Conne
     0x0150:  6374 696f 6e3a 204b 6565 702d 416c 6976  ction:.Keep-Aliv
     0x0160:  650d 0a43 6f6e 7465 6e74 2d54 7970 653a  e..Content-Type:
     0x0170:  2074 6578 742f 6874 6d6c 0d0a 0d0a 1f8b  .text/html......
     0x0180:  0800 0000 0000 0003 8d91 4d4f 8340 1086  ..........MO.@..
     0x0190:  effe 8a71 bde8 01a6 580f a62e 1c6c 9b68  ...q....X....l.h
     0x01a0:  526d 6330 ea71 5916 d840 d916 86d2 fe7b  Rmc0.qY..@.....{
     0x01b0:  17a9 297a 30ce 69de 999d 673e 969f cf96  ..)z0.i...g>....
     0x01c0:  d3f0 6335 878c d605 ac5e ef17 8f53 600e  ..c5.....^...S`.
     0x01d0:  e2db 788a 380b 67f0 fe10 3e2d c073 4710  ..x.8.g...>-.sG.
     0x01e0:  56a2 ac35 6953 8a02 71fe cc80 6544 9b09  V..5iS..q...eD..
     0x01f0:  62db b66e 3b76 4d95 62f8 82fb 8ee5 75c5  b..n;vM.b.....u.
     0x0200:  47d7 a141 a51b 53cc 8233 de65 8233 b0c6  G..A..S..3.e.3..
     0x0210:  3325 e2de fd92 6b45 023a b2a3 b68d def9  3%....kE.:......
     0x0220:  4c9a 9254 490e 1d36 8ac1 51f9 8cd4 9eb0  L..TI..6..Q.....
     0x0230:  c3dc 81cc 4455 2bf2 1b4a 9c5b 3660 91a6  ....DU+..J.[6`..
     0x0240:  4205 79ad aa1d b42a e2d8 07fa be78 6acc  B.y....*.....xj.
     0x0250:  2313 1f20 4aa5 294c e5b3 8bc4 9a94 0c44  #...J.)L.......D
     0x0260:  a1cb dcea b1b5 2461 f04b ee7e ea41 e3a8  ......$a.K.~.A..
     0x0270:  3032 df36 8654 c063 bdeb 4069 e9b3 4aa7  02.6.T.c..@i..J.
     0x0280:  19b1 a010 3541 b389 05a9 0978 37ce 5292  ....5A.....x7.R.
     0x0290:  733d f246 1ced db80 e3a0 fa84 ccbc 6f8a  s=.F..........o.
     0x02a0:  b4fb ab8a 053c b1b7 80e3 cc69 a554 c986  .....<.....i.T..
     0x02b0:  bb76 590b cbbc 7fcf 7529 af20 3775 932a  .vY.....u)..7u.*
     0x02c0:  220d 7f4d 6423 f662 f61f b1ff c84f ec12  "..Md#.b.....O..
     0x02d0:  dab8 4a02 0000                           ..J...
    
    クライアントからサーバにコンテンツ正常受領のACK(Client -> Server)
    11:44:19.533371 IP (tos 0x0, ttl 64, id 37214, offset 0, flags [DF], proto TCP (6), length 52)
        kosuge00.jd.jec.ac.jp.50233 > kserv.jec.ac.jp.http: Flags [.], cksum 0xf273 (correct), seq 465, ack 675, win 113, options [nop,nop,TS val 344909 ecr 1510733074], length 0
     0x0000:  4500 0034 915e 4000 4006 3af6 c0a8 0110  E..4.^@.@.:.....
     0x0010:  da2d d289 c439 0050 5001 d438 5a51 3fe3  .-...9.PP..8ZQ?.
     0x0020:  8010 0071 f273 0000 0101 080a 0005 434d  ...q.s........CM
     0x0030:  5a0b f512                                Z...
    
        ↓↓↓↓↓ 以下省略 ↓↓↓↓↓
    
    ええと、これは、OSのTCP/IPプロトコルスタックが出しているパケットと、WebサーバおよびWebクライアントが出しているパケットの2つのレベルのパケットが混在しているのですが、やはりこんなこともわかんない、想像できないようじゃ、情報科学および情報技術を学ぶ資格なしというか、想像力不足でリジェクトなんで、さくっと話を進めちゃいます。

    まー、初めの3つのパケットは、コネクションを確率するためのパケットで、教科書どおりですねーって、感じで話を進めて、4つ目のパケットは、クライアントからサーバにGET命令を出力してますよねー、で5番目のパケットはOSが出しているACKで、6つ目のパケットで、Webサーバがクライアントにコンテンツを返しているんですよー。って感じで話を・・・・って、コンテンツの部分が、なにやら文字化けじゃなくて、なにやら怪しげなデータが戻っているじゃん。なんじゃこれ???

    って感じで、しばしなんてコンテンツの内容(HTMLファイル)がプレーンで送られていないんだろう、、、これって何か圧縮して入るみたいだなぁと悩むこと数分。。。クライアントからサーバに送られたデータに


    0x0180: 342e 330d 0a41 6363 6570 742d 456e 636f 4.3..Accept-Enco
    0x0190: 6469 6e67 3a20 677a 6970 2c64 6566 6c61 ding:.gzip,defla
    0x01a0: 7465 2c73 6463 680d 0a41 6363 6570 742d te,sdch..Accept-

    おー、「Accept-Encoding」に「gzip,deflate,sdch」が送られているじゃありませんか。もしかして、これをみてWebサーバは律儀に gzip 形式で圧縮してコンテンツを送っているのかなーーー。ちいさな親切大きなお世話だなーって設定ファイルを見てみると、「/etc/httpd/conf.d」に、「deflate.conf」って設定ファイルがあるじゃありませんか。。。で、こいつの中身には
    # cat deflate.conf 
    
    
    # DEFLATEの有効化
    SetOutputFilter DEFLATE
    
    # 送信先ブラウザがNetscape 4.xの場合はtext/htmlのみ圧縮
    BrowserMatch ^Mozilla/4 gzip-only-text/html
    
    # 送信先ブラウザがNetscape 4.06-4.08の場合は圧縮しない
    BrowserMatch ^Mozilla/4\.0[678] no-gzip
    
    # 送信先ブラウザがMSIEの場合は全て圧縮する
    BrowserMatch \bMSI[E] !no-gzip !gzip-only-text/html
    
    # 画像ファイルは圧縮しない
    SetEnvIfNoCase Request_URI\.(?:gif|jpe?g|png|iso|gz)$ no-gzip dont-vary
    
    # プロキシサーバーが圧縮未対応ブラウザへ圧縮ファイルを送信しないようにする
    Header append Vary User-Agent env=!dont-vary
    
    こんなことが書いてある。おー、送信先ブラウザがNetscape 4.xの場合はtext/htmlのみ圧縮 って設定なのね。。。じゃ。この次の行に

    BrowserMatch ^Mozilla/5 no-gzip

    ってのを追加してやって、Webサーバを再起動してやると
    12:13:09.262605 IP (tos 0x0, ttl 62, id 56354, offset 0, flags [DF], proto TCP (6), length 638)
        kserv.jec.ac.jp.http > kosuge00.jd.jec.ac.jp.34561: Flags [P.], cksum 0x59cf (correct), seq 291:877, ack 465, win 1716, options [nop,nop,TS val 1512462756 ecr 4294954927], length 586
     0x0000:  4500 027e dc22 4000 3e06 efe7 da2d d289  E..~."@.>....-..
     0x0010:  c0a8 0110 0050 8701 c7b8 86de 9867 f974  .....P.......g.t
     0x0020:  8018 06b4 59cf 0000 0101 080a 5a26 59a4  ....Y.......Z&Y.
     0x0030:  ffff cfaf 3c21 444f 4354 5950 4520 6874  .....<h
     0x00b0:  746d 6c3e 0a20 2020 203c 6865 6164 3e0a  tml>.....<head>.
     0x00c0:  2020 2020 2020 2020 3c6d 6574 6120 6874  ........<meta.ht
     0x00d0:  7470 2d65 7175 6976 3d22 636f 6e74 656e  tp-equiv="conten
     0x00e0:  742d 7479 7065 2220 636f 6e74 656e 743d  t-type".content=
     0x00f0:  2274 6578 742f 6874 6d6c 3b20 6368 6172  "text/html;.char
     0x0100:  7365 743d 7574 662d 3822 3e0a 2020 2020  set=utf-8">.....
     0x0110:  2020 2020 3c74 6974 6c65 3e6b 7365 7276  ....<title>kserv
     0x0120:  2077 6562 3c2f 7469 746c 653e 0a20 2020  .web</title>....
     0x0130:  203c 2f68 6561 643e 0a20 2020 203c 626f  .</head>.....<bo
     0x0140:  6479 2062 6763 6f6c 6f72 3d22 2366 6666  dy.bgcolor="#fff
     0x0150:  6663 6322 2061 6c69 6e6b 3d22 2333 3333  fcc".alink="#333
     0x0160:  3366 6622 206c 696e 6b3d 2223 3333 3333  3ff".link="#3333
     0x0170:  6666 2220 766c 696e 6b3d 2223 3333 3333  ff".vlink="#3333
     0x0180:  6666 223e 0a20 2020 2020 2020 203c 626c  ff">.........<bl
     0x0190:  6f63 6b71 756f 7465 3e3c 6469 7620 616c  ockquote><div.al
     0x01a0:  6967 6e3d 2272 6967 6874 223e 6c61 7374  ign="right">last
     0x01b0:  2075 7064 6174 653a 2031 342d 4f63 742d  .update:.14-Oct-
     0x01c0:  3230 3130 3c2f 6469 763e 3c2f 626c 6f63  2010</div></bloc
     0x01d0:  6b71 756f 7465 3e0a 2020 2020 2020 2020  kquote>.........
     0x01e0:  3c68 3120 616c 6967 6e3d 2263 656e 7465  <h1.align="cente
     0x01f0:  7222 3e3c 666f 6e74 2063 6f6c 6f72 3d22  r"><font.color="
     0x0200:  6772 6565 6e22 3e6b 7365 7276 2077 6562  green">kserv.web
     0x0210:  3c2f 666f 6e74 3e3c 2f68 313e 0a20 2020  </font></h1>....
     0x0220:  2020 2020 203c 626c 6f63 6b71 756f 7465  .....<blockquote
     0x0230:  3e3c 6469 7620 616c 6967 6e3d 2272 6967  ><div.align="rig
     0x0240:  6874 223e 2863 2920 6b6f 7375 6765 7474  ht">(c).kosugett
     0x0250:  6920 3230 3130 3c2f 6469 763e 3c2f 626c  i.2010</div></bl
     0x0260:  6f63 6b71 756f 7465 3e0a 2020 2020 3c2f  ockquote>.....</
     0x0270:  626f 6479 3e0a 3c2f 6874 6d6c 3e0a       body>.</html>.
    
    ってな感じで、ちゃーんと、コンテンツが無圧縮で戻されてます。
    めでたし、めでたしなんですけど、こんな短いコンテンツも圧縮してくれちゃってまぁ。ごくろうさまなこってす。

    しかし、実用度がたかまると、教え辛くなるっていう典型ですね。これは、、、
    だから、vi に gcc コンソールから手打ちがいいんだよ、まったく。ほんと最近は本質が見えにくくなって困っちゃうんだな。
    「↓↓↓↓↓ 以下省略 ↓↓↓↓↓」の下にもですねー。favicon.ico よこせだとかさぁ、いらんことやってくれちゃっているんだなー。もー死んでしまえ(笑

    2010年10月14日木曜日

    試験に思う

    前期試験が終了し、なんとなく後期に入ってしまいました。

    前期試験の採点をしていて、「あー、つまんねぇ」と思うんですね。以前は、おもしろい答案があったら、出来不出来に関わらず、単位はA(優)をつけていたのですが、最近はほんとつまんねぇ答案ばっかりで、採点していてまったくおもしろくない。
    学生にも言っているんですけどね、「おもしろい答案だったら、問答無用でA」って、ただし「ウケ狙いで外したら、怒りをかって単位を落とすこともありうる」という付け足しをするせいか、そもそもチャレンジャーがいない。

    わたしの教員生活でもっともおもしろかった答案が、こんな奴でした。
    ええと、最近はあんまりこんな形式の作問はしませんが、以前は左側に用語、右側に説明を書いて、関係あるものを線で結べって問題ありましたよね。こんな感じのヤツです

    送信者 implementers - 実装者たち -

    で、まあ、こんな問題の場合、普通は以下のように答えるのが普通なんですけど

    送信者 implementers - 実装者たち -

    それがですねぇ。うぷぷ。こんな香ばしい答案書いちゃう学生さんがいてですねぇ。わはは。しかもたどってゆくと、すべて正解にたどり着くようになっていたりするのが、玄人好みだったりするわけです。
    こぉいうのがおもしろい答案なんであって「既に整列済みの整数配列arrayに、新たに1件データを追加して、再整列させたい。その時にもっとも効率よいアルゴリズムをC言語の関数で示せ」何て問題に「まず、玉ねぎの半分はみじん切りにして、透明感がでるまで弱火で炒め・・・」なんてことを書くのは、決しておもしろい答案でも、意表をつく答案でもない。

    この答案を書いた学生さん、実はうちの学校の学生さんではないのですが、みなさん良くご存知の「M」さんで、さすがに頭がよろしい。というか、師匠にしてこの弟子ありという感じなんですかね。

    最近は、マークシートで試験を採点するため、記述式の作問がとてもしにくい。そのせいか学生さんも、記述式試験がとても苦手だったりします。プログラミングの問題ですら、ソースコードを書いておいて、その中に穴を開けて、「ここに入るべきステートメントは?」なんて感じにせざる負えないのが、かなり悲しいですね。