Passer au contenu

Articles Techniques, Déploiement Cloud & Hybrid

DACL des Services Windows - Service Control Manager Security - Permissions WMI

par Mati Sa Peirera 15 Aug 2018 0 commentaire(s)

Un admin possède de nombreuse façon d’agir sur les services Windows

(MMC, NetStop/NetStart, WMI, …)

 

Mais si vous voulez donner à un user/group le droit d’agir sur un seul service ?

Et remotly ?

Sans lui donner les droits admin sur la machine ?

Contrairement aux fichiers relativement simples à gérer niveau sécurité (clic droit/propriétés/sécurité NTFS), la gestion de la sécurité sur les services est assez confusing.

 

 

 La Commande SC.EXE

 

 

 

-        La gestion des DACL sur les services se fait par la commande SC.EXE

 

 

 


 

 

-        Pour afficher les DACL, il faut utiliser l’argument SDSHOW.

SC.EXE SDSHOW <ServiceName>

 

-        Affichons les DACL du service « Service Management » :

SC.EXE SDSHOW SCMANAGER

 

 

 

 

Ou du service DHCP :

 

 

 

 

> Les résultats sont générés en langage SDDL (Security Descriptor Definition Language).

 

 

Comment lire les résultats

 

-        Notons la séparation en deux parties, D: et S:

 

D:(A;;CC;;;AU)(A;;CCLCRPRC;;;IU)(A;;CCLCRPRC;;;SU)(A;;CCLCRPWPRC;;;SY)(A;;KA;;;BA)S:(AU;FA;KA;;;WD)(AU;OIIOFA;GA;;;WD)

-> La partie en orange D: est celle qui nous intéresse, elle s’intéresse aux permissions (DACL), la partie en verte S: s’intéresse à l’audit (SACL)

 

 

-        Prenons donc notre première partie :

 

D:(A;;CC;;;AU)(A;;CCLCRPRC;;;IU)(A;;CCLCRPRC;;;SU)(A;;CCLCRPWPRC;;;SY)(A;;KA;;;BA)

-> Chaque autorisation est définie entre parenthèse, nous avons donc 5 permissions différentes ici.

 

 

-        Prenons en exemple une permission :

 

(A;;CCLCRPRC;;;IU) qui se découpe elle-même en 3 parties : A  ;;  CCLCRPRC ;;;;  IU

 

•        La première partie désigne le type de permission

A = ACCEPT

D = DENY

 

•        La deuxième partie désigne la chaîne des autorisations (par paire)

CC = Queryconf

LC = QueryStat

RP = Start

RC = RCtl

 

•        La dernière partie désigne le type d’utilisateur

IU = Interactive Logon User

 

> Pour lire les résultats, les tableaux suivants permettent d’interpréter chaque autorisation :

 

 

Paire

Droit ou autorisation

CC

QueryConf

DC

ChangeConf

LC

QueryStat

SW

EnumDeps

RP

Start

WP

Stop

DT

Pause

LO

Interrogate

CR

UserDefined

GA

GenericAll

GX

GenericExecute

GW

GenericWrite

GR

GenericRead

SD

Del

RC

RCtl

WD

WDac

WO

WOwn

 

 

 

 

 

 

Code

Type d'utilisateur

DA

Domain Administrators (Administrateurs du domaine)

DG

Domain Guests (Invités du domaine)

DU

Domain Users (Utilisateurs du domaine)

ED

