modred team mailing list archive
-
modred team
-
Mailing list archive
-
Message #00043
Re: Ideas
Actually, not. Ignore that last message.
Can you build a prototype, that calls a specified function in place of
the kernel??
On 12/28/09, Scott Lawrence <bytbox@xxxxxxxxx> wrote:
> Ok. I think that for the most part, we should block system calls.
>
> On 12/28/09, Michael Cohen <gnurdux@xxxxxxxxx> wrote:
>> Very little to not at all if the code doesn't make many system calls. I
>> wouldn't expect it to make many anyway; the tasks that this is good for
>> shouldn't be ones that require much communication (because the Internet
>> is fairly slow; if it's always sending stuff and requiring responses
>> that gives probably a .1 second latency each step at least), so its
>> mostly just running on the CPU. It would certainly add less overhead
>> for CPU-intensive things than say, Java.
>>
>> Michael Cohen
>>
>> Scott Lawrence wrote:
>>> And this is the only thing that needs to be done? How much will it
>>> slow the code down? More importantly
>>>
>>>
>>> On 12/28/09, Michael Cohen <gnurdux@xxxxxxxxx> wrote:
>>>> We can't actually block interrupts; that require kernel mode code.
>>>> Also, I think there are other mechanisms for system calls.
>>>>
>>>> BUT
>>>>
>>>> lucky for us, Linux (and other unixes, but with slightly different
>>>> implementations) has a built-in way to intercept system calls. It's
>>>> called ptrace, and it is what is used for the USACO sandbox.
>>>>
>>>> Michael Cohen
>>>>
>>>> Scott Lawrence wrote:
>>>>> Oh. I see.
>>>>>
>>>>> My first instinct is to say: "ban them!" But it would be really nice
>>>>> if most existing source code could run out-of-the-box on the cluster,
>>>>> even if there wouldn't be a speedup.
>>>>>
>>>>> I'm not planning on support C/C++ on windows - that's way too much
>>>>> trouble - so we only have to worry about unix systems. Are interrupts
>>>>> the only things we would have to block?
>>>>>
>>>>> On 12/28/09, Michael Cohen <gnurdux@xxxxxxxxx> wrote:
>>>>>> You are simply incorrect here. The issue isn't library calls, it's
>>>>>> system calls. Libc calls themselves use system calls, which are
>>>>>> interrupts. You can do everything without touching libc. You just
>>>>>> do
>>>>>> the right stuff to the stuck and do an interrupt or whatever. The
>>>>>> library doesn't have some special way to access the kernel.
>>>>>>
>>>>>> Michael Cohen
>>>>>>
>>>>>> Scott Lawrence wrote:
>>>>>>> You're all missing the point. I'm claiming that, properly
>>>>>>> implemented, Modred should require no sandboxing outside of what is
>>>>>>> necessary to implement it's logic.
>>>>>>>
>>>>>>> So back to our good friends Alice, Bob, and Mallory. Alice sends
>>>>>>> the
>>>>>>> cluster (which means she directs it to the hub, but let's just
>>>>>>> consider the cluster a big black box for now) some C source code.
>>>>>>> This code does some strange stuff - lots of file i/o and memory
>>>>>>> access. What does the cluster do with this?
>>>>>>>
>>>>>>> It links the program with its own special libraries. Even inline
>>>>>>> assembly has to call functions to interface with the hard drive and
>>>>>>> allocate memory and such. Malicious code that gets submitted to the
>>>>>>> server will be sanitized in this fashion. The only problem I see is
>>>>>>> with illegal memory access - but I suspect this will be dealt with,
>>>>>>> because the cluster has to analyze what data the client program
>>>>>>> accesses anyway...
>>>>>>>
>>>>>>> Now Bob wants to compile and link his program on his own computer.
>>>>>>> Fine. He uses a different (smaller, incidentally) set of libraries.
>>>>>>> These libraries don't intercept every call of malloc and stuff -
>>>>>>> those
>>>>>>> are run on his computer. But if he wants to access cluster data, he
>>>>>>> has to use special functions. And he can't actually run code on the
>>>>>>> cluster.
>>>>>>>
>>>>>>> Now what does Mallory do again?
>>>>>>>
>>>>>>>
>>>>>>> On 12/28/09, Michael Cohen <gnurdux@xxxxxxxxx> wrote:
>>>>>>>> Server-side I don't see an issue. (java's, lua's,
>>>>>>>> > javascript's, .NET/mono, some other random thing) is basically
>>>>>>>> what
>>>>>>>> I already said. There are other sandboxing systems that are
>>>>>>>> designed
>>>>>>>> to
>>>>>>>> work on x86 native code, such as vx32 (I think I mentioned that
>>>>>>>> also).
>>>>>>>> Many of these schemes (with the exception of vx32) have the
>>>>>>>> advantage
>>>>>>>> that they also automatically make the code cross-platform. Even
>>>>>>>> vx32
>>>>>>>> is
>>>>>>>> supposedly portable to Windows, but nobody has done it yet and I
>>>>>>>> have
>>>>>>>> no
>>>>>>>> idea if any of us have the expertise to.
>>>>>>>>
>>>>>>>> Frederic Koehler wrote:
>>>>>>>>> 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
>>>>>>>>>>
>>>>>>>> _______________________________________________
>>>>>>>> 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
>>>>
>>>
>>>
>>
>>
>> _______________________________________________
>> Mailing list: https://launchpad.net/~modred
>> Post to : modred@xxxxxxxxxxxxxxxxxxx
>> Unsubscribe : https://launchpad.net/~modred
>> More help : https://help.launchpad.net/ListHelp
>>
>
>
> --
> Scott Lawrence
>
> Webmaster
> The Blair Robot Project
> Montgomery Blair High School
>
--
Scott Lawrence
Webmaster
The Blair Robot Project
Montgomery Blair High School
Follow ups
References
-
Ideas
From: Michael Cohen, 2009-12-28
-
Re: Ideas
From: Frederic Koehler, 2009-12-29
-
Re: Ideas
From: Michael Cohen, 2009-12-29
-
Re: Ideas
From: Scott Lawrence, 2009-12-29
-
Re: Ideas
From: Michael Cohen, 2009-12-29
-
Re: Ideas
From: Scott Lawrence, 2009-12-29
-
Re: Ideas
From: Michael Cohen, 2009-12-29
-
Re: Ideas
From: Scott Lawrence, 2009-12-29
-
Re: Ideas
From: Michael Cohen, 2009-12-29
-
Re: Ideas
From: Scott Lawrence, 2009-12-29