Windows: utilice la cuenta de servicio local y / o de red para un servicio de Windows

18

He creado un servicio de ventana que monitorea archivos en un directorio específico en nuestro sistema operativo Windows. Cuando se detecta un archivo, el servicio realiza algunas E / S de archivo, lee los archivos, crea subdirectorios, etc. Este servicio también utiliza la conectividad de la base de datos para conectarse a otro servidor. Mi plan es que el servicio se ejecute como la cuenta predeterminada de "Servicio local". Como necesito permitir privilegios de escritura / lectura, lo que aparentemente no hace la cuenta de "Servicio local" de manera predeterminada, voy a establecer explícitamente los privilegios de "Control total" para la cuenta de "Servicio local" en la carpeta que estoy Lectura / escritura desde y hacia.

Creo que lo anterior es bueno. Mi pregunta es, para la carpeta en la que estoy leyendo y escribiendo, ¿necesito configurar una función de "Servicio de red" con acceso de control total? Me pregunto si mi servicio utiliza la conectividad de la base de datos a otro servidor, si necesitaré la configuración de la cuenta "Servicio de red".

Puedo estar malinterpretando lo que hace la cuenta de "Servicio de red".

contactmatt
fuente

Respuestas:

18

La NT AUTHORITY\NetworkServicecuenta solo es necesaria cuando se está comunicando con otras computadoras en un dominio que necesita las credenciales de su máquina para el control de acceso. No es necesario para un acceso simple a Internet / red. Solo es necesario para fines específicos en un dominio de Active Directory.

Además, todo el punto de la NT AUTHORITY\LocalServicecuenta es que tiene privilegios mínimos en el sistema. Darle más privilegios disminuye la seguridad de los muchos servicios en su sistema diseñados para ejecutarse en el bajo nivel de privilegio para el que fue diseñado. Si su servicio requiere privilegios superiores a estos, debe crear una nueva cuenta con los privilegios necesarios y configurar esa cuenta en la pestaña Iniciar sesión de las propiedades del servicio. (Esto también se puede hacer mediante programación).

También puede ejecutarlo utilizando la NT AUTORITY\LocalSystemcuenta , que tiene acceso ilimitado a su sistema, pero supongo que desea utilizar la LocalServicecuenta por la mayor seguridad que proporciona.

Parches
fuente
1
¿Cómo le daría a la cuenta LocalService el control total en una carpeta (y subcarpetas) disminuir la seguridad de los otros servicios?
contactmatt
1
@ user19185 No disminuye su seguridad per se , pero eleva el perfil de ataque. Si un servicio que se ejecuta como LocalServiceestá comprometido, tendría acceso a cualquier cosa para la que se abrió LocalService, mientras que normalmente no tendría acceso a nada. Este ha sido el procedimiento operativo estándar de seguridad informática desde los años 70 .
Parches del
1
Solo quiero señalar que LocalSystemtiene más derechos y privilegios que las cuentas de administrador regulares.
Stein Åsmul
@Stein Åsmul: ¡gracias por la corrección! Actualicé mi respuesta para reflejar esto.
Parches
2

La respuesta anterior no parecía abordar las preguntas directamente, así que pensé en agregarla.

  1. Mi plan es que el servicio se ejecute como la cuenta predeterminada de "Servicio local". Voy a establecer explícitamente los privilegios de "Control total" para la cuenta de "Servicio local" en la carpeta en la que estoy leyendo / escribiendo. Creo que lo anterior es un buen plan.

Personalmente, no veo un gran problema con este plan. Con BUILTINs, la elección es entre:

  1. Se ejecuta como LOCALSYSTEM, por lo que si este servicio se ve comprometido, el atacante es el propietario de todo e inmediatamente.
  2. Se ejecuta como LOCALSERVICE, por lo que si este servicio, o cualquiera de los muchos otros servicios que se ejecutan bajo esta cuenta, se ve comprometido, el atacante tiene acceso a un directorio adicional. *

