PowerShell.sysはマルウェア?PowerShell 7.5.1更新後の検出原因と安全な対処法(誤検知との見分け方・完全ガイド)

PowerShell の自動更新直後に「PowerShell.sys」をアンチウイルスがマルウェアとして隔離—この現象は 2024~2025 年頃から各所で報告が増えています。結論から言うと、PowerShell に正規の「.sys」ドライバーは存在せず、検出は“誤検知よりも不審ドライバーの混入”を強く疑うべきケースが大半です。ここでは原理・判別・実務的な対処をまとめます。

目次

PowerShell.sys がマルウェア判定される背景

PowerShell は .NET ベースのユーザー・モード アプリケーションであり、カーネル ドライバー(.sys)を必要としません。したがって「PowerShell.sys」が検出される状況は、概ね以下のいずれかです。

  • サードパーティ製ソフト(アンチチート、OC/ハードウェア制御、モニタリング、古いユーティリティ等)が同名のドライバーを導入
  • マルウェアが PowerShell の名前を騙り(偽装)、脆弱ドライバーを悪用して権限昇格・カーネル操作を狙う
  • 極めて稀に誤検知(ただし、同名ドライバーの実体はほぼ正規ではない)

特に後者は、既知の脆弱ドライバー(例:WinRing0 系)を悪用して、メモリ改ざんや保護機構の回避を図るパターンが広く知られています。アンチウイルスが「脆弱ドライバー」や「ドライバー悪用」を示す名称で検知するのは、この文脈です。

「PowerShell に PowerShell.sys は存在しない」を技術的に確認する

PowerShell の正規インストールは、次の通りユーザー・モードの実行ファイルと DLL が中心です。

項目正規の PowerShell 7.x正規の Windows PowerShell 5.1備考
主要実行ファイルpwsh.exepowershell.exeいずれもユーザー・モード
既定のパスC:\Program Files\PowerShell\7\C:\Windows\System32\WindowsPowerShell\v1.0\7.x は 5.1 のフォルダを変更しない
.sys ドライバー存在しない存在しないPowerShell がドライバーを同梱することはない

確認用のコマンド例(管理者不要):

# 7.x がどこにあるか
(Get-Command pwsh).Source

# 5.1 の場所とバージョン

$pshome
$PSVersionTable

# PowerShell.sys が存在しないことを検索(システム全体を走査)

Get-ChildItem -Path C:\ -Filter powershell.sys -Recurse -ErrorAction SilentlyContinue 

上記で powershell.sys が見つかる場合、PowerShell 本体ではなく、別ソフトやマルウェアが配置した可能性が高いと判断できます。

よくある誤解の整理

  • 「PowerShell 7.x への自動更新が原因で .sys が入った」…誤り。PowerShell の更新はユーザー・モードの置換であり、カーネル ドライバーは含まれません。
  • 「C:\Windows\System32\WindowsPowerShell\v1.0\ に 7.x が干渉した」…誤り。ここは OS 同梱の 5.1 用フォルダで、7.x は別ディレクトリに入ります。
  • 「アンチウイルスの誤検知なので復元してよい」…非推奨。ファイル署名・ハッシュ・設置元の検証を行わず復元するのは危険です。

想定される原因と見分け方

原因のタイプ典型的な兆候見分けるポイント推奨対処
サードパーティ製アンチチート/OCツール等のドライバーゲームやハードウェア監視ツール導入直後に作成、サービス名が別名(例:PAC、Ring0 等)デジタル署名の発行者が Microsoft 以外、製品名にベンダー名が出る該当ソフトをアンインストール、最新版へ更新、必要ならベンダーへ問い合わせ
脆弱ドライバー悪用(WinRing0 系など)アンチウイルスが「VulnerableDriver」「WinRing0」関連で検知古い署名、自己署名、署名無効/不明、システムディレクトリ直下に出現隔離を維持、フルスキャン、脆弱ドライバー・ブロックリストを有効化
本物の誤検知(稀)ベンダーが即日シグネチャを修正、正規ソフトのファイル名と一致正規ベンダーの有効なデジタル署名、整合するハッシュ隔離サンプルをベンダーへ提出し最終判定を依頼

