【SUID・sudoers深掘り編】GTFOBinsの裏側を読み解く|CTF思考フレームワーク P02

SUID って、何それ?普通のファイル属性?

SUID は『実行時にファイル所有者の権限になる』特殊属性。root 所有の SUID バイナリ(例:/usr/bin/passwd)は、一般ユーザーが実行しても root として動く。GTFOBins に登録されたバイナリで SUID を見つけると、一発で root 化できるケースが多いです。
SUID(Set User ID)と sudoers は、Linux 権限昇格で最頻出の攻略ポイント。find / -perm -u=s で SUID バイナリを列挙し、GTFOBins(gtfobins.github.io)と照合。sudo -l で実行可能コマンドを確認し、Pythonやperlでシェル起動できないかチェック。基礎中の基礎。
広告・PRを含みます。この記事にはアフィリエイトリンクが含まれます。掲載内容は編集方針に基づいて作成していますが、価格・在庫・キャンペーン内容はリンク先で最新情報を確認してください。

find -perm -u=s だけで root 化の手がかりが見つかるんだ。
この記事は、CTF思考フレームワーク Privesc編 P02。SUID・sudoers の深掘り、GTFOBins の裏側、CVE 確認の手順、CTF 典型問題の解き方を整理します。
P01で触れたSUIDとsudoersを、もう一段深く掘ります。GTFOBinsを引くだけでなく、なぜそれが昇格に繋がるのか、どんな見落としがあるのか。CTFで「sudo -l」を打ってから10分以内にrootに届ける人の頭の中を整理します🪜
GTFOBinsは辞書、でも辞書だけ読んでも本は書けません。仕組みを掴むのが目標です。
先に意味を押さえておくと読みやすい用語です。
- CTF: セキュリティの練習問題を解く競技。必ず許可された環境だけで試します。
- 権限昇格: 一般ユーザーから管理者権限など、より強い権限を得ることです。
- SUID: Linuxで一時的に強い権限で実行できる仕組み。設定ミスが危険です。
難易度:★★★(上級) / この枝ルートの記事は、必要な回だけ選んで読めます。
👀 観察フェーズ:まず何を見る?
多くのCTF/実戦では「sudo -l 出力の細かいオプション」が突破口。SETENVがあるか、引数固定か、ワイルドカードか…で攻め筋が変わります。
🤔 仮説フェーズ:攻撃者は何を考える?
攻撃者は sudo -l の出力を 1 行ずつ読み解き、「許可されているのは絶対パスか相対パスか」「引数は固定か、ワイルドカードや任意引数を取れるか」「SETENV や env_keep で LD_PRELOAD・PYTHONPATH・PATH を持ち込めるか」を頭の中でチェックします。SUID では単に find / -perm -4000 を眺めるのではなく、対象バイナリが内部で system(3) や execvp を呼ぶか、/bin/sh をフォールバックに使うか、tar や rsync のように外部コマンドへチェックポイントを持つかを想像します。capabilities では cap_setuid・cap_dac_read_search・cap_sys_admin の 3 つが特に危険で、Python や perl にこれらが付いていれば GTFOBins を引かなくても昇格コードを書ける、というのが熟練者の発想です。
「許可されたコマンドだから安全」という前提が、ほぼ全部の昇格パターンで崩れます。
🔬 検証フェーズ:どうやって確かめる?
まず sudo -l の各エントリについて、許可コマンドを strace -f で実行追跡し、内部で別バイナリを exec しているか、設定ファイルを読み込んでいるかを確認します。tar や zip、rsync のようにラッパー系コマンドが許可されている場合は、–checkpoint=1 –checkpoint-action=exec=sh や -e sh などのオプション昇格パスを試します。SUID バイナリは ldd と strings で動的リンク先と内部文字列を見て、相対パスで子プロセスを呼ぶ箇所があれば PATH ハイジャックの余地を疑います。capabilities 付きバイナリは getcap で確認したうえで、cap_setuid なら setuid(0) を呼ぶワンライナー、cap_dac_read_search なら /etc/shadow の読み出しを試し、検証用 VM のスナップショットで挙動と戻り値を必ず記録しておきます。
⚔️ 攻撃フェーズ:実際の手口
実戦でよく当たるのは、(ALL) NOPASSWD: /usr/bin/tar で tar に任意引数を渡せる構成で、sudo tar -cf /dev/null /dev/null –checkpoint=1 –checkpoint-action=exec=/bin/sh 一発で root を取るシナリオです。env_keep+=LD_PRELOAD が残っていれば、共有ライブラリの _init で setuid(0) と system(“/bin/bash”) を呼ぶ shim を書いて、許可コマンドを sudo 経由で呼ぶだけで昇格できます。SUID では /usr/bin/python3 に cap_setuid+ep が付いた状態が見つかれば、python3 -c ‘import os; os.setuid(0); os.execl(“/bin/sh”,”sh”)’ で即時 root。tar/awk/find のような「便利だから許可した」コマンドが、ほぼ例外なく root シェルへの最短経路になるのが SUID・sudoers 領域の怖さです。
CTF{permission_granted_does_not_mean_safe}
GTFOBinsを丸暗記する必要はありません。「許可コマンドが内部で何をするか」を考える癖を付けるだけで戦えます。
🛡️ 防御フェーズ:どう守る?
sudoers は「ユーザー名・ホスト・実行ユーザー・コマンド・引数」を明示し、ワイルドカードと NOPASSWD を併用しないのが鉄則です。tar・vi・less・find・awk・python など GTFOBins 常連は、許可するなら専用ラッパースクリプトを噛ませて引数を固定し、SETENV と env_keep からは LD_PRELOAD・LD_LIBRARY_PATH・PYTHONPATH を確実に除外します。SUID は構成管理で「許可リスト」を作り、新規 SUID が増えたら AIDE や osquery で検知してアラートする仕組みを入れます。さらに /tmp・/var/tmp・/dev/shm を noexec,nosuid,nodev でマウントし、capabilities は setcap -r で不要なものを剥がして、最小権限の積み上げで攻撃面を継続的に削るのが現実的な防御です。
🧪 検証用のLinuxラボを用意
権限昇格やエクスプロイトの練習は、許可を得た自分の検証環境で行うのがルール。💻 ConoHa VPSならUbuntuやCentOSをワンクリックで立てて、スナップショットも取れるので安心して試せます。
※ 上記は他社サービスへのリンクです。購入は各自でご判断ください。
⚠️ よくある落とし穴
よくあるミス。
- sudo NOPASSWD で less / vi / find / tar / awk を許可してしまう。
- sudoers の env_keep に LD_PRELOAD や PATH を残す。
- SUIDが必要だと思い込んだ独自バイナリを置く(ほぼcapabilities or systemd unitで代替可)。
- /tmp が noexec ではない(多くのエクスプロイトの作業領域)。
- capabilities を付けたバイナリを「権限細かいから安全」と過信。
- sudo -l の出力をユーザーから見える状態にしておくこと自体は防げない、という前提を忘れる。
🧰 ツール早見表
使う道具。
| ツール | 用途 | ひと言 |
|---|---|---|
| GTFOBins | 昇格テク事典 | sudo / SUID / Capabilities が網羅 |
| LinPEAS | 自動列挙 | sudo・SUID・capsを一括収集 |
| sudo-snake | sudoers解析自動化 | 環境変数まわりまでカバー |
| sucrack / unix-privesc-check | 古典スクリプト | 学習用に読むと勉強になる |
🎓 本気で学びたい人へ
Linuxとサーバ・セキュリティを仕事レベルで学びたい方へ。🎓 ササエルはインフラエンジニア向けスクールで、システム設計から防御設計まで広くカバーしています。
📚 もっと深く学びたい人へ
体系的に学ぶなら『ホワイトハッカー入門』、手を動かして覚えるなら『TryHackMeを使って身体で覚える攻撃手法と脆弱性』が定番。両方持っておくと、知識と実践の両輪で伸びます📚
📚 次に読みたい
- 【Windowsローカル権限昇格編】サービス・レジストリ・MSIを巡る攻防|CTF思考フレームワーク P03
- 【Windows Token・UAC編】Windows特権の中枢を握る|CTF思考フレームワーク P04
- 【DNS編】サブドメイン列挙とCT logが暴く組織の地図|CTF思考フレームワーク R01
✍️ 学んだことを発信する
学んだことをブログにまとめるなら、高速で安価なConoHa WINGが使いやすいです。



