PATTERN MATCHING ET DETECTION D'INTRUSION


Prsentation du problme

Le dveloppement des rseaux et de l'Internet rend les problmes de scurit, de confidentialit, de disponibilit et d'intgrit excessivement proccupants . Il s'avre primordial de pouvoir dtecter une tentative d'attaque distance afin de prendre les dispositions ncessaires . Beaucoup de ces attaques consistent en des utilisations dtournes de la suite de protocoles TCP/IP, le "langage universel" des machines communicantes. Des dispositifs tels que les firewalls ( pare-feu ) permettent de limiter la porte de ces attaques mais il existe de multiples faons de contourner ces lignes de dfense; sans parler des problmes de failles logicielles qu'un attaquant avis pourra exploiter son avantage. Bien souvent, il est ncessaire d'analyser les fichiers de log produits par les sniffers ( "mouchards" ) pour dtecter les attaques . Pour des rseaux forte frquentation, cette tche peut s'avrer extrmement fastidieuse voire impossible pour un oprateur humain . Cependant, en raison de la structure des attaques sur TCP/IP, il est possible de dgager des "signatures" caractrisant trs prcisment ces attaques, permettant l'utilisation d'outils de recherche de motifs dans les fichiers de log.

Il faut tout de mme tre conscient du fait que les outils de recherche de motifs ne peuvent pas tre utiliss "tels quels" : en effet, les logs reprsentent des fichiers de trs grande taille et de nombreuses signatures diffrentes sont envisageables selon ce que l'on veut dtecter . Il faut donc pouvoir s'assurer que les outils de recherche sont bien optimiss pour cette tche en termes d'utilisation des resources telles que la mmoire; voire leur adjoindre des fonctionnalits complmentaires s'ils ne suffisent pas . Enfin, l'efficacit d'un systme de dtection d'intrusion, de faon gnrale, dpend de sa configurabilit ( ie possibilit de dfinir de nouvelles spcifications d'attaques et de les rajouter ), de sa robustesse ( ie sa rsistance aux "plantages" ) et de la faible quantit de "faux-positifs" ( fausses alertes ) et de "faux-ngatifs" ( attaques non dtectes ) qu'il gnre .


Etat de l'art

Qu'est ce que la dtection d'intrusion ?

D'aprs la dfinition mentionne dans la FAQ IDS, la dtection d'intrusion consiste en un processus de dcouverte et d'analyse de comportement hostile dirig contre un rseau. Actuellement deux types de systmes de dtection d'intrusion existent et ont des champs d'action complmentaires : les systmes orients rseau ( ou Network based Intrusion Detection software, soit NIDS ) et les systmes orients poste ( Host based IDS, ou HIDS ) .

Les systmes orients poste ont pour rle de dterminer si un ordinateur donn est en train d'tre attaqu ou si celui-ci a dj t attaqu, rsultant en une compromission de la scurit et de l'intgrit du systme . La surveillance aprs attaque se fait gnralement par analyse des fichiers prsents sur la machine . Les principaux produits sur le march considrs comme des HIDS sont Tripwire ( logiciel comparant les sommes de contrle - checksums - des fichiers sensibles avec les valeurs calcules pour un tat "sain" ), les logiciels d'anti-virus, les logs systme come syslog ...

Les systme orients rseau s'occupent de surveiller le trafic sur le rseau en confrontant les paquets dtects un ensemble de signatures ou de rgles . Si les rgles sont violes ou si une signature s'applique, le NIDS enregistre l'vnement comme une attaque . Les principaux produits utiliss par la communaut informatique sont Snort, Real Secure de ISS, et Network Flight Recorder .

Les systmes de dtection d'intrusion comportent des lments communs ( modle CIDF, Common Intrusion Detection Framework ):


modle CIDF et interactions entre composants d'un systme de dtection d'attaques contre les scripts CGI

Approches comportementales

La dtection d'intrusion a pour but de relever un comportement hostile . Il faut donc initialement dfinir ce qu'on entend par "comportement hostile" . Deux grandes approches existent pour conceptualiser ceci : la dtection par anomalie ( anomaly detection ) et la dtection par mauvaise utilisation ( misuse detection ) .

Dveloppements actuels en dtection d'intrusion

Pour implmenter ces approches, diffrentes mthodes sont actuellement dveloppes et utilises :

Pour ce projet, nous avons choisi d'utiliser l'approche par dtection de mauvaise utilisation . Ce choix se justifie par le fait que les attaques sur les protocoles TCP/IP sont bien connues et conceptuellement assez simples. La mthode choisie est proche de celle de langage par spcification . Dans l'avenir, il est possible que le projet volue de faon se placer en position "hybride", utilisant plusieurs aspects de mthodes diffrentes .


les attaques sur TCP/IP : gnralits

Prsentation rapide de TCP/IP

La suite de protocoles Transmission Control Protocol/Internet Protocol tient lieu de standard mondial pour les communications sur les rseaux entre machines . Le modle sous-jacent est un modle de communication en couches, prsente de la plus "haute" la plus "basse" :

(dessin de la structure en couches)
structure en couche : exemple du navigateur web

Dans le cadre de ce projet, nous nous intresserons donc aux attaques dont le champ d'action ou le mdium se trouve dans la couche Transport ou la couche Rseau. Beaucoup d'attaques portent galement sur la couche applicative, mais elles sont trs diffrentes de celles dcrites ici .

La structure en couches de TCP/IP induit le concept d'encapsulation de paquets : chaque couche de la source est suppose envoyer des donnes la couche correspondante de la destination . Ces donnes se prsentent sous la forme de paquets, chacun comprenant les donnes utiles prcdes par un en-tte ( l'en-tte fournit des informations la couche tandis que les donnes peuvent tre entres par l'utilisateur, comme une requte HTTP par exemple ) . Or les couches ne peuvent discuter directement, puisqu'elles sont empiles . Ainsi, la couche application de la source doit d'abord passer son paquet la couche Transport, qui utilisera celui-ci en tant que donnes utiles et y rajoutera son propre en-tte, et ainsi de suite jusqu' la couche physique . On obtient une sorte de "poupe russe" qui sera dpile par la machine faisant office de destination : les informations contenues dans les en-ttes respectifs sont analyses et les donnes sont passes la couche suprieure pour traitement ultrieur; d'o la notion d'encapsulation . A priori les informations contenues dans un en-tte d'une couche donne ne sont pas redondantes avec celle de l'en-tte d'une autre couche, si bien que chaque couche reste indpendante l'une de l'autre . Cette proprit offre des possibilits d'attaques comme nous le verrons par la suite .

