エクスプロイト&脆弱性
「Phemedrone Stealer」による脆弱性CVE-2023-36025の悪用
本稿では、Windows Defender SmartScreenのバイパスを可能とする脆弱性CVE-2023-36025を悪用した「Phemedrone Stealer」による攻撃について解説します。
定期的に実施される脅威ハンティングにより、未知のマルウェアPhemedrone StealerがCVE-2023-36025を悪用することで感染を拡大している証拠が明らかになりました。
Phemedrone Stealerは、Webブラウザ、暗号資産ウォレット、メッセージングアプリ(Telegram、Steam、Discord等)のデータを標的にしています。そして、スクリーンショットを撮影する手口により、ハードウェア、位置情報、OSなどのシステム情報を収集します。窃取した情報は、TelegramやC&C(コマンド&コントロール)サーバを介して攻撃者に送信されます。
このオープンソースの情報窃取型マルウェアは、C#で書かれています。また、GitHubやTelegramを通じて頻繁にメンテナンスが実施されています。
CVE-2023-36025 は、Microsoft Windows Defender SmartScreen に影響を及ぼす脆弱性です。この脆弱性は、インターネットショートカット .urlファイルのチェックおよび関連するプロンプトの欠如に起因します。攻撃者は、Windows Defender SmartScreenの警告とチェックをバイパスする不正なスクリプトをダウンロードおよび実行する「.urlファイル」を作成する手口により当脆弱性を悪用します。
Microsoftは、2023年11月14日にCVE-2023-36025にパッチを適用しました。しかし、この脆弱性を悪用した攻撃が引き続き確認されたため、CISA(アメリカ合衆国サイバーセキュリティ・社会基盤安全保障庁)は、この脆弱性をKEV(悪用が確認されている脆弱性)リストに追加しました。
さらに、CVE-2023-36025の悪用に関連したデモンストレーションや概念実証コードがソーシャルメディア上に出現しました。脆弱性の詳細が明らかになったことで、マルウェアによる攻撃活動(ペイロードの拡散等)が活発化しています。
イニシャルアクセス
以下の解析は、マルウェア攻撃に関する調査において確認された「修正バージョン(Modified Version)」に基づきます。
Phemedrone Stealerの感染プロセスをブートストラップ(Bootstrap)するために、攻撃者は一連の不正なインターネットショートカットファイルをクラウドサービス(Discord、FileTransfer.io等)でホストします。また、これらのファイルは多くの場合、shorturl.atなどのURL短縮ツールを使用して偽装されています。そして、CVE-2023-36025を悪用する不正な.urlファイルを開くようにユーザを誘導します。
CVE-2023-36025の悪用による防御回避
CVE-2023-36025を悪用する不正な.urlファイルが実行されると、マルウェアは攻撃者が制御するサーバに接続します。そして、コントロールパネル.cplファイルをダウンロードおよび実行します。
Microsoft Windows Defender SmartScreenは、ユーザが信頼できないソースから.urlファイルを実行する前に、警告(セキュリティプロンプトの表示)を発する設定が施されています。これに対し、攻撃者はSmartScreenのプロンプト表示を回避するために 、Windowsショートカット.urlファイルを作成します。これは、不正なペイロードの展開メカニズムの一環であり、.cplファイルを使用することで実施されます。
攻撃者は、MITRE ATT&CK「T1218.002」を利用します。そして、Windowsコントロールパネルのプロセスバイナリ(control.exe)を悪用することで、.cplファイルを実行します。なお、これらのファイルは DLLファイルです。
不正な.cplファイルがWindowsコントロールパネルのプロセスバイナリを介して実行されると、rundll32.exeが呼び出され、DLLを実行します。この不正なDLLは、ローダとして機能します。そして、Windows PowerShellを呼び出すことでGitHubでホストされている次段階の攻撃(異なるPowerShellローダ「DATA3.txt」を使用)をダウンロードおよび実行します。
DATA3.txtファイルは、追加の難読化済みローダです。このローダは、静的解析による検証を困難にするために、PowerShellの文字列とDigit Manipulation技術を用いてコンテンツをマスクします。
GitHubがホストするローダの難読化を解除することは、静的解析と動的解析を組み合わせることで可能となります。難読化解除により、スクリプトが実行する一連のPowerShellコマンドに関する情報を取得することができます。このローダは、同じGitHubリポジトリにおいてホストされているZIPファイルをダウンロードします。そして、Windowsのアトリビュートユーティリティバイナリ(attrib.exe)を使用して作成された「隠しディレクトリ」に格納します。
ZIPアーカイブには以下三つのファイルが含まれます。
- WerFaultSecure.exe.:正規のWindows Fault Reportingバイナリ
- Wer.dll.:WerFaultSecure.exeが実行されるとサイドロードされる不正なバイナリ
- Secure.pdf. :RC4で暗号化された第二段階のローダ
スケジュールされたタスクとDLLサイドローディングによる永続化
重要なコンポーネントの一つであるwer.dllファイルは、暗号化された第二段階のローダを復号および実行することで永続化を実現します。なお、この永続化には、スケジュールされたタスクを作成する方法が用いられます。本マルウェアは、検出を回避し、リバースエンジニアリングを困難にするために、複数の技術(API名のハッシュ化や文字列の暗号化等)を採用しています。さらに、このDLLはVMProtectによりパック処理が施されています。
このローダは、アプリケーションのディレクトリに不正なDLLファイルを配置する技術「DLLサイドローディング」により実行されます。そして、OSに不正なファイルを読み込ませます。トレンドマイクロが調査した事例では、WerFaultSecure.exe による以下の関数の実行が確認されました。また、これがローダ実行のトリガとなることが判明しました。
wer.dllのWerpSetExitListeners
ローダは、静的解析を困難にするために「Dynamic API Resolving」技術を用いてAPIのインポートを隠蔽します。この技術により、API名の代わりにハッシュ値が格納されます。その後、ハッシュ値は実行時に動的にインポートされます。今回調査した事例において、ローダはCRC-32(Cyclic Redundancy Check 32)ハッシュアルゴリズムを使用していました。
ローダは、文字列を復号するために、「Dynamic Key Generation(動的な鍵生成)」を伴うXORベースのアルゴリズムを使用します。このアルゴリズムは、バッファ内の位置に基づいて、一意の鍵を1バイトごとに生成します。また、ここではFormula (characterIndex % <num1> + <num2>)が使用されます。そして、この鍵に1バイトごとにXORを適用することで、元の文字を読み取ることが可能となります。なお、暗号化された各文字列は、自動化による復号を難しくするために、一意の<num1>と<num2>を含んだ独自の復号関数を有します。
以下は、第一段階のローダから復号された文字列のリストです。
- "/F /CREATE /TN "Licensing2" /tr "C:\Users\Public\Libraries\Books\WerFaultSecure.exe" /sc minute /MO 90"
- \\secure.pdf
- \\wer.dll
- \\WerFaultSecure.exe
- Activeds.dll
- advapi32
- AllocADsMem
- C:\\Users\\Public\\Libraries\\Books\\secure.pdf
- C:\\Users\\Public\\Libraries\\Books\\wer.dll
- C:\\Users\\Public\\Libraries\\Books\\WerFaultSecure.exe
- C:\Windows\explorer.exe
- C:\Windows\System32\schtasks.exe
- CreateProcessW
- CryptCATCDFOpen
- kernel32.dll
- PathRemoveFileSpecW
- ReallocADsMem
- Shlwapi.dll
- SystemFunction032
- Wintrust.dll
このローダは、ディレクトリC:\Users\Public\Libraries\Booksを作成します。そして、wer.dll、secure.pdf、WerFaultSecure.exeをカレントディレクトリから、作成したディレクトリへコピーすることで永続性を維持します。その後、下記引数を付与したschtasks.exeコマンドを実行します。
"/F /CREATE /TN \"Licensing2\" /tr \"C:\\Users\\Public\\Libraries\\Books\\WerFaultSecure.exe\" /sc minute /MO 90"
なお、WerFaultSecure.exe は90分間隔で実行されます。
その後、ローダは第二段階に進みます。この段階では、ファイルsecure.pdfに「暗号化されたローダ」が組み込まれています。ローダをRC4によって復号するために、マルウェアはドキュメント化されていないadvapi32.dllのSystemFunction032関数を利用します。そして、Activeds.dllのAllocADsMemおよびReallocADsMem関数を使用してメモリを割り当てます。その後、復号されたコンテンツを再配置します。最後にVirtualProtectを呼び出し、復号されたコンテンツが配置されたメモリ領域の属性をExecutable-Read-Writeに変更します。
マルウェアはAPIコールバック関数を使用することにより、実行フローを第二段階にリダイレクトします。コールバック関数は、Windows API関数のパラメータとしての役割を果たします。
その後、特定の機能を実行するために、これらのルーチンはAPIによって呼び出されます。今回調査した事例では、マルウェアによる以下の関数の使用が確認されました。
CryptCATCDFOpen
これは、暗号化に関するWindowsのカタログファイルを処理するために使用されます。この関数は、以下の二つのパラメータを必要とします。
ファイルパスpwszFilePath
オプションコールバック関数PFN_CDF_PARSE_ERROR_CALLBACK
ローダは、二つ目のパラメータに、第二段階のシェルコードEP(Entry Point)を引き渡します。API関数が呼び出されると、コールバック関数が実行されます。その後、続けて不正なコードが実行されます。
第二段階の防御回避
攻撃者は、第二段階にローダ「Donut」を使用しました。これは、VBScript、JScript、EXEファイル、DLLファイル、.NETアセンブリをメモリ内で実行できるオープンソースのシェルコードです。Donutは、ローダに直接埋め込むことも、HTTPサーバやDNSサーバとしてステージングすることも可能です。なお、トレンドマイクロが調査した事例では、攻撃者は前者を選択しました。
Donutは、RtlCompressBufferを使用することで、入力ファイルを圧縮(aPLib、LZNT1、Xpress、Xpress Huffmanを適用)する性能を有します。また、Chaskeyブロック暗号を使用したペイロードの暗号化を実施することも可能です。ただし、ペイロードの暗号化が実施された場合には、圧縮は行われません。
最終的なペイロード実行のために、DonutにはUnmanaged CLR Hosting APIを使用してCLR(共通言語ランタイム)をロードする設定が施されています。CLRがホストプロセスに正常にロードされると、ディスポーザブルAppDomainでアセンブリを実行できるように、新しいアプリケーションドメインが作成されます。AppDomainの準備が整うと、Donutは.NETアセンブリをロードし、ペイロードのエントリポイントを呼び出します。
ペイロードの解析
認証情報へのアクセス
実行されると、マルウェアは設定を初期化します。また、Telegram APIトークン、チャットID、Email_To mutex(同期に使用)などの特定アイテムを復号します。これは、事前に定義されたソルトと暗号鍵、そして「Rijndael 対称暗号化アルゴリズム」を使用して行われます。当プロセスでは、文字列から接頭辞「CRYPTED: 」を取り除き、残りのbase64でエンコードされた文字列をバイト配列に変換します。その後、これらの配列を復号することで元の値(プレーンテキスト)を抽出します。
このマルウェアのプログラムは、MutexCheck.Check()メソッドを使用することで、本マルウェアの別のインスタンスが同時に動作することを回避します。この同時動作の回避は、ミューテックスの作成およびConfig.Email_To値(同期メカニズム)の使用により可能となります。
ミューテックスの使用により、本マルウェアの別のインスタンスがアクティブであることが示された場合、プログラムは以下を使用して直ちに動作を停止させます。
Environment.FailFast("")
なお、復号されたミューテックス値は、以下として検出されました。
5dad16bd-6884-4ab8-b182-a504b4c99bcf
このマルウェアは、特定の機密情報を窃取するために、被害者のコンピュータに存在する幅広いアプリケーションやサービスを標的とします。
- Chromiumベースのブラウザ:アプリケーション(LastPass、KeePass、NordPass、Google Authenticator、Duo Mobile、Microsoft Authenticator等)に保存されているパスワード、クッキー、オートフィル情報などのデータを窃取します。
- 暗号資産ウォレット:さまざまな暗号通貨ウォレットのアプリケーション(Armory、Atomic、Bytecoin、Coninomi、Jaxx、Electrum、Exodus、Guarda等)からファイルを抽出します。
- Discord:Discordアプリケーションから認証トークンを抽出することにより、ユーザアカウントへの不正アクセスを可能にします。
- FileGrabber:このサービスを利用することにより、ドキュメントやデスクトップなどの指定されたフォルダからユーザファイルを収集します。
- FileZilla:FileZillaからFTP接続の詳細と認証情報をキャプチャします。
- Gecko:Geckoベースのブラウザを標的としてユーザデータを抽出します。
- システム情報:幅広くシステム情報(ハードウェアのスペック、位置情報、OS情報等)を収集します。また、スクリーンショットを撮影します。
- Steam:Steamゲームプラットフォームに関連するファイルにアクセスします。
- Telegram:tdataフォルダ内の認証関連ファイルを標的として、インストールディレクトリからユーザデータを抽出します。また、サイズや命名パターンに基づいて該当するファイルを検索します。
このマルウェアは、以下のカスタムメソッドを使用して、IServiceのすべてのサブクラスを動的に検索します。
RuntimeResolver.GetInheritedClasses<IService>()
また、このメソッドはリフレクションを用いてアセンブリをスキャンします。
サービスは優先度に基づいてグループ化され、定まった順序に従って処理されます。本マルウェアは、グループ化されたリスト上の各サービスごとに新しいスレッドを作成および起動します。これにより、各サービスはRunメソッドを同時に実行することが可能となります。そして、各サービスにおいて定義されたCollectメソッドを実行します。
コマンド&コントロール
すべてのスレッドの実行が完了すると、再びサービスを介してコードを反復します。また、サービスにより収集されたデータが回収されます。そして、MemoryStreamクラスとZipStorageクラスを用いて取得した情報を圧縮します。MemoryStreamは、データを一時的に保存できる柔軟なメモリ内のバッファです。これは、ディスクI/O操作を必要とせずに、情報を迅速かつ効率的に扱うことを可能とします。その後、ZipStorageを使用して、データをMemoryStream内で直接ZIPファイル形式に圧縮します。
データを送信する前に、マルウェアはTelegram APIトークンを検証します。このプロセスでは、TelegramのgetMeエンドポイントにAPIコール(保存済みのTelegram APIトークンを使用して作成)を行う「TokenIsValidメソッド」が用いられます。受信したレスポンスが {"ok":true で始まる場合、有効なトークンであるとみなされます。それに対して、プロセスにおいて何らかの例外が発生した場合、該当する事象は記録されます。そして、メソッドはトークンが有効でないことを示す「false」を返します。トークンが有効でない場合、直ちに以下が が呼び出されプロセスが終了します。
Environment.Exit(0)
Telegram APIトークンの検証を経て、マルウェアはさまざまなシステムや統計に関する情報を攻撃者に送信します。これは、global::Telegram.Telegramクラス内のSendMessageメソッドによって実行されます。
Collectメソッドは、ジオロケーションデータ(IP、国、都市、郵便番号等)、ハードウェア情報(ユーザ名、マシン名、OS、ハードウェアID、GPU、CPU、RAM等)、Webブラウザのデータ(パスワード、クッキー、クレジットカード、オートフィル、拡張機能、ウォレット、ファイル)、インストールされているウイルス対策製品の詳細など広範囲にわたってシステムや統計に関する情報を収集します。
図19は、Phemedrone Stealerが作成するサマリーレポートの一例です。ネットワークトラフィックを介したさまざまな情報の送信を表しています。このレポートには、侵害されたシステムとユーザデータに関連した重要な情報(ジオロケーション、ハードウェア仕様、Webデータの統計、システムのセキュリティ機能等)が含まれています。
次に、ZIP圧縮されたストリーム(取得したデータの完全バージョンを含む)を送信します。これは、Telegram APIと通信するためにHTTP POSTリクエストを使用するSendZipメソッドを介して行われます。圧縮されたファイルは、当リクエストにより「Document」として送信されます。
SendZipメソッドとMakeFormRequest2メソッドは、 multipart/form-data形式のリクエストを作成します。これらのメソッドにより、適切なヘッダーの設定や正確なファイルデータのストリーミングが行われます。当リクエストは、ボットトークンとチャットID を使用して Telegram sendDocument API エンドポイントに送信されます。確実にファイルをアップロードするために、このプロセスにはエラー処理と再試行が含まれます。
図21におけるスニペットは、Telegramネットワークトラフィックを介した圧縮データ送信の例です。
まとめ
CVE-2023-36025にはパッチが適用されています。しかし、攻撃者は依然としてこの脆弱性を悪用しています。そして、Windows Defender SmartScreen による保護を回避する手口により、ランサムウェアやスティーラーなどのマルウェアをユーザのシステムに感染させる方法を模索しています。
常に進化を続けている情報窃取型マルウェア(Phemedrone Stealerを含む)は、ソフトウェアにおける脆弱性を狙った「エクスプロイト(脆弱性攻撃ツール)」を追加することで感染チェーンを強化してきました。本稿で解説した事例は、オープンソースのマルウェアとエクスプロイトの概念実証の関係性を探るものです。概念実証の公開と感染チェーンに組み込まれたエクスプロイトとの間には強い関連性が認められます。
組織や企業は、Microsoft Windows Defender SmartScreen のバイパス(CVE-2023-36025)を悪用した脅威に晒されないために、Microsoft Windowsを必ずアップデートすることが大切です。概念実証におけるエクスプロイトコードがWeb上に存在するため、最新のパッチが適用されたバージョンにアップデートしていない場合には、セキュリティリスクが高まります。
危険なサイバー脅威から重要なデータを保護するために、脆弱性を不正利用する既知および未知の脅威からシステムを保護するTrend Vision Oneの導入をご検討ください。Trend Vision Oneは、不正なコンテンツを検出、スキャン、阻止できるAIを活用した最先端の多層防御と包括的なセキュリティソリューションを提供します。
また、包括的なセキュリティソリューションTrend Micro Managed XDRの導入により可能となる最先端の多層防御アプローチの採用も是非ご検討ください。24時間365日体制でサイバーセキュリティの専門家がサイバー攻撃の検知から対処まで一貫して支援いたします。
参考記事「CVE-2023-36025 Exploited for Defense Evasion in Phemedrone Stealer Campaign」
By: Peter Girnus, Aliakbar Zahravi, Simon Zuckerbraun
翻訳:新井 智士(Core Technology Marketing, Trend Micro™ Research)