응용 프로그램에 SUID가 설정되어 있으면 어떻게 코어 덤프가 만들어지지 않습니까?


16

나는 충돌하는 모든 것의 코어 덤프를 생성하도록 환경을 설정했지만 실행중인 사용자와 다른 사용자에서 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

이제 남은 일은 ACL을 / var / coredumps에 추가하는 것이므로 사용자는 파일 만 추가하고 수정하거나 다시 읽을 수 없습니다. 유일한 축소는 여전히 chroot의 응용 프로그램에 문제가 bind mount있을 것입니다.

답변:


21

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

코어 덤프가 루트 소유인 경우 커널이 기존 파일을 덮어 쓰지 않도록주의해야하지만 보안 허점이 보이지 않습니다.

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

  • fs.suid_dumpablesysctl 을 2 로 설정하여 일반적으로 setuid 코어 덤프를 활성화하십시오 ( 예 : with) echo 2 >/proc/sys/fs/suid_dumpable. (참고 : 1이 아니라 2, 1은 "시스템 전체를 디버깅하고 있으며 모든 보안을 제거하고 싶다"는 의미입니다.)
  • prctl(PR_SET_DUMPABLE, 1)프로그램에서 전화 하십시오.

선생님, 이제 내 개인 영웅입니다!
DipSwitch

@DipSwitch 이상한, 그것은 문서화의 내용이 아닙니다 fs.suid_dumpable. 프로그램 fs.suid_dumpable을 호출하지 않고 설정을 시도 할 수 있습니까 pctrl? 어쩌면 나는 문서를 오해하고있어 코어를 얻었지만이 경우 루트가 소유하고 있습니다.
Gilles 'SO- 악마 그만'

아, 내 나쁜 쓰레기 ... 파일은 루트가 소유하고 있지만 core_pattern의 % u (uid)는 처음 보았을 때 나를 속였습니다.
DipSwitch

이 솔루션은 또한 최소한 커널 2.6.27의 경우 "sudo -s"에서 실행되는 프로그램에도 적용되는 것으로 보입니다.
세스 노블

7

코어 덤프에는 결함 당시 메모리에 있었던 모든 사본이 포함됩니다. 프로그램이 suid를 실행중인 경우 사용자가 액세스 할 수없는 항목에 액세스해야합니다. 프로그램이 해당 정보를 얻은 다음 코어를 덤프하면 해당 권한있는 정보를 읽을 수 있습니다.

위의 예에서 루트로 실행하거나 권한 에스컬레이션을 제거하면 코어 덤프를 얻을 수 있습니다.

setuid 프로그램에서 코어 덤프에 쉽게 액세스 할 수있는 것이 편리하지만 (개발자 만)


1
다음과 같이 말할 위치가 두렵습니다. (
DipSwitch

0

사용 사례를 잊을 때까지 사용 사례도 공유하기로 결정했습니다. 몇 달 전에 같은 문제를 해결했기 때문에 미래에도 도움이 될 수 있으며 한 번 더 알아내는 데 너무 많은 시간이 걸렸습니다. 확인. 실제로 코어 덤프는 아니지만 스택 추적도 유용합니다.

문제 : 무슨 일이 일어나고 있는지 전혀 모른다 :

sudo id
Segmentation fault

해결 방법 : suid 비트를 제대로 작동 sudo시키려면valgrind

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

debuginfo가 설치되면 멋진 역 추적이 작성됩니다.


한편, 권한을 재설정 할 때까지 모든 사람과 Tillie 이모는 valgrind원하는 것을 할 수 있습니다 . 이 작업을 수행하지 마십시오 , 그것은이다 거대한 보안 위험.
vonbrand 2016 년

테스트 머신과 테스트 목적으로 만 사용됩니다.
Jakuje

상관없이 나에게 willies를 제공합니다.
vonbrand 2016 년
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.