Come on ! 3 prompts to delete a shortcut ?!? Another I hate UAC thread

  • Thread starter Thread starter Puppy Breath
  • Start date Start date
Here's a quote that has several good reasons for using UAC. It's based on
RC1 but it also applies to RTM.

Really big snip of Microsoft marketing BS.

Congratulations, you know how to copy and paste.
Here's some more links about UAC. It's a lot of reading but if you read and
comprehend them you will see that UAC is much more than some annoying
prompts.

http://technet2.microsoft.com/Windo...8514-4c9e-ac08-4c21f5c6c2d91033.mspx?mfr=true

http://www.microsoft.com/downloads/...69-A648-49AF-BC5E-A2EEBB74C16B&displaylang=en

http://technet2.microsoft.com/Windo...2b2f-422c-b70e-b18ff918c2811033.mspx?mfr=true

Adam

I don't expect you will read all this material. Your mind is made up and I
don't think anything I can do will change it.

More self-serving commentary. Your mind is made up as well it seems.
There is no need for you to be defensive. I don't see anybody else so
vigorously defending UAC, except you. In fact that also applies on the
broader Intenet. I see hardly anybody that says they like it, yet I
see hundreds of people, some very experienced, hate it. Why do you
suppose that is?

I asked you to give just 5 good reasons for UAC. I didn't ask about
the interworkings of what happens behind the scenes beyond user
control, I asked how a typical user benefits. You came up with
nothing.
 
Here's a quote that has several good reasons for using UAC. It's based
on RC1 but it also applies to RTM.

"
File System and Registry Virtualization

In Windows Vista, many legacy applications that were not designed to
support standard user accounts can run without modification, using the
built-in file/registry virtualization feature. File/registry
virtualization gives an application its own "virtualized" view of a
resource it is attempting to change using a copy-on-write strategy.
For example, when the application attempts to write to a file in the
program files directory, Windows Vista gives the application its own
private copy of the file in the user's profile so the application will
function properly. Virtualization also provides logging by default for
applications that attempt to write to protected areas.
Microsoft's early testing of legacy applications running in standard
user mode using file/registry virtualization under Windows Vista has
shown promising application compatibility results. Although
virtualization allows the majority of legacy applications to run, it
is a short-term measure-not a long-term solution. Not only can a lack
of compliance with User Account Control affect the security of an
application, but it can also reduce the application's performance,
require additional end-user training, and cause application conflicts.

Part of UAC, no UAC, no Virtualization.
Over-the-Shoulder (OTS) Credentials

Whenever standard users attempt an administrative task, such as
software installation, they will be prompted for an administrator
password. If they know their local administrator password they may
enter it then or ask an IT administrator for assistance. This process
is called over-the-shoulder (OTS) credentials. IT administrators can
disable this feature, in which case the user is simply informed that
they do not have the permission to perform the operation.

And the home user w/o an IT department ?
Admin Approval Mode: Right Privilege at the Right Time

To help protect administrators while doing non-administrative
operations, the Windows Vista team has devised the Admin Approval Mode
feature. This feature allows administrators to perform normal
day-to-day tasks such as checking e-mail or browsing the Web while
running with a standard user token. If administrator privileges are
needed for an operation, the administrator will be notified and asked
to provide either consent or credentials, depending on system policy
settings. The Windows Vista team calls this approach "right privilege
at the right time." There's no more switching back and forth between
standard user and local administrator, juggling two user profiles.

And the home user ?
No Need for the Power Users Group

The Power Users Group account in previous versions of Windows was
designed to give users specific administrator privileges to perform
basic system tasks while running applications. Unfortunately, this
solution fixed the symptom-application failure-but it did not fix the
problem: applications still fundamentally require unnecessary
privileges. User Account Control does not utilize the Power User mode
because Standard mode users can now perform most common configuration
tasks. For legacy applications that require administrative privileges
under Windows XP, file and registry virtualization in Windows Vista
will help them run smoothly without reconfiguration. For new,
compliant applications, User Account Control guidelines will define
the correct protocol for file locations, registry changes, and other
common tasks.

The above is funny.....

'Unfortunately, this solution fixed the symptom-application failure-but
it did not fix the problem: applications still fundamentally require
unnecessary privileges.'

I'm not sure if I've ever run into an application, not counting
Enterprise-wide Server applications, that REQUIRED admin privileges to
run.
Preventing Application-Based Shatter Attacks

Running in standard user mode gives customers increased protection
against inadvertent system-level damage caused by "shatter attacks"
and malware, such as root kits, spyware, and undetectable viruses.
Shatter attacks take over a user interface by using the Windows
messaging system (how applications communicate with the Windows
operating system and each other) to run malicious code or overwrite
administrative processes. The primary cause of this problem is that
any application can send a message to any other application on the
same desktop. When the target application receives a message, it has
no way of discerning the process source or determining whether the
application sending the message is authorized to do so. This class of
security breach is not a single attack, but rather a type of attack.
Taken alone, each instance is not a critical problem. However, the
fact that this attack vector is present in many applications makes the
problem much more serious. The vulnerability lies in the way
developers write software that runs on Windows. Microsoft has always
recommended that software vendors refrain from using the messaging
system for highly privileged applications. Unfortunately, numerous
software products still haven't adopted this basic measure of
protection.
User Account Control-compliant software applications
isolate privileges by design, reducing the attack surface of the
operating system by reducing the general set of privileges and helping
prevent unauthorized applications from running without the user's
consent. A strictly enforced User Account Control model makes it
harder for worms and viruses to take over Windows-based systems by
ensuring that existing security measures are not disabled by standard
users running in Administrator mode.

