web-dev-qa-db-ja.com

特権のないユーザーがchroot(2)を使用できないのはなぜですか?

特権のないユーザーがchroot(2)を使用できないのはなぜですか?

私はインターネット上の既存の答えを理解していません。たとえば、これは https://lists.freebsd.org/pipermail/freebsd-security/2003-April/000123.html です。

_/etc/sudoers_と_/etc_がrootによって所有されていない場合、Sudoは実際に機能しますか?特権のないユーザーは、chroot内にroot所有のsetuidバイナリを作成することはできませんか?

特権のないユーザーがchroot環境を破壊するにはどうすればよいでしょうか。

私はそのようなことしか考えられません

_ln /mnt/backup/XYZ/etc/sudoers $CHROOT/etc/sudoers
ln /usr/bin/Sudo $CHROOT/usr/bin/Sudo
_

ここで、XYZは、管理者が実際に失敗し、ユーザーに危険な何かを許可したバックアップインスタンスを示します。しかし、これはちょっと特別です。特権のないユーザーが利用できる場合、chroot(2)を悪用するもっと簡単な方法はありますか?

7
woky

https://forums.grsecurity.net/viewtopic.php?f=7&t=2522 のBrad Spenglerによると、_CAP_SYS_CHROOT_( chroot(2)を使用する機能:

CAP_SYS_CHROOT:generic:Julien Tinnes/Chris Evansから:suidルートバイナリと同じファイルシステムへの書き込みアクセス権がある場合は、バックドアされたlibcを使用してchroot環境をセットアップし、chroot内でハードリンクされたsuidルートバイナリを実行してフルルートを取得しますバックドアを介した特権

4
guest

通常のユーザーはsetuidバイナリを作成できませんが、既存のsetuidバイナリへのハードリンクを作成することを妨げるものは何もありません。したがって、彼が/usr/binと同じファイルシステム上のディレクトリへの書き込み権限を持っている場合、彼はこのディレクトリに刑務所を置き、その中にsuまたはSudoへのハードリンクを作成できます。カスタムの/etc/passwd/etc/sudoersを刑務所に入れます。

/etc/sudoersがrootによって所有されていることを確認する可能性があるため、Sudoでは機能しない可能性があります。しかし、su/etc/passwdの所有権をチェックしないに違いありません。

4
Barmar

chroot(2)は作業ディレクトリを変更しないため、呼び出し後、./をルートとするツリーの外部にある可能性があります。その後、相対パスを使用して、chroot内から任意のsetuidバイナリを実行できます。これを悪用する方法はおそらくたくさんあります。たとえば、chrootディレクトリ内の/etc/ld.so.preloadを変更することにより、root権限で任意のコードを実行できます。 を見ることができます。

1
Friedrich