web-dev-qa-db-ja.com

プロセス引数を他のユーザーから隠す方法は?

しばらく前、私は grsecurity カーネルパッチを使用していました。これには、他の非ルートユーザーからプロセス引数を隠すオプションがありました。基本的に、これは/proc/*/cmdlineをモード0600にし、psは、プロセスは存在するが引数は存在しないことを示すことで適切に処理します。

マルチユーザーマシンで誰かがvi christmas-presents.txtを実行して標準的な例を使用している場合、これは一種の素晴らしいことです。

新しいカーネルをインストールする以外に、Ubuntuでこれをサポートする方法はありますか?

(私は個々のプログラムがargvを変更できる手法に精通していますが、ほとんどのプログラムはそれを行わず、とにかくそれは際立っています。 このstackoverflowユーザー は同じ質問をしているようですが、実際にはとても混乱しているようです。)

7
poolie

現在、hidepidprocfsマウントオプションがあります 他のユーザーから引数を非表示にし、オプションで1つのグループがすべてのプロセスを表示できるようにします。

最初のマウントオプションは「hidepid」と呼ばれ、その値は非所有者が利用できるようにするプロセスに関する情報を定義します。

hidepid = 0(デフォルト)は古い動作を意味します-誰でも誰でも読める/ proc/PID/*ファイルを読むことができます。

hidepid = 1は、ユーザーが/ proc/PID /ディレクトリにアクセスできず、自分のディレクトリにアクセスできることを意味します。 cmdline、sched *、statusなどの機密ファイルは、他のユーザーから保護されるようになりました。 proc_pid_permission()で行われるパーミッションチェックとファイルのパーミッションは変更されないため、特定のファイルのモードを期待するプログラムは混乱しません。

hidepid = 2は、hidepid = 1に加えて、すべての/ proc/PID /が他のユーザーから見えないことを意味します。プロセスが存在するかどうかを隠すことを意味するのではなく(kill -0 $ PIDなどの他の方法で学習できます)、プロセスのeuidとegidを隠します。実行中のプロセスに関する情報を収集する侵入者のタスク、一部のデーモンが昇格された特権で実行されるかどうか、他のユーザーが機密プログラムを実行するかどうか、他のユーザーがプログラムを実行するかどうかなどを複雑にします。

gid = XXXは、すべてのプロセスの情報を収集できるグループを定義します(hidepid = 0モードなど)。非rootユーザーをsudoersファイルなどに入れる代わりに、このグループを使用する必要があります。ただし、システム全体のタスクを監視することになっていない信頼されていないユーザー(デーモンなど)は、グループに追加しないでください。

hidepid = 1以上はprocfsファイルへのアクセスを制限するように設計されており、正確なキーストロークタイミングなどの機密情報が明らかになる場合があります。

http://www.openwall.com/lists/oss-security/2011/11/05/

hidepid = 1/2は、ユーザースペースの監視ツールを中断しません。 ps、top、pgrep、およびconkyは、EPERM/ENOENTを正常に処理し、現在のユーザーがプロセスを実行している唯一のユーザーであるかのように動作します。 pstreeは、「pstree」プロセスを含むプロセスサブツリーを示します。

6
poolie

現在これを行う唯一の方法は、各ユーザーを個別のコンテナに入れることです(CLONE_NEWPIDおよびCLONE_NEWNSを指定したcloneを参照) 、コンテナに新しい/procをマウントします。 (lxcはこれの一部を行います。)

ただし、Ubuntuおよびアップストリームカーネルに grsecurity機能の移植 を予定しています。可能であれば、何かにサインアップして手伝ってください。

8
Kees Cook

Nattyまでは、ストックカーネルを使用して/proc/$pid/cmdlineファイルのアクセス許可を変更することはできません。アクセス許可ビットはカーネルに組み込まれています。現在、これらのパッチを適用して、特注のカーネルを構築する必要があります。

パッチがこの機能を有効にするのが簡単な場合、Ubuntu Kernel Teamリスト([email protected])に投稿する価値があり、今後のリリースに含めることを検討できます。 。

6
Andy

数年前、次の2つのカーネルパッチを公開しました。

これらの2つのパッチは、kernel.orgの現在の安定したVanillaカーネルで引き続き機能します。興味があれば、現在のパッチを投稿できます。なぜアップストリームカーネルにプロセス非表示オプションが含まれていないのか、私に聞かないでください。

警告:これらのパッチは、ルートを除く他のユーザーのプロセスを完全に隠します。

1
user9899