Blockiert potentiell schädliche R-Aufrufe

8

Nehmen wir an, dass R mit root / admin-Rechten ausgeführt wird. Was für R-Aufrufe halten Sie für schädlich, abgesehen von system() und file.*() ?

Das ist eine plattformspezifische Frage, ich betreibe Linux, deshalb bin ich an Linux-spezifischen Sicherheitslecks interessiert. Ich werde verstehen, wenn Sie Diskussionen über R blockieren, da dieser Beitrag leicht in "Wie vermasselt man das System mit R?" Erscheinen kann.

    
aL3xa 26.10.2010, 14:24
quelle

8 Antworten

11

Führe R nicht mit Root-Rechten aus. Es gibt keinen effektiven Weg, R auf diese Weise zu sichern, da die Sprache eval und reflection beinhaltet, was bedeutet, dass ich Aufrufe an das System konstruieren kann, selbst wenn Sie das nicht wollen.

Es ist viel besser, R auf eine Weise auszuführen, die die System- oder Benutzerdaten nicht beeinflussen kann, egal was es versucht.

    
Alex Brown 26.10.2010, 14:42
quelle
8

Alles, was externen Code aufruft, könnte auch Systemänderungen vornehmen, also müssten Sie bestimmte Pakete und Dinge wie .Call() , .C() , .jcall() usw. sperren.

Es genügt zu sagen, dass es am Ende eine praktisch unmögliche Aufgabe ist, und Sie sollten es besser in einer virtualisierten Umgebung ausführen, wenn Sie Root-Zugriff benötigen.

    
Shane 26.10.2010 14:34
quelle
5

Sie können nicht. Sie sollten nur die Frage ändern: "Wie führe ich vom Benutzer bereitgestellten R-Code, um den Benutzer oder andere Benutzer des Systems nicht zu schaden?" Das ist eigentlich eine sehr interessante Frage und eine, die mit ein wenig Cloud Computing, Apparmor, Chroot Magic etc gelöst werden kann.

    
Jeff 26.10.2010 14:38
quelle
3

Es gibt Unmengen von Befehlen, die Sie verwenden könnten, um das System zu beschädigen. Eine Handvoll Beispiele: Sys.chmod , Sys.umask , unlink , jeder -Befehl, mit dem Sie eine Verbindung lesen / schreiben können (es gibt viele), .Internal , .External , usw.

Und wenn Sie Benutzer an diesen Befehlen gehindert haben, hindert sie nichts daran, etwas in einem Paket zu implementieren, das Sie nicht blockieren könnten.

    
Joshua Ulrich 26.10.2010 14:44
quelle
3

Wie bei fast jeder Antwort auf diesen Thread bemerkt, würde das Entfernen der "potentiell schädlichen" Aufrufe in der Sprache R:

  • Ist möglicherweise unmöglich vollständig zu tun.
  • Seien Sie schwierig, ohne viel Zeit damit zu verschwenden, komplizierte (d. h. hässliche) Hacks zu schreiben.
  • Kniescheiben Sie die Sprache, indem Sie eine Menge Funktionalität entfernen, die R so flexibel macht.

Eine sicherere Lösung, die das Ändern / Umschreiben großer Teile der R-Sprache nicht erfordert, wäre R in einem Gefängnis zu laufen, indem man etwas wie BSD Jails , Jailkit oder Solaris Zones .

Viele dieser Lösungen ermöglichen es dem inhaftierten Prozess, Root-ähnliche Rechte auszuüben, aber die Bereiche des Computers einzuschränken, auf denen der Prozess ausgeführt werden kann.

Eine virtuelle Wegwerfmaschine ist eine weitere Option. Wenn ein privilegierter Benutzer die virtuelle Umgebung plattmacht, löschen Sie sie einfach und starten Sie eine weitere Kopie.

    
Sharpie 26.10.2010 17:07
quelle
3

Einer meiner absoluten Favoriten. Du musst nicht einmal r00t sein.

%Vor%     
Jeroen 05.02.2012 00:38
quelle
2

Um ein Klischee von Waffenrechtlern anzupassen, "ist System () nicht schädlich - Leute, die System () anrufen, sind schädlich".

Keine Funktionsaufrufe sind an sich schädlich, aber wenn Sie Menschen erlauben, sie frei zu benutzen, können diese Personen Schaden anrichten.

Auch die Definition von Schaden hängt davon ab, was Sie für schädlich halten.

    
Spacedman 26.10.2010 15:05
quelle
1

Im Allgemeinen ist R so komplex, dass Sie davon ausgehen können, dass es einen Weg gibt, es bei der Ausführung von Daten mit scheinbar harmlosen Funktionen auszutricksen, zum Beispiel durch Pufferüberlauf.

    
mbq 26.10.2010 19:12
quelle

Tags und Links