JOKERSPYの公開に関する初期研究 — Elastic Security Labs

JOKERSPYを暴露する初期研究

2023年6月に発見されたJOKERSPYの概要は、日本にある暗号通貨取引所を悪用するためにカスタムおよびオープンソースのmacOSツールを展開していました。

15分で読めます攻撃パターンキャンペーン
初期研究がJOKERSPYを暴露する

重要なポイント

  • これは、アクティブな侵入の最初の通知であり、その後に詳細が追加されます
  • REF9134は、偵察とコマンド&コントロールのためのカスタムツールとオープンソースツールを活用しています
  • この活動のターゲットには、日本の暗号通貨取引所が含まれます

前文

この調査記事では、最近発見された「REF9134」と呼ばれる、 sh.py バックドアを使用してmacOS Swiftbelt列挙ツールを展開する侵入について調査します。 sh.pyxcc は最近、Bitdefenderによって JOKERSPY と呼ばれています。

具体的には、この調査は以下をカバーしています。

  • Elastic Security Labsが攻撃者グループからの偵察を特定した方法
  • xccを使用して検出を回避する敵対者の手順、sh.py バックドアのインストール、および列挙ツールの展開

この攻撃の詳細については、後日公開される可能性があります。

Overview

2023年5月下旬、日本の著名な暗号通貨取引所に既存のアクセス権を持つ敵対者が、バイナリ( xcc )の実行を検出する診断エンドポイントアラートの1つをトリップさせました。 xcc は Apple によって信頼されておらず、敵対者はネイティブの macOS ツール codesign を使用して自己署名しています。 この検出自体は必ずしも無害なものではありませんでしたが、これらの最初のアラートの後に観察された業界の垂直方向と追加の活動が私たちの目を引き、より注意を払うようになりました。

実行後 xcc 、脅威アクターが独自のTCCデータベースを作成し、既存のデータベースを置き換えようとすることで、TCCの権限を回避しようとしていることが確認されました。 6月1日には、新しいPythonベースのツールが xcc と同じディレクトリから実行されているのが確認され、Swiftbeltとして知られるオープンソースのmacOSエクスプロイト後列挙ツールを実行するために利用されました。

分析

REF9134は、ビットコイン、イーサリアム、およびその他の一般的な暗号通貨を取引するための資産交換に焦点を当てた、日本を拠点とする大規模な暗号通貨サービスプロバイダーへの侵入です。

xcc バイナリ

xcc ( d895075057e491b34b0f8c0392b44e43ade425d19eaaacea6ef8c5c9bd3487d8 ) は、Swift で記述された自己署名マルチアーキテクチャバイナリで、現在のシステム権限を評価するために使用されます。 Elastic Security Labsが観測したバージョンは、 XProtectCheck-55554944f74096a836b73310bd55d97d1dff5cd4 として署名されており、 一般に知られている ペイロードや信頼できないペイロードに似たコードシグネチャがあります。

同じ識別子で署名された他のバイナリを特定するために、XProtectCheck-55554944f74096a836b73310bd55d97d1dff5cd4を16進数に変換し、VirusTotalを検索して追加のサンプル(content:{5850726f74656374436865636b2d35353535343934346637343039366138333662373333313062643535643937643164666635636434})を特定し 3 。

それぞれに同じコア機能が含まれていましたが、構造的な違いがあります。 これらの不一致は、 xcc のこれらの亜種が、実行を妨害するエンドポイント機能を回避するために開発されたことを示している可能性があります。

xccの作成後まもなく、研究者は、脅威アクターが既存のTCCデータベースである/Library/Application Support/com.apple.TCC/TCC.db/Users/Shared/tcc.dbをコピーすることを確認しました。これにより、脅威はシステムユーザーに表示されるTCCプロンプトを回避しながら、同時に広範なファイル書き込み権限を持つディレクトリを悪用する可能性があります。

XCode アーティファクト

このバイナリの分析中に、研究者は /Users/joker/Developer/Xcode/DerivedData//Users/joker/Downloads/Spy/XProtectCheck/XProtectCheck/ の 2 つの一意のパスを特定しました。 Xcode でコードをコンパイルするためのデフォルトのパスは /Users/[username]/Developer/Xcode/DerivedData です。

TCCの乱用

これらのイントロスペクション権限は、ネイティブの Transparency, Consent, and Control(TCC)機能によって管理されます。 研究者は、 xcc がFullDiskAccessとScreenRecordingの権限をチェックし、画面が現在ロックされているかどうか、現在のプロセスが信頼できるアクセシビリティクライアントであるかどうかを確認していると判断しました。

Detonate環境で正常に実行すると、次の結果が表示されました。

