macOSを標的とするCloudMensisスパイウェアの詳細

CloudMensisは今回初めて特定されたスパイウェアです。クラウドストレージをC&Cチャネルとして使用し、感染させたMacからドキュメント、キーボードへの入力、画面キャプチャを取得します。

Marc-Etienne M.Léveillé 26 July 2022

2022年4月にESETの研究者は、侵害したMacユーザーをスパイし、主にパブリッククラウドストレージサービスを使用してマルウェアのオペレータと通信するmacOSバックドアを初めて発見しました。ESETは、このマルウェアを解析してCloudMensisと命名しました。CloudMensisは、ドキュメント、キーボードへの入力、および画面キャプチャを外部に送信しており、標的となるユーザーのMacから情報を収集することがこのマルウェアの目的であることは明白です。
Appleは最近、自社製品のユーザーを攻撃するスパイウェアが存在することを認めており、iOS、iPadOS、macOSにおいて、コード実行やマルウェアの展開に頻繁に悪用されてきた機能を無効化する「ロックダウンモード」を発表しました。CloudMensisは、技術的に最高レベルのマルウェアではありませんが、このマルウェアによる攻撃を防止するために、新しく追加されたロックダウンモードを有効にしたいと思われるユーザーもいるでしょう。攻撃のエントリーポイントを無効にすることは、ユーザーエクスペリエンスの低下というマイナス面があったとしても、攻撃対象領域を減少させる合理的な方法になるはずです。
このブログでは、CloudMensisの各種のコンポーネントとその機能について説明します。

CloudMensisの概要

CloudMensisはObjective-Cで開発されたmacOSを標的とするマルウェアです。ESETが分析した検体は、IntelとAppleの両方のシリコンアーキテクチャで動作するようにコンパイルされています。CloudMensisによって標的となったユーザーのセキュリティが最初に侵害された方法はまだ分かっていませんが、コード実行の権限や管理者権限が付与されると、2段階のプロセス(図 1を参照)がその後で実行されます。第1段階のプロセスでは、より高機能なマルウェアがダウンロードされ、第2段階のプロセスでこのマルウェアが実行されます。このマルウェアで注意すべき点は、第1段階のマルウェアがクラウドストレージプロバイダから第2段階のマルウェアを取得していることです。このマルウェアは、一般にアクセス可能なリンクを使用しておらず、ドライブからMyExecuteファイルをダウンロードするためのアクセストークンを利用します。今回分析した検体は、第2段階のマルウェアを保存して配信するためにpCloudを使用していました。

両方のコンポーネントに残されている攻撃の痕跡(アーティファクト)から、このマルウェアの作成者はこれらのコンポーネントをexecuteClientと呼んでおり、前者はダウンローダー、後者はスパイエージェントであることがわかりました。これらの名前は、オブジェクトの絶対パスと専用の署名の両方で見つけることができます。

 

図2と3は、恐らく、このマルウェアコンポーネントの内部名を示しています。このプロジェクトはBaDと命名されており、LeonWorkというサブディレクトリに保存されています。さらに、v29は、この検体のバージョンが、29または2.9であることを示しています。このバージョン番号は、構成ファイルの名前にも含まれています。

ダウンローダコンポーネント

第1段階のマルウェアは、第2段階のマルウェアをダウンロードおよびインストールして、システム全体のデーモンとして動作させます。図4に示すように、2つのファイルがディスクに書き込まれます。

  1. /Library/WebServer/share/httpd/manual/WindowServer:pCloudドライブから取得した第2段階の実行ファイルMach-O
  2. /Library/LaunchDaemons/.com.apple.WindowServer.plist:マルウェアをシステム全体のデーモンとして常駐させるプロパティリストファイル。

両方のディレクトリで操作できるのはrootユーザーのみであるため、この段階で攻撃者は管理者権限をすでに持っている必要があります。

Safariエクスプロイトを使用した後のクリーンアップ

第1段階のコンポーネントには、removeRegistrationというメソッドが含まれています。このメソッドは、Safariのサンドボックスを回避するエクスプロイトが成功した後に、クリーンアップする目的で存在していると考えられます。EFIシステムパーティションからrootというファイルを削除し(図5)、XPCメッセージをspeechsynthesisdに送信し(図6)、Safariキャッシュディレクトリからファイルを削除しています。これらの一見無関係に見える操作を実行していたことから、このメソッドの目的を最初は特定できませんでした。ESETは当初、removeRegistrationの目的はCloudMensisの旧バージョンをアンインストールすることだと考えていましたが、詳細な調査の結果、これらのファイルは4つの脆弱性を悪用してSafariからサンドボックス回避や権限昇格のエクスプロイトを起動するために使用されていたことがわかりました。これらの脆弱性は、2017年にNiklas Baumstark氏とSamuel Groß氏によって発見されており、詳細に分析されて文書化されています。Appleは、これらの4つの脆弱性のパッチを同じ年に公開しているため、CloudMensisをインストールするためにこの配信方法は使われていないと考えられます。このコードが実行されなくなったのは、パッチが公開されたことが理由でしょう。また、これはCloudMensisが以前から存在していた可能性を示唆しています。

