すべての投稿に戻る
公開日 · 著者 Renaud Deraison

ブラウザから這い出した拡張機能

Zscalerが発見したEdgecutionというバックドアは、被害者が一度も開いていないMicrosoft Edgeのウィンドウの内側で動き、Native Messaging — 拡張機能がデスクトップアプリと対話するために用いる正規のチャネル — を使ってホスト上でコマンドを実行します。問うべき問いは、ブラウザが使い捨てのVMのなかで動いているとき、そのホストへの橋が届く先には何があるのか、ということです。

ブラウザの拡張機能は、ブラウザのなかに閉じ込められている「はず」です。Edgecutionというバックドアは、その「はず」が実に多くを支えていたことを示す、動く実例にほかなりません。それは被害者が一度も開いておらず、目にすることもできないMicrosoft Edgeのウィンドウの内側で動き、あらゆるChromiumブラウザに組み込まれたある機能を使って、その下にあるマシン上でコマンドを実行します。

経理部に入って三週間、まだ何にでも「はい」と答えてしまう新人を思い浮かべてください。Microsoft Teamsに、ITサポートに名を連ねる誰かからメッセージが届きます。Outlook向けのスパムフィルタの更新があり、メールチームが今週それを展開している、こちらがそのページです、と。彼女はそれを開きます。それは「Outlook Updates Management Console」と銘打たれ、いかにも社内のもののように見え、インストールを完了させるために実行する短いコマンドを彼女に渡します。彼女はそれを実行します。何も起きていないように見えます。彼女はタブを閉じ、仕事に戻ります。

6月下旬、ZscalerのThreatLabzチームは、彼女がそのタブを閉じたあとに何が起きるのかを 記録しました。 このマルウェアファミリーがEdgecutionであり、BleepingComputerも 同じ週にそれを報じました。 このマルウェアは設計上、物静かです。より詳しく見る価値があるのは、攻撃者がそれをどこに隠すことを選んだか、という点です。

ITからの、本物ではなかったメッセージ。

最初の一手はMicrosoft Teamsを通じたソーシャルエンジニアリングで、攻撃者は会社自身のITスタッフになりすまし、従業員をあの偽のOutlook更新ページへと誘導します。そのページは「インストールを完了させる」三つの方法を提示しますが、Zscalerの分析によれば、それらはすべて同じものを届けます。すなわち、本物のAutoHotKey実行ファイルとセットになった難読化済みのAutoHotKeyスクリプト、クリップボードにコピーされるWindowsバッチスクリプト、あるいはクリップボードにコピーされるPowerShellスクリプトです。この三つのうち二つは、ClickFixとして知られているかもしれないクリップボード貼り付けの手口です — ページがコマンドをあなたの代わりに書き込み、人間に残された作業は貼り付けてEnterを押すことだけなのです。

その貼り付けこそが、勝負のすべてです。ペイロードは暗号化されたZIPのなかに入って届きますが、そのPKマジックバイトは剥ぎ取られており、スキャンする側からはファイルがZIPに見えないようになっています。スクリプトがいったん実行されれば、ホストは侵害されます — 巧妙なエクスプロイトによってではなく、人が自分自身のコンピュータ上でプログラムを実行するよう言いくるめられたために。これ以降のすべては、攻撃者がどう居座り続けるかを決める話です。

バックドアとしてのブラウザ。

それが再起動を生き延びる方法こそ、立ち止まってじっくり見る価値のある部分です。永続化したいマルウェアの多くは、実行ファイルを落とし、レジストリの実行キーを書き込み、あるいはサービスをインストールします — どれもセキュリティツールが監視するために作られているものばかりです。Edgecutionはもっと物静かなことをします。セットアップスクリプトはWindowsのタスクをスケジュールし、いくつかのコマンドラインフラグを付けてMicrosoft Edgeを起動します。そのなかには、攻撃者自身の拡張機能をサイドロードする--load-extensionと、ブラウザのウィンドウが画面に一切描画されないようにする--headless=newが含まれます。こうしていまや、マシン上では一つのMicrosoft Edgeプロセスが — 署名され、信頼された、ありふれたプログラムが — ユーザーには見えず、ユーザーが起動してもいないのに動いているのです。

