Huntress

Huntress LabsのJames NortheyとAnna Pham(コントリビューター)によるものです。

一見すると「標準的な」Pythonベースの情報窃取キャンペーンと思われた調査が、PureRATとして知られるフル機能を備えた市販のリモート・アクセス・トロイの木馬(RAT)の配備に至ったことが判明し、興味深い展開となりました。本記事では、脅威行為者が特注の自社開発ツールを市販のマルウェアと組み合わせたことについて分析します。

このキャンペーンでは、単純なフィッシング詐欺から始まり、インメモリ・ローダー、防御回避、認証情報窃取のレイヤーを経てエスカレートするという、明確かつ意図的な進行が見られます。最終的なペイロードであるPureRATは、この取り組みの集大成であり、モジュール化され、専門的に開発されたバックドアであるため、攻撃者は侵害されたホストを完全に制御することができます。

ここでは、最初にサイドロードされた DLL から最終的に暗号化されたコマンド&コントロール(C2)チャネルまで、攻撃の連鎖全体を分析し、ネットワークを防御するために必要なコンテキストと指標を提供します。

注:この分析を始めてから、SentinelLABSとBeazley Securityは、ステージ1とステージ2をカバーする優れたレポートを発表しました。ステージ3(PureRAT)については、この記事で取り上げることはできませんが、追加のコンテキストについては一読の価値があります。

詳細な脅威分析

Figure 1: Overview of the Attack Chain
図1:攻撃チェーンの概要

この侵入は、レイヤー化された難読化と戦術的進化の好例です。脅威者は10個の異なるペイロード/ステージを連鎖させ、最終的な目的を隠すために徐々に複雑さを増しています。

ステージ1:最初のおびき寄せとPythonローダー。

この攻撃は、著作権侵害通知を装ったZIPアーカイブを含む従来のフィッシングメールから始まります。このアーカイブには、署名された正規のPDFリーダー実行ファイルと、悪意のあるversion.dllが含まれています。

これは古典的なDLLサイドローディングの手法で、信頼できる実行ファイルに同じディレクトリから悪意のあるDLLを不注意にロードさせます。

Figure 2: Malicious archive sent in phishing email
図2:フィッシングメールで送信された悪意のあるアーカイブ

悪意のあるDLLは、隠しフォルダ「_」内の一連のWindowsバイナリとファイルを使用して次のペイロードを実行します。certutil.exeを使い、Document.pdfという名前のファイルに隠されたBase64エンコードされたブロブをデコードします。その後、WinRAR(images.png)のバンドルされ、名前が変更されたコピーを使用してコンテンツを抽出します。

このセカンダリーアーカイブから、ファイルはC:¥Userserspublicwindowsに展開され、リネームされたPythonインタプリタ(svchost.exe)と難読化されたPythonスクリプト(images.png)が含まれ、実行されます。

上記のような攻撃のこのフェーズは、Sysmonイベントによってキャプチャされる:

タイプProcess Create Image:C:¦WindowsSysWOW64¦cmd.exe ParentImage:Create Image: C:¦WindowsSysWOW64cmd.exe ParentImage: C:¦UsersMalware¦Desktop¦sampleDetailed_report_document_on_actions_in volving_copyrighted_material.exe CommandLine: cmd /c cd _ && start Document.pdf && certutil -decode Document.pdf Invoice.pdf && images.png x -ibck -y Invoice.pdf C:♪UsersPublic && start C:♪UsersPublic ♪Windows ♪svchost.exe C:♪UsersPublic ♪Windows ♪Lib ♪images.png ADN_UZJomrp3vPMujoH4bot

ペイロード 2

Pythonスクリプトimages.png(WinRARバイナリのimages.pngではない)は、Base85でエンコードされた大きな文字列を含むローダーです。このペイロードは、デコードおよび解凍された後、exec()を使用してメモリ内で完全に実行され、ペイロード3を開始します。

Figure 3: Archives payload - a Python bytecode loader
図 3: アーカイブのペイロード – Python バイトコードローダー

ペイロード 3

ペイロード3をバイトコードを人間が読めるように解釈する組み込みモジュールであるdisを通して実行すると、これが別のローダーであることがわかります。これは、RSA、AES、RC4、およびXORを含むハイブリッド暗号化スキームを使用して、ペイロード4のペイロードを復号化します。

