2010-12-11 2 views
6

Ich habe Codepad.org ausgecheckt und eine Weile (1) gab gab die folgende Ausgabe.Wie können Systemaufrufe während der Ausführung eines Programms in einer Sandbox-Umgebung verhindert werden?

Unzulässige Systemaufruf: SYS_fork

prüfen Link zur genauen Details. http://codepad.org/rNR9mMVv

Googeln mehr, ich muss wissen, dass sie auch Systemaufruf mit Sockets deaktivieren.

Unzulässige Systemaufruf: SYS_socketcall

Kann mir jemand sagen, wie ein bestimmtes System deaktivieren können Anrufe, bevor das Programm in einer Sandbox-Umgebung ausgeführt wird?

+0

Ich denke, dies wäre ein Kernel-Level-Problem und nicht spezifisch für C++ oder andere native Binärdateien. Es sei denn, es gibt irgendwo einen C++ - Interpreter, der den Code in einer nicht-nativen Umgebung ausführen kann? – JOTN

Antwort

1

Durch Ersetzen von Laufzeitbibliotheken durch Mocks, die leere Stubs oder Ausnahme-Werfer anstelle von echten Funktionen haben?

+0

Aber wird das nicht die eigentliche Funktionalität dieser Funktionen deaktivieren. Zum Beispiel, wenn ich die Laufzeitbibliotheken von fork() ersetze und wenn ich in meinem Code verzweigen möchte, aber fork in dem von anderen übermittelten Code deaktivieren möchte, wird diese Methode noch funktionieren? Wenn ja, dann lass es mich wissen wie .. Danke. – sp2hari

+0

Ich postuliere nur, ich denke, dass Sie für die korrekte Implementierung eine Art Sandbox-Umgebung erstellen müssen, damit Sie Ihre Laufzeiten verdoppeln können - eine echte und eine als Schatten. –

+2

Funktioniert nicht. Jemand, der hereinkommt, kann die Inline-Assemblierung verwenden, um direkt auf das Syscall-Gateway zuzugreifen. – Joshua

1

Wenn Sie bereit sind, die Leistung zu bezahlen, kann ptrace() dafür verwendet werden. Es gibt noch einen anderen Weg, den ich gerade nicht finden kann.

0

Systemaufrufe funktionieren, indem das Betriebssystem die Funktion in den Prozess eingibt. Wenn Sie jedoch einen benutzerdefinierten Loader für Ihr bevorzugtes ausführbares Format geschrieben haben, können Sie ihn mit Ihrem eigenen verknüpfen. Sie können die ausführbare Datei auch binär ändern, wenn das Format dies zulässt, um diese Funktionen aus einer separaten dynamischen Bibliothek zu holen, die von Ihnen bereitgestellt wird.

0

Ich weiß, das ist eine alte Frage, aber ich recherchierte das gleiche Zeug, also hier ist mein Vorschlag - verwenden Sie SELinux. Das Gentoo Projekt, hat einige nice stuff über SELinux. Werfen Sie einen Blick auf die SELinux Policy Types (4.b), und die gezielte Politik im Besonderen. Ich bin nicht sicher über codepad.org, aber die ähnliche ideone.com verwendet Gentoo, also vielleicht SELinux sollte der einfachste Weg zu gehen.

Verwandte Themen