- 追加された行はこの色です。
- 削除された行はこの色です。
* [spam] URI spamフィルタ: 概要 [#wb00d081]
* [spam] URI spamフィルタ (Part 1) とブロック機構: 概要 [#wb00d081]
- ページ: [[BugTrack2]]
- 投稿者: [[henoheno]]
- 優先順位: 重要
- 状態: 提案
- カテゴリー: 本体新機能
- 投稿日: 2006-11-18 (土) 23:48:10
- バージョン:
#contents
** 関連: [#dc60ad85]
- [[BugTrack/772]] [SPAM] Wiki SPAMming
- [[開発日記/2006-11-04]] (official/dev) 内容ベースのspamフィルタ と 新規postについて
- [[開発日記/2006-11-12]] spam.php: 冒険者向け: 現状の組み込み手順
- [[cvs:lib/spam.php]]
** メッセージ [#pd14f285]
** 修正 [#pd14f285]
spamフィルタのコンセプト実装について、実現している部分を中心に概要をまとめます。
- [[cvs:lib/spam.php]]
このフィルタは「ハイパーリンクを生成させようとする欲求の強さ(理不尽さ)」を計測し、その度合いによってブロックを行います。
PukiWiki向けのspamフィルタのコンセプト実装について、実現している部分を中心に概要をまとめます。
+ (特定の条件で)追加されるメッセージを調べ、以下の条件でブロックする
-- URIの直書きによる外部リンク要求が既定の個数を超えた時 (3件以上)
-- HTML Anchor タグによる外部リンク要求が既定の個数を超えた時 (1件以上)
-- phpBB BBCode ないしその派生記法による外部リンク要求が既定の個数を超えた時 (1件以上)
+ ブロックされた場合:
-- その内容は管理者にメールで通知される
Subjectの例:
+ ''URIの計測機構'' - URI追加型スパム(下記)の「ハイパーリンクを生成させようとする欲求の強さ(理不尽さ)」を計測します。
-- URIの直書きによる外部リンク生成要求の個数 (記法を問わない)
-- HTML Anchor タグ、phpBB BBCode ないしその派生記法による外部リンク生成要求の個数
+ ''上記フィルタを利用したブロック機構''
-- (comment、pcomment、bugtrack、trackerなど、特定のシチュエーションで)新規に追加されるメッセージを調べ、特定の条件でブロックする
-- ブロックされた側には、改行コード一つのみが送信されます。
+ ''ブロック内容の通知機構'' - ブロックした投稿内容については、ブロックした事がわかる形で管理者にメールされます。管理者は誤判定などが無いかどうか、ブロック通知をチェックすべきです。メールクライアントのフィルタ機構によって、普段とは別のフォルダへ振り分けることができます。
Subjectの例 ('[blocked]' が挿入される):
[PukiWiki] [blocked] 自作プラグイン/csv2newpage.inc.php
-- ブロックされた側には改行コード一つのみが送信される(※可変)
** URI追加型スパムについて [#a9766872]
** 概要: URI追加型スパム [#a9766872]
このフィルタの基本的な対象は、URIを他のWebアプリケーション(特に、第三者でも投稿できるHTMLフォームを持っているWebアプリケーション)に追加させようとするスパムです。
他のWebアプリケーション(特に、第三者でも投稿できるHTMLフォームを持っているWebアプリケーション)に、URIを自動的に追加させようとするスパムを、ここでは「URI追加型スパム」と呼ぶ事にします。
このスパム行為の発信者には、ある程度明確な特徴があります。簡単に言えば、「(1)任意の外部へのリンク(HTMLのAnchorタグ)を (2)ある程度の期間 (3)対象のサイトに出現させる/消させない」という事に強いモチベーションを持っています。また、送信側にとって「(4)低コストで」大きな効果をもたらすべく、様々な工夫が行われています。
このスパム行為の発信者には、ある程度明確な傾向があります。総じて、発信者は「(1)低コストで (2)大きな効果(※金銭的な)」をもたらすために、「(3)任意の外部へのリンク(HTMLのAnchorタグ)を (4)ある程度の期間 (5)対象のサイトに出現させる/消させない」という事に強いモチベーションを持っています。
*** URIに関する工夫 [#l00a18d6]
単純な(文字列比較や、正規表現による)フィルタを回避できるように、URIには、防御側が想定しないであろうバリエーションを持たせる事があります。また、文字列を隠蔽、ないし語句のゆれを作成するためにpercent-encodeを利用することがあります。
単純な例: メッセージとURI
buy foobar http://example.org/buy/foobar
buy foobar http://example.org#buy/foobar
buy http://victim.example.org/go?http%3A%2F%2Fnasty.example.org
buy foobar http://example.org/buy/foobar
order foobar HTTP://EXAMPLE.ORG/ORDER/FOOBAR
URIに使用されるドメイン名にはいくつかの傾向があります。
- 既存のサイトの一部 (サブドメイン・ディレクトリ) を借用したもの
- レンタルWebスペースやブログレンタルサイトのようなサービス(サブドメイン・ディレクトリ)を借用したもの -- もちろん複数アカウントによって複数個が利用される
- 独自にスパム用のドメインを取得したもの -- ドメイン名は数字や文字の羅列である場合がある
いずれも、取得したドメインについては、(開設されてから閉鎖、ないし放置されるまで)ある程度の生存期間が存在します。
*** メッセージに関する工夫 [#d2d1dd0b]
複数のWebアプリケーションでも(羅列したURIの)どれかが外部リンクとして成立する様に、複数の記法をミックスさせる事があります。
ひな型と、その時追加したいURIを組み合わせ、生成したデータを投稿します。生成したテキストデータを投稿する場合と、ターゲットに選んだサイトから得た情報(例: どのようなフォームを持っているか)からひな型を作り、そこからデータを生成する場合があります。
特定の記法を解釈するWebアプリケーションを狙って、何らかの記法を利用する事があります。
例: URIを(同時に)単一の方法で羅列
[url=http://example.org/buy/foobar]Buy Foobar[/url]
[url=http://example.org/buy/foobar]Buy Foobar[/url]
[url=http://example.org/buy/foobar]Buy Foobar[/url]
また、複数のWebアプリケーションでも(羅列したURIの)どれかが外部リンクとして成立する様に、複数の記法をミックスさせる事があります。
例: 同じURIを(同時に)複数の方法で羅列
Nice site! Check about foobar http://example.org/buy/foobar
<a href=" http://example.org/buy/foobar ">buy foobar</a>
[url=http://example.org/buy/foobar]Buy Foobar[/url]
AnchorタグやBBCodeなどの記法を用いたuri spamの特徴としては、「記法に関してはほぼ正確である」という点があります。この点については、それぞれの記法を解釈できるサイトについて、間違いなく記法を解釈させるためであると考えることができます。
<a href= http://example.org >buy example</a> <= "</a>"で閉じている
<a href="http://nasty.example.com">visit http://nasty.example.com/</a>
<a href=\'http://nasty.example.com/\' >discount foobar</a>
[url]http://nasty.example.com/[/url]
[url=http://nasty.example.com]visit http://nasty.example.com/[/url]
ターゲットとしたサイトごとに適切な記法を使わない点については、投稿側のスパム作成コストや、スパム対象一覧の蓄積方法・流通方法などに原因があるのではないかと推測する事ができます。もしそれに見合うのならば、適切な内容が使用されるでしょう。
*** 自動投稿に関する工夫 [#t71f3a46]
*** 自動投稿に関する工夫 (対象、頻度、分量に関する工夫) [#t71f3a46]
着実な積み重ねによって、ターゲットとしたサイトを侵食する事を目標とします。結果的に、管理側が長期間にわたり管理を放棄した状態となるのが理想的です。
例えば:
- ひな型を用意し、データと組み合わせた内容を投稿させます。生成したテキストデータを投稿する場合と、ターゲット(サイト)から得た情報からひな型を作り、そこから生成したデータを投稿する場合があります。
- 投稿対象として登録したサイトは次回以降も活用します。
- 高頻度(数分~数十分等)、長期間(昼夜休まず)に渡って投稿を行わせ続けます。
- 複数のIPアドレスから投稿を行わせます。
-- 異なるIPアドレスからのリトライ、また多重投稿を行わせる事で、フィルタの貫通確立を高めます。
-- 一度利用したIPアドレスは数日~数週間後に再利用する事があります。
- プログラムを使ってスパムを投稿させます。
-- 投稿対象として認識したサイトは次回以降も活用します。
-- ターゲットのサイトの大元(ネットワークプロバイダ)や、発信側のネットワークプロバイダ等から締め出されるほどの頻度や量では活動しません。しかし人間にとっては充分に高頻度(数分~数時間等)に、かつ長期間に渡り、昼夜休まず投稿を行います。
- 管理側へ対策として:
-- データの量や頻度を非常に大きくする事があります。
-- 管理側に気付かれないようにURIを追加する方法があるならば、それを試みます。
-- 複数のIPアドレスから投稿を行わせます。
--- 異なるIPアドレスからのリトライ、また多重投稿を行わせる事で、フィルタの貫通確立を高めます。
--- 一度利用したIPアドレスは数日~数週間後に再利用する事があります。
-- 投稿した内容が掲載されているかを確認し、異常があれば確認します。例えば、投稿用のIPアドレスの一つから、URIを含まないデータが追加可能かどうかを確認します。
** URI追加型スパムのブロックについて [#d04277c7]
上記のような特徴をもっている自動スパムに対して、従来型の機械的なフィルタは、(1)ユーザーの利便性を損なわずに (2)管理者のメンテナンス負担を減らせるか、といった点のバランスに問題があります。
- IPアドレス
-- (静的) ホスト単位の拒否: 次からは異なるIPアドレスで投稿があるため、ほぼ無効
-- (静的) ネットワーク単位の拒否: 強いが、反動も大きい (利便性低下)
-- (動的) リアルタイムブロックリスト(RBL)の利用 -- 有効性と利便性の検証が必要。実行時にコストがかかる
- NGワード -- 内容と、機能の柔軟性次第。また更新が必要 (メンテナンス負担増加)。単純すぎるNGワードは利便性を損なうか、損なうために追加できない
「URI追加型スパム」は、(投稿テストを除き)基本的に必ずURIをコンテンツに追加させようとします。そこで、投稿されるコンテンツに含まれるURIを検証し、その質や量で自動的にブロックを判定する機構があれば、IPアドレスが合致するかどうかや、NGワードを含んでいるかどうかに限定せずにスパムをブロックする事が可能になります。
--------
* コメント [#k68b8f3f]
#comment