3. Le filtre HTTP
Le filtre HTTP est une nouveauté d'ISA Server 2004. Comme son nom l'indique
il permet d'analyser l'intégralité du trafic HTTP en fonction d'un certain nombre de
paramètres. Les deux utilisations typiques de ce filtre sont :
-
Le filtrage de l'accès Web pour les clients du réseau interne. Cela
passe notamment par le blocage de certaines applications indésirables
utilisant l'encapsulation HTTP (clients P2P, logiciels de messagerie
instantanée...). Il est aussi de possible d'autoriser uniquement les
méthodes HTTP indispensables (GET, HEAD, POST...) et de modifier ou de
supprimer certaines champs sensibles renvoyés dans l'en-tête des requêtes
HTTP (User-Agent en particulier).
-
La sécurisation d'un site Web interne (cela peut être le site de
l'entreprise ou bien n'importe quelle interface Web comme Outlook Web
Access). Dans ce cas il est particulièrement intéressant de modifier les
champs renvoyés dans les réponses HTTP du serveur Web ce qui permet de
cacher un maximum d'informations sensibles comme la version du serveur Web
ou bien les protocoles d'authentification supportés.
|
A l'inverse du filtre SMTP dont la configuration est générale (elle se
réalise dans Configuration / Add-ins), celle du filtre HTTP est spécifique à
chaque règle d'accès ou de publication. Il faut faire un clic droit sur la règle
choisie puis sélectionner Configurer HTTP pour atteindre la fenêtre de
configuration comme le montre la capture d'écran ci-contre.
Attention car le paramètre Taille maximale des
en-têtes (cf. partie 3.2) est commun à toutes les règles et ne peut
donc être configuré qu'une seule fois. C'est la seule exception à la
règle énoncée ci-dessus ! Nous allons maintenant expliquer comment
paramétrer les cinq onglets du filtre HTTP en respectant l'ordre suivant
:
Nous terminerons ce chapitre en expliquant comment
sauvegarder ou sauvegarder une configuration spécifique du filtre HTTP.
|
 |
 |