その見えないブラウザの内側で、拡張機能は二つのことをします。一つは、Amazon CloudFront上でホストされたWebSocketを通じて、コマンド&コントロールサーバー(攻撃者が指示を送るために用いるアドレス)へとビーコンを送り出すこと。そのおかげで通信は、普通のブラウザが普通のコンテンツネットワークと話しているように見えます。そしてもう一つは、受け取ったコマンドをNative Messagingを使ってホストへと中継して降ろすことです。

Native Messagingは、実在し、文書化された、設計どおりに動くChromiumの機能です。これは、ブラウザの拡張機能が同じマシンにインストールされたデスクトッププログラムと対話できるようにするチャネルであり — たとえば、拡張機能が対になったデスクトップアプリに作業を引き渡すために用いる仕組みです。拡張機能がchrome.runtime.sendNativeMessageを呼び出すと、ブラウザはマニフェストファイルに記された小さな「ネイティブホスト」プログラムを起動し、それにJSONをパイプで渡します。Edgecutionは自前のネイティブホストを登録します。すなわち、Pythonバックドアを起動するnative_host.batです。そこからバックドアは、シェルコマンドの実行、PowerShellの実行、任意のPythonの実行、ファイルの読み書き、実行中プロセスの一覧化、そしてシステム情報を上流へと報告することができます — クリーンな足がかりをランサムウェアの一味に引き渡す初期アクセスブローカーになるために必要なものすべてです。Zscalerは、この攻撃者の手口をPayouts Kingランサムウェアのオペレーションに結びつけています。

1 · TEAMS「IT」からのメッセージスパムフィルタの更新2 · おとり偽のOutlookページ「Updates Console」3 · 実行被害者がスクリプトを実行貼り付け、またはAutoHotKey4 · バックドア隠れたEdge--headless --load-extブラウザサンドボックスの境界Native MessagingsendNativeMessageあなたのホストOS上native_host.batPythonバックドアユーザー権限でのコマンドバックドアにできることシェル+PowerShellの実行任意のPythonの実行任意のファイルの読み書きプロセスの一覧化システム情報の収集ランサムウェアへの引き渡し
Edgecutionの連鎖。被害者はスクリプトを実行するよう言いくるめられ(ステップ3) — ホストはそこで侵害されます。その足がかりからマルウェアは、隠したままにするMicrosoft Edgeのウィンドウを起動し、自前の拡張機能をサイドロードし、Native Messaging — 拡張機能がデスクトッププログラムと対話するために用いる正規のチャネル — を使って、Pythonバックドア越しにホスト上でコマンドを実行します。出典:Zscaler ThreatLabz。

この図のなかにないものに注目してください。新しいサービスはなく、検知を待ってディスク上に居座る、落とされた.exeもありません。攻撃者のコマンドを実行しているのは、Microsoft Edgeが起動したバッチファイルが起動したpython.exeであり — そしてそれらのコマンドを運ぶ通信は、ブラウザがCDNと話しているものです。これが紛れ込めるのは、そのほとんどあらゆる部分が、正規に見える動作をしている正規のものだからです。

各紙の見出しはこれをサンドボックスからの脱出と呼びました。より正確に言えば、こうです。従業員がスクリプトを実行したその瞬間に、ホストはすでに侵害されていました。Native Messagingは、攻撃者が破って通り抜けた穴ではありません。それはブラウザに最初から付いてくる扉であり、攻撃者はそこを歩いて通り抜けたのです。この区別は、本当の修正がどこに存在しなければならないかを指し示しています。設計どおりに動いている機能を、パッチを当てて回避することはできません。変えるべきは、その扉が開く先なのです。

