※ 本ブログは、2023年6月14日にHP WOLF SECURITY BLOGにポストされた Shampoo: A New ChromeLoader Campaign の日本語訳です。
最近、HP Wolf Securityは、Shampooと呼ばれる悪意のあるChromeLoaderエクステンションを中心に構築された新しいマルウェアキャンペーンを検知しました。私たちはこのマルウェアキャンペーンを、Chromeエクステンションの名前にちなんでShampooと呼んでいます。ChromeLoaderは、セキュリティ研究者によって2022年初頭に初めて分析されたGoogle Chromeブラウザエクステンションマルウェアのファミリーです。その目的は、広告に使用される悪意のあるエクステンションをGoogle Chromeにインストールすることです。旧バージョンのChromeLoaderはとりわけ複雑な感染経路を持ち、被害者が違法コンテンツをホストするWebサイトから悪意のあるISOファイルをダウンロードすることから始まります。
Shampooキャンペーンで使用されたChromeLoaderは非常によく似ており、被害者を騙してWebサイトから悪意のあるVBScriptファイルをダウンロード、実行させ最終的に悪意のあるChromeブラウザエクステンションをインストールさせます。このエクステンションは、検索クエリなどの機密性の高い個人情報を収集し、検索をリダイレクトしたり、被害者のブラウジングセッションに広告を挿入したりします。このマルウェアには複数の永続化メカニズムがあるため、被害者はこのマルウェアを駆除するのに苦労しています。
感染チェーンの概要は以下の通りです。まず被害者は、多くの場合違法なコンテンツをホストしているWebサイトから、無料の映画やビデオゲーム、コンテンツのダウンロードを装った悪意のあるVBScriptをダウンロードします。このスクリプトはPowerShellスクリプトを実行し、感染を持続させるスケジュールタスクを設定します。このタスクは50分ごとにループするスクリプトを実行し、別のPowerShellスクリプトをダウンロードして実行します。このスクリプトは悪意のあるエクステンションをダウンロードしインストールします。Chrome セッションに接続されると、ChromeLoader Shampoo はコマンド&コントロール(C2)サーバーに機密情報を送信し始めます。
このキャンペーンは、私たちが市中で確認したサンプルに基づくと、おそらく2023年3月初旬に開始されました。ユーザーは主に、映画(Cocaine Bear.vbs)、ビデオゲームやその他(Your download is ready.vbs)の違法コンテンツをダウンロードすることでこのマルウェアに遭遇します。これらのWebサイトは、被害者を騙してPC上で悪意のあるVBScriptを実行させ、感染チェーンのトリガーを引きます。
このダウンロードされたVBScriptをよく見ると、署名されてbase64エンコードされた2つのPowerShellスクリプトが含まれていることがわかります。各ファイルには、"pr "という名前のbase64エンコードされた文字列に一意の識別子が含まれています。このVBScriptは、base64エンコードされたPowerShellをデコードし、一意の識別子をスクリプトに追加しそれを利用して実行します。
Set so = CreateObject("WScript.shell")
Set ex = so.Exec("cmd.exe /c powershell -WindowStyle Hidden -")
このPowerShellスクリプトは、スケジュールされたタスクのセットアップを担います。最後に、VBScriptは自分自身を削除します。
ChromeLoader Shampooが実行する最初のPowerShellスクリプトは、50分ごとに起動する "chrome center" という名前のスケジュールタスクを設定します。この永続化メカニズムにより、再起動やセキュリティツールやユーザーによるスクリプトの強制終了にもかかわらず、マルウェアがアクティブな状態を維持できるようになります。また、タスクリストの登録も解除されます。これらのタスクには 例えば "chrome engine"、"chrome policy"、"chrome about "などのように、 "chrome_"というプレフィックスが付けられます。これは、おそらく同じマルウェアの以前のバージョンや競合バージョンを削除するためでしょう。
正規の Google Chrome スケジュールタスクには通常、"Google "というプレフィックスが付くことを指摘しておきます。
スケジュールされたタスクによって実行されるインストール スクリプトには、被害者固有の識別子が含まれています。このマルウェアは、この識別子を使用してPowerShellペイロードサーバーから別のbase64エンコードされたPowerShellスクリプトをダウンロードし、 "HKCU:\Software\Mirage Utilities\" という名前のレジストリキーに "Licence Protector" という値で格納します。インストール スクリプトは、ダウンロードしたスクリプトを読み込んで実行し、悪意のあるChromeエクステンションをロードします。インストールスクリプトはwhileループに含まれ、自身を35~75分ごとに繰り返します。
レジストリ値が既に存在し、ChromeLoader Shampooがダウンロードを実行できない場合、インストールスクリプトは "HKCU:\Software\Mirage Utilities\Licence Protector" にあるエクステンションローダースクリプトの実行を試みます。
PowerShellペイロードサーバーは、一意の識別子とインストールスクリプトからのネットワークリクエストの "User-Agent" ヘッダーをチェックします。
エクステンションローダーは長いPowerShellスクリプトで、Chromeセッションでエクステンションをダウンロードしてセットアップします。 そのために、リモートWebサーバーからエクステンションを"%USERPROFILE%temp.zip "にダウンロードします。エクステンションは"%LOCALAPPDATA%"に解凍されます。このフォルダへの解凍に失敗すると、マルウェアは自身を"chrome_test"、さらに失敗すると"chrome_performance"に解凍しようとします。 ファイルを解凍した後、エクステンションローダースクリプトはtemp.zipを削除します。
次に、スクリプトは既存のすべてのChromeウィンドウを閉じてから、このコマンドを使用してエクステンションをロードしたウィンドウを再度開きます:
Start-Process -FilePath <path to Chrome executable> -ArgumentList
--load-extension=<path to malicious extension>,
--restore-last-session, --noerrdialogs, --disable-session-crashed-bubble;
このコマンドはエクステンションを一時的にChromeにアタッチするだけです。このコマンドで起動したブラウザを閉じて、通常の Chrome セッションを開くと、エクステンションは存在しなくなります。この動作は、エクステンションの削除に成功したと被害者を欺くために使用できます。
このエクステンションは"Shampoo"と名付けられ、現在バージョン"18.0"とされています。これはChromeLoaderキャンペーンの名前の理由でもあります。
このエクステンションは高度に難読化されており、多くのアンチデバッグやアンチ解析のトラップを含んでいます。 作者は無料のオンラインJavaScript難読化ツールを使っているようです。
機能
このエクステンションは以下の機能を持ちます:
コマンド&コントロール
URI | HTTPメソッド | 目的 |
---|---|---|
/redsync | GET | 認証 |
/sync?ext=Shampoo&ver=18.0&dd={id}&info={result from redsync} | POST | 認証 |
/cfg | POST | 代替ドメインを取得;暗号化された本体が必要 |
/int_params?ext=Shampoo&ver=18.0&dd=<id> | GET | パラメーターを取得 |
/int?ext=Shampoo&ver=18.0&dd=<id> | POST | パラメーターを送信 |
/hb?ext=Shampoo&ver=18.0&dd=<id> | POST | おそらくハートビート |
/install?ext=Shampoo&ver=18.0&dd=<id> | POST | おそらくインストール成功のシグナル |
/ad?ext=Shampoo&ver=18.0&dd=<id> | GET | このURLのタブを作成、おそらく広告を表示するために使用 |
/search?ext=Shampoo&ver=18.0&is=0&dd={id}&q={query} | GET | 検索をリダイレクトする際に使用 |
/ext?ext=Shampoo&ver=18.0&is=0&dd={id}&q={query} | POST | インストールされたエクステンションに関するデータをC2に送信 |
C2とのインタラクションはすべて保護され、認証cookie(csuという名前)を必要とします。その上、代替ドメインにアクセスするためのやり取りは、RC4だけでなくカスタムアルゴリズムを使って暗号化されています。C2とインタラクションする際、ChromeLoader Shampooは"/cfg "によって提供され更新されるリストからランダムにドメインを選びます。
本稿執筆時点で、このリクエストによって返された利用可能なドメインは以下の通りです:
すべてのコマンドは、これらのドメインとIOCセクションに記載されている他のドメイ ンの多くで実行することができます。URLに"/int_params "から受け取ったパラメーターのいずれかが含まれている場合、タブの内容は"/int "を使用してC2に送り返されます。この記事を書いている時点では、以下がそれに該当します:
リダイレクト
以下の文字列を含むタブは、クエリがローカルに保存され、タブはC2にリダイレクトされます:
私たちの調査では、検索エンジンの種類に関係なくBingにリダイレクトされることが多くありました。
暗号化
C2に送信されるデータやローカルに保存されるデータのいくつかは、RC4とカスタム暗号化スキームを使って暗号化されます。カスタムスキームは、ランダムなバイトからなる20~30個の長い鍵を生成し、それとメッセージをXORすることで構成されます。 暗号化されたメッセージは以下のようにフォーマットされます:
{key length}{key}{xored output}
以下のRC4鍵が使用されます:
ローカルに保存されるデータ | atob("TJMdlkerr3DXCZvo8iTuefuXc6zEoNCTZR9U7vFQu1Q="); |
C2に送られるデータ(具体的には /cfg) | atob("Pnm+erhger+QrmNR21uZ2zdzTuKErEyqHOoJAwW12Wc="); |
ローカルストレージ
"/ad "と"/int_params "の結果は、それぞれ "ad "と "par "という名前でローカルに保存されます。さらに、最後のクエリは”lastQuery”という名前で保存されます。ローカルに保存されるデータは、Chromeのローカルストレージに”qw11gi2cx1as68etu”という鍵で暗号化されて保存されます。
このキャンペーンは、その感染チェーン、分布、そして目的の点で、ChromeLoaderと非常によく似ています。私たちがこのキャンペーンで分析したShampooエクステンションと一般に分析情報が公開されているChromeLoaderのバージョンとの間には、数多くのコードの類似点があります。
興味深いことに、私たちはShampooのタイプミスが、古いバージョンのChromeLoaderのタイプミスと似ていることにも気づきました。これらの類似点から、私たちはShampooがこのキャンペーンで使用されたChromeLoaderの亜種であると確信を持っています。この亜種の収益化の手法は、公に報告されている他のChromeLoaderの亜種と一致しています。 すなわちそれは、リダイレクトによる広告です。
CHROMELOADERの評価
Shampooと以前のバージョンのChromeLoaderとの間には、いくつかの細かな違いがあります。それらは:
このような些細な違いはあるものの、ほとんどのエンドポイントは旧バージョンと同じ名前を共有しています。
URL
mysitesext[.]com | エクステンションC2 |
worldtimesext[.]com | エクステンションC2 |
cesprincipledecli[.]com | エクステンションC2 |
dogsfanext[.]com | エクステンションC2 |
raconianstarvard[.]com | エクステンションC2 |
ghtsustachedstimaar[.]com | エクステンションC2 |
entxviewsinterf[.]com | エクステンションC2 |
disguishedbriting[.]com | エクステンションC2 |
gingleagainedame[.]com | エクステンションC2 |
ebruisiaculturerp[.]com | エクステンションC2 |
dprivatedqualizebr[.]com | エクステンションC2 |
alfelixstownrus[.]com | エクステンションC2 |
ticalsdebaticalfelixs[.]com | エクステンションC2 |
edeisasbeautif[.]com | エクステンションC2 |
dmiredindee[.]com | エクステンションC2 |
sverymuchad[.]com | エクステンションC2 |
swordhiltewa[.]com | エクステンションC2 |
wedonhissw[.]com | エクステンションC2 |
ndalargere[.]com | エクステンションC2 |
wobrightsa[.]com | エクステンションC2 |
yeshehadtwo[.]com | エクステンションC2 |
sapphiresan[.]com | エクステンションC2 |
oldforeyes[.]com | エクステンションC2 |
vesoffinegold[.]com | エクステンションC2 |
rwiththinlea[.]com | エクステンションC2 |
ildedalloverw[.]com | エクステンションC2 |
rincelewasgi[.]com | エクステンションC2 |
oftheappyri[.]com | エクステンションC2 |
dthestatueof[.]com | エクステンションC2 |
ighabovethe[.]com | エクステンションC2 |
cityonatall[.]com | エクステンションC2 |
olumnstoo[.]com | エクステンションC2 |
tropicalhorizonext[.]com | エクステンションC2 |
edrubyglowe[.]com | エクステンションC2 |
herofherlittl[.]com | エクステンションペイロードサーバー |
andhthrewdo[.]xyz | PowerShellペイロードサーバー |
レジストリ
フォルダー
ハッシュ
ほとんどのスクリプトには、被害者ごとに変わる一意の識別子が含まれているため、ハッシュによるChromeLoaderの検知は効果がありません。
Cocaine Bear.vbs | eaf8a42542aa5b50c557010b00e00533561bac8a8520f94e718d9c20db7d52ef |
Background.js | cdb89fa263f512d396020efee1396dc1ac2eda17f4d5a2f7c0177d4a1d8b9744 |
Author : Jack Royer
監訳:日本HP