Gestion des services windows 2000 / windows XP - Optimisation XP

Desactivation des services inutiles sous 2000/XP

Optimisation de XP

La documentation provient de : http://www.hsc.fr/ressources/breves/min_srv_res_win.html

par Jean-Baptiste Marchand (03/06/2002) Minimisation des services réseaux sur les systèmes Windows Exemples avec Windows 2000 et Windows XP

English readers: this document is also available in english, see http://www.hsc.fr/ressources/breves/min_srv_res_win.en.html

Introduction

La sécurisation d'un système, quel qu'il soit, passe toujours par la réduction du nombre des services réseaux en écoute.

Sur les systèmes Windows, un certain nombre de services fonctionnent par défaut et il est souvent souhaitable d'en désactiver la majorité, voire la totalité, si le système n'a pas pour vocation d'offrir des services via le réseau.

Le but de cette brève est de fournir les recettes permettant de réaliser cette tâche, en laissant volontairement de côté les détails techniques qui permettent de comprendre pourquoi il faut procéder ainsi. Un document, 'Services réseaux des systèmes Windows - Etude de cas avec Windows 2000 et Windows XP', disponible à l'adresse http://www.hsc.fr/ressources/articles/srv_res_win/ , explique en détails quels sont les différents types de services et comment les identifier. Un autre document en anglais, _Windows network services internals_, plus récent et beaucoup plus complet, est également disponible à l'adresse http://www.hsc.fr/ressources/articles/win_net_srv/ .

La présentation _Windows network services for Samba folks_, disponible à http://www.hsc.fr/ressources/presentations/sambaxp2003/ , décrit le fonctionnement interne des services réseaux constituant le coeur des systèmes Windows.

Les systèmes utilisés dans les exemples sont Windows 2000 (version serveur) et Windows XP, tels qu'installés par défaut (la seule modification effectuée est la désactivation de DHCP et l'affectation de l'adresse IP 192.70.106.143 à la seule interface réseau du système). L'idéal reste bien sûr de choisir à l'installation uniquement les services utiles, ce qui évite un certain nombre (mais pas toutes) des manipulations décrites ici.

Identifier les services

Une façon rapide d'identifier les services réseaux en fonctionnement est de lister les ports TCP et UDP ouverts. La commande netstat permet notamment cela.

Sur un système Windows 2000, le résultat de la commande netstat -an est le suivant :

C:\WINNT>netstat -an

Active Connections

 Proto  Local Address          Foreign Address        State
 TCP    0.0.0.0:25             0.0.0.0:0              LISTENING
 TCP    0.0.0.0:80             0.0.0.0:0              LISTENING
 TCP    0.0.0.0:135            0.0.0.0:0              LISTENING
 TCP    0.0.0.0:443            0.0.0.0:0              LISTENING
 TCP    0.0.0.0:445            0.0.0.0:0              LISTENING
 TCP    0.0.0.0:1025           0.0.0.0:0              LISTENING
 TCP    0.0.0.0:1026           0.0.0.0:0              LISTENING
 TCP    0.0.0.0:1027           0.0.0.0:0              LISTENING
 TCP    0.0.0.0:3372           0.0.0.0:0              LISTENING
 TCP    0.0.0.0:4983           0.0.0.0:0              LISTENING
 TCP    192.70.106.143:139     0.0.0.0:0              LISTENING
 UDP    0.0.0.0:135            *:*
 UDP    0.0.0.0:445            *:*
 UDP    0.0.0.0:1028           *:*
 UDP    0.0.0.0:1029           *:*
 UDP    0.0.0.0:3456           *:*
 UDP    192.70.106.143:137     *:*
 UDP    192.70.106.143:138     *:*
 UDP    192.70.106.143:500     *:*

Sur un système Windows XP, la commande netstat -ano donne le résultat suivant :

C:\WINDOWS>netstat -ano

Active Connections

 Proto  Local Address          Foreign Address        State           PID
 TCP    0.0.0.0:135            0.0.0.0:0              LISTENING       884
 TCP    0.0.0.0:445            0.0.0.0:0              LISTENING       4
 TCP    0.0.0.0:1025           0.0.0.0:0              LISTENING       976
 TCP    0.0.0.0:5000           0.0.0.0:0              LISTENING       1160
 TCP    192.70.106.143:139     0.0.0.0:0              LISTENING       4
 UDP    0.0.0.0:135            *:*                                    884
 UDP    0.0.0.0:445            *:*                                    4
 UDP    0.0.0.0:500            *:*                                    704
 UDP    0.0.0.0:1026           *:*                                    1112
 UDP    0.0.0.0:1027           *:*                                    976
 UDP    127.0.0.1:123          *:*                                    976
 UDP    127.0.0.1:1900         *:*                                    1160
 UDP    192.70.106.143:123     *:*                                    976
 UDP    192.70.106.143:137     *:*                                    4
 UDP    192.70.106.143:138     *:*                                    4
 UDP    192.70.106.143:1900    *:*                                    1160

