On 3/1/23 07:35, Matthias Gondan wrote:
For the record, here's the documentation of the Prolog sandbox,
https://www.swi-prolog.org/pldoc/doc/_SWI_/library/sandbox.pl
You get an idea of the implementation by clicking at the ":-" icons. It does
not seem too complicated, but I might be too optimistic. It would be very nice to have
such a thing in R, and I would be willing to help if someone takes the lead.
From my (very quick) look at the page, my understanding is that it is
analyzing Prolog code to decide whether it is safe to execute or not. If
my reading is correct, please let me reiterate that this would not be a
good strategy for R. As Simon already wrote, R is a very dynamic
language allowing to change almost anything at runtime. It is not
possible to correctly and effectively reason about what an R program
could do. Trying to do this would be a waste of effort which might only
provide false sense of security. R cannot be made safe for such uses
this way. While enough as a show stopper, it is more than that, R
doesn't have a specification, any such tools would have to be written
against a specific R release. Also, in practice one would probably also
want to use some extension packages, which may again do anything (in
native code).
With R, I would only think of ensuring security at the machine level, as
discussed already - via virtual machines, containers (with care, not all
are sandboxes), etc. That would be much safer, much less work, and could
re-use existing technologies.
Tomas
Best regards,
Matthias
Am 01.03.2023 um 01:52 schrieb Bill Denney <b...@denney.ws>:
Hi Simon and Ivan,
Thanks for confirming my suspicions. The most common case for our code
would be generally trusted users within an organization. So, the main
threat is lower. But, there may be scenarios that also allow use outside
organizations.
I think that in the end, we will likely do some minimal sanitization of the
input, but then we will also ensure that we do anything in a container with
limits applied from the outside, too.
Thanks,
Bill
On Sun, Feb 26, 2023, 4:57 PM Simon Urbanek <simon.urba...@r-project.org>
wrote:
Bill,
the short answer is you can't limit anything at R level. Any attempts to
create a list of "bad" commands are trivial to circumvent since you can
compute on the language in R, so you can construct and call functions with
trivial operations. Similarly, since R allows the loading of binary code
the same applies for arbitrary code. So if you give users access to R, you
should assume that is equivalent to allowing arbitrary code execution.
Therefore all you can do is limit the resources and reach - as you pointed
out using a container is a good idea so each session is only limited to a
single container that goes away when the session ends. Similarly you can
restrict main parts of R and the system to be read-only in the container.
In practice, that's why real analytic systems are about provenance rather
than prevention. For example, in RCloud all code is first committed to a
git repository outside of the container before it can be executed, so
malicious users can do whatever they want, but they cannot hide the
malicious code they used as the container cannot manipulate the history.
As for package installation - again, it's impossible to prevent it in
general unless you make everything read-only which also prevents the users
from doing meaningful work. So the real question what do you want to allow
[[alternative HTML version deleted]]
______________________________________________
R-package-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-package-devel
______________________________________________
R-package-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-package-devel