権限昇格:侵入から「完全な支配」への転換点
権限昇格(Privilege Escalation)とは、初期侵入で得た限定的な権限(www-data や一般ドメインユーザーなど)から、OS を完全に制御できる root(Linux)や SYSTEM / Administrator(Windows)へと昇格するポストエクスプロイトの最重要フェーズです。MITRE ATT&CK では TA0004 Privilege Escalation として体系化されています。
「横展開」や「LSASSメモリからの認証情報ダンプ」といった次のフェーズに進むには、ローカルマシンの最高権限が前提となります。言い換えれば、権限昇格を封じることが、侵害を「足場の確立」で止める最も効果的な防御ラインです。
Linux におけるローカル権限昇格(LPE)
Linux の権限昇格の多くは、既製のツールを展開するのではなく、システムの「設定ミス(Misconfiguration)」を突く**Living off the Land(環境寄生型)**の手口です。
1. SUID/SGID バイナリの悪用(T1548.001)
SUID(Set-User-ID)ビットが設定されたバイナリは、実行時に所有者(通常は root)の権限で動作します。正規の用途では必要な仕様ですが、このビットが不要なバイナリに設定されていた場合、対話型シェルを生成(スポーン)する踏み台になります。
# スキャン: rootが所有し、SUIDが設定されたファイルをシステム全体から検索する
find / -perm -4000 -type f 2>/dev/null
# 攻撃: GTFOBins等の既知のエクスプロイトパターンを利用
# /usr/bin/find が SUID で実行される場合、内部コマンド実行機能で bash を呼び出す
/usr/bin/find . -exec /bin/sh -p ; -quit
# 結果:
whoami
# root
GTFOBins は、正規のUNIXバイナリ(awk, tar, vim 等)が SUID や sudo で実行可能な環境において、それを悪用してシェルを奪取・脱出する手法をまとめたチートシートです。レッドチーム・ブルーチーム双方の必須知識であり、防御側はこのリストを「封じるべき設定ミスの一覧」として活用できます。
2. sudoers の過剰権限(T1548.003)
/etc/sudoers で特定コマンドを NOPASSWD 許可している場合、そのコマンド自体のシェル呼び出し機能を利用して root 権限が奪われることがあります。
# ユーザーの sudo 権限を確認
sudo -l
# /usr/bin/vim への sudo 実行が許可されていた場合
sudo vim -c ’:!/bin/bash’
3. cron ジョブとPATHインジェクション(T1053.003)
root が定期実行する cron ジョブが相対パスでコマンドを呼んでいるか、スクリプトの格納ディレクトリのパーミッションが緩い場合、攻撃者は自前のバックドアスクリプトを差し込み、次の実行タイミングで root シェルを獲得します。時間差で発火するため、侵害の痕跡が残りにくいのが厄介な点です。
Windows におけるローカル権限昇格
Windows の権限昇格は、レジストリ・サービスアーキテクチャ・DLL ローディングの仕様を突きます。
1. UAC(User Account Control)バイパス(T1548.002)
ユーザーがローカルの Administrators グループに属していても、UAC によって特権トークンは通常剥奪されています。攻撃者は「オートエレベート(自動昇格)機能」を持つ正規バイナリ(fodhelper.exe など)を悪用し、UAC プロンプトを一切表示させずにフル Administrator セッションを取得します。
# 標的となるレジストリ(HKCUクラス)に悪意のあるエントリ(cmd.exe)を書き込む
New-Item “HKCU:\Software\Classes\ms-settings\Shell\Open\command” -Force Set-ItemProperty “HKCU:\Software\Classes\ms-settings\Shell\Open\command” -Name “(default)” -Value “cmd /c start cmd.exe” -Force Set-ItemProperty “HKCU:\Software\Classes\ms-settings\Shell\Open\command” -Name “DelegateExecute” -Value "" -Force
# Auto-Elevate属性を持つfodhelperを起動すると、UACなしで書き込んだコマンド(High IL)が発火する
Start-Process “C:\Windows\System32\fodhelper.exe”
2. DLL ハイジャッキング(T1574.001)
Windows プログラムが DLL を読み込む際、「現在のディレクトリ → PATH 上のディレクトリ」という順番で検索します。SYSTEM 権限で動作する正規サービスのフォルダに書き込み権限がある場合、同名の悪意ある DLL を配置するだけで、次回サービス起動時に最高権限でコードが実行されます。
3. Unquoted Service Path(T1574.010)
サービスのバイナリパスにスペースが含まれているにもかかわらず、ダブルクォーテーションで囲まれていない場合(例: C:\Program Files\My App\service.exe)、Windows は C:\Program.exe を先に探して実行しようとします。途中のフォルダに書き込み権限があれば、Program.exe という名前で自作の実行ファイルを置くだけで SYSTEM 権限が得られます。
権限昇格の自動化と、EDRの監視網
スキャナーによる Enumeration(情報収集)
侵入後、レッドチームは即座に以下のような自動列挙スクリプトを展開し、設定ミスを瞬時に洗い出します。
- WinPEAS / LinPEAS(PEASS-ng)
- PowerUp(PowerSploit/Empire)
- Linux Smart Enumeration (LSE)
ブルーチームの視点
最新のEDRはシグネチャ検知に留まらず、プロセスツリーの異常な振る舞い(例:fodhelper.exe の子として cmd.exe がスポーンされる)をリアルタイムで検出・遮断します。
- 最小権限の原則: 一般ユーザーからローカル管理者権限を例外なく剥奪する。これだけで権限昇格の大半の経路を塞げます。
- Sysmon / EventID 4688 の監視: UAC バイパス系の不審なプロセスツリー(
fodhelper.exe→cmd.exeなど)を SIEM でアラート化する。 - LAPS(Local Administrator Password Solution)の導入: ドメイン環境全体のローカル Administrator パスワードを端末ごとにランダム化・自動ローテーションし、1台が侵害されても横展開(Pass-the-Hash)を封じる。
【確認問題】Windows環境における攻撃者が、ユーザー権限のシェルからSYSTEM権限を奪取するために悪用する「Unquoted Service Path(引用符のないサービスパス)」の典型的な発動条件はどれですか?