Previous Contents Next

4   Corrigé du DS du 13 novembre 2002

Examen d'une durée de deux heures avec tous les documents autorisés (y compris ordinateurs).

Le barême approximatif est de 3 points pour chaque exercice et de 8 points pour la question de réflexion (dont 2 sur la dernière série de questions).

4.0.8   Configuration de commutateur

Vous devez configurer un commutateur Cisco de 12 ports (du type Catalyst 2912) dans le contexte suivant : il doit avoir comme adresse IP de service 192.168.0.1, sur les ports Ethernet 1 et 4 sont connectées des machines du vlan 2, sur les ports 2 et 3 des machines du vlan 3, le commutateur est relié à un commutateur haut débit par l'intermédiaire du port 12, une machine Linux qui souhaite avoir une adresse IP dans le vlan 2 et une adresse IP dans le vlan 3 se trouve sur le port 10 et enfin un routeur inter-vlan est sur le port 11. Donnez la configuration des interfaces FastEthernet0/x et vlan1 pour que les différents éléments puissent communiquer correctement. Le routeur et le commutateur haut débit utilisent l'encapsulation isl et la machine Linux le module 802.1q du noyau 2.4.
Voici une configuration minimale :
interface VLAN1
  ip address 192.168.0.1 255.255.255.0
!
interface FastEthernet0/1
  switchport access vlan 2
!
interface FastEthernet0/2
  switchport access vlan 3
!
interface FastEthernet0/3
  switchport access vlan 3
!
interface FastEthernet0/4
  switchport access vlan 2
!
interface FastEthernet0/10
  switchport mode trunk
  switchport trunk encapsulation dot1q
!
interface FastEthernet0/11
  switchport mode trunk
!
interface FastEthernet0/12
  switchport mode trunk
!

4.0.9   Configuration IP

Donnez les commandes vconfig, ifconfig et route à passer pour configurer la machine Linux évoquée dans l'exercice précédent avec comme adresse IP 172.16.138.2 dans le vlan 2 (il s'agit d'un réseau IP de préfixe de taille 17 et de passerelle 172.16.140.1) et comme adresse IP 193.51.20.69 dans le vlan 3 (il s'agit d'un réseau IP de préfixe de taille 26 et de passerelle 193.51.20.65). Cette machine doit pouvoir sortir sur Internet.
Comme passerelle on préférera bien entendu la passerelle du réseau routé, c'est à dire 193.51.20.65. Les commandes sont :
vconfig add eth0 2
ifconfig eth0.2 172.16.138.2 netmask 255.255.128.0 \
                             broadcast 172.16.255.255
vconfig add eth0 3
ifconfig eth0.3 193.51.20.69 netmask 255.255.255.192 \
                             broadcast 193.51.20.127
route add default gw 193.51.20.65

4.0.10   Serveur et requêtes LDAP

