none
Разные токены стандартного пользователя на разных машинах RRS feed

  • Общие обсуждения

  • Настраиваем мониторинг администраторских прав. Включили аудит событий создания процесса.  UAC включен. В поле TokenElevationType события 4688 для стандартного пользователя в основной массе компьютеров (Windows 7 SP1) стоит 1 тип токена (TokenElevationTypeDefault), но на некоторых машинах стоит 3 тип токена (TokenElevationTypeLimited). Не могу понять в чем разница на этих компьютерах, такое ощущение что какая-то KB стоит или отсутствует.

    • Изменено HShark 16 октября 2017 г. 12:28
    • Изменен тип Anton Sashev Ivanov 26 октября 2017 г. 9:51 Обсуждение
    16 октября 2017 г. 12:18

Все ответы

  • Здравствуйте,

    Вот что мне удалось найти по вашему запросу:

    Process tracking with Event Log Explorer

    Обратите внимание на абзац где поясняется разница между TokenElevationTypeDefault и TokenElevationTypeLimited, она на прямую связана с UAC.

    Token Elevation Type indicates the type of token that was assigned to the new process in accordance with User Account Control policy.
    
    Type 1 is a full token with no privileges removed or groups disabled.  A full token is only used if User Account Control is disabled or if the user is the built-in Administrator account or a service account.
    
    Type 2 is an elevated token with no privileges removed or groups disabled.  An elevated token is used when User Account Control is enabled and the user chooses to start the program using Run as administrator.  An elevated token is also used when an application is configured to always require administrative privilege or to always require maximum privilege, and the user is a member of the Administrators group.
    
    Type 3 is a limited token with administrative privileges removed and administrative groups disabled.  The limited token is used when User Account Control is enabled, the application does not require administrative privilege, and the user does not choose to start the program using Run as administrator.


    Если Вам помог чей-либо ответ, пожалуйста, не забывайте жать на кнопку "Предложить как ответ" или "Проголосовать за полезное сообщение" Мнения, высказанные здесь, являются отражение моих личных взглядов, а не позиции корпорации Microsoft. Вся информация предоставляется "как есть" без каких-либо гарантий.

    17 октября 2017 г. 5:22
  • Скомпилировал программку код взял из этой беседы https://social.msdn.microsoft.com/Forums/sqlserver/en-US/6f05839f-c175-4b25-ac54-147871b5199c/checktokenmembership-incomplete-code-in-vbnet-for-implementation?forum=clr

    using Microsoft.Win32;
    using System;
    using System.Diagnostics;
    using System.Runtime.InteropServices;
    using System.Security.Principal;
    using System.Windows.Forms;
    
    namespace TestAdmRight
    {
        class Program
        {
            private const string uacRegistryKey = "Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\System";
            private const string uacRegistryValue = "EnableLUA";
    
            private static uint STANDARD_RIGHTS_READ = 0x00020000;
            private static uint TOKEN_QUERY = 0x0008;
            private static uint TOKEN_READ = (STANDARD_RIGHTS_READ | TOKEN_QUERY);
    
            [DllImport("advapi32.dll", SetLastError = true)]
            [return: MarshalAs(UnmanagedType.Bool)]
            static extern bool OpenProcessToken(IntPtr ProcessHandle, UInt32 DesiredAccess, out IntPtr TokenHandle);
    
            [DllImport("advapi32.dll", SetLastError = true)]
            public static extern bool GetTokenInformation(IntPtr TokenHandle, TOKEN_INFORMATION_CLASS TokenInformationClass, IntPtr TokenInformation, uint TokenInformationLength, out uint ReturnLength);
    
            public enum TOKEN_INFORMATION_CLASS
            {
                TokenUser = 1,
                TokenGroups,
                TokenPrivileges,
                TokenOwner,
                TokenPrimaryGroup,
                TokenDefaultDacl,
                TokenSource,
                TokenType,
                TokenImpersonationLevel,
                TokenStatistics,
                TokenRestrictedSids,
                TokenSessionId,
                TokenGroupsAndPrivileges,
                TokenSessionReference,
                TokenSandBoxInert,
                TokenAuditPolicy,
                TokenOrigin,
                TokenElevationType,
                TokenLinkedToken,
                TokenElevation,
                TokenHasRestrictions,
                TokenAccessInformation,
                TokenVirtualizationAllowed,
                TokenVirtualizationEnabled,
                TokenIntegrityLevel,
                TokenUIAccess,
                TokenMandatoryPolicy,
                TokenLogonSid,
                MaxTokenInfoClass
            }
            public enum TOKEN_ELEVATION_TYPE
            {
                TokenElevationTypeDefault = 1,
                TokenElevationTypeFull,
                TokenElevationTypeLimited
            }
            public static bool IsUacEnabled
            {
                get
                {
                    RegistryKey uacKey = Registry.LocalMachine.OpenSubKey(uacRegistryKey, false);
                    bool result = uacKey.GetValue(uacRegistryValue).Equals(1);
                    return result;
                }
            }
            public static TOKEN_ELEVATION_TYPE IsProcessElevated
            {
                get
                {
    
                    IntPtr tokenHandle;
                    if (!OpenProcessToken(Process.GetCurrentProcess().Handle, TOKEN_READ, out tokenHandle))
                    {
                        throw new ApplicationException("Could not get process token.  Win32 Error Code: " + Marshal.GetLastWin32Error());
                    }
    
                    TOKEN_ELEVATION_TYPE elevationResult = TOKEN_ELEVATION_TYPE.TokenElevationTypeDefault;
    
                    int elevationResultSize = Marshal.SizeOf((int)elevationResult);
                    uint returnedSize = 0;
                    IntPtr elevationTypePtr = Marshal.AllocHGlobal(elevationResultSize);
    
                    bool success = GetTokenInformation(tokenHandle, TOKEN_INFORMATION_CLASS.TokenElevationType, elevationTypePtr, (uint)elevationResultSize, out returnedSize);
                    if (success)
                    {
                        elevationResult = (TOKEN_ELEVATION_TYPE)Marshal.ReadInt32(elevationTypePtr);
                        return elevationResult;
                    }
                    else
                    {
                        throw new ApplicationException("Unable to determine the current elevation.");
                    }
                }
            }
            static void Main(string[] args)
            {
                WindowsIdentity identity = WindowsIdentity.GetCurrent();
                WindowsPrincipal pricipal = new WindowsPrincipal(identity);
                bool hasAdministrativeRight = pricipal.IsInRole(WindowsBuiltInRole.Administrator);
                string msg;
                if (IsUacEnabled) msg = "UAC enable\n";
                else msg = "UAC disable\n";
                if (identity.Owner.IsWellKnown(WellKnownSidType.BuiltinAdministratorsSid)) msg += "User has ADM right\n";
                else msg += "User don't have ADM right\n";
                if (hasAdministrativeRight) msg += "User has adminmistrator right";
                else msg += "User don't have adminmistrator right";
                switch (IsProcessElevated)
                {
                    case TOKEN_ELEVATION_TYPE.TokenElevationTypeDefault:
                        MessageBox.Show(msg + "\nToken: TokenElevationTypeDefault");
                        break;
                    case TOKEN_ELEVATION_TYPE.TokenElevationTypeFull:
                        MessageBox.Show(msg + "\nToken: TokenElevationTypeFull");
                        break;
                    case TOKEN_ELEVATION_TYPE.TokenElevationTypeLimited:
                        MessageBox.Show(msg + "\nToken: TokenElevationTypeLimited");
                        break;
                }
            }
        }
    }
    
    Пробовал запускать  на компьютерах которые возвращают разные токены. Результат аналогичный на одном компе TokenElevationTypeDefault на другом TokenElevationTypeLimited, на обоих компах UAC включен, что показывает программка и окно запроса учетных данных для повышения привилегий. Пользователь доменный отсутствующий в локальных группах Администраторы на компьютерах.
    17 октября 2017 г. 10:40