2009-02-08 6 views
5

Das Implementieren einer 'Sandbox'-Umgebung in Python wurde mit dem rexec-Modul (http://docs.python.org/library/rexec.html) durchgeführt. Leider wurde es wegen einiger Sicherheitslücken als veraltet/entfernt. Gibt es eine Alternative?Gibt es eine Alternative zu rexec für Python-Sandboxing?

Mein Ziel ist es, Python-Code halb vertrauenswürdige Python-Skripte ausführen zu lassen. In einer perfekten Welt würden Aufrufe von Funktionen außerhalb einer vordefinierten Menge Ausnahmen auslösen. Nach dem, was ich über die Vernachlässigung von rexec gelesen habe, ist dies möglicherweise nicht möglich. Also werde ich mich mit so viel zufrieden geben, wie ich bekommen kann. Ich kann einen separaten Prozess erstellen, um die Skripts auszuführen, was sehr hilfreich ist. Aber sie könnten immer noch I/O oder Prozessor/Speicherressourcen missbrauchen.

+0

Für was es aussieht, es scheint so lange wie Sie PID-Erstellung ulimit, rexec ist sicher. – user2284570

Antwort

4

Sie könnten Ihre eigenen __import__ bereitstellen, um die Einbeziehung von Modulen zu verhindern, die Ihrer Meinung nach "E/A- oder Prozessor/Speicherressourcen missbrauchen".

Sie können mit pypy beginnen und einen eigenen Interpreter mit Einschränkungen und Einschränkungen für die Ressourcennutzung erstellen.

+0

Die Bereitstellung eines eigenen __import__ ist eine großartige Idee und ist weitaus besser als jede andere Lösung, die jemals für Sandboxing durchgeführt wurde! – kylebrooks

+0

@ Kylebrooks: "viel besser als jede andere Lösung" ist eine Bitfolge. Sie können Module auf die weiße Liste setzen (und auf die schwarze Liste setzen), jedoch wird dadurch kein Prozess verhindert oder gar erkannt, der versucht, E/A- oder Prozessor-/Speicherressourcen zu missbrauchen. –

+0

Sie können diese Module nur dann auf die weiße Liste setzen, wenn Sie keinen Zugriff auf Objekte haben, die Verweise darauf enthalten (oder eine C-Erweiterung, die die Module auf Python-Ebene vollständig umgeht). Die fehlende Kapselung in Python scheint die größte Sicherheitsherausforderung zu sein. – DylanYoung

2

in CPython „Sandbox“ aus Sicherheitsgründen ein: tun das nicht in Ihrem Unternehmen Kinder“-Ding.

Versuch:

  • jython mit java "Sandbox"
  • PyPy -> siehe Antwort S.Lott
  • vielleicht Ironpython hat eine Lösung?

siehe Warning:

Warnung

In Python 2.3 diese Module sind aufgrund verschiedener bekannter und nicht leicht reparierbar Sicherheitslücken deaktiviert. Die Module sind hier noch dokumentiert, um beim Lesen von altem Code zu helfen, der die Module rexec und Bastion verwendet.

+0

Es scheint, dass all diese Sicherheitslücken das Erstellen von Threads oder Prozessen erfordern. Daher ist rexec sicher, wenn die PID-Erstellung ulimit ist. – user2284570

0

Ihre beste Sicherheit für cPython besteht darin, Sandboxing-Mechanismen auf OS-Ebene zu verwenden und nicht vertrauenswürdigen Code in einem separaten Prozess auszuführen, der vom Betriebssystem eingeschränkt wird.

Dies entspricht der Verwendung von 'jython with java' sandboxing '', wie in the answer above, aber wahrscheinlich ein wenig schwieriger zu konfigurieren.