System messaging is the easiest way to do ANY inter-process
communications.

WINDOWS IS BUILT ON THE MESSAGING SYSTEM, EVERYTHING THAT TAKES PLACE IN
AN APPLICATION IS DUE TO MESSAGING.
Secure Desktop Prompting

In Windows Vista RC1 you will notice that, by default when User
Account Control prompts appear, the rest of the screen is darkened.
The prompts are being displayed in the Secure Desktop mode. The same
mode you see when you log on or press CTL+ALT+DELETE. Displaying User
Account Control elevation dialogs on the Secure Desktop helps protect
the user from unknowingly allowing a program to run with elevated
privileges without their consent. Without this protection, it is much
easier to create malware that tricks the user into approving an
elevation request prompt that they really wanted to deny. The Secure
Desktop helps protect against this because other software running on
the machine is blocked from interacting with the user's interface.
"

Now the above is just ridiculous. What does darkening the screen have to
do with security....because then you know it's the true UAC ?

As a developer, it would probably take me an hour to create a program
that mimics the UAC prompt exactly that could fool anyone, just as the
phishing WWW pages do.

----------------------------------------------------------------------

I just don't see how this implementation of UAC is the best they could
do, even for a first try.

Wouldn't it have been enough to just scan the registry for new startup
items at each start BEFORE executing them.....check IE for new
BHO's/Toolbars BEFORE IE starts......check Explorer for new shell
extensions BEFORE starting Explorer....prevent an executable from being
launched thru a browser process......having some type of registry monitor
that keeps an eye on certain parts of the registry....etc.

Face it, 99.9% of all security issue's start at the browser and/or
arbitrarily run attachment to e-mails.
I'm done with this thread as it's turned into an argument
rather than a discussion.

Too bad, I just got to this part, and you won't even see what I wrote
above.
 
Really big snip of Microsoft marketing BS.

its BS because there is no good reason for UAC the way its implemented...

its very bad and annoying
 
Hello,

I guess I have to ask, couldn't they have programmed the UAC to know that
I actually right clicked on the shortcut and choose delete, versus some
rogue program trying to delete something in the background ?

This is an excellent question, and this really gets at the heart of UAC.

"core" Windows (the nuts and bolts of the operating system) handles all of
the technical details of running your computer and provides the core
functionality that allows all of your programs to work.

Windows tells the programs running on your computer when you do something
(such as click a mouse). The program then interprets this action and tells
Windows to do things based on the action you just did. Windows thusly knows
what applications do AFTER you do something. For example, Windows knows that
after you click something on a program's window, that the program then tries
to delete all of the files on your computer. But Windows does *NOT* know
that you clicking on that Windows means you REALLY *WANT* the program to
delete all the files on your computer.

It is important to point out here that Windows Explorer is NOT part of the
core Windows that I am talking about. Windows Explorer is just another
application that you run, and from the perspective of the core of Windows,
it is just like any other program.

Windows doesn't know WHAT YOU WANT TO ACCOMPLISH by performing an action.
This is what PROGRAMS decide, and Windows is not involved in this process AT
ALL.

Windows knows that you clicked your mouse at a certain spot on the screen
and that a certain application owns that spot on the screen, but it has NO
IDEA what you are trying to do with that mouse click. Do you want to start a
program? Delete all of the files on your computer? E-mail viruses to your
friends? Who knows? THE PROGRAM, *not* Windows.

So ... what's the point of the UAC pompt? What does it actually accomplish?

Well, UAC draws a line in the sand ... and it says, Applications wanting to
do these normal, everyday tasks, can do so with no problem. HOWEVER, any
application that wants to do these other POTENTIALLY DANGEROUS tasks, must
get approval to do so from the YOU, the user.

When an application tells Windows that it wants complete access to your
computer so that it can carry out your request, Windows decides to CONFIRM
THIS WITH YOU instead of just believing the application. Windows tells you,
"Hey I noticed this program here, Windows Explorer, is wanting to gain
complete control over your computer. I realize that you just clicked a
button, but I can't tell if you were actually INTENDING to give this program
complete and unrestricted access to your computer, so I'm just making sure
that it's cosher with you, before allowing it."

In this way, Windows knows that *YOU* are wanting to do something that is
potentially dangerous, and not some rogue application acting on its own
behalf. Because this is the only way that it can know for sure that YOU are
wanting to do that - by asking you ITSELF.

Windows knows you are clicking on the screen ... and it knows that the
application, in response to that click, let's say as an example wants to
delete all the files on your computer ... but Windows CANNOT ASSUME that
just because you clicked in that application's window that you INTENDED to
delete all the files on your computer. The application could have asked you
if you wanted a million dollars, and when you clicked Yes, tried to delete
all the files on your computer.

Which lays the groundwork for the answer to your next question ...
And why can't the 2nd confirmation message be enough, Obviously if I
clicked "Continue" that means I really do want to delete the file, so why
the 3rd pop-up from the UAC telling me accessing is denied and I need to
allow the delete to happen ?

