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

* 掲示板へのspam投稿が、久々にチェックをすり抜けた

#掲示板spam対策 #Web

1204215628 Fri Feb 29 01:20:28 JST 2008
HOST 201.86.240.210
page 0


1204215664 Fri Feb 29 01:21:04 JST 2008
HOST 201.86.240.210
rep_num 0
pass XXXXXXXX
page 0
jikan 1204215628
do post
name jammarlibre
data Very good web site, great work and thank you for your service.
mail http://enavivo.info/cookie-monster
subj cookie-monster

 name="mail"なのにURLを書いてきたのは、狙ってのことか?!
(ReadMore...)

* RandomNoteの検索用クローラ対策

#RandomNote #Web #掲示板spam対策
 googleやらyahooやらmsnやらが、入れ替わり立ち替わり、smode=sumやらsmode=countやらcmd=editやらのついたページを、別々のものと見なしてGETしていく。
 こっちにもあっちにも無駄な負荷がかかる、とても不幸なことだ。

とりあえずの対策として、それらへのリンクをformにしてみた。

 検索エンジンは、いくらなんでもsubmitしないだろうから、無駄にリンクを辿らなくなると期待。

 ただし、spam投稿用クローラが心配。textもtextareaもないのにPOSTする馬鹿がいるかもしれない、と危惧している。

ロボットの類相手では、cmd=editとかsmode=hogeとかあったら、404を返すようにした

 既にsmode=hogeとかのページのurlが記録されていて、リンクが無くなっても読みに来る。だから、ロボットの類相手にそれらのページは404を返すようにした。
 ロボットか?の判断は、user_agentにhttp:が入っているかどうか。

ロボットなどに対して、サイドバーを渡さないようにした

 検索の邪魔だよね。本文にないキーワードがあるのは。
 さらに、ロボットに送るデータ量が減るという恩恵もあった。無駄なデータが減るのは、互いにとって有益だ。

* GETでspamを投稿する奴への対策

#RandomNote #掲示板spam対策

 後述のように、GETでspamを投稿を試みるロボットがある。
 そのようなリクエストにより、OR検索が行われ、最近の検索ワードがめちゃくちゃになる。
…というわけで、とりあえず、超やっつけで対策。

def do_search
  @word = @param['word']

  if @word.size > 32
    print_header
    print_footer
    return
  end
 検索用の文字列が32文字以上なら、何も処理を行わずに終了する。
(ヘッダとフッタは返す)

(ReadMore...)

* iptablesのリストが消えたら、spamが急増した

#掲示板spam対策
 apacheのアクセスログを眺めてみたら、spam投稿---BBSおよびこのWikiもどきへの---がやたらに増えいていた。
 瞬停(たぶん)によりリセットがかかり、iptablesの設定がまっさらになったことが原因だろう。
iptables-restore < iptable.cfg
として、昔保存しておいたリストを読み込んだ。
 iptables-saveしたのは3月だから、それ以降に追加したのは藻屑となったけど、まるっきりフィルタが無いよりもマシになると期待。

 改めて、ログとiptables -Lを見比べると、TCP/IPレベルで蹴っていたはずの接続が沢山あった。

* リファラspam

#Web #掲示板spam対策
 ApacheLogViewerを用いてアクセスログに目を通していたら、リファラspamらしきアクセスがあった。
 一見、人間がIE6を使って普通に閲覧したように見えるが、色々不自然。

 リファラにあるページはコスプレ衣装の販売サイトのナコルルの衣装。
