しばらく前、私は grsecurity カーネルパッチを使用していました。これには、他の非ルートユーザーからプロセス引数を隠すオプションがありました。基本的に、これは/proc/*/cmdline
をモード0600にし、ps
は、プロセスは存在するが引数は存在しないことを示すことで適切に処理します。
マルチユーザーマシンで誰かがvi christmas-presents.txt
を実行して標準的な例を使用している場合、これは一種の素晴らしいことです。
新しいカーネルをインストールする以外に、Ubuntuでこれをサポートする方法はありますか?
(私は個々のプログラムがargvを変更できる手法に精通していますが、ほとんどのプログラムはそれを行わず、とにかくそれは際立っています。 このstackoverflowユーザー は同じ質問をしているようですが、実際にはとても混乱しているようです。)
現在、hidepid
のprocfs
マウントオプションがあります 他のユーザーから引数を非表示にし、オプションで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」プロセスを含むプロセスサブツリーを示します。
現在これを行う唯一の方法は、各ユーザーを個別のコンテナに入れることです(CLONE_NEWPID
およびCLONE_NEWNS
を指定したcloneを参照) 、コンテナに新しい/proc
をマウントします。 (lxcはこれの一部を行います。)
ただし、Ubuntuおよびアップストリームカーネルに grsecurity機能の移植 を予定しています。可能であれば、何かにサインアップして手伝ってください。
Nattyまでは、ストックカーネルを使用して/proc/$pid/cmdline
ファイルのアクセス許可を変更することはできません。アクセス許可ビットはカーネルに組み込まれています。現在、これらのパッチを適用して、特注のカーネルを構築する必要があります。
パッチがこの機能を有効にするのが簡単な場合、Ubuntu Kernel Teamリスト([email protected])に投稿する価値があり、今後のリリースに含めることを検討できます。 。
数年前、次の2つのカーネルパッチを公開しました。
これらの2つのパッチは、kernel.orgの現在の安定したVanillaカーネルで引き続き機能します。興味があれば、現在のパッチを投稿できます。なぜアップストリームカーネルにプロセス非表示オプションが含まれていないのか、私に聞かないでください。
警告:これらのパッチは、ルートを除く他のユーザーのプロセスを完全に隠します。