Qiitaの公式出会い系を名乗るスパムへの対抗方法(xyz ドメインのあれ)


概要

2020年5月17日頃から、Qiitaの公式出会い系を名乗るスパムが発生し、スパマーがフォローすることでQiitaからの通知メールが送信され、結果として危険なサイトへの誘導が行われました。

なお、スパマーアカウントはBANされました。

BAN済 @QiitaBot
BAN済 @QiitaBot_
BAN済 @Admin_Bot
BAN済 @_BotAdmin
BAN済 @HarukoAdmin
BAN済 @Qiita_Date
BAN済 @AdminQiita
BAN済 @AdminQiita_
BAN済 @Admin_Qiita
BAN済 @Admin_Qiita_
BAN済 @QiitaOfficial

Qita?
BAN済 @AdministrationQita

!悪用禁止!
恐らく名前のところにhttps://を抜いたURLを入れたんだろうと推測します。
!悪用禁止!

結論

メール受信側の対抗方法

受信側で、このメールを受け取りたくないなら、アカウント設定で行います。
「設定」を押下します。

「メールアドレスと通知」を押下します。

下のほうにある「フォロー」のところで「メール」のチェックボックスを外して「保存する」を押下します。
Web通知は悪質なサイトへの誘導は行われないので、チェックボックスを外さなくても大丈夫です。

メール通知に関して2020年5月18日の時点でヘルプページにメール通知の説明が無かったので画像による説明を追記しました。

悪質ユーザーへの通報は公式ヘルプの通報機能にあります。

メール送信側の対抗方法

次にエンジニアとしては、これをメール送信側で、何とかしたいのですが意外と面倒です。
実は、メールクライアントはURLを正規表現で判定し、それを自動的にハイパーリンクに置換していきます。
そのため、メール送信側では対策が少々難しいと思います。
(アカウント作成時に公開Proxy IPアドレスだったらアカウント作成を拒否するのもありです。)

昔、このようなことの対策をしたことがありますので、やったことを思い出しながら整理すると、以下の方法ぐらいしか無いです。
入力禁止文字にピリオドを追加するが一番オススメです。

  • 送信対策
    • 正規表現でURL判定されてしまうので、メール送信する文面でURLらしきものの先頭1文字を大文字にする。(Gmailだけかもしれないので推奨しません)
    • 正規表現でURL判定されてしまうので、メール送信する文面からピリオドを抜く。
    • 正規表現でURL判定させないために、ピリオドの前に¥などURL要素以外の文字を入れる。
    • ユーザーの名前をメール送信しない。
    • HTMLメールであれば、ユーザーのマイページなど、プロフィールURLをアンカータグとして送信する。
      • アンカータグがあれば、テキストエリアにピリオドがあっても、アンカータグが優先されテキストエリアはハイパーリンクにはならない。
  • 入力対策
    • メール送信する可能性のある名前にピリオドを入力させない、ピリオドを入力禁止文字として設定する。
      • タイトルなど他にもユーザーが入力する可能性のある項目で、メール送信するものにはピリオド入力はさせない。
      • 入力項目でピリオドが禁止文字に設定されているのは、これが理由です。

実験コーナー

msmtpで色々なメールを送信してみよう!
送信先はGmailです。

メール送信側でURLらしきものをハイパーリンク化されてしまうことを制御するのは不可能ですが、知識とし共有しておきます。
すぐに思いつくのは、HTMLメールでformat-detectionを指定ですが、やっても反応しません。
<meta name="format-detection" content="email=no,telephone=no,address=no">を設定しても無駄です。

msmtpについては、別の記事で説明する予定です。 
msmtpについては別の記事に書きました。
msmtp を使う

テキストメールのパターン

テキストメールの文面

q1.txt
From: "Qiita1" <[email protected]>
To: [email protected]
Subject: Qiita1
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8

テキストメール
リンクされる qiit.com
リンクされない Qiita.com

テキストメールの送信

cat q1.txt | msmtp -t

受信したテキストメール

HTMLメールのパターン

HTMLメールの文面

q2.txt
From: "Qiita2" <sample@sample.com>
To: [email protected]
Subject: Qiita2
MIME-Version: 1.0
Content-Type: text/html; charset=UTF-8

<html>
<head>
<style>
@media (max-width: 768px) {
  .test1 {
    color: #f0f;
  }
}

@media (min-width: 769px) {
  .test1 {
    color: #0ff;
  }
}
</style>
</head>
<body>
<h1 class="test1">HTMLメール</h1>
リンクされる qiita.com<br/>
リンクされない Qiita.com<br/>
ハイパーリンクでリンクされる(実際はトップページがリンクされる) <a href="https://qiita.com/">https://qiita.com/sapi_kawahara</a><br/>
</body>
</html>

HTMLメールの送信

cat q2.txt | msmtp -t

受信したHTMLメール

base64でエンコードしたメールのパターン

base64でエンコードしたメールの文面

q3.txt
From: "Qiita3" <[email protected]>
To: [email protected]
Subject: Qiita3
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: base64

YmFzZTY044Gn44Ko44Oz44Kz44O844OJ44GX44Gf44Oh44O844OrDQrjg6rjg7Pjgq/jgZXjgozj
gosgcWlpdC5jb20NCuODquODs+OCr+OBleOCjOOBquOBhCBRaWl0YS5jb20=

base64でエンコードしたメールの送信

cat q3.txt | msmtp -t

受信したbase64でエンコードしたメール