Le serveur LDAP de l'école permet d'accèder à des informations sur les éléments actifs du réseau. Les éléments sont rangés par locaux techniques au dessous de l'objet de nom
dc=ports,dc=network,ou=Register,o=eudil,c=fr
Voici un exemple d'objet "local technique" :
$ PORTS="dc=ports,dc=network,ou=Register,o=eudil,c=fr"
$ ldapsearch -x -b "dc=RG20,$PORTS" -s base
dn: dc=RG20,dc=ports,dc=network,ou=Register,o=eudil,c=fr
objectClass: top
Voici un exemple d'objet "commutateur" :
$ PORTS="dc=ports,dc=network,ou=Register,o=eudil,c=fr"
$ ldapsearch -x -b "dc=2924M-1,dc=RG20,$PORTS" -s base
dn: dc=2924M-1,dc=RG20,dc=ports,dc=network,ou=Register,o=eudil,c=fr
nbports: 24
vlans:: MTpBTEw6CjI6QUxMOgozOkFMTDoKNDpTVEFGRjpBVVRPCjU6U1RBRkY
type: cisco2924M-giga
ipAddress: 172.26.224.16
objectClass: top
Donnez l'extrait du fichier de configuration de slapd permettant de : Donnez la commande pour afficher la liste des objets "locaux techniques" de l'école sans afficher les objets concernant les éléments actifs (est-il possible de n'avoir que des objets "locaux techniques" ?). Affichez tous les objets des commutateurs de type cisco2950G.
Voici l'extrait des contrôles d'accès dans slapd.conf :
access to attrs=vlans
  by dn="cn=admin,ou=People,o=eudil,c=fr" write
  by * none

access to attrs=nbports,type,ipAddress
  by dn="cn=admin,ou=People,o=eudil,c=fr" write
  by * read
Recherche des locaux techniques (avec en plus l'objet représentant la racine des objets "locaux techniques") :
$ PORTS="dc=ports,dc=network,ou=Register,o=eudil,c=fr"
$ ldapsearch -x -b "$PORTS" -s one
La liste des commutateurs les plus récents :
$ PORTS="dc=ports,dc=network,ou=Register,o=eudil,c=fr"
$ ldapsearch -x -b "$PORTS" type=cisco2950G

4.0.11   Configuration d'un DNS

Extrapolez vos connaissances sur la configuration d'un serveur DNS de type bind en IPv4 pour donner les fichiers de configuration nécessaires pour servir une zone IPv6. La zone à servir est ipv6.eudil.fr et contient des machines dans le préfixe IPv6 3ffe:0304:0110:0001:0:0:0:0/64. Il n'y a que deux machines dans cette zone : Pour ces zones IPv6 il n'existe qu'un seul serveur primaire pevele.eudil.fr et un seul serveur secondaire albanie.ilot.org. Donnez l'extrait du fichier named.conf déclarant la zone IPv6 et la zone inverse (rappelons que la racine pour les zones inverses IPv6 est ip6.int). Donnez le fichier déclarant les deux machines dans la zone ipv6.eudil.fr. Enfin, donnez le fichier déclarant les deux noms dans la zone inverse.
Le deux zones sont déclarées comme suit dans named.conf :
zone "ipv6.eudil.fr" {
        type master;
        file "eudil/eudilv6";
};
zone "1.0.0.0.0.1.1.0.4.0.3.0.e.f.f.3.ip6.int" {
        type master;
        file "eudil/eudilv6.rev";
};
Le fichier eudil/eudilv6 de la zone directe est :
@ IN  SOA pevele.eudil.fr.  hostmaster.pevele.eudil.fr. (
          3236765269 21600 3600 2592000 3600 )
  IN  NS  pevele.eudil.fr.
  IN  NS  albanie.ilot.org.

pevele  IN  AAAA 3ffe:0304:0110:0001:0260:08ff:fe71:b982
hainaut IN  AAAA 3ffe:0304:0110:0001:0260:08ff:fe71:b9be
Le fichier eudil/eudilv6.rev de la zone inverse est :
@ IN  SOA pevele.eudil.fr.  hostmaster.pevele.eudil.fr. (
          3236765269 21600 3600 2592000 3600 )
  IN  NS  pevele.eudil.fr.
  IN  NS  albanie.ilot.org.

2.8.9.b.1.7.e.f.f.f.8.0.0.6.2.0 IN  PTR  pevele.ipv6.eudil.fr.
e.b.9.b.1.7.e.f.f.f.8.0.0.6.2.0 IN  PTR  hainaut.ipv6.eudil.fr.

4.0.12   Exercice de réflexion

Pour assurer la sécurité des machines de l'Université, le CRI de l'USTL a décidé d'interdire tout flux TCP/IP entrant. Par défaut aucun paquet IP provenant d'Internet à destination des machines de l'USTL ne peut passer. L'application stricte de la règle ci-dessus interdirait tout usage d'Internet aux utilisateurs de l'Université donc deux exceptions ont été introduites.

La première concerne les réponses TCP : les paquets TCP autres que le premier paquet d'une connexion TCP (le fameux SYN) peuvent atteindre les machines de l'USTL. Ainsi lorsqu'une connexion TCP est initiée par une machine de l'Université, les paquets de retour de cette connexion peuvent passer le parefeu du CRI.

La seconde exception concerne la possibilité pour les machines de l'USTL de faire des requêtes FTP en mode actif. C'est cette exception qui sera le principal objet de l'exercice.

Enfin il existe des exceptions particulières (les deux précédentes sont générales et s'appliquent à toutes les machines de l'USTL) qui permettent à des machines précises, connues par leur numéros IP, de rendre des services vis à vis de l'extérieur (serveurs de messagerie, de pages web, etc.).

Première série de questions
Ces questions ne concernent que la première exception et les exceptions particulères. Que se passe-t-il si une machine d'Internet tente d'envoyer à une machine du campus un paquet TCP autre qu'un paquet SYN et autre qu'un paquet de réponse pour une connexion TCP établie ? (dites si le paquet passe le parefeu et l'éventuel type de réponse de la machine ciblée). Que pensez-vous du degré de sécurité des exceptions particulières ? (une machine du campus peut-elle usurper des droits donnés à une autre machine ? si oui comment ?).
Si une machine extérieure tente d'envoyer à une machine de l'USTL un paquet IP ne faisant pas partie d'une connexion déjà établie, le paquet est soit rejeté par le parefeu (cas d'un paquet SYN, ce qui interdit une ouverture de connexion provenant de l'Internet) soit passe jusqu'à la machine de l'USTL (paquet TCP autre que le paquet SYN). Dans le dernier cas, le paquet ne peut pas être rattaché à une connexion établie (mauvaise adresse IP source, mauvais port source ou destination ou mauvais numéro de séquence). La machine de l'USTL retourne donc un paquet TCP RST (reset) pour signaler une erreur de connexion TCP.

Les exceptions particulières ne reposent que sur les adresses IP des machines destination (machines de l'USTL). Il est donc possible qu'une autre machine de l'USTL usurpe les droits d'une machine privilégiée en utilisant son adresse IP (par exemple en la mettant hors service avec une attaque réseau puis en reconfigurant son interface réseau avec l'adresse IP de la machine privilégiée).
Seconde série de questions
Quel mécanisme utilisé par un client FTP en mode actif oblige le CRI à créer une seconde exception générale ? Donnez en français la règle statique la moins permissive possible permettant aux clients FTP de l'USTL de fonctionner en mode actif. Donnez cette même règle en terme d'ACL Cisco puis en terme de commande iptables pour une machine Linux (on suppose que la machine Linux a sa carte eth0 pour sortir sur Internet et sa carte eth1 pour accéder au réseau local). Par statique on entend que la règle ne prend pas en compte le contenu des paquets précédents pour autoriser le passage d'un paquet.
Pour récupérer des données (fichier ou liste de répertoire) un client FTP en mode actif lance un serveur TCP sur la machine locale et demande au serveur FTP (via la connexion de commande) de contacter ce serveur TCP pour transférer ces données. Le serveur FTP contacte le client FTP à partir de son port TCP ftp-data (port numéro 20).

Le parfeu du CRI doit donc laisser passer toute connexion TCP initiée de l'Internet d'un port 20 vers l'USTL sur un port supérieur ou égal à 1024 (port utilisateur).

La règle cisco se définie par les commandes IOS suivantes :
access-list 100 allow tcp any eq 20 any gt 1023
...
interface fastEthernet0
  ip access-group 100 in
!
Les commandes pour Linux sont :
iptables -P FORWARD 
iptables -A FORWARD -j ACCEPT -p tcp -i eth0 -o eth1 \
                              --sport ftp-data --dport 1024:
Troisième série de questions
Comment exploiter cette exception à l'interdiction des paquets entrants pour réussir à établir une connexion ssh entre une machine de l'USTL que vous administrez et une machine de l'extérieur que vous administrez également ? Plus précisément quel paramètre du serveur sshd devez-vous modifier par rapport à une installation classique sur la machine à l'USTL ? Quel micro-bout de code devez-vous ajouter au source du client ssh sur la machine extérieure ? Dans quelles conditions et avec quels arguments doit être exécuté le client ssh sur la machine externe ?
L'exploitation de la faille consiste à établir une connexion ssh du port 20 de la machine extérieure vers un port utilisateur de la machine USTL.

Le serveur sshd sur la machine USTL doit aussi écouter sur un port utilisateur. Pour un serveur sshd sous Linux il faut ajouter la ligne Port 2222 (par exemple) dans le fichier /etc/ssh/sshd_config.

Il n'est pas possible de forcer la commande ssh actuelle de Linux à se lier au port 20 de la machine locale. Aussi il faut ajouter un bout de code dans le fichier sshconnect.c des sources du logiciel openssh-3.4p1. Le bout de code est à ajouter dans la fonction ssh_create_socket juste après l'appel à socket :
{ struct sockaddr_in address;
  address.sin_family=family;
  address.sin_addr.s_addr=INADDR_ANY;
  address.sin_port=htons(20);
  bind(sock,(struct sockaddr *)&address,sizeof(address));
  }
Comme seul le super administrateur a le droit de lier une socket TCP à un port système (port entre 0 et 1023), la commande ssh modifiée doit être lancée par root ou porter le bit u+s avec root comme propriétaire. La commande à utiliser est simplement ssh -p 2222 mysshd.univ-lille1.fr.
Quatrième série de questions
Une fois la connexion par ssh possible, quelle ligne de commande basée sur ssh doit-on utiliser pour pouvoir atteindre le serveur web de la machine USTL à partir de la machine externe ? Quelle URL doit-on utiliser ? Enfin quel mécanisme complexe faudrait-il utiliser pour éviter ce "trou de sécurité" ? Ce mécanisme pourrait-il être contourné et si oui comment ?
On peut utiliser ssh comme tunnel pour atteindre un serveur web à l'USTL (on prend l'exemple du serveur web de weppes) :
ssh -p 2222 -L 8080:weppes.priv.eudil.fr:80 mysshd.univ-lille1.fr
L'URL à utiliser est alors http://localhost:8080/.

Pour éviter le trou de sécurité du à la règle de filtrage statique, il suffit d'utiliser une règle dynamique qui n'autorise que les connexions entrantes correspondant à des directives PORT envoyées par des clients FTP de l'USTL. Ce mécanisme peut encore être contourné par le lancement périodique d'un pseudo-client FTP qui ne fait rien que d'envoyer la directive PORT pour le port 2222 sur le serveur FTP de la machine extérieure.
Dernière série de questions
Supposez désormais que l'on souhaite plutôt accèder à la machine USTL via FTP. On suppose que l'on procède comme pour ssh en ce qui concerne le serveur à l'USTL et le client à l'extérieur. Le client FTP peut-il fonctionner en mode actif ? pourquoi ? peut-il fonctionner en mode passif ? pourquoi ?
Le client peut fonctionner en mode actif car c'est le serveur FTP qui va tenter d'ouvrir une connexion (de son port 20 vers un port utilisateur du client FTP). Le parefeu laisse passer les connexions initiées de l'USTL. Par contre le mode passif ne marche pas car le serveur FTP va lancer un serveur TCP sur un port utilisateur que le client FTP de l'extérieur doit contacter. C'est interdit par le parefeu (sauf autorisation particulière).

Previous Contents Next