2014-09-09 15 views
5

Conosco un'applicazione Windows legittima, un software di controllo genitori, che installa come servizio, ma il servizio non è elencato nell'elenco dei servizi, l'elenco che vedi in services.msc.Come registrare un servizio Windows ma evitare che sia elencato nella console dei servizi?

È elencato nel task manager, tuttavia, ma non nell'elenco dei server.

So che si tratta di un server, perché è nella sezione del Registro di sistema con tutti gli altri servizi, tuttavia, la console services.msc non lo elencherà.

Ho ricercato per giorni senza una risposta.

Ho trovato questa domanda simile, ma nelle risposte che consiglia rotte complicate come scrivere un driver di periferica: How to hide windows service from task manager in windows desktop

Tuttavia, questi ragazzi hanno reso un servizio. Come hanno fatto?

Questo sono le chiavi di registro:

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\ThatTrickySoftwareSrv] 
"Type"=dword:00000010 
"Start"=dword:00000002 
"ErrorControl"=dword:00000001 
"ImagePath"=hex(2):22,00 
"DisplayName"="Some display name" 
"ObjectName"="LocalSystem" 
"Description"="Some description" 
"FailureActions"=hex:00,00 

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\ThatTrickySoftwareSrv\Security] 
"Security"=hex:01,00 

Alcuni contenuto binario è stato troncato per migliorare la leggibilità.

Questo è su Windows 7 a 32 bit.

seguito Harry Jonhston consiglio:

**sc sdshow "ThatTrickySoftware"** 
    D:(D;;DCLCWPDTSD;;;IU)(D;;DCLCWPDTSD;;;SU)(D;;DCLCWPDTSD;;;BA)(A;;CCLCSWLOCRRC;; 
;IU)(A;;CCLCSWLOCRRC;;;SU)(A;;CCLCSWRPWPDTLOCRRC;;;SY)(A;;CCDCLCSWRPWPDTLOCRSDRC 
WDWO;;;BA)S:(AU;FA;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;WD) 

Quindi, beh, questo era previsto immagino, anche se non è elencato come un servizio, e funziona come un servizio, perché viene avviato automaticamente da Windows, ma non c'è alcun indizio ovunque Windows potrebbe eseguire questa applicazione.

Inoltre, nota, l'eseguibile è elencato nelle schede Processo nel TaskManager, tuttavia è indistruttibile, non posso ucciderlo, non succede nulla se tento di uccidere il processo.

+0

Ho visto alcune cose veramente intelligenti fatte utilizzando Utilità di pianificazione, tra le cose che sembrano funzionare come un servizio, ma in realtà solo eseguire su determinati eventi. –

+0

@JerryDodge non è nell'utilità di pianificazione, ho cercato anche lì. Per prima cosa ho cercato manualmente da dove questa applicazione potesse essere in esecuzione, perché pensavo fosse un servizio, quindi, ho eseguito lo strumento di autorun e non sono riuscito a trovarlo neanche con il suo aiuto. Poi ho confrontato il registro di Windows prima e dopo l'installazione ed è qui che ho visto il servizio. Lasciami pubblicare le chiavi. –

+0

Sarebbe utile se sapessimo cosa fosse in realtà quel servizio difficile, se sei libero di condividerlo con noi. Ma ha qualcosa da fare probabilmente con i campi 'FailureAction' e' Security' ... Hai provato ad aggiungere una chiave/valore identico al tuo servizio? –

risposta

15

OK, posso riprodurre questo comportamento: dando a un servizio le stesse autorizzazioni del servizio misterioso, posso farlo scomparire dall'elenco in services.msc.

sc sdset myservice D:(D;;DCLCWPDTSD;;;IU)(D;;DCLCWPDTSD;;;SU)(D;;DCLCWPDTSD;;;BA)(A;;CCLCSWLOCRRC;;;IU)(A;;CCLCSWLOCRRC;;;SU)(A;;CCLCSWRPWPDTLOCRRC;;;SY)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)S:(AU;FA;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;WD) 

Quindi tutto dipende dalle autorizzazioni.

OK, espandiamo la stringa del descrittore di sicurezza. Questo è un po 'complicato perché la mappatura tra le autorizzazioni SDDL e le autorizzazioni di Security Manager equivalenti non sembra essere ben documentata in MSDN o nelle intestazioni SDK; per fortuna, Wayne Martin ha già fatto il lavoro pesante per noi e pubblicato i risultati nel blog Service Control Manager Security for non-admins.