Mise en garde

La commande netstat ne liste pas exactement l'état des sockets TCP ou UDP mais reporte en fait l'état des objets de l'interface TDI (Transport Driver Interface) du pilote TCP/IP.

Plus précisément, netstat rapporte l'état, dans certains cas, des objets TDI du pilote TCP/IP de type adresse de transport (transport address) et terminaison de connexion (connection endpoint), alors que seuls les terminaisons de connexion correspondent à des sockets (TCP ou UDP).

Ce problème se manifeste notamment lorsqu'un système Windows établit une connexion TCP sortante (ouverture active). Dans ce cas, un port TCP local est utilisé comme port source de la connexion TCP établie.

Le problème est que la commande netstat affiche ce port source comme étant en écoute sur toutes les interfaces, ce qui peut laisser croire qu'un service TCP est en écoute sur ce port, ce qui n'est pas le cas.

Dans l'exemple suivant, la machine locale a établi une connexion TCP du port source 1367 vers le port 22 d'une machine distante.

Le résultat de la commande netstat, filtré pour ne contenir que les lignes contenant le numéro de port 1367 est le suivant :

C:\WINDOWS>netstat -anp tcp | find ":1367"

 TCP    0.0.0.0:1367           0.0.0.0:0              LISTENING
 TCP    192.70.106.142:1367    192.70.106.76:22       ESTABLISHED

La deuxième ligne montre bien qu'une connexion est établie, du port local 1367 vers le port 22 d'un système distant. En revanche, la première ligne laisse à penser que le port 1367 est en écoute alors qu'il n'en est rien.

Ainsi, pour toute connexion sortante établie, une ligne supplémentaire et n'ayant pas lieu d'être apparaît dans la sortie de netstat. Il est donc important de bien faire la différence entre un port réellement ouvert et un port rapporté par erreur par netstat comme étant en écoute.

Ce problème a été corrigé dans Windows Server 2003.

Maintenant que nous avons identifié la liste des ports réellement ouverts, nous allons voir comment fermer progressivement tous ces ports.

Désactiver les services inutiles

La première chose à faire pour réduire le nombre de ports ouverts est de désactiver des services. Dans la suite, nous nous contentons d'arrêter certains services (via la commande net stop). Cependant, pour empêcher un service de se relancer au prochain redémarrage, il faut soit le désactiver, soit passer son mode de démarrage en manuel. Ceci dépend des services, certains services en mode de démarrage manuel étant lancés par le système, ce qui oblige à les désactiver pour être sûr qu'ils ne seront pas lancés.

Sous Windows 2000, ceci peut se faire via le gestionnaire de services.

C:\WINDOWS>services.msc

Le type de démarrage (Automatique, Manuel ou Désactivé) peut être modifié dans l'onglet Général des Propriétés de chaque service.

Sous Windows XP, la commande sc (également disponible dans le Resource Kit de Windows 2000) permet de désactiver un service en ligne de commande, avec une commande du type :

C:\WINDOWS>sc config nom_du_service start= disabled

