8

I work in an environment where local admin privileges for users isn't allowed. At all. This is very nice, but can be also be a pain when employees who must have local admin permissions to run a program or install software that requires elevated privileges even if only to do the install. There is a user in bookkeeping who receives a monthly DVD from a vendor of ours that contains much needed reports. In order to look at the reports and make a backup, she must run the executable on the DVD. The executable requires Admin privileges for the install. So since I've been here, every month I run the .exe, UAC appears and I supply the much-needed information to run the installer.

If this was a one time program I would use the Microsoft Application Compatibility Toolkit gimmick to bypass UAC http://www.techrepublic.com/blog/windows-and-office/selectively-disable-uac-for-your-trusted-vista-applications/ However, since this is a new DVD sent to her each month I need some kind of tool she can use herself for this operation.

I have looked around Server Fault and also did Google-Fu, but haven't found anything useful. I might be one of some in a unique situation.

I want to use Poweshell to make the tool. Ideally, I want her to be able to put in the DVD and then launch the Poweshell tool (from her desktop shortcut, no doubt) that looks at the DVD drive and runs the setup.exe file as a local admin without the UAC prompt, without her having to supply any credentials.

What I have so far is some pieced together junk at the moment. I am not a Powershell Jedi. I am a Poweshell padawan. I have half of what I need. I still need to store the password so it doesn't have to be defined and input each time she runs the script. I want this to be as smooth and as few clicks as possible.

For the creds I am choosing to go with the local admin account since that password doesn't change. The local admin account will get the job done. I will need to store that account information on the computer so Powershell can retrieve the account each time she runs the script. So this will need to be an encrypted file in a path variable.

# define path to store password and input password 
$path = "C:\Users\User\Password folder"
# get the encrypted local admin password from user path
$encpwd = Get-Content $path\admin.bin
# convert admin file to secure string 
$passwd = ConvertTo-SecureString $encpwd
# define local admin credential 
$cred = new-object System.Management.Automation.PSCredential 'computer name\local admin',$passwd
# go to DVD drive launch setup.exe as local admin with no user input required
Set-Location D:\
Start-Process PowerShell -Cred $cred -ArgumentList .\setup.exe

I might get a few downvotes for this, but I know somewhere I need to define and put in ""Read-Host "some text about entering password" -AsSecureString"" in an existing variable or a new variable. I have to get the password input into the process. I have tried a few spots. Thoughts? Wisdom? Impossible?

