Renforcement et scurit des services Windows VistaLonghorn JeanYves

  • Slides: 64
Download presentation
Renforcement et sécurité des services Windows Vista/Longhorn Jean-Yves Poublan Microsoft France

Renforcement et sécurité des services Windows Vista/Longhorn Jean-Yves Poublan Microsoft France

Renforcement des services – c'est quoi? Isolation des services Exécution en moindre privilège SID

Renforcement des services – c'est quoi? Isolation des services Exécution en moindre privilège SID de service Restrictions des accès aux ressources Restrictions des accès au réseau Objectif Réduire la surface d'attaque Protection du système Protection des services

Sessions, Window Stations, Desktops Session 0 Session 1 Session n Win. Sta 0 Screen-saver

Sessions, Window Stations, Desktops Session 0 Session 1 Session n Win. Sta 0 Screen-saver Winlogon Default

Session Mécanisme permettant le support du multi-utilisateur avec interface locale (console physique) et déportée

Session Mécanisme permettant le support du multi-utilisateur avec interface locale (console physique) et déportée (Terminal Services), ou Fast User Switching Ne pas confondre avec session de logon Comprend processus, stations windows, sessions de logon Get. Token. Information(Token. Session. Id) Process. Get. Current. Process(). Session. Id Instanciation d'espaces de nommage privés (session namespace) pour les objets kernel events, semaphores, mutexes, etc… Espace de nommage global accessible avec le préfixe "Global" Gestionnaire des sessions (Session Manager) – smss. exe Responsable de la création des sessions C’est le premier processus « créé » Il prend ses paramètres de HKEY_LOCAL_MACHINESystemCurrent. Control. Set ControlSession Manager Il lance csrss. exe (sous système Windows) et winlogon. exe Chaque session comporte son sous-système Windows et winlogon. exe

Window Station Comprend presse-papier, Atom table, Desktops Un processus est rattaché à une Window

Window Station Comprend presse-papier, Atom table, Desktops Un processus est rattaché à une Window Station Get. Process. Window. Station Périmètre de sécurisation du système de fenêtrage (sandbox) Objet protégé par DACL HWINSTA Open. Window. Station, Set. Process. Window. Station Win. Sta 0: station Windows interactive Clavier/souris, affichage DACL accorde tous les droits à SYSTEM et logon SID Autres stations Windows Nommées d'après les session de logon - « Service-0 xhigh-low$ e. g. Service-0 x 0 -3 e 5$ pour un service LOCAL SERVICE DACL accorde les droits au principal Enum. Window. Stations, Create. Window. Station Remarques Une session de logon se voit accorder des droits sur une Window Station par la DACL Les services non interactifs ont leur Window Station créée spécifiquement Les services interactifs doivent s'exécuter en tant que SYSTEM (de par la DACL restrictive sur Win. Sta 0)

Desktop Comprend Windows, Menus, Hooks Un thread est rattaché à un Desktop Get. Thread.

Desktop Comprend Windows, Menus, Hooks Un thread est rattaché à un Desktop Get. Thread. Desktop Périmètre de sécurisation du système de fenêtrage (sandbox) Objet protégé par DACL HDESK Open. Desktop, Set. Thread. Desktop Messages Windows sont confinés au même Desktop Pour Win. Sta 0, trois desktops: Default (Interactive) Winlogon Screen-saver Active Desktop = Input Desktop = écran/clavier/souris Open. Input. Desktop Enum. Desktops, Create. Desktop, Switch. Desktop

Service Interactif Les services interactifs utilisent Win. Sta 0 Flag SERVICE_INTERACTIVE_PROCESS de Create. Service

Service Interactif Les services interactifs utilisent Win. Sta 0 Flag SERVICE_INTERACTIVE_PROCESS de Create. Service ou "Allow Service to Interact with Desktop" Seuls les services s'exécutant en tant que SYSTEM peuvent être interactifs De par la DACL positionnée sur Win. Sta 0 Droits pour SYSTEM et logon SID Pourquoi les services interactifs sont à éviter? Parce qu'ils partagent Win. Sta 0 avec les applications utilisateur et qu'ils doivent s' exécuter en tant que LOCAL SYSTEM Sujets aux attaques de type "shatter" Chemin d'élévation de privilège via messages Windows On peut configurer une machine pour interdire les services interactifs No. Interactive. Services = 1 HKLMSYSTEMCurrent. Control. SetControlWindows

Windows XP SP 2 HKLMSYSTEMCurrent. Control. SetControl WindowsNo. Interactive. Services = 0 SERVICE_INTERACTIVE_PROCESS dw.

Windows XP SP 2 HKLMSYSTEMCurrent. Control. SetControl WindowsNo. Interactive. Services = 0 SERVICE_INTERACTIVE_PROCESS dw. Service. Type (Create. Service, Change. Service. Config) Message. Box() HKLMSYSTEMCurrent. Control. SetControlWi ndowsNo. Interactive. Services = 1 0 x 00000000 "Allow service to interact with desktop"= unchecked 0 x 00000100 "Allow service to interact with desktop"= checked Service-0 x 0 -3 e 7$ Win. Sta 0 Service-0 x 0 -3 e 7$ Pas d'affichage – attente boucle(1) Affichage OK (par le processus du service) Pas d'affichage – attente boucle(1) Avertissement du SCM dans l'event log lors du démarrage du service Pas d'affichage – attente boucle(1) Message. Box(MB_SER VICE_NOTIFICATION) Affichage OK (par csrss) Avertissement du SCM dans l'event log lors du démarrage du service Affichage OK (par csrss) (1) Code managé: la runtime détecte la tentative d'affichage d'une boite de dialogue modale dans une station non interactive et lève l'exception Invalid. Operation. Exception

Windows Vista RTM HKLMSYSTEMCurrent. Control. SetControlW indowsNo. Interactive. Services = 0 SERVICE_INTERACTIVE_ PROCESS dw.

