
🕵️♂️ 🔎 🕸️ あなたは以下のChrome拡張機能をインストールしていることを知っています。
crx-scouter.js は、私たちがこっそり使用しているChrome拡張機能を検出し、ブラウザの前にいる人物が凄腕のハッカーかハイエンドなプログラマーかを検出することができます🐱。ハニーポット、人間と機械の識別、広告ブロック対策、拡張機能の脆弱性の事前チェックなどに使用できます。
crx-scouter.js の原理は、2017年に私が evi1m0 と行った実験に基づいています。Google はこの問題を解決しようとしているようですが、ほとんど成功していません。詳細は原理のドキュメントをご覧ください。
デモ: https://blog.neargle.com/crx-scouter/
指定した拡張機能を検出する
const { check_one } = await import('./scouter/scouter')
check_one("aapbdbdomjkkjkaonfhkkikfgjllcleb", console.log)
console.log の出力は以下のようになります:
{
"extid": "aapbdbdomjkkjkaonfhkkikfgjllcleb",
"url": "https://chrome.google.com/webstore/detail/google-translate/aapbdbdomjkkjkaonfhkkikfgjllcleb",
"name": "Google Translate"
}
もちろん、フィンガープリント内のすべての拡張機能を検出する check_all_crx(callback) 関数もあります。
✨ オンライン検出デモ はこの関数に基づいており、結果は以下のようになります:

なぜこれが可能なのか?
Chrome拡張機能の開発者は、crx 拡張子のパッケージ内の manifest.json 設定マニフェストファイルが、拡張機能の重要な情報を提供することを知っているはずです。 crx 拡張子のファイルは unzip で直接解凍できます。manifest.json の例は以下の通りです:
{
"background": {
"scripts": [ "background.js" ]
},
"content_scripts": [ {
"all_frames": true,
"js": [ "content.js" ],
"matches": [ "http://*/*", "https://*/*", "ftp://*/*", "file:///*" ],
"run_at": "document_end"
} ],
"description": "Validates and makes JSON documents easy to read. Open source.",
"homepage_url": "https://github.com/teocci/JSONView-for-Chrome",
"icons": {
"128": "assets/images/jsonview128.png",
"16": "assets/images/jsonview16.png",
"48": "assets/images/jsonview48.png"
},
"key": "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEApA/pG/flimvWWAeUelHGaQ+IJajQm01JkfK0EYOJPyfsdTkHLwD3Aw16N3zuFkmwz09DcGDT+ehww7GSpW7RpbX5kHrovsqyHXtwt+a2Sp8bYFFdpRPj3+HG6366kNkwttDHMtsDkwuKaBtrQofQe5Ud9mKu9h1FDPwc2Qql9vNtvOqKFhV+EOD0vD2QlliB6sKCteu4nYBlFEkh6pYWRaXdAYSKYdE1SYIuQzE3dk11+KCaAC1T6GffL3sia8n5brVX7Qd+XtXyBzuM54w5e3STwK7uLMhLGDIzHoTcldzWUUflfwuI86VQIFBxPbvXJKqFFFno+ZHs/S+Ra2SPmQIDAQAB",
"manifest_version": 2,
"minimum_chrome_version": "21",
"name": "JSON Viewer",
"permissions": [ "clipboardWrite", "http://*/", "contextMenus", "https://*/", "ftp://*/" ],
"short_name": "JSONViewer",
"update_url": "https://clients2.google.com/service/update2/crx",
"version": "0.7.0",
"web_accessible_resources": [ "assets/options.html", "assets/csseditor.html", "assets/css/jsonview.css", "assets/css/jsonview-core.css", "assets/css/content_error.css", "assets/images/options.png", "assets/images/close_icon.gif", "assets/images/error.gif" ]
}
ユーザーがWebページ内で拡張機能のリソースにアクセスする必要がある場合、web_accessible_resources で LIST を宣言する必要があります。json-view を例にとると:
"web_accessible_resources": [ "assets/options.html", "assets/csseditor.html", "assets/css/jsonview.css", "assets/css/jsonview-core.css", "assets/css/content_error.css", "assets/images/options.png", "assets/images/close_icon.gif", "assets/images/error.gif" ]
これらのリソースにアクセスするためのURL形式は次のとおりです:
chrome-extension://' + extension id + /assets/options.html
私はクローラーを開発し、Googleストア全体の拡張機能アプリケーションマニフェストを取得しました。カテゴリは以下の通りです: 'ext/10-blogging', 'ext/15-by-google', 'ext/12-shopping', 'ext/11-web-development', 'ext/1-communication', 'ext/7-productivity', 'ext/38-search-tools', 'ext/13-sports', 'ext/22-accessibility', 'ext/6-news', 'ext/14-fun', 'ext/28-photos' などなど。
その後、web_accessible_resources を含むすべての拡張機能のフィンガープリントを取得しました。
5年後、Chrome はこの問題を回避するためにセキュリティ機能を更新しました。つまり、web_accessible_resources に matches ホワイトリストのセキュリティ機能が追加され、ホワイトリスト内のURLのみが web_accessible_resources にアクセスできるようになり、フロントエンドのフィンガープリント検出を回避します。
しかし…今年クロールした110,000の拡張機能のうち、web_accessible_resources matches ホワイトリストを追加したプラグインはわずか286で、そのほとんどが *://*/* のような無意味なホワイトリストや、明らかに迂回可能なホワイトリストを設定していました。
誰も使わない、または間違った方法で使われるセキュリティ機能がどれほど無力であるかを示しています。