スパイエージェントコンポーネント

CloudMensisの第2段階では、より大規模なコンポーネントが実行されます。このコンポーネントには侵害したMacから情報を収集するための多くの機能が詰め込まれています。攻撃者はこの段階で、ドキュメント、スクリーンショット、メールの添付ファイル、他の機密データを取得しようとします。
CloudMensisは、オペレータからコマンドを受信しファイルを外部に流出させる両方の目的でクラウドストレージを使用しています。pCloud、Yandex Disk、Dropboxの3つのストレージプロバイダが使用されています。解析した検体の構成には、pCloudとYandex Diskの認証トークンが含まれていました。

構成

CloudMensisのスパイエージェントコンポーネントが最初に実行する操作の1つは、構成のロードです。これは、14,972バイト長のバイナリ構造になっており、ディスクの~/Library/Preferences/com.apple.iTunesInfo29.plistに保存され、生成されたキーとの単純なXORを使用して暗号化されます(「独自の暗号化」セクションを参照)。 このファイルが存在しない場合、この構成はマルウェアにハードコードされているデフォルト値を使用して設定されます。さらに、以下の場所にあるCloudMensisの構成の恐らく旧バージョンから値をインポートする場合もあります。

  • ~/Library/Preferences/com.apple.iTunesInfo28.plist
  • ~/Library/Preferences/com.apple.iTunesInfo.plist

この構成には、以下の内容が含まれます。

  • 使用するクラウドストレージプロバイダと認証トークン
  • ランダムに生成されるボットID
  • Macに関する情報
  • CloudMensisが使用する各種ディレクトリへのパス
  • マルウェアのオペレータが重視するファイル拡張子

分析した検体で見つかったファイル拡張子のデフォルトリスト(図7)から、このオペレータは標的ユーザーのMacからドキュメント、スプレッドシート、音声録音ファイル、写真、メールメッセージに関心があることがわかります。このオペレータが収集していた特異なファイル形式として、音声圧縮用に特別に設計された音声コーデックであるAdaptive Multi-Rate(拡張子 .amr.3ga)を使用した音声録音も含まれていました。このリストにあるファイル拡張子には、韓国語圏のユーザーに人気のあるワードプロセッサであるHangul Office(現Hancom Office)のドキュメントである.hwp.hwpxファイルも含まれていました。

独自の暗号化

CloudMensisは、その作成者がFlowEncryptと呼んでいる独自の暗号化関数を実装しています。図8は、分解された関数を示しています。1バイトをシードとして受け取り、直近で生成されたバイトに対して一連の演算を実行して残りの鍵を生成します。入力はこのキーストリームを使用してXORされます。最終的に現在のバイトの値は、その前の値の1つと同じになるため、キーストリームはループします。つまり、この暗号化は一見複雑なように見えますが、単に静的な鍵を使用したXORです(ループ処理を開始する前、キーストリームの最初の数バイトは除きます)。

macOSに搭載されているセキュリティフレームワーク(TCC)の回避

2018年にリリースされたmacOS Mojave(10.14)以降、スクリーンキャプチャ、カメラ、マイク、キーボードイベントなど一部の機密情報へのアクセスは、TCC(Transparency、Consent、Control)というセキュリティフレームワークで保護されるようになりました。アプリケーションが特定の機能にアクセスしようとすると、macOSはアプリケーションの要求が正当かどうかをユーザーに確認し、ユーザーはそのアクセスを許可または拒否できます。最終的に、TCCのルールは、Macのデータベースに保存されます。このデータベースはSIP(システム整合性保護)によって保護されており、TCCデーモンだけが変更できます。
CloudMensisは、2つの手法によってTCCを回避し(つまり、ユーザーによる確認を回避します)、画面にアクセスできるようになり、リムーバブルストレージをスキャンして目的のドキュメントを見つけて、キーボードイベントを記録します。SIPが無効になると、TCCデータベース(TCC.db)は改ざんから保護されなくなります。このケースでは、CloudMensisは、機密情報を使用する前に自身に権限を付与するためのエントリを追加します。SIPが有効で、Macが10.15.6より前のバージョンのmacOS Catalinaを実行している場合、CloudMensisはTCCデーモン(tccd)の脆弱性を攻撃し、CloudMensisが書き込めるデータベースをロードします。この脆弱性は、CVE-2020-9934として知られており、2020年に Matt Shockley氏によって詳細が報告されています。
図9に示すように、このエクスプロイトは最初に、~/Library/Application Support/com.apple.spotlight/Library/Application Support/com.apple.TCC/に新しいデータベースを作成します(すでに作成されている場合を除く)。

