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.exe | powershell.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」関連で検知 | 古い署名、自己署名、署名無効/不明、システムディレクトリ直下に出現 | 隔離を維持、フルスキャン、脆弱ドライバー・ブロックリストを有効化 |
| 本物の誤検知(稀) | ベンダーが即日シグネチャを修正、正規ソフトのファイル名と一致 | 正規ベンダーの有効なデジタル署名、整合するハッシュ | 隔離サンプルをベンダーへ提出し最終判定を依頼 |
まず行うべき一次切り分け
- 隔離のままにする(復元しない):業務上致命でない限り復元は避ける。
- ファイルの真正性を確認:
- プロパティ → 「デジタル署名」タブで発行者・タイムスタンプを確認(無署名/自己署名/失効は危険)。
- PowerShell でハッシュと署名を確認:
Get-FileHash -Algorithm SHA256 "C:\Windows\System32\drivers\PowerShell.sys" Get-AuthenticodeSignature "C:\Windows\System32\drivers\PowerShell.sys" | Format-List
- どのサービス/ドライバーとして読み込まれるか確認:
# 登録済みカーネル ドライバーのうち、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 - 最近入れたソフトの棚卸し:ゲーム、OC ツール、RGB コントローラ、ファン制御、ハードウェア監視系を重点確認。
- イベントログでドライバー読み込みの痕跡を探す:
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)
- 隔離維持 → ボリューム シャドウ コピー/バックアップの健全性確認
- 感染端末のネットワーク分離(必要に応じて)
- マルチベンダー スキャン & EDR ハンティング
- 起点アプリ(ゲーム/ユーティリティ/クラック等)の特定と除去
- ブロックリスト・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 原則を採用してください。実体と起点を突き止めてから復旧・継続運用に入るのが、損害と再発の最小化に直結します。
付録:トラブルシューティング手順書(現場用テンプレ)
- アラート受領:対象端末/ユーザー/発生時刻/検出名/隔離パスを記録。
- 端末隔離の要否を判断(業務影響とリスクを比較)。
- ファイル真正性の確認(署名/ハッシュ/タイムスタンプ)。
- サービス/ドライバー登録と読み込み履歴(イベントログ)を収集。
- 関連ソフト(直近導入、ゲーム/OC/監視系)のアンインストール検証。
- マルチエンジンでフルスキャン、Defender オフライン スキャン実施。
- Windows Update → 再起動 → 再スキャン。
- PowerShell 7.x を公式チャネルで再インストール(整合性担保)。
- 必要に応じてベンダーへサンプル提出、EDR で横展開調査。
- 教訓化: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 はドライバーを必要としません。この前提に立てば、取るべき行動は自然に定まり、復元・放置というリスクの高い選択肢を避けられます。隔離を維持し、証拠を揃え、正規の経路で整合性を回復する——それが最短で最も安全な解決策です。

コメント