スパム対策
Original2002年8月
(この記事では、 Arcを実行するために構築したスパム防止の Web ベースのメール リーダーで使用されるスパム フィルタリング手法について説明します。改良されたアルゴリズムについては、 「Better Bayesian Filtering」で説明されています。)
スパムを阻止することは可能であり、コンテンツ ベースのフィルターがその方法であると私は考えています。スパマーの弱点はメッセージです。スパマーは、あなたが設定した他のどんな障壁も回避することができます。少なくとも、これまでのところはそうでした。しかし、スパマーは、どんなメッセージであれ、それを届けなければなりません。スパマーのメッセージを認識するソフトウェアを作成できれば、スパマーがそれを回避できる方法はありません。
受信者にとって、スパムは簡単に認識できます。メールを読んでスパムを破棄する人を雇えば、ほとんど苦労せずに実行できます。AI 以外で、このプロセスを自動化するには、どの程度の作業が必要ですか?
かなり単純なアルゴリズムでこの問題を解決できると思います。実際、個々の単語のスパム確率のベイジアン結合を使用するだけで、現在のスパムを十分適切にフィルタリングできることが分かりました。わずかに調整した (以下で説明する) ベイジアン フィルターを使用すると、1000 個のスパムのうち 5 個未満が見逃され、誤検出は 0 個になりました。
統計的アプローチは、スパム フィルターを作成するときに最初に試されるものではありません。ほとんどのハッカーの最初の本能は、スパムの個々の特性を認識するソフトウェアを作成しようとすることです。スパムを見ると、これらの人々が「親愛なる友人」で始まるメールや、件名がすべて大文字で 8 つの感嘆符で終わるメールを私に送ろうとする厚かましさに驚かされます。私は、1 行程度のコードでそのようなメールをフィルターできます。
実際にやってみると、最初はうまくいきました。いくつかの簡単なルールで、受信するスパムを大幅に減らすことができます。単に「クリック」という単語を探すだけで、スパム コーパス内のメールの 79.7% を捕捉でき、誤検知はわずか 1.2% です。
統計的アプローチを試す前に、私は約 6 か月かけて、個々のスパムの特徴を探すソフトウェアを作成しました。その結果、スパムの最後の数パーセントを認識するのが非常に難しくなり、フィルターを厳しくするほど誤検出が増えることがわかりました。
誤検知とは、無害な電子メールが誤ってスパムとして識別されることです。ほとんどのユーザーにとって、正当な電子メールを見逃すことはスパムを受信することより桁違いに悪いので、誤検知を引き起こすフィルターは、患者に死の危険をもたらすニキビ治療薬のようなものです。
ユーザーが受け取るスパムメールが増えるほど、スパム フォルダーにある無害なメールに気付く可能性は低くなります。そして不思議なことに、スパム フィルターが高性能になるほど、誤検知の危険性も高まります。これは、フィルターが高性能になると、ユーザーがキャッチしたメールをすべて無視する可能性が高くなるためです。
なぜこんなに長い間、統計的アプローチを試さなかったのかはわかりません。スパムの特徴を自分で特定しようとすることに夢中になって、まるでスパマーと競争ゲームをしているような気分になっていたからだと思います。(ハッカーでない人はこのことに気付かないことが多いですが、ほとんどのハッカーは非常に競争心が強いです。) 統計分析を試してみたところ、すぐに、自分が考えていたよりもはるかに賢いことがわかりました。もちろん、"virtumundo" や "teens" などの用語がスパムのよい指標であることはわかりました。しかし、"per"、"FL"、"ff0000" もスパムのよい指標であることもわかりました。実際、"ff0000" (html では bright red の略) は、ポルノ用語と同じくらいスパムのよい指標であることがわかりました。
統計フィルタリングのやり方を簡単に説明します。まず、スパムのコーパス 1 つと非スパムのメールのコーパス 1 つから始めます。現在、各コーパスには約 4000 件のメッセージが含まれています。各コーパス内の各メッセージのヘッダーと埋め込み HTML および JavaScript を含むテキスト全体をスキャンします。現在、英数字、ダッシュ、アポストロフィ、ドル記号はトークンの一部と見なし、その他はすべてトークンの区切り文字と見なしています (この点については改善の余地があると思われます)。数字のみのトークンは無視し、HTML コメントもトークンの区切り文字として見なさずに無視します。
各コーパス内で各トークン (現在は大文字と小文字を区別しません) が出現する回数を数えます。この段階で、トークンを出現回数にマッピングする、コーパスごとに 1 つずつ、合計 2 つの大きなハッシュ テーブルが作成されます。
次に、3番目のハッシュテーブルを作成します。今回は、各トークンを、それを含む電子メールがスパムである確率にマッピングします。これは次のように計算します[1]。
(let ((g (* 2 (or (gethash word good) 0))) (b (or (gethash word bad) 0))) (unless (< (+ gb) 5) (max .01 (min .99 (float (/ (min 1 (/ b nbad)) (+ (min 1 (/ g ngood)) (min 1 (/ b nbad)))))))))
ここで、word は確率を計算しているトークン、good と bad は最初の手順で作成したハッシュ テーブル、ngood と nbad はそれぞれ非スパム メッセージとスパム メッセージの数です。
これをコードとして説明して、いくつかの重要な詳細を示しました。誤検知を避けるために、確率に少し偏りを持たせたいのですが、試行錯誤の結果、good のすべての数字を 2 倍にするのがよい方法であることがわかりました。これは、正当な電子メールに時々出現する単語と、ほとんど出現しない単語を区別するのに役立ちます。合計で 5 回以上出現する単語のみを考慮します (実際には、2 倍にするため、非スパム メールで 3 回出現すれば十分です)。次に、一方のコーパスに出現し、もう一方のコーパスには出現しない単語にどの確率を割り当てるかという問題があります。ここでも試行錯誤の結果、.01 と .99 を選択しました。ここで調整の余地があるかもしれませんが、コーパスが大きくなるにつれて、このような調整はいずれにせよ自動的に行われます。
特に注意深い人なら、出現回数を数えるために各コーパスを 1 つの長いテキスト ストリームと見なしている一方で、スパム確率を計算する際の除数として、合計の長さではなく、各コーパスに含まれる電子メールの数を使用していることに気付くでしょう。これにより、誤検知を防ぐための別のわずかなバイアスが追加されます。
新しいメールが到着すると、そのメールはトークンにスキャンされ、最も興味深い 15 個のトークン (興味深いかどうかは、スパム確率が中立の 0.5 からどれだけ離れているかで測定されます) を使用して、メールがスパムである確率を計算します。probs が 15 個の個別の確率のリストである場合、次のようにして結合された確率を計算します。
(let ((prod (apply #'* probs))) (/ prod (+ prod (apply #'* (mapcar #'(lambda (x) (- 1 x)) probs)))))
実際に生じる疑問の 1 つは、見たことのない単語、つまり単語の確率のハッシュ テーブルに出現しない単語に、どのような確率を割り当てるかということです。これも試行錯誤の結果、0.4 が適切な数値であることがわかりました。これまで見たことのない単語は、おそらく無害です。スパム ワードは、あまりにもよく知られている傾向があります。
このアルゴリズムを実際の電子メールに適用した例が、最後の付録に記載されています。
上記のアルゴリズムでスパムである確率が 0.9 を超えるメールはスパムとして扱います。ただし、実際には、このしきい値をどこに置くかはあまり重要ではありません。なぜなら、範囲の中央に来る確率はほとんどないからです。
統計的アプローチの大きな利点の 1 つは、それほど多くのスパムを読む必要がないことです。過去 6 か月間、私は文字通り何千ものスパムを読みましたが、それは本当に士気をくじくものでした。ノーバート・ウィーナーは、奴隷と競争すれば奴隷になると言いましたが、スパマーと競争するのも同様に屈辱的です。個々のスパムの特徴を認識するには、スパマーの心に入り込まなければなりませんが、率直に言って、私はスパマーの心の中にいる時間をできるだけ短くしたいと思っています。
しかし、ベイジアン アプローチの本当の利点は、もちろん、何を測定しているかがわかっていることです。SpamAssassin のような特徴認識フィルターは、電子メールにスパムの「スコア」を割り当てます。ベイジアン アプローチは実際の確率を割り当てます。「スコア」の問題は、誰もそれが何を意味するのか知らないことです。ユーザーはそれが何を意味するのか知りませんが、さらに悪いことに、フィルターの開発者も知りません。電子メールに「セックス」という単語が含まれている場合、何ポイント獲得すべきでしょうか。確率は、もちろん間違えられる可能性がありますが、それが何を意味するのか、またはそれを計算するためにどのように証拠を組み合わせるべきかについて、曖昧さはほとんどありません。私のコーパスに基づくと、「セックス」は、含まれている電子メールがスパムである確率が .97 であるのに対し、「セクシー」は .99 の確率を示します。そして、同様に曖昧さのないベイズの法則は、両方の単語を含む電子メールは、(ありそうもないが) 他の証拠がない場合、スパムである確率が 99.97% であると述べています。
ベイジアン アプローチは確率を測定するため、メール内の良い証拠も悪い証拠もすべて考慮します。スパムに不釣り合いにまれにしか出現しない単語 (「though」や「tonight」や「apparently」など) は、確率を低下させるのに「unsubscribe」や「opt-in」などの悪い単語が確率を上昇させるのと同じくらいの影響を与えます。したがって、たまたま「sex」という単語が含まれている、それ以外は無害なメールは、スパムとしてタグ付けされません。
もちろん、理想的には、確率は各ユーザーごとに個別に計算されるべきです。私は「Lisp」という単語を含むメールをたくさん受け取りますが、(今のところ)そのようなスパムはありません。したがって、そのような単語は事実上、私にメールを送信するための一種のパスワードです。以前のスパム フィルタリング ソフトウェアでは、ユーザーがそのような単語のリストを設定でき、そのリストを含むメールは自動的にフィルターを通過しました。私のリストには「Lisp」などの単語と郵便番号を入れておいたので、(そうでなければかなりスパムっぽい) オンライン注文の領収書が通過するようになりました。私は自分がとても賢いと思っていたのですが、ベイジアン フィルターでも同じことが起こり、さらに、考えもしなかった単語がたくさん見つかりました。
冒頭で、当社のフィルターは 1000 通中 5 通未満のスパムを通過させ、誤検出は 0 であると述べましたが、これは私のメールのコーパスに基づいて私のメールをフィルター処理することを意味します。しかし、これらの数字は誤解を招くものではありません。なぜなら、それが私が提唱しているアプローチだからです。つまり、各ユーザーのメールを、そのユーザーが受信したスパム メールと非スパム メールに基づいてフィルター処理するのです。基本的に、各ユーザーには、通常の削除ボタンとスパムとして削除ボタンの 2 つの削除ボタンが必要です。スパムとして削除されたものはすべてスパム コーパスに入り、それ以外はすべて非スパム コーパスに入ります。
シード フィルターをユーザーに提供することもできますが、最終的には各ユーザーが実際に受信したメールに基づいて単語ごとの確率を独自に持つ必要があります。これにより (a) フィルターの有効性が高まり、(b) 各ユーザーがスパムの正確な定義を独自に決定できるようになり、(c) おそらく最も良い点は、スパム送信者がメールを調整してフィルターを通過させることが難しくなることです。フィルターの頭脳の多くが個々のデータベースにある場合、シード フィルターを通過できるようにスパムを調整するだけでは、個々のユーザーのさまざまな、より訓練されたフィルターをスパムがどの程度うまく通過するかについて何も保証されません。
コンテンツベースのスパム フィルタリングは、多くの場合、フィルタリングなしでメールを受け入れることができる送信者のリストであるホワイトリストと組み合わされます。このようなホワイトリストを作成する簡単な方法の 1 つは、ユーザーがこれまでにメールを送信したすべてのアドレスのリストを保持することです。メール リーダーにスパムとして削除するボタンがある場合は、ユーザーが通常のゴミ箱として削除したすべてのメールの送信元アドレスを追加することもできます。
私はホワイトリストの支持者ですが、フィルタリングを改善する方法というよりは、計算を節約する方法として支持しています。ホワイトリストを使用すると、聞いたことのない人からのメールだけをフィルタリングすればよく、初めてメールを送信する人は慣習によってあなたに言うことができる内容が制限されるため、フィルタリングが簡単になるだろうと以前は考えていました。すでに知っている人からセックスについて話しているメールが送られてくるかもしれませんが、初めてメールを送信する人はそうしないでしょう。問題は、人は複数のメール アドレスを持つことができるため、送信元アドレスが新しくなっても、送信者が初めてあなたにメールを送っているとは限らないことです。古い友人 (特にハッカーの場合) が突然新しい送信元アドレスでメールを送信することは珍しくありません。そのため、未知のアドレスからのメールを特に厳密にフィルタリングすることで誤検出のリスクを冒すことはできません。
しかし、ある意味では、私のフィルター自体が一種のホワイトリスト (およびブラックリスト) を体現しています。なぜなら、フィルターはヘッダーを含むメッセージ全体に基づいているからです。したがって、フィルターは信頼できる送信者の電子メール アドレスや、メールが送信者から私に届く経路までを「知っている」のです。また、サーバー名、メーラーのバージョン、プロトコルなど、スパムについても同様のことを知っています。
スパム フィルタリングの現在の速度を維持できると思えば、この問題は解決したとみなすでしょう。しかし、スパムは進化するため、現在のスパムのほとんどをフィルタリングできたとしても、あまり意味がありません。実際、これまでのほとんどのスパム対策技術は、新しい耐性菌を生み出すだけの殺虫剤のようなものでした。
私はベイジアン フィルターにもっと期待しています。なぜなら、ベイジアン フィルターはスパムとともに進化するからです。したがって、スパマーが個々の単語に基づく単純なスパム フィルターを回避するために「cock」の代わりに「c0ck」を使い始めると、ベイジアン フィルターは自動的にそれを検知します。実際、「c0ck」は「cock」よりもはるかに有罪を示す証拠であり、ベイジアン フィルターはそれがどれだけ有罪であるかを正確に認識しています。
それでも、スパム フィルタリングの計画を提案する人は誰でも、次の質問に答えられなければなりません。スパマーがあなたの行動を正確に知っていたら、彼らはあなたをどれだけうまくかわすことができるでしょうか。たとえば、チェックサム ベースのスパム フィルタリングが深刻な障害になった場合、スパマーはメッセージ本文を生成するためにマッド リブ手法に切り替えるだけだと思います。
ベイジアン フィルターを破るには、スパマーがメールをユニークにしたり、個々の卑猥な言葉の使用をやめたりするだけでは十分ではありません。スパマーは自分のメールを通常のメールと区別できないようにする必要があります。そして、これはスパマーにとって大きな制約になると思います。スパムは主にセールス ピッチなので、通常のメールがすべてセールス ピッチでない限り、スパムは必然的に異なる特徴を持つことになります。また、スパマーは当然、インフラストラクチャ全体を変更 (変更し続ける) する必要があります。そうしないと、メッセージ本文に何をしたとしても、ベイジアン フィルターにとってヘッダーは相変わらず悪く見えるからです。スパマーが使用するインフラストラクチャについて十分に知らないため、ヘッダーを無害に見せるのがどれほど難しいかはわかりませんが、メッセージを無害に見せることよりも難しいのではないかと思います。
ヘッダーの問題を解決できたと仮定すると、将来のスパムはおそらく次のようになります。
Hey there. Thought you should check out the following: http://www.27meg.com/foo
なぜなら、コンテンツ ベースのフィルタリングでは、スパマーに売り込みを行う余地はこれくらいしかないからです。(実際、フィルターを通過することさえ困難です。メール内の他のすべてが中立的であれば、スパムの可能性は URL に左右され、中立的に見せるにはある程度の努力が必要になるからです。)
スパマーは、身元を隠そうともしない、いわゆるオプトイン リストを運営する企業から、メール サーバーを乗っ取ってポルノ サイトを宣伝するスパムを送信する人まで多岐にわたります。フィルタリングを使用して、選択肢を上記のようなメールに絞り込めば、「合法的な」スパマーはほぼ廃業するはずです。スパマーは、さまざまな州法により、なぜ自分のスパムがスパムではないのか、また「サブスクリプション」をキャンセルする方法についての定型文を含める義務があると感じており、そのようなテキストは簡単に認識できます。
(以前は、法律を厳しくすればスパムが減ると考えるのは甘い考えだと思っていました。今では、法律を厳しくしてもスパマー*が送信するスパムの量は減らないかもしれませんが、*フィルターが受信者が実際に目にするスパムの量を減らすのに間違いなく役立つと考えています。)
あらゆる面で、スパマーが行えるセールストークを制限すれば、スパマーは廃業に追い込まれることになるでしょう。ビジネスという言葉は覚えておくべき重要な言葉です。スパマーはビジネスマンです。彼らがスパムを送るのは、それが効果的だからです。それが効果的なのは、応答率がひどく低い (カタログ郵送の場合は 100 万件あたり 3,000 件であるのに対し、最高でも 15 件) にもかかわらず、彼らにとってのコストは実質的にゼロだからです。受信者にとってのコストは莫大で、100 万件の受信者がスパムを削除するのに 1 秒を費やすごとに約 5 人週かかりますが、スパマーはそれを支払う必要はありません。
しかし、スパムを送信すると、スパマーはいくらかのコストを被ります。[2] そのため、フィルタリングによって、またはフィルタを使用してスパマーに売り込みを弱めることによって、応答率を低くすることができれば、スパムを送信する価値があると考える企業は少なくなります。
スパマーがそのようなセールストークを使う理由は、応答率を上げるためです。これはスパマーの心の中を覗くことよりもさらに不快なことかもしれませんが、スパムに反応する人の心の中をちょっと覗いてみましょう。この人は驚くほど信じやすいか、自分の性的関心を深く否定しているかのどちらかです。いずれにしても、スパムが私たちにとっては不快で愚かに思えても、彼らにとっては刺激的なのです。刺激的に聞こえなければ、スパマーはこのようなことを言わないでしょう。そして、「次の内容をチェックした方がいいと思います」という内容は、現在スパマーが言うような内容ほど、スパムの受信者に訴える力はありません。結果、刺激的なセールストークを盛り込めなければ、スパムはマーケティング手段としての効果が低くなり、スパムを使いたいと考える企業は少なくなります。
結局、これが大きな勝利です。スパム フィルタリング ソフトウェアの作成を始めたのは、スパムを見たくないと思ったからです。しかし、スパムのフィルタリングが十分にうまくなれば、このソフトウェアは機能しなくなり、スパマーは実際にスパムを送信しなくなります。
ソフトウェアから法律まで、スパム対策のあらゆるアプローチの中で、ベイジアン フィルタリングが最も効果的であると私は考えています。しかし、スパム対策の取り組みの種類が多ければ多いほど、より良いとも思います。スパマーを拘束する対策は、フィルタリングを容易にする傾向があるからです。コンテンツ ベースのフィルタリングの世界でも、同時に使用されるソフトウェアの種類が多ければ多いほど、スパマーがスパムをフィルタリングで通過させるのが難しくなります。
付録: フィルタリングの例
以下は、この記事を書いている間に届いたスパムの例です。このスパムの中で最も興味深い 15 個の単語は次のとおりです。
qvp0045 indira mx-05 intimail $7500 freeyankeedom cdo bluefoxmedia jpg unsecured platinum 3d0 qves 7c5 7c266675
これらの単語は、ヘッダーとメッセージ本文の単語が混ざったもので、スパムによくあることです。また、私のデータベースでは、これらの単語のスパム確率はすべて 0.99 です。実際、確率が 0.99 の単語は 15 個以上あり、これらは最初に見つかった 15 個にすぎません。
残念ながら、このメールはベイズの定理の使用例としては退屈なものになっています。興味深いさまざまな確率を確認するには、この実に異例なスパムを調べる必要があります。
このスパムの中で最も興味深い 15 個の単語とその確率は次のとおりです。
madam 0.99 promotion 0.99 republic 0.99 shortest 0.047225013 mandatory 0.047225013 standardization 0.07347802 sorry 0.08221981 supported 0.09019077 people's 0.09019077 enter 0.9075001 quality 0.8921298 organization 0.12454646 investment 0.8568143 very 0.14758544 valuable 0.82347786
今回は、良い証拠と悪い証拠が混在しています。「最も短い」などの単語は、「マダム」や「昇進」などの単語が有罪の証拠となるのと同じくらい、無罪の証拠となります。しかし、有罪の証拠の方が依然として強いです。ベイズの法則に従ってこれらの数字を組み合わせると、結果として得られる確率は .9027 になります。
「Madam」は明らかに「Dear Sir or Madam」で始まるスパムから来ています。それらはあまり一般的ではありませんが、私の正規の電子メールには「madam」という言葉は一度も出てこないので、すべては比率の問題です。
「共和国」はナイジェリアの詐欺メールによく登場し、韓国や南アフリカに言及するスパムにも 1、2 回登場するため、高得点を獲得しました。このスパムを識別するのに役立つのは偶然だと言う人もいるかもしれません。しかし、スパムの可能性を調べたところ、このような偶然は多く、物事を間違った方向ではなく正しい方向に導く不思議な傾向があることがわかりました。この場合、「共和国」という単語がナイジェリアの詐欺メールとこのスパムに登場しているのは、まったくの偶然ではありません。発展途上国を巻き込んだ疑わしいビジネス提案は数多くあり、これらの提案は、共和国であることを明示的に指定する名前を持つ可能性が高くなります (実際にはそうではないため)。[3]
一方、「Enter」は真のミスです。これは主に購読解除の指示で発生しますが、ここでは完全に無害な方法で使用されています。幸い、統計的アプローチはかなり堅牢であり、結果が狂い始める前にかなりのミスを許容できます。
比較のために、フィルターを通過した珍しいスパムの例を示します。なぜでしょうか? まったくの偶然ですが、このスパムには私の実際の電子メールに出てくる単語が詰まっています。
perl 0.01 python 0.01 tcl 0.01 scripting 0.01 morris 0.01 graham 0.01491078 guarantee 0.9762507 cgi 0.9734398 paul 0.027040077 quite 0.030676773 pop3 0.042199217 various 0.06080265 prices 0.9359873 managed 0.06451222 difficult 0.071706355
ここに良いニュースがいくつかあります。まず、このメールは、たまたまプログラミング言語を専門とせず、Morris という親友もいない人のフィルターを通過することはないでしょう。平均的なユーザーにとって、ここにある上位 5 つの単語はすべて中立的であり、スパムの可能性には影響しません。
第二に、単語の組み合わせに基づくフィルタリング (下記参照) で、この単語をうまくキャッチできると思います。「費用対効果が高い」、「セットアップ料金」、「返金」など、かなり有罪を示す単語です。そしてもちろん、彼らが私 (または私が参加しているネットワーク) にスパムを送り続けるなら、「Hostex」自体がスパム用語として認識されるでしょう。
最後に、無害な電子メールを紹介します。その中で最も興味深い 15 個の単語は次のとおりです。
continuation 0.01 describe 0.01 continuations 0.01 example 0.033600237 programming 0.05214485 i'm 0.055427782 examples 0.07972858 color 0.9189189 localhost 0.09883721 hi 0.116539136 california 0.84421706 same 0.15981844 spot 0.1654587 us-ascii 0.16804294 what 0.19212411
ここにある単語のほとんどは、メールが無害なものであることを示しています。悪臭を放つ単語が 2 つあります。「color」(スパマーは色付きのフォントが大好きです) と「California」(推薦文やフォームのメニューにも表示されます) ですが、これらは「continuation」や「example」などの明らかに無害な単語に勝るほどではありません。
「describe」の割合がまったく無害であるというのは興味深いことです。私の 4000 件のスパムのうち、1 件も発生していません。データには、このような驚きがいっぱいです。スパム テキストを分析すると、スパマーが使用する言語のサブセットがいかに狭いかがわかります。この事実と、個々のユーザーのメールの同様に特徴的な語彙が組み合わさって、ベイジアン フィルタリングが有望な選択肢となっています。
付録: その他のアイデア
まだ試していないアイデアの 1 つは、単語のペア、または単語の 3 つを基準にフィルタリングすることです。これにより、確率の推定値がはるかに正確になります。たとえば、現在のデータベースでは、「offers」という単語の確率は .96 です。確率を単語のペアに基づいて計算すると、「special offers」と「valuable offers」の確率は .99 になり、「approach offers」(「this approach offers」のように) の確率は .1 以下になります。
私がこれをやらなかった理由は、個々の単語に基づくフィルタリングがすでにうまく機能しているからです。しかし、スパムの検出が難しくなった場合にフィルタを強化する余地があることを意味します。(興味深いことに、単語のペアに基づくフィルタは、事実上、逆方向に実行されるマルコフ連鎖テキスト ジェネレータになります。)
特定のスパムの特徴 (たとえば、宛先フィールドに受信者のアドレスが表示されない) は、もちろんスパムを認識する上で価値があります。これらの特徴は、仮想単語として扱うことで、このアルゴリズムで考慮することができます。将来のバージョンでは、少なくとも最も悪質なスパム指標のいくつかについては、これを実行する予定です。特徴を認識するスパム フィルターは、多くの点で正しいのですが、欠けているのは、証拠を組み合わせるための全体的な規律です。
非スパムの特徴を認識することは、スパムの特徴を認識することよりも重要かもしれません。誤検知は非常に心配なため、特別な対策が必要です。将来のバージョンでは、誤検知を回避するために特別に設計された第 2 レベルのテストを追加する予定です。メールがこの第 2 レベルのフィルターをトリガーすると、スパムの可能性がしきい値を超えていても受け入れられます。
この第 2 レベルのフィルタリングがベイジアンであるとは考えていません。誤検出の数がパターンに気づくほど多くないため、必然的にアドホックになるだけでなく、推測に基づくものになります。(いずれにしても、バックアップ システムがプライマリ システムと同じテクノロジに依存しないのであれば、それはそれでよいことです。)
今後試すかもしれないもう 1 つのことは、メールの特定の部分に特別な注意を向けることです。たとえば、現在のスパムの約 95% には、訪問してほしいサイトの URL が含まれています。(残りの 5% は、電話番号に電話をかけたり、メールまたは米国の郵便アドレスに返信したり、場合によっては特定の株を購入したりすることを求めています。) このような場合、URL だけで、メールがスパムであるかどうかをほぼ判断できます。
ドメイン名は、多くの場合、複数の単語が連結された形で構成されているという点で、(ドイツ語以外の) メールの残りのテキストとは異なります。一般的には計算コストは高くなりますが、分解してみる価値はあるかもしれません。フィルターがトークン「xxxporn」をこれまで見たことがない場合、個々のスパム確率は .4 になりますが、「xxx」と「porn」は、(私のコーパスでは) それぞれ .9889 と .99 の確率を持ち、組み合わせた確率は .9998 になります。
スパマーがメッセージの本文で有罪を示す単語の使用を徐々にやめざるを得なくなるにつれて、ドメイン名の分解がさらに重要になると予想しています。(IP アドレスを含む URL は、一部のシステム管理者のメールを除いて、非常に有罪を示すサインであることは言うまでもありません。)
スパマーが宣伝する URL のリストを協力して管理するのは良い考えかもしれません。悪意のある、または無能な投稿を防ぐには、Raph Levien が研究したタイプの信頼基準が必要ですが、そのようなものがあれば、フィルタリング ソフトウェアの強化につながります。また、ボイコットの便利な根拠にもなります。
疑わしい URL をテストする別の方法としては、ユーザーがその URL について言及しているメールを見る前に、クローラーを送信してサイトを調べるという方法があります。ベイジアン フィルターを使用して、メールと同じようにサイトを評価することができ、サイトで見つかったものはすべて、メールがスパムである可能性の計算に含めることができます。リダイレクトにつながる URL は、もちろん特に疑わしいものになります。
本当に良いアイデアだと思う協力プロジェクトは、スパムの巨大なコーパスを蓄積することです。大規模でクリーンなコーパスは、ベイジアン フィルタリングをうまく機能させるための鍵です。ベイジアン フィルタは、実際にコーパスを入力として使用できます。しかし、そのようなコーパスは、他の種類のフィルタのテストにも使用できるため、他の種類のフィルタにも役立ちます。
このようなコーパスの作成には、いくつかの技術的な問題があります。もちろん、悪意のある、または無能な投稿を防ぐための信頼の指標が必要です。また、コーパス内のメールから個人情報 (宛先アドレスや CC だけでなく、宛先アドレスをエンコードすることが多い配信停止 URL の引数など) を削除する方法も必要です。このプロジェクトに取り組みたい人がいれば、それは世界にとって良いこととなるでしょう。
付録: スパムの定義
スパムとは何かについては大まかな合意があると思いますが、明確な定義があると便利です。スパムの中心的なコーパスを確立したい場合や、スパムのフィルタリング率を意味のある形で比較したい場合は、これを実行する必要があります。
まず、スパムは迷惑な商業メールではありません。近所の誰かが、私が状態の良い古い Raleigh の 3 速バイクを探していると聞いて、それを売るとメールで申し出たら、私は大喜びするでしょう。しかし、このメールは商業メールであると同時に迷惑メールでもあります。スパムの特徴 (実際、スパムの存在理由) は、迷惑メールであることではなく、自動化されていることです。
スパムがたいてい商業目的であることも、単なる偶然です。たとえば、誰かが何らかの政治的な目的を支援するために大量のメールを送信し始めた場合、それはポルノサイトを宣伝するメールと同じくらいスパムになります。
私は、スパムを迷惑な自動メールと定義することを提案します。したがって、この定義には、多くの法的スパム定義には含まれないメールが含まれます。法的スパム定義は、おそらくロビイストの影響を受けており、受信者と「既存の関係」を持つ企業から送信されたメールを除外する傾向があります。しかし、たとえば企業から何かを購入したからといって、その企業から継続的にメールを要求されたことにはなりません。オンライン ストアで何かを注文し、その後、スパムが大量に送られてきたとしても、それはやはりスパムです。
スパムを送信する企業は、多くの場合、ユーザーに「登録解除」の方法を提供したり、スパムの受信を停止したい場合は、その企業のサイトにアクセスして「アカウント設定」を変更するよう求めます。これだけでは、メールがスパムであることを止めるのに十分ではありません。オプトアウトしないことは、オプトインすることと同じではありません。受信者が明確にラベル付けされたボックス (デフォルトでは「いいえ」) に明示的にチェックを入れて、メールを受信することを要求しない限り、そのメールはスパムです。
ビジネス関係によっては、ある種のメールを暗黙的に要求することがあります。オンラインで注文する場合、暗黙的に領収書や注文品の発送通知を要求すると思います。ドメイン名の有効期限が切れるという警告メールが Verisign から送られてきても気にしません (少なくとも、Verisign がドメイン名の実際の登録業者である場合は)。しかし、Verisign から E コマース Web サイト構築の無料ガイドを提供するメールが送られてきたら、それはスパムです。
注:
[1] この記事の例は、信じられないかもしれませんが、アクセシビリティを高めるために Common Lisp に翻訳されています。ここで説明するアプリケーションは、まだリリースされていないArcという新しい Lisp 方言をテストするために作成したものです。
[2] 現在、100万通のスパムを送信するのに約200ドルという最低料金のようです。これは1通あたり1セントの50分の1と非常に安価です。しかし、たとえばスパムの95%をフィルタリングすると、スパマーが特定のオーディエンスに到達するコストが20倍に増加します。これを吸収できるほどのマージンを持つ企業はほとんどありません。
[3] 経験則として、国名の前に修飾語が多いほど、統治者の腐敗度が高い。X社会主義人民民主共和国と呼ばれる国は、おそらくあなたが世界で一番住みたくない場所でしょう。
この原稿を読んでくれた Sarah Harlin 氏、フィルタリングに関するいくつかの優れたアイデアを提供し、メール インフラストラクチャを作成してくれた Daniel Giffin 氏 (Arc インタープリターの製品版も作成中)、スパムに関する多くの議論を提供してくれた Robert Morris 氏、Trevor Blackwell 氏、Erann Gat 氏、信頼メトリックに関するアドバイスを提供してくれた Raph Levien 氏、統計に関するアドバイスを提供してくれた Chip Coldwell 氏と Sam Steingold 氏に感謝します。
このエッセイと他の14のエッセイは[
ハッカーと画家
](http://www.amazon.com/gp/product/0596006624)。
詳細情報: