Jamf Threat Labsは、Apple自身の信頼メカニズムを悪用することでmacOS向けマルウェア配布の水準を大きく引き上げる、新たなMacSync Stealerキャンペーンを発見しました。
最新の亜種は、完全にコード署名されノータライズされたSwiftアプリケーションとして配布され、正規ソフトウェアを装いながら、バックグラウンドでステルス性の高い多段階の情報窃取ルーチンを実行します。
社内のYARAルールによる検知結果をレビューする中で、Jamfの研究者は、従来のMacSync Stealerサンプルで見られた一般的な実行チェーンに一致しない、異例の署名済み・ノータライズ済みスティーラーを特定しました。
ペイロード自体は既知のMacSync Stealerスクリプトに非常によく似ていましたが、配布メカニズムは完全に刷新されていました。
ドラッグ&ドロップでターミナルに実行させるスクリプトや、ClickFix風の手順でユーザーにbase64エンコードされたコマンドをターミナルへ貼り付けさせる手口に大きく依存していた従来の亜種とは異なり、このキャンペーンは、より欺瞞的で、ユーザーの手をほとんど煩わせないアプローチを採用しています。
実行ファイルは署名済みでこの手順を必要としないにもかかわらず、このサンプルにはおなじみの「右クリックで開く」指示が依然として含まれています。

マルウェアはzk-call-messenger-installer-3.9.2-lts.dmgという名前のディスクイメージとして配布され、https://zkcall.net/download でホストされています。内部にはSwiftベースのアプリケーションが含まれており、コード署名とノータライズの両方が施されているため、インストール時の摩擦が減り、明示的にターミナルを使用する必要がなくなっています。
MacSync Stealer脅威の概要
Jamfは、Mach‑OバイナリがDeveloper Team ID GNJLS3UYZ4で署名されたユニバーサルビルドであり、分析時点でAppleによりノータライズされていることを確認しました。
コードディレクトリのハッシュをAppleの失効リストと照合したところ、当初は失効が確認されず、アプリは標準的なGatekeeperチェックを通過する状態でした。Jamfが悪用を報告した後になって初めて、Appleは関連する証明書を失効させました。
ディスクイメージ自体は25.5MBと非常に大きく、これはアプリ内に同梱された一連のデコイファイルによってサイズが水増しされています。これにはLibreOfficeに関連する無害に見えるPDFなどが含まれており、正当性を装い、悪意あるコンポーネントから注意を逸らす意図があると考えられます。

初期の検知はまばらでした。VirusTotal にアップロードされたサンプルは、最少で1、最大でも13のアンチウイルスエンジンにしか検知されず、多くの場合「coins」または「ooiid」マルウェアファミリーに紐づくダウンローダーとして一般的に分類されていました。
この低い検知カバレッジは、コード署名とノータライズが、キャンペーン初期段階においてマルウェアが従来型防御をすり抜けるのにいかに有効であるかを浮き彫りにしています。
JamfのYARAベースの脅威防止は、/tmp/runnerから実行される難読化されたbashスクリプトを検知したことで、最終的にこの脅威を露見させました。
さらなる調査により、このスクリプトが、マウントされたディスクイメージから直接実行されている署名済みアプリケーションに関連付けられ、一見信頼できるアプリがドロッパーとして機能しているという疑いが裏付けられました。
デコードすると、base64ペイロードは既知のMacSync Stealerの挙動と一致し、focusgroovy[.]comドメインの再利用や、過去のキャンペーンで使用されたものと同一のdaemon_function()が含まれていました。
runtimectlという名前の同梱ユニバーサルMach‑Oバイナリを詳しく調べたところ、Swiftで書かれた高度な第2段階ローダーが明らかになりました。
_main関数は~/Library/Logs/UserSyncWorker.log配下にログを設定し、~/Library/Application Support/UserSyncWorker/に作業ディレクトリを作成します。そこでは、実行タイミングと更新状態を追跡するためにlast_upやgateといったファイルを保持します。
インターネット接続性のチェックを行い、実行間隔をおよそ3600秒以上に制限しており、注意を引いたりサンドボックス解析を誘発したりし得る繰り返し実行を避ける狙いがあるとみられます。
中核となる悪意あるロジックはrunInstaller()にあり、レート制限の実装、接続性の再検証、/tmp内の過去の痕跡のクリーンアップを行ったうえで、/bin/zsh -lcを用いた細工済みHTTPリクエストを発行し、第2段階ペイロードを取得します。
応答は/tmp/runnerに書き込まれ、関連ヘッダーは/tmp/runner.headersに保存されます。
マルウェアがmacOSシステムに感染する仕組み
興味深いことに、curlの呼び出しは従来のMacSync Stealerスクリプトから逸脱しています。典型的な-fsSLフラグの組み合わせではなく、新しいサンプルではフラグを-fLと-sSに分け、–noproxyのようなオプションに加え、動的に埋め込まれる変数を導入しています。

これらの調整は、信頼性を高め、特定のネットワーク制御を回避し、シグネチャベースの検知を妨げることを狙ったものとみられます。
ダウンロードしたスクリプトを実行する前に、マルウェアはcom.apple.quarantine属性を削除し、POSIXパーミッションを750に設定して実行可能にします。
その後、/usr/bin/file –mime-type -bを用いてファイルがシェルスクリプトであることを検証し、「Paul Falstad’s zsh script text executable, ASCII text」といった文字列を含むzshスクリプトのパターンに一致するかを確認します。
Jamfは、Odysseyインフォスティーラーも同様の配布戦略を採用し始めていると指摘しており、ノータライズ済みアプリをmacOSマルウェアの運搬体として活用する方向への、より広範なシフトを示唆しています。
spctl -a -vによるGatekeeperチェックも実行され、悪意ある挙動を想定されるシステムセキュリティのフローにさらに紛れ込ませています。実行後、/tmp/runnerは削除され、クールダウンを強制するためにlast_updateタイムスタンプが更新されます。
ペイロードが実行されると、被害者にはおなじみのosascriptプロンプトが表示され、その後、認証情報やデータの窃取など、MacSync Stealerの活動と一致する挙動が続きます。
この進化により、攻撃者はより正当な存在に見せかけ、ユーザー、セキュリティ製品、プラットフォーム制御による初期段階の検知を回避できるようになります。
セキュリティチームには、コード署名とノータライズだけを信頼の指標として頼らないよう強く求められています。
Jamfは、Mac環境において脅威防止と高度な脅威制御をブロックモードで有効化し、機密データが持ち出される前に、ますますステルス化するインフォスティーラーキャンペーンを検知・阻止することを推奨しています。
翻訳元: https://gbhackers.com/macsync-stealer-malware/