Gmailの正規URLがブロックされた - 問題

Gmail がブロックされている一部のスパマーが、メールの正規バージョンがブロックされているにもかかわらず、ドットの変異パターンを使って回避しているようです。

例えば:
examplemailaddress@gmail.com はブロックされていますが、
e.x.a.m.pl.e.m.ai.lad.dre.ss@gmail.com は通過してしまいます。

ブロックは完全に機能しているわけではないようですが、ログで記録されたスクリーニング対象のメールに対しては定期的に一致が見られます。ただし、すべての組み合わせに対しては一致していません。そのユーザーは、同じブロックされた Gmail アドレスを使って今日だけで数百アカウントを作成できました。

彼らが使っている Gmail のドット変異パターンは、ドットが 6〜14 個の範囲で、メールの長さ(@ の前)は 19 文字です。+ 変異は使っていないようです(あるいは、それらの変異はすべて正常にブロックされているようです)。

参考までに、スパマーのメールに対するレーベンシュタイン距離の設定は 3 にしています(デフォルトは 2 です)。また、Discourse は最近 2.6.x から 2.7.1 安定版に更新されました。

Hmm、この件についてどこで結論が出たか覚えていませんが、@sam さん、これはおそらくバグかもしれません。あなたが述べた通り、

つまり、evil.person+77@gmail.com がブロックされると、代わりに evilperson@gmail.com もブロックされます。その後、e.v.i.l.person@gmail.com がこっそり入ろうとしても、正規化マッチングによりブロックされます。

では、sara.hanson@ がひどいことをして、sarah.anson@ が巻き込まれてしまったらどうなるのでしょうか?これも、joe98@joe99@ が同じメールアドレスと見なせるかどうか確信が持てないのと同じ状況です。これは、コミュニティの構成や、一致プロセスで用いられる手動判断のレベルに依存するでしょう。

「プラスアドレッシング」は、少なくとも同じメールアドレスのメールボックスに属するフォルダを指します(「+」より前の部分が同じであれば)。

IP アドレス範囲による登録対策はどうでしょうか?これらすべては、スパマーの技術レベルに依存します。Let’s Encrypt コミュニティからこちらに来た者として、あちらではかなり広範なスパム手法が試されたことを詳細に記録したスレッドがあります。実際に技術的な支援を提供した人物が、数週間後にスパムを行った例さえあります。

ありえません。Gmail の観点からはそれらは同じアカウントであり、つまり同じ人物です。

興味深いですね。Gmail が実際にはその区別をしていたとは知りませんでした。今日は新しいことをいくつか学びました。なぜそんなことをするのでしょうか?:thinking: 結構なスペースを占有しそうですよね。ここで問題になっているのは Gmail アドレスだけなのでしょうか?

私の記憶では、「最終的にたどり着いた状態には居心地の悪さを感じる。なぜならこれはサポートの悪夢であり、いつまでもなくならないからだ :)」という結論だったと思います。

もしあるサイトがスパムの温床であるなら、「すべての私のメールを正規化(canonical)にしてください」と言えるようにすべきだと考えます。そのデメリットなどどうでもいいのです。

つまり、以下の 2 つのメールはどちらも samsam@somewhere.com を正規化(canonical)として扱います。

sam.sam@somewhere.com
samsam+11@somewhere.com

もし sam.sam@somewhere.com が登録された場合、samsam+11@somewhere.com はもはや登録できなくなります。

これが私の最初の修正案でしたが、結局これを元に戻してしまいました(ただし、Google については特別扱いしていましたが、振り返ってみればそれは不十分でした)。

私は、以下の新しいサイト設定を追加することで、この件をすっきりと片付けるべきだと感じています。

「OMG、私は巨大なスパム温床です、メタルのコンクリートモード(tinfoil mode)をオンにしてください」

バグについては、ブロックするのを待っていると、簡単に隙間から侵入されてしまいます。現在は 100% 反応的なプロセスです。

つまり、以下は問題なく動作します(@markersocial さんはコンソールでテストしてみてください):

./launcher enter app
rails c
ScreenedEmail.block('examplemailaddress@gmail.com')
ScreenedEmail.should_block?('e.x.a.m.pl.e.m.ai.lad.dre.ss@gmail.com')
# true

問題はこれです:

# 100 以上のアカウントが作成される
ScreenedEmail.block('examplemailaddress@gmail.com')
# それでも 100 以上のアカウントがそのまま残っている

