🔍

怪しい.scrファイルを拾ったのでClaude Codeで解析してみたら、正規ツールが武器化されていた話

に公開

はじめに

脅威インテリジェンスの収集中、不審なURLを発見した。

hxxps://amaranthinerose[.]com/Ststement_File.scr

"Statement"のスペルミス、そして.scr拡張子。.scrはWindowsのスクリーンセーバー形式だが、実体は.exeと同じPE(Portable Executable)であり、ダブルクリックで任意コードが実行される。請求書(Statement)を装ったファイル名と合わせて、典型的なソーシャルエンジニアリングの手口だ。

さっそく中身を調べてみることにした。

Step 1: 安全にダウンロード

マルウェアの可能性があるファイルを直接ブラウザで開くわけにはいかない。自作のproxy-web(Docker隔離環境でWebアクセスするツール)を使って安全に取得した。

proxy-webは以下の機能を持つ:

  • Dockerコンテナ内で完全隔離されたブラウザを実行
  • ダウンロードファイルのハッシュ値を自動算出
  • VirusTotalへの自動問い合わせ
  • ファイルを暗号化+圧縮して隔離保存

取得結果:

項目
SHA256 28bfb5ad030de1cb0be842de702da578869ddf6bccdd32b7f6a991e65025587d
ファイルサイズ 37MB
VT検出率 20/76
VT検出名 trojan.remsim/alien

検出率は20/76。半数以上のエンジンがスルーしている。これは後でわかるが、正規ソフトウェアベースのマルウェアの典型的な特徴だ。

Step 2: Ghidra Headlessで静的解析

次に、Claude CodeからGhidra Headless Analyzerを呼び出して静的解析を実行した。

通常、Ghidraでバイナリを解析するにはGUIを起動してプロジェクトを作成し、ファイルをインポートして...という手順が必要だが、自作のGhidra Headlessスキルを使えば、Claude Codeからワンコマンドで解析できる。

/ghidra-headless

Dockerコンテナ内でGhidraが起動し、自動解析→レポート生成まで一気通貫で実行される。

PE情報

項目
Architecture x86-64
Compiler MSVC (CRT statically linked)
Total Functions 1,046 (862 named)
Image Base 0x00400000

セクション構成

Section Size Notes
.text 272KB コード
.rdata 79KB 読み取り専用データ
.data 75KB 読み書きデータ
.rsrc 44KB リソース(アイコン等)
tdb 6KB JWrapper固有データ

tdbセクションの存在が目を引く。これはJWrapperというJavaアプリケーションパッケージャー固有のセクションだ。

インポート分析 - 不審なAPI群

Ghidraのインポート分析で、以下の不審なAPI呼び出しが検出された。

ネットワーク通信:

InternetOpenA, InternetConnectA, HttpOpenRequestA, HttpSendRequestA
InternetOpenUrlA, InternetReadFile
WinHttpOpen, WinHttpGetProxyForUrl

WinINetとWinHTTPの両方を使い、プロキシ検出まで行う。明らかに外部通信を行うバイナリだ。

プロセス操作:

CreateProcessA          - 子プロセス生成
LoadLibraryA            - 動的DLLロード
GetProcAddress          - 関数アドレス取得

ACL操作:

ConvertStringSidToSidA
SetNamedSecurityInfoA

SID S-1-5-32-545(Usersグループ)のチェックとACL操作。インストール先のアクセス権限を変更する挙動だ。

Step 3: 正体判明 - SimpleHelp RMM

文字列解析が決定的だった。バイナリ内から以下の情報が抽出された。

PDB Path:    c:\users\simplehelp\workspace\runner\native\...
Product:     SimpleHelp Remote Access Client
Company:     SimpleHelp Ltd
Internal:    Remote Access-windows64-offline.exe

SimpleHelp - 正規のリモートサポートツールだ。

SimpleHelpはIT部門がリモートで端末をサポートするためのRMM(Remote Monitoring & Management)製品。正規の商用ソフトウェアであり、それ自体はマルウェアではない。

しかし近年、攻撃者がこうした正規RMMツールを悪用するケースが急増している。これを**Living off the Land(LoTL)**と呼ぶ。

ではこのSimpleHelpは、どう「武器化」されているのか?設定を詳しく見ていく。

Step 4: JARの抽出と逆コンパイル

SimpleHelpはJavaベースのアプリケーションで、JWrapperというフレームワークでネイティブEXEにパッケージされている。PE本体はランチャーに過ぎず、本体はPE末尾に付加されたZIPアーカイブ内のJARファイルだ。

PE末尾のZIPアーカイブ

PE末尾(オフセット0x23c4384以降)に、669ファイルを含むZIPアーカイブが付加されていた。ただし、ZIPの中央ディレクトリのオフセットがPE先頭からの相対アドレスになっているため、Pythonのzipfileモジュールでは直接開けない。

中央ディレクトリエントリをパースし、ローカルファイルヘッダから個別に抽出するスクリプトをClaude Codeに書かせて対応した。

抽出結果

  • JWrapperランチャー: 622個の.classファイル
    • JWrapper本体
    • FlatLaf UI(スプラッシュ画面用)
    • BouncyCastle暗号ライブラリ
    • XZ圧縮ライブラリ
  • jwagent.jar: SimpleHelpエージェント本体

CFRで逆コンパイル

抽出した.classファイルをCFR(Java Decompiler)で逆コンパイルし、Javaソースコードとして読める状態にした。

JWrapperMain.javaに重要な処理が見つかった:

// 全SSL証明書を信頼(証明書検証を無効化)
SSLHelper.setupSslAndHttpsToAcceptAllCerts(true);