Figure 4: Summary of the output of python dis
図4:python disの出力の概要

ペイロード4

この機能を独自のPythonスクリプトに再構築することで、このペイロードを再びdisに通すことができる。

注:ここからは、以下のセクションをより簡単に説明するために、disの出力をソースコードに変換しています。

このようなインメモリ攻撃では、脅威者はマルウェアがシステムの再起動に耐えられるようにしなければなりません。ペイロード4のスクリプトは、Pythonの組み込みwinregライブラリを使用してシステムレジストリキーを変更し、正規のWindowsコンポーネントのように見えるように設計されたrunキーを追加します:Windows Update Service

Figure 5: Recreation of payload 4’s infection check and persistence creation
図5:ペイロード4の感染チェックと永続性作成の再現

この値に格納されているデータは、マルウェアの最初のステージを再実行するコマンドであり、感染したユーザーがログインするたびに感染チェーン全体が再始動するようになっています。

cmd /c start C:■UsersPublic■Windows■svchost.exe C:■UsersPublic■Windows■Lib¦mages.png <sys.argv[1]> 次に、ペイロード4はローダーを続行します。

ペイロード4は、ローダーパターンを継続し、今度はTelegramボットの記述とURL短縮機能(is[.]gd)を使用して、次のペイロードを動的にフェッチして実行します。

Figure 6: Recreation of the loader for stage 2
図6:ステージ2のローダーのレクリエーション

ここでは、sys.argv[1]を使用していることに注意してください。私たちの場合、これはステージ1がペイロード2を抽出して最初のPythonスクリプトを実行したときの引数ADN_UZJomrp3vPMujoH4botです。