Windows 7 Pro Powershell v4

  • Why not just get the credentials with Get-Credential? – Zoredache Nov 5 '15 at 23:44
  • "Users are not allowed local admin access AT ALL. What I want is something to give one user local admin access". If they need local admin access to do their jobs, then the policy is too restrictive - get it changed. Give the user the local admin account credentials, make it so it can't access any email or shares so there's no temptation to always use it. Set it to be audited and demonstrate to the user that it is so. (It's typing a password 12x per year. Is that really the most pressing thing you have to automate away...? Can you delegate it instead?) – TessellatingHeckler Nov 6 '15 at 3:15
  • @TessellatingHeckler Is that really the most pressing thing you have to automate away...? because "automate everything", right? haha no. I did figure out how to accomplish this goal, but doing so would violate one of our policies so I choose not to roll it out to the user at this time. We do allow exceptions to policy in a formal manner so I could sign the "exception to policy" paper and she too, but I am not sure it is worth the trouble for something I do 12x a year as you say. – Art.Vandelay05 Nov 6 '15 at 20:22
  • Even though I know the user does not know how to open a Powershell script in notepad, view the contents of the script, find the path to the encrypted password file and then decrypt the password file, it is still a violation of our policy (because there is the potential for an attacker to gain access to her computer file the password file, decrypt it and then have local admin access to the computer). I don't want to be a part of that. – Art.Vandelay05 Nov 6 '15 at 20:25
4

Run As Administrator Without Being Administrator

Allow a non-admin user to run a program as a local admin account but without elevation prompt

Below are instructions for setting up a workaround to get an application to run as another account that is a local administrator. The account that executes the process does not need to be a local administrator on the PC though.


The Windows Workaround (see all below notes)

Examples

  1. Create Username (domain or local): ProxyRunAsLocalAdmin

  2. Create Password (domain or local): <SomeComplexPassword>

Notes

  • This account is setup as local admin on PCs where something needs to be run with admin permissions without actually giving the end-user which will run it (execute) local admin permissions.

  • This is a last resort option for things which will not work for non-admins on the local machines where giving their account (the end-user and/or some group) explicit registry and file system level object access does not work.

Security

  • No one is to have this information other than domain administrators—i.e. don't share with the end-user.

Creating a shortcut with the RUNAS (this could be D:\Setup.exe)

Shortcut Properties Example

TARGET Field Example (below):

%systemroot%\system32\runas.exe /user:domain\ProxyRunAsLocalAdmin /savecred "C:\Program Files\BlueStacks\HD-StartLauncher.exe"

START IN Example: "C:\Program Files\BlueStacks"

enter image description here

IMPORTANT: The double-quotes around the Start In: field may be required whether or not there are any spaces in the path.


Additional Setup Notes

  • You can create a domain user account or a local PC user account for this purpose and give it local admin permissions to the local machine whenever such a solution is needed.
  • You'll have to run the shortcut with the "RUNAS, etc." when signed onto the PC as the user that will need to execute that process without being a local admin themselves. When you do this, you will be required to type in the credential—caching it this ONE time but it'll not be needed on each subsequent execution of the process using the RUNAS and /SAVECRED again from that SAME user account profile moving forward.
  • This password to this account is NOT shared with anyone, only the domain\systems admins have this information and plug it in wherever needed per user per machine—it is a per Windows user account profile type deal as well. So, if you create a new profile for a user and this solution is needed, then the shortcut will need to be run again so the credential is cached for their profile as well (by an admin).

Security Notes

  1. You cannot restrict local login access for the account through group policy or the account will not be able to RUNAS interactively—I already tried that for security but I could not get it to work properly.
  2. Since this is a cached credential with local admin permissions on it, technically an end-user where this is saved could apply this same RUNAS technique to another EXE or via command line if that's allowable. This means you as the admin need to weigh in the upsides and downsides with this solution including the risks. Perhaps allowing this for your trustworthy people or items that are ongoing or needed over and over again without actually granting the end-user local admin is fine.

Controls

You do have some controls in place for this solution though such as . . .

  • Pick which machines you want to allow this to run runas from
  • Pick which user profiles on each machine you want this to runas from
  • You have to go to the user profile on this machine and type in the credentail the initial time regardless
  • The exposure is to local machine at the PC level, not the domain level since the local or AD account is a member of the local machine IP address
  • Don't give this account any network resource access to anything (only local PC admin per each individual PC as-needed)
  • If you ever want to do a mass disable of this feature (assuming using a domain account) then simply disable the account or change the password
  • Ensure that others are aware of some of these ramifications, etc. and get them to approve so you're not the person making the decision to use this or not
  • This is awesome! I will definitely check this out. My goal was to use Poweshell, but this answer was helpful. NOTE1: This account is setup as local admin on PCs where something needs to be run with admin permissions without actually giving the end-user which will run it local admin permissions. I have quite a few machines that anytime a new user is at the machine I have to play musical chairs with them to give access to the software installed. The software requires the user to be local admin and cannot be installed for all users. – Art.Vandelay05 Nov 6 '15 at 20:19
  • I think the user can retrieve the saved password from within the users context? If so this might be a security risk? – eKKiM Jan 12 '18 at 8:06
  • @eKKiM I think it'd be more like a registry hash perhaps than the actual text of the password characters but I'm not 100% certain. I only ever completed this task when there was a need for it and someone else signed off on it and approved it after I explained the risks. So whatever risks there are, this is simply one of the downsides to using it but if there's a need for such a solution then someone needs to know what risks they are willing to take. Our machines were super locked down when I did this years ago for a company & their compliance team approved with risks they were willing to take. – Pimp Juice IT Jan 12 '18 at 15:03
  • You'd likely need to be domain admin to get this detail I would think but I don't have time to look up saved credentials and where the Windows OS stores this detail once saved but I would think admin access would be needed to get any hash detail from the registry but I'll try to remember to look this up later to verify. – Pimp Juice IT Jan 12 '18 at 15:05
1

I found a way to accomplish the goal with Powershell. First a script must be run on the user computer (only once) to make an encrypted password and then store it to a file. Note: The stored password file is not a txt file containing the local admin password in plain text. It is the output of the ConvertFrom-SecureString cmdlet.

First, the script to enter the password and store it to a file. This will only need to be run one time on the target computer.

# Enter encrypted password once and store to file; define variables 
$path = "C:\Folder\Folder\"
$passwd = Read-Host "enter desired password" -AsSecureString
$encpwd = ConvertFrom-SecureString $passwd
$encpwd > $path\filename.bin

Now, the script that the user will run to launch the program from the dvd as a local admin. She will run the script from the desktop shortcut after inserting the dvd into the disc drive. After launching the script, the program runs perfectly and she can do this without asking me or the other admin for assistance (which she loves).

# define path to store password and input password 
$path = "C:\folder\folder"
# get the encrypted password from the path
$encpwd = Get-Content $path\filename.bin
# convert file to secure string 
$passwd = ConvertTo-SecureString $encpwd
# define needed credential 
$cred = new-object System.Management.Automation.PSCredential 'computer name\account name',$passwd
# go to DVD drive launch setup.exe as user with privileges to launch the program with no user input required
Set-Location D:\
Start-Process PowerShell -Cred $cred -ArgumentList .\setup.exe

This Powershell.org article was instrumental in getting my answer http://powershell.org/wp/2013/11/24/saving-passwords-and-preventing-other-processes-from-decrypting-them/

  • The user can retrieve the the login details of the domain user with local admin permissions quite easily.. i would consider this a major security issue. – eKKiM Jan 12 '18 at 8:07
0

Well, thankfully if you eliminate local admin, the only real option you have left is CMD line. Powershell is good, but I would think you would be able to run a batch with this, too.

Only downside to each of these is, if the user knows how to open the scripts, she can see what you put in them, which is a huge no no. The only way around that is to write a command within the code to lock the script down upon opening, not executing, to prompt for a password.

Maybe a batch or powershell written to specifically address UAC?

  • Thanks for the input! I wanted to use Poweshell for this and actually found a way to do it. A good part about working at a smb is I know the user well. She does not know how to look at the contents of the script. I understand this is a risk, which is why given our environment and policies we have I am not sure I will go through with rolling it out However, I did find a way to do it (i just had to) and decided to post the answer here in case it can help someone else with a less strict environment. – Art.Vandelay05 Nov 6 '15 at 20:14
0

On other option to bypass the UAC is running the program under system account because this account has no UAC on an UAC system. There are some source codes on the internet. A complete solution is on robotronic.de/runasadminen.html This solution is also usable for a non administrator account.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.