// HTTP User-Agent制限解除
JWNet.tryForceHttpAgentUnrestrictive();

そしてプロパティの復号キーがハードコードされていた:

zxghjsadgj213687479823198hjkasnkjdbjhw139r0934588923y21ug3hbj

このキーでSimpleHelpの設定ブロックを復号できる。

Step 5: 攻撃者の設定を読み解く

PE末尾の付加データ(36.6MB)からSimpleHelp設定ブロックを完全抽出した。攻撃者がどのように正規ツールを「武器化」したかが、設定値から読み取れる。

C2接続先

update_url = http://147[.]124[.]223[.]5/access

平文HTTPでC2サーバーに接続する設定。HTTPSを使わないのは、攻撃者が用意したサーバーに正規の証明書を設定していないためだろう。

隠蔽のための設定

設定キー 攻撃者の意図
sg_silent_install true インストールUIを一切表示しない
sg_confirm false リモート接続許可ダイアログを非表示
sg_install_shortcuts false デスクトップ/スタートメニューにショートカットを作らない

被害者はファイルをダブルクリックした後、何が起きたか気づかない。インストール画面も、許可ダイアログも、ショートカットも表示されない。

攻撃者に有利な設定

設定キー 攻撃者の意図
sg_script true リモートからのスクリプト実行を許可
sg_monitor true 画面監視機能を有効化
sg_name AUTODETECT 接続名を自動検出(被害者の端末名を取得)
skip_system_jre 1 埋め込みJREを使用(環境依存を排除)

つまり、このファイルをダブルクリックした瞬間:

  1. サイレントにSimpleHelpエージェントがインストールされる
  2. 攻撃者のC2サーバー(147[.]124[.]223[.]5)に自動接続
  3. 攻撃者は被害者の画面を監視し、任意のスクリプトを実行可能になる

正規ツールの機能がそのまま攻撃者の武器になっている。

既知のキャンペーンとの比較

2026年2月、CofenseがJWrapperでパッケージされたSimpleHelpを配布するフィッシングキャンペーンを報告している。

https://securityboulevard.com/2026/02/brand-trust-as-a-weapon-multi-brand-impersonation-campaigns-deliver-jwrapper-malware/

Cofense報告のキャンペーン

  • DocuSign、Adobe Sign、Zoomなどのブランドを偽装
  • JWrapperでパッケージされたSimpleHelpをダウンロードさせる
  • ファイアウォールルールの追加(netshコマンド)
  • ICACLSでファイルシステム権限の変更

今回の検体との比較

項目 Cofense報告 今回の検体
パッケージ JWrapper JWrapper
正体 SimpleHelp RMM SimpleHelp RMM
偽装手法 ブランド偽装メール 請求書偽装.scrファイル
C2ドメイン klmgskmtn[.]com 147[.]124[.]223[.]5(IPアドレス直接)
C2プロトコル 不明 HTTP平文(port 80)
配布元 メールリンク amaranthinerose[.]com

手法の骨格(JWrapper + SimpleHelp)は一致するが、C2インフラは異なる。同一グループの別インフラか、同じ手法を採用した別グループの可能性がある。

SOC観点での対策

IOC(Indicators of Compromise)

検知・ブロックに使えるIOCをまとめる。

ネットワーク:

# C2サーバー
147.124.223.5

# C2 URL
http://147.124.223.5/access

# 配布元
amaranthinerose.com

# JWrapper内部通信
http://0.0.254.254

# User-Agent
JWrapper Proxy Detector/1.0

ファイルハッシュ:

# SHA256
28bfb5ad030de1cb0be842de702da578869ddf6bccdd32b7f6a991e65025587d

ファイルシステム:

%ProgramData%\JWrapper-Remote Access\
%LOCALAPPDATA%\JWrapper-*\
%APPDATA%\JWrapper-*\
jwagent.jar
jwutils_win64.dll

プロセス:

javaw.exe(SimpleHelpエージェントの子プロセスとして起動)

EDR/SIEMでの検知ルール案

1. JWrapperディレクトリの作成検知

process_name:* AND file_path:("*\\JWrapper-Remote Access\\*" OR "*\\JWrapper-*\\jwagent.jar")

2. .scrファイルからのjavaw.exe起動

parent_process_extension:".scr" AND process_name:"javaw.exe"

3. SimpleHelp関連の通信

http.user_agent:"JWrapper Proxy Detector*" OR dns.query:"*.simplehelp.*"

4. C2通信(IPベース)

destination.ip:"147.124.223.5" AND destination.port:80

まとめ

今回の解析フローを振り返る。

[怪しいURL発見]

[proxy-web] Docker隔離環境で安全にダウンロード+VT検索

[ghidra-headless] Claude Codeからワンコマンドで静的解析

[PE分析] セクション構成・インポートから挙動を推定

[文字列解析] SimpleHelp RMMと判明

[JAR抽出] PE末尾のZIPから669ファイルを抽出

[逆コンパイル] CFRでJavaソースに変換

[設定抽出] C2 URL、サイレントインストール設定を確認

[脅威インテリジェンス] Cofense報告との比較、未報告C2の発見

Claude Code + Ghidra Headlessの組み合わせにより、怪しいファイルの発見から設定ブロックの完全抽出まで、ターミナル上で完結できた。GUIを一度も開かずに、37MBのバイナリの正体を暴き、攻撃者の設定意図まで読み解ける。

正規ツールの悪用(LoTL)は、従来のシグネチャベースの検知では見逃しやすい。VT検出率20/76がそれを物語っている。SOCとしては、RMMツールの正規外利用を監視し、JWrapperディレクトリの作成やjavaw.exeの不審な起動を検知ルールに組み込むことが有効だ。

Discussion