Windows: utilizzare l'account Servizio locale e / o Servizio di rete per un servizio Windows


18

Ho creato un servizio di finestre che monitora i file in una directory specifica sul nostro sistema operativo Windows. Quando viene rilevato un file, il servizio esegue alcuni I / O di file, legge i file, crea sottodirectory, ecc. Questo servizio utilizza anche la connettività del database per connettersi a un altro server. Il mio piano è di eseguire il servizio come account "Servizio locale" predefinito. Dal momento che devo consentire i privilegi di scrittura / lettura, che apparentemente l'account "Servizio locale" non ha per impostazione predefinita, ho intenzione di impostare esplicitamente i privilegi "Controllo completo" per l'account "Servizio locale" sulla cartella che sto leggere / scrivere da e verso.

Credo che quanto sopra sia un bene. La mia domanda è, per la cartella in cui sto leggendo e scrivendo, devo impostare un ruolo di "Servizio di rete" con accesso di controllo completo? Mi chiedo poiché il mio servizio utilizza la connettività del database a un altro server, se avrò bisogno della configurazione dell'account "Servizio di rete".

Potrei fraintendere cosa fa l'account "Servizio di rete".

Risposte:


18

L' NT AUTHORITY\NetworkServiceaccount è necessario solo quando si comunica con altri computer in un dominio che richiedono le credenziali della propria macchina per il controllo dell'accesso. Non è richiesto per un semplice accesso a Internet / rete. È necessario solo per scopi specifici in un dominio di Active Directory.

Inoltre, l'intero punto NT AUTHORITY\LocalServicedell'account è che ha i privilegi minimi sul sistema. Dare più privilegi diminuisce la sicurezza di molti servizi sul tuo sistema progettati per funzionare al livello di privilegio basso che è stato progettato per offrire. Se il servizio richiede privilegi superiori e superiori a quelli, è necessario creare un nuovo account per esso con i privilegi necessari e impostare tale account nella scheda Accesso delle proprietà del servizio. (Questo può anche essere fatto in modo programmatico.)

Potresti anche eseguirlo usando l' NT AUTORITY\LocalSystemaccount , che ha accesso illimitato al tuo sistema, ma suppongo che tu volessi usare l' LocalServiceaccount per la maggiore sicurezza che fornisce.


1
In che modo dare all'account LocalService il pieno controllo su una cartella (e sottocartelle) ridurrebbe la sicurezza degli altri servizi?
contactmatt

1
@ user19185 Non riduce di per sé la loro sicurezza , ma aumenta il profilo di attacco. Se un servizio in esecuzione LocalServiceè compromesso, avrebbe accesso a tutto ciò che hai aperto LocalService, mentre normalmente non avrebbe accesso a nulla. Questa è stata la procedura operativa standard di sicurezza informatica dagli anni '70 .
Patch

1
Voglio solo sottolineare che LocalSystemha più diritti e privilegi rispetto ai normali account di amministratore.
Stein Åsmul,

@Stein Åsmul: grazie per la correzione! Ho aggiornato la mia risposta per riflettere questo.
Patch del

2

La risposta precedente non sembrava rispondere direttamente alle domande, quindi ho pensato di aggiungere ad essa.

  1. Il mio piano è di eseguire il servizio come account "Servizio locale" predefinito. Ho intenzione di impostare esplicitamente i privilegi di "Controllo completo" per l'account "Servizio locale" sulla cartella che sto leggendo / scrivendo da e verso. Credo che quanto sopra sia un buon piano.

Personalmente, non vedo un grosso problema con questo piano. Con BUILTIN, la scelta è tra:

  1. Funzionando come LOCALSYSTEM - quindi se questo servizio è compromesso, l'attaccante possiede tutto e immediatamente.
  2. In esecuzione come LOCALSERVICE - quindi se questo servizio, o uno qualsiasi dei tanti altri servizi in esecuzione con questo account, sono compromessi, l'autore dell'attacco ha accesso a una directory aggiuntiva. *

