Youtubeアンチ広告ブロック小史 - Yuki2718/adblock2 GitHub Wiki

Youtubeに関する議論を行っているList Authors ChatはSlack無料版であるため、90日更新がないスレッドは見られなくなります。将来知りたいと思うころにはなくなっているので、概要をまとめてここに残しておきます。

AdamWrはAdGuard、stephenhawk8054はuBlock Origin、Yuki2718はそれら両方とEasyListでYoutubeのアンチ広告ブロック解析・対応を担当。Braveのryanbrをはじめとした関係者すべてを合わせてここでは合同チームと呼ぶ。gorhillはuBlock Originの開発者。BraveはQuick fixesを除くuBlock Originのフィルターリストと自前の組込みリストを用いている点に注意(iOS版は別)。敬称略。(2024/04/27修正:現在はQuick fixedも使用)

2023/05

Youtubeが一部ユーザーに無視可能な警告を表示するテストを開始。この時点より日本でも警告が表示され、一部のユーザーは警告画面のスクリーンショットをTwitterに投稿。

  • 2023/05/11 stephenhawk8054とYuki2718、手探りで関係しそうなプロパティを集めRedditでユーザーにテストを依頼。

  • 2023/05/12 Ghacksが上記ルールをYoutubeのアンチ広告ブロック対策と誤報道。

  • 2023/05/14 AdamWr、検知対象をjson-pruneルールと突き止め、テスト対象でなくても検知を確認する方法を開発。警告を削除する方法、obligatoryPropsを用いて検知を迂回する方法、およびA/Bテストフラグenable_ab_em_plを上書きする方法を同時に提案。Brave組込みのリストとAdGuard実験フィルタで採用。Braveのフィードバックで有効性が確認される。

  • 2023/05/17 Braveのフィードバックから、警告を無視した場合のクールダウン期間は5時間と判明。uBlock Originは警告が無視可能である点を考慮し、デフォルトでは一部のルールのみ採用。

  • 2023/05/18 ルール調整による最初の広告すり抜け。obligatoryPropsplayerConfigを指定したルールを追加して対応。

2023/06

  • 2023/06/11 Youtube側の最初のカウンター。obligatoryPropsに指定したplayerConfigが対策される。警告削除も対策され、プレイヤーのエラーを起こすようになる。

  • 2023/06/16 AdGuard, uBlock Originともにカウンターに対する最初の対応。

  • 2023/06/20 Youtube側の二度目のカウンター。AdGuard, uBlock Originともに同日内に対応。

  • 2023/06/21 合同チーム、json-pruneではなくtrusted-replace-fetch-responseを用いた広告除去をテストし有効性を確認。

  • 2023/06/28 Youtube、3ストライクテストを開始。

2023/07

いたちごっこが激化、数日に一度は更新されるようになる。

2023/08

  • 2023/08/02 uBlock Origin、obligatoryPropsの枯渇によりaostで警告を直接ブロックする方法に切り替え。Windows 7, 8, 8.1上のBraveでこれによる不具合が発生。

  • 2023/08/04 Youtube、aostをカウンター。uBlock Origin、配列番号まで用いたobligatoryPropsに切り替え。

  • 2023/08/11 stephenhawk8054、広告スキップをテスト。ミッドロール広告でインタラプションが発生するとわかり、採用はせず。Youtube、カウントダウンタイマー付きポップアップを導入。

  • 2023/08/21 AdGuard、アプリ版で$jsonpruneに切り替え。これは10/06の改善策が実装されるまでAdGuardアプリ版のアドバンテージとなる。

  • 2023/08/30 obligatoryPropsが完全に枯渇。stephenhawk8054がrpntでuBlock Origin 1.52の機能を先取りする案を出し延命措置。AdGuardはtrusted-replace-fetch-responseに移行。

