modred team mailing list archive
-
modred team
-
Mailing list archive
-
Message #00021
Re: Ideas
As far as sandboxing, server-side you can presumably rely on the operating
system's sandboxes (per-user or perhaps some more elaborate mechanism like
FreeBSD's jails).
But as soon as the cluster sends code out to clients, obviously there is a
big issue if we let them do whatever the hell they want. Just preventing
assembly or anything like that simply doesn't work in C/C++, (not to mention
it would be suprisingly hard/irritating,) since the code could still execute
the system-calls (you could try not linking against libc,too, but then you
_really_ have no portability :P).
System-call controlling is possible, but is either pretty unportable (lots
of x86 assembly stuff) or slow-ish (virtual machines).
That being said, if you completely seperate client-sendable code from
server-code, I think that allays a lot of the concerns. Requiring
client-sendable code to be written for some safe VM (java's, lua's,
javascript's, .NET/mono, some other random thing) could avoid this. In
addition, client-sendable code would intentionally be written with knowledge
of the sensitivity of the data it handles (i.e. not written at all if the
data is important).
On Mon, Dec 28, 2009 at 7:49 PM, Michael Cohen <gnurdux@xxxxxxxxx> wrote:
> I would still be happier if there were a sandbox, actually. There are ways
> of getting around that sort of thing that are too complicated to prevent at
> the source level IMO. For instance, you can use inline assembly. So we
> block inline assembly. That's all well and good, but now we've blocked
> people using legitimate assembly optimizations. Worse, what happens if they
> execute some shellcody stuff, allowing them to escape? I don't really know
> how to block that at all. On the other hand, a sandbox would not add much
> overhead since these tasks will most likely use lots of CPU time but few
> system calls or whatever.
>
>
> Michael Cohen
>
> Scott Lawrence wrote:
>
>> Ok, I'm going to build a prototype of my privacy model. I'm not going
>> to implement the challenge-response stuff, I'll assume there's an
>> implementation of that and that it works.
>>
>> I think I've isolated the misunderstanding about the sandboxes. You
>> don't submit binary code the the Modred cluster - you either submit
>> source, to be linked by the modred cluster with the relevant
>> libraries, or you link the code yourself with the libraries. The
>> libraries that you would link with merely copy the program over to the
>> cluster, where it can be executed in a manner deemed fit by the code
>> there.
>>
>> I suppose you could say that that is a sandbox. ;-)
>>
>>
>> On 12/28/09, Michael Cohen <gnurdux@xxxxxxxxx> wrote:
>>
>>> If you read my email more carefully, you will see that I am not
>>> necessary objecting to Scott's suggestion. I say that it is not
>>> necessary, but that it would be the only thing necessary to allow more
>>> problem-specific privacy tasks to be used. The need for a sandbox is
>>> pretty simple. If we make untrusted users able to ask for tasks, if
>>> they upload code, then I don't want it running unsandboxed on my
>>> computer. Otherwise, their code could steal my files, wipe my harddisk,
>>> install Windows or do other undesirable things. If it is sandboxed,
>>> then arbitary code can be executed safely, as long as we trust the
>>> sandbox. Sandboxed environments are often also cross-platform, another
>>> plus, since they typically replace or intercept any kind of system call.
>>>
>>> Michael Cohen
>>>
>>> Scott Lawrence wrote:
>>>
>>>> Well, I'm glad someone expresses opinions I don't agree with...
>>>>
>>>> I think Mikey's objection to privacy concerns is that it's so
>>>> problem-specific, we can't reasonably expect to have a general
>>>> implementation. But if the user specifies which parts of the data are
>>>> private, the Modred hub just has to be sure to divvy up tasks in a way
>>>> that gives those bits of information only to the trusted, dedicated
>>>> servers.
>>>>
>>>> For the purposes of clarity, I will be referring to dedicated servers
>>>> as simply "servers", and the central server as the "hub".
>>>>
>>>> I don't see the need for a sandbox. Could you present some specific
>>>> attacks that a sandbox would fix?
>>>>
>>>>
>>>> On 12/28/09, Michael Cohen <gnurdux@xxxxxxxxx> wrote:
>>>>
>>>>> It seems to me that dealing with privacy concerns is an extremely
>>>>> problem-specific issue. In any given case you need to work out how
>>>>> much
>>>>> you can give to people without letting private information leak, but
>>>>> the
>>>>> details vary greatly from problem to problem. That isn't our business,
>>>>> and I don't think we should concern ourselves with it too much. The
>>>>> way
>>>>> I see it there are two options:
>>>>>
>>>>> 1. make this designed for stuff without privacy concerns
>>>>> I think this is both the easiest and the best option. I don't
>>>>> really
>>>>> like the idea of a public, free service doing computations for an evil
>>>>> corporation anyway; if it's being done BY the public it should be done
>>>>> FOR the public.
>>>>>
>>>>> 2. add in a small amount of functionality designed to facilitate
>>>>> dealing
>>>>> with privacy concerns
>>>>> At the level of this project, that would probably just be the
>>>>> controls
>>>>> on what data gets sent to what people. There might be reasons for
>>>>> adding such controls anyway; some tasks could be designated for only
>>>>> "trusted" users.
>>>>>
>>>>> Either way I doubt that this will be a big issue. I think maybe a
>>>>> bigger issue is how to run arbitrary code efficiently and securely.
>>>>>
>>>>> I see only a few solutions
>>>>>
>>>>> Don't allow arbitrary code, but only a defined set of tasks.
>>>>> Or,
>>>>> similarly, allow some "trusted" set of tasks, each separately ported to
>>>>> each platform (like boinc).
>>>>>
>>>>> Use Java. This lets us easily sandbox it and is cross-platform,
>>>>> but
>>>>> sacrifices a bit on efficiency. Also, Java can be annoying (although
>>>>> other JVM languages would also work in this situation).
>>>>>
>>>>> There are ways of running cross-platform, C/C++ code in a
>>>>> sandbox as
>>>>> well. One possibility is to use LLVM, although the LLVM developers
>>>>> specifically say that LLVM is NOT designed to be used this way.
>>>>> Another
>>>>> possibility is to use a sandboxed code system that works on multiple
>>>>> operating systems but only on x86. This includes things like VX32,
>>>>> which is apparently portable to Windows, but hasn't been ported. I
>>>>> don't know whether or not that sort of thing is within our abilities.
>>>>> Another option might be Google Native Client; that is designed to be
>>>>> used in a web browser but I don't know how hard it would be to "rip
>>>>> out"
>>>>> the sandboxing/cross-OS x86 code stuff.
>>>>>
>>>>> Michael Cohen
>>>>>
>>>>> _______________________________________________
>>>>> Mailing list: https://launchpad.net/~modred
>>>>> Post to : modred@xxxxxxxxxxxxxxxxxxx
>>>>> Unsubscribe : https://launchpad.net/~modred
>>>>> More help : https://help.launchpad.net/ListHelp
>>>>>
>>>>>
>>>>
>>> _______________________________________________
>>> Mailing list: https://launchpad.net/~modred
>>> Post to : modred@xxxxxxxxxxxxxxxxxxx
>>> Unsubscribe : https://launchpad.net/~modred
>>> More help : https://help.launchpad.net/ListHelp
>>>
>>>
>>
>>
>
> _______________________________________________
> Mailing list: https://launchpad.net/~modred
> Post to : modred@xxxxxxxxxxxxxxxxxxx
> Unsubscribe : https://launchpad.net/~modred
> More help : https://help.launchpad.net/ListHelp
>
Follow ups
References
-
Ideas
From: Michael Cohen, 2009-12-28
-
Re: Ideas
From: Scott Lawrence, 2009-12-28
-
Re: Ideas
From: Michael Cohen, 2009-12-28
-
Re: Ideas
From: Scott Lawrence, 2009-12-28
-
Re: Ideas
From: Michael Cohen, 2009-12-29