The Second confirmation is not comming from WINDOWS ... It is comming from
the APPLICATION (Windows Explorer). Windows Explorer is telling you what is
happening and what it wants to do (Explorer needs unrestricted access to
your computer in order to delete a file from everyone's start menu). *Core*
windows cannot confirm nor deny what this program is telling you. It could
be lying.

The Third confirmation is comming from the very heart and soul of Windows.
It is WINDOWS ITSELF telling you that a program (Windows Explorer) is
attempting to gain complete control over your computer, and asking you if
you want to allow it to happen.

It makes sense that these two are both necessary and cannot be combined.

The second prompt is the program telling you that it is going to ask for
complete control over your computer and what it intends to do with said
power. If this message was not displayed, you would jump straight to the
third prompt which asks you for permission, but you would not be able to
make an informed decision as to continue or not, as you would not know how
the program is wanting to use this godlike power that you are about to
bestow upon it.

This information in the second prompt cannot be combined with the THIRD
prompt (which comes from Windows itself), because Windows doesn't know if
the application will actually do what it says it is going to do, or
something completely different. You can *always* trust what is displayed it
the third prompt, because it is from Windows itself. You have to determine
whether or not you believe what the application is telling you it is going
to do with complete control over your computer (the second prompt), because
Windows cannot guarantee this.

The thid prompt is Windows itself, giving you as much information as it can
about what is happening (what program is requesting permission to have
complete access to your computer), and asking if you want to allow it to
proceed. If it allowed programs to customize this display, they could add
misleading or false information.
I know one doesn't delete that much stuff from the start menu, but really,
why 3 different prompts ? The 2nd or 3rd one is just plain redundant and
not trying to bash Vista , But it really makes windows look like it's too
dumb to know what's going on. I really would like the hear the Microsoft
people in charge of that, explain why we need 3.

This first one is there to prevent "accidental deletes" - this is done as a
convienence to you and can be disabled.

The second is the program explaining to you that it is going to ask for
complete control over your computer, and is telling you under what
circumstances that this permission is being requested and how it will be
used. Note that this is comming from the application (Windows Explorer) and
NOT Windows itself. It is up to you to decide whether you trust the
information that the program is giving you (in this case Windows Explorer)
as to how it will use this permission - as Windows does not guarantee that
this information is true, and the program could be lying to you.

The third prompt is Windows itself telling you that a program (Windows
Explorer) has requested complete control over your computer, do you want to
give it such access. You can trust that the infromation presented in this
screen is true, because Windows itself is giving it to you. If you were
intending to perform an operation that requires complete access to your
computer and trust the program that is requesting said permission to carry
out this operation, click contiue. Otherwise, you have the chance to stop
this from happening.

--

I would also like mention here why it is not possible to "always allow" an
application to run with admin power, without asking you. This will address
why UAC does not have whitelists or any other sort of "AI", and why UAC is
nothing like a firewall.

The reason is because although Windows trusts *YOU* to make the decision on
whether to give a program complete access to your computer, it *DOES NOT*
trust the other applications on your computer to make this same decision.
Other (possibly malicious) applications can start programs just as easily as
you can.

If Windows were to allow certain programs to always have full control over
your computer WITHOUT PROMPTING, other applications would be able to run and
use those trusted programs to take control over your computer.

Again, this goes back to "Why can't Windows tell the difference between ME
starting a program vs. a rogue program" - and I have already covered this.
Windows knows when you click a mouse, but it doesn't know that by clicking
the mouse you want a program to start. The only way it can know is by asking
you itself.

Say, for example, you have a utility on your computer that you use to delete
system files, an action that will cause Windows to ask you for permission
when you run it. You use this utility a lot, and let's say you tell Windows
to always allow this program to run WITHOUT PROMPTING YOU.

So far so good ... you have told Windows that you always trust this program,
and so Windows doesn't prompt you any more when it runs.

AND THEN .... disaster strikes!

You run a program that has been infected by a nasty virus. UAC will prevent
this virus from doing anything really bad BY ITSELF (like deleting system
files) ... BUT, the virus sees that the utility that you use to delete
system files is TRUSTED BY YOU! So the virus RUNS THAT PROGRAM and then USES
IT to delete all of the files on your computer! Since you had trusted that
program, it started immediately without giving you a chance to confirm that
you really wanted the program to start.

So, to recap, UAC:

* Ensures that you TRUST a program to have complete control over your
computer. This prevents programs that you do not trust from gaining complete
access to your computer against your will. (EX: "I don't know what
ajksdka2.exe is, so I will not allow it to run with complete control over my
computer.")

* Ensures that you INTEND for a program to have complete control over your
computer. This prevents a malicious program from starting a trusted,
secondary program and using it to take control over your system. (Ex: "I did
not start format.exe, so I will not allow it to run.")


--
- JB
Microsoft MVP - Windows Shell/User

Windows Vista Support Faq
http://www.jimmah.com/vista/
 
In message <[email protected]> "Jimmy Brush"
The Second confirmation is not comming from WINDOWS ... It is comming from
the APPLICATION (Windows Explorer). Windows Explorer is telling you what is
happening and what it wants to do (Explorer needs unrestricted access to
your computer in order to delete a file from everyone's start menu). *Core*
windows cannot confirm nor deny what this program is telling you. It could
be lying.

While you're not wrong about the purpose of the dialog, there is no
reason that there couldn't be a "Don't show this again" option. Advanced
users will know to expect a UAC prompt without the "Hey, expect a UAC
prompt" warning first.
This first one is there to prevent "accidental deletes" - this is done as a
convienence to you and can be disabled.

It could also have been combined with the second -- One dialog that
prevents accidental deletes, a second that both prevents accidental
deletes AND warns the user about the upcoming UAC prompt.
If Windows were to allow certain programs to always have full control over
your computer WITHOUT PROMPTING, other applications would be able to run and
use those trusted programs to take control over your computer.

That doesn't need to be true -- Microsoft could implement a "Run this
program as administrator without prompting" as an NTFS attribute that
requires full administrative rights to set. This attribute would also
apply a read-only attribute to the file, preventing a task without an
administrative token from modifying the file.

You could also require an administrative token to view the status of
this attribute, otherwise it would always appear to be off.

The trick would be avoiding using this attribute by default anywhere
(that means exactly zero processes can be started by a user and run in
elevated space without permission -- This is the same as we have today)

Obviously if Microsoft added cmd.exe, it would be trivial for malware to
notice this and call cmd.exe with a command line to do something
inappropriate.

However, letting users set this bit on their own applications wouldn't
be as problematic, since a malicious app would not only need to
determine what apps have this attribute, but what also a way to exploit
the specific application.

Lastly, this attribute wouldn't force an "always elevate", it would
simply avoid the prompt to elevate when the user attempts to start the
app elevated (right-click --> "Run as administrator", shortcut
properties, EXE manifest, EXE name, etc)
 
Well, UAC draws a line in the sand ... and it says, Applications
wanting to do these normal, everyday tasks, can do so with no problem.
HOWEVER, any application that wants to do these other POTENTIALLY
DANGEROUS tasks, must get approval to do so from the YOU, the user.
The Third confirmation is comming from the very heart and soul of
Windows. It is WINDOWS ITSELF telling you that a program (Windows
Explorer) is attempting to gain complete control over your computer,
and asking you if you want to allow it to happen.

I would hardly call deleting a shortcut anywhere near 'attempting to gain
complete control over your computer'.
 
DanS said:
I would hardly call deleting a shortcut anywhere near 'attempting to gain
complete control over your computer'.

The REALLY big problem is that it doesn't ask you at all. It simply pops up
dialog box with two buttons: Continue/Cancel. There isn't any security in
having who/whatever is at your keyboard press a button.

When this really gets hilarious is when you click a button to perform a task
and then it asks you to click a button to authorize you to do the task you
just
clicked a button to do! So like if there is a malicious hacker sitting at my
computer he is going to do what? "Oh, hmm, I didn't mean to click that, I
wanted
to format his hard drive. Better click cancel."

To me UAC is horribly thought out and implemented by Microsoft. There is
no real authorization going on, and it doesn't even stop to think: "If the
user
just clicked a button to start an action, why would they click another
button to
cancel?"

I'm not saying Microsoft engineers are idiots, far be it for me to insult
other
idiots.
 
Wrecklass said:
The REALLY big problem is that it doesn't ask you at all. It simply pops
up
dialog box with two buttons: Continue/Cancel. There isn't any security in
having who/whatever is at your keyboard press a button.

When this really gets hilarious is when you click a button to perform a
task
and then it asks you to click a button to authorize you to do the task you
just
clicked a button to do! So like if there is a malicious hacker sitting at
my
computer he is going to do what? "Oh, hmm, I didn't mean to click that, I
wanted
to format his hard drive. Better click cancel."

If there's a malicious hacker physically using your computer, you're
probably screwed anyways.

But if you don't trust someone that is using your computer, log them in as a
standard user. The UAC prompts will then ask for a name and password of a
user with Admin rights.
 
DevilsPGD said:
In message <[email protected]> "Jimmy Brush"


While you're not wrong about the purpose of the dialog, there is no
reason that there couldn't be a "Don't show this again" option. Advanced
users will know to expect a UAC prompt without the "Hey, expect a UAC
prompt" warning first.

Perhaps if you only have one item selected, but what if there are multiple
items?

Good suggestion though, especially for a single item.
It could also have been combined with the second -- One dialog that
prevents accidental deletes, a second that both prevents accidental
deletes AND warns the user about the upcoming UAC prompt.

Another great idea.
That doesn't need to be true -- Microsoft could implement a "Run this
program as administrator without prompting" as an NTFS attribute that
requires full administrative rights to set. This attribute would also
apply a read-only attribute to the file, preventing a task without an
administrative token from modifying the file.

<snip>

Unfortunately, it does.

The problem isn't in keeping the attribute from being writable or keeping
the blessed program from being writable; the problem is that Windows cannot
determine whether the user is launching the program or another program is
launching a program.

If ANY unprivileged program (like Windows Explorer) can cause a program to
be launched elevated without prompting the user, then *ALL* unprivileged
programs can do that. MS may be able to make it hard for a non-explorer
process to do, but due to the nature of Windows, this cannot be avoided -
and it would only be matter of time before a malware figured it out, and
then the entire UAC scheme would be pretty much ruined overnight.

A malware that can launch a program that can be elevated without prompting
must be assumed to have as much power as the program that it just launched.

And for now, the only way for Windows to ensure that the user is the one
launching a program as opposed to another program ... is a prompt. So the
prompt really is unavoidable.

--
- JB
Microsoft MVP - Windows Shell/User

Windows Vista Support Faq
http://www.jimmah.com/vista/
 
I would hardly call deleting a shortcut anywhere near 'attempting to gain
complete control over your computer'.

It is kind of rediculous ... but true nonetheless. Deleting a shortcut on
the all users desktop requires that you give windows explorer COMPLETE AND
UTTER CONTROL OVER YOUR COMPUTER.

Because whenever you click Allow on a UAC prompt, that is what you are
giving the program that is requesting permission - after the prompt, it can
format your hard drives, load drivers, own your computer, and do pretty much
anything it wants.


--
- JB
Microsoft MVP - Windows Shell/User

Windows Vista Support Faq
http://www.jimmah.com/vista/
 
The REALLY big problem is that it doesn't ask you at all. It simply pops
up
dialog box with two buttons: Continue/Cancel. There isn't any security in
having who/whatever is at your keyboard press a button.

UAC isn't designed to protect you from unauthorized people using your
computer - that is what a good password is for.

It is designed to allow whoever is using the computer (whether you or
someone else) to decide which programs on your computer have complete and
unrestricted access to your computer.

If a program runs without prompting, it won't be able to do nasty stuff like
format hard drives, delete system files, load malicious drivers, etc.

If it DOES prompt, and you click Allow, you have just opened up your entire
computer to that program.


--
- JB
Microsoft MVP - Windows Shell/User

Windows Vista Support Faq
http://www.jimmah.com/vista/
 
In message <[email protected]> "Jimmy
Brush said:
It is kind of rediculous ... but true nonetheless. Deleting a shortcut on
the all users desktop requires that you give windows explorer COMPLETE AND
UTTER CONTROL OVER YOUR COMPUTER.

Deleting a shortcut probably doesn't need this level of protection, but
creating or modifying a shortcut *definitely* does, and it's much
simpler to implement an all-or-nothing approach (and likely more secure
then having to figure out what the possible consequences are)
 
In message <[email protected]> "Jimmy
Brush said:
Perhaps if you only have one item selected, but what if there are multiple
items?

As Explorer goes down the list of files, it would check to see if the
user has been prompted with the appropriate type of dialog with a "Yes
to all" button clicked. As a result, the user would never see more then
one of each possible dialog if they're using "Yes to all"
Another great idea.

GUI design 101.
<snip>

Unfortunately, it does.

The problem isn't in keeping the attribute from being writable or keeping
the blessed program from being writable; the problem is that Windows cannot
determine whether the user is launching the program or another program is
launching a program.
Correct.

If ANY unprivileged program (like Windows Explorer) can cause a program to
be launched elevated without prompting the user, then *ALL* unprivileged
programs can do that. MS may be able to make it hard for a non-explorer
process to do, but due to the nature of Windows, this cannot be avoided -

Correct. And?
and it would only be matter of time before a malware figured it out, and
then the entire UAC scheme would be pretty much ruined overnight.

And if some malware figures out it can launch Quicken as elevated, so
what? It still needs to find an exploit within Quicken, and if it does,
it may as well just wait for the user to launch Quicken and the malware
can do it's thing (including installing a service, thereby bypassing UAC
in the future)
A malware that can launch a program that can be elevated without prompting
must be assumed to have as much power as the program that it just launched.

Not at all -- UAC isolates elevated and non-elevated applications, which
prevents a non-elevated application from injecting DLLs (or whatever
else) into elevated application space, or otherwise controlling that app
(again, in the general case -- Specific applications may be exploitable,
but if so, and if those apps need to be elevated to run, the malware can
simply wait for the app to get launched by the user)
And for now, the only way for Windows to ensure that the user is the one
launching a program as opposed to another program ... is a prompt. So the
prompt really is unavoidable.

I don't much care what app on my system wants to launch Quicken (okay, I
wouldn't be caught dead using Quicken, but it's a good average end user
example)

It could be me initiating the action, or it could be malware, either
way, there is no harm done unless I choose to allow that app to always
run elevated.

While it's potentially not as secure (allowing CMD to run elevated, for
example), it's a fair sight better then having users simply turn off
UAC.

Another thought (and one I could see being far more useful, at least in
my line of work) would be to have some way to launch startup programs
elevated. This is one case where I might want something to happen which
requires elevation, but I definitely do not want to be prompted on every
bootup.

As long as adding an app to the "run this elevated on bootup" required
elevation, and whatever process launched the elevated apps would ensure
that no un-elevated writes were possible to the startup EXE, it wouldn't
open any security holes in the general sense.

(FWIW, I'm actually working on something that does just this using logon
scripts, and semaphore files for inter-process communication to allow
the un-elevated user and the elevated pseudo-service to communicate. Is
it a security hole? Yes. Is it exploitable? In the general sense, no,
it would require fairly intimate knowledge of the technique I'm using,
plus it will require an app to be elevated at least once to take
advantage of it -- If an app could get elevated once, it could just
install itself as a service and bypass this whole mess)

Another thought, and one that is potentially far easier to exploit,
create an app that injects itself into Explorer, and waits until it sees
Explorer do something that would normally require elevation (so the user
is expecting the prompt, and will authorize it), then jump in and
request elevation. I'd bet most users wouldn't even notice (and if the
app is well designed, it will take the appropriate action anyway, so the
user doesn't have a hope of noticing)

All in all, I have UAC enabled on my system and don't really plan on
changing that, although I did use a group policy to automatically
elevate (I'm more interested in the virtualstore/redirection of \Program
Files\ and similar, which finally lets the last few "I've gotta have
admin, I've really gotta have admin, even though I don't need it, I just
like to write in the \Program Files\ directory" software packages run
without opening up NTFS permissions more then I'm comfortable with.
 
And if some malware figures out it can launch Quicken as elevated, so
what?
It still needs to find an exploit within Quicken,

You use quicken as an example of an administrative program, but this is a
terrible example - quicken is not (and should not be) a privileged program.
Any program should be able to launch quicken in its non-privileged state.

However, I can still use a theoretical "blessed-to-elevate" quicken to
exemplify what I am trying to state here.

You're assuming here that any program that is running with privilege does
not BY DESIGN, simply by the act of executing and in response to command
line switches, do something privileged.

You can't assume that! :)

In fact, if a program is requesting admin permission from the user, then the
opposite assumption should be made: that the privileged program is, in fact,
going to do an admin operation when it starts running that an unprivileged
program would not (and should not) be able to do.

There is no 'exploit' required: the very fact that privileged action(s)
(encapsulated by a privileged process) are being executed at the request of
an unprivileged process, without confirming that the user initiated the
action, is in a very direct way making whatever privileged actions that the
privileged process takes available to all unprivileged applications. And
this is the BEST CASE scenario. Any further 'tinkering' that the
unprivileged application can do to squeeze more privilege out of the
privielged application is just icing on the cake.

My point can be stated by example very clearly with common administrative
programs. Let's say you format disks all the time, so you bless the format
command. Unprivileged code can now format disks [an administrative action]
by launching the format command without you knowing about it, all without
modifying the format EXE or injecting code into its process - by simply
causing to happen the action that FORMAT was designed to do. And this is the
BEST CASE scenario.

Sure, the unprivileged program cannot thru API format the disk in its own
right - but it can use format.exe to accomplish this, in the same way
(semantically) as if it had the privilege to do so all along.

As an example of the worst case scenario, there could be a bug say in the
format code that processes command line switches, that ends up allowing an
attacker to run arbitrary code - whoops, the unprivileged process can now
perform ANY privileged action, not just format hard drives!

Current UAC design prevents both the worst case and the best case scenario -
as it should - since the best-case scenario is a slippery-slope to the worse
case, and allowing this to happen would be tantamount to architecting UAC to
fail.

And to move back to the quicken example - an unprivileged program could
cause even another unprivileged program that happens to run with privilege
to perform a privileged operation with disasterous side-effects. For
example, one could abuse any command-line exposable behavior or
automatally-performed-on-startup behavior of quicken that, when ran in a
privileged environment, would leak privilege.

Granted, in the "quicken" case (a program designed NOT to be privileged
which happens to be RUNNING with privilege) it would be harder for an
attacking program to take advantage of it [but not as hard as you suggest,
as attacking it would not require modifying its code, simply passing in
command line arguments], but again this is the LEAST LIKELY case - the MOST
LIKELY case is that the user will bless a program to run that IS DESIGNED to
perform some administrative action and is DIRECTLY abusable by unprivileged
applications.

To look at the problem in a more complete way:

- Administrative actions are abstract things that are implemented in code
that uses the privileges assigned to the user and exposed by the system.

- Administrative programs are programs that implement and expose one or more
administrative actions

- Administrative programs are allowed to use ALL THE PRIVIELGES assigned to
the user in order to carry out their functionality

- Non-administrative programs may only use specific privileges, not ALL of
the privielges that a user has

And, my point: Allowing unprivileged programs to launch privileged programs
allows those unprivileged programs to perform administrative actions (which
are composed of privileged actions).

Sure, unprivileged code cannot DIRECTLY access the underlying
admin-resitricted privileges without taking control over the administrative
program/process (which is what you are pretty much saying in your post) -
but they can perform the abstract administrative action composed of the
restricted privileges, which is just as bad.

UAC prevents this form of attack by ensuring that the user started
administrative programs, as opposed to some malicious program.
and if it does,
it may as well just wait for the user to launch Quicken and the malware
can do it's thing (including installing a service, thereby bypassing UAC
in the future)

Again, you are assuming here that an exploit would be required for an
unprivileged process to effectively abuse a privileged one. Based on this
assumption, you assume that malware that could perform such an exploit by
starting a privileged application could just as easily perform the same
exploit on a privileged process that it did not start.

These are both invalid assumptions. An exploit (changing the code) is not
required. The unprivileged process can perform malicious privileged actions
through the normal actions that the privileged programs ALREADY DO.
Not at all -- UAC isolates elevated and non-elevated applications, which
prevents a non-elevated application from injecting DLLs (or whatever
else) into elevated application space, or otherwise controlling that app
(again, in the general case -- Specific applications may be exploitable,
but if so, and if those apps need to be elevated to run, the malware can
simply wait for the app to get launched by the user)

What you say is technically correct; however, it does not refute my
statement.

Allowing an unprivileged process to launch a privileged process on its own
behalf in a very real sense gives that unprivileged program the power to do
everything that the privileged program does.

And this is the *BEST CASE* scenario!!! - the unprivileged process can only
perform the limited administrative actions that the privileged program
exposes to the user thru command-line switches (or that it does
automatically via startup).

The WORST CASE is, as you suggest and as I implied, the unprivileged program
is able to somehow take over the administrative program and directly perform
any privileged action.

You are telling me that the WORST CASE would be extremely rare and would be
an "acceptable risk". And I understand what you are saying, although I don't
agree with this... (this is what I would consider 'architecting for
disaster'. If you are talking about the design of a system, which would be
UAC which allows application blessing, where compliance with the design
would be IMPOSSIBLE [preventing unprivileged apps from performing privileged
actions], then what exactly is the point of implementing? In other words,
saying 'its OK because it only expresses this under X scenario' may be OK
when IMPLEMENTING something, but is complete UNACCEPTABLE when DESIGNING
something)

However, the point I am making is that the situation that would exist in the
ABSOLUTE BEST CASE isn't much better than the WORST CASE!
I don't much care what app on my system wants to launch Quicken (okay, I
wouldn't be caught dead using Quicken, but it's a good average end user
example)

It could be me initiating the action, or it could be malware, either
way, there is no harm done unless I choose to allow that app to always
run elevated.

OK, so there's no harm done until you allow an app to always run elevated. I
agree with that statement. However, once that's happened, the integrity of
UAC is no longer enforcable. You've just broken UAC in a fundamental way,
that will lead eventually to the complete technical failure of UAC.

Because essentially, what blessing an administrative program is doing, is
telling UAC "this action IS NO LONGER AN ADMINISTRATIVE ACTION - even though
the system still thinks it is and may *depend* on this action being
restricted, I want ANY UNPRIVILEGED APPLICATION to be able to perform this
task."

UAC has no way of ensuring that this won't lead to system compromise, and in
fact this is the only logical outcome.
While it's potentially not as secure (allowing CMD to run elevated, for
example), it's a fair sight better then having users simply turn off
UAC.