Enterprise Domain Controllers (Controleurs de domaines d'entreprise)

DD

Domain Controllers (Contrôleurs du domaine)

DC

Domain Computers (Ordinateurs du domaine)

BA

Built-in (Local ) Administrators (Administrateurs intégrés (local))

BG

Built-in (Local ) Guests (Invités intégrés (local))

BU

Built-in (Local ) Users (Utilisateurs intégrés (local))

LA

Local Administrator Account (Compte Administrateur local)

LG

Local Guest Account (Compte Invité local)

AO

Account Operators (Opérateurs de compte)

BO

Backup Operators (Opérateurs de sauvegarde)

PO

Printer Operators (Opérateurs d'impression)

SO

Server Operators (Opérateurs de serveur)

AU

Authenticated Users (Utilisateurs authentifiés)

PS

Personal Self (Personnel)

CO

Creator Owner (Créateur propriétaire)

CG

Creator Group (Groupe créateur)

SY

Local System (Système local)

PU

Power Users (Utilisateurs avec pouvoir)

WD

Everyone (World) (Tout le monde (global))

RE

Replicator (Duplicateurs)

IU

Intercative Logon User (Session utilisateur interactive)

NU

Network Logon User (Utilisateur d'ouverture de session réseau)

SU

Service Logon User (Service de connexion utilisateur)

RC

Restricted Code (Code restreint)

WR

Write Restricted Code (Code restreint en écriture)

AN

Anonymous Logon (Ouverture de session anonyme)

SA

Schema Administrators (Administrateurs de schéma)

CA

Certificate Services Administrators (Administrateurs des services de certificats)

RS

Remote Access Servers Group (Groupe serveurs d'accès distant)

EA

Enterprise Administrators (Administrateurs de l'entreprise)

PA

Group Policy Administrators (Administrateurs de stratégies de groupe)

RU

Alias to Allow Previous Windows 2000 (Alias autorisant pré-Windows 2000)

LS

Local Service Account (for Services) (Compte Service local (pour les services))

NS

Network Service Account (for Services) (Compte Service réseau (pour les services))

RD

Remote Desktop Users (for Terminal Services) (Utilisateurs du Bureau à distance (pour les services Terminal Server))

NO

Network Configuration Operators (Opérateurs de configuration réseau)

MU

Performance Monitor Users (Utilisateurs de l'Analyseur de performances)

LU

Performance Log Users (Utilisateurs du journal de performance)

IS

Anonymous Internet Users (Utilisateurs Internet anonymes)

CY

Crypto Operators (Opérateurs de cryptographie)

OW

Owner Rights SID (SID des droits du propriétaire)

RM

RMS Service (Service RMS)

 

Modifier une permission

 

Vous pouvez modifier cette sécurité à partir du code utilisateur du tableau précédent pour les types d’utilisateurs générique, ou utiliser un SID Active Directory appartement à un utilisateur ou groupe.

 

> Attention il faut obligatoirement utiliser le SID sous la forme S-1-1-21-51XXXXXXXX-XXXX-XXX

 

 

-        Il vous faut utiliser la commande SC SDSET pour modifier une permission

 

Prenons toujours l’exemple du service « Service Management » : il est nécessaire d’avoir les droits en Start/Lecture sur ce service pour faire un Get-Service en Powershell à distance.

 

 

 

Donc, par défaut impossible de faire des requêtes à distance sur ce service pour les utilisateurs standards (authentifiés):

 

 

 

 

 

Modifions maintenant les permissions du service « Service Management » pour offrir ce droit à ces  utilisateurs authentifiés :

 

sc sdset scmanager D:(A;;CCLCRPRC;;;AU)(A;;CCLCRPRC;;;IU)(A;;CCLCRPRC;;;SU)(A;;CCLCRPWPRC;;;SY)(A;;KA;;;BA)

 

 

 

 > Les utilisateurs authentifiés peuvent maintenant lister les services sur la machines :

 

 

 

 

Maintenant prenons l’exemple avec un groupe AD :

 

 

 

 

Même procédure, mais avec le SID :

 

 

 

 

Et ensuite, c’est accessible.

 

 

Permissions WMI

 

En complément, certaines requêtes nécessitent de passer par du WMI.

 

Imaginons que l’on veuille aussi offrir l’accès WMI en lecture, à distance pour ces utilisateurs.

 

-        Il vous faut dans la MMC WMI activer l’option Remote Enable / Enable Account

 

 

 

 

> Il n’est malheureusement pas possible de définir ces droits par GPO, mais on peut le contourner via powershell.

 

 

Ou par un VBScript :

 

•        Ajouter votre droit dans la MMC (comme dans la capture ci-dessus)

•        Extraire les infos WMI du namespace pour ensuite faire un différentiel

 

wmic /namespace:\\root\CIMV2 /output:c:\extractwmi.txt path __systemsecurity call getSD

(ou un autre namespace)

 

•        Dans le fichier généré extractwmi.txt, repéré la ligne de chiffre entre {}

 

 

 

 

Créer un nouveau vbscript.vbs avec ce contenu pour déployer cette config :

 

strSD = array(*****Placer ici la ligne de chiffre sans espace*******)

set namespace = createobject("wbemscripting.swbemlocator").connectserver(,"root\CIMV2")

set security = namespace.get("__systemsecurity=@")

nStatus = security.setsd(strSD)  

 

Exemple :

 

strSD = array(1,0,4,129,184,0,0,0,200,0,0,0,0,0,0,0,20,0,0,0,2,0,164,0,6,0,0,0,0,2,36,0,33,0,0,0,1,5,0,0,0,0,0,5,21,0,0,0,23,36,194,102,255,27,59,41,139,45,224,36,20,35,0,0,0,2,36,0,33,0,0,0,1,5,0,0,0,0,0,5,21,0,0,0,23,36,194,102,255,27,59,41,139,45,224,36,238,23,0,0,0,18,20,0,19,0,0,0,1,1,0,0,0,0,0,5,11,0,0,0,0,18,20,0,19,0,0,0,1,1,0,0,0,0,0,5,19,0,0,0,0,18,20,0,19,0,0,0,1,1,0,0,0,0,0,5,20,0,0,0,0,18,24,0,63,0,6,0,1,2,0,0,0,0,0,5,32,0,0,0,32,2,0,0,1,2,0,0,0,0,0,5,32,0,0,0,32,2,0,0,1,2,0,0,0,0,0,5,32,0,0,0,32,2,0,0)

set namespace = createobject("wbemscripting.swbemlocator").connectserver(,"Root\CIMV2")

set security = namespace.get("__systemsecurity=@")

nStatus = security.setsd(strSD)

 

 

 

 

 

 

Article précedent
Article suivant

Laisser un commentaire

Veuillez noter que les commentaires doivent être approuvés avant d'être publiés.

Merci de vous être abonné !

Cet email a été enregistré !

Acheter ce look

Choisissez les options

Modifier l'option
C'est de retour en stock !
this is just a warning
Se connecter
Panier
0 Articles