setuid 프로그램이 TinyCore Linux에서 setuid를 실행할 수 없는 것 같습니다.

setuid 프로그램이 TinyCore Linux에서 setuid를 실행할 수 없는 것 같습니다.

setuidTinyCore Linux 라이브 CD를 사용하여 프로그램의 취약점을 보여주고 싶습니다 . 즉, 실행 사용자가 아닌 파일 소유자로 실행되도록 특수 권한을 갖는 특수 프로그램을 만들었습니다. 내 단계는 다음과 같습니다.

  1. 보안 취약점이 있는 프로그램을 만들고(아래 참조), 내 홈 시스템(Ubuntu)에서 컴파일합니다.

  2. 우분투에서 여전히 프로그램 생성 setuid및 파일 소유자 설정

  3. Tiny Core 라이브 CD의 압축을 풀고 취약한 프로그램을 복사하세요 chroot.

문제는 프로그램이 환경이나 완성된 리마스터 이미지 setuid모두에서 작동하지 않는 것 같다는 것입니다. chrootUbuntu에서는 작동하지만 Tiny Core에서 작동하려면 필요합니다. 프로그램은 Tiny Core에서 실행되지만 소유자로는 실행되지 않습니다 setuid.

프로그램 소스 코드:

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char **argv)
{
  printf("Current time: ");
  fflush(stdout);
  system("date");
  return 0;
}

빌드 명령:

gcc -o prog prog.c

setuid로 만드세요:

sudo chown 1200.1200 prog
sudo chmod 4755 prog

date취약점을 보여주는 스크립트 를 작성하세요 .

#!/bin/sh

echo hello > /tmp/test.txt
ls -l /tmp/test.txt

조작된 date스크립트를 실행 가능하게 만들고 취약점을 노출시킵니다.

chmod +x date
PATH=.:$PATH ./prog

우분투에서는 예상대로 /tmp/test.txt소유자 1200 을 생성합니다. 하지만 chroot라이브 CD 환경에 들어가면 작동하지 않고 실행 파일이 실행되지만 파일 소유자로는 실행되지 않습니다. 리마스터를 완료하고 라이브 CD를 만들고 부팅하면 파일에 올바른 소유자, 그룹 및 권한이 있어도 작동하지 않습니다 4755. 내가 무엇을 놓치고 있나요?

환경을 생성하려면 chroot다음에서 8MB 라이브 CD를 다운로드하세요.http://distro.ibiblio.org/tinycorelinux/downloads.html다음 단계를 따르세요.

sudo mount Core-current.iso /mnt
mkdir /tmp/extract
cd /tmp/extract
zcat /mnt/boot/core.gz | sudo cpio -i -H newc -d

chroot다음 명령을 사용하여 취약한 프로그램을 환경에 복사합니다 .

sudo cp -a /path/to/prog /tmp/extract/tmp
sudo cp /path/to/date /tmp/extract/tmp

chroot그곳에서 취약점을 테스트합니다.

sudo chroot /tmp/extract /bin/sh
su - tc
cd /tmp
PATH=.:$PATH ./prog

나의 궁극적인 목표는 물론 라이브 CD에서 실행되도록 하는 것입니다. 에서 작동하지 않아도 괜찮습니다 chroot. 이는 이미지를 다시 패키징하고 부팅하지 않고도 적절한 첫 번째 테스트처럼 보입니다.

답변1

setuidTinyCore에는 문제가 없습니다. 그러나 문제의 간단한 프로그램은 TinyCore에서 활용하기가 그리 간단하지 않습니다.

호출 system은 호출에 지정된 명령을 사용합니다 /bin/sh -c. TinyCore에서는 /bin/sh심볼릭 링크에 대해 권한을 busybox ash포기합니다 setuid. 따라서 쉘 스크립트나 악의적인 작업을 수행하는 바이너리를 작성하고 date취약한 프로그램이 실행되도록 속이기 위해 이름을 지정하더라도 setuid원래 프로그램 setuid은 실행되지 않습니다 system.

그런데 버전 2부터 표준은 bash호출 시 권한도 제거합니다. 그러나 질문에 설명된 취약점은 Debian 및 그 파생 제품에서 입증될 수 있습니다. 왜냐하면 분명히 Debian 버전은 권한을 제거하지 않기 때문입니다. (분명히 그럴 만한 이유가 있을 것 같은데, 연구해 본 적은 없습니다.)setuid/bin/shbash

마지막으로 프로그램을 다음과 같이 변경하여 권한 포기를 피할 수 있었습니다.

int main(int argc, char **argv)
{
  // circumvent busybox ash dropping privileges
  uid_t uid = geteuid();
  setreuid(uid, uid);

  printf("Current time: ");
  fflush(stdout);
  system("date");
  return 0;
}

답변2

일부 보안 정책(SELinux, AppArmor 등)이 적용되어 목록에 없는 실행 파일에 대한 SUID를 허용하지 않는 것일까요? 아니면 (순수한 정신을 위해) /tmpnosuid를 설치했습니까?

관련 정보