2023/09

  • 2023/09/08 uBlock Origin、フィルター配布に使うCDNの中で最も更新が遅いstatically.ioをQuick fixesの配布CDNから除外。

  • 2023/09/14 uBlock Origin、json-prune-fetch-responseに移行。Youtubeはab_det_sc_inj下でrpntを検知しようとしたがすれ違いとなる。

  • 2023/09/22 uBlock Origin、Firefox ESR 102やChrome portable 103.0.5060.134ではjson-prune-fetch-responseが正常に機能しないことが判明したため、trusted-replace-fetch-responseに切り替え。

  • 2023/09/27 EasyList、Adblock PlusのAslatielの提案により、スクリプトレットによるブロックが失敗したとき用のフォールバックルールを採用。

2023/10

  • 2023/10/03 Youtube、json-prune-fetch-responsetrusted-replace-fetch-responseをカウンター。

  • 2023/10/04 合同チーム、propsToMatchの指定で回避。

  • 2023/10/06 AdamWr、YoutubeがObject.definePropertyを用いてURLをセットすることに注目しtrusted-replace-fetch-responseの改善策を提案。

  • 2023/10/07 Brave、信頼済みスクリプトレット未対応により一時的にスタックトレース指定のjson-pruneに移行。

  • 2023/10/09 iOS用Braveでjson-prune-xhr-responseによる遅延が報告され、ルールを無効化。

  • 2023/10/10 stephenhawk8054、RedditでA/Bテストフラグの上書きテストを依頼し有効性を確認、フィルターに追加。同日内にYoutubeがカウンター。Braveが信頼済みスクリプトレットに対応。Edgeの追跡防止が厳重設定だと検知されるとの報道。

  • 2023/10/11 iOS用Braveでスクリプトレット内の文字列置換未対応による不具合の報告。合同チーム、Adblock PlusのMonztAから技術的質問を受け回答。

  • 2023/10/13 Youtube、初めて一日に二回アンチ広告ブロックを更新。Yuki2718、旧json-pruneルールが検知を起こさなくなっていることに気づき採用。Adblock Plus、Youtubeの警告に対応すると発表。

  • 2023/10/14 旧json-pruneルールがカウンターされる。ログアウト状態での検知が初めて公式に報告される。再生時間操作により広告をスキップするFadBlockが公開される。

  • 2023/10/15 iOS用Braveの不具合に対し、改めてiOSでのみスタックトレース指定のjson-pruneに一時退避。

  • 2023/10/16 uBlock Origin、URLを置換するurltransform(のちのuritransform)を実装。

  • 2023/10/17 Braveがスクリプトレット内変数のシングルクォーテーションによる囲い込みに対応していないため広告漏れが発生。uBlock Origin側で変数内のカンマをエスケープし、シングルクォーテーションを排除して対応。Youtube、A/Bテストab_det_gen_re下でより迂回の難しい罠リクエストを使用開始。uBlock Origin、ab_det_gen_reフラグの上書きをテスト。

  • 2023/10/18 AdGuard、フィルターの差分更新への取り組みを本格化し、各ブロッカー関係者に意見聴取。uBlock Origin、フィルター配布に使うjsDelivrを@latestに変更しタグ付け。AdGuard、AdGuardポップアップフィルタに警告の非表示ルールを試験的に追加。

  • 2023/10/19 uBlock Origin、FirefoxとChromiumで対策を分ける二方面作戦を開始。drHyperion451がuBlock OriginのYoutube対応状況を確認できるサイトを構築。gorhill、深刻化するサーバー負荷の問題に対しリンククリックで更新する方法を発案。

  • 2023/10/20 stephenhawk8054、実生活での不幸にRedditでのクレーマー対応が重なりRedditを辞める。uBlock Origin subredditのYoutubeメガスレッドはしばらくの間投稿制限(投稿は可能だが、一般ユーザーには非表示)。

  • 2023/10/21 センシティブなトピックを扱う動画での広告漏れが確認され、対応。これらの動画では通常のfetchではなく、URLの異なるxmlhttprequestが広告配信に使われるため。AdamWr、Youtubeの検知確認メカニズムを解析し罠と比較されるベースを操作する方法を発案。これをもとにuBlock Originはtrusted-prune-inbound-objectを実装。他拡張機能等の干渉にもロバストという利点があった。合同チーム、Ghosteryのchrmodから技術的質問を受け回答。

  • 2023/10/23 uBlock Origin、uBlock filters - AnnoyancesとAdGuard迷惑要素フィルタにaostで警告を直接ブロックするルールを改めて追加。先行して追加したAdGuard Japanese filter Plusで目立った不具合報告がなかったため。

  • 2023/10/25 Youtube、09/27に追加されたEasyListのネットワークルールを標的にする。EasyListが当該ルールを削除。AdGuard拡張機能4.2.208がリリースされる。このバージョンより、AdamWrによるtrusted-replace-fetch-responseの改善案が有効。uBlock Origin、ab_det_gen_reフラグの上書きに依存しないルールに切り替え。

  • 2023/10/27 Youtube、uBlock Originの二方面作戦とaostによる警告ブロックルールを同時にカウンター。対応するも同日内に改めてカウンター。倍速再生で広告をスキップするAd Acceleratorが公開される。

  • 2023/10/28 Youtube、罠リクエストが自らのCORSポリシーに引っ掛かり、ブロッカーを無効にしていてもサイトが真っ白になる不具合を誘発。これはのちに修正されるが、罠リクエストによる、ブロッカー無効でも発生するパフォーマンス劣化は尾を引く。uBlock Origin、サーバー負荷とより早い更新の需要で板挟みとなり、フィルターリストの更新間隔を調整。

  • 2023/10/29 uBlock Originチームのu-RraaLLが管理を引継ぎ、uBlock Origin subredditのYoutubeメガスレッドを再開。

  • 2023/10/31 Youtubeがブロッカー検知の広範に渡る(global)努力を開始したと報道される。検知報告が急増。AdamWrによるtrusted-replace-fetch-responseの改善案を採用したuBlock Origin 1.53.0がリリース。これによりAdGuard, uBlock Originともルールを更新せずとも検知されなくなるが、Youtubeが気付くのを少しでも遅らせるため今まで通りの更新を続ける知らんぷり作戦を実行。