まず行うべき一次切り分け

  1. 隔離のままにする(復元しない):業務上致命でない限り復元は避ける。
  2. ファイルの真正性を確認:
    • プロパティ → 「デジタル署名」タブで発行者・タイムスタンプを確認(無署名/自己署名/失効は危険)。
    • PowerShell でハッシュと署名を確認: Get-FileHash -Algorithm SHA256 "C:\Windows\System32\drivers\PowerShell.sys" Get-AuthenticodeSignature "C:\Windows\System32\drivers\PowerShell.sys" | Format-List
  3. どのサービス/ドライバーとして読み込まれるか確認: # 登録済みカーネル ドライバーのうち、powershell.sys を使うものを探す Get-ChildItem 'HKLM:\SYSTEM\CurrentControlSet\Services' | ForEach-Object { $path = (Get-ItemProperty $_.PsPath -ErrorAction SilentlyContinue).ImagePath if ($path -and ($path -match 'powershell\.sys')) { [PSCustomObject]@{ ServiceName=$_.PSChildName; ImagePath=$path } } } # 実行中のドライバー一覧(要管理者) driverquery /v | findstr /i powershell
  4. 最近入れたソフトの棚卸し:ゲーム、OC ツール、RGB コントローラ、ファン制御、ハードウェア監視系を重点確認。
  5. イベントログでドライバー読み込みの痕跡を探す: Get-WinEvent -LogName System | Where-Object { $*.Id -in 6,7,20001,20003 -and $*.Message -match 'powershell.sys' } | Select-Object TimeCreated, Id, ProviderName, Message

推奨の対処フロー(安全第一)

1) マルチエンジンでフルスキャン

  • 常用のアンチウイルスに加え、Microsoft Defender の「オフライン スキャン」で再検査。
  • 必要に応じてセーフモードで実行し、隠蔽・自己防衛系マルウェアを排除。

2) 不要ソフト/疑わしいソフトのアンインストール

最近追加したゲームやハードウェア制御ツールを外し、再起動後に再スキャン。問題が消えるなら原因の切り分けに有用です。

3) 脆弱ドライバー対策の有効化

  • Windows Update を最新にする(ブロックリストは更新に追従)。
  • Microsoft 脆弱ドライバー ブロックリストを有効化(Windows セキュリティ → デバイス セキュリティ → コア分離の詳細)。
  • レジストリで有効化状態を確認(管理者 PowerShell): $key = 'HKLM:\SYSTEM\CurrentControlSet\Control\CI\Config' Get-ItemProperty -Path $key -Name VulnerableDriverBlocklistEnable -ErrorAction SilentlyContinue

4) PowerShell 本体の整合性を保証(公式再インストール)

PowerShell 7.x は 公式チャネル(WinGet / Microsoft Store / 公式 MSI)で入れ直し、正規ファイルのみを残します。

# 既存 7.x の把握
winget list Microsoft.PowerShell

# 再インストール(管理者推奨)

winget install --id Microsoft.PowerShell --source winget --silent

# インストール後の検証

pwsh -v
(Get-Command pwsh).Source

5) ベンダーへサンプル提出

誤検知の可能性がどうしても捨てきれない場合は、隔離ファイルをアンチウイルス ベンダーに提出し、最終判定を依頼します。復元して日常運用を続けるのは避けてください。

実務で役立つ確認ポイント(チェックリスト)

カテゴリチェック内容OK の目安NG のシグナル
ファイル配置C:\Windows\System32\drivers\PowerShell.sys などシステム ディレクトリ配下に無いか存在しない存在する/タイムスタンプが最近
署名デジタル署名の発行者・有効性・タイムスタンプ正規ベンダーの有効署名無署名/自己署名/失効/タイムスタンプ不整合
サービス登録Services レジストリに不審なエントリ(ImagePath に powershell.sys)該当なし存在(起動タイプ:自動/ブート等)
関連ソフト直近で導入したゲーム/ドライバー/ユーティリティの棚卸し不要なものは削除古い OC ツール・非公式改造ツール
システム整合性SFC / DISM によるシステム修復整合性 OK破損が検出・修復された(再起動後要再確認)
# システムファイル検証(管理者 PowerShell)
sfc /scannow
DISM /Online /Cleanup-Image /RestoreHealth

エンタープライズ/情シス向け:再発防止の設計

導入・更新の統制

  • PowerShell・開発者ツールは 公式ストア/WinGet/社内リポジトリのみ許可。
  • ローカル管理者の乱用を防ぎ、標準ユーザー + 昇格申請の運用へ。

ドライバー インストールの制御

  • グループ ポリシー / Intune で 未署名・脆弱ドライバーの読み込み防止を必須化。
  • WDAC(Windows Defender Application Control)で 許可リスト方式を適用(段階導入)。

