【Windows Token・UAC編】Windows特権の中枢を握る|CTF思考フレームワーク P04
こんにちは、アンペンです!権限昇格ルートP04はWindows Token・UAC編。前回ちらっと出たトークンの悪用と、Windows特有の関門UAC(ユーザーアカウント制御)を掘り下げます。テーマは『一般ユーザーやサービスアカウントからSYSTEMへの最後のひと押し』。なりすましの理屈と守り方をセットで学びましょう。

トークンを『奪う』ってどういうこと?パスワードを知らなくても他人になれちゃうの?

そう、アクセストークンは『ログイン後のIDバッジ』みたいなもの。SeImpersonate権限を持つサービスは『客になりすます』権限があってね、SYSTEMで動く相手を自分の窓口に呼び寄せ、そのバッジを写し取るんだ。これがPotato系攻撃。もう一つのUACは『管理者確認の関門』。署名済みアプリの自動通過を悪用すると、確認なしで上がれてしまう。両方とも守りの理屈で読み解こう。
Windows Token・UACとは「アクセストークン(ユーザーのIDと権限のセット)を悪用したり、UAC(管理者確認の関門)を迂回して、より高い権限を得る昇格テクニック」のこと。中心は2軸——①トークン悪用(SeImpersonate権限を持つサービスアカウントから、なりすましでSYSTEMトークンを奪うPotato系)、②UACバイパス(自動昇格する署名済みバイナリ+レジストリ改ざんで、確認ダイアログを出さずにHigh整合性へ)。定番はPrintSpoofer/JuicyPotato/GodPotato。守る側は『SeImpersonateを不要なアカウントから外す+サービスアカウント最小権限+UACを最高レベル+LOLBin監視+パッチ』。
この記事で分かること
- アクセストークンとは何か、なぜ「なりすまし」が昇格になるのか
- SeImpersonate権限とPotato系攻撃(PrintSpoofer/JuicyPotato)の発想
- 整合性レベル(Integrity Level)とUACの関係
- UACバイパスの基本原理(auto-elevate+レジストリハイジャック)
- 守る側のトークン悪用・UAC対策チェックリスト
📖 はじめてのWebセキュリティP04|Windows Token・UAC編
なりすましと関門迂回の理屈を読み、SYSTEMへの最後のひと押しを塞ぐ。 シリーズ一覧を見る →
⚠️ 大事なお約束
トークン悪用やUACバイパスは侵入後の手法です。他人のPCやサーバで試すのは不正アクセス禁止法に直結します。本記事の手順は自分で構築したWindows VM・CTF・書面で許可された検証環境に限定してください。本記事の目的は管理者・防御側の理解です。「できる」と「やってよい」は全く別です。
トークン悪用とUACバイパス:2つの昇格軸
- ①トークン悪用(なりすまし):
SeImpersonate/SeAssignPrimaryToken権限を持つサービスアカウント(IIS・MSSQL等)が起点。SYSTEMで動く相手を攻撃者の窓口に認証させ、そのSYSTEMトークンをImpersonateしてSYSTEMプロセスを起動する - ②Potato系ツール:
JuicyPotato(DCOM/NTLM)、PrintSpoofer(Print Spoolerの名前付きパイプ)、RoguePotato、GodPotatoなど。前提条件で使い分ける - ③整合性レベル(Integrity Level):プロセスにLow/Medium/High/Systemの階層。一般操作はMedium、管理者の昇格済み操作はHigh。UACはこのMedium→Highを仲介する関門
- ④UACバイパス:自動昇格(auto-elevate)する署名済みバイナリ(
fodhelper.exe等)が読むレジストリを書き換え、確認ダイアログなしでHigh整合性のコマンドを実行する - ⑤前提の理解:UACバイパスは多くが「管理者グループに属すが未昇格」の状態から上がる手口。Microsoftは「UACはセキュリティ境界ではない」と位置づけている

ここで覚える用語:アクセストークンとSeImpersonate
意味:アクセストークンは、プロセスが「誰として・どんな権限で」動くかを示すIDの束です。SeImpersonatePrivilegeは「認証してきたクライアントになりすます」権限で、IISアプリプールやMSSQLなどのサービスアカウントが標準で持つことが多い。
例:SeImpersonateを持つサービスが、SYSTEMで動く相手を攻撃者の窓口へ認証させる→そのSYSTEMトークンをImpersonate→SYSTEM権限のプロセスを起動(PrintSpoofer/GodPotato)。
使いどころ:守る側は不要なアカウントからSeImpersonateを外し、サービスアカウントを最小権限・gMSAで運用します。
なぜ「なりすまし」で最強権限が取れるのか
アクセストークンは、オフィスの入館バッジ(IDカード)のようなものです。一度ログイン(認証)すれば、どこへ入れるか・何ができるかはこのバッジで決まります。ここでSeImpersonate権限を持つサービスアカウントは、受付に立つ『来客になりすませる代理受付係』のような存在。攻撃者はこの係を使い、最強の来客SYSTEMを電話で受付に呼び出します。SYSTEMが受付にバッジを差し出した瞬間、係はそれを写し取って自分の首にさげてしまう——これがPotato系攻撃の発想です。一方UACは、受付の奥にある『管理者専用ドアの確認窓口』。普通は「管理者の操作ですか?」と確認されますが、一部のVIPパス(自動昇格する署名済みアプリ)は確認なしで通れます。UACバイパスは、そのVIPパスに自分の用事をこっそり背負わせて通り抜ける手口。だから守る側は、代理受付の権限を絞り、VIPパスの行き先(レジストリ)を勝手に書き換えられないようにするのです。

