Le World Wide Web et la sécurité


Par |Pr0teK|, pr0tekti0n@hotmail.com

Ce document parle de la sécurité sur le WWW, qui est sujet tres vaste... Il est à la portée de tous, surtout pour les novices.

Tout ordinateur relié à Internet court un risque.
Qu'il s'agisse d'un ordinateur utilisé en poste de travail ou bien un serveur important, cela revient au meme malheureusement.
Les chemins qui permettent de "voler" des informations à des ordinateurs reliés au réseau (Internet) sont multiples.
Les systemes commerciaux de shopping ou de vpc reclament des méthodes qui protegent les données qu'ils transmettent de plus en plus performants...

Supposons qu'une société par exemple un grand journal, utilise son serveur Web non pas seulement pour fournir des informations à ses lecteurs, mais aussi pour échanger des informations avec d'autres personnes.
La concurence apprend par hasard que le chef de la société utilise son prénom pour mot de passe. Une semaine plus tard, le reportage du siecle ne parait pas dansd un journal de Paris, mais dans un magasin toulousain, et cela trois jours avant la date prévue pour sa sortie... Sans doute un tel incident pourrait etre de quelque utilité... Que le grand public prenne connaissance des problemes qu'il peut y avoir sur des serveurs Web...



Les navigateurs Web tel que Netscape ou Ms Explorer, outils standards de tous les usagers, sont de plus en plus puissants. Mais la puissance de ces logiciels peut dissimuler de nombreux dangers à peine connus.
C'est une grosse erreur de croire qu'un navigateur ne serait qu'un outil un peu con et dont sa principale fonction serait de charcher des documents web.
Les nouveaux navigateurs utilisent des programmes supplémentaires tels que les plug and play. Ceux-ci sont tout d'abord importés du Net, puis mis en service, et ce sans l'avis de l'usager... En général, le plus grand risque, pour les clients, et qu'un programme s'execute tout seul. Jusqu'à présent, on connait les javascripts qui permetent à des agresseurs potanciels d'espionner au moyen de scripts java, des données de l'ordinateur client.
On ne peut prévoir quels autres dangers feront courir ce type de programme.



Il en va ainsi pour les applets java et les plug ins des navigateurs web, chargés à partir du Net exactement comme les programmes disponibles via FTP: il n'est jamais dit qu'ils sont exempts d'er reurs et surtout qu'ils sont fiables.
Un programme qui est mis en service relié à un réseau peut occasionner toute sort de dégats. En voici quelques exemples:

Le cheval de Troie dit à un utilisateur qu'il est d'une grande utilité, alors qu'en réalité, il lui causera des dommages. A priori, tout logiciel pourrait etre un cheval de Troie. Et contrairement aux virus, il n'existe pas de procédure générale permettant de détecter les structures dangereuses des logiciels...

On ne peut jamais etre sur qu'un logiciel chargé à partir du Net est exempt de virus, ou n'est pas lui meme un virus qui se répand dans le systeme ou il a pénétré.

3) Comment rendre votre navigateur plus sur ?

- Protégez vous contre les virus! Une méthode simple mais pourtant tres efficace consiste à toujours examiner au moyen d'un antivirus tout ce que vous téléchargez sur le Net.

- Ne faites pas toujours un essai des nouveautés actuelles! Les nouveaux logiciels ont plus de chance de comporter des erreurs que ceux qui sont déjà sortis depuis longtemps. Faites attention aussi aux sorties de logiciels non officielles, comme icq99 par exemple, qui était infecté par un trojan...

- Informez vous! Tenez vous informé de ce qui se passe sur le Net en matière de sécurité, alez voir les newsgroups (comp.security.*) et allez bien sur voir l'excelent: http://www.alternetive.asso.fr/securite/

- Le plus important, etre conscient! Sur IRC par exemple, n'acceptez pas de fichiers de personnes inconnues.

Les problèmes de sécurité sur les serveurs Web sont très divers. Ils peuvent survenir avec:

- Le logiciel serveur (Apache...)

- Le système d'exploitation utilisé (NT, Linux...)

- Les propriétés du TCP/IP

Cette question recouvre des apects très divers, de sorte que nous ne pouvons certes pas donner un apercu de tout ce qui concerne ces problèmes.

La plupart des serveurs Web tournent sur des systèmes Unix car ils sont particulierement bien adaptés à la plupart des fonctions serveurs. De plus, les protocoles TCP/IP sont nées sur des systèmes Unix!
UNIX, en raison de sa souplesse, est prédestiné à l'exploitation de serveurs Web, mais les risques bien connus en ce qui concerne la sécurité ne lui sont pas inconnu. Faire fonctionner un serveur Web Unix implique que l'on porte une grande attention aux questions de sécurité.
Un serveur UNIX devrait faire l'objet d'une installation suffisament sure pour etre protégé contre les intrusions.