ああ、そうだ。元のリクエストは、特殊文字を含むすべてのメールをサイト設定でブロックするというものだったね。私がこれを提案して、あなたが気に入らなかったと思ったんだけど?覚えていないんだ。

これは結局、@markersocial 氏が求める機能(私が当初実装した強制正規化)が、当社の何千ものホスト顧客の誰からも必要とされていないことに尽きると思います。

リアクティブ機能(ブロック時に正規化を検索し、管理者にノイズアカウントの削除を促す機能)の改善を続けることはできますが、まずは繰り返し苦情が寄せられるのを聞いたほうがよいと考えています。

@markersocial 氏にとって正規表現ベースのブロックは明らかに機能しませんが、本人に確認していただければ幸いです。

元の投稿にある問題の再現はできておらず、問題となったアカウントはブロックが追加される前に作成された可能性が極めて高いと疑っています。

元の修正が完璧に機能し、Gmail 関連のこの問題を解決したことを確認できます。このオプションモードが復活すれば、まさに命拾いになるでしょう。

スパマーたちは常に新しい技術を学び、Facebook、Instagram、Twitter といった巨大プレイヤーさえも依然として巧妙に欺いています。これにより、他の多くの場所は「イージーモード」になってしまいます。彼らにとってこれはフルタイムの仕事であり、実質的には以下のようになります:

もし脆弱性があり、かつ(必要なコスト < 得られる収益)であれば、それは悪用されます。

彼らは実際にはどのような対策も回避できます。唯一の望みは、そのコストを上げ、金銭的にメリットがなくなる点まで引き上げることです。

検出される前に、ほぼ無制限のメールアドレスやアカウントを使って大量スパムを行うこと(その後に管理者が元の Gmail アドレスをブロックし、手動で投稿を削除する)は、非常にコスト効率が良いです。24 時間体制のモデレーターチームがない場合、その効果はさらに高まります。

スパム対策を回避するコストは低下し続けています。一つの例として、4G/5G プロキシがあります。月額 30〜50 ドル程度で、主要 ISP/ASN から提供される、実在するモバイル IP に事実上無制限にアクセスできます。これらは自動的に、あるいは手動でローテーションされ、大都市や州全体の正当なユーザーたちと共有されています。4G/5G IP は多くのユーザーによって同時に共有されています。

これらの ISP/ASN や IP をブロックすることは適切ではありません(Verizon や AT&T などのすべてのユーザーをブロックすることはできないため)。彼らは通常、IP を一度使用したら捨ててしまいます。この方法でブロックされた個々の IP は、その IP をランダムに共有している正当なユーザーもブロックしてしまいます。IP ブロックは、既知のホスティング企業の ASN を除いて、徐々に過去の遺物になりつつあります。これらのフォーラムで氷山の一角が見て取れます:

https://mpsocial.com/c/public-marketplace/61
https://www.blackhatworld.com/forums/proxies-for-sale.112/

スパマーたちは、完全または部分的に自作されたボットと手動スパムの混合だと考えています。Discourse が市場シェアをさらに獲得し、明らかに劇的に成長している以上、それが商用利用可能なボットのターゲットにならないはずはないでしょう。

Xrumer が最新の reCAPTCHA バージョンに対応し始めた頃、レガシーフォーラムの多くのウェブマスターは、スパムのコストが劇的に低下した(もはやキャプチャ解決 API を使用する必要がなくなり、これはすでに 1000 回あたりのコストが非常に安価です)ため、スパムが大幅に増加したことに気づくでしょう:

http://botmasterlabs.net/buy1/

人々はすでに Xrumer を使って、ほぼすべてのプラットフォームに対応する独自のプラグインやスクリプトを作成できます。しかし、もし彼らが将来 Discourse を最初からサポートすれば:

私はこの件において中立とは言えません。なぜなら、私は直接スパム対策を必要としているからです。Gmail のドットトリックに関する元の投稿は 2014 年に別の誰かによって作成されましたが、別のユーザーが最初の X 件の投稿について承認を義務付けることでこれを解決したようです。少なくとも 3 人のユーザーからの報告があるかもしれませんね::sweat_smile:

余談になりましたが、本題に戻ります。

メールに対する正規表現ブロックについて、おっしゃる通りです。これは部分的な解決策ですが、以下の理由から理想的ではありません:

