反撃するフィルタ --- Filters That Fight Back

Paul Graham, August 2003

これは、Paul Graham: Filters That Fight Back を、原著者の許可を得て翻訳・公開するものです。

<版権表示>
本和訳テキストの複製、変更、再配布は、この版権表示を残す限り、自由に行って結構です。
(「この版権表示」には上の文も含まれます。すなわち、再配布を禁止してはいけません)。
Copyright 2003 by Paul Graham
原文: http://www.paulgraham.com/ffb.html
日本語訳:Shiro Kawai (shiro @ acm.org)
<版権表示終り>

Paul Graham氏のエッセイをまとめた『ハッカーと画家』の 邦訳版が出版されました。
出版社の案内ページ Amazon.co.jp サポートページ

2003/08/09 翻訳公開、原文の改訂に追従
2003/08/10 原文の改訂に追従(主としてリンクの追加)
2003/08/11 原文の改訂に追従


ベイジアンフィルタは十分に普及し、とうとう それをかいくぐるために工夫を凝らしたspamを目にするようになってきた。 今のところ、そこで使われているトリックは、ベイジアンフィルタを 破るには至っていないようだ。だが、これは第一ラウンドにすぎない。

spam業者はベイジアンフィルタを破るために何をしているのだろうか。 そして、フィルタ開発者はどうやって反撃できるだろうか。

そそられるアイディアの一つは、文字通り、反撃するというものだ。 受け取るメールに含まれている全てのリンクをフィルタが自動的に たどるようにすることで、spam業者のサービスを止めてしまおう というものだ。より正確なフィルタを求めると、いずれはそこにたどり着くだろう。 ならば、もう始めても良いんじゃないか。

良い語彙を増やす

ベイジアンフィルタをすり抜ける方法はふたつしかない。 良い語彙をもっと足すか、悪い語彙を使うのを避けるかだ。 私は既にどちらも見ている。

良い語彙を増やすために、spam業者は辞書からランダムな単語を 引いて来たり、本やオンライン記事からコピーした 自然な文章をごそっとメールに足したりしている。 しかし、どちらのトリックも、あまり効果を上げてはいない。

ランダムに 選んだ単語は、当然予想されることだが、 spamにも正当なメールにも同じくらい現れる単語になりがちだ。 spamに使われる語彙は正当なメールのものよりも若干狭いので、 確かにspam業者はランダムな単語を足す事で多少有利になるかもしれない。 しかし、統計的にはその効果はずっと薄まってしまう。

実際は、ランダムに選んだ単語の多くはspamにも正当なメールにも 現れない単語であり、したがってほぼ中立なspam確率を得ることになる (私は今でも、未出の単語に対しては0.4の確率を使っている)。 このようなランダムな単語のノイズに対しては、 「スパムへの対策」で述べたような 単語の出現回数の閾値を用いる事で対抗できる。 私はまだ3を閾値としている。

記事や本の内容を足す事も、 少なくとも私が見た限りでは、 ランダムな単語よりも効果を上げているようには見えない。 足された文章は確かにspamらしくないが、 それはまた私が普段受け取るメールにも似ていないため、 統計的には何ら効力を持たないのだ。

悪い語彙を減らす

ベイジアンフィルタをごまかすもう一つの方法は、 悪い語彙を少なくすることだ。一般的には2つの戦略がある。 悪い単語を隠そうとするか、 メールをspamらしくない文に書き直すかだ。

今までのところ、悪い語彙を隠そうとする方法は完全な失敗に終わっている。 私がこれまでに見た全てのトリックは、spamを捕まえるのを 難しくするどころか、むしろ易しくするものだ。 故意に違う綴りを用いるとか(例:V1agra)、空白やhtmlで単語を 分割するとか(例:S E X)、またspam全体をテキストではなく画像で 送って来るもの等がこの戦略に含まれる。

違う綴りは、 隠そうとしていた元の単語よりも結局は高いspam確率を得てしまう。 私のフィルタでは、"Viagra"のspam確率は0.9848だが、"V1agra"は0.9998だ [1]。 この種のトリックが効果をあげるためには、 spam業者はspam中に使う違う綴りの語のほとんど全てに対して、 その綴りを最初に使う人物でなければならない。 それはかなり難しい。だがそれが出来ないとしたら、 結局、新しい綴りをフィルタに教えるだけに終わるのがオチだ。

