sudo/root-ness検出の仕組み

sudo/root-ness検出の仕組み

システム全体を変更するプログラムには、次のものが必要です。sudo すでにrootユーザーでない限り

今質問は次のとおりです。どのように正確にシステムは私がルートではないことを知っていますか?

できる:

  • 私が特定のグループに属していることを確認してください。では、どのグループに参加する必要がありますか?

  • ルート自体のよく知られたIDを確認してください(たとえば、「rootユーザー」がソースコードにハードコードされています)。
    もしそうなら、私のルートアカウントが破損した場合はどうなりますか? root権限で別のアカウントを作成できないので、オペレーティングシステムを強制的に再インストールする必要がありますか?

  • 一部のファイルの内容に基づいて自分の名前/グループを確認し、正しい権限を付与しますか?では、この情報を含むファイルは何ですか?

  • 別のことをしますか?それでは何をしますか?

答え1

Unixのユーザー名は重要ではありません。数字のユーザーIDのみがあります。ルートの数値 ID は常に 0 です。これはすべての場所(カーネル、ユーティリティなど)にハードコードされています。

を実行して、数値のユーザーIDを見つけることができますid

数値のユーザーIDは、実行中のプロセスの属性です。ログインするとlogin(など)でログインしたプロセスがルートsshd(UID 0)で実行され、ログインが承認されるとユーザーIDに切り替わり、シェル(passwdで指定された/ etc /で)が実行されます。 )。そこからまたは他のものを使用してsudoユーザーIDを切り替えるにsu設定値ビットは、実行時にプロセスがプログラム所有者(ルート、UID 0)で実行されるように設定(chmod u+sまたは設定される予定)です。chmod 4xxx同様に、権限が与えられたら、sudoすべてのプログラムをrootとして実行します(実行、シェルなど何を指示しても関係ありません)。 (このsu場合、切り替える他のユーザーを指定すると、そのUIDに切り替えた後にシェルなどを実行することになります。)

あなたの答えその他問題は、rootアカウントが数字にすぎないため、rootアカウントを「オフ」にする方法はありませんが、rootとしてログインできない理由はいくつかあります(パスワードを忘れた場合など)。これらのいずれもオペレーティングシステムを再インストールする必要はありませんが、問題を解決するには少し技術的なスキルが必要になることがあります。 (たとえば、ルートパスワードを忘れた場合は、sudoを使用してパスワードでルートにアクセスしたり、シングルユーザーモードで起動してパスワードをリセットしたり、ライブメディアまたはリカバリ環境で起動したりできます。)

答え2

25年間Unixを使用している間、rootアカウントが破損してシステム自体が利用できなくなる状況を見たことはありません。忘れたパスワードは簡単にリセットでき、パスワードが破損しているようには見えません。 BSDを実行しているVaxで1つの記憶に残るイベントが発生しました。からすべてを削除できるようになりました。

Unixでは実際に壊れることは何もありません。ログインプロセスは単にシェルを起動し、ルートのホームディレクトリからrcファイルを実行します。 rcファイルを除いて、残りのファイルがルートで機能しない場合、おそらく他の誰にも機能しません。グラフィックシステム(KDEまたはGnome)にrootとしてログインしている場合、私ができることは「しないでください」ということです。

uid 0で複数のアカウントを持つことができます。コンピュータに複数の管理者がいる場合は、sudoの代わりに使用できます。欠点は、保護する必要があるルートアカウントが複数あることです。また、sudoが実行するロギングを取得できません。

答え3

スティーブン・プリチャードの回答素晴らしいですが、同様の情報について別のプレゼンテーションを提供する必要があると思いました。

各プロセスは特定のユーザーとして実行されます。ユーザーは、カーネルでのみ使用可能なプロセス情報に格納されているユーザーIDである番号で識別されます。ユーザーID 0を持つユーザーは通常、という特別な権限を持ちますroot。この名前はrootカーネルにとって特別ではありません(ただし、名前を変更すると多くのアプリケーションが混乱する可能性があります)。カーネルモジュールのロード、ほとんどのハードウェアデバイスへの直接アクセスなど、多くのタスクを実行するには、タスクを実行するプロセスをユーザーID 0²で実行する必要があります。

システムが起動すると、カーネルによって開始された最初のプロセスがスーパーユーザーとして実行されます。このプロセスが呼び出され、init最終的に多くのシステムサービス(cron、、、、syslogd...)とログインプログラム(login、、、sshdなど)が起動します。