a.fl_button { background-color:#border:1px solid #3b59aa; color:#text-align: center; text-decoration: none; border-radius: 8px; display: inline-block; font-size: 16px; font-weight: bold; margin:4px 2px; cursor: pointer; padding:12px 28px; } .fl_ad { background-color:#width: 95%; margin: 15px auto 15px auto; border-radius: 8px; border:1px solid #d6ddee; box-shadow: 2px 2px #728cb8; min-height: 200px; display: flex; align-items: center; } .fl_lef>a>img { margin-top: 0px !important; } .fl_rig>p { font-size: 16px; } .grad-text { background-image: linear-gradient(45deg, var(–dawn-red), var(–iris)54%, var(–aqua)); -webkit-text-fill-color: transparent; -webkit-background-clip: text; background-clip: text; } .fl_rig h2 { font-size: 18px!important; font-weight: 700; color:color: #333; line-height: 24px; font-family:font-family: Georgia, times new roman, Times, serif; display: block; text-align: left; margin-top: 0; } .fl_lef { display: inline-block; min-height: 150px; width: 25%; padding:10px 0 10px 10px; } .fl_rig { padding:10px; display: inline-block; min-height: 150px; width: 100%; vertical-align: top; } .fl_lef>a>img { border-radius: 8px; } .cz-news-title-right-area ul { padding-left: 0px; } @media screen and (max-width: 1200px) { .fl_ad { min-height: 184px; } .fl_rig>p { margin: 10p10px; } .fl_rig { padding:0 10px 10px 10px; width: 100%; } } @media screen and (max-width: 400px) { .cz-story-navigation ul li:first-child { padding-left: 6px; } .cz-story-navigation ul li:last-child { padding-right: 6px; } } }.

ハントレスとのトラッドクラフト火曜日でハッカーを破壊することを学ぶ

ハッカーの手口は日々進化している!

ハントレス・ラボでは、毎月1回、ハッカーの技術について詳しく解説しています。今すぐシリーズに申し込むか、過去のエピソードをご覧ください。小細工は一切なし。

トラデクラフト・チューズデーに登録する

ステージ2:最初の武器化されたペイロード-Pythonインフォ・スティーラー

is[.]gdから次のステージを引き下げると、最初の武器化されたペイロード、Pythonベースの情報窃盗犯にたどり着きます。復号化されたバイトコードを分析すると、ChromeやFirefoxベースのブラウザから認証情報、クッキー、クレジットカード、オートフィルデータなど、さまざまな機密データを採取する機能があることがわかります。

Figure 7: Recreation of new victim notification
図7:新たな被害者通知の再現

盗まれたデータはすべてZIPファイルにアーカイブされ、Telegram Bot APIを介して流出します。ZIPファイルのメタデータには、この攻撃の背後にいる可能性のある人物の手掛かりが含まれています。Telegramのハンドルネーム@LoneNoneを指す連絡先フィールド。

このハンドルネームは、PXA Stealerマルウェア ファミリに関連していることが公表されており、強力なアトリビューションリンクを与えています。

Figure 8: Recreation of the archive creation of collected information with a clue “@LoneNone”
図8:”@LoneNone “を手がかりに収集された情報のアーカイブ作成のレクリエーション

次に、telegram APIを使用して、以下のロジックに応じて、結果のzipとメッセージ(上記)をさまざまなTelegramチャットに送信します:

テレグラムチャット

使用対象

使用時期

送信データ

CHAT_ID_NEW

(-1002460490833)

メイン・データ

Count == 1の場合

Zipアーカイブ、メッセージ

CHAT_ID_RESET

(-1002469917533)

フォールバックか再感染か?

カウント==1の場合

Zipアーカイブ、メッセージ

chat_id_new_notify
(-4530785480)

通知チャネル

Count == 1 の場合

メッセージのみの通知

表1:Telegramメッセージのロジック

ステージ3:.NETへのピボット

キャンペーンの目的が明確になったかと思うと、脅威の主体はピボットします。ステージ3では、解釈されたPythonスクリプトからコンパイルされた.NET実行ファイルへと大きくシフトします。

Figure 9: Recreation of the stage 3 loader
図9:ステージ3のローダーの再現

新しいステージは、「No-bullshit file hosting and URL shortening service」である0x0[.]stから取得されます。このステージは、さらに2つの埋め込みペイロードを含むため、前のPythonスクリプト(40KB→~3MB)よりもはるかに大きくなっています。

最初のバイナリは.NETアセンブリで、base64とRC4ハードコード鍵を使用して復号化されます。その後、脅威当事者は正規の.NETユーティリティであるRegAsm.exeをサスペンド状態で起動することで、プロセスホロリングを使用します。

プロセスのメモリから元の実行可能コードをアンマップし、新しいメモリ領域を確保し、そこに悪意のある.NETペイロードを書き込みます(ペイロード7)。その後、メインスレッドのコンテキストが新しいエントリポイントを指すように更新され、スレッドが再開され、正規のMicrosoftバイナリを装って悪意のあるコードが実行されます。

Figure 10: Recreation of the Python script used for process hollowing and loading an encrypted .NET assembly
図10:プロセスのホロリングと暗号化された.NETアセンブリのロードに使用されるPythonスクリプトのレクリエーション

2つ目はシェルコード・ローダーですが、このペイロードについてはここでは触れません。

ペイロード 7

これは最初のPEペイロードで、デバッグ用の文字列が作者によって残されているようです:

Figure 11: FLOSS output of the .NET assembly
図11:.NETアセンブリのFLOSS出力
  1. AMSIパッチ: amsi.dllの AmsiScanBuffer関数にパッチを適用し、Antimalware Scan Interfaceが動的にロードされたコードを検査できないようにします。
  2. ETW アンフック: ntdll.dllの EtwEventWriteにパッチを適用し、EDR製品のテレメトリの一般的なソースであるEvent Tracing for Windowsを見えなくします。

このアセンブリには、さらに別の埋め込みペイロード(ペイロード8)が含まれており、単純なBase64とXORのコンボを使ってデコードします。

ペイロードが復号化されると、.NETの組み込みメソッドAssembly.Loadに渡され、実行可能ファイルを直接メモリにロードし、フローはgetEntryPointを経て続き、ロードされたアセンブリのエントリポイントを取得し、最後にinvokeCSharpMethodがリフレクションを介してメソッドを実行します。

Figure 12: dnSpy disassembly of the loader for the next payload
図 12: dnSpy による次のペイロードのローダーの逆アセンブル

CyberChef(Base64→キーとのXOR)を使用してこのペイロードを抽出する、

Figure 13: CyberChef recipe to extract the next payload
図 13: 次のペイロードを抽出するための CyberChef レシピ

ペイロード 8

このペイロードは、AES-256とGZip解凍を使用して、9番目の最終ステージであるMhgljosy.dllという名前のDLLを解凍します。このローダーは、従来のエクスポートに依存する代わりに、.NETリフレクション(Assembly.Load()GetType()GetMethod())を使用してDLLを完全にメモリにロードし、特定の難読化されたメソッドを呼び出して実行を開始します。

Figure 14: The loader for payload 9, post-decryption
図 14: 復号化後のペイロード 9 のローダー

GetMethod()にブレークポイントを設定し、少しデバッグすると、このメソッドがMhgljosy.Formatting.TransferableFormatter.SelectFormatter()であることがわかります。

ペイロード9:最後のパート-PureRAT

ローダー、ステアラー、難読化の8つのペイロード/ステージを経て、私たちはついに最後のペイロード、Mhgljosy.dllにたどり着いた。しかし、このDLLは.NET Reactorで保護されています。.NET Reactorはリバースエンジニアリングを挫折させるために使用される市販の難読化ツールです。

Figure 15: DiE showing the assembly has been obfuscated by .NET Reactor
図15:アセンブリが.NET Reactorによって難読化されていることを示すDiE

静的解析は行き詰まったので、難読化を解除することにします。NETReactorSlayer(提案してくれたAnna Phamに感謝)と呼ばれるオープンソースツールを使用して、制御フローのリダイレクトと文字列の暗号化を十分に取り除き、より読みやすいアセンブリを作成することができました。

よりクリーンなバイナリで、前のペイロードで特定されたエントリー・ポイントを分析できる:

難読化された制御をたどると、最初にReceiveAttachedSubscriber がヒットする。このメソッドのすぐ上に、Base64 blobがある。

Figure 16: First method of interest in PureRAT
図16:PureRATの最初のメソッド

デコードロジックは

  1. Base64デコード:初期文字列がデコードされる。
  2. GZip解凍: Base64デコードされた出力にGZipヘッダーが表示されます。
  3. Protobufデシリアライズ: 解凍されたデータは、プロトコル・バッファ(protobuf)スキーマを使用してデシリアライズされます。

これにより、マルウェアの構成が明らかになります。

Figure 17: Decoding PureRATs configuration
図17:PureRATs構成のデコード

デシリアライズされた最終的な構成には、C2インフラストラクチャが含まれています。IPアドレス(157.66.26[.]209)、ポートのリスト(56001、56002、56003)、およびX.509証明書にデコードされる別のbase64 blobです。マルウェアはこの証明書をTLSピンニングに使用し、C2通信が暗号化され、中間者検査に強いことを保証します。

Figure 18: Socket setup with TLS Pinning
図18:TLSピン留めによるソケットセットアップ

注目すべきは、このC2サーバーがベトナムにあることで、これがPXAであり、背後にいるのがベトナム人である可能性が高いという証拠がさらに追加されています。

Figure 19: Validin page for the attackers' C2 server
図19:攻撃者のC2サーバーのValidinページ

C2に接続されると、RATは最初の “hello “パケットをオペレーターに送り返す。以下のロジックで構成されているが、メソッド名が難読化されているため理解しにくい。

Figure 20: Obfuscated system enumeration
図20:難読化されたシステム列挙

一旦手動で難読化解除されると、これはホストマシンの徹底的なフィンガープリンティングで構成され、C2サーバーに送り返す前に豊富な情報を収集することがわかります。

Figure 21: Deobfuscated system enumeration
図21:難読化解除されたシステムの列挙

以下はこのフィンガープリンティング・ルーチンで使用される全ての関数の内訳です:

Figure 22: Antivirus Products: Queries WMI (rootSecurityCenter) for the displayName of all installed antivirus products
図 22:アンチウイルス製品:WMI (rootSecurityCenter) にインストールされた全てのアンチウイルス製品の displayName を問い合わせる。
Figure 23: The PlaySubscriber() function used to create a unique host identifier
図 23:一意のホスト識別子を作成するために使用される PlaySubscriber() 関数

一意のホスト ID: 図23に見られるように、これはプロセッサID、ディスクドライブのシリアル番号、物理メモリのシリアル番号、およびユーザーのドメイン名に基づいてMD5ハッシュによって生成される。これにより、被害マシンの安定した一意の識別子が作成されます。

Figure 24: Webcam Presence: Queries WMI for PnP devices with the class Image or Camera
図24:ウェブカメラの存在:ImageまたはCameraクラスのPnPデバイスをWMIに問い合わせる。
Figure 25: User and Domain: Collects the current username and domain (username [DOMAIN])
図25:ユーザーとドメイン:現在のユーザー名とドメイン(ユーザー名[DOMAIN])を収集します。
Figure 26: Privilege Level: Checks the current process's Windows Identity against built-in roles (Administrator, User, Guest, etc.) to determine its privilege level
図 26:特権レベル:現在のプロセスの Windows ID を組み込みのロール(Administrator、User、Guest など)と照合して特権レベルを決定する。
Figure 27: Operating System: Gathers the OS version and architecture (e.g., "Windows 10 64Bit")
図 27:オペレーティング・システム:OS のバージョンとアーキテクチャを収集する(「Windows 10 64Bit」など)。
Figure 28: The RemoveSelector() function used to find and list any present cryptowallets
図 28:RemoveSelector()関数は、存在するクリプトウォレットの検索とリストに使用される。

暗号通貨ウォレット:この関数は、Chromeの拡張機能ID、ファイルシステムのパス(%APPDATA%)およびレジストリキーをチェックすることで、ブラウザベースおよびデスクトップの数十の暗号通貨ウォレットを検索します。

注:この関数はデータを収集せず、システムに存在するものの文字列を返すだけです。

Figure 29: System Idle Time: Uses the GetLastInputInfo API to determine how long the user has been idle, allowing the operator to operate when the user is away
図29 システム・アイドル時間システム・アイドル時間: GetLastInputInfo API を使用して、ユーザがアイドル状態であった時間を判断します。
Figure 30: Implant Path: Reports its own file path on disk
図 30: インプラントのパス:ディスク上の自身のファイルパスを報告

最初のホスト・フィンガープリンティングが完了し、C2 とのハンドシェイクが確立されると、RAT はその主要機能である、コマン ドを受信して実行するように設計された永続的なタスキング・ループに移行します。

Figure 31: Task loop awaiting further payloads
図31:さらなるペイロードを待つタスク・ループ

タスク・ループは一旦解凍されると、かなり単純である:

  1. (赤)最初の4バイトを読んでペイロードの長さを決定する。
  2. (青)そのバイト数をバッファに読み込む(これが実際のペイロード)。
  3. (緑)先ほど見たprotobufルーチンでバッファをデシリアライズする。
  4. (緑)新しいスレッドを起動し、メッセージに対してDecideFlexibleController()を呼び出してタスクを実行する。

このアーキテクチャーは、このRATを効果的にダイナミック・ローダーに変える。インプラントは休眠状態にあり、オペレーターが必要に応じてモジュールをプッシュダウンし、動的に最初の偵察をはるかに超える機能を拡張するのを待っている。これらのプラグインは、マイク/ウェブカメラ・アクセスからリアルタイムのキーロギング、デスクトップへの隠しアクセスまで、あらゆる機能を追加することができる。

被害者にとっては幸運なことに、ハントレスSOCは、脅威者がこれらの武器化された追加プラグインを展開する前に、感染したホストを隔離して修復することができ、最終的な目的を達成する前に攻撃を阻止することができた。残念ながら、これ以上調査すべきモジュールはないということだ。

Pure RATの最後の手がかり

.NET名前空間は、このサンプルがPure Hidden VNCと関連している強力な証拠であるPureHVNCの言及で、私たちに別の手がかりを与えてくれます。以前、”PureCoder“という別名で誰かが販売していたコモディティマルウェアの一部です。

Figure 32: PureHVNC modules in the assembly
図32:アセンブリ内のPureHVNCモジュール

PureHVNCは現時点ではほぼレガシーですが、そのモジュールの多くはPureCoderの新しいマルウェア・ファミリーの中で生き続けており、それぞれが特定の目的を果たすように設計されています:

  • PureCrypter – 正規のプロセスにマルウェアを注入し、検出を回避し、アンチVMおよびアンチデバッグチェックで分析を挫折させるために使用されるクリプター。
  • BlueLoader– 感染したシステム上に追加のペイロードを展開するローダーで、攻撃者はマルウェア・キャンペーンを簡単に展開・更新することができます。
  • PureMiner– 被害者のCPUおよびGPUリソースをハイジャックし、同意なしに攻撃者のために暗号通貨をマイニングするサイレントクリプトジャッカーです。
  • PureLogs Stealer – ブラウザデータ、保存された認証情報、およびセッショントークンを流出させる情報窃取ツールで、多くの場合、攻撃者のTelegramに直接配信されます。
  • PureRAT– 暗号化されたC2チャネルを確立し、オペレーターが追加モジュールをロードできるモジュール式バックドア。
  • PureClipper– システムのクリップボードの暗号通貨アドレスを監視し、コピーペースト操作中に攻撃者が管理するアドレスに置き換え、暗号トランザクションをリダイレクトして資金を盗みます。

開発者はこのツールを、カスタムコーディングされた.NETリモート「管理ツール」として公然と宣伝しており、軽量でTLS/SSL暗号化クライアントと多言語GUIを備え、隠しデスクトップアクセス(HVNC/HRDP)、ウェブカメラとマイクのスパイ、リアルタイムおよびオフラインのキーロギング、リモートCMD、アプリケーション監視(ブラウザ、Outlook、Telegram、Steamなど)といった広範な監視・制御機能を提供しています。

ファイル、プロセス、レジストリ、ネットワーク、スタートアップ・マネージャーなどの管理ツールに加え、DDoS攻撃、リバース・プロキシ、.NETコード・インジェクション、ストリーミング・ボット管理、メモリーやディスク内のファイル実行などの機能も備えている。ただし、パスワード/クッキーのリカバリーは別売りのため、「パスワード/クッキーのリカバリーは含まれていません」(Stealer Functionality)。

Figure 33: PureRAT C2 interface from PureCoder’s advertising
図33:PureCoder の広告に掲載された PureRAT C2 インターフェース

結論

繰り返されるTelegramのインフラ、@LoneNoneにリンクするメタデータ、ベトナムまで追跡されたC2サーバーは、これがPXA Stealerの背後にいる人々によって実行されたことを強く示唆している。Pythonペイロードの素人的な難読化から、PureRATのようなコモディティマルウェアを悪用するようになったことは、単に持続性があるだけでなく、深刻で成熟したオペレーターの特徴を示しています。

この脅威者は、PythonバイトコードローダーやWMI列挙から、.NETプロセスホロリングやリフレクティブDLLローディングに至るまで、複数の言語とテクニックに習熟していることを示しました。

より広い視点から見ると、カスタムコードによる盗聴からPureRATのような商用RATへの移行は重要です。攻撃者の参入障壁が低くなり、大規模な開発努力を必要とせずに、安定し、機能が豊富で、「専門的に」保守されたツールキットにアクセスできるようになります。

その結果、大規模なデータ窃取、監視、追跡攻撃、長期的な持続が可能な、より弾力的でモジュール化された危険な脅威が生まれることになります。

このキャンペーンは、深層防御の重要性を強調している。最初のアクセスはユーザーの実行に依存し、ローダーは信頼されたバイナリとシステム・バイナリを悪用し、最終段階では身を隠すために防御回避を行いました。

この一連の流れは、単一のコントロールでは阻止できなかった。攻撃の全ライフサイクルを理解し、certutil の乱用から WMI クエリや C2 トラフィックの暗号化まで、ここで説明した特定の動作を監視することで、組織はより強靭なセキュリティ体制を構築することができます。

状況認識を維持する-Tradecraft Tuesdayに登録する

Tradecraft Tuesday は、サイバーセキュリティのプロフェッショナルを対象に、最新の脅威要因、攻撃ベクトル、緩和戦略に関する詳細な分析を提供します。

毎週開催されるセッションでは、最近のインシデントの技術的なウォークスルー、マルウェアのトレンドの包括的な内訳、および最新の侵害指標(IOC)が紹介されます。

参加者は以下を得ることができます:

  • 新たな脅威キャンペーンやランサムウェアの亜種に関する詳細な説明

  • 証拠に基づく防御方法論と修復テクニック

  • インシデント対応に関する洞察を得るためのハントレスアナリストとの直接対話

  • 実用的な脅威インテリジェンスと検出ガイダンスへのアクセス

組織の環境を保護する責任者のために特別に設計されたリアルタイムのインテリジェンスと技術教育で、防御態勢を強化しましょう。

トレードクラフト・チューズデーに登録する

MITRE ATT&CK マッピング

戦術

テクニック

戦術名

観察された動作の説明

初期アクセス

T1566.001

スピアフィッシング添付ファイル

キャンペーンは、悪意のあるZIPアーカイブを含むフィッシングメールから始まります。

実行

T1204.002

ユーザーによる実行:悪意のあるファイル

ユーザは騙されて、ドキュメントを装った .exe ファイルを実行します。

実行

T1059.006

Python

ステージ1とステージ2が、改名されたPythonインタプリタを介して実行されます。

永続性

T1547.001

レジストリの実行キー/スタートアップフォルダ

ペイロード4は、「Windows Update Service」の実行キーを作成することで、永続性を確立します。

防御回避

T1574.001

DLL サイドローディング

正規のPDFリーダー実行ファイルが、悪意のあるバージョン.dllをロードするために使用されます。

防御回避

T1027

難読化されたファイルまたは情報

複数のステージでBase85、Base64、RC4、AES、XORを使用してペイロードを隠します。

防御回避

T1055.012

プロセスの空洞化

ペイロード 7 .NET ローダーは、サスペンドされた RegAsm.exe プロセスに注入されます。

防御回避

T1562.001

防御を無効にします:ツールの無効化または変更

ペイロード 7 ローダーは、ランタイムスキャンをバイパスするために AMSI にパッチを適用します。

防御回避

T1562.006

防御を妨害する:インジケータブロック

ペイロード 7 のローダーが ETW のフックを外し、EDR テレメトリをブロックする。

発見

T1082

システム情報の検出

PureRATは、OSバージョン、アーキテクチャ、ユーザー権限をフィンガープリントします。

発見

T1518.001

セキュリティソフトウェアの検出

マルウェアはWMIを使用して、インストールされているアンチウイルス製品を列挙します。

コレクション

T1560.001

収集したデータをアーカイブします:ユーティリティによるアーカイブ

盗まれたデータは、流出前にZIPアーカイブに圧縮されます。

コマンド&コントロール

T1071.001

ウェブプロトコル

ステージ2のステイラーは、Telegram APIへのHTTP POSTリクエストを経由してデータを流出させます。

コマンドと制御

T1573.002

暗号化チャネル:非対称暗号

PureRATはC2通信にX.509証明書を固定したTLSを使用します。

侵害の指標

ディスクとメモリのアーティファクト

説明

Mhgljosy.dll

SHA256: e0e724c40dd350c67f9840d29fdb54282f1b24471c5d6abb1dca3584d8bacaa

ペイロード9(PureRAT)

maegkffm.exe

SHA256: 06fc70aa08756a752546198ceb9770068a2776c5b898e5ff24af9ed4a823fd9d

ペイロード8(PureRATローダー)

wwctn_crypted.exe

SHA256: f5e9e24886ec4c60f45690a0e34bae71d8a38d1c35eb04d02148cdb650dd2601

ペイロード 7 (NetLoader)

ファイルパス:C:¥Users¥Public¥Windows¥svchost.exe

初期段階で使用されていたPythonインタプリタの名前を変更したもの。

ファイルパス:C:¥Users¥Public¥Windows¥Lib¥images.png

SHA256: f6ed084aaa8ecf1b1e20dfa859e8f34c4c18b7ad7ac14dc189bc1fc4be1bd709

難読化されたPythonスクリプト(ペイロード2)。

レジストリキー:HKCUSOFTWAREMicrosoftWindowsCurrentVersionRunWindows Update Service

ペイロード4で作成された永続レジストリキー。

ネットワーク/インフラストラクチャ

タイプ

説明

IPアドレス

157.66.26[.]209

PureRAT C2サーバー

ポート

56001

PureRAT C2ポート(デフォルト)

ポート

56002

PureRAT C2ポート

ポート

56003

PureRAT C2ポート

URL

https://0x0[.]st/8WBr.py

ステージ3のペイロードホスティングURL

URL

https://is[.]gd/s5xknuj2

https://paste[.]rs/fVmzS

ステージ2のペイロードホスティングURL

テレグラムハンドル

LoneNone

ステージ2(PXA Stealer)に関連する脅威アクターのハンドル。

謝辞

最終ステージのダンプと難読化解除を手伝ってくれたAnna Phamに感謝したい。

Huntress Labsによって後援され、執筆された。