UACと整合性レベル:管理者確認の関門
トークンと並ぶもう一つの主役がUAC(User Account Control)です。Windowsはプロセスごとに整合性レベルを割り当て、一般操作はMedium、管理者として昇格した操作はHighで動きます。UACはこのMedium→Highの昇格を仲介する確認の関門。攻撃者は、確認なしで自動昇格する署名済みバイナリの『癖』を悪用して、この関門を素通りしようとします。
ここで覚える用語:UACと整合性レベル(Integrity Level)
意味:WindowsはプロセスにLow/Medium/High/Systemの整合性レベルを付与します。一般操作はMedium、管理者の昇格済み操作はHigh。UACはMedium→Highの昇格を仲介する確認の関門です。
例:一部のMS署名バイナリは確認なしで自動昇格(auto-elevate)します。攻撃者はfodhelper.exe等が読むレジストリキー(HKCU\Software\Classes\...)を書き換え、自分のコマンドをHigh整合性で実行=UACバイパス。
使いどころ:UACバイパスは「管理者グループに属すが未昇格」から上がる手口で、Microsoftは「UACはセキュリティ境界ではない」とします。守る側はUACを最高(常に通知)にし、日常は標準ユーザーで運用します。
CTFでやってみよう:自分のWindows VMでトークンとUACを点検
「トークンとUACの隙」を列挙して、修正まで体験する
対象は必ず自分で構築したWindows VMかCTFです。攻撃者がSYSTEMへ上がる順で、自分の環境の隙間を点検し、最後に塞ぎます。各ステップに「なぜやるか」を添えました。
whoami /privでSeImpersonate/SeAssignPrimaryTokenの有無を確認 → なぜ:トークン悪用の前提を知るためwhoami /groupsで整合性レベル(Mandatory Label)を確認 → なぜ:今どのレベルで動いているか把握するため- サービスアカウント(IIS/MSSQL)の保有権限を点検 → なぜ:Potato系の起点になりやすいため
WinPEAS/PowerUpでトークン・UAC関連の隙を列挙 → なぜ:隙間を広く検出するため- UAC設定(
EnableLUA/ConsentPromptBehaviorAdmin)を確認 → なぜ:確認の厳しさを見るため - auto-elevateするバイナリ(
fodhelper/eventvwr等)の挙動を理解 → なぜ:バイパス対象を知るため - VM上でPoCを観察し、ログ(イベント4688/Sysmon)を確認 → なぜ:検知の手がかりを掴むため
- 見つけた隙を是正(SeImpersonate削除・UAC最高・パッチ) → なぜ:守りを手で確認するため
守る側:なりすましと関門迂回を塞ぐ
- SeImpersonate/SeAssignPrimaryTokenを削減:不要なアカウントから権限を外す
- サービスアカウントを最小権限に:
gMSAを使い、LocalSystem乱用を避ける - UACを最高レベル(常に通知)に:自動昇格の余地を減らす
- 日常操作は標準ユーザーで:管理者アカウントと作業アカウントを分離する
- レジストリ改ざんを監視:
HKCU\Software\Classes配下の不審な書込みを検知 - LOLBin・不審な子プロセスを検知:Sysmon(イベント1)やEDRで
fodhelper→cmd等を捕捉 - パッチ適用+不要サービス停止:Print Spoolerが不要なら止め、Potato系の前提を塞ぐ
- 監査ログを有効化:プロセス作成(4688)・特権使用を記録し定期点検する


バッジのすり替えと、VIPパスの悪用…仕組みが分かると、どこを締めればいいか見えてくるね!

その調子!次はP05、AD・Kerberos編。1台のSYSTEMからドメイン全体へ——BloodHoundで攻撃経路を可視化し、Kerberosの仕組みと守りを読み解く。権限昇格ルートの総仕上げだよ。
まとめ:Windowsは『なりすましと関門の癖』を突かれる
- アクセストークンは『ログイン後のIDバッジ』。なりすましが昇格になる
SeImpersonateを持つサービスからのPotato系がSYSTEMへの定番- UACはMedium→Highを仲介する関門。整合性レベルの理解が鍵
- UACバイパスはauto-elevate+レジストリ改ざんで確認を素通り
- 守りは権限削減・最小権限・UAC最高・監視・パッチの総合戦
次はP05、AD・Kerberos編。1台のSYSTEMからドメイン全体へ広がる攻撃経路を、BloodHoundと守りの視点で掘り下げます。
