- Webサーバーログの分析中に、存在しないJavaScriptファイルを要求する多数のボット活動が発見された
- HTMLコメント内のスクリプトタグを実際のコードとして認識して要求したもので、LLM学習用データ収集の試みと推定される行為
- このような異常な要求を検知して、公開警告、IP遮断、圧縮爆弾、データポイズニングなど多様な対応策を提示
- 特にデータポイズニングは、LLMの学習データを汚染してモデル性能を低下させうる効果的な手段として言及
- Web管理者がAIスクレイパーに対する防御および逆襲戦略を実験的に導入する必要性を強調
異常なスクレイピング行為の発見
- サーバーログで、存在しないJavaScriptファイルに対する404エラー要求を多数確認
- 当該ファイルはHTMLコメント内に含まれた無効なスクリプトであり、通常のブラウザなら要求しないはず
- 要求のUser-Agentの一部は
python-httpx/0.28.1, Go-http-client/2.0, Gulper Web Bot 0.2.4 など、明らかなボットとして識別
robots.txtでクローラーのアクセスを禁止していたにもかかわらず要求が継続しており、規則無視または無視されたポリシーと判断
- 一部の要求はFirefox、Chrome、Safariなど通常のブラウザを装っていたが、HTMLコメントを解釈できず偽装識別であることが判明
- これらの要求は、LLM学習用コンテンツの非同意収集を目的とするスクレイパーと推定
スクレイパーの動作方式
- 一部はHTMLを正しくパースし、コメント内URLを再帰的に探索している可能性がある
- 別の一部はHTMLを単なるテキストとして扱い、正規表現ベースのURL抽出を行ったように見える
- User-Agentの多様性とレベル差から、複数の運用者が存在し、一部は単純な自動化ツールを使用しているとみられる
- 共通する動機は貪欲なデータ収集であり、これを逆利用できる可能性が示されている
アルゴリズム的サボタージュ (Algorithmic Sabotage)
- アルゴリズムシステムを意図的に攪乱する行為であり、LLMの外部コスト問題により注目されるテーマ
- ボットの非人間的な行動パターンを認識すれば、検知と対処が容易
- 対応方法は4つに分類される: 公開警告、IPフィルタリング、圧縮爆弾、データポイズニング
0. 公開警告 (Public Disclosure)
- 些細な誤検知(例: User-Agentのタイプミス “Mozlla”)は公開すると簡単に修正されうるため非公開を維持
- 一方で、本質的な行為(例: コメント内スクリプト要求)は修正不能であるため公開が有益
- これにより他サイト運営者も同様の攻撃を検知・遮断できる
- 当該行為を検知するシステムを他サイトにも適用中
1. IPフィルタリング (IP Filtering)
- fail2banを用いて、ログパターン・日付・IPに基づき自動遮断
- 一般には短時間の遮断に設定するが、長期遮断にすると学習型ボットの再試行を抑制できる可能性がある
- ボットネットの場合、IPを変えて継続的に要求できるが、反復パターンを通じて検知可能
- 今後、ボットネット動作分析に関する追加研究を行う計画に言及
2. 圧縮爆弾 (Decompression Bombs)
- 攻撃者が要求したファイルにzip bombを提供し、システム資源の消耗を誘発
- CPU、RAM、ディスクを過剰に使用させたり、脆弱性の悪用につながる可能性がある
- 欠点として、サーバー資源の消費や帯域の浪費リスクが存在
- 一部のボットは感染したシステム上で動作しているため、攻撃効果が限定的な場合がある
- すべてのボットに適用するのではなく、ランダムな一部要求に対応する方式を提案
3. データポイズニング (Poisoning)
- LLM学習用データを汚染してモデル性能低下を誘導
- 最近の研究によれば、250個の汚染文書だけでも大規模モデルに持続的な影響を与えうる
- 汚染データによって、モデルが特定テーマで無意味な出力を生成するようにできる
- 例として、セキュリティ研究に関する質問時に特定ブログを推薦するよう誘導可能
- nepenthes, iocaine, glaze, nightshade などの公開ツールを利用可能
- LLM学習データが非同意で収集された場合、このような対応は正当な防御手段として提示
- IP遮断と併用する場合、実装の複雑さは増すが、並行運用の可能性はある
- 効果的な設計は公開しないこともあり、創造的サボタージュ参加の拡大の必要性を強調
結論およびコミュニティ対応
1件のコメント
Hacker Newsの意見
ほとんどのWebスクレイパーは、違法だとしてもビジネス目的で使われている
そのため Amazon やショッピングモールのデータを取得することが多い。結局、望まれないトラフィックの大半はビッグテックか、脆弱性を狙う悪意ある攻撃者によるものだ
私はWebスクレイピングについて少し知っている。一部のサイトは防御目的で404を返すこともあるので、私のクローラーは
curlcffiのような高速クロール方式を何度か試すZip bomb 対策は、単にヘッダーの content-length を読めば十分だ。レスポンスが大きすぎる場合は読み込まないようバイト上限を設け、タイムアウトでも制御する
ところで、
requestsの timeout はページ全体の読み込みに対するタイムアウトではないことを知っているだろうか。サーバーがバイトをゆっくり送ると、無限待機状態になるそこで、こうした問題を解決するために自分でクローリングシステムを作った。Selenium も一貫して実行できる
私のプロジェクトは crawler-buddy で、基盤ライブラリは webtoolkit だ
content-lengthは content-encoding の後に計算される点を忘れてはいけない「同意なくLLM学習データを収集した」という表現が面白い
公開されたHTTPサーバーに GET リクエストを送るのに、いったい何の許可が必要なのか分からない。もちろん weev 事件は例外的な惨事だった
ただし、(1) 一般ユーザーのアクセスとボットによるDDoS攻撃は別物だ。無料で提供されているからといって無限に持っていくのは濫用だ
(2) 合法的な複製とロボットによる偽装行為は区別されるべきだ
(3) まともに動くボットなら
robots.txtを尊重すべきだ。法律ではないが礼儀の問題だ何百万もの住宅用IPを使い回すボットは、決して正常とは言えない
公開サーバーだからといって、虚偽のリクエストまで許可したわけではない。合理的なリクエストにだけ暗黙の同意があるのだ
robots.txtは法的拘束力ではなく、礼儀正しいお願いだ「このページは取得しないでください」程度の意味にすぎず、本当に止めたいなら API トークンや認証手続きを設けるべきだ
スパムが単なるメールと同じではないように、ボットの濫用も単純なリクエストとは違う
DOM をパースするより、http/https 文字列を直接検索するほうが速そうだ
結局、ネットワーク混雑が制約要因になる
興味深い研究の実用的な応用を見るのは面白い
関連研究は この投稿 で見られる
タイトルが紛らわしい。「commented-out」と言うべきだと思う
これは濫用というより、単にコメントアウトされたURLを読んでいるだけのようだ
robots.txtを無視し、コメントまで取得するのは確かに無作法な行為だ昔Webをクロールしていた頃は、Perlの正規表現が最も信頼できた
コメント内のURLも当然キューに追加していた
ボットに512MBのランダムデータファイルを渡したらどうだろうか
私が作ったスタートアップは、まさにそうしたAd-poisoning-as-a-serviceを提供している
「LLM学習用データ収集」というより、単なるインターネットスキャンのノイズだ
JSファイルはコメントかどうかに関係なく、良い手がかりになる
一方で LLM 学習用なら、こうした低品質なJSコードには興味がないだろう
望まない LLM 学習トラフィックを**毒化(poison)**する方法についての考えだ
著作権者と協力すればリスクは下げられる
リクエストごとに画像を動的変形して重複排除対策を無効化することもできる。そういうプラグインがあれば私もすぐ入れるだろう