There is no "potentially" about it - allowing the behavior you suggest would
implicitly allow ALL non-privileged programs to perform whatever
administrative actions you bless (essentially making those administrative
actions "non-administrative") - and this is the BEST-CASE scenario. In the
worst case scenario, you completely GET RID of the privilege seperation UAC
enforces, effectively nullifying UAC.
Another thought (and one I could see being far more useful, at least in
my line of work) would be to have some way to launch startup programs
elevated. This is one case where I might want something to happen which
requires elevation, but I definitely do not want to be prompted on every
bootup.

You can already do this with the task scheduler.
As long as adding an app to the "run this elevated on bootup" required
elevation, and whatever process launched the elevated apps would ensure
that no un-elevated writes were possible to the startup EXE, it wouldn't
open any security holes in the general sense.

The computer starting up is an event that happens, not something that a
(non-elevated) process can start to happen. Thus, launching admin programs
on this event wouldn't leak privileges anywhere, assuming that the
requirement of not allowing unprivileged programs to muck about with either
the event or the program being launched is kept.

This is completely different than allowing a program to always be blessed:
the starting of a program in this case is directly controllable by
unprivileged programs, and thus leaks privilege, always.
(FWIW, I'm actually working on something that does just this using logon
scripts, and semaphore files for inter-process communication to allow
the un-elevated user and the elevated pseudo-service to communicate. Is
it a security hole? Yes. Is it exploitable? In the general sense, no,
it would require fairly intimate knowledge of the technique I'm using,
plus it will require an app to be elevated at least once to take
advantage of it -- If an app could get elevated once, it could just
install itself as a service and bypass this whole mess)

