コメントスパム
2005年9月22日
とうとう、このブログにもコメントスパムがやってきた。今後の対策のために、その挙動をまとめておくことにする。
まず、今回のスパムはすべてIPアドレス207.248.240.119(メキシコ)からである。User-Agentには、
"Mozilla/1.22 (compatible; MSIE 2.0d; Windows NT)"
"Mozilla/2.0 (compatible; MSIE 2.1; Mac_PowerPC)"
"Mozilla/3.0 (compatible; Opera/3.0; Windows 95/NT4) 3.2"
"Mozilla/4.0 (compatible; MSIE 5.0; Windows NT 5.1)"
"Mozilla/5.0 (compatible; Konqueror/2.2.2)"
"Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4b) Gecko/20030504 Mozilla Firebird/0.6"
"K-Meleon/0.6 (Windows; U; Windows NT 5.1; en-US; rv:0.9.5) Gecko/20011011"
の中からランダムに決めて指定しているようである。また、Refererには、
"http://www.instantsatellite.com"
"http://www.007-spy.com/"
"http://www-keylogger.com"
"http://www.software-keylogger.com/"
のいずれかが指定されていた。これは、Refererの指定があった場合で、指定がない場合もあった。また、POSTの時には、このサイトのアイテムを(コメントフォームも)表示するページが指定されていた。
アクセスはまず、19日にあった。
まず9時22分から9時37分にかけてアクセスがあり、9時41分にPOSTされた。itemid=10,4,6はすべてcatid=5に属しているが、9月19日にcatid=5の指定をしてもitemid=4,6は表示されなかったはずである。従って、itemid=4,6の読み込みはその前のcatid=5とは関連がないことが分かる。ただ、どこかのロボット(google?)のキャッシュではcatid=5の表示の際にitemid=4,6が含まれていた可能性はある。
このアクセスの性質として、HTMLの読み込みだけして、画像ファイルや、CSSファイル、jsファイルなどの読み込みをしていないことが挙げられる。また、POSTする際にはrefererとしてitemid=6を指定していることと、確かにitemid=6にコメントがPOSTされたことを考えると、POSTの直前(09:46:37)の読み込みからPOSTするべきデータを作成したのであろう。また、POSTの後"302 Moved"を受けて律儀に読み込みし直しをしているらしい。最もこれは"302 Moved"とは無関係で、単にコメント書き込みが成功したかどうかを確認しているだけかもしれない。
同様のPOSTがさらに2回行われたあと、itemid=10,4,13,16を読みに行って、この日のアクセスは終了した。
2日後(9月21)さらに同じIPからアクセスしてきた(↓)。この段階では禁止リストにこのIPを入れていたので、コメント書き込みは受け付けられていなかったのであるが。
今度は、前のように探りを入れるようなアクセスはいっさい無く、いきなりPOSTしてきた。GET, POSTの繰り返しである。ちなみにitemid=13はコメント書き込みできない様にしたページである。
2日前のアクセスと異なるのは、refererの指定、user-agentの指定がないこと。スパム送信プログラムを変更したか、複数のプログラムが動いているか、あるいは探りを入れるルーチンと大量にスパムを送りつけるルーチンが異なるのかのどれかである。
結論
今回のスパム送信プログラムは、CSSファイルやjsファイルなど、webページの表示に必要な二次的なファイルをいっさい読みに来ていない。従って、現在の所は単純なjavascriptで撃退できそうである。早速javascriptによる防御を施したので、今後のスパムの襲来でどうなるかを見てみたい。トラックバックスパムはまだ来ていないが、同じような方法で殆どは撃退できるのでは無かろうか。
参考
禁止に指定されたIPからコメントを送信しようとすると、以下のようなメッセージが現れる。
まず、今回のスパムはすべてIPアドレス207.248.240.119(メキシコ)からである。User-Agentには、
"Mozilla/1.22 (compatible; MSIE 2.0d; Windows NT)"
"Mozilla/2.0 (compatible; MSIE 2.1; Mac_PowerPC)"
"Mozilla/3.0 (compatible; Opera/3.0; Windows 95/NT4) 3.2"
"Mozilla/4.0 (compatible; MSIE 5.0; Windows NT 5.1)"
"Mozilla/5.0 (compatible; Konqueror/2.2.2)"
"Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4b) Gecko/20030504 Mozilla Firebird/0.6"
"K-Meleon/0.6 (Windows; U; Windows NT 5.1; en-US; rv:0.9.5) Gecko/20011011"
の中からランダムに決めて指定しているようである。また、Refererには、
"http://www.instantsatellite.com"
"http://www.007-spy.com/"
"http://www-keylogger.com"
"http://www.software-keylogger.com/"
のいずれかが指定されていた。これは、Refererの指定があった場合で、指定がない場合もあった。また、POSTの時には、このサイトのアイテムを(コメントフォームも)表示するページが指定されていた。
アクセスはまず、19日にあった。
[19/Sep/2005:09:22:32 +0200] "GET /nucleus/index.php?catid=5 HTTP/1.0" 200 32577 [19/Sep/2005:09:22:32 +0200] "GET /nucleus/index.php?itemid=10 HTTP/1.0" 200 23235 [19/Sep/2005:09:23:18 +0200] "GET /nucleus/index.php?itemid=10 HTTP/1.0" 200 23235 [19/Sep/2005:09:23:18 +0200] "GET /nucleus/index.php?catid=5 HTTP/1.0" 200 32577 [19/Sep/2005:09:32:13 +0200] "GET /nucleus/index.php?itemid=4 HTTP/1.0" 200 23422 [19/Sep/2005:09:32:16 +0200] "GET /nucleus/index.php?itemid=4 HTTP/1.0" 200 23422 [19/Sep/2005:09:36:40 +0200] "GET /nucleus/index.php?itemid=4 HTTP/1.0" 200 23422 [19/Sep/2005:09:36:48 +0200] "GET /nucleus/index.php?itemid=4 HTTP/1.0" 200 23422 [19/Sep/2005:09:41:40 +0200] "GET /nucleus/index.php?itemid=4 HTTP/1.0" 200 23422 [19/Sep/2005:09:42:01 +0200] "GET /nucleus/index.php?itemid=4 HTTP/1.0" 200 23422 [19/Sep/2005:09:46:37 +0200] "GET /nucleus/index.php?itemid=6 HTTP/1.0" 200 20308 [19/Sep/2005:09:46:37 +0200] "GET /nucleus/index.php?itemid=6 HTTP/1.0" 200 20308 [19/Sep/2005:09:46:41 +0200] "POST /nucleus/#nucleus_cf HTTP/1.0" 302 - "http://fkmac01.phc.chalmers.se/nucleus/index.php?itemid=6" [19/Sep/2005:09:46:45 +0200] "GET /nucleus/index.php?itemid=6 HTTP/1.0" 200 21264 "http://fkmac01.phc.chalmers.se/nucleus/index.php?itemid=6"
まず9時22分から9時37分にかけてアクセスがあり、9時41分にPOSTされた。itemid=10,4,6はすべてcatid=5に属しているが、9月19日にcatid=5の指定をしてもitemid=4,6は表示されなかったはずである。従って、itemid=4,6の読み込みはその前のcatid=5とは関連がないことが分かる。ただ、どこかのロボット(google?)のキャッシュではcatid=5の表示の際にitemid=4,6が含まれていた可能性はある。
このアクセスの性質として、HTMLの読み込みだけして、画像ファイルや、CSSファイル、jsファイルなどの読み込みをしていないことが挙げられる。また、POSTする際にはrefererとしてitemid=6を指定していることと、確かにitemid=6にコメントがPOSTされたことを考えると、POSTの直前(09:46:37)の読み込みからPOSTするべきデータを作成したのであろう。また、POSTの後"302 Moved"を受けて律儀に読み込みし直しをしているらしい。最もこれは"302 Moved"とは無関係で、単にコメント書き込みが成功したかどうかを確認しているだけかもしれない。
[19/Sep/2005:09:51:08 +0200] "GET /nucleus/index.php?itemid=6 HTTP/1.0" 200 21264 [19/Sep/2005:09:51:11 +0200] "GET /nucleus/index.php?itemid=6 HTTP/1.0" 200 21264 [19/Sep/2005:09:56:57 +0200] "GET /nucleus/index.php?itemid=8 HTTP/1.0" 200 21425 [19/Sep/2005:09:57:01 +0200] "POST /nucleus/#nucleus_cf HTTP/1.0" 302 - "http://fkmac01.phc.chalmers.se/nucleus/index.php?itemid=8" [19/Sep/2005:09:57:03 +0200] "GET /nucleus/index.php?itemid=8 HTTP/1.0" 200 22162 "http://fkmac01.phc.chalmers.se/nucleus/index.php?itemid=8" [19/Sep/2005:09:57:29 +0200] "GET /nucleus/index.php?itemid=8 HTTP/1.0" 200 22162 [19/Sep/2005:09:57:32 +0200] "POST /nucleus/#nucleus_cf HTTP/1.0" 302 - "http://fkmac01.phc.chalmers.se/nucleus/index.php?itemid=8" [19/Sep/2005:09:57:34 +0200] "GET /nucleus/index.php?itemid=8 HTTP/1.0" 200 22947 "http://fkmac01.phc.chalmers.se/nucleus/index.php?itemid=8" [19/Sep/2005:09:59:18 +0200] "GET /nucleus/index.php?itemid=10 HTTP/1.0" 200 23528 [19/Sep/2005:09:59:18 +0200] "GET /nucleus/index.php?itemid=10 HTTP/1.0" 200 23528 [19/Sep/2005:10:05:44 +0200] "GET /nucleus/index.php?itemid=10 HTTP/1.0" 200 23528 [19/Sep/2005:10:05:45 +0200] "GET /nucleus/index.php?itemid=4 HTTP/1.0" 200 23715 [19/Sep/2005:10:06:28 +0200] "GET /nucleus/index.php?itemid=10 HTTP/1.0" 200 23528 [19/Sep/2005:10:06:29 +0200] "GET /nucleus/index.php?itemid=4 HTTP/1.0" 200 23715 [19/Sep/2005:10:09:05 +0200] "GET /nucleus/index.php?itemid=10 HTTP/1.0" 200 23528 [19/Sep/2005:10:10:17 +0200] "GET /nucleus/index.php?itemid=10 HTTP/1.0" 200 23528 [19/Sep/2005:10:20:07 +0200] "GET /nucleus/index.php?itemid=13 HTTP/1.0" 200 19194 [19/Sep/2005:10:21:43 +0200] "GET /nucleus/index.php?itemid=13 HTTP/1.0" 200 19194 [19/Sep/2005:10:28:24 +0200] "GET /nucleus/index.php?itemid=13 HTTP/1.0" 200 19194 [19/Sep/2005:10:31:00 +0200] "GET /nucleus/index.php?itemid=13 HTTP/1.0" 200 19194 [19/Sep/2005:10:32:32 +0200] "GET /nucleus/index.php?itemid=13 HTTP/1.0" 200 19194 [19/Sep/2005:10:36:07 +0200] "GET /nucleus/index.php?itemid=13 HTTP/1.0" 200 19194 [19/Sep/2005:10:36:12 +0200] "GET /nucleus/index.php?itemid=13 HTTP/1.0" 200 19194 [19/Sep/2005:10:40:40 +0200] "GET /nucleus/index.php?itemid=13 HTTP/1.0" 200 19194 [19/Sep/2005:10:44:23 +0200] "GET /nucleus/index.php?itemid=16 HTTP/1.0" 200 23033 [19/Sep/2005:10:49:55 +0200] "GET /nucleus/index.php?itemid=16 HTTP/1.0" 200 23033
同様のPOSTがさらに2回行われたあと、itemid=10,4,13,16を読みに行って、この日のアクセスは終了した。
2日後(9月21)さらに同じIPからアクセスしてきた(↓)。この段階では禁止リストにこのIPを入れていたので、コメント書き込みは受け付けられていなかったのであるが。
[21/Sep/2005:08:24:20 +0200] "GET /nucleus/index.php?itemid=4 HTTP/1.1" 200 23477 "-" [21/Sep/2005:08:24:36 +0200] "POST /nucleus/#nucleus_cf HTTP/1.1" 200 3475 "-" [21/Sep/2005:08:25:18 +0200] "GET /nucleus/index.php?itemid=4 HTTP/1.1" 200 23534 "-" [21/Sep/2005:08:25:32 +0200] "POST /nucleus/#nucleus_cf HTTP/1.1" 200 3475 "-" [21/Sep/2005:08:39:40 +0200] "GET /nucleus/index.php?itemid=6 HTTP/1.1" 200 20420 "-" [21/Sep/2005:08:39:45 +0200] "POST /nucleus/#nucleus_cf HTTP/1.1" 200 3475 "-" [21/Sep/2005:08:39:59 +0200] "GET /nucleus/index.php?itemid=6 HTTP/1.1" 200 20420 "-" [21/Sep/2005:08:40:03 +0200] "POST /nucleus/#nucleus_cf HTTP/1.1" 200 3475 "-" [21/Sep/2005:08:55:37 +0200] "GET /nucleus/index.php?itemid=6 HTTP/1.1" 200 20420 "-" [21/Sep/2005:08:55:40 +0200] "POST /nucleus/#nucleus_cf HTTP/1.1" 200 3475 "-" [21/Sep/2005:09:07:24 +0200] "GET /nucleus/index.php?itemid=8 HTTP/1.1" 200 21314 "-" [21/Sep/2005:09:07:30 +0200] "POST /nucleus/#nucleus_cf HTTP/1.1" 200 3475 "-" [21/Sep/2005:09:14:54 +0200] "GET /nucleus/?itemid=10 HTTP/1.1" 200 23347 "-" [21/Sep/2005:09:14:58 +0200] "POST /nucleus/#nucleus_cf HTTP/1.1" 200 3475 "-" [21/Sep/2005:09:25:44 +0200] "GET /nucleus/index.php?itemid=4 HTTP/1.1" 200 23534 "-" [21/Sep/2005:09:25:49 +0200] "POST /nucleus/#nucleus_cf HTTP/1.1" 200 3475 "-" [21/Sep/2005:09:37:03 +0200] "GET /nucleus/?itemid=10 HTTP/1.1" 200 23347 "-" [21/Sep/2005:09:37:06 +0200] "POST /nucleus/#nucleus_cf HTTP/1.1" 200 3475 "-" [21/Sep/2005:10:01:38 +0200] "GET /nucleus/index.php?itemid=13 HTTP/1.1" 200 19249 "-" [21/Sep/2005:10:09:09 +0200] "GET /nucleus/index.php?itemid=13 HTTP/1.1" 200 19249 "-" [21/Sep/2005:10:23:49 +0200] "GET /nucleus/index.php?itemid=16 HTTP/1.1" 200 23085 "-" [21/Sep/2005:10:23:58 +0200] "POST /nucleus/#nucleus_cf HTTP/1.1" 200 3475 "-" [21/Sep/2005:12:18:55 +0200] "GET /nucleus/index.php?itemid=34 HTTP/1.1" 200 23697 "-" [21/Sep/2005:12:18:57 +0200] "POST /nucleus/#nucleus_cf HTTP/1.1" 200 3475 "-"
今度は、前のように探りを入れるようなアクセスはいっさい無く、いきなりPOSTしてきた。GET, POSTの繰り返しである。ちなみにitemid=13はコメント書き込みできない様にしたページである。
2日前のアクセスと異なるのは、refererの指定、user-agentの指定がないこと。スパム送信プログラムを変更したか、複数のプログラムが動いているか、あるいは探りを入れるルーチンと大量にスパムを送りつけるルーチンが異なるのかのどれかである。
結論
今回のスパム送信プログラムは、CSSファイルやjsファイルなど、webページの表示に必要な二次的なファイルをいっさい読みに来ていない。従って、現在の所は単純なjavascriptで撃退できそうである。早速javascriptによる防御を施したので、今後のスパムの襲来でどうなるかを見てみたい。トラックバックスパムはまだ来ていないが、同じような方法で殆どは撃退できるのでは無かろうか。
参考
禁止に指定されたIPからコメントを送信しようとすると、以下のようなメッセージが現れる。
Error! あなた (IP範囲 XXX.XXX.XXX.XXX) はこのアクションの実行が禁止されています。メッセージ: '' Go back