Safe Browsing API - Safe Browsing API
にて、Googleがphishingやmalwareの感染に使われていると思われるURLを配布してくれるサービスを開始した。
これは直接URLが書いてあるわけじゃなくて、MD5にエンコードされたリストをダウンロードさせてくれる、というものになっている。
APIというので、怪しいURLを送ったら、向こうからマッチするかしないかを返してくれるのかと思ったのだが、MD5にした全リストを返すから、そっちでマッチングさせてくれ、というものだった。
なので、ゴミ取ったり、いくつかのパターンで試したり、というような実装はこちらでやる必要がある。
詳しくはこちらを参照。
Safe Browsing API - Safe Browsing API
でこれを、掲示板へのスパムコメント対策や、スパムメールへの対策にも利用できると思う。
URLBLのような使い方をするわけです。
phishingのメールにはそのURLが書いてあるから弾けるだろうし、こないだ有ったbiglobe-ne.comの件なんかも、Google経由で行くと警告が出たから、コメントスパムのフィルタとして利用すれば効いたはずだと思う。
次に出てくるのは、URL短縮転送サービスを経由して使う、というものだと思うけど、その手のサービスをリストアップすることは可能だろうから、転送サービスのURLだったら、その先のURLまでみて、それで判別すればよいだろう。
ちなみに、転送先がさらに転送だったら、その時点で十分怪しいから拒否してしまえばよい。
まだどこにもサンプルプログラムも転がってないので、Digest::MD5::Perl使ってぼちぼちサンプル書いてみたい。
(追記)
例の中華スパマーのURL、例えば www.din-or.com/bbs/ とかでぐぐると
www.din-or.com/bbs/
このサイトはコンピュータに損害を与える可能性があります。
と出てくるので、このURLは登録されていることがわかります。
簡単に試すには、上記サイトでAPIキーもらって、google-black-hash.txt google-malware-hash.txt というMD5ハッシュ化されたリストファイルをダウンロードします。
ただ、中身のリストはこんな感じのMD5ハッシュなので、実際にどんなサイトがリストアップされてるのかはわかりません。
<BODY>[goog-malware-hash 1.85] +0000a2e9842085e75a57282eff0e7832=20 +0001849970ec2acd0b73bfa18eb91ac8 +0001b67cc3f39afdb2a2acb71cd7f869=20 +00023d5c9707dbe4bece6a215e725f96 +0002ca1961f3581c298757fd999c9be4=20
で、perlでDigest::MD5のモジュール突っ込んで、以下のようなサンプルプログラムを書きます。
use Digest::MD5 'md5_hex'; print 'Digest is ', md5_hex('www.din-or.com/'), "\n";
するとMD5化されたハッシュが返ってきます。
Digest is 182106c5015f43e144c4e3f8d19e6fdc
これをgrepで検索すると
grep 182106c5015f43e144c4e3f8d19e6fdc google-*.txt
google-malware-hash.txt:+1820ed98bdbf3f94d0997d6c99f0b236 +182106c5015f43e144c4e3f8d19e6fdc=20
という感じにヒットしてきます。
この流れをコードにしてやればOKです。
たぶんURLを正規化してやるのが一番めんどくさそうなところです。
(さらに追記)
URLの正規化だとかについては下記の場所に、こんな感じにせいよ、というGoogleの公式情報があるんですが、残念ながらサンプルプログラムとかは無し。
Safe Browsing API - Safe Browsing API
ただ、Discussion Groupにあった情報から、Mozilla(FireFox)で利用してる際に、どんなふうに処理してるかがこちらに書いてありました。
Phishing Protection: Server Spec - MozillaWiki
しかし、これ読んで自分で実装するなら、該当のソース読んでPHPなりPerlなりに移植したほうが手っ取り早そうなので、探してみようと思います。
しかし…、すごいサイズがでかそうだから、該当箇所探すだけでも大変そうですが。
(またまた追記)
あまりにソースがでかくて、とても探しきらんかったので、id:nyama さんにメールで教えを請いました。
そうしたところ、
Phishing Protection - MozillaWiki
http://wiki.mozilla.org/Phishing_Protectionhttp://dl.google.com/firefox/google-safebrowsing.xpi
(拡張子 xpi をzip に変更すれば解凍できる)
というようなアドバイスをいただき、見事該当箇所のソースを見ることが出来ました。ありがとうございます。
上のFireFox本体に組み込まれたものはC++で書いてあるソースで、下のエクステンションのものはJavascriptのソースとなっています。
とりあえず、JavascriptのほうをPHP/Perlに移植する方向で進めたいと思っています。
(さらに追記)
やっぱりSpamAssassin向けにそういうプラグイン書いてる人が出てきてて、Net::Google::Safebrowsingというモジュール書いてるそうです。
モーグルとカバとパウダーの日記 - SpamAssassin向けGoogle Safe Browsingプラグイン
というわけで、PukiWiki用のスパムフィルタ書くのはそっちができあがるまで待つことにしました。