単語を分割するのも同じだ。 それらのトリックを無視するように 単語分割ルーチンを書くことはたいして難しくないだろうが、 気にならないなら放っておいても構わない。 正当なメールには、分割された単語なんて普通使われないから、 そういう単語の断片は簡単に高いspam確率となる。 私のフィルタでは、"S" 一文字だけがsubjectに現れた場合の spam確率は 0.9427だ。

spamをテキストの変わりに画像で送るのにも効果はない。 画像をユーザに見せるためには、特定のhtmlタグを使わなくちゃ ならない。そういうタグは非常に高いspam確率を得ることになる。 特にurlだ。urlにドメインネームを使って、それがかつてspamに 現れたものであれば、そこがspam業者の運の尽き。 だからといってIPアドレスを使うのはさらに無駄というものだ。 URL中の数字ほど高いspam確率を得る単語は無い。

したがって、spamをよりspamらしくない文章で書き直すことが、 成功する可能性のある唯一の戦略だ。 でもそれは大変な作業だ。 spamによっては不可能かもしれない。 住宅ローンの借り換えに関するspamを、 「借り換え」(refinance, 0.9612)、「貸し主」(lenders, 0.9862)、 「抵当」(mortgage, 0.9995)[訳註1]といった単語を用いずに どうやって書き直せというんだ? そして忘れないで欲しいのは、 どんなに婉曲な表現を用いようが、 それは他のローン借り換えspamと違っていなければならないということだ。 ここまでくれば、spam業者ももっと正当なビジネスへと鞍替えした方が 楽だと思いはじめるんじゃないか。

この考察は重要だ。もし、ベイジアンフィルタをすり抜ける唯一の方法が、 より賢くspamを書くということならば、我々はspam行為をずっと難しいものに したということになる。かつては比較的賢い少数の人間が書いた spamツールを使いさえすればspamが送れたのが、 今や比較的愚かな多数のspamを書く人間そのものに賢さが要求される ようになったからだ。

spamの技術的基盤は、Jon Praedが 「悪に落ちたハッカー」と形容した、ある種賢い人々によって作られている。 しかし、spamそのものは、個々のspam業者が書いているのだ。 spamツールはこれまではspam業者をどうにか助けてきた。 しかし、そういったツールは、 ランダムな単語を挿入したり単語を分割して綴りを変えたりすることはできても、 spamそのものをspamらしくなく書き直すことはできない。 それができるとしたら、AIが必要だろう。

さらに、spamは自然な言葉で書き直されてしまうと効果が薄れてしまう。 spamに返答するような人々は、おそらく相当なぼんやりさんで、 たくさんの大文字とエクスクラメーションマークで頭をぶんなぐられないと 何も行動しないような人々なのだ。きっと、「今すぐ応募!!」と 言ってやらないと腰を上げない人々なのだ。 だから、spam業者がより中立な言葉を使わねばならないように仕向けるだけで、 彼等を廃業させるのに十分かもしれない。来年になればわかるだろう。

未来

この戦いは始まったばかりだ。 ベイジアンフィルタをごまかすことに重点を置いたspamを私が受け取るように なったのは、ここ2ヶ月くらいのことだ。 だが、AOLがベイジアンフィルタをリリースした今、 おそらくそういうspamをもっとずっと多く目にするようになるだろう。

この戦いはどこに向かうだろうか。

「スパムへの対策」で述べた様に、私は結局のところ 全てはURLに帰着すると思っている。メールではない、Webこそがspamを もたらしているのだ。ほとんど全てのspamは、 業者にコンタクトする何らかの方法を持っており、 大抵の場合、それはURLだ [2]。 ここが、フィルタ開発者がこれから注力すべき場所だ。 spam業者にとってもっとも変えることが難しいものだからだ。