検知・可視化

  • EDR(Defender for Endpoint 等)でドライバー読み込みイベントを監視し、未知ベンダー署名をアラート。
  • ソフトウェア台帳/資産管理で ハードウェア制御系ツールを分類・承認制に。

インシデント対応標準手順(SOP)

  1. 隔離維持 → ボリューム シャドウ コピー/バックアップの健全性確認
  2. 感染端末のネットワーク分離(必要に応じて)
  3. マルチベンダー スキャン & EDR ハンティング
  4. 起点アプリ(ゲーム/ユーティリティ/クラック等)の特定と除去
  5. ブロックリスト・WDAC ポリシーの適用/強化、再発監視

ケース別の具体策

ケース A:ゲーム導入直後に検出

  • 当該ゲームのアンチチート/ドライバー構成を調査。不要ならアンインストール。
  • GPU 関連ユーティリティ、モニタリング(温度/ファン)、RGB 制御も疑う。
  • 再起動 → 再スキャンで消えるか確認。消えなければ他の原因を追う。

ケース B:PowerShell 7.x 自動更新の直後に検出

  • 7.x はドライバーを導入しないため、別要因(同名ドライバー/偽装)を第一に疑う。
  • PowerShell 7.x を公式手段で再インストールし、整合性を確保。

ケース C:企業内で複数端末から同時多発

  • 共通の配布物(ゲーム、ツール、非承認ドライバー)を棚卸し。
  • EDR で同名ファイルのハッシュ・設置パス・親プロセスを相関分析。
  • WDAC/ブロックリストを一斉適用し横展開を封じる。

「誤検知かどうか」を科学的に詰める

誤検知の判断は署名・ハッシュ・出自・挙動の総合評価で行います。下記のような「定量的指標」を積み上げましょう。

評価軸データの取り方誤検知方向の根拠マルウェア方向の根拠
デジタル署名Authenticode の発行者/有効性/タイムスタンプ正規発行者・有効・時刻一致無署名/失効/自己署名/時刻矛盾
ハッシュGet-FileHash の結果を隔離前・後で比較正規配布物と一致(通常 .sys には該当しない)未知ハッシュ、端末ごとに異なる
設置パスシステム直下/一時フォルダ/ユーザープロファイル配下など(該当なし)C:\Windows\System32\drivers 等へ不自然に生成
起点プロセスEDR のプロセス ツリー / 親プロセス解析正規セットアップからの生成不審プロセス経由、自己複製
アンインストール影響関連アプリ除去で再現性を確認除去後に検出終息除去後も持続(別マルウェアの可能性)

現場でそのまま使えるコマンド集

PowerShell の健全性チェック

# 実体のパスとバージョン
(Get-Command pwsh).Source
$PSVersionTable

# 5.1 と 7.x の共存状況を確認

Get-Item 'C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe' | Select-Object FullName, @{N='Version';E={$*.VersionInfo.FileVersion}}
Get-Item 'C:\Program Files\PowerShell\7\pwsh.exe' | Select-Object FullName, @{N='Version';E={$*.VersionInfo.FileVersion}}

不審ドライバーの探索

# drivers フォルダ内で PowerShell.sys を探索
Get-ChildItem 'C:\Windows\System32\drivers' -Filter 'powershell.sys' -Force -ErrorAction SilentlyContinue

# レジストリ Services から ImagePath に powershell.sys を含む項目を抽出

Get-ChildItem 'HKLM:\SYSTEM\CurrentControlSet\Services' |
ForEach-Object {
$p = (Get-ItemProperty $*.PsPath -ErrorAction SilentlyContinue).ImagePath
if ($p -and $p -match 'powershell.sys') { [PSCustomObject]@{ ServiceName=$*.PSChildName; ImagePath=$p } }
} | Format-Table -AutoSize

隔離前の事前採取(可能な場合)

# ハッシュとメタ情報を CSV へ
$item = Get-Item 'C:\Windows\System32\drivers\PowerShell.sys' -ErrorAction SilentlyContinue
if ($item) {
  $hash = (Get-FileHash $item.FullName -Algorithm SHA256).Hash
  [PSCustomObject]@{
    Path = $item.FullName
    Size = $item.Length
    Created = $item.CreationTimeUtc
    Modified = $item.LastWriteTimeUtc
    SHA256 = $hash
  } | Export-Csv "$env:PUBLIC\powershell_sys_inventory.csv" -NoTypeInformation -Encoding UTF8
}

よくある質問(FAQ)