L'onglet Général du filtre HTTP permet de
configurer les options suivantes :
-
Le paramètre Taille maximale des en-têtes (octets)
permet de bloquer toutes requêtes HTTP dont l'en-tête (+ la requête)
dépasse la valeur indiquée. Par défaut, les requêtes possédant une
en-têtes supérieure à 32768 octets sont arrêtées par le serveur ISA.
Ce paramètre est commun à toutes les règles utilisant le protocole
HTTP ! C'est d'ailleurs le seul du filtre HTTP qui n'est pas
spécifique à une règle d'accès ou à une règle de publication donnée.
Il est recommandé de ne pas modifier de manière trop importante la valeur de ce paramètre mais
plutôt de jouer avec les paramètres Taille maximale des URL
(octets) et Taille maximale des requêtes (octets) pour
augmenter la sécurité. La somme des valeurs de ces deux derniers
paramètres doit au passage, être inférieure à celle du paramètre Taille
maximale des en-têtes (octets). Il est recommandé de baisser la
valeur de ce paramètre à 10Ko et de l'augmenter uniquement si des
problèmes sont rencontrés. Cela permet de se protéger de certaines
attaques de type "Buffer Overflow" et "Denial Of Service" (DOS).
-
Le paramètre Taille maximale des charges
utiles (octets) permet de bloquer les requêtes HTTP dont le
corps (lorsqu'il existe; par exemple avec la méthode POST) excède la
valeur configurée. Par défaut ce paramètre n'est pas activé et il
n'est pas recommandé de l'activer sur n'importe quelle règle. En
effet, si ce paramètre est activé avec une valeur trop faible,
certaines application ne fonctionneront plus ! Par exemple, sur la
majorité des sites Web (ex. :
http://www.laboratoire-microsoft.org), les données
d'identification sont envoyée via la méthode POST pour authentifier
les utilisateurs. Si la valeur de la charge utile est trop faible,
l'authentification sera impossible.
|
-
Le paramètre Taille maximale des URL (octets) permet
de bloquer les requêtes HTTP dont l'URL demandée dépasse le seuil
configuré (par défaut, la limite est de 10240 octets). Il peut
s'avérer très intéressant de réduire la taille prédéfinie à une
valeur plus faible (ex. : 512 octets ou 1024 octets) surtout dans le
cadre d'une publication de serveur Web. En effet, cela empêcherait
un éventuel pirate d'utiliser un script dans la barre d'adresse.
Dans l'exemple ci-dessous, la requête HTTP tente de télécharger le
fichier
http://www.laboratoire-microsoft.org/inc/css/site.css. Si la
taille maximale autorisée pour les URL est configurée à 15, alors la
requête sera bloquée par le serveur ISA car l'URL de cet exemple
(entourée en rouge) fait 17 caractères (le caractère "/" est aussi
compté).

-
Le paramètre Taille maximale des requêtes (octets) permet de
limiter la longueur des paramètres envoyés via la méthode GET au sein d'une
requête HTTP. Il peut être intéressant de réduire la valeur de cette option
au même titre celle de la taille maximale des charges utiles (c'est-à-dire
pour limiter les attaques de type "SQL injection"). Bien évidemment si la
taille configurée est trop basse cela posera des problèmes pour afficher
certains sites (exemple : moteurs de recherche) ! Dans l'exemple ci-dessous,
on tente d'effectuer une recherche sur le site
http://www.google.fr avec les mots clefs
laboratoire+microsoft. Si la taille maximale des requêtes est limitée à 30
alors notre requête HTTP sera bloquée car sa longueur est de 35 caractères
(le caractère "?" n'est pas compté). La chaîne de caractères passée en
paramètre dans notre exemple (recherche sur les mots laboratoire et
microsoft) est encadrée en rouge dans la capture d'écran ci-dessous.

-
La paramètre Vérifier la normalisation, lorsqu'il
est activé, bloque toutes les URLs contenant des caractères d'échappement
(ex. : \n).
-
Le paramètre Bloquer les caractères étendus permet
de bloquer toutes les URLs contenant des caractères non présents dans jeu de
caractère ASCII. Certains caractères des jeux DBCS et latin-1 (ou
ISO-8859-1) seront notamment bloqués. Par exemple, lorsque cette option est
activée, si une page Web, une image ou un fichier possède des accents, il
sera bloqué par le filtre HTTP au niveau du serveur ISA. De plus
l'activation de ce paramètre peut aussi poser problème avec Outlook Web
Access (OWA) ou bien encore Sharepoint Portal Server. Dans l'exemple
ci-dessous, on peut remarquer que la version française d'OWA fait appel à
des caractères latin-1 (l'accent de boite de réception) directement dans
l'URL de certaine page :

-
Le paramètre Bloquer les réponses contenant un exécutable Windows
permet de bloquer le téléchargement d'exécutables. Lorsque ce paramètre est
activé, le serveur ISA vérifie que le fichier commence bien par la chaîne de
caractère "MZ" (cela permet au serveur de s'assurer que le fichier est bien
un exécutable Windows).

|
Le filtre HTTP permet aussi d'agir au niveau des
méthodes utilisées dans les requêtes HTTP. Trois actions sont possibles
:
-
Autoriser toutes les méthodes (choix
sélectionné par défaut)
-
Autoriser uniquement les méthodes spécifiées
-
Bloquer les méthodes spécifiées (autoriser
toutes les autres)
Il peut par exemple s'avérer particulièrement
intéressant de bloquer toutes les méthodes sauf GET et POST sur
une règle d'accès à Internet. Ceci évite que certains logiciels ou
certaines applications Web (Windows Update, MSN Messenger, OWA...)
utilisant des méthodes exotiques (méthodes non définies dans la RFC
2616) soient utilisées par les ordinateurs clients. Outlook Web Access
un est l'exemple type d'une application utilisant des méthodes non
standard. On peut notamment citer les méthodes SUBSCRIBE, SEARCH, POLL
et PROPFIND qui gèrent des fonctions spécifiques comme l'affichage des
nouveaux messages (la petite pop-up qui apparaît lorsqu'un nouveau
message vient d'être téléchargé) ou bien encore la fenêtre de rappel du
calendrier. |
 |
Il faut donc se montrer vigilant lorsque vous configurez le blocage de
méthodes. Le mieux restant bien sur d'analyser à l'aide d'Ethereal ou du
Moniteur réseau Microsoft l'ensemble des applications utilisant le protocole
HTTP en place dans l'entreprise...
L'onglet Méthodes, peut aussi être utilisé dans le cadre d'une
publication de serveur Web dans le but de limiter les actions réalisables par
les clients Web sur le serveur interne. Dans ce dernier cas, vous devrez bien
entendu connaître les méthodes HTTP nécessaire au bon fonctionnement des sites
publié (les méthodes les plus employées restant GET et POST). Voici les autres
méthodes HTTP (non standard) souvent utilisées :
- BCOPY, BDELETE, BMOVE, BPROPPATCH, MKCO, POLL, PROPFIND, PROPPATCH,
SEARCH et SUBSCRIBE utilisées par Outlook Web Access en mode
"Expérience étendue". Ce mode est uniquement sous Internet Explorer
puisque seul IE supporte ces méthodes HTTP non standard !!!
- PROPFIND, BMOVE et BDELETE utilisées lorsqu'un compte Hotmail est
configuré dans Outlook pour utiliser le protocole HTTP (et non les
protocoles de messagerie classique comme SMTP, POP3, IMAP4,...). Lorsque ces
deux méthodes sont bloquées par le serveur ISA, voici le message d'erreur
affiché par Outlook :

Le filtre HTTP offre aussi la possibilité de bloquer un paquet utilisant le
protocole HTTP et ce en fonction de n'importe quel critère ! Le principe est
simple : il suffit de définir une chaîne de caractère prédéfinie nommée
signature ainsi que la partie du paquet qui doit être analysée (URL, en-tête
ou corps dans le cas d'une requête; en-têtes ou corps dans le cas d'une
réponse). Si cette signature est rencontrée par le serveur ISA dans la partie
configurée alors le paquet est bloqué.
La principale utilité du blocage de signature est
d'empêcher le fonctionnement des applications utilisant l'encapsulation HTTP.
Il est par exemple possible d'interdire l'accès à Firefox tout en
autorisant uniquement Internet Explorer :

Pour ce faire, il faut trouver une chaîne de caractères
permettant d'identifier l'application (Windows Messenger, Internet
Explorer, Firefox, eMule...). Le champ User-Agent
est généralement utilisé pour définir le nom de l'application. Pour retrouver la
signature d'une application utilisant le protocole HTTP, il suffit de réaliser
une analyse de trames et de visualiser la valeur de ce champ. Lorsque
l'on réalise une capture de trames à l'aide du logiciel Ethereal avec le
navigateur Firefox, on obtient le résultat suivant :

On remarque qu'il existe deux manières de bloquer
l'application Firefox :
-
en utilisant la signature Firefox
-
en utilisant la signature Gecko ce qui aura pour
conséquence de bloquer tous les navigateurs basés sur le moteur Gecko (Firefox,
Netscape, Mozilla...).
 |
Pour configurer le blocage de signature, il faut faire un
clic droit sur une règle d'accès ou d'une règle de publication faisant
intervenir les protocoles HTTP, HTTPS ou Serveur HTTPS, puis sélectionner
Configurer HTTP. Il suffit ensuite de cliquer sur l'onglet Signatures
pour pouvoir bloquer des applications. Ci-contre, un exemple de configuration où
de nombreux logiciels ont été ajoutés. On peut notamment remarquer
-
des logiciels de Peer to Peer (P2P) comme
eMule, Kazaa, Morpheus ou BitTorrent.
-
des logiciels de messagerie instantanée
comme MSN Messenger ou Windows Messenger
-
des navigateurs comme Internet
Explorer...
Si l'une de ces applications tente d'accéder à
Internet, un message d'erreur spécifique s'affichera. Ce message dépend
bien évidemment de l'application considérée et varie d'un cas à un
autre. Ci-dessous, voici l'erreur renvoyée par le navigateur Internet
Explorer 6.0 lorsque sa signature (MSIE 6.0) a été bloquée :

|
Le tableau ci-dessous récapitule les signatures des applications courantes
qu'un administrateur système peut être amené à bloquer :
| Nom de
l'application |
Champ de l'en-tête HTTP |
Signature |
|
BitTorrent |
User-Agent |
BitTorrent |
| MSN Messenger |
User-Agent |
MSN Messenger |
| Windows Messenger |
User-Agent |
MSMSGS |
| Netscape |
User-Agent |
Netscape |
| Kazaa |
P2P-Agent |
Kazaa |
| eDonkey (eMule) |
User-Agent |
e2dk |
| Gnutella |
User-Agent |
gnutella |
| Internet Explorer |
User-Agent |
MSIE 6.0 |
| Yahoo Messenger |
Host |
msg.yahoo.com |
Comme nous l'avons vu plus haut, lorsqu'un client effectue une requête à un serveur WEB, il envoie un certain nombre d'informations à ce serveur via les en-têtes HTTP, et il en est de même lorsque le serveur répond au client. Ces en-têtes peuvent contenir des informations sur le type de navigateur du client, le nom NetBios du proxy par lequel le client est passé, la page par laquelle il est passé avant d'arriver sur cette page, etc. dans le cas d'une requête HTTP, et sur le type de serveur WEB, la dernière date de modification de la page, etc. dans le cas d'une réponse HTTP.
Afin de mieux comprendre, voici un exemple avec quelques en-têtes :
En-tête |
Valeur |
Description |
| USER-AGENT |
CCBot/1.0 (+http://www.commoncrawl.org/bot.html) |
Chaine de caractères identifiant le navigateur du client |
| REMOTE_ADDR |
10.20.40.101 |
Adresse IP du client |
| SERVER |
Microsoft-IIS/6.0 |
Chaine de caractères identifiant le type de serveur et sa version |
| VIA |
|
Nom NetBIOS du premier proxy par lequel passe le client |
| REFERER |
|
Page sur laquelle se trouve le lien ayant permit d'arriver ici |
Pour des raisons évidentes de sécurité, on peut souhaiter que ces informations ne soient pas divulguées. Il peut même être
intéressant dans certains cas de renvoyer ces en-têtes mais en les modifiant. En effet, il a été prouvé que dans 90% des attaques de serveurs WEB, le pirate tente d'abord d'obtenir le type de serveur ainsi que sa version, ce qui est assez aisé, afin d'exploiter les failles connues de ce serveur, puis laisse tomber. En se servant des fonctions du filtre HTTP, il est parfaitement possible de renvoyer un nom de serveur factice.
 |
Par exemple, si l'on possède un serveur Apache, identifié par la chaine "Apache/1.3.33 (Linux) mod_perl/1.29 mod_ssl/2.8.22 OpenSSL/0.9.7f", on peut parfaitement modifier le champ "SERVER" des en-têtes HTTP et ainsi renvoyer "Microsoft-II/6.0",
chaîne qui identifie un serveur IIS.
Bien évidemment, cette technique est à utiliser dans le cas d'une publication de serveur. Une fois dans les paramètres du filtre HTTP de cette règle de publication et dans l'onglet En-têtes, il suffit de cliquer sur le bouton Ajouter et de choisir si l'on souhaite modifier les en-têtes dans une requête ou dans une réponse HTTP, puis de spécifier le nom du champ que l'on souhaite modifier ou supprimer.
Trois actions s'offrent alors à nous :
-
Envoyer l'en-tête original : cette option présente relativement peu d'interêt, en effet si l'on souhaite renvoyer l'en-tête d'origine, autant ne rien faire, cela déchargera le serveur ISA.
-
Supprimer l'en-tête de la réponse : cette option être utile si l'on souhaite tout simplement ne pas envoyer un champ des en-têtes HTTP, mais peut être dangereuse car du point de vue d'un eventuel attaquant, cacher des informations de ce genre peut revenir à dire qu'il a des failles importantes derrière, ou du contenu sensible.
-
Modifier l'en-tête dans la réponse : cette option est, selon moi, celle qui est la plus intéressante car personne ne pourra se douter que vous avez modifié un champ d'en-têtes.
La dernière étape est bien évidemment de saisir la nouvelle valeur que l'on souhaite renvoyer pour ce champ d'en-têtes. |
Une autre utilisation interressante, toujours dans un but de sécurité, pourait être de modifier le champ "VIA", qui correspond au nom NetBIOS du premier proxy utilisé par le client. En effet, dans le cas d'une organisation, le premier proxy est toujours un proxy du réseau interne de l'entreprise, et le dévoiler est en quelque sorte une brèche dans la sécurité de l'organisation.
Il va de soi que cette modification possède un sens uniquement sur une règle d'accès, en effet son interêt serait assez limité, pour ne pas dire nul, sur une règle de publication.
Uniquement pour cet en-tête, il possible d'agir sur la valeur qui sera renvoyée sans passer par le menu précédent. En effet, dans la fenêtre permettant de configurer le filtre HTTP, on peut également trouver un encart nommé "Via l'en-tête". C'est ici que l'on pourra modifier la valeur cu champ VIA qui sera retournée par le serveur.
On dispose tout d'abord de deux options :
- Envoyer l'en-tête par défaut : de la même manière que précedement, cette option ne présente aucun interêt.
- Modifier l'en-tête dans la demande et la réponse : lorsque cette option est choisie, le champ de texte situé en dessous va devenir accessible.
La dernière étape est de saisir le nom NetBIOS que l'on souhaite que le serveur renvoie.
|
 |
Une autre fonctionnalité du filtre HTTP est la possibilité de bloquer
certains types de fichiers. Voici le principe de fonctionnement du blocage
d'extensions :
- Lorsque le serveur ISA reçoit une requête HTTP, il analyse l'URL
demandée.
- Si cette URL contient une chaîne de caractère encadré par le caractère
"." et le caractère "/" (ou le caractère "." et le caractère "?"), alors le
serveur ISA consulte le filtre HTTP pour déterminer si cette chaîne de
caractères fait partie ou non des extensions autorisées.
Pour mieux comprendre le fonctionnement du blocage des extensions voici un
exemple :
 |
Les extensions correspondant à des scripts et à des
exécutables (vbs, bat, exe...) sont bloquées au niveau d'une règle
d'accès à Internet. Le tableau suivant montre la réaction du serveur ISA
à plusieurs exemples d'URLs :
|
On remarque que lorsque l'URL contient plusieurs extensions, seule la
première est analysée par le serveur ISA. Dans le troisième cas, le
serveur ISA remarque qu'un fichier possédant l'extension .php est
demandé. Ce type d'extension étant autorisé, le serveur ISA interrompt
son analyse et accepte le paquet (même si la fin de l'URL contient
l'extension .exe qui n'est pas autorisée!!!). Le système de filtrage des extensions
peut donc être contourné mais il est vrai que de telles URLs se rencontrent
rarement.
Il est aussi possible de bloquer directement des types MIME (Multipurpose
Internet Mail Extensions) via cet onglet Extensions. Voici une liste des
principaux types MIME (*) :
| application/pdf |
fichiers utilisés par Adobe Reader 7.0 |
| application/rtf |
fichiers texte enrichis |
| application/zip |
fichiers compressés au format zip |
| audio/x-wav |
fichiers audio au format WAV |
| image/gif |
image au format GIF |
| image/jpeg |
image au format JPEG |
| text/html |
fichiers contenant du code HTML |
(*) La liste complète des types MIME est
disponible sur le site de l'IANA
à cette
adresse.
|
Il existe un autre moyen d'autoriser et/ou de
bloquer certaines extensions de fichier. Cela passe tout simplement
par l'utilisation de l'élément de stratégie Type de contenu dans
les propriétés des règles d'accès et/ou des règles de publication. Le
système de type de contenus fonctionne d'ailleurs de manière similaire
au filtre HTTP pour analyser le contenu du paquet HTTP.
L'exemple ci-contre montre la configuration du type
de contenus Documents HTML. Cet élément de stratégie est
préconfiguré et contient par défaut des extensions ainsi que des types
MIME. |
 |
Lorsque l’on sauvegarde une règle d’accès spécifique ou bien
lorsque l’on réalise une sauvegarde générale des paramètres du serveur ISA, la
configuration du filtre HTTP (qui peut être différente pour chaque règle faisant
intervenir le protocole HTTP) n’est pas enregistrée.
 |
Il est cependant possible de stocker la configuration du
filtre HTTP sur une règle donnée dans un fichier au format XML à l'aide d'un
script présent sur le CD-ROM d'ISA Server (dans le répertoire SDK\SAMPLES\ADMIN). Ce script nommé HttpFilterConfig.vbs
permet aussi la restauration d'une configuration du filtre HTTP. Voici la
syntaxe de ce script nommé HttpFilterConfig.vbs :
HttpFilterConfig.vbs export "Nom de la règle" "Chemin de la sauvegarde"
|
Dans le cas d'une restauration des paramètres du filtre HTTP sur une
règle donnée, il suffit de remplacer export par import !
Sommaire
1. Introduction au filtrage applicatif
1.1 Les limitations inhérentes aux règles d'accès
1.2 Présentation des filtres applicatifs d'ISA Server 2004
2. Etude du protocole HTTP (Hyper Text Transfer Protocol)
2.1 Présentation du protocole HTTP
2.2 Fonctionnement d'une requête HTTP
2.3 Fonctionnement d'une réponse HTTP
3. Le filtre HTTP
3.1 Présentation du filtre HTTP
3.2 Les options générales du filtre HTTP
3.3 Le blocage de méthodes
3.4 Le blocage de signatures
3.5 La suppression ou la modification d'en-têtes
3.6 Le blocage des extensions
3.7 Sauvegarder/restaurer une configuration du filtre HTTP
Conclusion
|
|
 |
Pour afficher ou poster un commentaire, cliquez sur ce lien : Forum-Microsoft
|
|