Windows Vista RTM HKLMSYSTEMCurrent. Control. SetControlW indowsNo. Interactive. Services = 0 SERVICE_INTERACTIVE_ PROCESS dw. Service. Type (Create. Service, Change. Service. Config) HKLMSYSTEMCurrent. Control. SetControlW indowsNo. Interactive. Services = 1 0 x 00000000 0 x 00000100 "Allow service to interact with desktop"= unchecked Service-0 x 0 -3 e 7$ "Allow service to interact with desktop"= checked "Allow service to interact with desktop"= unchecked "Allow service to interact with desktop"= checked Win. Sta 0 Service-0 x 0 -3 e 7$ Message. Box() Message. Box(MB_SERVICE _NOTIFICATION) Pas d'affichage – attente boucle(1) Pas d'affichage – Message. Box retourne 1 (IDOK)(2) immédiatement Interactive Service dialog detection – Commutation possible vers Session 0 pour interagir avec le service Pas d'affichage – attente boucle(1) Pas d'affichage – Message. Box retourne 1 (IDOK)(2) immédiatement Avertissement du SCM dans l'event log lors du démarrage du service Pas d'affichage – attente boucle(1) Avertissement du SCM dans l'event log lors du démarrage du service Pas d'affichage – Message. Box retourne 1 (IDOK)(2) immédiatement (1) Code managé: exception (2) Meme si la Message. Box ne comporte pas ce bouton

Message. Box(MB_SERVICE_NOTIFICATION) MB_SERVICE_NOTIFICATION En principe, la boite de dialogue est redirigée vers Win. Sta

Message. Box(MB_SERVICE_NOTIFICATION) MB_SERVICE_NOTIFICATION En principe, la boite de dialogue est redirigée vers Win. Sta 0 de la même session TS (Session 0) Si session interactive ouverte Win. Sta 0/default Desktop Si pas de session interactive Win. Sta 0/Winlogon Desktop CSRSS (Win. Sta 0) gère son affichage Si impersonation, la redirection se fait vers Win. Sta 0 de la session TS du client MB_DEFAULT_DESKTOP_ONLY Default Desktop (de Win. Sta 0) uniquement Le desktop de la session interactive de l'utilisateur

Session 0 Windows XP Services et utilisateur de la console dans Session 0 Windows

Session 0 Windows XP Services et utilisateur de la console dans Session 0 Windows Server 2003 Session 0 = console Sessions 1. . n = sessions Terminal Services Windows XP avec Fast User Switching Session 0 = session du premier utilisateur Sessions 1. . n = utilisateurs suivants Problèmes Services interactifs (Win. Sta 0) vulnérables aux attaques "shatter" Collisions de noms objets kernel Session 0 Session 1 Service A Application D Service B Application E Service C Application F

Windows XP Session 0 Session 1 (FUS)

Windows XP Session 0 Session 1 (FUS)

Isolation des services Session 0 Windows Vista Session 0 réservée pour les services Win

Isolation des services Session 0 Windows Vista Session 0 réservée pour les services Win 32 exclusivement Premier utilisateur console dans Session 1 Gains Isolation des services Les services "interactifs" n'ont plus accès à la console Protection contres attaques "shatter" provenant des applications utilisateur Elimination des collisions de noms Session 0 Session 1 Session 2 Service A Application D Service B Application E Service C Application F

Isolation des services Session 0 Sont concernés… Services interactifs Drivers en mode utilisateur s'exécutant

Isolation des services Session 0 Sont concernés… Services interactifs Drivers en mode utilisateur s'exécutant dans un service Drivers User-Mode Driver Framework (UMDF) Drivers d'imprimantes (service de spool) "Printer Out of Paper" Services qui interagissent avec des applications utilisateur via Send. Message ou Post. Message Services qui se synchronisent avec des applications via des objets nommés L'espace de nommage est instancié par session Semaphores, mutexes, events… Il faut utiliser le préfixe Global

Isolation des services Session 0 Les services ne devraient jamais ouvrir une fenêtre sur

Isolation des services Session 0 Les services ne devraient jamais ouvrir une fenêtre sur le desktop interactif Pour une interaction ponctuelle Utiliser WTSSend. Message Pour une interaction plus poussée Créer un processus dans la session cible avec Create. Process. As. User Utiliser un mécanisme d'IPC (sécurisé) pour communiquer avec des applications utilisateur Référence Impact of Session 0 Isolation on Services and Drivers in Windows Vista sur WHDC http: //www. microsoft. com/whdc/system/vista/ Comment mettre en œuvre une IHM à partir d'un service – Keith Brown http: //pluralsight. com/wiki/default. aspx/Keith. Guide. Book/How. To. Display. AUser. Interface From. ADaemon. html Note: si un service est conçu et se comporte correctement sous Windows XP avec Fast User Switching, ou Terminal Services, il y a de fortes chances qu'il continue à fonctionner correctement sous Windows Vista

Compatibilité Interactive Services Detection service Un service Windows Vista qui détecte les tentatives d'interaction

Compatibilité Interactive Services Detection service Un service Windows Vista qui détecte les tentatives d'interaction IHM des services interactifs legacy UI 0 Detect. exe Start on demand Une DLL de hook mise en œuvre par wininit. exe est utilisée pour démarrer le service lors de la création d'une fenêtre dans Win. Sta 0 S'exécute en tant LOCAL SYSTEM Attire l'attention de l'utilisateur sur le fait qu'un service essaye d'interagir, et permet à l'utilisateur de basculer ponctuellement vers la session 0 Mesure temporaire de compatibilité L'objectif est plus d'attirer l'attention des fournisseurs de services sur la nécessité d'une mise à niveau

Démo UI 0 Detect

Démo UI 0 Detect

Restriction des services Windows Vista et Longhorn Server disposent de mécanismes pour « durcir

Restriction des services Windows Vista et Longhorn Server disposent de mécanismes pour « durcir » et sécuriser les services Win 32 1. Privilèges moindres 2. SID de service 3. Jeton restreint en écriture (write-restricted token) 4. Restrictions d’accès réseau Ces mécanismes peuvent être mis en œuvre conjointement Ces mécanismes facilitent l’utilisation des comptes builtin Local. Service et Network. Service pour l’exécution des services En permettant une granularité plus fine (service par service, ou pour une classe de service – les services retreints en écriture) des contrôles d’accès En l’absence de ces mécanismes de contrôle, tous les services s’exécutant en tant que Local. Service ou Network. Service (ou n’importe quelle identité) comporteraient les mêmes droits d’accès et privilèges

