マルウェアがsudoパスワードを盗聴しないようにする


10

sudoLinuxコンピューターに感染するマルウェアに対する主な障壁の1つとして、人々がよく言っていることをよく耳にします。

最も一般的な議論は、システム構成を変更するにはroot特権が必要であり、root特権を取得するにはパスワードが必要であるため、マルウェアはパスワードを要求せずにシステム構成を変更できないためです。

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

ユーザーがを実行したときにマルウェアがroot権限を取得する方法は何sudoですか。

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


私が探している種類の例については、私の答えを参照しください。私は誰かがそこで発生したセキュリティリスクの一部(または彼らが考えることができる他のリスク)について詳しく説明し、それらを軽減する方法を提供できることを望んでいます。
Zaz

UACやWindowsでの安全なアテンションシーケンスなどを要求します。Unixyシステムにはそれがありません。管理者に行く方法は(おそらく)管理者のアカウントをばかげたことに使用しないことです。あなた自身の答えであなたが言及するいくつかの事柄は、SELinuxやGrsecurityのような役割ベースの必須のアクセス制御システムで保護することができます。そこでは、ルート以外の書き込み可能なバイナリを実行できないポリシーを確立できるため、そのレベルのトロイの木馬はありません。ところで、Xを信頼しない場合は、システムをまったく信頼しないでください。Xはスーパーユーザー権限で実行されるためです。
カウンター

おかげで、SELinuxを調べましたが、大規模なインストール向けに設計されているようで、管理とセットアップに多くの時間が必要です。もう少しシンプルなものを期待していました。私は開発者なので、プログラムの実行に関する厳密なポリシーも実際にはオプションではありません。
Zaz 2014

「Xはスーパーユーザー特権で実行されます」—何ですか?デフォルトのインストールではXstartx通常のユーザーとしてうまく機能します。実際、私は現在、Xを通常のユーザーとして実行しています。
Zaz 14

はい、学習曲線は急です。Grsecurityをご覧ください。シンプルですが強力です。〜Xの特権:私のボックスでは、XサーバーはSUIDルートであり、ルートを実行します。
カウンター

回答:


9

マルウェアがユーザーのアカウントへのアクセス権を獲得すると、次のことが可能になります。

1.プロンプト~/.bashrcを偽装し[sudo] password for $USER:、ユーザーのパスワードを盗むコマンドにbashエイリアスを(現在のシェルとで)作成します。

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サーバーを介してキープレスをキャッチし、単語を監視しsudo、次の2つのEnterキープレスの間にあるテキストをパスワードとして試します。

4.同様のことは、たとえばを使用して、任意の環境(コンソール、Wayland、X)で実行できます$LD_PRELOAD

5.マルウェアがを使用するシェルに感染し、資格情報sudosudoキャッシュする場合、マルウェアは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氏は次のように説明しています。


余談ですが、sudoにはいくつかの対策があります。

  • sudotty代わりにから読み取るstdinため、alias sudo='tee -a /tmp/sudo-password | sudo'中断しますsudo(ただし、パスワードはキャプチャされます)。

sudoはユーザーのパスワードを要求するため、マルウェアはすでにアクセスしたユーザーのパスワードを取得します。
2014

3
@rob:実際にはsudo設定方法によって異なりますが、どちらの方法でも、マルウェアはに必要なパスワードを持っているsudoため、ユーザーがrootアクセス権を持っている場合はマルウェアもそうです。
Zaz

3

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

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

アクセスに専念していた場合は、bashやzsh、fishな​​どの便利なシムを作成します。実行されたコマンドを監視します。sudoがゼロのステータスで戻った直後に、私は「sudo chmod + s / bin / sh」またはその他の厄介さの発行を開始します。

sudoに適切なパスワードが与えられ、コマンドを実行してプロンプトを表示するシェルが作成された瞬間、問題が発生する可能性があります。楽観主義以外は何の保護もありません。

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

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

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


1

権限のないユーザーがルート権限を取得する方法についてはわかりませんが、言いたい場合はsudo少し危険を減らすためにできることを知っています。 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ユーザーを信用しないだけでポリシーを強化してください:)


質問ではっきりしていなかった場合は申し訳ありませんが、侵害された管理者アカウント、つまり、の完全なroot権限を持つアカウントからの保護に興味がありsudoます。具体的には、通常のデスクトップシステムについて考えています。
Zaz 2014

1

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

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


0

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

構文はuser MACHINE=COMMANDSフォーマットになり ます。

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

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

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

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

リファレンス:sudoersおよびsudo man sudoersの Linux manページ

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.