TCP/IP comprend trois protocoles principaux : TCP et UDP, qui se situent au niveau de la couche transport; et ICMP ( Internet Control Message Protocol ) qui se situe au niveau IP . UDP est un protocole sans connexion et sans garantie d'arrive des paquets . Il en rsulte une plus grande rapidit mais avec sans garantie que toutes les donnes arrivent comme prvu. Ce protocole est donc plus adapt aux transmissions courte distance, comme dans les intranets par exemple . Par opposition, TCP est un protocole orient connexion, cette connexion tablie entre la source et la destination permettant d'assurer que toutes les donnes ont bien t transmises . La connexion TCP est tablie lors du handshake TCP o les machines s'changent leurs numros d'acquittement initiaux respectifs . Par la suite, chaque paquet TCP contient ces deux numros d'acquittement ( et un "flag" Acknowledge ), incrments selon la taille des donnes envoyes, ce qui permet de dterminer exactement o en est le transfert de donnes : chaque paquet qui n'a pas t "acquitt" est rmis par sa source. TCP assure de cette faon que tous les paquets envoys sont reus . ICMP est un protocole de "debugging" des rseaux : il est utilis par les routeurs pour informer une source d'un problme de communication avec une machine distante, ou bien pour vrifier qu'une machine est atteignable sur le rseau ( le fameux "ping" ) . Le traffic ICMP peut tre broadcast ( ie tre destin toutes les machines d'un rseau en mme temps ), ce qui peut tre utilis dans une optique d'attaque .

les diffrents types d'attaque

Lorsque l'on cre un outil, on n'a pas forcment conscience que celui-ci peut quelquefois tre utilis des fins trs diffrentes de celles prvues au dpart. Ainsi, de mme qu'un marteau sert initialement enfoncer des clous mais peut galement tre utilis pour provoquer des dommages physiques sur une personne, il existe des utilisations dtournes de TCP/IP permettant de mener des "attaques" contre des machines ou des rseaux entiers . Nous nous intresserons ici aux attaques que l'on peut mener via ou sur les couches Transport et IP . Ces attaques sont de trois types:


Descriptions et signatures des principales attaques

La notation s'inspire des expressions rgulires ... ainsi {a,b} veut dire "soit a, soit b" et [ a - b] " n'importe quel lment entre a et b". && et || sont respectivement le ET et OU logiques.

Pour les signatures exactes, consulter le fichier signaturs.pl dans le repertoire logre.

Explicitons tout d'abord le format de sortie des " sniffers " ( convention TCPdump ) :

-TCP

Timestamp src.sport > dst.dport : flags data-seqno ack window urgent options

o flags est un sous-ensemble non-vide de FLAG = { S ( SYN ), F ( FIN ), P (PUSH ), R ( RST ) , . ( NOFLAG : pas de flag activ )}

data-seqno est de la forme Start-SN :End-SN( End-SN - Start-SN )

ack Vaut soit ACK ack-num ou est vide (). Idem pour urgent : URG ou vide ().

La principale option qui nous intresse est l'option de fragmentation : (frag ID :size@offset{+, }) ( le + indique que le paquet n'est pas complet )

L'en-tte TCP contient des champs "rservs" pour une ventuelle mise niveau du protocole . Si les bits correspondants sont activs, le sniffeur renvoie un message d'erreur ( le paquet TCP est non valide ) .

-UDP

timestamp src.sport > dst.dport : udp data

-ICMP

timestamp src > dst : icmp : message

Les champs laisss par dfaut ou omis peuvent prendre n'importe quelle valeur. On omettra en particulier le champ timestamp pour les attaques ponctuelles.

Attaques ponctuelles

Les attaques dites "ponctuelles" sont celles dtectables sans problme sur une seule ligne du fichier de log . La plupart de ces attaques consistent en un seul paquet trs particulier ( au sens o il est aisment identifiable ), les autres sont bases sur la rptition ( en vue d'une inondation ) d'un paquet anormal, ce qui rend par consquent leur dtection possible sur un seul paquet. On trouve une bonne description des paquets anormaux les plus communs dans l'article de Karen Frederick.

TCP :

-LAND

L'attaque consiste envoyer un paquet o la source et la destination sont les mmes : certains systmes d'exploitation ne savent pas grer ce type de paquets et on assiste un "plantage".

src.sport > src.dport

-BROADCAST TCP

tcp est un protocole orient connexion, un broadcast n'a pas lieu d'tre.

src.sport > [ 0 - 255 ].[ 0 - 255 ].[0 - 255 ].{0,255}.dport

-ATTAQUES SUR PORTS

tentative d'atteindre des ports interdits ou suspects : 0, ports typiques utiliss par les chevaux de troie ... Cette signature est parmi les plus vulnrables ( voir "les limites du modles" )

src.sport > dst.{0, 31337, ...} ( une liste de ports se trouve ici, une autre est accesible dans le rpertoire logre)

- WinNUKE

Cette attaque provoque un cran bleu sur les machines windows : le systme ne sait pas grer les paquets "urgents" destins au port netBIOS sous certaines conditions.

src.sport > dst.139 : flags data-seqno ack Window URG

- CRAFTED PACKETS

Ces paquets sont construits de toutes pices, en s'loignant dlibrment des spcifications dcrites dans les RFC. Les ractions des OS devant de tels paquets sont donc souvent imprvisibles . Dans le meilleur des cas, ces paquets sont ignors, sinon ils constituent un outil de choix pour le scanning car il ne sont pas mentionns dans les logs du systme ( seul un sniffer peut les dtecter ).

Src.sport > dst.dport : S && Flag data-seqno ack window urg

O Flag est un sous-ensemble non vide de { F ( FIN ), P (PUSH ), R ( RST ) }

(cas particulier : XMAS PACKETS -> Flag = { F ( FIN ), P (PUSH ), R ( RST ) } et urg = URG et ack = ACK ack-num)

Src.sport > dst.dport : S data-seqno ack window URG

src.spot > dst.dport : . data-seqno window ( paquet NULL )

- SYN FRAG

les paquets de synchronisation de connexion ne devraient jamais tre fagments, vu leur taille . De faon gnrale, tout paquet fragment au niveau de l'en-tte ( size < 20 octets ) est hautement suspect. Il peut s'agir d'un moyen d'chapper aux rgles d'accs des firewalls qui ne font pas de reconstruction des paquets en transit : le paquet que voit passer le firewall est destin un port autoris par la liste de contrle d'accs ( ACL ), mais lorsque la machine de destination reconstruira le paquet, le port originel peut tre "chevauch" par les donnes d'un paquet, et donc tre remplac ( voir attaque "teardrop"). Plus simplement, la fragmentation peut servir duper les IDS effectuant un simple pattern matching sur les paquets, la recherche d'une signature donne . La fragmentation permet ainsi de "diluer" dans la masse l'attaque, ou encore de la "brouiller" et la rendre indtectable par pattern matching simple ( voir l'article de Hoglund pour des exemples )

Src.sport > dst.dport : S data-seqno ack window (frag ID :size@offset{+, })

( placer dessin ici )

- SYN + DATA