Restriction des services Clés de registre pour configuration du service Required. Privileges (REG_MULTI_SZ) Permet

Restriction des services Clés de registre pour configuration du service Required. Privileges (REG_MULTI_SZ) Permet de spécifier les privilèges dont le service à besoin Privilèges moindres Service. Sid. Type (REG_DWORD) SERVICE_SID_TYPE_NONE (0 x 0) Pas de SID de service – Fonctionnement legacy SERVICE_SID_TYPE_UNRESTRICTED (0 x 1) SID de service – Jeton normal SERVICE_SID_TYPE_RESTRICTED (0 x 3) SID de service – Jeton restreint en écriture

Privilèges moindres On spécifie les privilèges requis par le service au niveau de la

Privilèges moindres On spécifie les privilèges requis par le service au niveau de la configuration du service Change. Service. Config 2 (SERVICE_CONFIG_REQUIRED_PRIVILEGES_INFO) Se. Backup. Privilege Se. Restore. Privilege sc. exe sc <server> privs [service name] [Privileges] sc <server> qprivs [service name] buffersize Le SCM crée le processus hôte avec l’union des privilèges configurés pour les services hébergés Cependant cet ensemble de privilèges ne peut excéder ceux du compte du service (E. g. Network. Service) Si la configuration d'un service spécifie plus de privilèges que le compte du service, ces privilèges ne sont pas obtenus (ignorés)

SID de service Un « per-service SID » peut être créé et associé à

SID de service Un « per-service SID » peut être créé et associé à un service S-1 -5 -80 -{SHA-1 du nom du service} Local à la machine Pour ce faire, on configure le type de SID de service (Service. Sid. Type) à "Unrestricted" Change. Service. Config 2(SERVICE_CONFIG_SERVICE_SID_INFO) SERVICE_SID_TYPE_UNRESTRICTED 0 x 00000001 sc. exe sc sidtype [service name] [type] sc qsidtype [service name] sc showsid [service name] NAME: mysvc SERVICE SID: S-1 -5 -80 -1367702158 -1701208665 -2838300432 -1083307162 -2949717864 Le SCM crée et rajoute le SID de service dans la liste des groupes du jeton du processus hôte (lors de l’instanciation de ce dernier) Cependant le jeton reste un jeton "normal" (éventuellement avec des privilèges en moins) et le service peut accéder aux ressources du compte de service et de ses groupes. On peut utiliser les SID de service dans les ACL pour contrôler l’accès aux ressources

Restriction des services Jeton de sécurité User SID Group SID Flags Restricting SID Privileges

Restriction des services Jeton de sécurité User SID Group SID Flags Restricting SID Privileges Flags: WRITE_RESTRICTED, … Defaults for new objects (Owner SID, Group SID, DACL) Logon session LUID Token ID Impersonation level Session ID, etc… SE_GROUP_ENABLED_BY_DEFAULT SE_GROUP_MANDATORY SE_GROUP_OWNER SE_GROUP_LOGON_ID SE_GROUP_RESOURCE SE_GROUP_USE_FOR_DENY_ONLY SE_GROUP_INTEGRITY_ENABLED

Jeton restreint en écriture En plus du SID de service, on peut restreindre le

Jeton restreint en écriture En plus du SID de service, on peut restreindre le service en écriture Pour ce faire, on configure le type de SID de service (Service. Sid. Type) à "Restricted" Change. Service. Config 2(SERVICE_CONFIG_SERVICE_SID_INFO) SERVICE_SID_TYPE_RESTRICTED 0 x 00000003 Le SCM crée un jeton dit "restreint en écriture" (write-restricted token) Le jeton est marqué WRITE_RESTRICTED (flag) Les SID de restriction sont SID de service SID write-restricted (S-1 -5 -33) SID de logon Everyone Le SID de service et le SID write-restricted sont aussi rajoutés aux SID de groupes L’accès en écriture aux ressources se fait par vertu des SID de restriction Et non du compte de service utilisé et de ses groupes Les accès en lecture ne sont pas affectés (correspond à "Unrestricted")

Restriction des services Remarques Les restrictions s’appliquent au niveau du processus hôte Regrouper dans

Restriction des services Remarques Les restrictions s’appliquent au niveau du processus hôte Regrouper dans un processus hôte les services ayant les mêmes types de restrictions Union des privilèges Pas de cohabitation des services unrestricted et restricted Si on ne souhaite pas de SID de service On peut configurer le service avec Service. Sid. Type à SERVICE_SID_TYPE_NONE Change. Service. Config 2(SERVICE_CONFIG_SERVICE_SID_IN FO) SERVICE_SID_TYPE_NONE 0 x 0000 Permet de forcer un fonctionnement à la 2000/XP dans le cas ou le système utiliserait unrestricted par défaut Lookup. Account. Sid/Lookup. Account. Name

Privilèges sensibles The following privileges are Elevation sensitive privileges - i. e. any service

Privilèges sensibles The following privileges are Elevation sensitive privileges - i. e. any service which has these privileges can take over the system. Se. Tcb. Privilege - allows the holder to create logon sessions and inject arbitrary SIDs into the token Se. Take. Ownership. Privilege - allows the holder to gain access to objects they are not granted access to by DACL Se. Load. Driver. Privilege - allows the holder to run arbitrary code in the kernel Se. Backup. Privilege - allows the holder to recover the SAM database and crack it offline Se. Restore. Privilege - allows the holder to change arbitrary files or ACLs on the filesystem Se. Debug. Privilege - allows the holder to run arbitrary code in the process of his choosing Se. Impersonate. Privilege - allows the holder to assume the identity of clients he lures to call him

Privilèges justifiant LOCAL SYSTEM Se. Tcb. Privilege Se. Create. Token. Privilege Se. Take. Ownership.