La présentation qui suit traite des problèmes des serveurs Web. La plupart de ces problèmes se retrouvent sur tous les systèmes d'exploitation. Le coeur de tout serveur Web est le http deamon, qui acceuil les requetes sur un port TCP et retourne des réponses.

Fonctions d'un serveur http deamon:



-------------                               ---------------
- Programme -  <=========================>  - HTTP DEAMON -
-------------                               ---------------
                                      ________|          |
                                      |            ------V----------     
                                      |            - Documents Web -    
               ------------------------            -----------------
               - Documents Web (html) -                  |
               ------------------------                  |
                      ^                                  |
                      |                                  |
                      |                                  |
                      |                           -------V--------
          ---------------------                   - Port 80 TCP -                
          - Sytème de fichier -                   ---------------
          ---------------------



Pour votre serveur Web, il faut que vous teniez absolument compte des directives concernant la sécurité.
Les problèmes concernant la sécurité des serveurs peuvent se répartir en deux catégories:

- Les problèmes du httpd liés au système: ce sont les problèmes dus à la configuration du logiciel http.

- Les bogues: Aucun logiciel n'est exempt de fautes.

L'une des difficultés pour sécuriser un serveur Web sous Unix tient à ce que celui-ci doit etre lancé avec des autorisations afin de pouvoir servir le port 80, standard du web.
Il faudrait arriver à mettre un logiciel httpd sur le port 1024 par exemple, dans ce cas, il peut etre ouvert sous un ID d'utilisateur non privilégié.
Le problème est qu'il faudrait ecrire: http://www.serveur.com:port/ Cette solution n'est pas utilisée pour des raisons de marketing (adresse difficile à retenir).

Avec un système multi-utilsateur, les droits d'utilisateurs jouent un role important sur les données et réprtoires du serveur.
Le User-ID sous lequel marche le serveur doit posséder un minimum de droits de lecture, pour que les visiteurs puissent y accéder.

Certains systèmes d'exploitation supportent des liens ou des alias pour les fichiers et répertoires.
Un fichier ou un répertoire est alors relié à un autre nom qui peut se trouver dans un autre répertoire; ce que l'on appelle un lien.
Qu'un serveur Web tienne compte de tels liens peut soulever des problèmes de sécurité. Créez par exemple, sous le répertoire accessible du serveur Web, un lien avec un autre répertoire dont vous voulez voir les données...
Un autre problème (décidement...), peut intervenir quand un serveur Web défectueux assigne un répertoire par l'intermédiaire d'un lien et non pas du répertoir supérieur...
Si le httpd est configuré de telle manière qu'il tienne compte des liens crées avec la commande ln -s, alors l'ensemble du système fichier sera vulnérable...

On veut souvent que des répertoires particuliers ne puissent etre lus intégralement par n'importe qui mais que leur accès soit réduit à un nombre limité d'utilisateurs. Il est possible de demander un mot de passe lors du chargement d'un répertoire, mais un autre moyen existe, qui est de restreindre les adresses IP autoriseés ou les host names.
Il faudrait pour cela:

- Utilisez toujours des adresses IP pour le serveur de facon à ce qu'il n'accepte pas que l'on annule, en revenant en arrière, des numéros IP pour des noms d'hotes.

- N'associez jamais un serveur Proxy en lui donnant une permission d'accès. Car dans ce cas, tous les utilisateurs pourraient accéder à vos données protégées.

- Pour ne pas etre victime de manipulation DNS, vous devez toujours n'utiliser que des adresses IP pour vos indications "allow/denied from" et aménager votre serveur Web de telle sorte que tout reverse-Mapping soit impossible sur le Name Service (Logiciels Apaches/NCSA...).

Les scripts CGI sont des programmes que l'on peut appeler d'un serveur Web. Le serveur peut alors transmettre des données d'un utilisateur Web au programme qui peut à nouveau envoyer des réponses à l'utilisateur. (ex: questionnaires...).
Les sripts CGI peuvent remplir de nombreuses taches: du simple envoi d'un message (forum) à la recherche dans une banque de données. Généralement, les scripts CGI utilisent des formulaires HTML. (allez voir: http://www.cgiforme.com/) L'information apportée par un utilisateur peux etre relayée de plusieurs facons:

- dans le cas le plus simple, les informations sont placées sur un serveur puis exploitées par le script CGI.

- Si le script CGI est appelé avec HTTP-GET, c'est à dire comme un document normal, les entrées de l'utilisateur sont transférés dans la ligne de la commande.

Remarque: Sur certains systèmes, la longueur de la ligne de commande est très limitée.