Il peut s'agir d'une tentative d'chapper la dtection : il n'est pas prvu dans les RFC que des donnes circulent lors du handshake. Certains IDS ne s'occupant pas des paquets contenant des donnes, ces paquets anormaux passent travers les filtres .

Src.sport > dst.dport : S Start-SN : !Start-SN

(ie End-SN diffrent de Start-SN)

UDP :

- ECHO-CHARGEN :

Cette attaque revient tablir une boucle infernale faisant converser indfiniment les ports echo (service renvoyant les caractres qu'on lui prsente en entre) et chargen ( service gnrateur de caractres alatoires ). Ce genre de traffic tant hautement inhabituel, l'attaque est dtectable avec un seul paquet, mme si elle s'apparente une attaque par flooding donc temporelle .

(Src.7 > dst.19 || src.19 > dst.7 ) : udp

- FRAGGLE-AMPLI

L'attaque fraggle ( de mme que l'attaque smurf, voir plus bas ) permet tout un chacun d'utiliser de grosses ressources pour frapper la victime, sans pour autant les possder . L'ide sous-jacente est d'envoyer une requte quelconque au nom de la victime auprs d'un rseau choisi qui servira "d'amplificateur" . Ainsi, la victime recevra les rponses (non sollicites ) d'un rseau entier, ce qui peut reprsenter un grand nombre de paquets traiter d'un seul coup, entrainant ainsi un Dni de Service . Bien entendu, les paquets d'initiation de l'attaque tant "maquills" ds le dpart, il est fort improbable que l'attaquant soit retrouv .

Src.sport > [0- 255].[0 - 255].[0 - 255].{0,255}.{19,7} : udp

Ici src est la victime ... et le rseau vis va faire office d'amplificateur d'attaque . Dans notre cas , la signature peut tre allge en indiquant simplement l'adresse broadcast du rseau protg.

- FRAGGLE-VICTIME

idem, mais cette fois-ci dst est la victime .

Src.{19,7} > dst.dport : udp

Ce pattern sera dtect n = m * r fois, o r est la taille du rseau amplificateur et m le nombre de requtes envoy par l'attaquant . On voit bien ici comment le rseau amplificateur permet d'accroitre linairement l'ampleur de l'attaque.

ICMP :

- WINFREEZE

Cette attaque consiste envoyer des informations de reroutage erronnes la victime, notamment en lui faisant "croire" que la victime est elle-mme la prochaine tape sur la route vers la destination voulue . Ainsi, lorsque la victime souhaite contacter cette destination, une boucle se cre avec les consquences attendues : un Dni de Service .

Src > dst : icmp : redirect IP to host dst

- SMURF-AMPLI

Il s'agit d'une attaque de type Fraggle, version ICMP .

src > [ 0 - 255 ].[ 0 - 255 ].[0 - 255].{0,255}:icmp: echo request


Attaques temporelles