Privilèges justifiant LOCAL SYSTEM Se. Tcb. Privilege Se. Create. Token. Privilege Se. Take. Ownership. Privilege Se. Debug. Privilege Se. Restore. Privilege Se. Load. Driver. Privilege Se. Create. Permanent. Privilege Se. System. Environment. Privilege Se. Manage. Volume. Privilege

Restrictions réseau Les règles Windows Service Hardening (WSH) permettent de restreindre l'accès réseau pour

Restrictions réseau Les règles Windows Service Hardening (WSH) permettent de restreindre l'accès réseau pour les services Inbound et Outbound Protocole/port/application/service/type de règle (allow/block) Indépendantes des règles Windows Firewall Advanced Security du pare-feu intégré Sont évaluées avant les règles WFAS du pare-feu Cependant les règles du pare-feu s'appliquent Ne permettent que de restreindre l'accès En aucun cas de l'élargir Sensées être configurées par l'installation du service API INet. Fw. Service. Restriction Script VBS ou Powershell Ne peuvent être configurées par les outils du pare-feu (mmc, netsh)

Restrictions réseau Les règles Service Hardening se trouvent dans HKLMSYSTEMCurrent. Control. SetServicesShared. Acce ssParametersFirewall.

Restrictions réseau Les règles Service Hardening se trouvent dans HKLMSYSTEMCurrent. Control. SetServicesShared. Acce ssParametersFirewall. PolicyRestricted. ServicesC onfigurableSystems Configurables via API/script seulement Pour rappel, les règles du pare-feu intégré (WFAS) se trouvent dans HKLMSYSTEMCurrent. Control. SetServicesShared. Acce ssParametersFirewall. PolicyFirewall. Rules Administrables via mmc WFAS, netsh, group policy et API/script

Restrictions réseau Script pour interdire tout accès réseau ' Create the Fw. Policy 2

Restrictions réseau Script pour interdire tout accès réseau ' Create the Fw. Policy 2 object. Dim fw. Policy 2 Set fw. Policy 2 = Create. Object( "HNet. Cfg. Fw. Policy 2") ' Get the Service Restriction object for the local firewall policy. Dim Service. Restriction Set Service. Restriction = fw. Policy 2. Service. Restriction ' Restrict a service Service. Restriction. Restrict. Service. Name, Program. Name, TRUE, FALSE Ce script crée deux règles SH v 2. 0|Action=Block|Active=TRUE|Dir=Out|App=c: mysvc. exe|Svc=mysvc|Name=Outbound service restriction rule for mysvc|Desc=Block all outbound traffic from service mysvc|Edge=FALSE| v 2. 0|Action=Block|Active=TRUE|Dir=In|App=c: mysvc. exe|Svc=mysvc|Name=Inbound service restriction rule for mysvc|Desc=Block all inbound traffic to service mysvc|Edge=FALSE|

Restrictions réseau Permettre une connexion sortante pour le service Dim Current. Rule set Current.

Restrictions réseau Permettre une connexion sortante pour le service Dim Current. Rule set Current. Rule = Create. Object( "HNet. Cfg. Fw. Rule") Current. Rule. Name = "My. Svc network restriction" Current. Rule. Application. Name = Program. Name Current. Rule. Service. Name = Service. Name Current. Rule. Protocol = 6 Current. Rule. Remote. Ports = 8080 Current. Rule. Direction = NET_FW_RULE_DIR_OUT Current. Rule. Enabled = TRUE Service. Restriction. Rules. Add Current. Rule Utilisé avec le script précédent, on obtient une restriction du service qui ne peut communiquer qu'en sortie sur TCP port 8080 v 2. 0|Action=Allow|Active=TRUE|Dir=Out|Protocol=6|RPort=8080|App=c: mysvc. exe|S vc=mysvc|Name=Allow mysvc (c: mysvc. exe) outbound on port 8080|Edge=FALSE| v 2. 0|Action=Block|Active=TRUE|Dir=Out|App=c: mysvc. exe|Svc=mysvc|Name=Outbound service restriction rule for mysvc|Desc=Block all outbound traffic from service mysvc|Edge=FALSE| v 2. 0|Action=Block|Active=TRUE|Dir=In|App=c: mysvc. exe|Svc=mysvc|Name=Inbound service restriction rule for mysvc|Desc=Block all inbound traffic to service mysvc|Edge=FALSE|