Sur les anciennes versions des serveurs Web UNIX, il etait possible d'appeler au moyen de signes particuliers des commandes système par l'intermédiaire d'un appel CGI.
Ce problème est évité avec l'usage de HTTP-POST.
Les scripts CGI constituent réellement un des plus importants problèmes pour la sécurité des serveurs Web. Ils permettent que soient lancés des programmes sur lesquels on peut agir librement . Des intrus qui connaissent des bogues ou des erreurs de programmation peuvent s'ils le veulent accéder directement à tout système.

A coté des questions de sécurité d'orde "technique", la fiabilité des données transmises via le Web occupe une importance de plus en plus grande.
Comme, en général, l'ensemble des données sont transmises sur Internet en texte clair, il est réellement possible à d'enventuels agresseurs de prendre connaissance de celles ci.
Mais ceci est parfaitement inacceptable pour les utilisateurs comme celle des services de VPC.

Codage, confidentialité et... authenticité.

Des systèmes de codage permettent de protéger des données transmises sur Internet. Vous connaissez sans doute le PGP (Pretty Good Privacy).

Contrairement aux systèmes de cryptages utilisés pour les E-Mail (PGP), un chaos très dense règne dans l'univers des systèmes de cryptage...
Pour crypter un document Web, un question se pose: Ou doit on effectué la modification ?

La possibilité la plus utilisée est le cryptage des données HTTP. Pour cela, le protocole HTTP est modifié de telle facon que le serveur Web et le client "s'enten dent", avant la transmission meme des données.

Autre possibilité: crypter les données TCP/IP.

- NCSA httpd PGP/PEM

Une extension a été developpé par NCSA pour le HTTP Deamon qui sert à utiliser des procédés tels que le PGP et le PEM.
Dans ce cas, le cryptage n'est pas réalisé sur le serveur mais au moyen de programmes.




   ---------------                Demande de documents                 ---------------
   |             |>===================================================>|             |
   | BROWSER WEB |                                                     | SERVEUR WEB |
   |             |                 Contenu Documents                   |             |             |
   ---------------<===================================================<---------------
         |                                                                    |
         |                                                                    |
     Documents                                                               PGP!
         |                                                                    |
         |                                               Serveur Secret <=====|
    ------------                                                              |
    | Logiciel |                                                              |
    |   PGP    |                                                              |
    ------------                                                              |
         |                                                                    |
         |                                                              Client public
    Clé publique                                                              |
         |                                                                    |
         |                                                                    |
         |___________________________-------------____________________________|
                                     | Keyserver |
                                     |           |
                                     -------------

- SHTTP

SHTTP (Secure HTTP) a été développé par une société ricaine. Voici le procédé: (ce shéma est tiré de "SECURITY FIRST" )


    --------------                                               ---------------
    | Client Web |                                               | Serveur Web |
    --------------                                               ---------------
                                   NEGOCIATIONS

               Je peux ABC, DEF et IJK, mais j'aurais besoin de XTZ

    ---------------                                              ---------------
    | Browser Web |=============================================>| Serveur Web |
    --------------|               INTERNET                       |    SHTTP    |
                  |=============================================>---------------
                    Serveur Publique "Ok, on prend XYZ avec ABC"   


                                   TRANSMISSION

                              Requete              Contenu
    --------------------============================================>--------------------
    | Module de Crypto |                INTERNET                     | Module de Crypto | 
    --------------------<============================================--------------------
                           Contenu codé avec
                           clé publique        
Pour SHTTP, on effectue le choix du procédé de cryptage entre client-serveur.

- Microsoft PCT (cette partie est tirée de documents trouvés sur le WWW.)

Autre procédé de cryptage qui est lui aussi direcetement applicable au TCP/IP et qui par ailleurs peux etre également utilisé pour l'authentification: PCT de MS.

- Netscape SSL (cette partie est tirée de documents trouvés sur le WWW.)

SSL (Secure Sockets Layer) travaille directement sur la couche TCP/IP,


      =======================================
      =              APPLICATION            = 
      =======================================
      =  HTTP  =  NTTP  =  SMTP  =   ...... =
      =======================================
      =                SLL                  =
      =======================================                  
      =       Adresse IP                    =                      
      =======================================
Le serveur et le client communiquent avec SLL d'apres un processus "handshake" au cour duquel le serveur envoie un réponse à une demande de clé publique.



Meme si Netscape a remédié à des bogues bien connus, il n'en reste pas moins que les systemes cryptologiques sont vulnérables.
La question que nous devons nous poser est la suivante: Comment etre à 100 % sur de la sécurité ? On peut espérer que des pays comme les Etats Unis arretent de mettre des quotas d'export pour leurs programmes de cryptage...

Des passages de ce document ont été traduit de l'anglais par |Pr0teK| avec l'accord des auteurs respectifs.

|Pr0teK|