IWETHEY v. 0.3.0 | TODO
1,095 registered users | 0 active users | 1 LpH | Statistics
Login | Create New User
IWETHEY Banner

Welcome to IWETHEY!

New Re: .NET replays the ActiveX fiasco
You wrote:
> Well, what would you have them do - trust nobody and get no useful work
> done?

I'd prefer a security model based on revokable capabilities, enforced via proof-carrying code. Some of this *is* rocket science, but Microsoft Research employs a substantial fraction of the world's population of type-theorists so it should definitely be within MS's ability to implement. Furthermore, the programmer UI doesn't require any rocket science: all the math lives in the compiler and the program loader.

> Wasn't that the original Java applet model? Wasn't it eventually
> extended to support authentication via trusted applets? Any idea why?

No, Java had a sandbox which can control how much access even a trusted program can get. .NET basically copies this, except that it adds a mechanism -- "unverified assemblies" -- which permit programmers to sidestep the security mechanism. This is a [i]tremendously[/i] bad idea. You want to minimize the amount of trusted code in the system and the runtime, because making sure it works is really hard. Java had a pretty simple security system, and people have been fixing holes in it for years.

The lesson is clear -- /minimize the trusted codebase/. (Dan Wang at Princeton has even invented a PCC mechanism that lets you take the garbage collector out of the trusted base. Tres cool.)

> I'm surprised to learn that ActiveX is such an unsuccessful technology.
> After all, right here on my machine are RealPlayer, Acrobat Reader, Flash,
> Shockwave, and several other popular ActiveX components, and those are just
> the ones I downloaded. The total list of ActiveX components on this system
> easily numbers in the hundreds, and includes such abysmal failures as Media
> Player and Internet Explorer.

This is why the ActiveX security system is a failure, actually. ActiveX is an all-or-nothing security scheme, which means that a single buffer overflow in a single trusted app compromises the entire system. The more code you have to trust the more likely you have a compromise which renders your security useless. It's just simple statistics.

The existence of unverified assemblies, which permits programmers to easily add to the trusted codebase, means that it becomes impossible to verify that the .NET runtime can actually enforce the security guarantees it promises. And given their past behavior we can be sure that MS will use a lot of unverified assemblies in IE and Office and whatever app-of-the-week is at the head of their strategy. If I sound cynical it's because I am. :)

New EzBug hangover?
[i]tremendously[/i]

We use real HTML here, Neel :-)


Peter
Shill For Hire
[link|http://www.kuro5hin.org|There is no K5 Cabal]
New Finger habits are hard to break. :)
New typo fix
I wrote:
> I'd prefer a security model based on revokable capabilities,
> enforced via proof-carrying code.

This should read:
> I'd prefer a security model based on explicitly granted capabilities,
> enforced via proof-carrying code.

Anyway, here's how this can work.

Let's suppose that usability testing reveals that there are certain kinds of privilege grants that users can easily understand -- eg, something like "The program can only read and write files in the c:\\apps\\foobar directory", or "The program can only open network sockets to the foobar.com domain", and so on. When a user installs a program they check off which privileges they want to give it and then somehow the system makes sure that the program can't use resources it's not privileged to.

So the way we can do this, is to turn each privilege into an object: eg, to open a file the program must call a method on an object that the runtime hands it. You can do a formal verification that the capability object does what it says -- the object code would come with a proof, generated by the compiler, that the loader would check. Then a type- and memory-safety proof for the program code (again, verified with a safety proof emitted as part of the compilation process) would ensure that it couldn't access any ungranted resources.

This is a much better model than unverified assemblies, because it lets you extend the set of grantable capabilities without having to add any untrusted code to the system. The only code you have to trust is the proof verifier, which is small. Even the compiler doesn't have to be trusted, because if it emits buggy or false proofs the verifier will fail to accept the object code. Even better, you get the full performance of compiled machine code, with no need for a sandbox, since the proof is checked at load time, not runtime.

Here's a general overview:

[link|http://www-106.ibm.com/developerworks/library/untrusted-code/|[link|http://www-106.ibm.com/developerworks/library/untrusted-code/|http://www-106.ibm....rusted-code/]]

And some links to research projects:

[link|http://www.cs.berkeley.edu/~necula/pcc.html|[link|http://www.cs.berkeley.edu/~necula/pcc.html|http://www.cs.berke...ula/pcc.html]]
[link|http://www-2.cs.cmu.edu/~fox/pcc.html|[link|http://www-2.cs.cmu.edu/~fox/pcc.html|http://www-2.cs.cmu.edu/~fox/pcc.html]]
[link|http://www.cs.princeton.edu/sip/projects/pcc/|[link|http://www.cs.princeton.edu/sip/projects/pcc/|http://www.cs.princ...rojects/pcc/]]
     J2EE vs. Microsoft.NET - (cforde) - (28)
         Security is simple either via net or java - (boxley) - (4)
             That is a procedural model of security - (ben_tilly) - (3)
                 Actually J2EE uses a declarative model - (bluke)
                 Hmmm...got any other links? - (tseliot) - (1)
                     Sorry... - (ben_tilly)
         .NET replays the ActiveX fiasco - (neelk) - (22)
             Side note. - (inthane-chan) - (7)
                 Muah. - (admin) - (2)
                     Moi, for one. -NT - (CRConrad)
                     Is most amusing. -NT - (static)
                 I don't get it... - (neelk) - (3)
                     I don't get it either. - (inthane-chan)
                     Kitchen sink... - (ChrisR)
                     I bet it's issues with the Virtual Machine. - (static)
             Re: .NET replays the ActiveX fiasco - (Squidley) - (13)
                 Interesting list - (ChrisR) - (7)
                     Oh, so it was YOU! - (CRConrad) - (2)
                         rephrasing? - (ChrisR) - (1)
                             I take it you *do* know what I'm referring to - (CRConrad)
                     Re: Interesting list - (Squidley) - (3)
                         Viruses and verified security holes - (ben_tilly) - (2)
                             Re: Viruses and verified security holes - (Squidley) - (1)
                                 ActiveX is actually one thing... - (Arkadiy)
                 Re: .NET replays the ActiveX fiasco - (neelk) - (3)
                     EzBug hangover? - (pwhysall) - (1)
                         Finger habits are hard to break. :) -NT - (neelk)
                     typo fix - (neelk)
                 Re: .NET replays the ActiveX fiasco - (pwhysall)

Some have good ideas and some.. just have ideas.
58 ms