カスタムTCCデータベースが想定される場所に配置されると、脅威アクターは xcc バイナリを実行しました。

初期アクセス(Initial Access)

xccバイナリは、bashを介して3つの別々のプロセスによって実行されました

  • /Applications/IntelliJ IDEA.app/Contents/MacOS/idea
  • /Applications/iTerm.app/Contents/MacOS/iTerm2
  • /Applications/Visual Studio の Code.app/Contents/MacOS/Electron。

私たちはまだ調査を続けており、情報の収集を続けていますが、このマルウェアの最初のアクセスは、脅威アクターにアクセスを提供した悪意のあるプラグイン、バックドア化されたプラグイン、またはサードパーティの依存関係であったと強く信じています。 これは、 Bitdefender の研究者が、 sh.py バックドアのバージョンで見つかったハードコードされたドメインを、悪意のある依存関係があることが判明した感染したmacOSQRコードリーダーに関するツイートと関連付けた関連性と一致しています。

デプロイされた暗号化ライブラリ

5 月 31 日、研究者は /Users/shared/keybag/ にデプロイされた 3 つの非ネイティブ DyLib ( libcrypto.1.0.0.dylib libncursesw.5.dylib libssl.1.0.0.dylib )を確認しました。MacOSでは、ファイルおよびキーチェーンのデータ保護用のキーは キーバッグに保存され、iOS、iPadOS、watchOS、およびtvOSに関連します。 現時点では、研究者は、このステージングが防御回避の目的に役立つと提案し、有用な脆弱性が含まれている可能性があると推測しています。 脅威アクターは、パッチが適用されたシステムやアプリケーションにこれらの脆弱性を導入することを計画する可能性があります。

sh.py バックドア

sh.py は、Swiftbeltなどの他のエクスプロイト後の機能をデプロイして実行するために使用されるPythonバックドア です。

マルウェアは 、~/Public/Safari/sar.datから設定を読み込みます。 設定ファイルには、コマンド&コントロール(C2)URL、ビーコン用のスリープタイマー(デフォルト値は 5 秒)、各エージェントに割り当てられた一意の9桁の識別子などの重要な要素が含まれています。

定期的なビーコンの一部として、マルウェアはさまざまなシステム情報を収集して送信します。 送信される情報には、次のものが含まれます。

  • ホスト名
  • ユーザー名
  • ドメイン名
  • 現在のディレクトリ
  • 実行可能バイナリの絶対パス
  • OSのバージョン
  • 64ビットOSです
  • 64ビットプロセスです
  • Pythonのバージョン

以下は、バックドアで処理できるさまざまなコマンドの概要を表にまとめたものです。

COMMAND説明
skバックドアの実行を停止
lパラメータとして指定されたパスのファイルを一覧表示します
cシェルコマンドを実行して出力を返す
CD版ディレクトリを変更し、新しいパスを返します
XSの現在のコンテキストでパラメータとして指定されたPythonコードを実行します
xsiパラメータとして指定されたBase64でエンコードされたPythonコードをデコードし、コンパイルしてから実行します
rシステムからファイルまたはディレクトリを削除する
eパラメータの有無にかかわらず、システムからのファイルの実行
u感染したシステムにファイルをアップロードする
d感染したシステムからファイルをダウンロードする
g設定ファイルに保存されている現在のマルウェアの設定を取得する
wマルウェアの設定ファイルを新しい値で上書きする

SWIFTBELT

6月1日、侵害されたシステムは、 SeatBelt に触発され、レッドチームのCedric Owensによって作成されたMacOSの列挙機能である MacOS.Hacktool.Swiftbelt のシグネチャアラートを登録しました。他の列挙メソッドとは異なり、Swiftbelt は Swift コードを呼び出して、コマンド ライン アーティファクトの作成を回避します。 特に、 xcc バリアントもSwiftを使用して記述されています。

署名アラートは、Swiftbelt が /Users/shared/sb に書き込まれ、bash シェルインタプリタ sh を使用して実行されたことを示しました。 研究者が観測した完全なコマンドラインは Users/Shared/sb /bin/sh -c /users/shared/sb \> /users/shared/sb.log 2\>&1 であり、脅威アクターが sb.log で結果をキャプチャした一方で、エラーはSTDOUTに向けられたことを示しています。

ダイヤモンドモデル

Elasticセキュリティは 、ダイヤモンドモデル を使用して、敵対者、能力、インフラストラクチャ、および侵入の被害者間の高レベルの関係を記述します。 ダイヤモンドモデルは、単一の侵入で最も一般的に使用され、インシデント間の関係を作成する方法としてアクティビティスレッド(セクション8)を活用しますが、敵対者中心(セクション7.1.4)です アプローチは、雑然としているが、単一のダイヤモンドを可能にする。