2023/11

  • 2023/11/01 Yuki2718、Youtubeの警告ターゲティングがログイン時の__Host-GAPSクッキーで行われると同定。

  • 2023/11/04 Yuki2718、iOS用Braveで使えるtrusted-replace-fetch-responseルールがそろそろなくなるのでスタックトレース指定のjson-pruneルールのテストをBraveに依頼。

  • 2023/11/07 Youtube、A/Bテストks_get_o_pp下でベース操作をカウンター。AdGuard, uBlock Originともに同日対応。

  • 2023/11/09 Youtube、再度ベース操作をカウンター。対応は可能だったものの、合同チームで協議しこれ以上のベース操作は取りやめ。

  • 2023/11/10 Adblock Plus、FadBlockと同様の再生時間操作による広告スキップに切り替え。FadBlockがisTrusted = falseの自動クリックにより検知されることが判明(クリックされた場合のみ検知する受動的検知)。

  • 2023/11/12 stephenhawk8054、Youtubeの罠リクエストによる遅延を標準リストで対処することを提案するが、AdamWrとYuki2718はサイト自身の問題として反対。

  • 2023/11/14 再生リスト、かつ、何らかの条件のもとで正規表現の過剰マッチングによる不具合が報告され対応。

  • 2023/11/16 Youtube、Adblock PlusとFadBlockの再生時間操作をA/Bテストab_pl_manのもとで検知。一部のユーザーでこれによる遅延がブロッカー無効でも発生。AdGuardポップアップフィルタの警告非表示ルールも検知されエラーを出すようになる。

  • 2023/11/18 Youtube、一日三回のアンチ広告ブロック更新。A/Bテストab_det_apb_bab_net_tp_eのもと(AND条件)でEasyListのネットワークルールを標的に。EasyList、当該ルールを削除。

  • 2023/11/23 差分更新を実装したuBlock Origin 1.54.0がリリース。広告漏れを懸念し、知らんぷり作戦を終了。倍速再生で広告をスキップするAd Speedupが公開される。

  • 2023/11/30 Youtube、A/Bテストab_det_el_h下で初めてEasyListの非表示ルールを標的にする。当該ルールをいったん削除。以後、EasyListの非表示ルールが標的になり続ける。アメリカ限定のYoutube TVでの不具合がAdGuardに報告され、AdGuard, uBlock Originともに対応。

