ことわり
- ここで扱う被害はネットワークの機能停止ではなく、 メンション欄の機能停止 を指します。つまり、一般的なDDoSの定義と大きく異なり、あくまでこれはTwitter上における攻撃を形容したものだと考えてください。
- この記事は攻撃を助長する目的で執筆していません。私の知り合いだけで3名もの方がこの攻撃の被害に遭われており、一方Bot製作者側では対策が為されていることが少ない…という現実を踏まえて、TwitterBot製作者側での対策を促すことが目的です。まぁゼロデイ晒しでも何でもないので特にここを気にする必要はないかもしれませんが。
攻撃手法
※ ここで登場するスクリーンネームは実在するものとは一切関係ありません。
立場 | スクリーンネーム |
---|---|
攻撃者 |
@anonymous (多くの場合は使い捨て) |
被害者 | @target |
ボット |
@A @B @C ... @Z (増えれば増えるほど悪質) |
- 攻撃者が、攻撃用アカウントとして
@anonymous
を作成する。 - 攻撃者が、スクリーンネーム
@anonymous
の 名前 に@target
を含むように名前を変更する。ここでは@target死ね
に変更したとする。 - 攻撃者が、ボット
@A
@B
@C
...@Z
をフォローする。 - 攻撃者が、ボットが反応する言葉をツイートする。ここでは
おやすみ
であるとする。 - 各BOTが、
@anonymous
に対して一斉に返信を始める。 -
@anonymous
のメンション欄は当然BOTからの反応で埋まるが、BOTが名前を含めて返信するタイプの場合には@target
のメンション欄も同時に埋めてしまう。
@target
のメンション欄が埋まってしまう一例です。
@anonymous @target死ねさん、おやすみなさい!
@anonymous @target死ねさん…もうそろそろ寝たほうがいいよ…
@anonymous 寝ようよ…@target死ね…
...
@anonymous 【早く】@target死ね【寝ろ】
対策
TwitterBot製作者
相手の 「名前」「現在地」「プロフィール」「ツイート本文」 などの情報をBotのツイートに引用するときは、必ず @
@
を 除外 しましょう。
被害者
特定のアカウントのみに攻撃を受けている場合
@anonymous
を本文中に含むツイートを全て ミュート しましょう。公式APIとしてはまだキーワードミュート機能は実装されていませんが、非公式アプリではこの機能が独自実装されている場合があります。
なお、この方法だと @anonymous1
@anonymous2
などもミュート対象になってしまいます。これを避ける場合は、 @anonymous(?![A-Za-z0-9_])
のように 正規表現 を用いる必要があります。
複数のアカウントからの攻撃を受けている場合
いたちごっこが続いている場合
上記と同じようにミュートしたいところではありますが、こちらでは 正規表現 を使う必要があります。この時点で、正規表現対応のミュート機能が使える非公式アプリに限られることになります。
…とは言っても、相手が作成するスクリーンネームに一定の規則性を見つけなければ、正規表現を書くことは難しいでしょう。そして、規則性など全く無い場合がほとんどだと思います。従って、本文だけでミュート対象であるかを判断するのは困難です。他の要素を対象に含める必要があります。
複合ルールが使える
以下のルールを AND条件 として設定してください。
-
[Bb][Oo][Tt]
が 「スクリーンネーム」「名前」「プロフィール」 のうち少なくともどれか1つにマッチする。 -
^@(?![Tt][Aa][Rr][Gg][Ee][Tt](?![A-Za-z0-9_]))[A-Za-z0-9_].*?(?:@|@)[Tt][Aa][Rr][Gg][Ee][Tt](?![A-Za-z0-9_])
が 「ツイート本文」 にマッチする。
もし、正規表現のオプションで「大文字小文字を区別しない」といったものがある場合は、もう少しシンプルに書けるでしょう。
-
bot
が 「スクリーンネーム」「名前」「プロフィール」 のうち少なくともどれか1つにマッチする。 -
^@(?!target(?![a-z0-9_]))[a-z0-9_].*?(?:@|@)target(?![a-z0-9_])
が 「ツイート本文」 にマッチする。
複合ルールが使えない
上記のうちどちらかのルールを設定することになりますが、どちらを採っても巻き添えは発生します。前者を採れば全てのBotを、後者を採れば自分が先頭ではない全ての複数メンションをミュート対象にしてしまうことになります。自分が機能不足のアプリを使用している以上、多少の妥協は必要です。