Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

218
Vistas
¿Qué significa el valor de nivel de integridad obligatorio de 0x2010?

Estoy ejecutando el siguiente fragmento de código en mi proceso de modo de usuario que se inicia cuando una cuenta de usuario de Windows inicia sesión en la estación de trabajo. O, en otras palabras, su ruta se ubica en la clave de registro HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run .

Se supone que el código determina el nivel de integridad obligatorio de mi proceso de usuario. Va como tal:

 DWORD getMIL() { //Try to get integrity level //-1 Unknown //SECURITY_MANDATORY_UNTRUSTED_RID 0x00000000 Untrusted. //SECURITY_MANDATORY_LOW_RID 0x00001000 Low integrity. //SECURITY_MANDATORY_MEDIUM_RID 0x00002000 Medium integrity. //SECURITY_MANDATORY_MEDIUM_PLUS_RID SECURITY_MANDATORY_MEDIUM_RID + 0x100 Medium high integrity. //SECURITY_MANDATORY_HIGH_RID 0X00003000 High integrity. //SECURITY_MANDATORY_SYSTEM_RID 0x00004000 System integrity. //SECURITY_MANDATORY_PROTECTED_PROCESS_RID 0x00005000 Protected process. DWORD dwIntgtyLvl = -1; HANDLE hToken; if(OpenProcessToken(::GetCurrentProcess(), TOKEN_QUERY, &hToken)) { DWORD dwSizeIntgtyLvl = 0; if(!GetTokenInformation(hToken, TokenIntegrityLevel, NULL, dwSizeIntgtyLvl, &dwSizeIntgtyLvl) && ::GetLastError() == ERROR_INSUFFICIENT_BUFFER) { BYTE* pbIntgtyLvl = new BYTE[dwSizeIntgtyLvl]; if(pbIntgtyLvl) { TOKEN_MANDATORY_LABEL* pTML = (TOKEN_MANDATORY_LABEL*)pbIntgtyLvl; DWORD dwSizeIntgtyLvl2; if(GetTokenInformation(hToken, TokenIntegrityLevel, pTML, dwSizeIntgtyLvl, &dwSizeIntgtyLvl2) && dwSizeIntgtyLvl2 <= dwSizeIntgtyLvl) { dwIntgtyLvl = *GetSidSubAuthority(pTML->Label.Sid, (DWORD)(UCHAR)(*GetSidSubAuthorityCount(pTML->Label.Sid)-1)); } //Free mem delete[] pbIntgtyLvl; pbIntgtyLvl = NULL; } } ::CloseHandle(hToken); } return dwIntgtyLvl; }

En un flujo normal de eventos, esperaría obtener el valor de 0x2000 para SECURITY_MANDATORY_MEDIUM_RID , o 0x3000 para SECURITY_MANDATORY_HIGH_RID , pero si tengo una cuenta de usuario de Windows ya iniciada, y luego cambio de usuario e inicio sesión con otra cuenta de usuario , el método anterior me dará el valor de 0x2010 para el nivel de integridad obligatorio.

¿Alguien sabe qué significa ese valor?

over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

Se describe justo en la parte inferior de la página de MSDN en Diseño del mecanismo de integridad de Windows :

Los RID están separados por intervalos de 0x1000 para permitir la definición de niveles adicionales en el futuro. La separación también permite asignar un nivel de integridad a un proceso que es ligeramente superior al medio: por ejemplo, para cumplir con objetivos específicos de diseño del sistema.

...

A las aplicaciones que se inician con derechos UIAccess para un usuario estándar se les asigna un valor de nivel de integridad ligeramente superior en el token de acceso. El nivel de integridad del token de acceso para la aplicación UIAccess para un usuario estándar es el valor del nivel de integridad medio, más un incremento de 0x10. El nivel de integridad más alto para las aplicaciones de UIAccess evita que otros procesos en el mismo escritorio en el nivel de integridad medio abran el objeto de proceso de UIAccess

over 4 years ago · Santiago Trujillo Denunciar

0

No está teniendo en cuenta que los niveles de integridad usan rangos de valores, donde a un token/proceso se le puede asignar un valor dentro de un rango de valores para su nivel de integridad. Solo busca valores específicos.

La integridad no confiable puede tener cualquier valor entre SECURITY_MANDATORY_UNTRUSTED_RID (incluido) y SECURITY_MANDATORY_LOW_RID (no incluido).

La integridad baja puede ser cualquier valor entre SECURITY_MANDATORY_LOW_RID (incluido) y SECURITY_MANDATORY_MEDIUM_RID (no incluido).

La integridad media puede ser cualquier valor entre SECURITY_MANDATORY_MEDIUM_RID (incluido) y SECURITY_MANDATORY_HIGH_RID (no incluido). Que es lo que estás viendo en tu ejemplo.

La integridad alta puede ser cualquier valor entre SECURITY_MANDATORY_HIGH_RID (incluido) y SECURITY_MANDATORY_SYSTEM_RID (no incluido).

Cualquier valor igual o superior a SECURITY_MANDATORY_SYSTEM_RID está reservado para el sistema.

Hay una tabla en la documentación que muestra esto:

Diseño del mecanismo de integridad de Windows

Tabla 2 Niveles de integridad definidos y valores correspondientes

Valor Descripción Símbolo 

0x0000 Nivel no confiable SECURITY_MANDATORY_UNTRUSTED_RID
0x1000 Nivel de integridad bajo SECURITY_MANDATORY_LOW_RID
0x2000 Nivel de integridad medio SECURITY_MANDATORY_MEDIUM_RID
0x3000 Nivel de integridad alto SECURITY_MANDATORY_HIGH_RID
0x4000 Nivel de integridad del sistema SECURITY_MANDATORY_SYSTEM_RID
over 4 years ago · Santiago Trujillo Denunciar

0

Aquí hay una lista con nombre: SID conocidos

 | SID | Name | DEC | HEX | BIN | |-------------- |----------------------------------- |------- |------ |----------------: | | S-1-16-0 | Untrusted Mandatory Level | 0 | 0000 | 0 | | S-1-16-4096 | Low Mandatory Level | 512 | 0200 | 1000000000 | | S-1-16-8192 | Medium Mandatory Level | 8192 | 2000 | 10000000000000 | | S-1-16-8448 | Medium Plus Mandatory Level | 8448 | 2100 | 10000100000000 | | S-1-16-12288 | High Mandatory Level | 12288 | 3000 | 11000000000000 | | S-1-16-16384 | System Mandatory Level | 16384 | 4000 | 100000000000000 | | S-1-16-20480 | Protected Process Mandatory Level | 20480 | 5000 | 101000000000000 | | S-1-16-28672 | Secure Process Mandatory Level | 28672 | 7000 | 111000000000000 |

Pero, como se dijo en otras respuestas, los valores entre dos elementos enumerados son válidos y si debe nombrarlos, debe optar por el nombre de valor más bajo (por ejemplo, 511 debe llamarse untrusted plus no Low Mandatory ).

Los procesos solo pueden interactuar con objetos del sistema con el mismo o menor nivel de integridad.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda