Thursday, January 22, 2015

List of Hidden / Virtual Windows User Accounts



I’m trying to find a way to get a comprehensive list of user accounts on a Windows 7 system, including hidden ones. The User Accounts dialog (>control userpasswords2) only shows the normal user accounts, and even the Local User and Groups editor only shows normal user accounts and standard hidden/disabled ones like Administrator and Guest. The Select Users or Groups dialog has a Find Now button which which combines users and groups, but alas, it has the same contents as the LUG.



I’m looking for a more comprehensive list that includes “super-hidden” / virtual user accounts like TrustedInstaller (or to be more accurate, NT Service\TrustedInstaller—notice the different “domain”).




I checked HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\SpecialAccounts\UserList, but the SpecialAccounts key does not exist.



I also checked HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList, and while it does have the SystemProfile, LocalService, and NetworkService accounts listed, it does not have others (like TrustedInstaller and its ilk).



TrustedInstaller specifically is a little confusing because it is a user, a service, and an executable file. I am using it as an example because it is “super hidden” in that it does not seem to be listed in any sort of user list. (As an experiment, I tried searching the whole registry for “trustedinstaller” to see if I could find a place where it is listed as a user, but found none.)

To be clear, what I am looking for is a list of all accounts that can be used in a user input-field such as in permissions dialogs or as a runas argument.


Answer



I don't think there is an ultimate list of all possible accounts.




There are different types of names you can use in the user input-field such as in permissions dialogs.



First up are standard Win32_Accounts, to get a full list open a PowerShell session and run:



get-wmiobject -class "win32_account" -namespace "root\cimv2" | sort caption | format-table caption, __CLASS, FullName


These are the usual users, groups and the builtin accounts.



Since Vista, there is a new class of accounts, called virtual accounts, because they do not show up in the usual management tools.

There are sometimes called service accounts as well, and there are at least three different types of these:




  • Windows Service Accounts



Since Vista every windows service has an virtual account associated with it, even it it runs under a different user account and
even if it does not run at all. It looks like NT Service\MSSQLSERVER



To get a list of those use:




get-service | foreach {Write-Host NT Service\$($_.Name)}



  • IIS Application Pools



Each IIS application pool that runs under the ApplicationPoolIdentity runs under a special account called IIS APPPOOL\NameOfThePool




Assuming you have the IIS Management scripting tools installed, you can run:



Get-WebConfiguration system.applicationHost/applicationPools/* /* | where {$_.ProcessModel.identitytype -eq 'ApplicationPoolIdentity'} | foreach {Write-Host IIS APPPOOL\$($_.Name)}



  • Hyper-V Virtual Machines



On Server 2008+ and Windows 8+ you have Hyper-V, each virtual machine creates it own virtual account, which looks like:

NT VIRTUAL MACHINE\1043F032-2199-4DEA-8E69-72031FAA50C5



to get a list use:



get-vm | foreach {Write-Host NT VIRTUAL MACHINE\$($_.Id) - $($_.VMName)}


Ever though these accounts are not accepted in the permissions dialog, you can use them with icacls.exe to set permissions.



There is also a special group NT Virtual Machine\Virtual Machines, which doesn't show up elsewhere. All of the virtual machine accounts are members of this group, so you can use this to set permissions for all VM files.




These names are language specific, e.g. in German it is named NT Virtual Machine\Virtuelle Computer




  • Desktop Window Manager



The dvm.exe process (Desktop Window Manager) runs under a user Windows Manager\DWM-1



Again you can not use this type of users in the permissions dialogs. It is not really possible to enumerate these either because one exists for each 'Desktop session', so when using two RDP sessions, you also have DWM-2 and DWM-3 in addition to DVM-1. So there are as many as there are desktops available.





  • Computer Names



In certain cases you can also use computer names in the permissions dialog, usually when being part of an Active Directory domain.




  • Windows Remoting Virtual Users




When using PowerShell and 'JEA (Just enough Administration)' and connect to a server with a PS remote session, a temporary virtual user may be created.



these have the following format:



winrm virtual users\winrm va_x_computername_username



and an SID that starts with S-1-5-94-



the 'x' is an integer number.




These accounts can be used when assigning NTFS permissions, but I don't know how to list all these possible virtual users.



While in a JEA session you can use whoami to find out the current account name.





Even these lists don't give you every possible account.



For example, you can create an application pool FooBarPool then delete it again,

you can still use IIS APPPOOL\FooBarPool in the permissions dialog, so there must be an internal list somewhere.


No comments:

Post a Comment

linux - How to SSH to ec2 instance in VPC private subnet via NAT server

I have created a VPC in aws with a public subnet and a private subnet. The private subnet does not have direct access to external network. S...