Bromureにおいて「ホストへの橋」が届く先。

Bromureはセキュリティを最優先するブラウザです。各タブは、あなたのMac上の使い捨てのLinux VM(仮想マシン — それ自体が独立した一台のコンピュータ)の内側で動き、そのVMはウィンドウを閉じると消去されます。この一つのアーキテクチャ上の選択が、Edgecutionの物語の残りがあなたのマシン上で何を意味するのかを変えてしまうのです。

攻撃全体の核心であるNative Messagingから始めましょう。普通のブラウザでは、拡張機能が対話する「ネイティブホスト」は、あなたのオペレーティングシステム上のプログラムです — あなたのファイル、あなたのキーチェーン、あなたのネットワーク共有を抱えている、まさにそのオペレーティングシステムです。この橋には際限がありません。どの拡張機能もネイティブホストを登録でき、そのホストはどんなものにでもなれます。Edgecutionの仕掛けのすべては、ブラウザとあなたのファイルが同じマシンに乗っていることに依存しているのです。

Bromureでは、ブラウザはそのマシンの上にありません。ブラウザは使い捨てのVMの内側で動くので、ブラウザの下にあるオペレーティングシステムは、macOSではなく、使い捨てのLinuxゲストです。VMの内側にある何かが登録した不正なネイティブホストは、VMの内側のプログラムであり — あなたの人生を何一つ含まず、ウィンドウを閉じれば存在しなくなるコンピュータと話すことになります。macOSの側にまで実際に届く、ごく狭い橋の一群は、ファーストパーティ製であり、読み取り専用のディスクイメージに焼き込まれています。たとえば資格情報ブリッジは、あなたのMacのKeychainからパスキーやパスワードを入力します。動作中のセッションが新たな橋を追加する手立てはありません。なぜなら — そしてこれが答えの後半なのですが — そもそも拡張機能をまったくインストールできないからです。

従来型のブラウザあなたのコンピュータブラウザ拡張機能Native MessagingホストOSあなたのファイルKeychainネットワーク共有橋は、あなたのファイルがある場所に降り立つ。BromureあなたのMac使い捨てVMブラウザファーストパーティ製の橋のみ · インストール不可Native MessagingゲストLinux OSウィンドウを閉じると消去されるハードウェア隔離macOS — あなたのファイルとKeychain手つかず橋は使い捨てのマシンのなかに留まる。
同じ拡張機能、同じNative Messagingの呼び出し。左では、橋はブラウザを、あなたのファイルを抱えるオペレーティングシステムへとつなぎます。Bromureでは、ブラウザは使い捨てのVMの内側で動くので、橋が届くのはゲストの使い捨てLinuxであり — そしてそもそもあなたは拡張機能をインストールできなかったはずです。実際にmacOSまで届くわずかな橋(Keychainからのパスキーとパスワード)は、ファーストパーティ製で、イメージに組み込まれています。

このブロックは、フィッシングページが言葉巧みにあなたを通り越させられるような設定ではありません。Bromureのブラウザポリシーでは、chrome://extensionsとWeb Storeはハードなブロックリストに載っており、developer modeも、「load unpacked」も、それを回り込むための高度なトグルもありません。Edgecutionがホスト側で行うこと — あなたの本物のプロファイルを指す--load-extensionを付けて二つ目のChromiumを起動すること — を行う手立てもありません。なぜなら、あなたの本物のプロファイルは、はぐれたプロセスがブラウザを向けられるような、あなたのMac上のフォルダではないからです。それはVMの内側に封印されています。

