애플리케이션이 SUID를 설정할 때 코어 덤프가 생성되지 않는 이유는 무엇입니까?

애플리케이션이 SUID를 설정할 때 코어 덤프가 생성되지 않는 이유는 무엇입니까?

모든 충돌에 대해 코어 덤프를 생성하도록 환경을 설정했지만 실행 사용자와 다른 사용자에 대해 SUID가 설정된 프로그램을 실행하면 코어 덤프가 생성되지 않습니다. 왜 이런지 아시나요? 웹 어디에서도 찾을 수 없습니다. 일종의 보안 기능인 것 같지만 비활성화하고 싶습니다...

질문:

$ cd /tmp
$ cat /etc/security/limits.conf | grep core
*     -     core     unlimited
root  -     core     unlimited

$ ls -l ohai
-rwsr-sr-x 1 root root 578988 2011-06-23 23:29 ohai

$ ./ohai
...
Floating point exception

$ sudo -i
# ./ohai
...
Floating point exception (core dumped)
# chmod -s ohai
# exit
$ ./ohai
...
Floating point exception (core dumped)

편집하다: 가능한 한 안전하게 작동하도록 하기 위해 이제 다음 스크립트를 사용하여 환경을 설정합니다.

mkdir -p /var/coredumps/
chown root:adm /var/coredumps/
chmod 772 /var/coredumps/

echo "kernel.core_pattern = /var/coredumps/core.%u.%e.%p" >> /etc/sysctrl.conf
echo "fs.suid_dumpable = 2" >> /etc/sysctl.conf

echo -e "*\t-\tcore\tunlimited" >> /etc/security/limits.conf
echo -e "root\t-\tcore\tunlimited" >> /etc/security/limits.conf

이제 남은 일은 사용자가 파일을 추가만 할 수 있고 수정하거나 다시 읽을 수 없도록 /var/coredumps에 ACL을 추가하는 것입니다. 유일한 범위를 좁힐 수 있는 점은 루트를 지정 bind mount하거나 유사해야 하는 앱에 여전히 문제가 있다는 것입니다.

답변1

setuid 프로그램의 메모리에는 기밀 데이터가 포함될 수 있습니다(아마도). 따라서 코어 덤프는 루트만 읽을 수 있어야 합니다.

커널이 기존 파일을 덮어쓰지 않도록 주의해야 하지만 코어 덤프를 루트가 소유한 경우에는 명백한 보안 취약점이 보이지 않습니다.

Linux는 setxid 프로그램의 코어 덤프를 비활성화합니다. 이를 활성화하려면 최소한 다음을 수행해야 합니다(이것이 충분한지 확인하지 않았습니다).

  • Setuid 코어 덤프는 일반적으로 설정을 통해 활성화됩니다.fs.suid_dumpable시스템 제어echo 2 >/proc/sys/fs/suid_dumpable(참고: 1이 아닌 2입니다. 1은 "전체 시스템을 디버깅 중이며 모든 보안을 제거하고 싶습니다."를 의미합니다. )
  • 부르다prctl(PR_SET_DUMPABLE, 1)프로그램에서.

답변2

코어 덤프에는 오류 발생 당시 메모리에 있는 모든 항목의 복사본이 포함되어 있습니다. 프로그램이 suid를 실행 중이라면 이는 사용자가 액세스할 수 없는 항목에 액세스해야 함을 의미합니다. 프로그램이 해당 정보를 얻은 다음 코어를 덤프하면 해당 특권 정보를 읽을 수 있습니다.

위의 예에서는 루트로 실행하거나 권한 에스컬레이션을 제거할 때 코어 덤프를 얻을 수 있는 것으로 보입니다.

setuid 프로그램에서 코어 덤프에 쉽게 액세스하는 것이 편리할 수 있지만(개발자에게만 해당된다고 생각합니다) 이는 보안 허점이므로 그대로 유지해야 합니다.

답변3

나는 잊어버릴 때까지 내 사용 사례도 공유하기로 결정했습니다. 몇 달 전에 같은 문제를 해결했고 다시 알아내는 데 너무 오랜 시간이 걸렸기 때문에 이것은 미래의 나에게도 유용할 수 있습니다. 좋아요 실제로 코어 덤프는 아니지만 스택 추적도 유용합니다.

질문: 거기에서 무슨 일이 일어나고 있는지 모르겠습니다.

sudo id
Segmentation fault

해결 방법: suid 비트를 에서 로 이동 sudo하면 valgrind작동합니다.

chmod +s /usr/bin/valgrind
chmod -s /usr/bin/sudo
valgrind /usr/bin/sudo id

debuginfo가 설치되면 멋진 추적이 기록됩니다.

관련 정보