Podría decirse que es preferible agregar algunas ACL adicionales para poder usar la segunda opción. Sí, la opción más segura para un servicio de bajo privilegio pero altamente sensible a la seguridad sería ejecutarlo bajo una cuenta personalizada de servicio de bajo privilegio. Pero a menos que desee crear una nueva cuenta / administrar contraseñas para cada servicio que implemente, usar LocalService para tareas menores no sensibles no es tan terrible. Solo necesita tomar una decisión responsable basada en estas consideraciones, como lo que está en ese directorio o esa base de datos, el impacto si se violan, etc.

Aunque nuevamente, por principio de privilegio mínimo, solo debe establecer Full Controlsi Modifyrealmente no es suficiente.

2. Mi pregunta es, para la carpeta en la que estoy leyendo y escribiendo, ¿necesito configurar un rol de "Servicio de red" con acceso de control total? Me pregunto si mi servicio utiliza la conectividad de la base de datos a otro servidor, si necesitaré la configuración de la cuenta "Servicio de red".

Si su base de datos requería inicio de sesión de Windows Integrated / SSPI, entonces sí, necesitaría usar NetworkService (o una cuenta de servicio de dominio) en todas partes, es decir, RunAs y permisos de directorio. Suponiendo que también otorgó a su nombre de computadora $ o acceso de cuenta de dominio a esta base de datos. Dudo que lo esté haciendo, así que si usa la autenticación normal de nombre de usuario / pwd, debería poder hacer todo con LocalService. Debe otorgar solo un derecho de cuenta en ese directorio, el que use en sus RunAs, no ambos.

3.Puedo estar malinterpretando lo que hace la cuenta del "Servicio de red".

LocalService / NetworkService son cuentas casi idénticas en la computadora local. La diferencia es principalmente lo que pueden hacer en la red. NS puede acceder a algunos recursos de red porque aparece en la red como una cuenta real (computadora). Pero LS aparecerá como ANÓNIMO, por lo que se le negará principalmente todo en la red.

Por cierto, deberías estar usando una Tarea Programada para esto, no un servicio.

* Desde Vista en adelante, debido al aislamiento del servicio , un proceso LocalService comprometido no puede atacar fácilmente a otro. Cada instancia / proceso de servicio LocalService / NetworkService obtiene su propio SID de sesión de inicio de sesión único (propietario único), a diferencia de Windows 2003. Pero no estoy seguro de que esto sea perfecto y mitigue por completo la vulnerabilidad DACL en archivos y recursos. Los SID restringidos y los tokens con restricción de escritura se mencionan en este contexto.

Amit Naidu
fuente
2

Las otras respuestas confirman lo que dice sobre el uso del Servicio local. Para resumir, el Servicio local es la cuenta recomendada para usar con su servicio, a menos que necesite las características adicionales de Active Directory SSPI del Servicio de red.

Sin embargo, para restringir el acceso de lectura / escritura a una carpeta específica, puede hacerlo mejor que simplemente dar acceso a la cuenta genérica del Servicio local. El problema, como han señalado otros, es que esto también daría acceso de lectura / escritura a todos los demás servicios que se ejecutan como Servicio local y, si todos los servicios lo hicieran, gradualmente el Servicio local recibiría acceso a recursos cada vez más importantes.

La solución es en cambio ACL su carpeta usando su SID de servicio específico. Solo su propio proceso de servicio tiene su SID de servicio asociado, por lo que esto bloquea su recurso aún más. Puede ver el servicio SID usando sc showsid <service name>. El SID del servicio se genera a partir del nombre del servicio, por lo que será el mismo en todas las máquinas.

Para habilitar el uso del servicio SID por su servicio, use ChangeServiceConfig2con la SERVICE_SID_INFOestructura para establecer SERVICE_SID_TYPE_UNRESTRICTED. También puede configurar SERVICE_SID_TYPE_RESTRICTEDpara obtener un SID aún más restringido que solo permita el acceso de escritura a los recursos permitidos explícitamente con su SID de servicio.

Este enlace tiene las descripciones de alto nivel de los SID de servicio y los SID de servicio restringido: https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2008-R2-and- 2008 / hh125927 (v = ws.10)

zhuman - MSFT
fuente