無料VPNの裏に隠れたネットワーク
ユーザーが無料のVPNをインストールし、「接続」をクリックします。画面には見慣れた「保護されています」というメッセージが表示されます。しかし、数百種類の異なる名称の裏では、1つの共通インフラが動いていました。ブラウザトラフィックのほぼすべてが、そこを経由していたのです。
Socketの研究者らは、737本のChrome拡張機能が単一のオペレーションに関連していると明らかにしました。標的は主にロシア語圏のユーザーです。
規模とブランドのなりすまし
これらの拡張機能は、少なくとも40の開発者アカウントを通じて拡散しました。インストール数は合計75,486件に達しています。Socketによると、Chrome ウェブストアはインストール数を丸めた範囲で表示します。そのため、この数字は表示値を合算したものであり、正確なユーザー数ではありません。
確認された拡張機能のうち274本は、66種の有名なVPN・プライバシーサービスになりすましていました。標的には、Proton VPN、NordVPN、Surfshark、AdGuard VPN、ExpressVPN、Windscribe、TunnelBear、Cloudflare 1.1.1.1、AmneziaVPN、AntiZapretが含まれます。
ロシア語圏への集中
ロシア語圏を狙う傾向は、ネットワークのほぼ全体に見られます。当初のサンプルである734本のうち、690本は名称または説明文にキリル文字を使用していました。残りも、ロシアで制限されているサービスに言及していました。
研究者らは522個のパッケージのコードを詳細に調べました。そのうち520個には、ロシア語の説明文が付いていました。
拡張機能がトラフィックをリダイレクトする仕組み
大半の拡張機能は、Chromeの接続をリダイレクトします。調査した522個のパッケージのうち520個は、ポート1082に固定のSOCKS5プロキシを設定していました。設定には、標準のchrome.proxy APIを使っています。
除外リストに含まれていたのは、localhostや127.0.0.1といったローカルアドレスだけでした。その結果、すべてのタブからのリクエストがプロキシを通過しました。個別のサイトを対象とするスプリットルーティングの機能もありませんでした。
SOCKS5そのものが問題ではない
SOCKS5を使っているからといって、その拡張機能が悪意あるものになるわけではありません。ブラウザ向けのVPNやプロキシは、正当な用途でもこの仕組みを利用しています。
問題は、ほかのシグナルが重なっている点にありました。他社ブランドの大量コピー、共通インフラ、サーバーの所在を隠す手口などです。さらに、有料ロケーションが一度も機能していなかったことや、異なる公開者の間で技術的なテンプレートが同一だったことも挙げられます。
プロキシ運営者に見えるもの
この構成では、プロキシサーバーは強力な監視位置に立ちます。運営者は、ユーザーの元のIPアドレスと接続先アドレスを確認できます。加えて、サーバー側で取得できるTLSメタデータも読み取れます。平文のHTTPで送信されたリクエストは、内容がすべて丸見えになります。
SOCKS5には独自の暗号化機能がありません。それでも今回の調査では、通常のHTTPSトラフィックが復号された形跡は確認されませんでした。したがって、運営者が保護されたページやパスワード、非公開のメッセージを読み取っていたという主張を裏付ける根拠はありません。
検知回避とリモート設定
一部の拡張機能は、プロキシのドメインを通常のDNSクエリに現れないようにしていました。104個のパッケージでは、まずGoogleまたはCloudflareのDNS-over-HTTPSでアドレスを解決し、Chromeには解決済みのIPを渡していました。
公開されたパッケージの1つには、ロシア語の社内向け指示が残されたままになっていました。そこには、ドメインをchrome.proxy.settingsに直接渡さず、名前解決後のIPだけを使うよう書かれていました。
ほかの66本の拡張機能は、新しいリリースなしでインフラを変更できました。コードが事前に設定されたアドレスへ問い合わせ、HTTPリダイレクトをたどります。そして、リダイレクト先の新しいドメインから設定を読み込みます。このため運営者は、ストアの更新を経ずに、インストール済みのコピーを別のホストへ移せました。
ネットワークを結びつける手がかり
パッケージ内に残された痕跡から、一見無関係に見える多くのアドオンがつながりました。調査した522本のうち360本では、インターフェース上でMyxa VPNがプレミアムプロバイダーとして表示されていました。
43個のパッケージには、myxa-workというフォルダーを含む同一のWindowsビルドパスが残っていました。共通のYandex Metricaカウンター、ドメインの大量登録、同一のコード断片も、全体像を裏付けています。研究者らは、少なくとも102件の関連ドメインを確認しました。
果たされないプレミアムの約束
有料機能からは、さらなる矛盾が見つかりました。これらの拡張機能は、日本、シンガポール、カナダ、オーストラリア、トルコにプレミアムサーバーがあると宣伝していました。ところが、40ドメインにわたる該当名200件をすべて調べても、Aレコードは1件も見つかりませんでした。
一部のパッケージでは、ライセンス検証が空でない文字列であれば何でも受け入れていました。10本の拡張機能では、トークンを生成するためのシークレットがソースコードに直接書かれていました。
Burenka VPN拡張機能は、7か国にサーバーがあると宣伝していました。しかし、パッケージ内の15件のエントリは、ルーティング不可能なアドレス0.0.0.0を指していました。接続ハンドラーは常にエラーを返します。ユーザーの目には洗練されたインターフェースが映りますが、コード上には動作する接続が存在しませんでした。
Chrome ウェブストアの審査回避
研究者らは、より単純なコードでChrome ウェブストアの審査を通過しようとした形跡を見つけました。追加の仕組みは、後から加えられていました。
ある拡張機能では、開発者が誤って旧バージョンのアーカイブを残していました。このミスにより、ビルド同士を直接比較できました。リモート設定の仕組みは初回の承認後に現れ、権限の構成は変わっていませんでした。審査後にアップデートを受けた拡張機能は、18アカウントの49本、インストール数は8,076件でした。
使い回された正当化文書
ほかの10個のパッケージには、ストア審査担当者に権限の必要性を説明するための文書が含まれていました。このうち9つのファイルはバイト単位で完全に一致していましたが、公開者はそれぞれ異なっていました。文書には、外部サーバーへデータを送信せず、リモートコードも実行しないと記されていました。
こうした行為は、Chrome ウェブストアのポリシーに反します。ポリシーでは、他社へのなりすましや、拡張機能の実際の機能を隠したり偽ったりすることを禁じています。
現状と調査結果の限界
データ収集時点で、Googleは737本のうち221本を削除していました。さらに516本は公開されたままで、合計のインストール数は58,318件でした。
研究者らは、結論の限界を明確に示しています。分析の対象は、クライアント側のコードと公開されているインフラでした。そのため、運営者がユーザーのトラフィックを保存、販売、または第三者へ提供したという証拠はありません。
一方で、調査では次の事実が確認されています。
- ユーザーへの説明とは異なるルーティング方式
- 有名ブランドのコピー
- 実在しないプレミアムサーバー
- 公開者をまたいだ共通インフラ
- 初回審査後のコード変更
翻訳元: https://meterpreter.org/fake-chrome-vpn-extensions/