@ の前に 1 つ以上のドットを含むすべての Gmail をブロックする場合:

  • 1 つ以上のドットを含む実際の正当な Gmail ユーザー(これは非常に一般的です)を避けられずにブロックしてしまいます。
  • スパマーは 1 つのドットを使ってかなりのバリエーションを作成できます。例えば、Gmail の最大長は 30 文字です。例えば 12345678901234567890123456789.0@gmail.com には、単一のドットを含む 30 の使用可能な組み合わせがあります。

@ の前に 2 つ以上のドットを含むすべての Gmail をブロックする場合:

  • ブロックされる正当な Gmail は減りますが、依然として 1 つ以上のドットを含む正当な Gmail ユーザーをブロックしてしまいます。
  • スパマーは、30 文字の Gmail 1 つを使ってさらに多くのバリエーションを作成できます。おそらく約 842 通りの組み合わせです。

ブロックが有効になった後に新しいアカウントが作成されたことを確認しました。ブロック作成日は 2 月 1 日です。私は昨日、新しいアカウントが作成されるのを監視しており、ブロック規則の新しい最近の一致と、同じメールアドレス(ドットのみ)の組み合わせを使用した新しい登録の両方が確認できました。

私は一晩中登録を無効にし、今朝再度有効にしました。今日までに、その Gmail アドレスの順列を使って 104 の新しいアカウントが作成され、さらに登録が続いています。これらのアカウントのメールアドレスからドットを取り除くと、Screened Emails のブロック記録と完全に一致することを確認できます。

説明された通り rails c でブロックをテストしようとしましたが、ここから少し奇妙なことが起こります。

どうやら、一部のレコードは意図通り true を返し、一部のレコードはテストしたメールがブロックされた正規のメールと完全に一致しているにもかかわらず false を返しているようです。true を返したレコードについては、完全に意図通り機能し、私がテストしたすべてのバリエーションに対して true を返しました。しかし、false を返したメールについては、私がテストしたすべてのバリエーションも false を返しました。

相関関係を見つけようとしました。これらは相関していない(少なくとも一貫して相関していない)ことを確認できます:

  • メール長(@ の前)
  • メールに文字と数字が含まれているか
  • 一致数(ブロックされた回数)
  • 一致日

ただし、ブロック作成日との相関があるように見えます。古いものほど機能しにくい(false を返す)傾向があります。9 日前に作成されたレコードは truefalse が混在しており、それより前に作成された(1 時間〜8 日前)すべてのテストしたレコードは true を返しています。

もしかすると「一致しないメールの最大保存期間(max age unmatched emails)」に関連しているかもしれません。このオプションは比較的新しいもので、私はデフォルト値の 365 日に設定しています。

バグの詳細な再現手順を提示いただければ、確実に修正いたします。

max age unmatched emails は新しい設定ではありません。max age unmatched ips と同様に、スクリーニング済み IP アドレスリストおよびメールリストに登録された、過去 1 年間何とも一致していない非常に古いエントリを整理するためのツールです。

具体的な例が必要です。もしバグがあるなら、もちろん修正したいと考えています。

お気持ちよくわかります。@codinghorror 氏が元の実装に対して強く懸念していたのは、Google 固有のロジックを特別に含んでいた点でした。これにより、Jeff 氏はかなり不安を感じていました。

「ドメインに関わらずすべて正規化される」という改善により、この懸念は少し和らぐかもしれません。

例:
sam+982@sam.com → 登録可能 … 最初に sam@sam.com が登録済み
s.a.m.@sam.com → 登録不可 … 2 回目に sam@sam.com に気づき、その正規化済みアドレスがすでに登録されているため。

この機能はいつか戻るかもしれませんが、そのためには別の場所でこの悪用を防ぐ方法を見つける必要があります。最後に調査した際、当社のホスティングサービスではこのような悪用事例は確認されませんでした。

@sam @codinghorror ありがとうございます :slight_smile:

今日は投稿できる時間が少ししかありませんが、より詳しく回答する前に、追加情報を共有しておきたかったので。

ログで「false」を返しているレコードを削除し(→ スクリーンされたメール(許可))、その後、そのユーザーを削除して管理者ページから再度ブロックすると、以前は失敗していたルールが、直接の一致やバリエーションに対して一貫して「true」を返すようになりました。

これは、問題が古いレコードに関連しているという観察結果と一致しているようです。さらにテストを行う必要があります。

新しいメンバーを(ランダムに)審査する「橋番のやり方」もいつもありますね… :grin:

color

assyria

swallow