たとえspam業者が十分に賢くて、spamを普通のメールに見えるように 書き直せたとしても (実際、そういうspamもいくつかある)、 URLを無害なものに見せる方法はあまりない。 最も極端な場合、spamは私が言うところの「将来のspam」へと 縮退してしまうだろう。簡単なテキストとURLだけのものだ:

Hey there. Check out the following: 
http://www.blackboxhosting.com/foo
このような将来のspamでは、宣伝文句は一段階遠くへと追いやられている。 つまり、宣伝文句は普通のspamのようにメールそのものに含まれるのではなく、 一クリック先のWebサイトで待ちかまえているのだ [3]。

spamがサイトで待っているのだとしたら、 フィルタがそこまで見に行けばいいじゃないか。 フィルタリングアルゴリズムはほとんどそのまま、サイトの内容を判定するのにも 使える。 death2spamを開発している Richard Jowseyは既に、判定の難しいケースに関してこの方法を使いはじめ、 非常にうまくいっていると報告している。

反撃するフィルタ

私がWill Filters Kill Spam? で述べたように、spam中の全てのURLを辿ることにはおもしろい副作用がある。 もし、広く使われているメールクライアントがspamフィルタリングにこの手法を 採り入れたら、spam業者のサーバには大量のリクエストが殺到することになる。 考えれば考えるほど、これは良いアイディアに思えてくる。 ただおもしろいというだけではない。spam業者に対する明確な反撃として これ以上のものはないんじゃないかと思うんだ。

そこで私は、spamフィルタの開発者に対して、追加機能を提案したい。 「懲罰」モード、すなわち、もしオンにされたら、spam容疑のあるメッセージの 全てのURLを、ユーザが指定した回数だけ取ってくるようにするんだ [4]。

既に多くの人が気づいているように、現在のメールシステムの問題のひとつは それがあまりに受動的であることだ。指示した通りになんでもしてしまう。 この問題を解決しようと提案されたアイディアは、今までのところ、 全て新しいプロトコルを必要とした。しかし、URLによる反撃はそうではない。

URL自動取得を行うspamフィルタが広く使われるようになれば、 メールシステムはspam業者にその報いをはね返すようになる。 今までは、spamの量を増やせば増やすほど、spam業者は得をしたのだが、 これからは逆に困った事になるのだ。 まるで、顔に跳ね返って来る枝のように。 自動取得spamフィルタはspam業者のコストを押し上げ、売り上げを押し下げる。 業者の帯域使用量はいっぱいいっぱいになり、サーバは負荷のため ほとんど停止状態になり、spam業者に本気で何か申し込もうという 人にも使えなくなる。

1時間に100万通のメールを出せば、100万ヒットのアクセスが来る。 spamの量を倍にすれば、ヒットも倍になる。

もちろん、URLの中にはいわゆるWebバグも紛れ込んでおり、 それを辿ることはspam業者にそのメールが読まれたことを伝えて、 結果的にもっと多くのspamが来るかもしれない。 (だが、このことは同時に、「どれだけメールが読まれたか」という 指標を意味ないものにして、spam業者にとっての貴重な情報源の 一つを台無しにすることにもなる)。 それに、リンクのひとつは「メール配信を解除する」のリンクかもしれない。 そうしたら、合計としての効果ではspamは減る可能性だってある。

この手法は、厳密に、spamの容疑が濃いメールに対してだけ行うように すべきだろう。原理的には、何百万人もの人々に送りつけられるような URLはspamのURLだろうから、全てのメールに含まれるURLに対して HTTPリクエストを出しても、上手く行く場合が多いだろう。 だが、そうでない場合もいくつかある。例えば、Yahoo MailやHotmailの 無料メールサービスで、メールの末尾に付加されるURLがそうだ。

そのようなサイトを守り、この手法の悪用を防ぐには、 自動取得機能はspamによって宣伝されているサイトのブラックリストと 併用されなければならないだろう。ブラックリストに載っているサイトだけが 自動取得の対象となるべきで、さらにブラックリストへの追加は 人間がサイトを検査した後に行うべきだ。spamメールの有効な期間は 少なくとも数時間あるはずだから、新しいサイトを宣伝するspamが 現れても、それに対抗できるようにリストを更新するのは簡単だろう。[5]