観察された戦術とテクニック

MITRE ATT&CK戦術

戦術は、テクニックまたはサブテクニックの理由を表します。 それは敵の戦術的な目標であり、行動を実行する理由です。 このキャンペーンでElasticセキュリティラボが観察した戦術は次のとおりです。

MITRE ATT&CK Techniques / Sub techniques

テクニックとサブテクニックは、敵がアクションを実行することによって戦術的な目標を達成する方法を表します。 このキャンペーンでElastic Security Labsが確認した手法は次のとおりです。

検知のロジック

ヤラ

Elasticセキュリティは、このアクティビティを識別するためのYARAルールを作成しました。 以下は、JOKERSPY バックドアと SwiftBelt ツールを識別するための YARA ルールです。

rule Macos_Hacktool_JokerSpy {
    meta:
        author = "Elastic Security"
        creation_date = "2023-06-19"
        last_modified = "2023-06-19"
        os = "MacOS"
        arch = "x86"
        category_type = "Hacktool"
        family = "JokerSpy"
        threat_name = "Macos.Hacktool.JokerSpy"
        reference_sample = "d895075057e491b34b0f8c0392b44e43ade425d19eaaacea6ef8c5c9bd3487d8"
        license = "Elastic License v2"

    strings:
        $str1 = "ScreenRecording: NO" fullword
        $str2 = "Accessibility: NO" fullword
        $str3 = "Accessibility: YES" fullword
        $str4 = "eck13XProtectCheck"
        $str5 = "Accessibility: NO" fullword
        $str6 = "kMDItemDisplayName = *TCC.db" fullword
    condition:
        5 of them
}
rule MacOS_Hacktool_Swiftbelt {
    meta:
        author = "Elastic Security"
        creation_date = "2021-10-12"
        last_modified = "2021-10-25"
        threat_name = "MacOS.Hacktool.Swiftbelt"
        reference_sample = "452c832a17436f61ad5f32ee1c97db05575160105ed1dcd0d3c6db9fb5a9aea1"
        os = "macos"
        arch_context = "x86"
        license = "Elastic License v2"

    strings:
        $dbg1 = "SwiftBelt/Sources/SwiftBelt"
        $dbg2 = "[-] Firefox places.sqlite database not found for user"
        $dbg3 = "[-] No security products found"
        $dbg4 = "SSH/AWS/gcloud Credentials Search:"
        $dbg5 = "[-] Could not open the Slack Cookies database"
        $sec1 = "[+] Malwarebytes A/V found on this host"
        $sec2 = "[+] Cisco AMP for endpoints found"
        $sec3 = "[+] SentinelOne agent running"
        $sec4 = "[+] Crowdstrike Falcon agent found"
        $sec5 = "[+] FireEye HX agent installed"
        $sec6 = "[+] Little snitch firewall found"
        $sec7 = "[+] ESET A/V installed"
        $sec8 = "[+] Carbon Black OSX Sensor installed"
        $sec9 = "/Library/Little Snitch"
        $sec10 = "/Library/FireEye/xagt"
        $sec11 = "/Library/CS/falcond"
        $sec12 = "/Library/Logs/PaloAltoNetworks/GlobalProtect"
        $sec13 = "/Library/Application Support/Malwarebytes"
        $sec14 = "/usr/local/bin/osqueryi"
        $sec15 = "/Library/Sophos Anti-Virus"
        $sec16 = "/Library/Objective-See/Lulu"
        $sec17 = "com.eset.remoteadministrator.agent"
        $sec18 = "/Applications/CarbonBlack/CbOsxSensorService"
        $sec19 = "/Applications/BlockBlock Helper.app"
        $sec20 = "/Applications/KextViewr.app"
    condition:
        6 of them
}

参照資料

上記の研究を通じて、以下のことが参照されました。

観測

この研究では、次の観測量について議論しました。

Observableタイプ名前参考
app.influmarket[.]orgドメインn/ash.py ドメイン
d895075057e491b34b0f8c0392b44e43ade425d19eaaacea6ef8c5c9bd3487d8SHA-256の/Users/Shared/xcc (英語)Macos.Hacktool.JokerSpy
8ca86f78f0c73a46f31be366538423ea0ec58089f3880e041543d08ce11fa626SHA-256の/Users/Shared/sbMacOS.Hacktool.Swiftbelt
aa951c053baf011d08f3a60a10c1d09bbac32f332413db5b38b8737558a08dc1SHA-256の/ユーザー/共有/sh.pysh.py スクリプト

この記事を共有する