PR 本記事には広告(Amazonアソシエイト・もしもアフィリエイト・A8.net等)が含まれます。掲載情報の正確性には努めていますが、商品の詳細は必ずリンク先で最新情報をご確認ください。
CTF・セキュリティ学習

【Windows Token・UAC編】Windows特権の中枢を握る|CTF思考フレームワーク P04

かも次郎とアンペンが「Windows Token」を解説するマスコットイラスト
安全に生きたい編集部

こんにちは、アンペンです!権限昇格ルート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対策チェックリスト
難易度:中級〜上級 所要時間:14分 体験:自分のWindows VM・CTFのみ おすすめ:P03の後

📖 はじめての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の名前付きパイプ)、RoguePotatoGodPotatoなど。前提条件で使い分ける
  • ③整合性レベル(Integrity Level):プロセスにLow/Medium/High/Systemの階層。一般操作はMedium、管理者の昇格済み操作はHigh。UACはこのMedium→Highを仲介する関門
  • ④UACバイパス:自動昇格(auto-elevate)する署名済みバイナリ(fodhelper.exe等)が読むレジストリを書き換え、確認ダイアログなしでHigh整合性のコマンドを実行する
  • ⑤前提の理解:UACバイパスは多くが「管理者グループに属すが未昇格」の状態から上がる手口。Microsoftは「UACはセキュリティ境界ではない」と位置づけている
トークン悪用とUACバイパスの2経路がSYSTEMへ収束するWindows権限昇格の図
図1:なりすましと関門迂回、2つの昇格軸

ここで覚える用語:アクセストークンとSeImpersonate
意味:アクセストークンは、プロセスが「誰として・どんな権限で」動くかを示すIDの束です。SeImpersonatePrivilegeは「認証してきたクライアントになりすます」権限で、IISアプリプールやMSSQLなどのサービスアカウントが標準で持つことが多い。
例:SeImpersonateを持つサービスが、SYSTEMで動く相手を攻撃者の窓口へ認証させる→そのSYSTEMトークンをImpersonate→SYSTEM権限のプロセスを起動(PrintSpoofer/GodPotato)。
使いどころ:守る側は不要なアカウントからSeImpersonateを外し、サービスアカウントを最小権限・gMSAで運用します。

なぜ「なりすまし」で最強権限が取れるのか

🪪 たとえるなら、入館バッジのすり替え

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

代理受付係がSYSTEMの入館バッジを写し取りVIPパスで管理者ドアを通る入館バッジのたとえ図
図2:トークン=入館バッジ、なりすましで奪う

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を点検

やってみよう / 自分のWindows VM・CTFのみ

「トークンとUACの隙」を列挙して、修正まで体験する

対象は必ず自分で構築したWindows VMかCTFです。攻撃者がSYSTEMへ上がる順で、自分の環境の隙間を点検し、最後に塞ぎます。各ステップに「なぜやるか」を添えました。

  1. whoami /privSeImpersonate/SeAssignPrimaryTokenの有無を確認 → なぜ:トークン悪用の前提を知るため
  2. whoami /groupsで整合性レベル(Mandatory Label)を確認 → なぜ:今どのレベルで動いているか把握するため
  3. サービスアカウント(IIS/MSSQL)の保有権限を点検 → なぜ:Potato系の起点になりやすいため
  4. WinPEAS/PowerUpでトークン・UAC関連の隙を列挙 → なぜ:隙間を広く検出するため
  5. UAC設定(EnableLUA/ConsentPromptBehaviorAdmin)を確認 → なぜ:確認の厳しさを見るため
  6. auto-elevateするバイナリ(fodhelper/eventvwr等)の挙動を理解 → なぜ:バイパス対象を知るため
  7. VM上でPoCを観察し、ログ(イベント4688/Sysmon)を確認 → なぜ:検知の手がかりを掴むため
  8. 見つけた隙を是正(SeImpersonate削除・UAC最高・パッチ) → なぜ:守りを手で確認するため
対象は必ず自分のWindows VM・CTFのみ。他人のPCでの試行は不正アクセスです。「できる」と「やってよい」は別です。

守る側:なりすましと関門迂回を塞ぐ

トークン悪用・UAC対策チェックリスト
  • SeImpersonate/SeAssignPrimaryTokenを削減:不要なアカウントから権限を外す
  • サービスアカウントを最小権限に:gMSAを使い、LocalSystem乱用を避ける
  • UACを最高レベル(常に通知)に:自動昇格の余地を減らす
  • 日常操作は標準ユーザーで:管理者アカウントと作業アカウントを分離する
  • レジストリ改ざんを監視:HKCU\Software\Classes配下の不審な書込みを検知
  • LOLBin・不審な子プロセスを検知:Sysmon(イベント1)やEDRでfodhelper→cmd等を捕捉
  • パッチ適用+不要サービス停止:Print Spoolerが不要なら止め、Potato系の前提を塞ぐ
  • 監査ログを有効化:プロセス作成(4688)・特権使用を記録し定期点検する
特権削減・サービス最小権限・UAC最高・レジストリ監視・パッチの守り側チェックリスト図
図3:なりすましと関門迂回を塞ぐチェックリスト

バッジのすり替えと、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と守りの視点で掘り下げます。

次に読みたい記事

参考資料

記事URLをコピーしました