自分自身のための ものづくり / 自分自身のためのものづくりメモ

* 掲示板spam対策いろいろ

#掲示板spam対策
 以下3点の判断基準で、海外からの被リンク数稼ぎ無差別投稿は、9割9分9厘排除できている。
(2006年12月末現在)

メールアドレス書いちゃダメ

  • 排除率:9割9部
  • 誤判定率:皆無
 メールアドレスが記されていたらspamと判断。

 今時、foo_bar@gmai.comとかのメールアドレスを掲示板に書き込む「人」はいないよねー。
 でも、なぜか、海外の被リンク数稼ぎのspam無差別投稿ロボットは、mailとか書かれた欄があるとそこにアドレスを書き込むのだ。


<aとか[urlとか、書くな

  • 排除率:9割以上
  • 誤判定率:皆無

 本文(とか)に<aとか[urlとかあったら、spamと判断。

 HTMLとかBBCodeとかは受け付けてないのに、そんなの書くなら「人」じゃない。
 被リンク数稼ぎの無差別投稿ロボットは、なぜか、そんな記法でリンクを張ろうとするのが多い。直接htmlを書けたりする掲示板って今でもそんなにあるの? また、BBCode使えるBBSって、日本じゃほとんど見かけないけど英語圏だと多いのだろうか?


GETとPOSTの時間差が5秒?てめぇ人間じゃねぇ

  • 排除率:5割ぐらい?
  • 誤判定率:かなり低い(設定次第)

 投稿用フォームに時刻を埋め込み、POST時に比較する。

 掲示板のページを開いて文章を書いて投稿するのには、それなりの時間がかかるよね。少なくとも3秒なんてのは人間業じゃないし、10秒ってのもまともに文章を書いてりゃ無理。
 spam投稿ロボットの半数ぐらいはGETしてから5秒経たないうちにPOSTする早い野郎だ。

* spamのPOSTに対して404を返してみる

#掲示板spam対策
 近頃、掲示板へのspam投稿試行頻度が鰻登り。突破率は0.1%もないとはいえ、なかなかに鬱陶しい。
 POSTに対して一見書き込みが成功した風な返答してるのが原因かな、と思い、POSTをspamと判定したら問答無用で404を返すようにしてみた。

2006/12/27,21:36:37,209.213.220.227,"mail2.actslife.org","-","-",GET,"/BBS/BBS.cgi","","1.1",200
2006/12/27,21:36:39,209.213.220.227,"mail2.actslife.org","-","-",POST,"/BBS/BBS.cgi","","1.1",404
 以前は、改造の成果を確認するためにspamのPOSTをいまかいまかと楽しみに待ち構えたものだけど、今や1時間経たないうちに結果が出る。とほほ。

* 3点バーストspam投稿

#掲示板spam対策 #spam例
2006/12/26,19:20:56,72.237.18.167,"","-","-",POST,"/BBS/BBS.cgi","","1.1",200
2006/12/26,19:21:03,72.237.18.167,"","-","-",POST,"/BBS/BBS.cgi","","1.1",200
2006/12/26,19:21:16,72.237.18.167,"","-","-",POST,"/BBS/BBS.cgi","","1.1",200

(ReadMore...)

* e-SocietyRobotよ、動的ページの扱い方をなんとかしろよ

#Web
 動的生成されるページを10秒に一回GETするってのは、締め出しくらっても自業自得だと思うぞ。
2006/12/14,07:49:42,"-",GET,"/WiKi/rnx/index.rb","cmd=search&word=#掲示板spam対策","1.1",200,30313,"-","","e-SocietyRobot(http://www.yama.info.waseda.ac.jp/~yamana/es/)"
2006/12/14,07:49:53,"-",GET,"/WiKi/rnx/index.rb","cmd=search&word=#電子工作","1.1",200,28519,"-","","e-SocietyRobot(http://www.yama.info.waseda.ac.jp/~yamana/es/)"
2006/12/14,07:50:14,"-",GET,"/WiKi/rnx/index.rb","cmd=random","1.1",200,33033,"-","","e-SocietyRobot(http://www.yama.info.waseda.ac.jp/~yamana/es/)"
2006/12/14,07:50:25,"-",GET,"/WiKi/rnx/index.rb","cmd=edit","1.1",200,9501,"-","","e-SocietyRobot(http://www.yama.info.waseda.ac.jp/~yamana/es/)"
2006/12/14,07:50:35,"-",GET,"/WiKi/rnx/index.rb","rss","1.1",200,9118,"-","","e-SocietyRobot(http://www.yama.info.waseda.ac.jp/~yamana/es/)"
2006/12/14,07:50:50,"-",GET,"/WiKi/rnx/index.rb","cmd=referer","1.1",200,350139,"-","","e-SocietyRobot(http://www.yama.info.waseda.ac.jp/~yamana/es/)"
2006/12/14,07:51:01,"-",GET,"/WiKi/rnx/index.rb","cmd=change_log","1.1",200,32010,"-","","e-SocietyRobot(http://www.yama.info.waseda.ac.jp/~yamana/es/)"
2006/12/14,07:51:12,"-",GET,"/WiKi/rnx/index.rb","page=1","1.1",200,27836,"-","","e-SocietyRobot(http://www.yama.info.waseda.ac.jp/~yamana/es/)"
2006/12/14,07:51:23,"-",GET,"/WiKi/rnx/index.rb","page=2","1.1",200,28107,"-","","e-SocietyRobot(http://www.yama.info.waseda.ac.jp/~yamana/es/)"
2006/12/14,07:51:33,"-",GET,"/WiKi/rnx/index.rb","page=3","1.1",200,28679,"-","","e-SocietyRobot(http://www.yama.info.waseda.ac.jp/~yamana/es/)"
2006/12/14,07:51:44,"-",GET,"/WiKi/rnx/index.rb","page=4","1.1",200,32334,"-","","e-SocietyRobot(http://www.yama.info.waseda.ac.jp/~yamana/es/)"
2006/12/14,07:51:55,"-",GET,"/WiKi/rnx/index.rb","page=5","1.1",200,14081,"-","","e-SocietyRobot(http://www.yama.info.waseda.ac.jp/~yamana/es/)"
2006/12/14,07:52:06,"-",GET,"/WiKi/rnx/index.rb","1165944355.txt","1.1",200,12767,"-","","e-SocietyRobot(http://www.yama.info.waseda.ac.jp/~yamana/es/)"
2006/12/14,07:52:16,"-",GET,"/WiKi/rnx/index.rb","fname=1165944355.txt&cmd=edit","1.1",200,11869,"-","","e-SocietyRobot(http://www.yama.info.waseda.ac.jp/~yamana/es/)"

 robots.txtは読むらしいので、このメモからはお引き取り願うことにした。

 割と昔からログに散見される割には、いまいち成果が見えなくて、いっそ/からDisallowしたくなる。
e-Society 先進的なストレージ技術およびWeb解析技術
http://cif.iis.u-tokyo.ac.jp/e-society/database/Kitsuregawa_t.html
の「コミュニティ時系列解析」なんかは面白そうなのにな。
 Webに負荷をかけるからには、何らかの見返りをWebに返さないと、そのうちWebから閉め出されちゃうぞー。

* 1日あたりの、披spam投稿回数

#掲示板spam対策
$ cat access2BBS_24Dec.txt | grep POST | cat -n | tail -1
48 219.23.20.207 - - [24/Dec/2006:23:32:17 +0900] "POST /BBS/BBS.cgi HTTP/1.0" 200 23406 "http://baku.homeunix.net/BBS/BBS.cgi" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)"
…というわけで、48回
(2006年12月24日の場合)

 そりゃ、まったく無防備の掲示板だったら完全に機能しなくなるよな。手作業で対応できる量じゃねぇ。


ToDo: POSTとGETの時間間隔の統計を取る

* やっつけspam対策

#掲示板spam対策
  • メール欄(当サイトではurl欄に転用だが、nameは'mail'のまま)に「@」があったら、それはspam
  • 本文に「''<a''」や「''[url''」があったら、(ry
  if ($FORM{'mail'} =~ /@/) {
    $is_spam = 1 ;
  }
  if ( ($FORM{'data'} =~ /<a/) or ($FORM{'data'}=~ /\[url/)) {
     $is_spam = 1 ;
  }

* 最初のGETを使い回すspam投稿ロボット

#掲示板spam対策 #個々事例
spam投稿司令塔とゾンビの兵隊も参照
 GETとPOSTが違うホストから行われる例であり、また、DSBLの効きがめっきり悪くなった例でもある。

2006/12/15,04:24:55,72.36.205.10,"sql3.christiandnsonline.com","-","-",GET,"/BBS/BBS.cgi","","1.1",200
2006/12/15,04:25:15,80.227.0.156,"","-","-",POST,"/BBS/BBS.cgi","","1.1",200
2006/12/15,04:25:19,222.231.50.97,"","-","-",POST,"/BBS/BBS.cgi","","1.0",200
2006/12/15,04:25:21,83.243.108.45,"named.derbynet.pl","-","-",POST,"/BBS/BBS.cgi","","1.0",200
(ReadMore...)

* DSBLが効かない

#掲示板spam対策
 7月末にDSBLは効果絶大なんて書いたのだが、近頃(12月現在)はめっきり効果がない。

 現在も、掲示板のプログラム冒頭でDSBLに問い合わせて、登録されていたら問答無用で404を返しているのだが、ログを見るとspammerっぽいアクセスの防御率は1割を切っているっぽい。
(詳細な分析はしていないので、ぱっと見だが。
 導入当初は「ほとんど」のそれっぽいGETを弾けていたのだけど。

(「メールアドレスとして有効な文字列があったら」投稿拒否しており、それによりほぼ全てのspam投稿は拒否されているが)


 原因は不明。DSBLがあまり更新されていないのか、DSBLには登録されないbotnetを使った投稿が主流になったのか…。
 どちらにせよ、防御率と誤判定の危険を天秤にかけると、DSBLの使用は、もはやあまりお勧めではない。

* 新種のspam投稿ロボット「6fNS6」(仮称)

#掲示板spam対策 #Web
 対象ページのtitleをtextareaに放り込んだり、cookieを食べたりと、これまでにやってきた芸のないspamとは毛色が違う。
(ReadMore...)

* G-LIGHT(等)向け、お手軽spam対策

glight.cgiの400行目あたり↓の部分の
if ($in{'email'} && $in{'email'}!~ /^[\w\.\-]+\@[\w\.\-]+\.[a-zA-Z]{2,6}$/)
{ &error("Eメールの入力内容が不正です"); }
にある「!~」を「=~」に変える。

 メール欄記入時のエラー条件が反転する。
 その結果、メールアドレス欄に記入されていて、かつその文字列がメールアドレスとして有効なものである場合に、エラーが発生する。

 英語圏の無差別spamは、ほとんどの場合にformのそれっぽい欄(name="mail"とか)にメールアドレスを入れて投稿するので、この改変でエラーとして弾かれる。
 spamが飛び交う昨今、掲示板に無防備にメールアドレスを書き込む人なんていないよね?

 Webの日本語圏に蔓延^H^H普及しているKent製の掲示板プログラムでは同じような部分があるので、G-LIGHT以外でも同様の改変が可能であろう。わずか一文字書き換えるだけでいい割には、効果絶大だと思う。

#掲示板spam対策 #Web

* layeredtech.comを立ち入り禁止に

 xxx.xxx.xxx.xxx.reverse.layeredtech.comからのアクセス後に、必ずOpenProxy経由とおぼしきspam投稿試行があり、
2006/11/06,10:37:27,72.232.179.242,"242.179.232.72.reverse.layeredtech.com","-","-",GET,"/BBS/BBS.cgi","
2006/11/06,10:37:28,62.225.72.140,"","-","-",POST,"/BBS/BBS/BBS.cgi"
2006/11/06,10:37:36,81.183.212.133,"mail.fairway.hu","-","-",POST,"/BBS/BBS/BBS.cgi"
かつ、まともそうなアクセスもないので、
#xxx.xxx.xxx.xxx.reverse.layeredtech.com
deny from 72.232.0.0/16
として、丸ごとアクセス禁止にした。

 クラスBを丸ごとってのはどうよ?と思わないでもないけど、日本語に堪能でかつゲーム機のRGB出力化改造とかに興味を持った人が、layeredtech.comにいる可能性は極めて低いと判断してアクセス禁止。
 もしも巻き込まれた不幸な人がいたなら、あからさまなspammerをのさばらせているlayeredtech.comを呪うがよい。あくまでGETしかしていないから規約で退会させるって事ができない、のかもしれないけど、それはそれ。

#掲示板spam対策 #Web

* spam投稿司令塔とゾンビの兵隊

2006/10/25,22:18:17,209.67.214.90,"server1.xpressaccess.com","-","-",GET,"/BBS/BBS.cgi","","1.1",200
2006/10/25,22:18:19,201.13.121.178,"201-13-121-178.dsl.telesp.net.br","-","-",POST,"/BBS/BBS/BBS.cgi","","1.1",404
2006/10/25,22:18:22,86.55.117.135,"","-","-",POST,"/BBS/BBS/BBS.cgi","","1.1",404
2006/10/25,22:18:27,59.94.9.179,"","-","-",POST,"/BBS/BBS/BBS.cgi","","1.1",404
 server1.xpressaccess.comがフォームを取得した後、OpenProxy経由での書き込みを試みている様子がはっきりとわかる。
 対象BBSは、DSBLに登録されているホストには問答無用で404を返すように改造してあるので、投稿自体は失敗に終わっている。
 しかし、司令塔みたいなserver1.xpressaccess.comはDSBLには登録されていない。ただの想像だが、DSBLとかに登録されないように運用しているのだろう。BBQでも引っかからないし。で、潰してもいい人様の穴のあいたマシンを踏み台にして、実際のspam投稿を行う、と。


 以下は、他にもあった同様の痕跡。
2006/10/24,23:38:14,72.36.151.106,"dcwindows.net","-","-",GET,"/BBS/BBS.cgi","","1.1",200
2006/10/24,23:38:23,200.204.126.148,"200-204-126-148.dsl.telesp.net.br","-","-",POST,"/BBS/BBS/BBS.cgi","","1.1",404
2006/10/24,23:38:32,61.95.205.88,"dsl-KK-static-088.205.95.61.touchtelindia.net","-","-",POST,"/BBS/BBS/BBS.cgi","","1.0",404
2006/10/24,23:38:33,221.247.27.81,"221x247x27x81.ap221.ftth.ucom.ne.jp","-","-",POST,"/BBS/BBS/BBS.cgi","","1.0",404
2006/10/24,23:38:36,59.94.101.21,"","-","-",POST,"/BBS/BBS/BBS.cgi","","1.1",404

#掲示板spam対策 #Web

* 人とロボットを区別したい

 またRandomNoteの検索キーワードがかき回された。
 今度の犯人は、おそらく先読みプログラムの一種。UAはIEを名乗っているので、種類は不明。

(ReadMore...)

* spam投稿ロボットと302

 spammerの投稿用リストに問題でもあったのか、そもそも存在しない/bbs/bbs.cgiへのアクセスが見られる。
 せっかくだから、実験用に302を返すだけのページを用意してみたところ…
2006/09/17,14:48:10,69.41.171.138,"wmstream.libertyleague.com","-","-",GET,"/bbs/bbs.cgi","","1.1",302,302,"http://baku.homeunix.net/bbs/bbs.cgi"
2006/09/17,14:48:10,69.41.171.138,"wmstream.libertyleague.com","-","-",GET,"/bbs/bbs.txt","","1.1",200,0,"http://baku.homeunix.net/bbs/bbs.txt"

 へぇ、302を追いかけるのね。
 これを利用して、spammerからのアクセスだったら、その宣伝したいサイトに302で誘導して無用な負荷をかけて嫌がらせ…、と思ったけど誤認したときが厄介なのでダメだな。

#掲示板spam対策 #Web

* 掲示板spammeerのPOSTの投げ方

 formを生成した時刻をtype=hiddenで記すようにしてみた。
 結果、以下のことがわかった。
・フォームの内容は最初にGETしたときのを使い回す
・不明なhiddenは、その時のをそのまま送る

 GETするのとPOSTするのとでホストを変えるのを逆手にとって、hiddenでホストに関する情報を入れておくのも手だな。
(ReadMore...)