Ist die Anwendung statisch gelinkt?
Wenn nicht, können Sie einige Symbole überschreiben, zum Beispiel definieren wir socket
neu :
int socket(int domain, int type, int protocol)
{
write(1,"Error\n",6);
return -1;
}
Erstellen Sie dann eine gemeinsam genutzte Bibliothek:
gcc -fPIC -shared test.c -o libtest.so
Lass uns laufen:
nc -l -p 6000
Okay.
Und jetzt:
$ LD_PRELOAD=./libtest.so nc -l -p 6000
Error
Can't get socket
Was passiert, wenn Sie mit der Variablen LD_PRELOAD=./libtest.so
laufen ? Es überschreibt mit Symbolen, die in libtest.so definiert sind, die in der C-Bibliothek definierten.
Es scheint, dass Systrace genau das tut, was Sie brauchen. Von der Wikipedia-Seite:
Eine Anwendung darf nur die Systemaufrufe ausführen, die in der Richtlinie als zulässig angegeben sind. Wenn die Anwendung versucht, einen Systemaufruf auszuführen, der nicht ausdrücklich erlaubt ist, wird ein Alarm ausgelöst.
Dies ist eine mögliche Anwendung von Sandboxing (insbesondere regelbasierte Ausführung). Eine beliebte Implementierung ist SELinux.
Sie müssen die Richtlinie schreiben, die dem entspricht, was Sie dem Prozess erlauben möchten.