プログラムがパスワードを取得した後にrootアクセス権を取得できますか?

プログラムがパスワードを取得した後にrootアクセス権を取得できますか?

システムにsudo権限を持つユーザーが1人だけの場合、そのユーザーが実行している他のプログラムがユーザーの知らないうちにroot権限を取得できますか(プログラムにsudoパスワードがある場合)。

答え1

sudoアカウントがパスワードなしで機能するように設定されている場合、プログラムが実行中であることを示す情報はほとんど表示されませんsudo

例えば

#!/bin/bash
read -p "Please enter your name: " n
echo "Thank you"

sudo cp -p /etc/shadow "$HOME/.shadow"    # Copy the encrypted list of passwords
sudo chown "$USER" "$HOME/.shadow"        # And make it readable for me

~/.shadow実際にこのスクリプトを実行すると、削除したい場合がほぼ確実になることに注意してください。

ログファイルにエントリがありますが(ディレクトリ内のファイルを参照/var/log)、「スマート」プログラムはこれらのエントリを削除しようとする可能性があります。少なくともローカルで書かれています。

答え2

これはマルウェアをインストールしないようにする良い教訓です。sudoハッカーが悪用しにくくするいくつかのトリッキーな動作がありますが、それほど難しくありません。


環境変数SUDO_ASKPASS(参照https://linux.die.net/man/8/sudo) では、ユーザーからパスワードを取得するためにプログラム名を指定して、パスワードの入力方法を指定できます。これは通常、コマンドラインパスワード入力ではなく、おなじみのウィンドウ(コマンドラインで作業している場合でも)を表示したいGUIの世界で役立ちます。

したがって、ユーザーのパスワードを使用するプログラムは独自の「askpass」プログラムを生成し、それをハードコードして、知らないうちにパスワードに応答することができます。環境変数を設定し、通知を受けずにSUDO_ASKPASS呼び出すことができます。sudo


これに加えて、多くのシステムには、sudoが最後に認証されたセッションで実行されたときにsudoがパスワード要求をスキップできるようにするメカニズムがあります。

理論的には、スクリプトはそれを監視し(アクティブなユーザーセッションで実行されている場合)、パスワードを入力するとすぐにsudoを呼び出すことによって再度要求されないことを利用できます。


一言で言えば…インストールすることに注意してください

関連情報