I'm not sure if I understand what you are saying here.

You say "would allow the unelevated user to communicate with the
pseudo-service" in one sentence and then "will require an app to be elevated
at least once to take advantage of it " in another - these statements are
mutually exclusive. If your program allows an unelevated program to cause an
elevated program to launch without user consent, then you have to assume
that *ANY* unelevated program can perform that operation.

The attacker doesn't have to figure out your system, it can be as
complex/obfuscated as you want it. They just have to figure out how to cause
your really-privileged-but-the-system-thinks-is-unprivileged process to do
what the attacker wants - and I think this would be more exploitable than
you think.
Another thought, and one that is potentially far easier to exploit,
create an app that injects itself into Explorer, and waits until it sees
Explorer do something that would normally require elevation (so the user
is expecting the prompt, and will authorize it), then jump in and
request elevation. I'd bet most users wouldn't even notice (and if the
app is well designed, it will take the appropriate action anyway, so the
user doesn't have a hope of noticing)

Fascinating thought :).
All in all, I have UAC enabled on my system and don't really plan on
changing that, although I did use a group policy to automatically
elevate (I'm more interested in the virtualstore/redirection of \Program
Files\ and similar, which finally lets the last few "I've gotta have
admin, I've really gotta have admin, even though I don't need it, I just
like to write in the \Program Files\ directory" software packages run
without opening up NTFS permissions more then I'm comfortable with.

So your system is essentially running in "all administrative actions are
blessed" mode. This means that all programs that say that they need
privilege will get privilege, and all privileged programs will be allowed to
run, even if you did not start them.

I agree this is marginally better than turning UAC off, in the same way that
I would agree that having a "blessing" system would be marginally better
than turning UAC off.

But you essentially HAVE turned the most important parts of UAC off.

You still get the "programs that SAY they don't need privilege don't have
them" benefit.

But you don't get the most important benefits of all:

- the knowledge that ALL privileged actions were initiated by you (any
program can now perform privileged actions without you knowing about it,
either by directly asking for such privilege and automatically receiving it
or by abusing some other program that has privilege)

- the right for *YOU* to decide whether a program requesting privilege
deserves to have it (any program, including malware, can SAY they need
privilege, even if they don't or you don't want them to, and you have no
chance to say "hey wait a minute no you don't").

--

In light of these technical issues with the current design of Windows/UAC, I
do believe it is possible to architect Windows/UAC such that the need for
the prompt can be minimized or eliminated, which would make this whole
stinky 'blessing' business a non-issue.

--
- JB
Microsoft MVP - Windows Shell/User

Windows Vista Support Faq
http://www.jimmah.com/vista/
 
In message <[email protected]> "Jimmy
Brush said:
You use quicken as an example of an administrative program, but this is a
terrible example - quicken is not (and should not be) a privileged program.
Any program should be able to launch quicken in its non-privileged state.

Actually, it's a great example -- It's a program that shouldn't need
admin privileges, yet reportedly won't run without being elevated.

As a result it's an ideal candidate for an "always elevate"
You're assuming here that any program that is running with privilege does
not BY DESIGN, simply by the act of executing and in response to command
line switches, do something privileged.

You can't assume that! :)

No -- But I *can* assume that if a user is trained to give permission
whenever they start a specific app, all some malware has to do is wait
for the user to start the elevated app, intercept the call, and get
itself elevated, then start the app for the user so the user never
notices the difference.

This would be fairly trivial to accomplish, you could scrape the start
menu and desktop looking for shortcuts with the "always start as admin"
flag (either on the shortcut or the file) and rewrite the shortcut, or
hook directly into Explorer and trap the attempt to start an external
program.
 
This is valid concern.

UAC mitigates this by showing different UAC prompts under different
circumstances.

Programs that are signed (such as hopefully most retail apps out there) show
the publisher as well as a different prompt, as opposed to an unsigned,
which has a completely different looking prompt and requires the user to
click on a different spot.

While a malware could still be signed (and this have a similar-looking
prompt to another retail app), it would be for a different company and would
show differently on the prompt, although I'm sure this difference may be
glazed over by some users.

I don't see how this makes it just as bad as allowing elevation without
prompting. The user would still be given enough info to determine whether
the app is legit, although I'm sure some percentage of users would not
notice this (UAC gives filename, location, publisher, and whether it is
signed and unmodified from original form), and it would be up to them to
make a decision.

Elevation without prompting results in taking away this control/decision
point from the user. Users that would have been able to stop what was
happening in the above scenario are powerless in this one, as they have no
control. This is still a worse situation.


--
- JB
Microsoft MVP - Windows Shell/User

Windows Vista Support Faq
http://www.jimmah.com/vista/
 
In message <#[email protected]> "Jimmy Brush"
This is valid concern.

UAC mitigates this by showing different UAC prompts under different
circumstances.

Programs that are signed (such as hopefully most retail apps out there) show
the publisher as well as a different prompt, as opposed to an unsigned,
which has a completely different looking prompt and requires the user to
click on a different spot.

Yeah, and the dialogs are reasonably different too -- Kudos to Microsoft
on this one.

Of course there is already an exploit out there that uses a legacy
control panel app to result in the "signed by Microsoft" designation to
appear on an unsigned EXE.
While a malware could still be signed (and this have a similar-looking
prompt to another retail app), it would be for a different company and would
show differently on the prompt, although I'm sure this difference may be
glazed over by some users.

Most, I suspect.
I don't see how this makes it just as bad as allowing elevation without
prompting. The user would still be given enough info to determine whether
the app is legit, although I'm sure some percentage of users would not
notice this (UAC gives filename, location, publisher, and whether it is
signed and unmodified from original form), and it would be up to them to
make a decision.

Sure, but most users don't pay attention at all -- If they are expecting
a dialog, they'll click it subconsciously without any conscious thought
without reading it.

If the malware isn't signed, it may throw up a warning to the user (I'd
notice), but then again it may not, many users don't know or care, they
just want their app to run.

