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

Cloudflare Turnstileが指紋認証可能なWebGLを要求する

概要

Cloudflare TurnstileがWebGLフィンガープリンティングを要求し、WebKitGTKブラウザで無限ループ発生 プライバシー保護機能が原因で多くのサイトにアクセス不可 Cloudflareの主張は「人間判定のため」であり、追跡目的の懸念 Safariには例外処理の可能性、WebKitGTKは一律でブロック Firefoxのフィンガープリンティング対策の不備も指摘

Cloudflare TurnstileとWebGLフィンガープリンティング問題

  • Cloudflare Turnstile が「Verify you're human」認証で WebGLフィンガープリンティング を要求
  • WebKitGTKベースのブラウザ で認証が無限ループし、 多くのWebサイトにアクセス不可
  • WebGLの情報取得が 追跡目的 である疑念、プライバシーへの懸念
  • Cloudflareの説明 :「フィンガープリンティングがブロックまたはランダム化されると、Bot判定される」
  • 一時的に フィンガープリンティングを許可 すれば問題解決と案内
  • WebKit では長年にわたり WebGLフィンガープリンティングをブロック
    • Safari には例外処理が入り、 WebKitGTK のみ一律ブロックの推測
  • Apple もブロックするほどの追跡手法であり、 ユーザー側で簡単に解除不可

Firefoxにおけるフィンガープリンティング対策の現状

  • Mozilla FirefoxWebGLフィンガープリンティング保護 の実装不備を指摘
    • Bugzilla#1916271 :GeckoはサニタイズされたGPU情報を公開
    • WebKitBlink は全ユーザーにハードコードされた文字列を返却
  • Firefox 145.0 ではTurnstile認証を問題なく通過
    • privacy.resistfingerprinting 設定が「Strict」や「Enhanced Privacy Protection」でも自動有効化されない
    • 手動で有効化すれば、将来的に Cloudflare認証が通らなくなる可能性
  • Canvas Randomization のみ検出され、Turnstileは突破可能な現状

プライバシーと利便性のトレードオフ

  • プライバシー保護機能 強化により、一部サービス利用不可のリスク増加
  • Cloudflare の認証方針が プライバシー重視ユーザー に不利益をもたらす構図
  • ブラウザごとの 実装差異 によるユーザー体験のばらつき
  • 今後の WebGLフィンガープリンティング対策Webサービス認証方式 の動向に注目

Hackerたちの意見

ありがとう、privacy.resistfingerprintingのこと知らなかったわ。これからはCloudflareのクソみたいなやつは全部失敗させるようにするよ。

私はそれを有効にしてるけど、Turnstileは問題なく動いてるよ。

Cloudflareはスクレイパーを検出するためにフィンガープリンティングを使ってることで有名だよね。例えば、JA3フィンガープリントを使ってUAと照合して、cURLみたいなものをブロックして、OkHttp(Androidクライアント)は通すんだ。でも、CycleTLSみたいなパッケージを使えば簡単に偽装できる。彼らを擁護したくはないけど、「ボット保護」でインターネットのかなりの部分を制限してるし、PoW(これも環境的には悪夢だけど)をやらない限り、フィンガープリンティングが主流になっちゃうんだよね。これで関係者全員のプライバシーが完全に壊れちゃう。Android用のプライバシー重視のChromiumフォークであるCromiteは、Cloudflare Turnstileと常に問題を抱えてる。Cloudflareがいろんな方法でフィンガープリンティングしようとするから、チャレンジを通過するのが難しいんだ。動かすためにはCloudflareのブラウザ開発者プログラムに参加する必要があって、NDAにサインしなきゃいけない。プロジェクトのメンテナーがそれをやりたくないのは当然だよね。Cloudflareがブラウザをフィンガープリンティングするために何をしてるかを知りたいなら、問題を見て、Cloudflareがチャレンジを通過するためにどのフラグを無効にする必要があるかを確認してみて。両方の立場は理解できるけど、少なくともCloudflareは人々がフォームを送信したりウェブサイトにアクセスするのをブロックするのではなく、PoWに戻るくらいの柔軟性は持ってほしいな。

だから、私は2つの別々のブラウザを使ってるんだ。公式なこと、例えば支払いをするようなことをするなら、Cloudflareを通過しないといけないからね。

なんか全部無駄だよね。Cloudflareのスクレイピング保護は、5ドルの南京錠と同じくらいの効果しかない。退屈なティーンエイジャーを遠ざけるには十分だけど、素人の泥棒すら止められない。誰かがあなたの公開データをスクレイプしたいと思ったら、絶対にやるから。どうしようもないよ。

でもPoW(これは環境的にも悪夢だけど)をやらない限り、詳しく教えてくれる?ナプキン計算には問題ないと思うんだけど。5Wの負荷で2秒は0.002Whだし(スマホは通過させなきゃいけないから、10秒もPoWするわけにはいかない)。1年で1日8億回のチェック = 8GWh。

