Warum wird kein Core-Dump erstellt, wenn für eine Anwendung die SUID festgelegt wurde?

16

Ich richte meine Umgebung so ein, dass ein Core-Dump von allem erstellt wird, was abstürzt. Wenn ich jedoch ein Programm mit SUID auf einem anderen Benutzer als dem ausführenden Benutzer ausführe, wird kein Core-Dump erstellt. Irgendeine Idee, warum das so sein könnte? Ich konnte es nirgendwo im Web finden, ich denke, es ist eine Art Sicherheitsfunktion, aber ich möchte, dass es deaktiviert wird ...

Problem:

$ 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)

Bearbeiten: Damit es so sicher wie möglich funktioniert, habe ich jetzt das folgende Skript zum Einrichten der Umgebung:

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

Jetzt müssen Sie nur noch ACL zu / var / coredumps hinzufügen, damit Benutzer nur Dateien hinzufügen und diese nie wieder ändern oder lesen können. Der einzige Nachteil ist, dass ich immer noch ein Problem mit chroot-Anwendungen habe, die so bind mountetwas benötigen .

DIP Schalter
quelle

Antworten:

21

Der Speicher eines Setuid-Programms kann (wahrscheinlich sogar) vertrauliche Daten enthalten. Der Core-Dump müsste also nur von root gelesen werden können.

Wenn der Core-Dump im Besitz von root ist, sehe ich keine offensichtliche Sicherheitslücke, obwohl der Kernel vorsichtig sein müsste, um eine vorhandene Datei nicht zu überschreiben.

Linux deaktiviert Core Dumps für setxid-Programme. Um sie zu aktivieren, müssen Sie mindestens die folgenden Schritte ausführen (ich habe nicht überprüft, ob dies ausreichend ist):

  • Aktivieren Sie setuid-Core-Dumps im Allgemeinen, indem Sie fs.suid_dumpablesysctl auf 2 setzen, z echo 2 >/proc/sys/fs/suid_dumpable. B. mit . (Hinweis: 2, nicht 1; 1 bedeutet "Ich debugge das System als Ganzes und möchte alle Sicherheitsmaßnahmen entfernen".)
  • Aufruf prctl(PR_SET_DUMPABLE, 1)aus dem Programm.
Gilles 'SO - hör auf böse zu sein'
quelle
Sir, Sie sind jetzt mein persönlicher Held!
DipSwitch
@ DipSwitch Seltsam, das steht nicht in der Dokumentation fs.suid_dumpable. Kannst du das einstellen probieren fs.suid_dumpableohne pctrldas Programm aufzurufen ? Vielleicht verstehe ich die Dokumentation falsch und Sie bekommen in diesem Fall einen Core, der aber im Besitz von root ist.
Gilles 'SO - hör auf, böse zu sein'
Ah crap my bad ... die Datei gehört root, aber die% u (uid) in core_pattern hat mich auf den ersten Blick getäuscht.
DipSwitch
Diese Lösung scheint auch für Programme zu gelten, die unter "sudo -s" ausgeführt werden, zumindest für Kernel 2.6.27.
Seth Noble
7

Der Core-Dump enthält eine Kopie von allem, was sich zum Zeitpunkt des Fehlers im Speicher befand. Wenn das Programm suid ausgeführt wird, bedeutet dies, dass es Zugriff auf etwas benötigt, auf das Sie als Benutzer keinen Zugriff haben. Wenn das Programm diese Informationen erhält und den Core-Speicherauszug erstellt, können Sie diese privilegierten Informationen lesen.

Aus Ihrem obigen Beispiel geht hervor, dass Sie einen Core-Dump erhalten können, wenn Sie als Root ausgeführt werden oder wenn Sie die Rechteerweiterung entfernen.

Während es praktisch sein kann (nur für Entwickler), von einem Setuid-Programm aus einfachen Zugriff auf einen Coredump zu haben, ist es eine Sicherheitslücke und sollte an Ort und Stelle belassen werden.

unpythonisch
quelle
1
Ich hatte Angst, dass du so etwas sagen
würdest
0

Ich habe beschlossen, dass ich meinen Anwendungsfall auch freigeben werde, bis ich ihn vergesse. Es könnte auch für mich von Nutzen sein, da ich vor Monaten das gleiche Problem gelöst habe und es zu lange gedauert hat, es noch einmal herauszufinden. In Ordnung. Es ist nicht wirklich ein Core-Dump, sondern ein Stack-Trace, der ebenfalls nützlich ist.

Problem: Keine Ahnung was da los ist:

sudo id
Segmentation fault

Lösung: Bewegen Sie das suid-Bit von sudonach valgrindfunktioniert einwandfrei :

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

Wenn debuginfo installiert ist, wird nice backtrace geschrieben.

Jakuje
quelle
Und währenddessen können alle und Tante Tillie, bis Sie daran denken, die Einstellungen zurückzusetzen, valgrindwas immer sie wollen. Tun Sie das nicht , es ist ein großes Sicherheitsrisiko.
Vonbrand
nur auf prüfmaschine und natürlich zu prüfzwecken.
Jakuje
gibt mir die willies, egal.
Vonbrand