Q. PowerShell.sys を復元すれば問題ありませんか?

推奨しません。ファイル実体が不明なまま復元すると、再感染や権限昇格の足掛かりを与えるおそれがあります。まず署名・ハッシュ・設置元を検証し、必要に応じてベンダーへサンプル提出してください。

Q. PowerShell の再インストールで直りますか?

PowerShell 自体はドライバーを持たないため、再インストールは「PowerShell 本体の整合性担保」としては有効ですが、PowerShell.sys の原因を直接解消するとは限りません。別ソフトやマルウェアの排除が本筋です。

Q. 誤検知の可能性は?

ゼロではありませんが、PowerShell.sys という名称の時点で本物の PowerShell 由来である可能性は低いです。隔離維持、二重三重のスキャン、署名・ハッシュの検証を優先してください。

Q. 何が危険なのですか?

カーネル ドライバーは OS の心臓部で動きます。脆弱ドライバーは攻撃者に強力な権限を与えうるため、“無害に見えるが危険”というセキュリティ・モデル上のリスクがあります。名前が「PowerShell」であっても、正規とは無関係です。

まとめ:結論と決断の指針

  • PowerShell に「PowerShell.sys」という正規ファイルは存在しない。
  • 検出は誤検知よりも、サードパーティ製ドライバーやマルウェアの混入を疑うのが妥当。
  • 隔離を維持しつつ、署名/ハッシュ/サービス登録/関連ソフトを総点検する。
  • フルスキャン(Defender オフライン等)、Windows Update、脆弱ドライバー・ブロックリストを徹底。
  • PowerShell 7.x は公式チャネルで再インストールし、正規ファイルの状態を保証する。
  • 企業環境は WDAC/ポリシー化で再発を封じる。

判断に迷う場合は「復元しない」「まず疑う」「証拠を取る」の 3 原則を採用してください。実体と起点を突き止めてから復旧・継続運用に入るのが、損害と再発の最小化に直結します。

付録:トラブルシューティング手順書(現場用テンプレ)

  1. アラート受領:対象端末/ユーザー/発生時刻/検出名/隔離パスを記録。
  2. 端末隔離の要否を判断(業務影響とリスクを比較)。
  3. ファイル真正性の確認(署名/ハッシュ/タイムスタンプ)。
  4. サービス/ドライバー登録と読み込み履歴(イベントログ)を収集。
  5. 関連ソフト(直近導入、ゲーム/OC/監視系)のアンインストール検証。
  6. マルチエンジンでフルスキャン、Defender オフライン スキャン実施。
  7. Windows Update → 再起動 → 再スキャン。
  8. PowerShell 7.x を公式チャネルで再インストール(整合性担保)。
  9. 必要に応じてベンダーへサンプル提出、EDR で横展開調査。
  10. 教訓化:WDAC/ブロックリスト/GPO 強化、台帳更新、ユーザー教育。

付録:管理者が押さえるべきコマンドと UI パス

目的コマンド/操作補足
Defender オフライン スキャンWindows セキュリティ → ウイルスと脅威の防止 → スキャンのオプション → オフライン スキャン再起動が必要
脆弱ドライバー ブロックリストWindows セキュリティ → デバイス セキュリティ → コア分離の詳細 → ブロックリスト最新の Windows Update を適用
PowerShell 7.x の再導入winget install --id Microsoft.PowerShell管理者シェル推奨
サービス登録の確認reg / PowerShell で HKLM\SYSTEM\CurrentControlSet\Services を確認ImagePath に powershell.sys が無いか
イベントログイベント ビューアー → Windows ログ → システムドライバー読み込み/失敗イベント

最後の一押し:安全な意思決定のための短評

「PowerShell.sys」は名称のインパクトが強く、PowerShell 更新と時期が重なると因果関係を誤認しがちです。しかし技術的事実は明快で、PowerShell はドライバーを必要としません。この前提に立てば、取るべき行動は自然に定まり、復元・放置というリスクの高い選択肢を避けられます。隔離を維持し、証拠を揃え、正規の経路で整合性を回復する——それが最短で最も安全な解決策です。

この記事を書いた人

実務の現場で詰まりがちなポイントを地図にするITブログ「IT trip」を運営。Windows/Office(Teams・Excel)からSQL、サーバ運用、ガジェットまで、再現性のある手順と“なぜそうなるか”を丁寧に解説します。読んだらすぐ試せること、そして迷った人の次の一歩が見えることを大切にしています。

コメント

コメントする

目次