彼らを擁護したくないけど、「ボット保護」でインターネットのかなりの部分を制限してるよね。彼らの「ボット保護」で多くの人も制限されてるし。誰が自分のウェブサイトにアクセスできるかを、何の疑問もなく企業に委ねてるのが本当に心配だよ。

彼らを擁護したくはないけど、「ボット保護」でインターネットのかなりの部分を制限してるからね。でも、PoW(これも環境的には最悪だけど)をやらない限り、指紋認証が一番の方法だと思うよ。これで関わる全員のプライバシーが完全に壊れちゃうけどね。指紋認証を使ったボット保護はただの幻想だよ。クライアントサイドの信号は、普通以上の人なら簡単に偽装できるから。指紋認証は広告ビジネスの市場を固めるための手段に過ぎない。住宅用IPアドレスや商業ブロックにレピュテーションを割り当てるのも、目的を達成するための別のアプローチだね。プロバイダーは、自分たちのIPアドレスが悪用されないようにもっと注意するだろうけど、実際には攻撃者と防御者の両方のDDOSビジネスを壊すことになるんだよね。皮肉なことに、同じ企業が自分たちのボットを作ったり、他社のボットを止める方法を見つけたりしてることが多いんだ。

ボットの悪用を防ぎたいけど、誰かがサインアップするたびに醜いキャプチャを出したくないなら、もっといい選択肢はないの?

プルーフ・オブ・ワークのキャプチャを使ってみて。多くはデフォルトでプライベートだよ。Private CaptchaやCap captchaを調べてみて。

ツール「Anubis」は代わりにプルーフ・オブ・ワークを使ってるよ。

これって、webglフィンガープリント耐性の実装をもっと賢くすればいいってことじゃない? webglアクセスを明示的に拒否したり、ダミーデータで応答するのではなく、N個の一般的で再現可能なパターンの範囲内でランダムなデータで応答すればいいんじゃないかな。例えば、実際に人気のある低スペックなデバイスのwebgl実装をエミュレートするとか。

その高度な機能は、各ウェブサイトごとに有効にすべきなんだけど、残念ながらプライバシーを重視していると謳っているブラウザでもそれができないんだよね。TLSのルートCA証明書も同じで、特定のCAが特定のドメインのためだけに証明書を作成できるように設定する方法がないんだ。

OPの記事の最後のスクリーンショットには、「ブラウザ拡張機能が...キャンバスデータにランダムノイズを追加する」ことが検出されるって書いてあるね。これがすべてのランダム化を完璧に検出するわけじゃないけど、確かに武器競争の一部になってるよ。

ずっと使ってるこの拡張機能をターンスタイルのページでテストしてみたけど、通過できたよ。抵抗指紋認識の仕組みよりは少し微妙だと思うけど、プライバシーのトレードオフが何かはよくわからない。 https://github.com/kkapsner/CanvasBlocker

かっこいいね。これをJSshelterの代わりに使う理由があるのかな?同じことをしてるように見えるけど。

レポートありがとう。これを長いこと使ってるんだ。

さらに、設定で「厳格」や「強化されたプライバシー保護」を選んでも、privacy.resistfingerprintingが有効になってない。Mozilla、いい仕事してるね。あの設定はTorブラウザ用だよ。

Torブラウザではデフォルトで有効になってるし、無効にできるかどうかもわからないな。KonformブラウザやMullvadブラウザでもデフォルトで有効になってて、Torブラウザから多くのプライバシーやセキュリティ関連のパッチを借りてるよ。

さらに、設定で「厳格」や「強化されたプライバシー保護」を選んでも、privacy.resistfingerprintingが有効になってない。Mozilla、いい仕事してるね。理由はちゃんとあるけど。あの設定を長いこと使ってたけど、サイトが変な風に壊れるから無効にして対策を講じなきゃいけなかった。スケジューリングのウェブサイトでタイムゾーンがめちゃくちゃになって、いくつかのアポイントを逃しそうになったこともある。Firefoxが壊れてないことをユーザーに伝える方法がなくて、「ウェブサイトが何かしら壊れてる、変なグリッチがある、コンピュータの時間が間違ってる、フォントが変に見える、動画がうまく再生されない場合は、ここをクリックして指紋認識保護を無効にしてください」みたいな永久バナーを表示しないといけない。面白いことに、Turnstileは抵抗指紋認識で壊れるけど、指紋認識保護では動くみたい。後者がこのクソを考慮してるんだろうね。

デフォルトで有効にしない良い理由かもしれないけど、厳格な設定で有効にしないのは悪い理由だね。厳格な設定でサイトが壊れるのはある程度予想してるけど、まだオープンなトラッキングパスがあるとは思ってなかった。それは騙されるよ。

つまり、Cloudflareを使うと、ウェブサイトにアクセスするためにブラウザの攻撃面を大幅に増やさなきゃいけないってことだね。

GoogleとCloudflareの間に、非Chromeブラウザを使いにくくするための取引があるのかな?Chromeを使う圧力がどんどん増してるし、Chromeでできる広告フィルタリングの量も減ってきてるよね。