Sue
Wed Mar 26 07:15:23 PDT 2008
Peter asked me to comment on this thread, so I'll give my view of this.
Valter is right, in CE6 you have only two choices - completely block an
EXE/DLL from running, or give it so much privilege it can do anything.
There are some restrictions that keep user-mode code from doing certain
things, but if an EXE is allowed to run, nothing keeps it from loading its
own DLL (if that is allowed to run too) into kernel mode where it can do
anything. So, really, your only chance to block a malicious application is
to keep it from running at all.
I don't think Valter's mechanism of modifying coredll is sufficient. It
would make it less convenient for a malicious application to call an OS API,
but anything coredll can do, user code can do. Coredll mainly just jumps to
OS thunks; a user application could jump to those directly without going
through coredll if someone worked on it enough. Any fix would have to be on
the OS side of the world, not inside the application side of the world.
It's really unfortunate to have lost important security functionality like
this on CE6, so let me explain a little bit why it happened. First, suppose
we were to convert our previous security model (not run / run untrusted /
run trusted) to CE6. There'd be some complicated cases for combining those
old semantics with the new user vs. kernel mode restrictions. (For example,
we'd have to go through every operation that previously required trust, and
decide whether it should now be callable only in kernel mode, or in kernel +
trusted users, or...?) It would be a pretty serious cost in testing for
security holes and backwards-compatibility breaks. Also, the old security
model was/is beginning to wear thin -- it's not granular enough in privilege
levels. So why invest in porting our old security model if we're looking
forward to something new? But an entirely new security model would have
been too much work to fit into CE6. Add on top of that the fact that a huge
portion of our embedded customers either don't care to lock down their
devices at all, or prefer to completely lock them down so only their own
code can run. Most embedded devices don't allow 3rd party code to run or
even have a mechanism to get it on there.
So in the end the decision was made (not by me, of course, I'm too low on
the pay scale :-) ) to only support a 1-tier security model in CE6. We know
this is a problem, though, and you can expect that we are working on
something better for the future.
Sue
sloh@microsoft.com (remove "online" from reply-to address)
http://blogs.msdn.com/ce_base/
_____________________________________________________________
This posting is provided "AS IS" with no warranties, and confers no rights.
_____________________________________________________________