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

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

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

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

sudo/etc/sudoersとルートに属していない場合は/etc実際に動作しますか?権限のないユーザーは、chrootでroot所有のsetuidバイナリを作成できません。そうですか?

権限のないユーザーがchroot環境をどのように正確に損傷する可能性がありますか?

私は次のことだけを考えることができます

ln /mnt/backup/XYZ/etc/sudoers $CHROOT/etc/sudoers
ln /usr/bin/sudo $CHROOT/usr/bin/sudo

これはXYZ、管理者が実際に間違いを犯し、ユーザーが危険なタスクを実行できるようにしたいくつかのバックアップインスタンスを表します。しかし、そこには何か特別なものがあります。chroot(2)権限のないユーザーが利用できる場合、より直接的な悪用方法はありますか?

答え1

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

答え2

一般ユーザーは setuid バイナリを生成できませんが、既存の setuid バイナリへのハードリンクの生成を防ぐ方法はありません。したがって、同じファイルシステム上のディレクトリへの書き込みアクセス権がある場合は、/usr/binこのディレクトリに刑務所を置くか、またはへのハードsuリンクを作成してsudoからカスタムおよび刑務所に入れることができます。/etc/passwd/etc/sudoers

ルートが所有していることをsudo確認できるため、適用されない可能性があります。しかし、所有権は確認されないと/etc/sudoers思います。su/etc/passwd

答え3

ブラッド・スペングラーによるとhttps://forums.grsecurity.net/viewtopic.php?f=7&t=2522、これを行う簡単な方法がありますCAP_SYS_CHROOT(関数を使用するchroot(2)

CAP_SYS_CHROOT:共通:Julien Tinnes / Chris Evansの場合:suidルートバイナリと同じファイルシステムへの書き込み権限がある場合は、バックドアlibcでchroot環境を設定し、chrootでハードリンクされたsuidルートバイナリを実行し、バックドアを介して権限を取得します。取得するには、ルート全体を取得します。

関連情報