It's a classic security vs convenience problem -- The most secure system
is one that won't run any code at all (useless), the most convenient
system is one that allows whatever it thinks the user might want
(insecure)

Traditionally, Windows has focused on convenience rather then security.
I, for one, am very glad the focus is shifting.
Elevation without prompting results in taking away this control/decision
point from the user. Users that would have been able to stop what was
happening in the above scenario are powerless in this one, as they have no
control. This is still a worse situation.

With this thread in mind, perhaps a better solution would be to have the
Start menu run elevated, which would allow it to launch elevated apps
without explicit permission, but would prevent unelevated apps from
manipulating the start menu.

As long as the "Run elevated without prompting" bit was appropriately
secured (and again, set on *nothing* by default) this would prevent
malicious apps from launching elevated apps without the user's
permission, but would still allow routinely executed "always-elevate"
apps to run.

I'm a RocketDock user, I'm thinking I might see if I can get two docks
running an elevated and a non-elevated one just to avoid the prompt when
I need an elevated command line.

(Why do I avoid elevation problems? The big reason is I have a couple
apps that don't react well to the switch over to the secure desktop, one
forces me to Aero Basic, the other crashes entirely if the secure
desktop lasts more then about 2 seconds -- I could set the prompts to
appear interactively rather then in a secure desktop, but my gut feeling
is that I'd be just as safe as turning off UAC, although I haven't
actually tested to see if these UAC prompts resist attempts to automate
them)
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Back
Top