世界を動かす技術を、日本語で。

JPEGの偽造

概要

  • Spigot は、マルコフ連鎖で自動生成した偽ウェブページを大量配信する小規模Webアプリケーション。
  • 最近、 ImageSiftBot など画像収集クローラーへの対応として、効率的な偽JPEG画像生成手法を考案。
  • テンプレートを利用し、低CPU負荷で「それらしい」JPEGを高速生成。
  • 画像データ部にはランダムデータを挿入、クローラーのコスト増加を狙う。
  • Pythonによる実装を GitHub で公開、追加の改良も実施。

Spigotによる偽JPEG画像生成の仕組み

  • Spigot は、攻撃的なウェブクローラー向けに、マルコフ連鎖で作成した無意味なコンテンツを配信。
  • サーバーへの負荷を抑えつつ、毎日100万ページ以上配信実績。
  • クローラーの挙動監視のため、アクセスログを定期的に確認。
  • 特に正体を隠すクローラー(例: ランダムなUser-AgentやIPアドレス)は、 ボットネット 経由の可能性が高い。
  • 新たなクローラー「 ImageSiftBot」が画像を求めて大量アクセスしていることを発見。

偽JPEG画像生成の工夫

  • 本来、画像生成や圧縮はCPU負荷が高いが、 JPEGの構造 を活用して低負荷化を実現。

  • JPEGファイルは「構造部分」と「ピクセルデータ部分」に分かれている。

  • 既存JPEGから「構造部分」と「ピクセルデータ部分の長さ情報」のみ抽出しテンプレート化。

  • 画像生成時は、テンプレートの「ピクセルデータ部分」に ランダムバイト列 を挿入。

  • これにより、見かけ上JPEGとして認識されるファイルを高速生成可能。

    • テンプレート選択
    • 構造部分の出力
    • ピクセルデータ部分はランダムデータで埋める

実装と効果

  • サイト内の514枚のJPEGからテンプレートを抽出、合計500KB未満のデータセットを作成。
  • 1秒間に約900枚の偽JPEG画像(1枚200-300KB)を生成可能。
  • 画像はURLからランダムシードを生成し、同じURLなら同じ画像を再現。
  • ImageSiftBot は1日で約15,000枚の偽画像を取得、今後さらに増加見込み。
  • MetaのbotやAmazonBot、GPTBotも反応。

JPEGデコーダとHuffmanコード対策

  • 純粋なランダムデータではJPEGデコーダがエラーを検出する場合あり。
  • Huffmanコード の構造に注目し、ピクセルデータ部分の各バイトに 0x6D をAND演算で適用。
  • これにより、連続する1ビット列が減り、不正なHuffmanコード生成確率を90%以上から4%未満に低減。
  • 完全なHuffman符号列生成も可能だが、CPU負荷増大のため採用せず。

公開と今後

  • 偽JPEG画像生成用Pythonクラスは 100行未満、GitHubで公開済み。
  • 今後、コードのコメント追加や整理を予定。
  • 目的は「自分の負担を最小化し、悪質クローラーの負担を最大化」すること。

まとめ

  • Spigot は、悪質クローラー対策として低コストで偽JPEG画像を大量生成・配信する仕組みを実現。
  • JPEGファイル構造の理解とランダムデータの活用で、サーバー負荷を抑えつつクローラーの解析コストを増加。
  • シンプルな実装ながら十分な効果、今後も改良と公開を継続予定。

Hackerたちの意見

現在のLLMは常に完全にゴミのような出力をするわけじゃないし、比較的効率的に判断材料として使えるから、将来のモデルの能力に影響を与えるなんてことはまずないと思う。モデルが(a)半信半疑なゴミと、もしかしたら関連のあるテキストを区別できるくらいの能力があって、(b)企業がその問題を認識しているなら、データポイズニングは全く問題にならないと思うよ。

そうだけど、まだ彼らの処理能力を無駄にしてるよね。

現在のグローバルなDDoSがAIに関連している証拠はないよ。

