システムに侵入した攻撃者が、次に何を狙うか考えたことはありますか。
最初の侵入ポイントで得られるのは、多くの場合、一般ユーザー権限だけです。フィッシングメールで感染したマルウェア、Webアプリの脆弱性を突いて得たWebサーバーの実行ユーザー——その権限では、攻撃者はまだ大した被害を起こせません。しかし攻撃者はそこで止まらず、管理者権限(root/SYSTEM)の取得を目指します。この行為を権限昇格(Privilege Escalation)と呼びます。
この記事では、権限昇格の基本概念・攻撃者が実際に使う手口・今日から実践できる防御策を現場目線で解説します。サーバー管理者・情シス担当者・セキュリティ資格の学習中の方にも役立つ内容です。

権限昇格とは?なぜ重要なのか
権限昇格とは、本来アクセスできないはずのより高い権限を不正に取得する行為です。
コンピュータシステムでは、ユーザーごとに「できること」を制限するアクセス制御が機能しています。一般ユーザーはファイルを読み書きできるが、システム設定は変更できない——この制限が権限昇格攻撃で突破されます。
権限昇格を許すと、攻撃者は次のことが可能になります。
・バックドアの設置: 永続的な不正アクセス経路を作られ、気づかれないまま長期間潜伏される
・ランサムウェアの全展開: システム全体のファイルを暗号化される
・ログの改ざん・消去: 侵入痕跡を隠滅されて原因究明が困難になる
・横移動(ラテラルムーブメント): 同一ネットワーク内の他のサーバーへの侵害が拡大する
・認証情報の大量窃取: /etc/shadow(Linuxのパスワードハッシュ)やLSASSメモリを読まれる
権限昇格は単体の脆弱性ではなく、攻撃者が侵入後に必ず試みる「次の一手」です。初期侵入を防ぐことが最重要ですが、侵入後に権限昇格を食い止める多層防御の設計も同様に重要です。
攻撃の仕組み(敵を知る)
1. 垂直権限昇格と水平権限昇格の違い
権限昇格には2つの方向性があります。
| 種類 | 内容 | 典型例 |
|---|---|---|
| 垂直権限昇格(Vertical PE) | 低権限ユーザーが管理者/root権限を取得する | 一般ユーザー→root、Webサーバープロセス→OS管理者 |
| 水平権限昇格(Horizontal PE) | 同じ権限レベルのまま他ユーザーのデータや操作権を取得する | ユーザーAがユーザーBの個人情報・ファイルにアクセス |
攻撃者が最終的に狙うのは垂直昇格でroot/SYSTEM権限を取得することです。そのために「水平昇格を繰り返してより高権限のアカウントを乗っ取る」という段階を踏むこともあります。
2. 攻撃者が使う主な手口
① SUIDビットの悪用(Linux)
SUID(Set User ID)は、ファイルの所有者権限でプログラムを実行させる仕組みです。rootが所有するSUID付きのバイナリを悪用することで、一般ユーザーがrootシェルを起動できる場合があります。GTFOBins(実行ファイルを利用した権限昇格手法をまとめたサイト)では、findやvimなど日常的なツールを使った昇格手法が多数公開されています。
# 攻撃者がSUIDビット付きファイルを列挙する操作 find / -perm -4000 -type f 2>/dev/null # 例: /usr/bin/find にSUIDが設定されていた場合(危険な設定) /usr/bin/find . -exec /bin/sh \; -quit # → rootシェルが起動してしまう
LinuxのSUID/SGIDビットの安全な管理については、SUID/SGIDビット脆弱性と対策の記事も参考にしてください。
② sudoers設定ミスの悪用
/etc/sudoersファイルでコマンドの制限が不十分な場合、攻撃者はその許可されたコマンドを使ってrootシェルを取得できます。特にNOPASSWD設定と組み合わさると危険です。
# 危険なsudoers設定の例(このように書いてはいけない) # user1 ALL=(ALL) NOPASSWD: /usr/bin/vim # 上記設定があった場合、攻撃者はvimのシェル実行機能でrootを取得できる sudo vim -c ':!/bin/bash' # → rootシェルが起動してしまう # 正しい確認方法: 現在のsudo権限を確認する sudo -l
sudoersの安全な設定方法については、visudo・sudoersで権限昇格を防ぐガイドで詳しく解説しています。
③ カーネル脆弱性の悪用
OS本体のカーネルに脆弱性があると、一般ユーザー権限から直接rootへの昇格が可能です。過去には「Dirty COW(CVE-2016-5195)」のように、Linuxカーネルの長年潜伏していた脆弱性がroot昇格に悪用された事例があります。パッチ未適用のシステムは常にこのリスクを抱えています。
④ 環境変数・PATH操作
管理者権限で実行されるスクリプトや特権プログラムが、コマンドをフルパス指定せずに呼び出している場合、攻撃者がPATH環境変数を操作して悪意あるコマンドを差し込める場合があります。
⑤ Windowsの主な権限昇格手口
Windowsシステムでは次のような手口が知られています。
・DLLハイジャッキング: アプリがDLLを探索するパスに悪意あるDLLを置く
・サービスバイナリの置き換え: 低権限ユーザーが書き込めるパスにサービスの実行ファイルが置かれている場合に悪用する
・AlwaysInstallElevated: インストーラーを常にSYSTEM権限で実行するレジストリ設定ミスを悪用する
・トークンインパーソネーション: サービスアカウントのアクセストークンを盗用してSYSTEM権限を取得する
具体的な防御手順
1. 最小権限の原則を徹底する
権限昇格攻撃が成立するのは「必要以上の権限が付与されているから」です。ユーザー・サービス・プロセスのそれぞれが業務に必要な最小限の権限のみを持つよう設計することが根本的な対策です。これは最小権限の原則と呼ばれ、セキュリティ設計の基本中の基本です。
具体的には次の点を確認します。
・不要なSUIDビット付きファイルを洗い出し、不要なものは無効化する
・sudoersファイルで実行可能コマンドを厳格に限定し、NOPASSWD設定は最小化する
・Webサーバー・データベース・アプリプロセスは専用の非rootアカウントで動かす
・Windowsのサービスは最小権限のサービスアカウントで実行する
# SUIDビット付きファイルの棚卸し find / -perm -4000 -type f 2>/dev/null # 不要と判断したファイルのSUIDビットを削除 chmod u-s /path/to/unnecessary_suid_binary # 現在のsudo権限を確認(一般ユーザーで実行) sudo -l
2. パッチ適用を遅らせない
カーネル脆弱性など、OSレベルの権限昇格を防ぐにはパッチ管理が不可欠です。脆弱性が公開されてから実際の攻撃に使われるまでの時間は年々短くなっており、パッチ公開後に放置することはリスクを増大させます。
・Linux(RHEL系): `dnf-automatic`でセキュリティパッチを自動適用する
・Linux(Debian/Ubuntu系): `unattended-upgrades`を有効化する
・Windows: Windows Updateを有効化し、重要なセキュリティ更新を自動インストールする
・カーネルバージョンを定期確認する
# Linuxカーネルバージョンの確認 uname -r # RHEL/Rocky/AlmaLinux: セキュリティアップデート確認 dnf check-update --security # Debian/Ubuntu: セキュリティアップデート確認 apt list --upgradable 2>/dev/null | grep -i security
パッチ管理の体系的な進め方については、パッチ管理の基礎も参照してください。
3. 特権操作のログを監視する
権限昇格を試みる行動はログに痕跡を残します。不審な操作を早期に検知するために、次のログを監視します。
・Linuxの場合: /var/log/auth.log または /var/log/secure(sudo使用記録)、auditdのログ
・Windowsの場合: セキュリティイベントログ(イベントID 4672: 特殊権限ログオン、4688: 新しいプロセス作成)
# sudo実行ログの確認(Debian/Ubuntu系) grep sudo /var/log/auth.log | tail -50 # RHEL/Rocky系 grep sudo /var/log/secure | tail -50 # 不審なSUID実行をauditdで監視するルール例 auditctl -a always,exit -F arch=b64 -F perm=x -F auid>=1000 -F auid!=-1 -k suid_exec
SIEMやログ一元管理ツールを使って、不審なsudo実行・su実行・SUIDバイナリの起動をアラートする仕組みを作ることが理想です。
LinuxのサーバーでLinuxファイルパーミッションを深く理解したい方には、姉妹サイトLinuxMaster.JPも参考になります。
中小企業でも今日からできること
「権限昇格対策」と聞くと大規模なシステム改修が必要に感じるかもしれませんが、以下の3つはすぐに実施できます。
・sudoers見直し(約30分): `sudo visudo` を実行し、NOPASSWDが設定されているコマンドを全て確認する。業務上不要なものは削除またはパスワード要求に変更する。
・SUIDビットの棚卸し(約15分): `find / -perm -4000 -type f 2>/dev/null` を実行してリストアップし、不明・不要なものを `chmod u-s` で無効化を検討する。
・OSパッチの確認(約15分): `dnf check-update –security` または `apt list –upgradable` でセキュリティアップデートの有無を確認し、適用する。
これだけでも、既知の権限昇格手口の多くに対して有効な防壁になります。まずこの3つを実施し、定期的な運用フローに組み込んでいくことが現実的な第一歩です。
よくある誤解と注意点
「ファイアウォールがあれば権限昇格は防げる」は誤り
ファイアウォールは外部からの不正アクセスを制限しますが、すでにシステム内部に入り込んだ攻撃者の権限昇格は防げません。フィッシングによるマルウェア感染やWebアプリ経由の侵入は、ファイアウォールを合法的に通過しています。内部対策は外部対策とは別に必要です。
「rootを使わなければ安全」は半分正解
日常作業でrootを使わないことは正しい習慣ですが、それだけで安全にはなりません。sudoers設定ミス・SUIDビットの放置・サービスアカウントの過剰権限があれば、攻撃者は一般ユーザーアカウントから段階的にroot権限へ到達できます。最小権限の原則は「rootを使わない」だけでなく、アカウントと設定全体の管理を含みます。
「自動スキャンツールで全てわかる」は誤り
脆弱性スキャンツールは既知の脆弱性を検出しますが、sudoers設定ミスやファイルパーミッションの問題といった「設定に起因する権限昇格リスク」は見落とされることがあります。自動スキャンと定期的な手動レビューを組み合わせることが重要です。

本記事のまとめ
| 項目 | ポイント |
|---|---|
| 権限昇格とは | 低権限から管理者/rootを不正取得する行為。侵入後の「次の一手」 |
| 2種類の昇格 | 垂直(低→高権限)と水平(同権限レベルで他ユーザー領域へ) |
| 主な攻撃手口 | SUID悪用・sudoers設定ミス・カーネル脆弱性・DLLハイジャック・トークン盗用 |
| 防御の基本3本柱 | 最小権限の原則の徹底・パッチ管理・特権操作ログの監視 |
| 今すぐできること | sudoers見直し・SUIDビット棚卸し・OSパッチ確認の3点から着手 |
権限昇格は、攻撃者が侵入後に必ず試みる行動です。完璧な侵入防止は難しくても、侵入後の被害拡大を最小限に抑える設計は自分たちでコントロールできます。まずはsudoers設定とSUIDビットの見直しから始めてみてください。
PR
権限管理・PAM・sudoers・SELinuxまで、Linuxサーバーを守るための実践的な設定手順を体系的に学べる一冊。サーバー管理者が最初に手元に置きたいセキュリティ参考書です。
