Windows Sysinternals Administrator's Reference: Security Utilities
- 6/15/2011
- SigCheck
- AccessChk
- AccessEnum
- ShareEnum
- ShellRunAs
- Autologon
- LogonSessions
- SDelete
LogonSessions
The LogonSessions utility enumerates active logon sessions created and managed by the Local Security Authority (LSA). A logon session is created when a user account or service account is authenticated to Windows. Authentication can occur in many ways. Here are some examples:
Via an interactive user logon at a console or remote desktop dialog box
Through network authentication to a file share or a Web application
By the service control manager using saved credentials to start a service
Via the Secondary Logon service using Runas.exe
Simply “asserted” by the operating system, as is done with the System account and for NT AUTHORITY\ANONYMOUS LOGON, which is used when performing actions on behalf of an unauthenticated user or an “identify” level impersonation token.
An access token is created along with the logon session to represent the account’s security context. The access token is duplicated for use by processes and threads that run under that security context, and it includes a reference back to its logon session. A logon session remains active as long as there is a duplicated token that references it.
Each logon session has a locally-unique identifier (LUID). A LUID is a system-generated 64-bit value guaranteed to be unique during a single boot session on the system on which it was generated. Some LUIDs are predefined. For example, the LUID for the System account’s logon session is always 0x3e7 (999 decimal), the LUID for Network Service’s session is 0x3e4 (996), and Local Service’s is 0x3e5 (997). Most other LUIDs are randomly generated.
There are a few resources that belong to logon sessions. These include SMB sessions and network drive letter mappings (for example, NET USE), and Subst.exe associations. You can see these in the Windows object manager namespace using the Sysinternals WinObj utility (discussed in Chapter 14), under \Sessions\0\DosDevices\LUID. Resources belonging to the System logon session are in the global namespace.
Note that these LSA logon sessions are orthogonal to terminal services (TS) sessions. TS sessions include interactive user sessions at the console and remote desktops, and “session 0”, in which all service processes run. A process’ access token identifies the LSA logon session from which it derived, and (separately) the TS session in which it is running. Although most processes running as System (logon session 0x3e7) are associated with session 0, there are two System processes running in every interactive TS session (an instance of Winlogon.exe and Csrss.exe). You can see these by selecting the Session column in Process Explorer.
LogonSessions is supported on Windows XP and newer, and it requires administrative privileges. Run LogonSessions at an elevated command prompt and it will list information about each active logon session, including the LUID that is its logon session ID, the user name and SID of the authenticated account, the authentication package that was used, the logon type (such as Service or Interactive), the ID of the terminal services session with which the logon session is primarily associated, when the logon occurred (local time), the name of the server that performed the authentication, the DNS domain name, and the User Principal Name (UPN) of the account. If you add /p to the command line, LogonSessions will list under each logon session all of the processes with a process token associated with that logon session. Here is sample output from LogonSessions:
[0] Logon session 00000000:000003e7: User name: MYDOMAIN\WIN7-X64-VM$ Auth package: Negotiate Logon type: (none) Session: 0 Sid: S-1-5-18 Logon time: 6/9/2010 23:02:35 Logon server: DNS Domain: mydomain.lab UPN: WIN7-X64-VM$@mydomain.lab [1] Logon session 00000000:0000af1c: User name: Auth package: NTLM Logon type: (none) Session: 0 Sid: (none) Logon time: 6/9/2010 23:02:35 Logon server: DNS Domain: UPN: [2] Logon session 00000000:000003e4: User name: MYDOMAIN\WIN7-X64-VM$ Auth package: Negotiate Logon type: Service Session: 0 Sid: S-1-5-20 Logon time: 6/9/2010 23:02:38 Logon server: DNS Domain: mydomain.lab UPN: WIN7-X64-VM$@mydomain.lab [3] Logon session 00000000:000003e5: User name: NT AUTHORITY\LOCAL SERVICE Auth package: Negotiate Logon type: Service Session: 0 Sid: S-1-5-19 Logon time: 6/9/2010 23:02:39 Logon server: DNS Domain: UPN: [4] Logon session 00000000:00030ee4: User name: NT AUTHORITY\ANONYMOUS LOGON Auth package: NTLM Logon type: Network Session: 0 Sid: S-1-5-7 Logon time: 6/9/2010 23:03:32 Logon server: DNS Domain: UPN: [5] Logon session 00000000:0006c285: User name: MYDOMAIN\Abby Auth package: Kerberos Logon type: Interactive Session: 1 Sid: S-1-5-21-124525095-708259637-1543119021-20937 Logon time: 6/9/2010 23:04:06 Logon server: DNS Domain: MYDOMAIN.LAB UPN: abby@mydomain.lab [6] Logon session 00000000:000709d3: User name: MYDOMAIN\Abby Auth package: Kerberos Logon type: Interactive Session: 1 Sid: S-1-5-21-124525095-708259637-1543119021-20937 Logon time: 6/9/2010 23:04:06 Logon server: DNS Domain: MYDOMAIN.LAB UPN: abby@MYDOMAIN.LAB
Because the System and Network Service accounts can authenticate with the credentials of the computer account, the names for these accounts appear as domain\computer$ (or workgroup\computer$ if they’re not domain-joined). The logon server will be the computer name for local accounts and can be blank when logging on with cached credentials.
Also note that on Windows Vista and newer with User Account Control (UAC) enabled, two logon sessions are created when a user interactively logs on who is a member of the Administrators group,1 as you can see with MYDOMAIN\Abby in entries [5] and [6] in the preceding sample. One logon session contains the token representing the user’s full rights, and the other contains the filtered token with powerful groups disabled and powerful privileges removed. This is the reason that when an administrator elevates, the drive-letter mappings that are present for the non-elevated processes aren’t defined for the elevated ones. You can see these and other per-session data by navigating to \Sessions\0\DosDevices\LUID in WinObj, described in Chapter 14. (Also see Knowledge Base article 937624 (available at http://support.microsoft.com/kb/937624) for information about configuring EnableLinkedConnections.)