A.15 Core Dump
Für Sie als Entwickler kann es während der Entwicklungszeit Ihrer Software manchesmal recht hilfreich sein, wenn das Programm abstürzt und dabei ein »Dump Core« gemacht wird. Mit entsprechenden Kenntnissen können Sie diese Datei zum Debuggen des Programms verwenden. Leider kann solche ein Core-File auch recht sensitive Daten enthalten. Gibt bspw. ein User ein Passwort ein und es tritt ein Dump Core auf, bevor das Passwort im Speicher wieder überschrieben bzw. gelöscht werden kann befindet sich das Dump-File schon auf der Platte.
Hinweis Ein Angreifer ruft gewöhnlich einen solchen Dump Core hervor, in dem dieser die Schwachstellen eines Programms gezielt attackiert, so dass das Programm auch entsprechend abstürzt.
|
Hat der Angreifer nun ein Chance, lesend auf diesen Dump Core zuzugreifen – was zwar in der Regel nicht sein sollte, aber leider in der Praxis durch rekursive Zugriffsrechte-Verteilung leider häufig der Fall ist – haben Sie wieder ein (Hinter-)Türchen mehr aufgemacht.
Daher empfiehlt es sich unter UNIX/Systemen die Ressource RLIMIT_CORE mit der Funktion setrlimit() auf 0 zu setzen, womit das System veranlasst wird, kein Core-File anzulegen.
/* nocore.c */
#include <sys/types.h>
#include <sys/time.h>
#include <sys/resource.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd. h.>
#include <errno.h>
#ifndef DEBUG
void no_core(void) {
struct rlimit rlim;
int ret;
rlim.rlim_cur = rlim.rlim_max = 0;
ret = setrlimit(RLIMIT_CORE, &rlim);
if(ret == -1)
perror("Fehler bei setrlimit");
else
printf("Kein Core Dump wird ggf. erzeugt...\n");
}
#endif
int main(int argc, char **argv) {
/* .... */
#ifndef DEBUG
no_core();
#endif
return EXIT_SUCCESS;
}
In diesem Beispiel wurde einfach ein DEBUG-Makro um die Funktion gelegt. Damit eine Dump Core angelegt werden soll, muss der Entwickler zur Übersetzung explizit den DEBUG-Modus verwenden. Bei Standerdmäßiger Übersetzung wird die Funktion no_core() ausgeführt und somit im Fall der Fälle auch kein Core-File angelegt:
$ gcc -o nocore nocore.c
$ ./nocore
Kein Core Dump wird ggf. erzeugt...
$ gcc -o nocore nocore.c -DDEBUG
$ ./nocore
$
|