複数回内容を取得するような自動取得型spamフィルタは、 ブロードバンド接続を持っているユーザにとってしか実用的ではないだろうが、 既にそういったユーザはspam業者を困らせるのに十分なだけいると思う。 実際、この解決法は問題をうまく裏返しているんだ。 spamの問題は、spam業者が、ごく少数のだまされやすい人々にメッセージを 届けるために、全てのメールユーザにメールをばらまくことにある。 だまされない人々は単に巻き添えを食っているんだ。 だまされない大多数の人々が、spamを受け取らないようにするには、 だまされやすい人々がspamに返事をすることを止める(もしくは、止めるように要求する) しかない。自動取得型spamフィルタは、大多数の人々にその方法を与えてくれるんだ。

これでspamは撲滅されるだろうか。多分そうはならない。 自動取得フィルタが広まったら、spam業者はきっとメールに ちゃんと動作する「登録解除」リンクを含めるようになるだろう。 それが、フィルタからの反撃を防ぐ唯一の方法になるからだ。 だから、spamは依然として送られ続けるだろうが、その対象は あまりに無謀かあまりに怠惰で自動取得フィルタを使わない (したがって、自動登録解除も使えない)人々のみとなる。 おそらく、そういった人々こそが、多くのspam業者が対象と している人々だろう。皮肉な事に、この結果は、 spamを最も的を絞った広告手法のひとつへと転化させるかもしれない。

原註

[1] 大抵の人にはここまで差は無いかもしれない。 私の受け取る(正当な)メールにはspamに関するものが多く含まれており、 それには "Viagra" という単語が良く出てくるんだ。

[2] 私が受け取るspamのうち、約95%にはURLが含まれている。 残りは「419」スパム (ナイジェリア詐欺)、マルチレベルマーケティング、 そしてASCIIでないもの (ほとんどロシア語のだ) がほぼ等分に含まれている。 その多くは受信者がメールで反応することを要求しており、 また全てフィルタするのは簡単なものだ。 誰か、こういうメールの送り主と会話するELIZAを書いてみる気はないか?

[3] これだけでも、反応の割合はぐっと減るだろう。 私の経験からすれば、ユーザが踏む手続きが一つ増えるごとに、 潜在的な顧客の数は数分の1になってゆく。

[4] 自動取得型spamフィルタは、redirectをきちんと 追わなければならないし、場合によっては1レベル以上のリンクを たどる必要がある(例えば、「ここをクリック」だけのページのような場合)。 また、そのhttpリクエストが、順序やリファラも含めて、 広く使われているWebブラウザからのものと区別できないようにして おかねばならない。

レスポンスがx秒以内に帰って来なければ、 既定値として非常に高いspam確率を割り当てることができるだろう。

自動取得回数nを定数にするかわりに、そのサイトがspamメールから 参照された回数に基づいて決めるようにするのは良いアイディアかもしれない。 濫用や事故を防ぐことにもなるし、常習的なspam業者には 特にきつくあたることができる。

[5] この記事のもとの版では、「ブラックリスト」のかわりに 「ホワイトリスト」という語を使っていた。確かにそこで挙げた リストの使い方はブラックリストと似たようなものだったが、 私は敢えてホワイトリストと呼んだ。その方が、法的な対抗措置が とられた場合に安全だと考えたからだ。だが、どうも読者を混乱させた だけだったようだ。

おそらく、ブラックリストは複数あるべきだろう。 一点に集中することは、攻撃に対しても濫用に対しても脆弱になる。

この原稿の草稿に目を通してくれた、 Brian Burton、Bill Yerazunis、Dan Giffin、 Eric Raymond、Richard Jowseyの各氏に感謝します。


訳註

訳註1
"mortgage" は文字通りには「抵当権」だが、日本語のそれが与えるほど 硬い印象ではなく、日常会話でよく出てくる。"pay the mortgage" と言えば、普通の文脈では「住宅ローンを払う」というくらいの意味。 "refinance" も文字通りには「財務状況の改善」だが、日常の文脈では 利子の安いローンに借り換えするような状況で使う。

[Practical Scheme]