Probabilmente, è preferibile aggiungere alcuni ACL aggiuntivi per poter utilizzare la seconda opzione. Sì, l'opzione più sicura per un servizio con privilegi bassi ma altamente sensibili alla sicurezza sarebbe quella di funzionare con un account di servizio personalizzato con privilegi limitati. Ma a meno che non si desideri creare un nuovo account / gestire le password per ogni servizio implementato, l'utilizzo di LocalService per attività secondarie non sensibili non è una cosa così terribile. Hai solo bisogno di prendere una decisione responsabile sulla base di queste considerazioni, come ciò che si trova in quella directory o quel database, impatto se vengono violati ecc.

Anche in questo caso, per principio del privilegio minimo, dovresti impostare solo Full Controlse non Modifyè davvero sufficiente.

2.La mia domanda è, per la cartella in cui sto leggendo e scrivendo, devo impostare un ruolo di "Servizio di rete" con accesso di controllo completo? Mi chiedo poiché il mio servizio utilizza la connettività del database a un altro server, se avrò bisogno della configurazione dell'account "Servizio di rete".

Se il tuo database richiede l'accesso a Windows Integrated / SSPI, quindi sì, dovrai utilizzare NetworkService (o un account del servizio di dominio) ovunque, ad esempio RunAs e autorizzazioni di directory. Supponendo che tu abbia anche concesso al tuo nomecomputer $ o all'account di dominio l'accesso a questo database. Dubito che lo stia facendo, quindi se utilizza la normale autenticazione username / pwd, dovresti essere in grado di fare tutto con LocalService. Devi concedere solo un diritto di account su quella directory, a prescindere da quello che usi nei RunAs, non entrambi.

3. Potrei fraintendere il comportamento dell'account "Servizio di rete".

LocalService / NetworkService sono account quasi identici sul computer locale. La differenza è principalmente ciò che possono fare sulla rete. NS può accedere ad alcune risorse di rete perché appare sulla rete come un account reale (computer). Ma LS apparirà come ANONIMO, quindi verrà negato per lo più tutto sulla rete.

A proposito, dovresti utilizzare un'attività pianificata per questo, non un servizio.

* Da Vista in poi, a causa dell'isolamento del servizio , un processo LocalService compromesso non può facilmente attaccarne un altro. Ogni processo / istanza del servizio LocalService / NetworkService ottiene la propria sessione di accesso unica SID (proprietario unico), a differenza di Windows 2003. Ma non sono sicuro che sia perfetto e mitiga completamente la vulnerabilità DACL su file e risorse. In questo contesto sono menzionati SID limitati e token con restrizioni di scrittura .


2

Le altre risposte confermano ciò che dici sull'utilizzo del servizio locale. Per riassumere, il servizio locale è l'account consigliato da utilizzare con il servizio, a meno che non siano necessarie le funzionalità SSPI di Active Directory aggiuntive del servizio di rete.

Per limitare l'accesso in lettura / scrittura a una cartella specifica, puoi fare di meglio che dare semplicemente l'accesso all'account del servizio locale generico. Il problema, come altri hanno sottolineato, è che ciò darebbe anche accesso in lettura / scrittura a tutti gli altri servizi in esecuzione come Servizio locale e se tutti i servizi lo facessero, gradualmente il Servizio locale riceverà l'accesso a risorse sempre più importanti.

La soluzione è invece ACL la cartella utilizzando il SID del servizio specifico. Solo al tuo processo di servizio è associato il SID di servizio, quindi questo blocca ulteriormente la tua risorsa. È possibile visualizzare il servizio SID utilizzando sc showsid <service name>. Il SID del servizio viene generato dal nome del servizio, quindi sarà lo stesso su tutte le macchine.

Per abilitare l'utilizzo del SID del servizio da parte del servizio, utilizzare ChangeServiceConfig2con la SERVICE_SID_INFOstruttura da impostare SERVICE_SID_TYPE_UNRESTRICTED. È inoltre possibile impostare SERVICE_SID_TYPE_RESTRICTEDun SID ancora più limitato che consenta solo l'accesso in scrittura a risorse esplicitamente consentite con il SID del servizio.

Questo collegamento contiene le descrizioni di alto livello dei SID dei servizi e dei SID dei servizi limitati: https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2008-R2-and- 2008 / hh125927 (v = ws.10)

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.