HSC
Cabinet de consultants en sécurité informatique depuis 1989 - Spécialisé sur Unix, Windows, TCP/IP et Internet
Mode texte : accès au contenu de la page
Hervé Schauer Consultants
Vous êtes ici : Accueil > Ressources > Brèves > Minimisation des services réseaux sur les systèmes Windows
Accéder au : Site HSC des formations
Télécharger le catalogue des formations
Recherche :  
English version
   Services   
o Domaines de compétences
o Conseil & Expertise
o Prestations ISO 27001
o Audit & Évaluation
o Tests d'intrusion
o Tests de vulnérabilités (TSAR)
o Analyse Forensique
o Certification ARJEL
o Formations
o E-learning
   Conférences   
o Agenda
o Interventions passées
o Tutoriels
   Ressources   
o Index thématique
o Brèves
o Présentations
o Cours
o Articles
o Outils (téléchargement)
o Veille en vulnérabilité
   Société   
o Hervé Schauer
o Equipe
o Offres d'emploi
o Références
o Historique
o Partenariats
o Associations
   Presse et
 communication
 
 
o Newsletter HSC
o Bulletin juridique HSC
o Revue de presse
o Communiqués de presse
o Publications
   Contacts   
o Coordonnées
o Requêtes particulières
o Accès à nos locaux
o Hôtels proches de nos locaux
|>|Minimisation des services réseaux sur les systèmes Windows  

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
IF[2]: Ethernet: 3Com EtherLink PCI (Microsoft's Packet Scheduler) 
IF[1]: 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
IF[1]: 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
IF[1]: 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
IF[1]: 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. 

$Id: min_srv_res_win.tip,v 1.15 2004/03/05 15:58:12 poggi Exp $ 



Dernière modification le 5 mars 2004 à 16:58:56 CET - webmaster@hsc.fr
Mentions légales - Informations sur ce serveur - © 1989-2013 Hervé Schauer Consultants