Restrictions réseau Meilleure pratique pour les développeurs Mettre en place les règles WSH (Service

Restrictions réseau Meilleure pratique pour les développeurs Mettre en place les règles WSH (Service Hardening) lors de l'installation/configuration du service Ces règles ont pour but de restreindre le service Initiative du développeur Documenter les protocoles/ports nécessaires au service pour l'administrateur ou exploitant Le pare-feu (intégré, ou tierce-partie) doit être configuré indépendamment pour permettre au service de communiquer

Renforcement des services Services natifs Windows Vista Plusieurs services précédemment SYSTEM maintenant s'exécutent en

Renforcement des services Services natifs Windows Vista Plusieurs services précédemment SYSTEM maintenant s'exécutent en LOCAL SERVICE ou NETWORK SERVICE Privilèges minimum spécifiés pour chaque service Utilisation d'un SID de service Les services de même profil (privilèges, type de SID, accès réseau, etc…) ont été regroupés SVCHOST –k <service group>

Restriction des services Services natifs Windows Vista Les services natifs de Windows Vista comportent

Restriction des services Services natifs Windows Vista Les services natifs de Windows Vista comportent leurs propres règles Service Hardening HKEY_LOCAL_MACHINESYSTEMCurrent. Control. SetServi cesShared. AccessParametersFirewall. PolicyRestri cted. ServicesStaticSystem Elles ne sont pas configurables ni par API ni avec les outils du pare-feu Exemple – pas d'accès réseau pour BFE V 2. 0|Action=Block|Dir=in|App=%System. Root%System 32s vchost. exe|Svc=BFE|Name=Block inbound traffic to BFE| V 2. 0|Action=Block|Dir=out|App=%System. Root%System 32 svchost. exe|Svc=BFE|Name=Block outbound traffic from BFE|

Restriction des services Services natifs Windows Vista Exemple - Service Client DHCP Windows XP

Restriction des services Services natifs Windows Vista Exemple - Service Client DHCP Windows XP Windows Vista SYSTEM LOCAL SERVICE 24 4 Oui (compte machine) Non Ports réseau restreints Non Oui Protection ressources par SID de service Non Oui Compte Privilèges Identité réseau?

Restriction des services Services natifs Windows Vista Profiles SVCHOST –k <servicegroup> Local. Service Exécution

Restriction des services Services natifs Windows Vista Profiles SVCHOST –k <servicegroup> Local. Service Exécution avec LOCAL SERVICE, SID de service Event. System, Lanman. Workstation, SCard. Svr, Win 32 Time… Local. Service. No. Network Exécution avec LOCAL SERVICE, SID de service, jeton restreint en écriture ( write-restricted), pas d'accès réseau BFE, Dps, Mps. Svc Local. Service. Network. Restricted Exécution avec LOCAL SERVICE, SID de service, restrictions réseau Audio. Srv, Eventlog, Lm. Host… Network. Service Exécution avec NETWORK SERVICE, SID de service Crypt. Svc, Dns. Cache, Nls. Svc, Term. Service… Network. Service. Network. Restricted Exécution avec NETWORK SERVICE, SID de service, restrictions réseau Policy. Agent (ipsec) Local. System. Network. Restricted Exécution avec LOCAL SYSTEM, SID de service, restrictions réseau Audio. End. Point. Builder, Netman, Wlan. Svc, wudfsvs… Dcomlaunch, rpcss, netsvcs, bthsvcs, regsvc, imgsvc, wersvc

Restriction des services Services natifs Windows Vista Exemple – Eventlog svchost. exe -k Local.

Restriction des services Services natifs Windows Vista Exemple – Eventlog svchost. exe -k Local. Service. Network. Restricted Required. Privileges = Se. Impersonate. Privilege Cependant 4 privilèges dans le groupe Service. Sid. Type = 1 (unrestricted) NT SERVICEEventlog ACL sur c: windowssystem 32winevt NT SERVICEEventlog: (OI)(CI)(RX, W, DC) Règles Service Hardening Eventlog-1 V 2. 0|Action=Allow|Dir=In|LPort=RPC|Protocol=6|App=%System. Root%s ystem 32svchost. exe|Svc=Event. Log|Name=Allow RPC/TCP traffic to Event. Log| Eventlog-2 V 2. 0|Action=Block|Dir=In|App=%System. Root%system 32svchost. exe|S vc=Event. Log|Name=Block any traffic to Event. Log| Eventlog-3 V 2. 0|Action=Block|Dir=Out|App=%System. Root%system 32svchost. exe|Svc=E vent. Log|Name=Block any traffic from Event. Log|

Restriction des services Synthèse Privilèges moindres Bien On accorde le minimum de privilèges nécessaires

Restriction des services Synthèse Privilèges moindres Bien On accorde le minimum de privilèges nécessaires au fonctionnement du service Sécurité minimum, faibles couts de mise en œuvre Service “Unrestricted” avec SID de service On peut contrôler l’accès aux ressources par le SID du service, mais le service accède à l'ensemble des ressources accessibles à son compte et à ses groupes. En ce sens le service n'est pas restreint. Mieu x Protection des ressources du service, couts de mise en œuvre modérés Il faut configurer les ACL sur les ressources du service Le type de SID "Unrestricted" permet de protéger les ressources du service Service “Restricted” avec SID de service Le contrôle d’accès en écriture aux ressources se fait sur la base du SID de service et/ou du SID write-restricted (classe des services restreints) Très bien Niveau de sécurité le plus élevé, meilleure protection du système Cependant les couts de mise en œuvre peuvent être élevés – nécessite une maitrise précise des ressources dont le service à besoin d'accéder en écriture Le type de SID "Restricted" permet de protéger le système en cas de compromission du service Restrictions réseau – règles SH Inbound/Outbound, par service Faibles couts de mise en œuvre Dans tous les cas

Démarrage différé (Vista) Change. Service. Config 2 SERVICE_CONFIG_DELAYED_AUTO_START_INFO Clé de registre Delayed. Autostart=1 Option

Démarrage différé (Vista) Change. Service. Config 2 SERVICE_CONFIG_DELAYED_AUTO_START_INFO Clé de registre Delayed. Autostart=1 Option de configuration pour les services auto-start Le SCM ne démarre ces services qu'en dernier Le thread s'exécute initialement en priorité THREAD_PRIORITY_LOWEST et priorité I/O Very Low Une fois le service démarré, la priorité est augmentée à THREAD_PRIORITY_NORMAL Améliore la rapidité de démarrage, telle que ressentie par l'utilisateur Recommandé pour les services qui n'ont pas besoin d'être opérationnels immédiatement lors du démarrage Attention aux dépendances Autres services, clients, etc… Pas de garantie sur le délai de démarrage Services natifs ainsi configurés BITS, Windows Update, etc…

Autres améliorations Vista Notification de changement d'état API Notify. Service. Status. Change Permet à

Autres améliorations Vista Notification de changement d'état API Notify. Service. Status. Change Permet à une application d'être notifiée des changements de l'état d'un service Création, démarrage, arrêt, destruction, etc…

Autres améliorations Vista Protocole de shutdown Service peut demander une notification de pre-shutdown Set.

Autres améliorations Vista Protocole de shutdown Service peut demander une notification de pre-shutdown Set. Service. Status SERVICE_ACCEPT_PRESHUTDOWN SCM notifie le service avec SERVICE_CONTROL_PRESHUTDOWN SCM attend que le service entre dans l'état SERVICE_STOPPED Par défaut 3 mn Service peut demander un délai supplémentaire Set. Service. Status SERVICE_STOP_PENDING Après l'arrêt des services pre-shutdown le système continue avec l'arrêt des autres services comme sous Windows XP Ordonnancement de l'arrêt des services Ne concerne que les service pre-shutdown HKLMSystemCurrent. Control. SetControlPre. Shutdown. Order Exemple: Wuauserv (Windows Update Service) précède Gpsvc (Group Policy Client Service) Sémantique: "Group policy s'applique après que Windows Update ait terminé"

Autres améliorations Vista Reprise sur échec autre qu'un "crash" A l'initiative du service Configuration

Autres améliorations Vista Reprise sur échec autre qu'un "crash" A l'initiative du service Configuration du service pour ce mode Change. Service. Config 2 SERVICE_CONFIG_FAILURE_ACTIONS_FLAG Failure. Actions. On. Non. Crash. Failures = true sc sc <server> failureflag [service name] [flag] sc <server> -qfailureflag [service name] Service signale un arrêt en échec au SCM Set. Service. Exit. Code

Choix d'un compte de service Comptes builtin Local Service – SID S-1 -5 -19

Choix d'un compte de service Comptes builtin Local Service – SID S-1 -5 -19 11 privilèges, dont Se. Impersonate. Privilege Pas de credentiels réseau (pas d'identité) Network Service – SID S-1 -5 -20 10 privilèges, idem Local Service sauf Se. System. Time. Privilege Credentiels réseau (compte machine du domaine) System – SID S-1 -5 -18 26 privilèges, dont Se. Tcb. Privilege Credentiels réseau (compte machine du domaine) E. g. corpdomcontsta 02 A éviter - factorisation Compte dédié du domaine Credentiels réseau Utile pour l'approche "trusted subsystem" en tiers Compte dédié local Pas de credentiels réseau Moins utile avec Vista de par le SID de service