Sous cette dsignation, sont regroupes toutes les attaques dont la trace dans les fichiers de log est rpartie sur plusieurs lignes ( ie paquets ) parce que les paquets qui composent ces attaques, pris individuellement, sont plus ou moins inoffensifs : les attaques temporelles proprement parler ( scans, balayages et flooding ), pour lesquelles existent un seuil de tolrance ( nombre de connexions maximum autoris avant de considrer qu'il s'agit d'une attaque ); et les attaques par fragmentation ( attaques impliquant un seul paquet mais dcoup en plusieurs morceaux, telles que Teardrop et Ping of Death ).

Les Scans

Lorsque l'on cherche attaquer un ennemi, on passe d'abord un certain temps chercher ses faiblesses pour les exploiter. Les scans ont exactement ce but, puisqu'ils permettent de dterminer d'une part la topologie d'un rseau ( rle des sweeps ou "balayages" ) et d'autre part quels sont les services actifs sur une machine donne, les versions de leurs implmentation ( par exemple Sendmail 8.9.3, etc .. ) , voire quel est son systme d'exploitation ( port scanning ): il suffira ensuite de se renseigner sur les vulnrabilits des implmentations des services recenss ou du systme d'exploitation concern, puis d'exploiter ces failles tout seul ou l'aide d'un programme prt l'emploi ( si ce programme existe, il se trouve l ou l ). Le scan fait donc office de reconnaissance du terrain avant l'assaut.

scan "basique"

L'attaquant envoie des paquets SYN vers les ports qui l'intressent en vue d'tablir une connexion complte (le traditionnel handshake ) .


le 3-way handshake de TCP

Ds que le handshake est fini, la connexion est tablie, indiquant videmment qu'un service tourne sur le port vis . L'attaquant est alors libre de clore la connexion, en gnral sans change de donnes . Ce type de scan basique au possible, ralisable la main avec un client telnet, est cependant des plus mauvais sur le plan de la furtivit, puisque la connexion sera enregistre dans les logs ( le handshake tant complt ). Or d'un point de vue tactique, il est crucial que la reconnaissance soit furtive : d'abord pour ne pas alarmer la cible et ainsi la prvenir d'une attaque future, et ensuite parce que les traces du scan font remonter une adresse IP possde par l'attaquant, permettant une ventuelle identification ( l'attaquant devant rcuprer les rsultats du scan d'une faon ou d'une autre, l'adresse source utilise dans le scan n'est pas maquille et pointe vers une machine dtenue - lgalement ou non ! - par l'attaquant ).

Techniques furtives

Pour plus de furtivit, il est ncessaire de faire appel des techniques plus labores, ayant souvent recours des paquets construits directement par le logiciel de scanning et non plus par le systme d'exploitation ( ce qui ncessite, pour pouvoir lancer ce scan, les droits "root" sur la machine ... condition de plus en plus facile remplir avec le dveloppement des stations personnelles sous linux ) . Les descriptions suivantes sont inspires du manuel de nmap:

TCP SYN scan ( option -sS avec nmap ):

Cette commande fait rfrence la technique de scan "mi-ouvert" (half open), car le handshake est entam mais n'est pas complet. Un paquet avec le flag SYN est envoy vers la cible, comme lors d'une connexion normale, si ce n'est que le paquet a t "forg" par le programme et non par le systme d'exploitation. Si le port est ouvert chez la cible, celle-ci rpond avec un paquet SYN/ACK ( 2e partie du handshake ) . Le systme d'exploitation de la machine de l'attaquant dtecte ce paquet, considr comme non sollicit ( puisque la demande de connexion par SYN n'est pas passe par l'OS ), et y rpond par un paquet RST, fermant ainsi la connexion avant qu'elle n'ai t tablie . Si le port est ferm ( donc inutilis ), la cible rpond par un paquet RST . L' avantage de ce type de scan est qu'il ne sera pas la plupart du temps dtect par la cible ( au sens o la connexion ne sera pas recense ).

TCP stealth scan ( options -sX, -sF, ou -sN):

Ces scans sont encore plus furtifs et consistent en un "mapping invers", ie on va dtecter les ports ferms pour en dduire ceux ouverts. D'aprs la RFC 793 dcrivant TCP, voici les comportements attendus de la part d'une implmentation TCP, pour un port ferm :

L'ide est donc d'envoyer des paquets sans flag RST, et sans ouvrir de connexion, et d'attendre les rponses des ports ferms , pour finalement tablir une carte des ports ouverts par dduction . D'o les techniques "FIN scan" ( paquets FIN faisant office de sonde ), "XMAS scan" ( flags FIN, URG, PSH ) et "NULL scan" ( aucun flag activ ) . La furtivit est meilleure puisque aucune connexion n'est ralise . Ce scan peut aussi permettre de reprer le systme d'exploitation de la cible selon la rponse produite ( elle dpend de l'implmentation TCP de l'OS : par exemple ces scans ne marchent pas sur des cibles Windows NT/95 ).

UDP scan:

Il est possible d'utiliser UDP pour scanner les ports, afin de contourner les IDS surveillant le trafic TCP uniquement. Cependant les rsultats obtenus sont beaucoup plus alatoires, UDP tant un protocole sans connexion, ce qui ne garantit pas qu'un paquet lors du scan atteigne toujours la machine cible .

FTP bounce attack:

on utilise ici le fonctionnalit de proxy des serveurs ftp : selon la rfc 959, les serveurs doivnt permettre d'envoyer des fichiers vers n'importe quelle destination sur internet . Ceci laisse le champ libre pour tous types d'attaques, l'attaquant se faisant passer pour le site ftp utilis pour le rebond .

Lorsqu'on veut valuer la difficult de dtecter un scan, on est confront un paradoxe . En effet les scans peuvent tre la fois trs faciles et trs difficiles reprer : la dtection par signature permet de reprer les scans les plus "bruyants", o une centaine de ports est contacte en moins de 30 secondes. Les scans ayant recours aux techniques furtives dcrites plus haut ne sont pas relevs par syslog puisqu'il n'y a pas de connexion tablie, mais sont facilement reprables l'aide d'un sniffeur puisque les paquets sont anormaux . Pourtant, les dsavantagse majeurs de la dtection par seuil sont:

La difficult est donc de trouver un bon compromis au niveau du seuil afin de limiter le nombre de ces "faux ngatifs". Malheureusement, on peut tre sr que les scans non dtects proviennent des adversaires les plus dangereux : ceux qui connaissent les failles des systmes de dtection .

les signatures des attaques

Ici la difficult, d'un point de vue algorithmique, est qu'il faudrait faire appel des "meta-patterns" pour modliser ces attaques. Voici quelques exemples :

- PORT SCAN ( dterminer les services prsents sur une machine )

Time1 src.sport1 >dest.dport1 && ( 0 ou plusieurs entres quelconques ) &&

... && ( 0 ou plusieurs entres quelconques ) &&

Timen src.sportn > dest.dportn

Avec Timen - Time1 < 1000 ms et dport1 != ... != dportn . n correspond au nombre maximal de ports "scannables" avant de considrer qu'il s'agit d'une attaque.

- MITNICK ATTACK (TCP) ( camouflage d'IP )

PORT SCAN sur dport &&

Time1 src1.sport1 > dest.dport : S && ( 0 ou plusieurs entres quelconques ) &&

Time2 src2.sport2 > dest.dport : flags data-seqno ACK

La signature dcrit ici "l'attaque historique" mene par Kevin Mitnick contre le rseau de Tsutomu Shimomura, du point de vue de la machine attaque ( dest ). Dans ce cas particulier, il existait une " relation de confiance " ( . rhosts ) entre src1 et dest.On prfrera la signature "TCP HIJACK" pour une dtection plus gnrale des dtournements de connexion.

- STICK ( dsactivation distance de certains NIDS par dni de service )

Time1 src.sport1 >dest.dport R && ( 0 ou plusieurs entres quelconques ) &&

... && ( 0 ou plusieurs entres quelconques ) &&

Timen src.sportn > dest.dport R

Timen - Time1 < 1000 ms.

Contrairement aux attaques ponctuelles et assimiles, la dtection dans les logs des attaques temporelles devrait obligatoirement se faire en analysant plusieurs lignes ( comme on l'a vu plus haut, certaines attaques ponctuelles qui sont en fait du flooding sont facilement dtectables en raison du port utilis, etc ... ). Pour viter d'utiliser des motifs trop lourds, une alternative intressante est de faire appel une structure ractive : chaque fois que nous rencontrons un paquet qui pourrait faire partie d'une attaque, la structure volue jusqu' atteindre un niveau critique dclenchant une alerte . Concrtement, ce niveau critique peut tre un seuil de caractrisation de flood ou de scan, ou bien une taille totale pour un paquet fragment ... Nous associons donc chaque type d'attaque un objet la dcrivant, et une instance sera cre chaque fois qu'une attaque est potentiellement en cours, faisant office de "mmoire" . Ces objets hritent des classes suivantes, construites pour reflter la structure des logs TCPdump ( j'ai omis les constructeurs ) :

classe ICMP  {
	string icmp_type;
	}

classe TCP {
	list of strings flags;
	/ flags est un sous-ensemble de { SYN,FIN,PSH,URG,ACK,RST } ou bien vide
	list of ints data-seqno;
	/ data-seqno = { Start-SN ;End-SN ]
	int acknum;
	/ si le flag ACK n'est pas activ, acknum = -1
	}
classe TCP_FRAG hritant de TCP {
	int fragID;
	int size;
	int offset;
	boolean more;
	/ indique si le bit "More Fragments" est activ
	}

Dans l'optique d'une utilisation pour la dtection d'intrusion par signatures, je ne dfinis pas de super-classe PAQUET ou UDP . En effet, les objets que j'utiliserai peuvent contenir des listes d'IP ou de ports . J'ai donc fait ce choix par cohrence et souci de ne pas surcharger les structures ...

Nous avons dsormais des classes dcrivant la plupart des paquets qu'on aura filtrer . A partir de l, on peut dfinir des classes caractrisant les attaques temporelles . Par convention, ces objets sont stocks dans des tables indexes par la caractristique principale de l'attaque ( cible ou attaquant ) comme par exemple attaque_sur_IP[adresse_attaquant]. Ainsi:

- PING SWEEP (icmp):

Cette "attaque" de reconnaissance consiste bombarder un rseau de requtes "ping", afin d'obtenir une carte des adresses actives sur le rseau cibl .

classe PINGSWEEP  hritant de ICMP{
	string src;
	/  la construction, icmp_type = "echo request"
	time heure_de_debut;
	time heure_en_cours;
	int compteur;
	list of strings victims;
	/ victims sert  stocker les IPs des machines "pinges"
	
	function new ...
	function alerte ...
	}

Timei src > dsti : icmp : echo request ==>
si !(pingsweep[src]) {
	pingsweep[src] = new PINGSWEEP / heure_de_debut = Timei et heure_en_cours= Timei;
}
si !( desti est dans pingsweep[src].victims ) { 
	pingsweep[src].compteur =+1;
	pingsweep[src].heure_en_cours = Timei;
	ajouter desti  pingsweep[src].victims;
}
si ( pingsweep[src].compteur > pingsweep_max && pingsweep[src].heure_en_cours - pingsweep[src].heure_de_dbut < 1000 ms ) {
	Alerte !
}
/ pingsweep_max est une variable de seuil  dfinir

- TCP HIJACK

Cette attaque dsigne un dtournement de connexion selon la mthode prsente prcdemment, l'aide des "sequence numbers" / "acknowledge numbers" . Notons que dans ce cas, il est ncessaire de connaitre le trafic dans les deux sens . Jusqu' prsent, il tait possible de caractriser une attaque par la seule activit de l'agresseur . Ici, pour dterminer si une attaque est en cours, il faut d'abord vrifier si le numro de squence a t vol .

classe HIJACK hritant de TCP {
	string victime;
	string spoof;
	time heure_de_debut;
	time heure_en_cours;
}	

Timei src.sport > dst.dport : flags Start-SNi:End-SNi(End-SNi - Start-SNi) ACK ack-numi ==>
si ( !hijack[src.sport] ) {
	/ src : machine  protger, on pourrait donc ventuellement filtrer les machines pour lesquelles on cre cet objet
	hijack[src.sport] = new HIJACK;
	/ hijack.victime = src.sport, hijack.spoof = dst.dport, hijack.acknum = ack-numi,
 	/hijack.data-seqno[1] = End-SNi, hijack.data-seqno[0] = Start-SNi, hijack.heure_de_debut = Timei;
}
si ( hijack[src.sport] ) {
	hijack.acknum = ack-numi;
	hijack.data-seqno[1] = End-SNi;
	hijak.heure_de_debut = Timei;
	/mise  jour des paramtres cruciaux
}
si ( hijack[dst.dport] ) {
	/ src est l'attaquant potentiel, ce coup-ci
	si ( hijack.spoof != src.sport && Start-SNi == hijack.acknum && ack-numi == hijack.dta-seqno[1] ) {
		hijack.heure_en_cours = Timei;
		Alerte !
		/ les 3 conditions du spoofing sont runies
	} 
}

Cette signature est peut-tre moins vidente saisir que les autres : supposons que nous avons ce paquet :

Timei victime.sport > spoof.dport : flags Start-SNi:End-SNi(End-SNi - Start-SNi) ACK ack-numi

victime envoie un paquet la machine spoof, qui peut potentiellement servir de masque un attaquant . Le paquet normalement attendu si la machine spoof existe bien et a effectivement sollicit le paquet prcdent est de la forme :

Timej spoof.sport > victim.dport : flags ack-numi:End-SNj(End-SNj - ack-numi) ACK End-SNj

Par contre, en cas de dtournement de connexion avr, nous verrions passer un paquet de cette sorte :

Timej attaquant.sport > victim.dport : flags ack-numi:End-SNj(End-SNj - ack-numi) ACK End-SNj

O attaquant est une machine diffrente de spoof . Cependant, pour confirmer le dtournement de connexion, il faut vrifier les numros de squence et d'acquittement, formant un doublet unique caractrisant l'avancement d'une connexion ( en effet, un mme port d'une machine peut tre accd par plusieurs machines en mme temps, comme le port http par exemple ) tout comme le quadruplet {src,sport,dst,dport} caractrise de faon unique une connexion . Si une machine usurpe un tel doublet, c'est qu'elle tente de dtourner la connexion.

L'attaque par dtournement de connexion amne une dernire considration : Au vu de la signature dfinie l'instant, il suffirait attaquant de se prsenter avec l'adresse de spoof lorsqu'il envoie ses paquets pour devenir indtectable ( l'utilisateur sur attaquant peut construire compltement ses paquets s'il est root sur cette machine ), puisqu' l'observation le traffic l'air tout fait normal. Le seul dsavantage pour le mchant est qu'il n'aura pas la possibilit de rcuprer la rponse son paquet - moins d'voluer en rseau shared, mais il existe de nombreuses attaques o il n'est pas ncessaire d'obtenir de rponse de la machine attaque ( effacement de fichier, etc ... ) . En fait, ce dtournement est absolument indtectable avec l'approche qu'on a choisie ( analyse des logs sur une seule machine ). Le seul moyen de dtecter ce genre d'attaque serait de confronter les logs de spoof et ceux de victime, pour mettre en vidence la dsynchronisation de la connexion au moment o attaquant s'est immisc. Ces attaques restent cependant improbables hors des sous-rseaux; on ne les verra donc probablement pas si on effectue l'analyse de logs au niveau d'un point de sortie du rseau ( routeur, firewall ... )

- SYN FLOOD ( tcp )

Lorsque le port d'une machine est sollicit pour une connexion TCP, la machine garde une trace de ce contact dans la queue de connexion ( connection stack ). Ainsi, lorsque le paquet d'acquittement revient ( la 3e partie du handshake ), la machine sait que tout va bien . La trace est maintenue dans la queue un certain temps qui dpend des systmes d'exploitations, et si l'acquittement n'est pas arriv avant cette limite temporelle la connexion est considre comme perdue et la trace est retire de la queue . Or cette queue a bien videmment une capacit limite . L'ide est donc de "bourrer" cette queue de requtes de connexions provenant de machines en ralit inexistantes ( pour viter qu'un paquet d'acquittement ou qu'un paquet de fin de connexion ne soit renvoy la victime ), si bien que toute connexion lgitime ne pourra tre stocke dans la queue et donc aboutir .De l'extrieur, le port de la victime semble inactif . Ici deux patterns agissent conjointement:

classe SYNFLOOD {
	time heure_de_debut;
	time heure_en_cours;
	string dst;
	int dport;
	list of strings attackers;
	/ contient les adresses IP des ventuels attaquants
}

Juste avant que la file d'attente soit engorge ( paramtrer avec synflood_max[dport], qui dpendra du port vis ), l'alerte est donne . Il faut pouvoir tenir compte du temps, afin de ne plus tenir compte des connexions qui ont t automatiquement dsactives par Timeout . D'autre part, on parvient dtecter une attaque que le pattern matching simple ne pouvait pas relever ( ncessit d'un retour en arrire ) : le dtournement du 3-way handshake de TCP " la Mitnick " .

- PORT SCAN

Le scanning de port sert dterminer les services prsents sur une machine. On en a fait une large prsentation plus haut .

classe PORTSCAN hritant de TCP_FRAG{
	/ pour l'instant, pas de dtection de scans par UDP, viendra plus tard ...
	string dest;
	string src;
	string type;
	list of int ports;
	/ ports scanns
	int compteur;
}

Time1 src.sporti > dest.dporti : flags data-seqno ack window urg options
si !(portscan[dest]) {
	if ( flags == SYN ) {
		portscan[dest] = new PORTSCAN / heure_de_debut = Timei et heure_en_cours= Timei;
		portscan(src).type = "SYN scan";
	}
	else if ( flags == FIN ) {
		portscan[dest] = new PORTSCAN / heure_de_debut = Timei et heure_en_cours= Timei;
		portscan(dest).type = "FIN scan";
	}
	else if ( flags == "" && ack ==  && urg ==  ) {
		portscan[dest] = new PORTSCAN / heure_de_debut = Timei et heure_en_cours= Timei;
		portscan(dest).type = "NULL scan";
	}
	else if ( flags == "FIN,PUSH" && urg == "URG" ) {
		portscan[dest] = new PORTSCAN / heure_de_debut = Timei et heure_en_cours= Timei;
		portscan(dest).type = "XMAS scan";
	}
	if ( sporti == 20 ) {
		portscan[dest].type .= " via FTP bouncing";	
	}
	if ( options contient  (frag ID :size@offset{+, }) ) {
		/ paquet fragments pour tromper les IDS
		portscan[dest].type .= " avec fragmentation";
	}
}
si ( dporti n'est pas dans portscan[dest].ports ) {
	ajouter dporti  portscan[dest].ports;
	portscan[dest].compteur =+1;
}
si ( portscan[dest].compteur > scan_max ) { 
	/ scan_max = 10 parait tre un seuil correct ( surtout si on ne tient pas compte du temps )
	/  confirmer avec l'exprience ...
	Alerte !
}

- STICK

Stick est une tentative de dsactivation distance des systmes de dtection d'intrusion orients rseau . L'attaque consiste envoyer un trs grand nombre de paquets RST ( fin de connexion brutale ), ce qui a pour effet de surcharger de travail le NIDS. Ceci aura ventuellement pour effet de provoquer un dni-de-service contre le systme de dtection d'intrusion, laissant le rseau protg sans surveillance.

classe STICK hritant de TCP {
	string dest;
	string src;
	time heure_de_debut;
	time heure_de_fin;
	int compteur;
}	


Timei src.sporti > dest.dport : R =>
si !(stick[dest.dport]) {
	stick[dest.dport] = new STICK
	/ heure_de_debut = Timei et heure_en_cours= Timei;
}
stick[dest.dport].compteur =+1;
si ( stick[dest.dport].compteur > stick_max ) {
	/stick_max = 10 ? plus de 10 paquets RST pour clore une connexion de faon abrupte, c'est louche !
	Alerte !
}

- SMURF-VICTIME ( icmp )

principe identique fraggle-victime.

classe SMURF_VICTIME hritant de ICMP {
	string dest;
	list of string attackers;
	/ stocke les IP des machines amplificatrices
	time heure_de_debut;
	time heure_en_cours;
	int compteur;
}

timei srci > dst : icmp : echo reply ==>
si !(smurf-victim[dst]) {
	smurf-victim[dst] = new SMURF_VICTIME; 
	/ heure_de_debut = Timei et heure_en_cours= Timei;
}
ajouter srci  smurf-victim[dst].attackers;
smurf-victim[dst].compteur =+1;
si ( smurf-victim[dst].compteur > smurf_max ) {
	Alerte !
}

Attaques par fragmentation

Le concept de fragmentation

La fragmentation a lieu lorqu'un datagramme IP en transit doit paser par un rseau dont la taille maximale de transmission ( MTU ) est plus petite que la taille du datagramme (en clair, il y a engorgement ). Par exemple, la MTU d'Ethernet est de 1500 octets; donc un datagramme de taille suprieure 1500 octets devra tre fragment pour voyager sur Ethernet. Les fragments se comportent exactement comme des paquets normaux, si ce n'est qu'ils sont rassembls par la machine destinataire . Pour se faire, chaque fragment contient les informations suivantes :

Toutes ces informations se situent dans l'en-tte IP, cet en-tte tant lui-mme suivi par un fragment encapsul .

La fragmentation est un outil de choix pour mener des attaques pour les raisons suivantes :

attaques bases sur la fragmentation et leurs signatures

Les traces de paquets fragments sont un peu diffrentes de celles des paquets normaux dans les logs TCPdump, et refltent l'absence d'informations fournies par l'en-tte TCP . Dans ces conditions, les fragments ne contenant pas l'en-tte ont ce format gnrique :

Timestamp src > dst : (frag ID :size@offset{+, })

Les attaques suivantes fonctionneront donc avec 2 signatures : une premire pour dtecter le fragment contenant l'entte, et la suivante pour reprer les informations caractristiques de l'attaque par fragmentation proprement dite .

- TEARDROP (TCP)

L'attaque exploite le chevauchement de paquets fragments.

Ici, une difficult supplmentaire est prendre en compte : les paquets n'arrivent pas forcment dans le bon ordre, ie dans l'ordre des offsets . Pour un paquet fragment normal, et pour toute valeur de i, nous savons que offset_i + size_i = somme( size_j, j = 1 ... i ). Par consquent, une attaque teardrop est telle qu'il existe une valeur de i pour laquelle offset_i + size_i < somme( size_j, j = 1 ... i ) .

classe TEARDROP hritant de TCP_FRAG {
	string dst;
	int dport;
	string src;
	int sport;
	int ID;
	/ ID number du paquet fragment
	int offset_max;
	/ le plus grand offset reu en cours
	int taille_theorique;
	/ egal  offset + size du dernier fragment reu
	int taille_reelle;
	/ somme des size_i reus
}

Timei SRC.SPORT > DST.DPORT : flags data-seqno ack window (frag ID :size_i@offset_i{+,}) ==>
si !( teardrop[ID] ) {
	teardrop[ID] = new TEARDROP;
}
	teardrop[ID].dst = DST;
	/ etc ...
et
Timei SRC > DST : (frag ID :size_i@offset_i{+,}) ==>
si ( offset_i  == max ( offset_i, teardrop[ID].offset_max) ) {
	teardrop[ID].offset_max = offset_i ;
	teardrop[ID].taille_theorique = offset_i + size_i;
}
teardrop[ID].taille_reelle =+ size_i;
si ( teardrop[ID].taille_theorique < teardrop[ID].taille_reelle ) {
	Alerte ! 
	/la condition ci-dessus n'est pas ncessaire mais elle est suffisante 
	/( elle devient ncessaire lorsque tous les fragments sont arrivs). A dfaut de trouver mieux ...
}

- PING OF DEATH (icmp)

L'envoie d'une requte ping trop grosse ( de taille suprieure 65 ko ) provoque un plantage de la machine cible, et donc un dni-de-service .

classe POD hritant de ICMP {
	string src;
	string dst;
	int ID;
	int total_size;
}

Timei src > dst : icmp : echo request (frag ID :size_i@offset_i{+,})  ==>
si !(pod[ID]) {
	pod[ID] = new POD;
}
et
Timei SRC > DST : (frag ID:size_final@offset_final) ==>
/ si pod[ID] existe
pod[ID].total_size = offset_final + size_final;
si (  pod[ID].total_size > 65 k ) {
	Alerte !
}

La taille du paquet Ping est connue grace au dernier paquet de la fragmentation ( celui ne contenant pas de + ), il suffit donc de reprer celui-ci, et de tester la taille du paquet . Une fois ce test effectu, on peut dtruire l'objet pod associ dans la table .

Sur Teardrop, l'inconvnient est qu'on n'a pas de moyen de dtruire l'objet une fois que le paquet complet a t reu, puisque les paquets fragments arrivent dans le dsordre. Ces attaques restent assez rares, ce qui devrait limiter le nombre d'objets correspondants crs.


Test des signatures - Rsultats prliminaires

Afin de tester l'efficacit des signatures prsentes dans ce rapport, un ensemble de scripts appel LOGre ( pour faire rfrence aux fichiers de log qu'il manipule et aux expressions rgulires qu'il utilise intensment ) a t mis en point en Perl . Ce langage a t choisi en raison de sa grande portabilit et de la puissance de ses outils de test d'expressions rgulires .

prsentation de LOGre

LOGre est un ensemble de scripts crits en perl, dont la fonction principale est de tester les signatures prsentes dans ce rapport . L'ensemble comprend trois parties :

Amliorer encore la recherche : quelques optimisations possibles

Il est notamment possible d'exploiter ce qui a t fait dans le domaine de la recherche de motifs pour essayer d'acclrer la recherche de paquets suspects :

Classer les signatures

Le temps d'excution est une ressource cruciale dans notre problme, o d'normes quantits de donnes doivent tre manipules . Il s'avrerait donc intressant de pouvoir classer les signatures principales en une structure permettant de gagner du temps l'excution : certaines signatures prsentant des similitudes, il peut tre fructueux d'essayer de les "factoriser" en les rassemblant dans une structure d'arbre similaire un arbre de recherche ( TRIE ) . Cet arbre peut tre dfini une fois pour toutes au dmarrage du systme de dtection d'intrusion, et chang uniquement quand une nouvelle signature doit tre rajoute . De cette faon, chaque paquet est confront une signature ayant au plus la taille de la plus longue signature qu'on aura dfini. Le gain en vitesse de traitement est donc thoriquement significatif par rapport l'approche "nave" consistant comparer un paquet avec chaque signature, squentiellement . Il est mme encore possible d'amliorer le stockage en termes d'espace occup en optant pour une structure de DAWG ( Directed Acyclic Word Graph ), qui est une forme de TRIE sur lequel on a appliqu un algorithme de minimisation . D'aprs l'article Kucherov/Rusinowitch, le DAWG peut se construire en temps O( |S| ) o S est l'ensemble des signatures, et le rajout d'une signature s se fait en temps O( |s| ).

Une fonction de comptage plus raliste

tenir compte de "l'age" des paquets ...

Grer les tables d'objets

Les attaques temporelles tels que le scanning ou l'inondation ncessitent de tenir compte des paquets "suspects" que l'on rencontre lors de l'analyse et d'en garder une trace ( notamment le nombre de fois que ces paquets sont relevs ), comme on l'a vu prcdemment . Afin d'viter l'engorgement de la mmoire de stockage, il faudrait donc rgulirement purger les tables de stockage voques plus haut . On peut procder comme suit : chaque table possde une taille maximale . Lorsque cette taille est atteinte, on efface de la table les entres pour lesquelles le compteur a la plus faible valeur . On gagne ainsi de la place en dtruisant les rfrences des paquets ne faisant vraisembablement pas partie d'une attaque en cours ( sauf si on a affaire un attaquant particulirement vicieux et prt "dlayer" un scan sur de trs grandes dures de temps, mais dans ce cas il faut admettre qu'une telle attaque est de toutes faons quasiment indtectable ) .


Les limites de la dtection d'intrusion

Le modle que nous avons choisi d'tudier est ncessairement limit par le fait qu'il ne surveille que les attaques portant sur les couches Transport et IP . Or un grand nombre d'attaques existe pour la couche Applicative . Cependant, et de faon gnrale, la dtection d'intrusion prsente des limites et des problmes et peut quelquefois se montrer impuissante dans certains cas.

les covert channels ... ou la stganographie applique aux protocoles

La solution retenue ici ne permet pas de contrer les attaques par "covert channels" de type Loki ... ie les logiciels qui permettent d'utiliser un canal a priori inoffensif pour faire transiter de l'info : par exemple loki fait communiquer le client et le serveur via des paquets icmp echo, AckCmd passe les firewalls en n'utilisant que des paquets ack ... . Ce genre de problme ncessite en fait de "sniffer" plus en profondeur et demande l'application d'une batterie de tests cryptanalytiques sur les paquets ( comme par exemple des tests statistiques sur les SN ), assez lourds en ressources de calcul . A l'heure actuelle, aucune solution n'existe contre ce danger potentiel, puisque mme l'interception en profondeur peut tre neutralise par l'usage de la cryptographie pour camoufler les donnes en transit.

les chevaux de troie

Le mme problme apparait lorsqu'on cherche se prmunir des "trojan horses". Les "trojans" sont des applications s'apparentant aux virus dans la mesure o ceux ci sont installs souvent l'insu de l'utilisateur . Une fois en place, toute personne sachant contacter le trojan peut prendre le contrle de l'ordinateur infect comme si il en tait l'utilisateur actuel ( certains logiciels poussent mme le zle jusqu' permettre d'afficher l'cran de l'utilisateur pirat .. ) . Une faon de dtecter les trojans est donc de vrifier que les ports de communication habituellement ouverts par un trojan ne sont pas actifs sur la machine. Malheureusement, les trojans les plus rcents sont hautement configurables, et peuvent donc tre activs sur n'importe quel port . Ce genre de signature n'est donc plus efficace .

La seule mthode peu prs efficace pour dtecter ce genre d'attaque repose sur le fait qu'un serveur doit tre ncessairement install sur la machine infecte pour que le covert channel ou le trojan soit mis en place : ainsi, une analyse rigoureuse des changements sur le disque dur d'une machine associe l'observation ventuelle de trafic inexpliqu peut permettre de dcouvrir un covert channel ou un trojan en activit . Pour plus de dtails et des ides sur les covert channels, voir l'article de C. Rowland.

Dtection de mauvaise utilisation contre dtection d'anomalie : signatures contre apprentissage

Un des gros dsavantages de la dtection par signatures d'attaques est son manque de flexibilit et par consquent sa vulnrabilit aux mutations : d'une part, il faut pour pouvoir dfinir une signature avoir dj t confront l'attaque considre . D'autre part, certaines de ces signatures se basent sur des caractristiques "volatiles" d'un outil, comme par exemple le port qu'un certain troyan ouvre par dfaut, la valeur de ISN choisie par tel autre outil de pirate, etc ... Souvent ces logiciels sont soit hautement configurables, soit "open-source" donc librement modifiables . Les caractristiques retenues pour dfinir la signature sont donc fragiles, et les signatures extrmement sensibles aux mutations . Un exemple actuel est l'outil ADMutate, qui permet de camoufler une attaque au niveau applicatif afin de la rendre non dtectable par les systmes de dtection d'intrusion conventionnels utilisant des signatures . Contre ce genre de problme, une parade consiste dfinir ce qu'est l'tat de "compromission", c'est--dire l'tat attendu d'une machine pendant ou aprs une attaque . On peut alors essayer de dtecter quand la machine entre dans cet tat : on ne saura pas comment la machine a t attaque si l'attaque tait de type inconnu, mais on se sera quand mme aperu que quelque chose a eu lieu. Bien sr, la difficult majeure dans cette parade est de dfinir ce fameux tat de "compromission". On pourrait donc penser qu'une approche par apprentissage serait une bonne alternative . Cependant, il n'en est rien : outre une convergence plutt longue vers un modle comportemental "normal", rien n'empche un pirate se sachant surveill de "rduquer" un tel systme en faisant voluer progressivement son modle de convergence vers un comportement tout fait anormal pour l'analyste, mais "normal" d'un point de vue statistique . On retrouve un problme similaire dans l'approche par signatures des attaques temporelles, la signature comprenant frquemment une valeur de seuil : si l'attaquant a du temps devant lui, il peut s'arranger pour dlayer ses attaques dans le "bruit" en prenant garde ne pas gnrer une activit dpassant les seuils fixs ( surtout vrai pour les scans de ports, par exemple : si on fixe le seuil de dtection 30 ports scanns, il suffit d'en scanner 29 ou moins de faon assez espace pour ne pas tre dtect ) . C'est un problme assez difficile rsoudre, dans la mesure o la difficult rside dans la dfinition d'une attaque temporelle en gnral ( et d'un scanning de ports en particulier ) . Une solution possible serait d'associer une "probabilit d'attaque" qui tendrait vers 1 quand le seuil fix est atteint ( par exemple, le rapport min (ports contacts, seuil ) / seuil ) . L'analyste humain dciderait alors lui-mme si l'activit releve est une attaque ou non . Cependant, avec cette approche, on peut passer ct d'attaques temporelles "distribues", par exemple .

Problmes de ressources et vulnrabilit aux Dnis-de-Service

Outre la taille des fichiers de log ( de l'ordre du Go ), la dtection d'intrusion est excessivement gourmande en ressources : par exemple le pattern SynFlood cre un objet par connexion TCP. Au pire, nous pouvons donc avoir O( R * 65000 ) objets synflood crs en mme temps, o R est le nombre de machines surveilles et 65000 le nombre approximatif de ports TCP existants . Ces objets disparaissent lorsque le handshake est complet pour toutes les connexions en cours sur les ports considrs . Il faudrait donc tenir compte du temps de "time out" des machines, en cas de handshake laiss en suspens. Les objets gnrs par teardrop ne sont pas dtruits, car il n'est pas possible de connaitre l'avance le nombre de fragments que l'on va recevoir . La raret de ces attaques en comparaison avec les syn flood et les scans compense ce dfaut. Le pattern HijackTCP "surveille" virtuellement tout le traffic TCP . L'optimisation par "nettoyage" des tables intervalles temporels rguliers peut donc tre trs utile .

On voit donc que la dtection d'intrusion est un exercice prilleux pour les ressources en espace . Un attaquant un peu malin peut chercher en profiter, en essayant de provoquer un dni-de-service au niveau du systme de dtection d'intrusion, ou au pire au niveau du systme d'exploitation de la machine supportant l' IDS. Une fois l'IDS dsactiv, l'attaquant a le champ libre pour tenter tout ce qui lui plait . Ainsi, l'attaque "STICK" est une tentative de dni-de-service contre les IDS ( en particulier contre ISS RealSecure ) : l' attaquant espre ainsi surcharger de travail l'IDS, au point de le dsactiver ou au moins de le rendre moins efficace .

Problme fondamental de la dtection d'intrusion oriente rseau

La dtection d'intrusion oriente rseau prsente un problme fondamental : comment tre certain que ce que le gnrateur d'vnements va capturer est bien la mme chose que ce qui va atteindre les machines du rseau surveiller ?Une diffrence notable provient dj du fait que le systme de dtection d'intrusion se trouve rarement sur la machine qu'il est en train de protger . Il existe aussi des limitations due aux performances : les vitesses de transmission sont parfois telles qu'elles dpassent largement la vitesse d'criture des disques durs les plus rapides du march, ou mme la vitesse de traitement des processeurs . Il n'est donc pas rare qu'un "sniffeur" ait un taux de perte de paquets non nul, si bien que des paquets non reus par l'IDS seront peut-tre reus par la machine destinataire . D'autre part, un systme de dtection d'intrusion ne faisant pas de reconstruction de paquets fragments aura forcment un aperu de ce qui passe sur le rseau diffrent de ce qui sera rellement reu par les machines surveilles . Comme on l'a voqu prcdemment, un tel systme de dtection d'intrusion passerait ct des attaques de type Teardrop, du chevauchement des en-ttes ( pour modifier l'IP source, le port de destination, ect... au dernier moment ), ou encore des attaques au niveau applicatif qui seraient fragmentes pour leurrer le moteur d'analyse par pattern matching de l'IDS. Il se peut aussi que la diffrence de temps entre le moment o l'IDS reoit un paquet et celui o la machine destinataire reoit ce paquet soit cruciale : il peut par exemple se passer quelque chose sur la machine destinataire, faisant que ce paquet sera rejet, alors que l'IDS l'aura analys et fera l'hypothse que ce paquet a bien t reu et trait par sa destination . Dans l'autre sens, il se peut aussi qu'une diffrence de systmes d'exploitation entre la machine supportant l'IDS et la machine surveille fasse que certains paquets rejets par le systme de dtection d'intrusion soient accepts par la destination ( c'est par exemple le cas des paquets UDP avec une somme de contrle errone, rejets par la plupart des systmes d'exploitation, sauf les plus anciens ) . Ce problme peut engendrer deux types de faux ngatifs chez un systme de dtection d'intrusion :

Les problmes d'insertion et d'vasion, en pratique, restent cependant difficiles exploiter pour un attaquant . En effet, de telles attaques exploitent les spcificits des systmes d'exploitation et du systme de dtection d'intrusion, et demandent donc de connaitre parfaitement la composition du rseau que l'on souhaite attaquer . Toutefois, bien que difficilement utilisable, le risque existe .


Conclusion


Sources:

Etat de l'art:


signatures et attaques:

Fragmentation, furtivit et failles des IDS:

Covert channels:

Aspects algorithmiques:

Logiciels:

m'crire: huin@loria.fr