web-dev-qa-db-ja.com

マルウェアがSudoパスワードを盗聴するのを防ぐ

Linuxコンピュータに感染するマルウェアに対する主な障壁の1つとしてSudoを引用する人々をよく耳にします。

最も一般的な議論は次のように思われます。システム構成を変更するにはroot権限が必要であり、root権限を取得するにはパスワードが必要であるため、マルウェアはパスワードの入力を求めずにシステム構成を変更することはできません。

しかし、ほとんどのシステムでは、デフォルトでマルウェアが管理者アカウントに感染すると、特権の昇格は簡単であるように思われます。マルウェアは、ユーザーがSudoを実行するのを待つだけです。

ユーザーがSudoを実行したときにマルウェアがroot権限を取得するための方法は何ですか?また、それらからどのように保護できますか?

編集:私は特に侵害された管理者アカウントから保護することに興味があります。つまり、Sudoを持つ完全なroot権限を持つアカウント(たとえば、一般的なデスクトップシステム上のユーザーのアカウント)。

10
Zaz

マルウェアがユーザーのアカウントにアクセスできるようになると、次のことが可能になります。

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にはいくつかの対策があります。

  • Sudottyではなくstdinから読み取るため、alias Sudo='tee -a /tmp/Sudo-password | Sudo'Sudoを中断します(ただし、パスワードは取得します)。
9
Zaz

本当の保護はありません。

パスワードで保護されたSudoへのアクセスは、シムによって実行されるコマンドを使用する複雑なシェル環境の前の時代を思い起こさせます。パスワードが送信されると、shimがSudoを介して、通知なしで、完全なシステム制御を使用してコマンドを実行できる機会があります。

アクセスに熱心であれば、bash、zsh、fishな​​どに役立つシムを作成します。実行されたコマンドを監視します。 Sudoがステータス0で戻った直後に、「Sudo chmod + s/bin/sh」またはその他の厄介な問題を発行し始めます。

Sudoに十分なパスワードが与えられ、プロンプトを取得するコマンドを実行するシェルがある瞬間、問題が発生する可能性があります。楽観主義以外に保護はありません。

他の回答は、パスワードの保護に焦点を合わせています。侵略者として、私はそれについて心配しません。パスワードが与えられた後、パスワードが不要な期間に焦点を当てます。これは、攻撃者がシステムを完全に危険にさらすために最小限の作業を行う必要がある最も危険な時期です。

それから保護しますか? RCファイルを保護する必要があります。コマンドラインプロンプトで使用されているシムまたはその他のコマンドを調べます。シェルに接続されているコプロセスと、シェル環境を維持するために使用されるツールを探します。主な防御策はホスト侵入ツールですが、それは事後です。攻撃を防ぎますか?複雑な自動構成やアクティブなプロンプトのない単純なシェルのみを使用します。これがSudoが開発された環境です。

私は他の開発者(1980年代)とゲームをしていて、他の開発者が使用していた端末を取得してコマンドを挿入するようなものを書き込もうとしていました。これは本質的に同じ問題です。また、目に見えるトレースなしでコマンド挿入を行うツールを簡単に埋め込むことができるようになりました。 :)

3
JezC

権限のないユーザーがroot権限を取得する方法についてはよくわかりませんが、Sudoビットの危険性を低くするためにできることは知っています。それ。 Sudoを使用すると、特定の権限を持つユーザーのグループ、および特定のユーザーが実行できる特定のコマンドを定義するために、きめ細かい権限を構成できます。

Sudo --GRANULAR CONTROL

  • ユーザーセクション

    ここで、コマンドを指定するユーザーのグループを設定できます。運用グループを設定しましょう。

    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ポリシーを強化するだけです:)

1
jimm-cl

侵害されている可能性があると思われるシステムに関心がある場合は、「ルートキット」を実行し、「Tripwire」を使用してファイルシステムの整合性を確認してください。

また、すべてのユーザーがすべてのrootコマンドにアクセスする必要はなく、Sudoを介して特定のコマンドにアクセスできるようにするなど、Sudo特権を強化することをお勧めします。

1
Rituraj

まず、_/etc/sudoers_ファイルを見てください。

構文は_user MACHINE=COMMANDS_形式になります。

たとえば、rootユーザーはroot ALL=(ALL) ALLを持ちます。これは、rootユーザーがどこでもany(all)コマンドを実行できることを意味します。

エントリにALL=(ALL)も含まれている場合は、rootユーザーとほぼ同じです。これが当てはまらず、特定の制限された特権しかない場合、攻撃者/マルウェアはSudo特権が実行できる範囲でしか実行できません。

あなたを助けることができるヒント:

  1. _/etc/sudoers_ファイルを調べます。
  2. Chkrootkit、rootkit hunter、Config server Exploitスキャナー、snortなどのセキュリティスキャナーを実行します。
  3. visudoコマンドを使用して、sudoersファイルの権限を編集および変更します。
  4. スキャナーを再度実行します。

参照:sudoersとSudoのLinux manページ man sudoers

0
Raja Ramarajan