Factorisation et restriction d'un service

Factorisation et restriction d'un service

Factorisation d'un service Passerelle effectue une transition de protocole et impersonation Problème: le service

Factorisation d'un service Passerelle effectue une transition de protocole et impersonation Problème: le service de la passerelle nécessite le privilège TCB et fait face au réseau Solution retenue Seul l'obtention d'une session de logon nécessite TCB Factoriser cette fonction dans un composant COM+ hébergé dans un service séparé s'exécutant en TCB Abaisser les privilèges du service de la passerelle Network Service, Se. Impersonate. Privilege

Transition de protocole Domaine Windows 2003 Les extensions S 4 U (Service For User)

Transition de protocole Domaine Windows 2003 Les extensions S 4 U (Service For User) permettent la transition de protocole avec délégation contrainte (dans l'espace) S 4 U 2 Self Permet d'obtenir une session de logon et ticket Kerberos sans les credentiels du compte Lsa. Logon. User(KERB_S 4 U_LOGON), Windows. Identity(string user. Principal. Name) Nécessite TCB (Se. Tcb. Privilege) S 4 U 2 Proxy Utilisé pour obtenir un ticket de service suite à S 4 U 2 Self Nécessite Se. Impersonate. Privilege Conditions Le code du service s'exécute avec le privilège Se. Tcb. Privilege Le compte de domaine du service est "trusted for delegation" Le compte de l'utilisateur n'est pas "sensitive and cannot be delegated" Le service/ressource "backend" figure sur la liste des contraintes A 2 D 2 ("allowed to delegate to") pour le compte de domaine du service Si le compte du service n'est pas "trusted for delegation" Accès aux ressources locales possible Si appelant n'est pas TCB, jeton niveau Identity seulement Permet de découvrir les groupes d'un utilisateurs Access. Check, Check. Token. Membership, Authz API

SPN Un client Kerberos ne sait pas avec quel compte (identité) le service s'exécute

SPN Un client Kerberos ne sait pas avec quel compte (identité) le service s'exécute Pour obtenir un ticket de service, le client désigne le service par son SPN (Service Principal Name) Service/Host On mappe le SPN sur le compte du domaine utilisé par le service (dans Active Directory) Compte de service dédié, ou compte machine (pour Local System ou Network System) Setspn –A My. Svc/consta 02. corpdom. contoso. com CORPDOMcontsta 02 API Ds. Write. Account. Spn Cet enregistrement doit se faire pour chaque instance du service dans le domaine Lorsque le client demande un ticket de service en designant le SPN, ce ticket sera chiffré pour le compte du service (mot de passe du compte du service)

Délégation Kerberos Domaine Windows 2000 Non contrainte Compte domaine du service "trusted for delegation"

Délégation Kerberos Domaine Windows 2000 Non contrainte Compte domaine du service "trusted for delegation" Nécessite le TGT du client Le client garde le contrôle Peu utilisable de par l'absence de contrainte dans l'espace Cependant contrainte dans le temps (durée du vie du ticket proxy)

Délégation Kerberos Domaine Windows 2003 S 4 U 2 Proxy (Service For User To

Délégation Kerberos Domaine Windows 2003 S 4 U 2 Proxy (Service For User To Proxy) – Extension S 4 U (Service for User) Contrainte dans l'espace A 2 D 2 – Allow To Delegate To (Attribut objet AD) Liste des SPNs pour lesquels le service peut obtenir des tickets Service n'utilise pas le TGT du client Il utilise le ticket de service du client, ou le ticket obtenu par S 4 U 2 Self Le client ne peut plus contrôler la délégation Même allowed. Impersonation. Level n'est qu'un "souhait"

Kerberos – Transition de protocole via S 4 U Compte du service TCB Non

Kerberos – Transition de protocole via S 4 U Compte du service TCB Non TCB Trusted for delegation Non trusted for delegation Jeton niveau Impersonation Ticket Kerberos forwardable Jeton niveau Impersonation Ticket Kerberos non forwardable Permet d'impersoner et d'accéder aux ressources locales Accès distant possible - Session de logon comporte credentiels réseau (ticket Kerberos forwardable) et permet d'accéder aux ressources distantes via S 4 U 2 Proxy (sous contrainte A 2 D 2) Pas d'accès distant - Session de logon ne comporte pas de credentiels réseau et ne permet pas d'accéder aux ressources distantes. Le ticket Kerberos n'étant pas forwardable il ne peut être utilisé pour S 4 U 2 Proxy. Jeton niveau Identity Ticket Kerberos forwardable Jeton niveau Identity Ticket Kerberos non forwardable Pas d'accès aux ressources locales – découverte des groupes de l'utilisateur possible Pas d'accès distant *En théorie seulement, l'accès distant serait possible de par l'existence du ticket Kerberos forwadable obtenu par S 4 U 2 Self (credentiels réseau)

Kerberos – Transition de protocole via S 4 U 2 Self, puis S 4

Kerberos – Transition de protocole via S 4 U 2 Self, puis S 4 U 2 Proxy Compte de service TCB "Trusted for delegation" TCB - - "Trusted for delegation" - - Jeton Ticket Kerberos S 4 U 2 Self Fonctionnel Impersonation Forwardable Délégation* Accès distant Impersonation Non forwardable Impersonation Accès local Identity Forwardable Identity Découverte des groupes (autorisation) Identity Non forwardable Identity Découverte des groupes (autorisation) *Via S 4 U 2 Proxy – sujet aux contraintes A 2 D 2 et le fait que le compte de l'utilisateur ne soit pas "sensitive and cannot be delegated"

Factorisation d'un service Avant factorisation Protocole authentification non Kerberos KDC Service Ticket S 4

Factorisation d'un service Avant factorisation Protocole authentification non Kerberos KDC Service Ticket S 4 U 2 Proxy Gateway S 4 U 2 Self Identité du service "Trusted for TGT Delegation " Forwardable Backend Kerberos My. Svc Local SYSTEM (TCB)

Factorisation d'un service Gateway KDC Service Ticket Logon. Service SYSTEM (TCB) S 4 U

Factorisation d'un service Gateway KDC Service Ticket Logon. Service SYSTEM (TCB) S 4 U 2 Proxy Identité du service "Trusted TGTfor Forwardable Delegation" S 4 U 2 Self Après factorisation COM+ Protocole authentification non Kerberos Backend Kerberos My. Svc NETWORK SERVICE

Démo Factorisation puis réduction des privilèges d'un service

Démo Factorisation puis réduction des privilèges d'un service

Meilleures pratiques Pas de service interactif Choisir un compte de service approprié Local Service,

Meilleures pratiques Pas de service interactif Choisir un compte de service approprié Local Service, Network Service, compte dédié Si compte dédié, utiliser un mot de passe long Eviter Local System Configurer les privilèges minimum requis Utiliser un SID de service pour protéger les ressources du service Si possible, restreindre le service en écriture, pour protéger le système Mettre en œuvre les règles WSH (Service Hardening) pour restreindre les accès réseau indépendamment de la configuration du pare-feu Tirer parti des améliorations Vista/Longhorn pour le démarrage différé, la reprise sur erreur, la séquence d'arrêt

Meilleures pratiques Factoriser les parties de code nécessitant privilèges élevés dans un service processus

Meilleures pratiques Factoriser les parties de code nécessitant privilèges élevés dans un service processus séparé Utiliser des protocoles et mécanismes de communication standard et sécurisés RPC/COM+, WCF Attention à l'impersonation qui peut résulter en une élévation de privilège Si impersonation n'est pas nécessaire, enlever le privilège Se. Impersonate. Privilege Pour effectuer un contrôle d'accès client, une impersonation de niveau identity est suffisante Attention aux ACLs faibles Pas de Full Control pour les comptes moins privilégiés ou SID de service Attention aux accès en écriture sur les ressources Qui peuvent donner lieu à une exécution de code (binaire) Eg: Pas d' accès en écriture pour des comptes moins privilégiés ou SID de service sur HKLMsystemCCSservices<service name>parameters C: windowssystem 32

Références Technet Magazine 01/07– Security Watch http: //www. microsoft. com/technetmag/issue s/2007/01/Security. Watch/default. aspx Windows

Références Technet Magazine 01/07– Security Watch http: //www. microsoft. com/technetmag/issue s/2007/01/Security. Watch/default. aspx Windows Hardware Developer Central http: //www. microsoft. com/whdc/default. mspx Keith Brown http: //pluralsight. com/wiki/default. aspx/Keith/Home %20 Page. html http: //msdn. microsoft. com/msdnmag/issues/03/04/S ecurity. Briefs/ http: //msdn. microsoft. com/msdnmag/issues/07/01/S ecurity. Briefs/

Votre potentiel, notre passion TM © 2007 Microsoft France

Votre potentiel, notre passion TM © 2007 Microsoft France

Slides supplémentaires

Slides supplémentaires

Outils: Factorisation d'un service Windows Vista: netsh http add urlacl url=http: //+: 8000/ user=MYMACHINEUser.

Outils: Factorisation d'un service Windows Vista: netsh http add urlacl url=http: //+: 8000/ user=MYMACHINEUser. Name ou encore netsh http>add urlacl url=http: //+: 8000/ user="NT AUTHORITYLOCAL SERVICE" Windows Server 2003 httpcfg. exe httpcfg set urlacl /u http: //+: 8000 /a D: (A; ; GX; ; ; LS)(A; ; GX; ; ; NS) LS = Local Service, NS = Network Service Regsvcs SDK. Net Framework 2. 0 Permet d'installer logonservice. dll dans le catalogue COM+ en tant qu'application COM+ Ensuite l'application apparait dans Component Services sur station Windows Vista Run… MMC. EXE Add/Remove Snapin… Component Services Pour visualiser les traces d'un service. Net Framework Svc. Trace. Viewer. exe – outil du SDK Windows Vista Pour générer le code client à partir des metadata du service IE http: //localhost: 8000/mysvc/service Svcutil. exe http: //contsta 02. corpdom. contoso. com: 8000/My. Svc/service Le composant Logon. Service refuse de retourner un jeton qui a des privilèges admin. Ne peut donc être utilisé que pour une délégation d'utilisateurs non admin. Cette mesure de sécurité permet de prévenir l'utilisation du composant pour une élévation de privilège.

Contrôle d'accès L'évaluation des droits d'accès s'effectue au moment de l'ouverture de la ressource

Contrôle d'accès L'évaluation des droits d'accès s'effectue au moment de l'ouverture de la ressource selon les permissions demandées Create. File(dw. Desired. Access) MAXIMUM_ALLOWED A utiliser pour connaitre les droits avec Access. Check A éviter pour des accès aux ressources ; il vaut mieux "ouvrir" la ressource pour un type d'accès (read/write) spécifié explicitement Security Descriptor Owner SID DACL SACL ACE Allow/Deny Masque de permission Standard: communes à tous les types l'objets Génériques: seront mappées selon le type d’objet Spécifiques: spécifiques à chaque type d’objet Les permissions standard et génériques permettent une sorte de polymorphisme du contrôle d’accès DACL = liste d'ACE L'ordre est important L'évaluation se déroule dans l'ordre de la liste et s'arrête dès que les permissions demandées ont été obtenues, ou qu'une permission a été déniée. Méthode: on utilise le déni en exception et on place les ACE négatives en premier, plutôt que l'inverse

SIDs et LUIDs Win. NT. h SID wellknown et aliases S-1 -1 -0 "WD"

SIDs et LUIDs Win. NT. h SID wellknown et aliases S-1 -1 -0 "WD" Everyone (SECURITY_WORLD_SID_AUTHORITY) S-1 -2 -0 Local (SECURITY_LOCAL_SID_AUTHORITY) #define SYSTEM_LUID { 0 x 3 e 7, 0 x 0 } #define ANONYMOUS_LOGON_LUID { 0 x 3 e 6, 0 x 0 } #define LOCALSERVICE_LUID { 0 x 3 e 5, 0 x 0 } #define NETWORKSERVICE_LUID { 0 x 3 e 4, 0 x 0 } NT AUTHORITY S-1 -5 -1 Dialup (SECURITY_NT_AUTHORITY) S-1 -5 -2 "NU" Network #define LOGON 32_LOGON_INTERACTIVE 2 S-1 -5 -3 Batch #define LOGON 32_LOGON_NETWORK 3 S-1 -5 -4 "IU" Interactive #define LOGON 32_LOGON_BATCH 4 S-1 -5 -5 -X-Y Logon Session* #define LOGON 32_LOGON_SERVICE 5 S-1 -5 -6 "SU" Service #define LOGON 32_LOGON_UNLOCK 7 S-1 -5 -7 "AN" Anonymous logon #if(_WIN 32_WINNT >= 0 x 0500) #define LOGON 32_LOGON_NETWORK_CLEARTEXT 8 S-1 -5 -11 "AU" Authenticated users #define LOGON 32_LOGON_NEW_CREDENTIALS 9 S-1 -5 -12 "RC" Restricted code (from Create. Restricted. Token? ) #endif // (_WIN 32_WINNT >= 0 x 0500) S-1 -5 -13 Terminal Server users S-1 -5 -15 This Organization S-1 -5 -18 "SY" Local System (domainmachine$) S-1 -5 -19 "LS" Local Service S-1 -5 -20 "NS" Network Service (domainmachine$) S-1 -5 -33 Write Restricted Integrity Levels S-1 -5 -32 -544 "BA" Builtin Administrators Low S-1 -16 -4096 "LW" (0 x 1000) – Protected Mode IE S-1 -5 -32 -545 "BU" Builtin Users Medium S-1 -16 -8192 "ME" (0 x 2000) – Applications utilisateur S-1 -5 -32 -546 "BG" Builtin Guests High S-1 -16 -12288 "HI" (0 x 3000) – Processus élevé par UAC System Convert. Sid. To. String. Sid , Convert. String. Sid. To. Sid, Create. Well. Known. Sid S-1 -16 -16384 "SI" (0 x 4000) - Local System/Local

Restricted token Jeton restreint – Un jeton qui comporte une ou plusieurs des caractéristiques

Restricted token Jeton restreint – Un jeton qui comporte une ou plusieurs des caractéristiques suivantes 1. Un des Group SIDs comporte le flag SE_GROUP_USE_FOR_DENY_ONLY 2. La liste des Restricted SIDs n’est pas vide 3. Un ou plusieurs privilèges ont été retirés du jeton Create. Restricted. Token permet d’appliquer ces restrictions Utilisations Principalement pour exécuter du code en mode restreint inprocess (impersonation) ou outprocess (Start. Process. As. User) API SAFER - Safer. Compute. Token. From. Level (utilisée par Drop. My. Rights) Désactive Administrator – use for deny only NT AUTHORITYRESTRICTED (S-1 -5 -12) dans les Restricted SIDs, mais pas le SID de l'utilisateur NT AUTHORITYRESTRICTED (S-1 -5 -12) dans les Restricted SIDs, mais pas le SID de l'utilisateur Le code ne peut accéder aux ressources de l'utilisateur (profil) Peut accéder en lecture seule a HKLM/HKCU de par l'ACE pour RESTRICTED Commande Runas puis "Current User/Protect my computer" (Windows XP) Idem Sous Windows Vista, les mécanismes d'UAC (pour les applications utilisateurs), et des services restreints font que le développeur n'a pas besoin d'utiliser Create. Restricted. Token, ou l'API SAFER pour réduire le niveau de privilège du code

Référence – restricted token Running restricted -- What does the "protect my computer" option

Référence – restricted token Running restricted -- What does the "protect my computer" option mean? http: //blogs. msdn. com/aaron_margosis/archive/ 2004/09/10/227727. aspx

Notification Packages Evolution Windows Vista/Longhorn Winlogon Notification Package Windows 2000 et Windows XP Logon,

Notification Packages Evolution Windows Vista/Longhorn Winlogon Notification Package Windows 2000 et Windows XP Logon, Logoff, Lock, Unlock, Shutdown, Startup, Start. Screen. Saver, Stop. Screen. Saver, Start. Shell N’existe plus dans Vista/Longhorn Winlogon n’est pas extensible Winlogon ne comporte pas d’interface homme machine Les packages « natifs » ont été migrés vers des services Win 32 Notifications pour les services disponibles à partir de Windows XP Register. Service. Ctrl. Handler. Ex SERVICE_CONTROL_SESSIONCHANGE WM_WTSSESSION_CHANGE w. Param Lock, Unlock, Logon, Logoff, etc… SERVICE_CONTROL_SHUTDOWN, SERVICE_CONTROL_POWEREVENT Set. Service. Status SERVICE_STATUS dw. Controls. Accepted Voir documentation MSDN et/ou Platform SDK 64