もう一本、引いてみる価値のある糸があります。それはこの物語全体のなかで、いちばん安上がりな勝利だからです。おとりはMicrosoft Teamsに届きました。いまでは多くの人が、Teams、Outlook、Slackをウェブアプリとして使っています。もしその習慣が使い捨てのBromureのタブの内側に置かれているなら、なりすましのメッセージも、リンクも、偽の「Outlook更新」ページも、最初の一秒から隔離されたセッションのなかに着地します — そして、私たちがいま辿ってきた連鎖は、決してステップ3には到達しません。なぜなら、あなたにスクリプトを実行させたいそのページは、あなたのシェルに届けないVMのなかに座っているからです。ホストを必要とする攻撃が、ホストに出会うことは決してありません。

これが解決しないこと。

隔離は魔法ではありませんし、その限界をはっきりと述べておく価値があります。

あなた自身が実行するコマンド

ここでの入口は、スクリプトを実行する人間です — クリップボードにコピーされたバッチまたはPowerShellのコマンド、あるいはAutoHotKeyの実行ファイルです。もしあなたが自分自身のシェルにコマンドを貼り付けてEnterを押すなら、そのループのなかにブラウザの隔離は存在しません。VMとあなたのMacのあいだのクリップボード共有は、コピーと貼り付けが通常のブラウジングの一部であるため、既定でオンになっています。プロファイルを完全な隔離に切り替えることもできますし、フィッシングのレイヤーは、あなたが行動する前にそのページを警告するためにそこにあります。ですが、長く効く鉄則は、これらのどれよりも古いものです。ウェブページがあなたに渡したコマンドは、決して実行しないこと。

Windowsのバイナリ、移植可能な手口

EdgecutionはWindows上のMicrosoft Edgeを標的にしており、それらのファイルそのものはMac上では動きません。それは気休めにすぎず、防御ではありません。Native MessagingはmacOS上でもChromiumの機能であり、同じ週には、ユーザーをそそのかしてTerminalのコマンドを貼り付けさせ、Atomicインフォスティーラーを落とす macOSのキャンペーン もありました。手口は移植可能であり、OS固有なのはバイナリだけなのです。

Bromureが変えるのは、もっと狭い範囲のことであり、そして私たちの考えでは、悪いものが決してあなたに届かないという約束よりも有用なことです。Bromureは、Edgecutionを物静かで永続的なものにしていた条件を取り除きます。ブラウザはもはや、あなたのファイルの隣に座る恒久的で信頼されたプロセスではありません。Native Messagingはもはや、どの拡張機能でも登録できる際限のない橋ではありません — 拡張機能はそもそも追加できず、ブラウザ自身のオペレーティングシステムは使い捨てです。そして、このアーキテクチャ全体が達成するために作られたものである永続化には、永続する先がありません。ウィンドウを閉じれば、バックドアが住んでいたマシンは消え去るのです。

危険なブラウザとは、あなたに見えないブラウザのことだ。

この二十年、ブラウザに関するセキュリティの助言は、あなたの目の前のウィンドウについてのものでした — アドレスバーを確認しなさい、南京錠を探しなさい、見慣れないリンクをクリックするな、と。Edgecutionは、被害をもたらしているブラウザが、ますますあなたの決して目にしないものになりつつあることを、ささやかに思い出させてくれます。すなわち、ヘッドレスのプロセス、スケジュールされたタスクに起動され、CDNと話し、あなたがインストールしていない拡張機能を動かしているブラウザです。一度も描画されなかったウィンドウのアドレスバーを、あなたが検めることはできません。

もはや問いは、あなたの目の前のウィンドウが安全かどうかではありません。問いは、このマシン上のどんなブラウザであれ、それがあなたに牙を剥いたとき、何に届きうるか、です。ありふれたコンピュータでは、その答えは、ブラウザに最初から付いてくる橋を通じた、あなたのファイルです。Bromureが動いているマシンでは、その答えはこうです。あなたが用を済ませたその瞬間に、すべてを忘れてしまう使い捨てのLinuxの箱、です。それこそが、持つに値する違いです。インストールして、信頼していない半分のブラウジングの既定のブラウザにし、そして隠れたウィンドウが、どのみち捨てるつもりだった何かへと開くようにしてください。