GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Wie kommt es, dass kein Core-Dump erstellt wird, wenn eine Anwendung SUID gesetzt hat?

Der Speicher eines Setuid-Programms könnte (wahrscheinlich sogar) vertrauliche Daten enthalten. Der Core Dump müsste also nur für Root lesbar sein.

Wenn der Core-Dump im Besitz von root ist, sehe ich keine offensichtliche Sicherheitslücke, obwohl der Kernel darauf achten müsste, keine vorhandene Datei zu überschreiben.

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

  • Aktivieren Sie Setuid Core Dumps im Allgemeinen, indem Sie den fs.suid_dumpable setzen sysctl auf 2, z.B. mit echo 2 >/proc/sys/fs/suid_dumpable . (Anmerkung:2, nicht 1; 1 bedeutet „Ich debugge das System als Ganzes und möchte die gesamte Sicherheit entfernen“.)
  • Rufen Sie prctl(PR_SET_DUMPABLE, 1) an aus dem Programm.

Der Core-Dump enthält eine Kopie von allem, was zum Zeitpunkt des Fehlers im Speicher war. Wenn das Programm suid ausführt, 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 dann den Kern ausgibt, können Sie diese privilegierten Informationen lesen.

Aus Ihrem obigen Beispiel geht hervor, dass Sie in der Lage sind, einen Core-Dump zu erhalten, wenn Sie als Root ausgeführt werden oder wenn Sie die Rechteausweitung entfernen.

Es mag zwar praktisch sein (meiner Meinung nach nur für Entwickler), einfachen Zugriff auf einen Coredump von einem Setuid-Programm aus zu haben, aber es ist eine Sicherheitslücke und sollte bestehen bleiben.


Linux
  1. Wie man programmgesteuert einen Core-Dump in C/C++ verursacht

  2. Wie kann ich bekommen, was meine Hauptfunktion zurückgegeben hat?

  3. Wie führe ich ein C++-Programm in einem anderen C++-Programm aus?

  4. So legen Sie die Prozess-ID in Linux für ein bestimmtes Programm fest

  5. Wie beschränke ich einen Prozess auf einen CPU-Kern in Linux?

So erstellen Sie einen Application Load Balancer auf AWS

So richten Sie einen Pacemaker-Cluster für Linux mit hoher Verfügbarkeit ein

Wie erstelle ich eine Desktop-Verknüpfung?

So erstellen Sie Threads in Linux (mit einem C-Beispielprogramm)

Linux / UNIX :So finden Sie Dateien, für die SUID/SGID festgelegt ist

Wie analysiere ich die Core-Dump-Datei eines Programms mit GDB, wenn sie Befehlszeilenparameter enthält?