D: - this part is the DACL, the permissions on the service. 

Nega le voci vengono sempre al primo posto, il che significa che anche loro hanno la precedenza sulle voci permetteranno:

(D;;DCLCWPDTSD;;;IU) - deny (D) interactive users (IU) the following rights: 
    DC - SERVICE_CHANGE_CONFIG (the right to change the service configuration) 
    LC - SERVICE_QUERY_STATUS (the right to query the service status) 
    WP - SERVICE_STOP (the right to stop the service) 
    DT - SERVICE_PAUSE_CONTINUE (the right to pause and continue the service) 
    SD - DELETE (the right to delete the service) 
(D;;DCLCWPDTSD;;;SU) - deny services (SU) the same set of rights as above 
(D;;DCLCWPDTSD;;;BA) - deny the Administrators group (BA) the same as above 

Il permette voci sono proprio come le autorizzazioni predefinite. (Sono in un ordine diverso, ma l'ordine di consentire le voci non è significativo.)

(A;;CCLCSWLOCRRC;;;IU) - allow the interactive user the following rights: 
    CC - SERVICE_QUERY_CONFIG (the right to query the service configuration) 
    LC - overridden by the deny entry 
    SW - SERVICE_ENUMERATE_DEPENDENTS (the right to see service dependencies) 
    LO - SERVICE_INTERROGATE (the right to send SERVICE_CONTROL_INTERROGATE) 
    CR - SERVICE_USER_DEFINED_CONTROL (the right to send a user defined control) 
    RC - READ_CONTROL (the right to see the permissions) 
(A;;CCLCSWLOCRRC;;;SU) - allow services the following rights: 
    same as for the interactive user 
(A;;CCLCSWRPWPDTLOCRRC;;;SY) - allow local system the following rights: 
    same as for the interactive user, plus:  
    RP - SERVICE_START (the right to start the service) 
    WP - overridden by the deny entry for BA 
    DT - overridden by the deny entry for BA 
(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA) - allow the Administrators group: 
    same as for local system, plus: 
    DC - overridden by the deny entry 
    LC - overridden by the deny entry 
    SW - overridden by the deny entry 
    SD - overridden by the deny entry 
    WD - WRITE_DAC (permission to change the permissions) 
    WO - WRITE_OWNER (permission to take ownership) 

Infine, abbiamo il SACL. Anche questo è invariato rispetto al valore predefinito per un servizio.

S:(AU;FA;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;WD) 
    S: - indicates that this is a SACL 
    AU - indicates that this is an audit entry 
    FA - indicates that failed attempts to access the object should be audited 
    WD - controls whose failed attempts should be audited; the Everyone SID 
    CCDCLCSWRPWPDTLOCRSDRCWDWO - the kinds of access attempts to audit 
    - appears to include every right that applies to services 

Quindi in pratica basta dire "verifica tutti i tentativi falliti di accesso a questo servizio".

Dovrebbe essere possibile semplificare notevolmente tali autorizzazioni, ad es. Rimuovendo tutte le autorizzazioni di permesso che vengono sovrascritte dalle autorizzazioni di negazione. In effetti, sembra probabile che l'unica autorizzazione di accesso di cui avresti davvero bisogno è SERVICE_START e forse SERVICE_QUERY l'autorizzazione per il sistema locale, e forse nemmeno quelli. :-)

D'altra parte, la complessità delle autorizzazioni non ha molta importanza, quindi probabilmente non vale la pena impegnarsi a testare le modifiche.


PS: per ripristinare le autorizzazioni predefinite si può dire:

sc sdset myservice D:(A;;CCLCSWRPWPDTLOCRRC;;;SY)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)(A;;CCLCSWLOCRRC;;;IU)(A;;CCLCSWLOCRRC;;;SU)S:(AU;FA;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;WD) 
+0

Yessssssssss !! quello lo ha fatto .... :) Ho provato anche questo al mio servizio e questo è scomparso dalla lista ..... comunque ... cosa stiamo facendo qui? e cos'è quella brutta stringa? –

+0

Non sarei mai stato in grado di scrivere da solo, questa è una sintassi davvero originale. –

+1

[Security Definition Descriptor Language.] (Http://msdn.microsoft.com/en-us/library/windows/desktop/aa379567%28v=vs.85%29.aspx) Se avrò la possibilità, aggiungerò alla mia risposta domani per riempire esattamente ciò che ogni parte della stringa sta facendo ... –

Problemi correlati