fairyのサイトはリンクフリーです。 リンクは、http://fairy.cosnet.to/ にお願いします。
とあるのに、直接リンクを張られることを期待してリファラspamを行うとは、笑わせてくれる。

 リファラspamって、効果あるのかねぇ? 関連する単語による検索で引っかかるページに関連する内容のページのリファラにてspamってのは無差別よりも効果的とはいえ…。
 リファラを公に表示するWebページってHNSによる日記ぐらいしか思い浮かばない。…訂正。tDiaryによるblogもあるな。HNSよりもずっと多そうだ。
 あるいは、サイト管理者が「アクセス解析」からアクセスする事を期待しているのかな?だとすれば、わざわざ画像にもアクセスしていることの説明にもなる。

 リファラ周りのバグという線は、たぶん、無いと思う。Windows版IE6.0にそんなバグは無い…はず。
 まず、繰り返しになるけど、アクセス間隔がほぼ1秒おき(画像を含め、ファイルサイズ問わず)ってが猛烈に胡散臭い。また、ほぼ同じアクセスが2回繰り返されてたのは謎だが、人間のアクセスっぽくなく、やはり胡散臭い。(以下では片方しか挙げていない)

以下は当該ログ
(ReadMore...)

* iptables -L

#Web #掲示板spam対策
 迷惑なアクセスをしてくる連中は、TCP/IPレベルで弾くことにした。
 いちいちHTTPに応答するのもかったるい。
~$ sudo iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination
DROP       all  --  66.232.96.0/19       anywhere
DROP       all  --  222.32.0.0/11        anywhere
DROP       all  --  72.232.0.0/16        anywhere
DROP       all  --  72.36.128.0/17       anywhere
DROP       all  --  72.21.32.0/19        anywhere
DROP       all  --  222.32.0.0/11        anywhere
DROP       all  --  ns.km23553.keymachine.de  anywhere
DROP       all  --  test-20464.mts-nn.ru  anywhere

* iptables -A INPUT -s 66.232.96.0/19 -j DROP

#掲示板spam対策
deny from 66.232.96.0/19
http://baku.homeunix.net/WiKi/rnx/index.rb?1171520140.txt
にて、403を返すようにしても延々POSTし続けて、実にうざい。全て失敗するのでたいした害はないが、いいことは全くない。
…というわけで、TCP/IPレベルで接続を蹴ることにした。これでaccess.logも少々すっきりするだろう。

* deny from 72.232.0.0/16 他

#掲示板spam対策
#xxx.xxx.xxx.xxx.reverse.layeredtech.com
deny from 72.232.0.0/16
deny from 72.36.128.0/17
deny from 72.21.32.0/19

↓のような、ろくでもないアクセスしかないので、掲示板等では.htaccessにて排除。
2007/02/15,19:56:49,72.36.200.58,"underpt.org","-","-",GET,"/WiKi/rnx/index.rb","","1.1",403
2007/02/15,19:56:50,72.36.200.58,"underpt.org","-","-",GET,"/WiKi/rnx/","","1.1",403
2007/02/17,01:14:48,72.232.56.194,"194.56.232.72.reverse.layeredtech.com","-","-",GET,"/BBS/BBS.cgi","","1.1",403


$ whois 72.36.200.58

OrgName:    Layered Technologies, Inc.
Country:    US

NetRange:   72.36.128.0 - 72.36.255.255
CIDR:       72.36.128.0/17
NetName:    LAYERED-TECH-

* deny from 66.232.96.0/19

#掲示板spam対策
 連投がウザイ(*)ので、丸ごと.htaccessでBBSから排除。

$ cat /var/log/apache/access.log | grep POST | grep 66.232 | grep '16/Feb' | cat -n | tail -1
139 66.232.113.98 - - [16/Feb/2007:22:49:40 +0900] "POST ttp://baku.homeuni
x.net/BBS/BBS.cgi HTTP/1.0" 403
 2月16日だけで139件かよ…。

 この範囲の人がこのサイトを見て更に掲示板に書き込みを行おうとする可能性は、無視してもいいだろう。個人向けプロバイダでもなさげな雰囲気だし(唯一逆引きできたアドレスのホスト名は"host.a1hosting4u.com")。

$ whois  66.232.118.177

Country:    US

NetRange:   66.232.96.0 - 66.232.127.255
CIDR:       66.232.96.0/19

*連投の例
(ReadMore...)

* 掲示板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...)

* 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 ;
  }

* 色々な掲示板spam

#掲示板spam対策 #Web
 うちの掲示板へ書き込みを試みたspam投稿ロボットの形跡を挙げる。
(ReadMore...)