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

すべての* Firefox拡張機能をインストールする

概要

  • Firefox拡張機能の全件スクレイピングと分析の記録
  • API制限の回避方法やカテゴリ別取得の工夫
  • 収集した拡張機能の数や容量、異常な拡張機能の事例
  • フィッシングやSEOスパム、PUA(潜在的に望ましくないアプリ)の発見
  • データセット公開と今後の課題

Firefox拡張機能の全件スクレイピング

  • Firefox拡張機能の全数調査 を目指し、 公式API を利用したスクレイピング手法
  • APIは 認証不要・レート制限なし で利用可能
  • 1ページ50件・最大600ページ で約3万件しか取得できない制限
  • ソート条件( created, rating, hotness, updated)を変更し、重複排除で件数を増やす工夫
  • exclude_addonsパラメータ でさらに追加ページを取得
  • URL長制限 により20ページ追加が限界
  • カテゴリごとに並列取得 することで、ほぼ全件取得に成功
  • 最終的に84,235件 (約49.3GB、平均584.9KB/拡張機能)を取得

スクレイピングの工夫と課題

  • ページ制限回避 のため、ソートやカテゴリを活用
  • 並列処理 で取得速度を大幅向上
  • 重複slug やIDの排除によるユニーク件数の算出
  • 拡張機能の一部は取得・検出できず、ウェブサイト表示数との差異が発生
  • データセットはHugging Faceで公開 し、再取得の手間を削減

拡張機能サイズ・特徴ランキング

  • 最大サイズ はdmitlichess(196.3MB、音声ファイル2,000件以上)
  • 上位10件 にはUnityアプリや画像大量含有拡張など、多様な巨大拡張機能
  • 最小サイズ はtheTabs-saver(7,518バイト、コードなし)
  • 最悪の拡張機能 はTab Stack for Firefox(評価アルゴリズムに基づく)
  • 最初の拡張機能 はWeb Developer
  • 最多スクリーンショット はRDS Bar(54枚)
  • 異常な権限要求 はFalscheLaden(3,695件)、Google Dark Theme(2,675件)

開発者・運営分析

  • 最多拡張機能公開者 はDr. B(84件、全てREADME.md付き、アイコン・スクリーンショットなし)
  • 開発者ごとの拡張機能数は意外と少数
  • SEOスパム :AI生成拡張や「Code Injector」など、著者のホームページリンクを利用したスパム
  • PUA(潜在的に望ましくないアプリ) :Custom Web Searchシリーズなど、同一開発者による大量展開
    • 合計70万ユーザー以上
    • ChromeとFirefox両対応、同一デザイン、同一企業名義(Innover Online Group Ltd)

セキュリティ・悪質拡張機能の発見

  • フィッシング拡張 :偽MetaMask等、ユーザーのシードフレーズ窃取
    • Cyrillic文字を使ったホモグリフ攻撃
    • NocoDB経由でフィッシングページURLを取得・自動表示
    • APIキー流出によりスプレッドシートを削除可能だった事例
  • Mozillaへの通報で即日削除 されるケースも多い
  • PUA :Yahooアフィリエイトコード付きの検索誘導、Google広告活用、短期間での大量配信

今後の課題・まとめ

  • APIや公式サイトの仕様変更 によるスクレイピング手法の見直し必要性
  • 悪質拡張機能の検出・通報体制強化 の重要性
  • データセット公開 による再調査・二次利用の促進
  • 拡張機能エコシステム の健全化と透明性向上への貢献

Hackerたちの意見

この動画見てめっちゃ笑ってる。これって、パソコンの使い方もよくわからないお年寄りがネットサーフィンしてる感じなんだろうな。誰かこれをChromeでやってみてくれない?

動画どこにあるの?ざっと見たけど、静止画しか見当たらなかったよ。

一番好きな部分は金属パイプの音効果だった。作者がどの拡張機能がそれを出してるのか調べてくれたらいいのに。

完全に訓練されていない人を放っておいて、あらゆるユーザーインターフェースのポップアップで「はい」「受け入れる」「ダウンロード」「OK」「同意する」をクリックさせたら、特にオペレーティングシステム自体が出している質問とブラウザウィンドウ内のものを区別できない人なら、そうなるよ…

この記事、ほんとにクレイジーだね。特に、about:ページのどれかにパフォーマンスバグが見つかったっていうのが、追跡する価値ありそうで最高だわ。

これ、めっちゃいいね。よくやった!

「これでほぼ全部の拡張機能を手に入れたから、以前やってたことがほんとにバカみたいに見える。」これ、深く共感するわ。

どうしてこんなに時間がかかったのか調べてみた。13年前、extensions.jsonはextensions.sqliteだった。今は、extensions.jsonがシリアライズされて、書き込みのたびに20msごとに全体を書き直してる。15個の拡張機能には問題ないけど、84,194個には無理があるね。たまにデータベースって役に立つよ。 ;)

これは逆の良い例かもしれないね。稀なケースのためにデザインするのは間違いだよ。少数の拡張機能を扱っているなら、書き換えられたjsonファイルで十分だよ。

「実装に関して、一番面白いのは『Іron Wаllеt』だね(I、a、eはキリル文字)。インストールから3秒後に、NocoDBのスプレッドシートの最初のレコードからフィッシングページのURLを取得して開くんだ [...] APIキーには書き込み権限があったから、スプレッドシートを消しちゃった。」

実際、その拡張機能はまだ残ってるよ: hxxps://addons[.]mozilla[.]org/en-US/firefox/addon/%D1%96ron-w%D0%B0ll%D0%B5t/

一般的な概念として、これってWindows 98にあらゆるインストーラーの.EXEベースのInternet Explorerブラウザツールバーを追加することを思い出させるな。 https://www.reddit.com/media?url=https%3A%2F%2Fi.redd.it%2Fz... https://fergido.wordpress.com/wp-content/uploads/2011/06/too...

実際にページが正常に読み込めないのは残念だけど、文章はすごく楽しめたよ。 > 「途中でクラッシュレポートをオンにしたんだ。こんなに笑ったのは久しぶりだよ! Mozillaチームには恐ろしい話ができそうだね。」

どうやらブラウザの拡張機能でもコメディになり得るみたいだね。

これってデジタル版の「スーパサイズ・ミー」ってこと?