CloudSyncD、不可視のUnicode文字でフィッシングしたMacのパスワードを「隠したまま」保存

新たに確認されたmacOS向けバックドア「CloudSyncD」は、Zoomのインストーラーを装い、不可視のUnicode文字を使って、フィッシングで盗んだ被害者のパスワードを一見無害な設定ファイルの中に隠します。

このマルウェアは、VirusTotalの定期監視中に発見されました。「Zoom」という名前のディスクイメージで配布される偽のZoomクライアントに埋め込まれていました。

ディスクイメージの見た目は、macOSで一般的なインストール手順を模倣しています。アプリケーションのアイコンと、Applicationsフォルダーのエイリアスが並べて配置されています。

ところがディスクイメージの背景には、macOSのGatekeeperを手動で回避する手順が表示されています。「システム設定」から「プライバシーとセキュリティ」を開き、「このまま開く」をクリックして、管理者パスワードを入力するよう指示するものです。

この誘導は攻撃の成否を左右します。悪意あるZoomバンドルにはアドホック署名しかないためです。

通常であれば、Gatekeeperはこのようなアプリケーションをブロックします。しかしCloudSyncDは、Appleのセキュリティ警告を感染チェーンの一部に組み込んでいます。

第1段階のバイナリ(Zoom.app/Contents/MacOS/app_installer)が、パスワードのフィッシング、検証、ペイロードの実行、痕跡の消去を担当します。

Image

CloudSyncDは、パスワードをすぐに窃取して外部へ送信するわけではありません。まず、macOSのディレクトリサービス用コマンドラインユーティリティであるdsclを使い、ローカルで検証します。

偽の認証プロンプトは、ローカルアカウントと一致するパスワードが入力されるまで繰り返し表示されます。入力が一致すると、次の段階に進みながら「Downloading Zoom…」という偽の進捗ダイアログを表示します。

最も特異なのは、窃取した認証情報の保存方法です。CloudSyncDは~/.config/zoom/の下にdata.jsonというファイルを作成します。テーマ、言語、通知、分析といった項目を含む、ごく普通のアプリケーション設定に見せかけています。

インシデント対応計画

パスワードはbase64でエンコードされ、長いcache値の中に埋め込まれます。その前後には、ランダムに生成された32~64文字のダミー文字が付加されます。

Jamfの研究者によると、このキャンペーンは9月15日の発見から2日以内に、開発段階のビルドから、稼働中のコマンド&コントロール(C2)インフラを使った展開へ移行したとみられます。

CloudSyncDバックドア

このマルウェアは、画面上に見えるversionフィールドの末尾にゼロ幅Unicode文字を付加し、本物の認証情報の場所を隠します。

認証情報の入力画面は、AuthDialogというObjective-Cクラスが表示します。

具体的には、画面に描画されないU+200B(ZERO WIDTH SPACE)とU+200C(ZERO WIDTH NON-JOINER)を使い、埋め込まれたbase64文字列のオフセットと長さをエンコードしています。

解析したサンプルでは、48個の不可視文字をデコードすると、オフセットは64、長さは8でした。インプラントはこれを手がかりにパスワードを見つけ出してデコードします。ダミー文字の長さは実行のたびに変わるため、パスワードの位置は固定されません。

CloudSyncDは、従来型の情報窃取マルウェアとは動作が異なります。研究者は、ブラウザーの認証情報、キーチェーンの内容、暗号資産ウォレットを収集する機能が組み込まれていないことを確認しました。

代わりに、フィッシングで入手したパスワードを使い、埋め込まれた第2段階のユニバーサルMach-Oペイロードをsudo付きで起動します。これにより攻撃者は、IntelとApple siliconの両方のMacで特権アクセスを得ます。

ドロッパーはまず、/dev/fd経由のファイルレス実行を試みます。ペイロードをディスク上に残さないためとみられます。

この方法はテストでは権限エラーで失敗しました。システム整合性保護(SIP)などのmacOSの保護機能と矛盾しない挙動です。

するとマルウェアはmkstempで一時的なペイロードを作成する方法に切り替え、検証済みの被害者のパスワードを使って起動します。

第2段階は、cloudsyncdというバックグラウンド同期デーモンを装うよう設定されています。想定される作業ディレクトリは~/.local/share/cloudsync/で、ログは~/.local/share/cloudsync/.config/logs/sync.errに保存されます。

sysctlとioregを使って感染ホストの情報を収集します。収集するのは、ハードウェアUUID、プロセッサーの詳細、メモリ、OS情報、ホスト名、ユーザー名、MACアドレス、生のI/Oレジストリデータです。その後、C2サーバーへビーコンを送信します。

インシデント対応計画

稼働中のCloudSyncDのサンプルは、hxxps://orchid-led[.]com/macos/jquery[.]jsとhxxps://bjzhishang[.]com/macos/jquery[.]jsと通信していることが確認されています。

この共通のパスはjQueryのリソースになりすましており、C2通信を通常のWeb活動に紛れ込ませる効果があります。

インプラントは8~16秒ごとにチェックインします。実行可能なMach-Oファイルやgzip圧縮されたtarアーカイブを含む暗号化タスクを受信できます。観測される挙動は、シェルコマンドの実行よりも、ペイロードの配信に近いものです。

CloudSyncDは、macOSマルウェアの変化を象徴しています。ネイティブコード、メモリ内実行の試み、保護された文字列、そして単純に見えて巧妙な認証情報フィッシングへと移行する流れが続いています。

最も効果的な機能は、高度なエクスプロイトではありません。ユーザーを説得してGatekeeperを回避させ、正規のパスワードを入力させることです。

SOCのアラート調査を1件あたり21分短縮。即座にIOCのコンテキストを得て、迅速な対応を実現するSOCへ: TI LookupをSOCに導入

翻訳元: https://gbhackers.com/cloudsyncd-backdoor/

本記事は gbhackers.com の記事を翻訳・要約したものです。