2023/12

  • 2023/12/02 Youtube、A/Bテストab_fk_sk_clで罠のスキップボタンを設置し自動クリックを積極的に検知。

  • 2023/12/07 uBlock Origin、urltransformによるYoutubeの検知スクリプト置き換えをFirefox限定で有効化するが、バージョンがまだ1.53.0のユーザーに不具合を起こすため翌日無効化。

  • 2023/12/12 アルバム再生時の広告漏れが報告され対応。異なるURLのxmlhttprequestを用いるため。

  • 2023/12/20 uBlock Origin、uritransformルールを開発者ビルド限定で採用。

2024/01

  • 2024/01/11 uBlock Origin、uritransformルールを安定板でも有効化。Yuki2718、Youtubeが警告削除でエラーを出す仕組みを解析し、エラーを出さずに警告を削除する方法を開発。

  • 2024/01/19 AdGuard、Youtubeの警告削除ルールをアプリ版製品とFirefox拡張機能に追加。

  • 2024/01/27 uBlock Originでuritransformによりショートのレイアウトが崩れる問題が報告される。ひとまず置換対象を最新のIDにするが、サービスワーカーのキャッシュにより完全解決には至らず。remove-cache-storage-itemスクリプトレットを追加。

  • 2024/01/28 uBlock Origin、キャッシュを削除するrpntルールを追加。

  • 2024/01/31 uBlock Origin、開発者ビルド限定でremove-cache-storage-itemルールを追加。

2024/02(暫定版)

  • 2024/02/16 Brave、Yuki2718の提案により2023/09/27にEasyListに追加されたルールの改良版を有効化するが、ショートおよびPremium会員で不具合が生じたため再度無効化。Yuki2718、この問題の調査でPremiumに加入しPremiumの効果が完全にサーバーサイドであることを確認。クライエントサイドでPremiumの効果を得るような操作ができないか、という提案が初期に出されていた。

  • 2024/02/17 AdGuard、2023/09/27にEasyListに追加されたルールと同様のものがコンテンツブロッカー向けにまだ残っていたため当該ルールを修正。

  • 2024/02/21 Youtube、スクリプトID09f82e1dより動画フェッチ用のURLを変更、これに伴いAdGuardとBraveで広告が漏れるようになる。いずれも数時間内に対応。uBlock Originはuritransformにより影響を受けず。一方、これによりプレイヤーが正しくスケールされない問題が発生。

  • 2024/02/22 stephenhawk8054、上記問題の緩和のためキャッシュを削除するrpntルールを調整。Youtube、問題があったのかスクリプトを02/21以前のものに巻き戻す。

  • 2024/02/24 既存のルールではブロックできない、SSAP広告の情報が初めて確認される。これは一部のアカウントのみを対象とし、フラグ操作などで配信させることはできない。通常のスキップができないことに加え、ad-interruptingなどのクラスを持たないためAd Speedupでもスキップ不可(指定をただせばスキップ可)。Yuki2718、2024/02/17にAdGuardがコンテンツブロッカー向けに有効化した、スクリプトレット失敗時のフォールバックルールをuBlock Originに追加。

  • 2024/02/25 uBlock Origin、Firefoxでtrusted-replace-fetch-responseルールを無効化し$replaceに一本化。Yuki2718、SSAP広告の痕跡を過去のbase.jsから追い、これが11月には存在していたことを確認。

  • 2024/02/26 stephenhawk8054とYuki2718、SSAP広告対象のRedditユーザーのアカウント共有を得て分析。stephenhawk8054、広告URLがytInitialPlayerResponse.streamingData.serverAbrStreamingUrlから来ることを突き止めるとともに、これを上書きするとエラーが出ることを報告。Yuki2718、ytInitialPlayerResponse.playerConfig.ssapConfigも同時に上書きすることでエラーを解消し、uBlock OriginとAdGuardにルール配信。

  • 2024/02/28 uBlock Originで上記ルールに適用URLを指定しなかったことによる遅延が確認され、ルールを調整。Brave、iOS向けにSSAP広告用ルールを追加。