pour désactiver (l'espace entre start= et disabled est obligatoire) et une commande du type :

C:\WINDOWS>sc config nom_du_service start= manual

pour passer le service en mode de démarrage manuel.

Windows 2000 IIS 5

Sous Windows 2000, IIS 5 fonctionne par défaut, sous la forme des services SMTP, HTTP et d'un service d'administration. Il suffit d'arrêter puis de désactiver ces services pour fermer les port TCP 25, 80, 443 et le port UDP 3456, le port TCP réservé au site d'administration IIS (4983 dans notre exemple) et deux ports, un TCP et un UDP, supérieurs à 1023, pour des services RPC.

La façon la plus rapide d'arrêter les services IIS est d'arrêter le service iisadmin, dont dépendent les autres :

C:\WINNT>net stop iisadmin The following services are dependent on the IIS Admin Service service. Stopping the IIS Admin Service service will also stop these services.

  World Wide Web Publishing Service
  Simple Mail Transport Protocol (SMTP)

Do you want to continue this operation? (Y/N) N: y The World Wide Web Publishing Service service is stopping. The World Wide Web Publishing Service service was stopped successfully.

The Simple Mail Transport Protocol (SMTP) service is stopping. The Simple Mail Transport Protocol (SMTP) service was stopped successfully.

... The IIS Admin Service service was stopped successfully.

La commande netstat -an confirme que le nombre de ports ouverts a été réduit :

C:\WINNT>netstat -an

Active Connections

 Proto  Local Address          Foreign Address        State
 TCP    0.0.0.0:135            0.0.0.0:0              LISTENING
 TCP    0.0.0.0:445            0.0.0.0:0              LISTENING
 TCP    0.0.0.0:1025           0.0.0.0:0              LISTENING
 TCP    0.0.0.0:1026           0.0.0.0:0              LISTENING
 TCP    0.0.0.0:3372           0.0.0.0:0              LISTENING
 TCP    192.70.106.143:139     0.0.0.0:0              LISTENING
 UDP    0.0.0.0:135            *:*
 UDP    0.0.0.0:445            *:*
 UDP    0.0.0.0:1029           *:*
 UDP    192.70.106.143:137     *:*
 UDP    192.70.106.143:138     *:*
 UDP    192.70.106.143:500     *:*

L'arrêt des services étant valable uniquement pour la session courante ; si le système est redémarré, les services se relanceront. La méthode la plus simple pour l'éviter est alors de désinstaller IIS, qui est un composant du système, désinstallable via la rubrique Ajout/Suppression de programmes du panneau de configuration.

IPsec

Le port 500, utilisé par le protocole IKE (Internet Key Exchange) peut être fermé en arrêtant le service IPsec services.

C:\WINNT>net stop policyagent The IPSEC Services service is stopping. The IPSEC Services service was stopped successfully.

Le port UDP 500 est alors fermé :

C:\WINNT>netstat -an

Active Connections

 Proto  Local Address          Foreign Address        State
 TCP    0.0.0.0:135            0.0.0.0:0              LISTENING
 TCP    0.0.0.0:445            0.0.0.0:0              LISTENING
 TCP    0.0.0.0:1025           0.0.0.0:0              LISTENING
 TCP    0.0.0.0:1026           0.0.0.0:0              LISTENING
 TCP    0.0.0.0:3372           0.0.0.0:0              LISTENING
 TCP    192.70.106.143:139     0.0.0.0:0              LISTENING
 UDP    0.0.0.0:135            *:*
 UDP    0.0.0.0:445            *:*
 UDP    0.0.0.0:1029           *:*
 UDP    192.70.106.143:137     *:*
 UDP    192.70.106.143:138     *:*

Distributed Transaction Coordinator

Le service Distributed Transaction Coordinator fonctionne par défaut sur un système Windows 2000 version serveur et ouvre le port 3372, ainsi qu'un port TCP immédiatement supérieur à 1023 (1025 dans notre exemple).

L'arrêt de ce service permet donc de fermer deux ports TCP :

C:\WINNT>net stop msdtc The Distributed Transaction Coordinator service is stopping. The Distributed Transaction Coordinator service was stopped successfully.

La liste des ports ouverts devient donc :

C:\WINNT>netstat -an

Active Connections

 Proto  Local Address          Foreign Address        State
 TCP    0.0.0.0:135            0.0.0.0:0              LISTENING
 TCP    0.0.0.0:445            0.0.0.0:0              LISTENING
 TCP    0.0.0.0:1026           0.0.0.0:0              LISTENING
 TCP    192.70.106.143:139     0.0.0.0:0              LISTENING
 UDP    0.0.0.0:135            *:*
 UDP    0.0.0.0:445            *:*
 UDP    0.0.0.0:1029           *:*
 UDP    192.70.106.143:137     *:*
 UDP    192.70.106.143:138     *:*

Windows XP

Les services qu'il est simple de désactiver sont les suivants :

IPsec services (PolicyAgent)
SSDP Discovery Service (SSDPSRV)
Windows Time (W32Time)

L'arrêt de ces services se fait avec les commandes suivantes :

C:\WINDOWS>net stop policyagent The IPSEC Services service is stopping. The IPSEC Services service was stopped successfully.

C:\>WINDOWS>net stop ssdpsrv The SSDP Discovery Service service is stopping. The SSDP Discovery Service service was stopped successfully.

C:\>WINDOWS>net stop w32time The Windows Time service is stopping. The Windows Time service was stopped successfully.

La commande netstat -ano confirme que le nombre de ports ouverts a été réduit (les ports TCP 5000 et UDP 123, 500 et 1900 ont été fermés) :

C:\WINDOWS>netstat -ano

Active Connections

 Proto  Local Address          Foreign Address        State           PID
 TCP    0.0.0.0:135            0.0.0.0:0              LISTENING       884
 TCP    0.0.0.0:445            0.0.0.0:0              LISTENING       4
 TCP    0.0.0.0:1025           0.0.0.0:0              LISTENING       976
 TCP    192.70.106.143:139     0.0.0.0:0              LISTENING       4
 UDP    0.0.0.0:135            *:*                                    884
 UDP    0.0.0.0:445            *:*                                    4
 UDP    0.0.0.0:1026           *:*                                    1112
 UDP    0.0.0.0:1027           *:*                                    976
 UDP    192.70.106.143:137     *:*                                    4
 UDP    192.70.106.143:138     *:*                                    4

NetBIOS sur TCP/IP NetBT

NetBIOS sur TCP/IP est typiquement utilisé dans les systèmes Windows pour transporter le protocole CIFS (aussi connu sous le nom de SMB), qui fournit les fonctionnalités de partage de ressources sur les systèmes Windows.

NetBIOS sur TCP/IP utilise les ports UDP 137 et 138 et le port TCP 139. Pour fermer ces ports, il suffit de désactiver NetBIOS au niveau de chaque adaptateur réseau.

Dans les propriétés avancées TCP/IP de chaque adaptateur réseau, dans l'onglet WINS, se trouve le paramétrage de NetBIOS sur TCP/IP. A cet endroit, il faut choisir 'Disable NetBIOS over TCP/IP' (ou l'équivalent dans la langue de votre système, par exemple 'Désactiver NetBIOS avec TCP/IP). Ceci permet alors de fermer l'écoute sur les ports UDP 137 et 138 et sur le port TCP 139.

Le service lmhosts, qui sert à la résolution de noms NetBIOS peut alors être arrêté puis désactivé :

C:\WINDOWS>net stop lmhosts

The TCP/IP NetBIOS Helper service was stopped successfully.

Sur Windows 2000, la liste des ports ouverts devient donc :

C:\WINNT>netstat -an

Active Connections

 Proto  Local Address          Foreign Address        State
 TCP    0.0.0.0:135            0.0.0.0:0              LISTENING
 TCP    0.0.0.0:445            0.0.0.0:0              LISTENING
 TCP    0.0.0.0:1026           0.0.0.0:0              LISTENING
 UDP    0.0.0.0:135            *:*
 UDP    0.0.0.0:445            *:*
 UDP    0.0.0.0:1029           *:*

Sur Windows XP :

C:\WINDOWS>netstat -ano

Active Connections

 Proto  Local Address          Foreign Address        State           PID
 TCP    0.0.0.0:135            0.0.0.0:0              LISTENING       884
 TCP    0.0.0.0:445            0.0.0.0:0              LISTENING       4
 TCP    0.0.0.0:1025           0.0.0.0:0              LISTENING       976
 UDP    0.0.0.0:135            *:*                                    884
 UDP    0.0.0.0:445            *:*                                    4
 UDP    0.0.0.0:1026           *:*                                    1112
 UDP    0.0.0.0:1027           *:*                                    976

CIFS directement dans TCP

Avant Windows 2000, le protocole CIFS était typiquement transporté dans NetBIOS sur TCP/IP, via le port TCP 139. A partir de Windows 2000, CIFS peut être transporté directement dans TCP/IP, sans couche NetBT intermédiaire. Dans ce cas, le port TCP 445 est utilisé (voir http://www.ubiqx.org/cifs/SMB.html#SMB.1.2 pour plus de détails).

Pour désactiver l'écoute du port 445, deux méthodes sont possibles :

1. désactiver le pilote NetBT
2. ajouter une valeur dans la base de registres, indiquant de désactiver le
transport de CIFS directement dans TCP.

Désactivation du pilote NetBT

La première méthode désactive complètement SMB sur un système, à la fois la partie cliente (service workstation) et la partie serveur (service serveur).

La première chose à faire est de d'arrêter (puis de désactiver) les services workstation et server (et tous les services qui en dépendent et qui seraient encore en fonctionnement) :

C:\WINNT>net stop rdr The Workstation service is stopping. The Workstation service was stopped successfully.

C:\WINNT>net stop srv The Server service is stopping. The Server service was stopped successfully.

Une fois ces services arrêtés, le pilote NetBT peut être à son tour arrêté :

C:\WINNT>net stop netbt The NetBios over Tcipip service is stopping. The NetBios over Tcipip service was stopped successfully.

Pour désactiver le pilote NetBT, la valeur suivante de la base de registres doit être modifiée :

Key: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\NetBT\
Value: Start
Type: DWORD value (REG_DWORD)
Content: 4

Sous Windows XP, la commande suivante peut être utilisée :

C:\WINDOWS>sc config netbt start= disabled

Désactivation du transport de SMB via le port 445

Dans certaines configurations, il peut être nécessaire de laisser actif le pilote NetBT, sans utiliser le transport de SMB sur le port 445.

Dans ce cas, il est possible de régler la valeur de la base de registres suivante :

Clé : HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\NetBT\Parameters
Valeur : SmbDeviceEnabled
Type : DWORD value (REG_DWORD)
Contenu : 0 (pour désactiver)

Après redémarrage, cette opération permet de désactiver l'ouverture du port 445 par le pilote NetBT.

Ne restent donc plus que les ports ouverts suivants sous Windows 2000 :

C:\WINNT>netstat -an

Active Connections

 Proto  Local Address          Foreign Address        State
 TCP    0.0.0.0:135            0.0.0.0:0              LISTENING
 TCP    0.0.0.0:1026           0.0.0.0:0              LISTENING
 UDP    0.0.0.0:135            *:*
 UDP    0.0.0.0:1029           *:*

Et sous Windows XP :

C:\WINDOWS>netstat -ano

Active Connections

 Proto  Local Address          Foreign Address        State           PID
 TCP    0.0.0.0:135            0.0.0.0:0              LISTENING       884
 TCP    0.0.0.0:1025           0.0.0.0:0              LISTENING       976
 UDP    0.0.0.0:135            *:*                                    884
 UDP    0.0.0.0:1026           *:*                                    1112
 UDP    0.0.0.0:1027           *:*                                    976

Services RPC

Les ports qui restent ouverts sont tous liés au fonctionnement de services RPC (Remote Procedure Call). Sur le port 135 se trouve le portmapper RPC ainsi que le gestionnaire de contrôle des services COM (COM SCM). Sur les ports immédiatement supérieurs à 1023 se trouvent des services RPC, accessibles via RPC ou DCOM (ORPC). Ces ports sont alloués dynamiquement, d'où la nécessité d'un service de correspondance de ports, le portmapper, permettant d'obtenir le port sur lequel est accessible un service RPC donné.

Si vous souhaitez identifier quels services RPC utilisent quels ports TCP ou UDP sur votre système, vous pouvez utiliser l'outil rpcdump pour obtenir la liste des services RPC enregistrés dans la base de données du portmapper (http://razor.bindview.com/tools/desc/rpctools1.0-readme.html ).

Windows 2000

A l'aide de rpcdump, nous pouvons déterminer que le port UDP 1029 héberge des services RPC lancés par le service Messenger. Il suffit donc de désactiver ce service pour fermer ce port. Ceci n'est effectif qu'après redémarrage.

Le port UDP 135 ne sera également plus ouvert, pour les deux raisons suivants :

- le dernier service RPC sur UDP est désormais désactivé 
- DCOM n'est pas accessible sur UDP par défaut, le gestionnaire de service COM
  n'écoute donc pas sur le port UDP 135

Le port TCP 1026 héberge des services RPC lancés par le service Task Scheduler (Schedule). Il est donc possible de fermer ce port en désactivant ce service et en redémarrant, l'arrêt du service ne suffisant pas à fermer le port.

Le service Remote Access Connection Manager (RasMan) doit également être désactivé.



Windows XP

Sous Windows XP, nous retrouvons le port UDP 1027, qui est celui des services RPC du service Messenger. De la même façon que sous Windows 2000, ce port ne sera plus ouvert, de même que le port UDP 135 après désactivation du service messenger et redémarrage du système.

Le port TCP 1025 est celui des services RPC du service Task Scheduler. De la même façon que sous Windows 2000, il suffit de le désactiver pour qu'au prochain redémarrage, le service ne soit plus en écoute.

Restriction des interfaces d'écoute sur Windows 2000

_Avertissement_ : la technique de restriction des interfaces d'écoute des services RPC ne fonctionne actuellement que sur Windows 2000 (elle ne fonctionne pas sur Windows XP).

Jusqu'à maintenant, nous avons systématiquement désactivé les services qui enregistrent des services RPC, afin de fermer les ports dynamiques ouverts par ceux-ci. Cependant, il peut être souhaitable de faire fonctionner certains de ces services, tel que le service Task Scheduler, qui permet de lancer des tâches programmées.

Il est possible de restreindre les interfaces d'écoute de certains services RPC, plus précisément pour les services RPC qui n'écoutent pas explicitement sur toutes les interfaces.

Une valeur de la base de registres permet de configurer la liste des interfaces réseau sur lesquelles les services RPC se placeront en écoute. Cette valeur reçoit une liste d'entiers, correspondant aux index des interfaces réseau.

Avant Windows 2000, cette valeur contenait des noms de périphériques réseau, comme décrit dans l'entrée 'Configuring the Windows XP/2000/NT Registry Port Allocations and Selective Bindings' du Microsoft Platform SDK, disponible quelque part sur http://msdn.microsoft.com/ . A partir de Windows 2000, cette valeur doit contenir des index d'interfaces réseau, commençant à 1.

Les deux clés suivantes Rpc\Linkage\ doivent être crées sous

Clé : HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services

La valeur à ajouter est la suivante :

Clé : HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Rpc\Linkage
Valeur : Bind
Type : REG_MULTISZ
Contenu : liste des index des interfaces réseau

Microsoft a publié une nouvelle version de l'outil rpccfg le 16/4/2003, qui permet de lister les index d'interfaces réseau et de configurer les restrictions d'interfaces. Cet outil est téléchargeable depuis http://download.microsoft.com/ (mot clé : rpccfg).

L'option -q de rpccfg donne la configuration actuelle des restrictions d'interfaces et de ports :

C:\>WINNT>rpccfg -q RPCCFG: Listening on all interfaces (default configuration)

RPCCFG: Using default port settings

L'option -l de rpccfg permet d'obtenir les correspondances entre les adaptateurs réseau et les index d'interfaces :

C:\WINNT>rpccfg -l IF2: Ethernet: 3Com EtherLink PCI (Microsoft's Packet Scheduler) IF1: Ethernet: MS TCP Loopback interface

Sur notre système, l'index de rang 1 correspond à l'interface de bouclage (adresse IPv4 127.0.0.1). Ainsi, pour restreindre les services RPC à l'interface de bouclage, nous utilisons l'option -a avec 1 comme argument :

C:\WINNT>rpccfg -a 1 RPCCFG: Listening on the following interfaces IF1: Ethernet: MS TCP Loopback interface

Il est possible de vérifier avec l'option -q que la restriction est correctement configurée :

C:\WINNT>rpccfg -q RPCCFG: Listening on the following interfaces IF1: Ethernet: MS TCP Loopback interface

RPCCFG: Using default port settings

Cas du portmapper

Par défaut, le portmapper RPC se met en écoute sur toutes les interfaces réseau.

Une valeur de la base de registres, ListenOnInternet, permet de paramétrer si le portmapper RPC se met en écoute sur toutes les interfaces ou non. Par défaut, cette valeur n'existe pas et a une valeur implicite de "Y":

Clé : HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\RpcSs\
Valeur : ListenOnInternet
Type: REG_SZ
Contenu : "Y" ou "N"

Lorsque ListenOnInternet contient "N", le port TCP 135 devient en écoute uniquement sur les interfaces dont les index apparaissent dans la valeur Bind décrite dans le paragraphe précédent.

Limites de la technique de restriction des interfaces d'écoute

La technique de restriction des interfaces d'écoute a les limites suivantes :

- elle ne fonctionnent que pour les services RPC qui n'écoutent pas
  explicitement sur toutes les interfaces
- c'est un paramètre global (les restrictions ne peuvent pas être mises en
  place pour un service RPC donné individuellement)
- elle ne semble fonctionner que pour le transport sur TCP des services RPC

Nos tests ont montré que cette technique fonctionne sur Windows 2000 pour le transport sur TCP des services suivants :

service RPC du service Distributed Transaction Coordinator 
service RPC du service Task Scheduler 
service RPC du service inetinfo

Elle ne fonctionne pas pour le transport sur UDP des services suivants (en fait, elle ne fonctionne probablement pas du tout pour le transport sur UDP) :

service RPC du service messenger 
service RPC du service inetinfo

Restriction des ports dynamiques alloués aux services RPC

Par défaut, les ports alloués aux services RPC appartiennent à l'intervalle par défaut des ports dynamique, qui début à 1025 (le port 1024 ne semble pas être utilisé sur les systèmes Windows). Ceci explique pourquoi la plupart des services RPC lancés au démarrage du système sont en écoute sur des ports TCP ou UDP immédiatement supérieurs à 1023.

Il est possible de configurer un intervalle de ports spécifique aux services RPC. Ce genre de configuration est typiquement utilisée pour faciliter le filtrage de ports sur les équipements de filtrage IP. Elle peut également servir à distinguer clairement les ports dynamiques (typiquement utilisés lorsque le système est un client TCP ou UDP) et les ports alloués aux services RPC.

Les options -pi et -pe de rpccfg permettent de configurer l'intervalle de ports

alloués aux services RPC. Pour définir cet intervalle à 4000-4100 :

C:\WINNT\>rpccfg -pi 4000-4100 The following ports/port ranges will be used for Intranet ports 4000-4100

Default port allocation is from Intranet ports

Nous pouvons finalement vérifier que nos restrictions d'interfaces et de ports sont correctement définies :

C:\WINNT>rpccfg -q RPCCFG: Listening on the following interfaces IF1: Ethernet: MS TCP Loopback interface

The following ports/port ranges will be used for Intranet ports 4000-4100

Default port allocation is from Intranet ports

DCOM

A ce stade, il ne reste plus que le port TCP 135 d'ouvert. Le port 135 est ouvert par le service Remote Procedure Call (RpcSS) et il n'est pas possible de le désactiver car il contient notamment le gestionnaire de services COM, utilisé par les processus locaux du système.

Le port TCP 135 reste ouvert car il est utilisé pour recevoir les requêtes d'activation à distance d'objets COM. Il existe un réglage global dans la base de registres, permettant de désactiver DCOM :

Clé : HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Ole
Valeur : EnableDCOM
Type: REG_SZ
Contenu : "Y" (pour activer) ou "N" (pour désactiver)

Cette valeur de la base de registres correspond au paramètre 'Enable Distributed COM on this computer' dans l'outil dcomcnfg :

C:\WINDOWS>dcomcnfg

Cette procédure est désormais documentée dans l'article #825750 de la base de connaissance Microsoft (http://support.microsoft.com/?id=825751 ).

Désactiver DCOM est probablement une bonne précaution, dans la mesure où cela devrait vous protéger des vulnérabilités récentes affectant DCOM, découvertes par le Last Stage of Delirium Research Group (http://www.lsd-pl.net/special.html ) et par la Xfocus team (http://www.xfocus.org/advisories/200307/4.html ).

Lorsque DCOM est désactivé, l'infrastructure COM retourne le code d'erreur E_ACCESSDENIED (0x80700005) lorsqu'il recoit des demandes distantes d'activation. Par conséquent, l'exploitation des vulnérabilités sus-citées n'aboutissent pas.

Désactiver DCOM ne ferme pas le port TCP 135. Pour le fermer, une solution est de supprimer les séquences de protocoles RPC sur lesquels DCOM ne doit plus être accessible. Dans notre cas, il suffit de désactiver la séquence ncacn_ip_tcp, qui correspond au transport sur TCP/IP.

Sous Windows 2000, dcomcnfg affiche directement les propriétés DCOM du système local et en particulier, l'onglet 'Default Protocols'. Sous Windows XP, dcomcnfg lance une console MMC présentant trois noeuds. L'onglet 'Default Protocols' apparaît dans les propriétés du noeud My Computer, sous le noeud Computer.

La liste présentée dans l'onglet 'Default Protocols' est stockée dans la valeur de la base de registres suivante :

Clé : HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Rpc
Valeur : DCOM Protocols
Type : REG_MULTI_SZ

Il est donc également possible d'éditer directement la base de registres et de supprimer ncacn_ip_tcp de la valeur DCOM Protocols.

Après redémarrage, plus aucun port ne devrait être ouvert, à l'exception d'un port UDP dans le cas de Windows XP, point sur lequel nous revenons dans la partie suivante.

Service de cache DNS Windows XP

A partir de Windows 2000, les systèmes Windows incluent un service de cache DNS (dnscache) qui garde en mémoire le résultat des requêtes DNS, pour économiser des requêtes vers un serveur DNS externe.

Sous Windows 2000, ce service envoie ses requêtes DNS sur UDP en utilisant un port source UDP différent à chaque requête. En revanche, à partir de Windows XP, le même port est toujours utilisé : ce port est alloué à la première requête DNS du système après démarrage et reste le même jusqu'au prochain redémarrage.

Dans notre système Windows XP, le port que s'était vu attribué le service dnscache était le port 1026. Pour s'en assurer, il est possible d'arrêter le service dnscache.

Il est possible de désactiver le mécanisme de cache de socket utilisé par le service dnscache de Windows XP, en ajoutant une valeur dans la base de registres sous la clé service :

Clé : HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Dnscache\Parameters\
Valeur : MaxCachedSockets
Type: REG_DWORD
Contenu : 0

Avec ce paramétrage, le service dnscache de Windows XP se comportera comme sous

Windows 2000, c'est à dire que des sockets UDP différentes seront utilisées pour chaque requête DNS.

Services ouverts par l'utilisation du système

Il peut arriver que des ports se mettent en écoute en utilisant certaines applications du système. Par exemple, lancer le composant 'Component Services' sous Windows XP semble provoquer l'ouverture de deux ports TCP, en fait liés au démarrage de services RPC.

Il est donc toujours utile de mettre en place du filtrage IP sur le système, en complément des techniques de minimisation présentées ici.

Résumé

La minimisation des services réseaux se fait donc en trois étapes :

- désactivation des services inutiles ouvrant des ports TCP ou UDP 
- désactivation de NetBIOS sur TCP/IP et de CIFS dans TCP 
- minimisation, voire suppression de tous les services RPC

Les services à désactiver sont les suivants :

Windows 2000 : 
 - IIS 5 : iisadmin, w3svc, smtpsvc
 - Autres : messenger, msdtc, policyagent, schedule
Windows XP :
 - messenger, policyagent, schedule, ssdpsrv, w32time

La désactivation de NetBIOS sur TCP/IP se fait au niveau de chaque interface réseau. La désactivation de CIFS dans TCP (port 445) se fait en ajoutant dans la base de registres la valeur SmbDeviceEnabled dans les paramètres du pilote NetBT.

La minimisation des services RPC se fait d'abord en désactivant les services qui démarrent des services RPC.

La suppression de la séquence de protocole 'Connection-oriented TCP/IP' dans l'utilitaire dcomcnfg permet de fermer le port TCP 135.

Si nécessaire, la restriction des interfaces d'écoute peut être configurée pour certains services sous Windows 2000, en utilisant l'outil rpccfg.

Conclusion

Entre la configuration par défaut d'un système Windows, avec un nombre certain de services ouverts et la configuration à laquelle nous aboutissons, sans un seul service réseau, chacun trouvera le juste milieu entre les services réseaux devant être offerts par un système et le niveau de sécurité attendu.

 ADDONS
Null Session

Null sessions are un-authenticated connections (not using a username or password.) to an NT or 2000 system. Windows NT and 2000 have this problem which can be serious. Example: C:\>net use \\192.168.###.###\IPC$ "" /u:"" The preceding syntax connects to the hidden interprocess communications "share' (IPC$) at IP address 192.168.###.### as the built-in anonymous user (/u:"") with a null (“”) password. If successful, the intruder now has an open channel over which to attempt various techniques which allow him/her to gather as much information as possible from the target i.e. network information, shares, users, groups, registry keys, and so on. Null session connections, or anonymous logons, can be the single most devastating network foothold sought by intruders.

Note: This fix is known to break "Trusts" in Windows NT and Windows 2000 machines. There are also some questions about it killing print queues and network backups. There is no definitive list of what will and will not work relative to your environment. Null Session Countermeasure:

Null sessions require access to TCP 139 (and/or 445 on Win 2000). The most prudent way to eliminate them is to filter TCP and UDP ports 139 and 445 at all perimeter network access devices (firewalls). You could also disable SMB services entirely on individual NT hosts by unbinding WINS Client (TCP/IP) from the appropriate interface using the Network Control Panel's Bindings tab. This can be accomplished in Win 2000 by unbinding File and Print Sharing for Microsoft Networks from the appropriate adapter under the Network and Dialup Connections applet, Advanced, Advanced Settings.

Following NT Service Pack 3, Microsoft provided a facility to prevent enumeration of sensitive information over null sessions without the radical surgery of unbinding SMB from network interfaces (recommended unless SMB services are necessary) It's called RestrictAnonymous, after the Registry key that bears that name:

1. Open regedt32, and navigate to HKLM\SYSTEM\CurrentControlSet\Control\LSA. 2. Choose Edit I Add Value and enter the following data: Value Name: RestrictAnonymous Data Type: REG-DWORD Value: 1 (or 2 on Win 2000) 3. Exit the Registry Editor and restart the computer for the change to take effect.

On Windows 2000 The Security Policies MMC snap-in provides a graphical interface to the many security-related Registry settings (i.e.,RestrictAnonymous) that need to be configured manually under NT4. These settings can be applied at the Organizational Unit (OU), site, or domain level where they can be inherited by all child objects in Active Directory if applied from a Win 2000 domain controller. This requires the Group Policy snap-in.

Setting RestrictAnonymous to 1 does not actually block anonymous connections. However, it does prevent most of the information leaks available over the null session, primarily enumeration of user accounts and shares. Some enumeration tools and techniques will still extract sensitive data from remote systems even if RestrictAnonymous is set to 1.

To completely restrict access to null session information on Win 2000 systems, set the Additional Restrictions For Anonymous Connections policy key to "No Access Without Explicit Anonymous Permissions". (This is equivalent to setting RestrictAnonymous equal to 2 in the Win 2000 Registry.) Setting RestrictAnonymous equal to 2 prevents the Everyone group from being included in anonymous access tokens. This setting may cause connectivity problems for third-party products and/or older Windows platforms. ( See Microsoft KB article Q246261 for more details.) It effectively blocks null sessions from being created:

C:\>net use \\mgmgrand\ipc$ “” /u:”” System error 5 has occurred. Access is denied.

For more information on RestrictAnonymous, search Microsoft's Knowledge Base for Article Q143474. For more technical details, see "CIFS: Common Insecurities Fail Scrutiny" or RFCs 1001 and 1002, which describe the NetBIOS over TCP /UDP transport specifications.

Commentaires

1. Le samedi, octobre 15 2005, 20:52 par Patrick

Une autre doc provenant de http://membres.lycos.fr/apocalypse14/astuce_xp&2000.htm est disponible ici : http://blogpmenier.dynalias.net/docext/xp/xp-2000.htm

Cette doc fournit une bonne récap des différentes manips à effectuer pour optimiser XP ainsi que des bons conseils pour réinstaller sans exploser cette @"! de clé de produit.

2. Le mardi, août 26 2008, 21:57 par arrangeurs

Hey ! toujours agréableent supris de lire des billets intéresants :) qu'est-ce que tu sous entendais das cette parenthèse : "see microsoft kb article q246261 for more details" ? je te souaite une bonne continuatoion !

3. Le mercredi, août 27 2008, 08:35 par Patrick Menier

Merci :)  concernant la KB honnetement je ne me souviens plus... d'autant que je n'utilise plus cet OS depuis des années maintenant. Sinon tu peux toujours jeter un oeil sur des urls du style: http://support.microsoft.com/kb/246261