次に、launchctl setenvを使用してHOME環境変数を~/Library/Application Support/com.apple.spotlightに設定し、TCCデーモンが正規のデータベースではなく、攻撃者が準備したデータベースをロードするように設定します。図10は、NSTaskを使用してこの処理を実行する方法を示しています。

C&Cサーバーとの通信

CloudMensisの構成には、オペレータと双方向で通信するための、いくつかのクラウドサービスプロバイダへの認証トークンが含まれます。構成の各エントリは、異なる目的で使用されます。これらのエントリは、CloudMensisがサポートするクラウドストレージプロバイダに対応しています。分析した検体は、Dropbox、pCloud、Yandex Diskに対応していました。
最初のストアであるCloudCmdは、ボットに送信するコマンドとそのコマンドの実行結果を保持するために使用されています。このストアの名前は、グローバル変数の名前から判明しています。もう1つのストアであるCloudDataは、侵害したMacから情報を流出させるために使用されています。3つ目のストアであるCloudShellは、シェルコマンドの出力を保存するために使用されます。この最後のストアはCloudCmdと同じ設定を使用します。
リモートファイルを取得しようとする前に、CloudMensisはまず、感染したMacに関するレポートをRSAで暗号化してCloudCmd/January/にアップロードします。このレポートには、ボットIDや、流出したデータを復号するためのパスワードなどの共有シークレットが含まれます。
次に、CloudMensisはコマンドを受信するために、CloudCmdストレージの/Febrary/<bot_id>/May/ディレクトリ下にあるファイルを取得します。各ファイルは、ダウンロードされ復号化された後に、AnalizeCMDFileNameメソッドに送られます。このマルウェアの作成者は、「February」と「Analyze」のスペルを間違っていることに注目してください。
CloudDataのストレージは、オペレータからサイズの大きいファイルのアップロードを要求された場合に使用されます。アップロードの前に、ほとんどのファイルはパスワードで保護されたZIPアーカイブに追加されます。パスワードは、CloudMensisの初回起動時に生成され、構成ファイルに保存され、レポートが最初に作成される時にオペレータに転送されます。

コマンド

ESETが解析したCloudMensisの検体には、39個のコマンドが実装されていました。これらのコマンドは、57、78、87、90~92を除く49~93の番号で識別されます。いくつかのコマンドは、引数を指定して使用する必要があります。オペレータは、これらのコマンドを使用して次の操作を実行できます。

  • クラウドストレージプロバイダと認証トークン、オペレータが重視するファイル拡張子、クラウドストレージのポーリング頻度などのCloudMensisの設定値の変更
  • 実行中のプロセスの一覧表示
  • 画面キャプチャの取得の開始
  • メールのメッセージと添付ファイルの一覧表示
  • リムーバブルストレージにあるファイルの一覧表示
  • シェルコマンドの実行と、クラウドストレージへの出力のアップロード
  • 任意のファイルのダウンロードと実行

図11はID 84のコマンドを示しています。このコマンドはlaunchdによってロードされたすべてのジョブを一覧表示し、その結果を引数の値に応じて今すぐまたは後でアップロードします。

図12は、さらに複雑な例を示しています。ID 60のコマンドは、画面キャプチャを開始するために使用されます。第1引数が「1」の場合、第2引数はstartScreenCaptureによってダウンロード、保存、実行されるファイルへのURLになります。この外部にある実行ファイルは、FaceTimeのサンドボックスコンテナのLibraryフォルダにwindowserverとして保存されます。第1引数が「0」の場合、以前にドロップされている既存のファイルを起動します。この画面キャプチャエージェントの検体は見つかっていません。

launchdが新しいプロセスを開始するために使用するcom.apple.windowServer.plistのようなプロパティリストファイルは永続的ではなく、launchdがロードした後にディスクから削除されます。

クラウドストレージのメタデータ

CloudMensisが使用するクラウドストレージのメタデータから、運用に関する重要な情報が見えてきます。図13は、2022年4月22日時点における、CloudMensisが最初にレポートを送信し、ボットにコマンドを送信するために使用しているストレージのツリービューを示しています。

このメタデータから、このマルウェアがどのように運用されてきたのかを時系列で理解できます。最初に、pCloudのアカウントは2022年1月19日に作成されました。4月22日のディレクトリ一覧では、51個のユニークなボットIDが、コマンドを受け取るためにクラウドストレージでサブディレクトリを作成していることがわかります。これらのディレクトリは、マルウェアが最初に起動したときに作成されるため、 図14に表示されているように、この作成日から最初に侵害された日付を特定できます。