その感謝されない探求が可哀想に思えて、どうやって喜ばせられるか考え始めた。攻撃的なクローラーについて怒ったりフォーラムで愚痴るのとは対照的に、さっぱりした(そして面白い)態度だね。

確実に、あの嫌なクローラーたちに痛みとゴミを与える能力が助けになってるね。

これ好きだな https://www.ty-penguin.org.uk/~auj/spigot/pics/2025/03/25/fa... なんか主張のある作品だね。

シェイクスピアに関するものはある?

フル体験を楽しむには:Firefoxの場合:F12を押して、ネットワークに行き、「スロットリングなし」をクリック > GPRSに変更。Chromiumの場合:F12を押して、ネットワークに行き、「スロットリングなし」をクリック > カスタム > プロファイルを追加 > 20kbpsに設定してプロファイルを作成。

これはボットネットを通じて行われている可能性が高いね。違法に何千人もの人のデバイスを悪用してる。はぁ。住宅用IPから何千ものデバイスからトラフィックが来てるからって、必ずしも古典的な意味でのボットネットとは限らないよ。もしかしたら「無料VPNサービス」に登録してる人たちかもしれないし、「受動的収入を得る」ためのツールを使ってるかもしれない。実際にそのソフトウェアを運用するコストは、他の「無料VPNサービス」ユーザーのトラフィックや、そのVPNの兄弟商業ブランドのユーザーのトラフィックの出口ノードになることなんだ。(例えば、こんなスクレイパー。)この仕組みは「プロキシウェア」として知られてるよ。詳しくは https://www.trendmicro.com/en_ca/research/23/b/hijacking-you...

ボットネットっぽいね。

Spigotについて読んでたら、20年前のことを思い出したよ。あの時、彼らからのメールを受け取るたびにワクワクしてた。自分のウェブサイトに寄付したMXレコードが、ハーベスターを捕まえるのに役立ったって知らせが来るんだもん。 > 「あなたの寄付したMXの一つが、以前は知られていなかったメールハーベスター(IP: 172.180.164.102)を特定するのに役立ちました。ハーベスターは、あなたの寄付したMXを使って作られたスパムトラップのメールアドレスで捕まったよ。」

努力は素晴らしいね。ただ、これって緑の表示に偏ってる気がするから、もしボットが突然何千もの緑の画像をスクレイピングし始めたら、ちょっと怪しいかも。

ミッション完了って感じかな。

AIの入力スクレイパーを混乱させるために、各画像に偽のキャプションを追加することってできるかな?例えば、(大きな緑の塊)「うちの猫が新しいキャットニップボールで遊んでる」とか、(青いぐちゃぐちゃの画像)「ロビンが巣を作ってる」みたいな。

よくできたスクレイパーなら、画像をCLIPモデルや他のキャプショニングモデルと照らし合わせて、そこにあるテキストが実際に画像の内容と一致しているか確認するはずだよ。

この美しいフライトラップをどうやってセットアップするの?有効な個人ブログが必要?それともCloudflareに何かを置いてエッジで回せばいいの?

それはフラスクアプリだよ、彼がリンクを貼ってる:https://github.com/gw1urf/spigot/

圧縮JPEGストリームには、特定のパターン(ブロック/タグマーカー)が違法なんだよね。確か、出力の0xFFバイトの後に0x00を挿入すれば回避できるはず。興味があれば、後で詳しく説明するよ(今日は無理だけど)。

彼らはロボットアクセスをスピゴットツリーに禁止するrobots.txt [1]を持ってるけど、URLから/spigot/を削除すると、まだスピゴットに行けちゃうみたい。[2] /~auj名前空間はrobots.txtで禁止されてないから、善意のクローラーでも、もしそこにたどり着いたら無限ページの迷路にハマっちゃうことがあるんだよね。あんまり良くないよね。 [1]: https://www.ty-penguin.org.uk/robots.txt [2]: https://www.ty-penguin.org.ukと/~auj/cheeseをつなげたもの(リンクは作りたくないから)