まず最初に、この項目で書いた内容は、攻撃及び乗っ取りの方法も簡単に書いてありますが、攻撃及び乗っ取りを助長する物ではありません。あくまでも、自分たちのチャンネルを守る為にはどのような攻撃や乗っ取りの手段を知った上で守るという物です。その為、攻撃や乗っ取り方法を知った上で守るための手助けをする目的の文章ですので、決して悪用しないようお願いします。
また、IRC上でのチャンネル及びニックネームは誰の物でも有りません。元々自分らで使用していたチャンネルを守るというのは、守る立場ですが、乗っ取られた後、取り返すというのは、自分らが攻撃する立場になると言うことを忘れては行けません。これはIRCでの大原則となります。また、チャンネルオペレータを持っている人が独裁者でもあります。RFC1459 1.3.1 チャンネルオペレータより。
チャンネルを狙われにくくするには、誰もが思いつくような、ありきたりのチャンネル名を使用しない、秘密チャンネルにする等の工夫を行うことで、このような守る/取り返すという自体を避けることが出来ます。
さらに詳しい情報を求めておられる方は、fubuki氏の書いた ゲーマーのためのIRCチャンネル防衛についてという文章をご覧下さい。長年の経験が書かれていることでしょう(笑)
-s/-p の様なチャンネルは list コマンドを使用することにより、チャンネル一覧及び参加者数を知ることが出来ます。そのようなチャンネルを乗っ取ろうと試みる愉快犯がいます。
A_example!~example@dhcp123.example.ne.jp
A*!*example@*.example.ne.jp
基本的には狙われやすいチャンネルは、上記の防御だけでは不充分です。また、乗っ取られるまでの防衛手段ですから、op が渡ってしまえば、実質乗っ取られてしまったと言うことになります。
不正に op が渡らないことには越したことがないのですが、渡ろうとしてしまったとき、どのように対処するかが重要です。 攻撃側は基本的にボットを使用し、有る程度自動化しているため、それに対抗するにも手では間に合いません。その為、防衛側も程度ボットを使用し自動化しないと守りきれない場合も有ります。
では、どういう風にして防衛するのでしょうか?
とある方の経験から聞いた話です。
大規模チャンネル、且つ一般的なISPを使用しているユーザが大半の場合は、opを渡しても無反応にするマスクをボットに書き、それ以外は全てdeopをするというのが無難だということです。
攻撃側の大半は外人でしょうから、海外のドメインやマスクになります。ですから、数も多いですし、全て把握するのは難しい為、簡単で確実な方法といえるでしょう。
gTLDな独自ドメインを逆引きに設定しているユーザが多いチャンネルの場合、根気よくWhiteListとなる安全なマスク一覧を作成しましょう。逆に独自ドメインを指定しているユーザは固定IPであるため、管理はしやすくなります。また、afraidといったFreeDNSを使用している場合は、危険ですのでこの場合は辞めましょう。第三者がそのドメインを自由に使用出来てしまうためです。 手っ取り早く行うには、先ほどの「大規模チャンネル且つ一般的なISPを使用しているユーザが大半の場合」の方法をベースとし、IRCサーバのI-Lineに有るgTLDなドメインを全てopしても無反応にするという設定をする方法、または、海外のドメインを全てdeop対象ということでボットに設定する方法があります。
次に、ボットの基本的な動作を挙げましょう。
op を持っていても問題ないマスクのユーザが、不正なマスクのユーザに op を配った場合配った側も配られた側も deop するというのが一番無難です。
何故か理由を挙げると、2番目及び3番目の項目が該当しますが、ユーザになりすまし op を取得した後、自分自身のボットを大量にチャンネルにJOINさせ、自分自身のボットに op すると言う動作が次に行われます。それを防ぐという目的です。なので、ボットから見て攻撃者に op を配る人は全て攻撃者側一味だと判断をします。この段階で防げないとチャンネルは奪われてしまいます。
※サーバスプリット:IRCサーバはツリー上に繋がっているが、そのサーバ同士の接続(リンク)が切れた状態のことを指します。
fake mode とは、サーバスプリットから復帰した直後に発生することが稀に有ります。原因は、サーバスプリットから復帰した直後は一時的に、IRCサーバの負荷が高くなってしまい、その直後に、kick や deop 等を行ったとき、相手のサーバに伝わらない事があります。厳密に言えば、復帰した直後、IRC 自体に遅延が発生しており、情報が伝わる前に各々のサーバにて kick や deop 等を行った場合、チャンネルに参加しているユーザ情報に不一致が発生するというです。動作例として、スプリット復帰後、njoin してきたユーザに対して、Aのサーバ側でも kick を行い、Bのサーバ側kickを行い、両者のサーバで不一致のおっている状態のことを言います。
実際にチャンネルを乗っ取る時のケースでは、「サーバスプリットを利用し、op権限を持ち込む方法」に該当しますが、具体的な方法は、サーバがスプリットしている状態の場合、AとBのサーバでは別々の独立したチャンネルとして見えます。しかし、サーバのリンクが復帰したとき、各々のチャンネルに居た人は、復帰した時点で一緒になります。そして、この瞬間を乗っ取る側/防衛する側は利用するのです。
また、乗っ取る側は、予めスプリットしているときに攻撃態勢を整え、復帰したときに一斉にkick/deop等を行います。先ほど述べましたように、復帰した瞬間はサーバの負荷が高く、片方にのみ情報が伝わって(もう片方は遅れて情報がやってくる)くるケースがあり、そのときに、kick等を行うと、情報の不一致が発生しやすくなります。
その他で fake が起こりうる可能性としては、ボット等が大量に且つ素早い動作を行った場合、情報が伝わりにくくなり、fake を起こす可能性も有ります。
※ njoin とは、サーバ間で使用されるものであり、スプリット復帰時などに mode 付で JOIN してくる状態のことを言います。(厳密には違うのだが…)詳細は、RFC 2813 4.2.2 NJOINメッセージをご覧下さい。