ログイン時に資格情報(名前、パスワードなど)を入力すると、ログインプログラムはこれらの資格情報を確認します。資格情報が受け入れられると、ログイン手順はユーザーID(スーパーユーザーに付与された権限の1つ)に変更されます。

ユーザーデータベースを台無しにした場合(rootで任意のファイルを編集または削除しない限り、これは発生しません)、ログインできなくなる可能性があります。それでもシングルユーザーモードで起動したり、Live CDからシステムを回復したりできます。

このプログラムを使用するsudoと、rootとしてコマンドを実行できます。通常、プログラムを実行すると、そのプログラムを開始したプロセスのユーザー ID が継承されます。sudoしかし、設定値/usr/bin/sudoroot:これは、ユーザーID 0で実行する許可ビットによって決まる例外です。sudoこれを呼び出すユーザーが昇格した権限で(lookupを介して/etc/sudoers)コマンドを実行できることを確認し、コマンドを実行するかエラー信号を送信します。

1は時々2つ以上ですが、この回答には表示されません。
²条件付の権利能力しかし、今は心配しないでください。

答え4

「ルート」権限の概念は、さまざまな制御メカニズムに広がります。

  1. ハードウェア:Intel CPU(および通常は他のすべてのCPU)にはさまざまな「特権状態」があります。各特権状態では、特定のクラスのアセンブリ命令を実行できます。一般に、より多くの権限を持つ状態には、より多くの複数の命令を実行する権限があります。

https://stackoverflow.com/questions/18717016/what-are-ring-0-and-ring-3-in-the-context-of-operating-systems

https://en.wikipedia.org/wiki/Protection_ring

特権命令の1つは、メモリページテーブルを制御することです。これらのさまざまなリングは、カーネル対ユーザー空間の実行スレッドも提供します。

  1. (1)から始めて、ページテーブルメカニズムを介してリング0またはリング3メモリなどのさまざまな種類のメモリもあります。

https://en.wikipedia.org/wiki/Kernel_page-table_isolation

https://manybutfinite.com/post/cpu-rings-privilege-and-protection/

リング 0 はより多くの権限を持ち、USERID 情報を含むすべての機密情報を保存します。 userid=0 の場合は権限を持つユーザー、それ以外の場合は一般ユーザーです。各ユーザーIDはカーネルに異なるページテーブルを持っています。これが、各プロセスが互いにメモリを直接変更できない理由です。ユーザーIDはRing0メモリに保存されています。 Ring 3で実行されているプロセスはこの情報を変更することはできません。 。

自分がルートであるかルートでないかを確認するには、カーネルで次のようにします。

  if (current_cred()->uid != 0)
     return -EPERM;

カーネルにないと、カーネルに保存されているすべての資格情報にアクセスできなくなります。そして、あるプロセスは別のプロセスのメモリを読み取ることができません。したがって、すべてのプロセスのすべてのメモリを表示できるカーネルにない場合は、これらのチェックを実行する必要はありません。

要約すると、実行中のすべてのプロセスは常にリング3権限(Intelの場合)で実行されます。ユーザーID情報はカーネルに保持されます。この情報は、もともと他のカーネルコンポーネントから生成されたものでなければなりません。またはルートプロセス(userid = 0)です。すべてのルート所有プロセス(まだRing3で実行されています)にはその機能があります(理由は何ですか?Linuxカーネルのソースコード自体に書かれているためです)。

https://stackoverflow.com/questions/15774548/check-for-user-root-within-linux-kernel)リング0権限に簡単に切り替える。これは、自分のメモリ(すべてリング3で実行)をどのように変更してもユーザーIDを表示または変更できない理由を説明します。

ファイルに所有権が保存されているかどうか尋ねました。はい、ファイルにユーザーIDの所有権が含まれています。また、特定のユーザーIDを使用して実行されているプロセスは、他のユーザーIDを使用して他のファイルを変更することはできません。セキュリティはこの方法でファイルと実行中のプロセス(ユーザーIDがカーネルメモリに保存されている)に分けられます。しかし、他の人があなたの実際のファイルを読むことができないと完全に確信することはできません。

ハードドライブを取り込むことができる場合その他の機械ルート制御権限がある場合は、ハードドライブが特定のユーザーIDが所有する物理ファイルを読み取るために必要なすべてのユーザーIDを想定できます。つまり、物理的なセキュリティがない場合は、暗号化されていない限り、ハードドライブのすべてのセキュリティメカニズムをバイパスできます。

関連情報