Linuxコンピュータに感染するマルウェアに対する主な障壁の1つとしてSudo
を引用する人々をよく耳にします。
最も一般的な議論は次のように思われます。システム構成を変更するにはroot権限が必要であり、root権限を取得するにはパスワードが必要であるため、マルウェアはパスワードの入力を求めずにシステム構成を変更することはできません。
しかし、ほとんどのシステムでは、デフォルトでマルウェアが管理者アカウントに感染すると、特権の昇格は簡単であるように思われます。マルウェアは、ユーザーがSudo
を実行するのを待つだけです。
ユーザーがSudo
を実行したときにマルウェアがroot権限を取得するための方法は何ですか?また、それらからどのように保護できますか?
編集:私は特に侵害された管理者アカウントから保護することに興味があります。つまり、Sudo
を持つ完全なroot権限を持つアカウント(たとえば、一般的なデスクトップシステム上のユーザーのアカウント)。
マルウェアがユーザーのアカウントにアクセスできるようになると、次のことが可能になります。
1。~/.bashrc
プロンプトを偽造するコマンドのbashエイリアスを(現在のシェルと[Sudo] password for $USER:
に)作成します、およびユーザーのパスワードを盗みます。
alias Sudo='echo -n "[Sudo] password for $USER: " && \
read -r password && \
echo "$password" >/tmp/Sudo-password'
2。同様に、Sudo
という名前の実行可能ファイルを~/.bin
に配置し、PATH
を変更できます。同じ効果を達成するための変数:PATH="$HOME/.bin:$PATH"
3。XサーバーでCatchキーが押され、Word Sudo
を監視してから、次の2つの間のテキストを試してください。 Enter パスワードとしてキーを押します。
4。同様のことは、任意の環境(コンソール、 Wayland 、X)で、たとえば$LD_PRELOAD
。
5。マルウェアがSudo
を使用するシェルに感染し、Sudo
が資格情報をキャッシュする場合、マルウェアは継続的にチェックすることができます。パスワードなしでSudo
することが可能です:
while : ; do
echo | Sudo -S echo "test" &>/dev/null && break
sleep 10
done
Sudo echo "We now have root access"
1&2。\/bin/Sudo
を使用します。 \
はエイリアスを無視し、/bin/…
は$PATH
を無視します。または、ssudo="\/bin/Sudo"
などのエイリアスを追加し、常にssudo
の代わりにSudo
を使用します。ウイルスがこのエイリアスを再マップするのに十分賢い可能性は低いようです。
3。X11を使用するときはパスワードを入力しないでください。代わりに、仮想コンソール、または Weston を使用してください。
5。timestamp_timeout=0
を/etc/sudoers
に設定します。
Sudo
パスワードが盗聴される可能性を完全に排除する唯一の方法は、それを完全に回避することのようです。代わりに、rootとして仮想コンソールにログインします。
Alexander Peslyakによる :「su [およびSudo]の唯一の安全な使用法は、特権の高いアカウントから特権の低いアカウントに切り替えることです…」
ちなみに、Sudoにはいくつかの対策があります。
Sudo
はtty
ではなくstdin
から読み取るため、alias Sudo='tee -a /tmp/Sudo-password | Sudo'
はSudo
を中断します(ただし、パスワードは取得します)。本当の保護はありません。
パスワードで保護されたSudoへのアクセスは、シムによって実行されるコマンドを使用する複雑なシェル環境の前の時代を思い起こさせます。パスワードが送信されると、shimがSudoを介して、通知なしで、完全なシステム制御を使用してコマンドを実行できる機会があります。
アクセスに熱心であれば、bash、zsh、fishなどに役立つシムを作成します。実行されたコマンドを監視します。 Sudoがステータス0で戻った直後に、「Sudo chmod + s/bin/sh」またはその他の厄介な問題を発行し始めます。
Sudoに十分なパスワードが与えられ、プロンプトを取得するコマンドを実行するシェルがある瞬間、問題が発生する可能性があります。楽観主義以外に保護はありません。
他の回答は、パスワードの保護に焦点を合わせています。侵略者として、私はそれについて心配しません。パスワードが与えられた後、パスワードが不要な期間に焦点を当てます。これは、攻撃者がシステムを完全に危険にさらすために最小限の作業を行う必要がある最も危険な時期です。
それから保護しますか? RCファイルを保護する必要があります。コマンドラインプロンプトで使用されているシムまたはその他のコマンドを調べます。シェルに接続されているコプロセスと、シェル環境を維持するために使用されるツールを探します。主な防御策はホスト侵入ツールですが、それは事後です。攻撃を防ぎますか?複雑な自動構成やアクティブなプロンプトのない単純なシェルのみを使用します。これがSudoが開発された環境です。
私は他の開発者(1980年代)とゲームをしていて、他の開発者が使用していた端末を取得してコマンドを挿入するようなものを書き込もうとしていました。これは本質的に同じ問題です。また、目に見えるトレースなしでコマンド挿入を行うツールを簡単に埋め込むことができるようになりました。 :)
権限のないユーザーがroot権限を取得する方法についてはよくわかりませんが、Sudo
ビットの危険性を低くするためにできることは知っています。それ。 Sudo
を使用すると、特定の権限を持つユーザーのグループ、および特定のユーザーが実行できる特定のコマンドを定義するために、きめ細かい権限を構成できます。
ユーザーセクション
ここで、コマンドを指定するユーザーのグループを設定できます。運用グループを設定しましょう。
User_Alias OPS = bob, jdoe
これにより、OPSグループが作成され、bobおよびjdoeという名前のユーザーがグループに入れられます。
Cmnd_Alias
ここでは、特定のコマンドセットを指定します。フルパスと使用するコマンドオプションを指定する必要があります。オペレーショングループコマンドを設定しましょう。
Cmnd_Alias OPSCMD = /admin/bin/srvbkup, /admin/bin/test
これにより、指定された3つのコマンドがコマンドグループOPSCMDに追加されます。
ユーザー権限の仕様
ここで、これまでに設定したグループを使用します。
OPS ALL=(root) OPSCMD
最初に指定するのはユーザーです。ここでは、設定したOPSグループを使用します。次に、ALLは、すべてのサーバーに適用されることを意味します。これは、同じ構成ファイルを使用する複数のサーバーでSudoを実行している場合にのみ役立ちます。次に、Operationsグループが指定されたコマンドを実行するユーザーを指定します。この場合は、rootとして実行する必要があります。最後に、OPSグループで実行できるようにするコマンドを指定します。具体的には、セットアップしたOPSCMDグループを使用します。 Sudoを使用するたびにパスワードを入力させたくない場合、コマンド仕様はNOPASSWD:OPSCMDになります。
ユーザーを信頼しない限り、Sudo
ポリシーを強化するだけです:)
侵害されている可能性があると思われるシステムに関心がある場合は、「ルートキット」を実行し、「Tripwire」を使用してファイルシステムの整合性を確認してください。
また、すべてのユーザーがすべてのrootコマンドにアクセスする必要はなく、Sudoを介して特定のコマンドにアクセスできるようにするなど、Sudo特権を強化することをお勧めします。
まず、_/etc/sudoers
_ファイルを見てください。
構文は_user MACHINE=COMMANDS
_形式になります。
たとえば、rootユーザーはroot ALL=(ALL) ALL
を持ちます。これは、rootユーザーがどこでもany(all)コマンドを実行できることを意味します。
エントリにALL=(ALL)
も含まれている場合は、rootユーザーとほぼ同じです。これが当てはまらず、特定の制限された特権しかない場合、攻撃者/マルウェアはSudo特権が実行できる範囲でしか実行できません。
あなたを助けることができるヒント:
/etc/sudoers
_ファイルを調べます。visudo
コマンドを使用して、sudoersファイルの権限を編集および変更します。参照:sudoersとSudoのLinux manページ man sudoers