권한이 없는 사용자가 chroot(2)를 사용할 수 없는 이유는 무엇입니까?

권한이 없는 사용자가 chroot(2)를 사용할 수 없는 이유는 무엇입니까?

chroot(2)권한이 없는 사용자가 사용할 수 없는 이유는 무엇 입니까?

인터넷의 기존 답변을 이해하지 못합니다. 예를 들어 이https://lists.freebsd.org/pipermail/freebsd-security/2003-April/000123.html.

sudo/etc/sudoers과 가 루트에 속하지 않으면 /etc실제로 작동합니까? 권한이 없는 사용자는 chroot에서 루트 소유의 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 디렉터리 내부를 수정하면 루트 권한으로 임의의 코드를 실행할 수 있습니다. 당신은 볼 수 있습니다.

답변2

일반 사용자는 setuid 바이너리를 생성할 수 없지만 기존 setuid 바이너리에 대한 하드 링크를 생성하는 것을 막을 수 있는 방법은 없습니다. 따라서 와 동일한 파일 시스템의 디렉토리에 대한 쓰기 액세스 권한이 있는 경우 /usr/bin이 디렉토리에 감옥을 넣고 su또는 에 대한 하드 링크를 만든 sudo다음 사용자 정의 /etc/passwd및 를 /etc/sudoers감옥에 넣을 수 있습니다.

루트가 소유하고 있는지 sudo확인할 수 있으므로 적용되지 않을 수도 있습니다 . 하지만 소유권은 확인되지 않을 /etc/sudoers것 같아요 .su/etc/passwd

답변3

브래드 스펭글러(Brad Spengler)에 따르면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 루트 바이너리를 실행하고 백도어를 통해 권한을 얻으려면 전체 루트를 얻으십시오.

관련 정보