このチャートは、最初の侵害が2月4日であり、2022年3月上旬に侵害が急増していることを示しています。侵害の最後のピークは、CloudMensisがVirusTotalにアップロードされ、CloudMensisを実行したサンドボックスによって引き起こされた可能性があります。

結論

CloudMensisは、Macユーザーにとって脅威ですが、配信が非常に限定されていることから、標的型攻撃の一環として利用されている可能性があります。ESETのこれまでの調査では、このマルウェアファミリーのオペレータは、攻撃者が重視している標的ユーザーに絞り込んでCloudMensisを展開しています。このマルウェアのオペレータは、macOSに実装されているセキュリティ対策を回避するためにいくつかの脆弱性を利用しており、スパイ活動を成功させるために大きな労力を費やしていることを示しています。今回の調査では、このグループが利用している未公開の脆弱性(ゼロデイ)は発見されていません。このため、セキュリティ対策の回避を防ぐために、Macで公開されているすべてのパッチを適用して最新の状態にすることが推奨されます。
ESETは、CloudMensisが最初にどのように配信され、誰が標的となっているのかをまだ把握していません。コードの全体的な品質があまり高くなく難読化もされていないことから、このマルウェアの作成者はMacの開発にそれほど精通していない可能性があり、マルウェア自体もそれほど高度ではありません。しかし、強力なスパイツールとしてCloudMensisは開発されており、標的を攻撃して機密情報を窃取するために、多くのリソースが投入されています。

セキュリティ侵害の痕跡 (IOC)

ファイル

SHA-1ファイル名説明ESETの検出名
D7BF702F56CA53140F4F03B590E9AFCBC83809DBmdworker3ダウンローダー(execute)OSX/CloudMensis.A
0AA94D8DF1840D734F25426926E529588502BC08WindowServer、myexeスパイエージェント(Client)OSX/CloudMensis.A
C3E48C2A2D43C752121E55B909FC705FE4FDAEF6WindowServer、MyExecuteスパイエージェント(Client)OSX/CloudMensis.A

公開鍵

使用されるパス

  • /Library/WebServer/share/httpd/manual/WindowServer
  • /Library/LaunchDaemons/.com.apple.WindowServer.plist
  • ~/Library/Containers/com.apple.FaceTime/Data/Library/windowserver
  • ~/Library/Containers/com.apple.Notes/Data/Library/.CFUserTextDecoding
  • ~/Library/Containers/com.apple.languageassetd/loginwindow
  • ~/Library/Application Support/com.apple.spotlight/Resources_V3/.CrashRep

MITREのATT&CKの手法

この表は、MITRE ATT&CKフレームワークのバージョン11を使用して作成されています。

手法ID名前説明
常駐化T1543.004システムプロセスを作成または修正します。デーモンの起動CloudMensisのダウンローダーは、第2段階のマルウェアをシステム全体のデーモンとしてインストールします。
防衛機能の回避T1553信頼性コントロールの破壊CloudMensisは、可能な場合、TCCを回避しようとします。
収集T1560.002収集したデータのアーカイブ:ライブラリ経由のアーカイブCloudMensisはSSZipArchiveを使用して、パスワードで保護されたZIPアーカイブを作成し、データを流出させます。
T1056.001入力情報の取得:キーロギングCloudMensisはキーボード入力をキャプチャし、外部に流出させることができます。
T1113画面キャプチャCloudMensisは、画面のキャプチャを取得して、外部に流出させることができます。
T1005ローカルシステムのデータCloudMensisは、特定の拡張子のファイルを探します。
T1025リムーバブルメディアのデータCloudMensisは、リムーバブルメディアに接続して、重要なファイルを検索できます。
T1114.001メールの収集:ローカルメールの収集CloudMensisは、重要なメールメッセージや添付ファイルを検索します。
C&C(コマンド&コントロール)T1573.002暗号化されたチャンネル:非対称暗号方式CloudMensisが最初に送信するレポートは、RSA-2048の公開鍵で暗号化されています。
T1573.001暗号化されたチャンネル:対称暗号方式CloudMensisは、パスワードで保護されたZIPアーカイブを使用して、外部に送信するファイルを暗号化します。
T1102.002Webサービス:双方向通信CloudMensisはC&Cとの通信にDropbox、pCloud、Yandex Driveを使用します。
情報の外部への送信T1567.002Webサービスを介したデータの外部への流出:クラウドストレージへのデータの流出CloudMensisは、Dropbox、pCloud、Yandex Driveにファイルを流出させます。