06 13 32 04 91

Sécurité TCP IP 3

PRECEDENT     SUITE…
  1. Les différents type d’attaques

En préambule, il convient de garder à l’esprit deux remarques :

  1. Toute attaque révèle une faiblesse LOGICIELLE, due à une conceptualisation erronée ou limitée des procédures misent en oeuvre.

  2. Il est humainement impossible de ne jamais commettre d’erreur.

La résultante de ces deux affirmations indique qu’il y aura toujours des failles dans les systèmes d’informations. Les protocoles, les systèmes d’exploitations (TOUS), les interfaces, sont autant d’ensembles de procédures et/ou de logiciels. Ils ont tous leurs propres limites et défaillances, et il ne peut en être autrement ; et ce, dans le passé, comme dans le présent et dans l’avenir.

La seule réelle protection contre cet état de faits est d’être perpétuellement en alerte, et, pourquoi pas, de se mettre un peu dans la situation d’un attaquant. Comme dans une partie d’échec : c’est en se mettant à la place de l’autre que l’on a les meilleures chances de gagner la partie.

Entrons maintenant dans le vif du sujet.

    1. Brute force

C’est la technique qui consiste à tester des mots de passes en série. C’est, comme son nom l’indique, brutal, et sans grand intérêt.

Il suffit de limiter le nombre d’essais de mot de passe pour y remédier.

    1. Failles logiciel

Il s’agit ici d’exploiter (c’est pourquoi on surnomme ce type d’action des « exploits ») des failles de sécurité dans la conception des logiciels tournant sur les serveurs. Les trois quart du temps, se sont donc les applications serveurs qui sont visées.

La plus connue est le Buffer Overflow

( buffer = espace dans la mémoire + overflow = dépassement )

Le but est de réinscrire le RET pour le modifier par un autre qui pointera sur une autre adresse désirée. Toutes méthodes d’overflow reposent sur ce concept!

Schema :

buffer intact: [buffer][RET]

taille: 10 8

buffer après overflow: [buffer2]

[buffer] = l’espace mémoire

[RET] = l’adresse qui va pointer sur la prochaine fonction (qui suit celle du remplissage du buffer)

[buffer2] = Après le buffer overflow, nous écrivons sur le RET , puisqu’il y a 18 caractères dans le buffer. Nous pouvons alors mettre n’importe quelle adresse qui sera contenu sur les 8 derniers octets.

De multiples autres failles existent telles que:

  • Frame pointer : il s’agit d’overflow sur un “frame pointer”.

  • Format Bugs: ce bug utilise les fonctions de chaînes vulnérables (telles que printf(); snprintf(); vsnprintf();) pour y inscrire tout et n’importe quoi.

  • Collage de buffer: fusion de 2 buffer ; cette méthode est très rare car elle serait vite repérée.

  • Escape shell: fonction qui fait appel à un shell (exemple : system();) . Si on a un accès dessus, on peut détourner la commande à exécuter.

  • Effacement de buffer: il s’agit d’utiliser les caractères “\n” “\r” “\b”. Celui qui nous intéresse le plus :

    • -“\b” : caractère de retour arrière (déplace le curseur d’un caractère vers la gauche)

    • -“\r” : caractère début de ligne (place le curseur au début de la ligne en cours)

Imaginons qu’un snprintf va sur un “open, system,…” ; il suffi d’effacer tout pour réinscrire le buffer!

  • Race Condition: exploitation d’un état peu sûr, provisoirement créé par l’exécution d’un programme pour accéder aux données sensibles.

Cette liste est, évidemment, non exhaustive et en perpétuelle évolution.

    1. Failles système

La configuration par défaut d’un système étant sa première faiblesse, il suffit que l’administrateur s’en désintéresse, pour qu’un pirate l’utilise.

Le pirate connaîtra le système employé via SNMP, puis exploitera les failles non solutionnées.

Pour exemple, le nuke est la technique qui consiste à envoyer un certain type de paquet aux OS Windows (jusqu’à XP) afin de perturber leur fonctionnement.

Tout système a ses propres failles ; c’est pourquoi le pirate commencera toujours son attaque par s’informer sur le système utilisé.

Nous verrons, dans le chapitre suivant, les différentes manières de procéder.

    1. Virus

Là, on entre dans le domaine des « linguites » distingués. Ils parlent l’assembleur couramment. Les virus sont de petits programmes destinés à provoquer de plus ou moins graves problèmes dans un ordinateur.

Cette définition intègre les virus polymorphes, les troyens, les trojans (autre dénomination), les worms, etc…

Bref, il s’agit d’une merde du genre Alien qu’il faut détruire à tout prix, et le plus vite possible, avant qu’elle ne fasse les ravages prévus.

Les parades ne se conçoivent qu’en assembleur (langage machine). Donc, à moins d’aimer faire une addition en une page de ligne de code, il veut mieux se munir d’un bon antivirus.

Il en existe même de gratuits tel AVG, qui est très efficace.

    1. Scripts malveillants

En Javascript, un pirate peut, par exemple, se faire expédier, en automatique, votre adresse e-mail.

En Vbscript, il peut utiliser l’ActiveX Wscript.Shell afin de modifier, créer, supprimer une clé de votre base de registre. Plus « drôle » encore, il peut créer un fichier de commande batch.

C’est pourquoi, il est vivement conseillé de désactiver l’exécution de Scripts (Javascripts et Vbscripts) ainsi que celle des ActiveX.

Exemple :

ECRIRE DANS LA BASE DE REGISTRE EN VBSCRIPT :

<html>

<body>

<script Language=”VBScript”>

Set WshShell = CreateObject(“WScript.Shell”)

WshShell.RegWrite “HKEY_LOCAL_MACHINE\toto\With\Name”, “c’est une blague”

</script>

</body>

</html>

  1. Comment s’enquérir des données du SYSTEME cible ?

    1. Première phase

Lorsqu’un nom de domaine est enregistrer sur Internet, bon nombre d’informations peuvent être retrouvées grâce, notamment, aux bases des prestataires de service (Internic, NetworksSolution, etc) et sont consultables sur des sites tels que http://allwhois.com, http://whois.net, http://www.betterwhois.com).

On saura ainsi si l’entreprise visée possède une plage d’IP spécifique, les adresses et noms de serveur DNS, et d’autres informations plus spécifiques à l’entreprise.

    1. Deuxième phase : le Système

L’empreinte de pile est la façon la plus radicale de faire pour résoudre le problème de l’identification de l’OS d’une manière unique.


Cette technique est la plus efficace, mais il y a d’autres solutions encore ridiculement simples, voire simplistes. Et, malheureusement, c’est encore une des méthodes les plus efficaces:

L’utilitaire client TelNet permet de connaître assez facilement le système d’exploitation utilisé. Il suffit de lancer une exécution telle que :

telnet [IP] [PORT]

pour récupérer la bannière qui aidera à déterminer quel système d’exploitation tourne sur le serveur.

Il n’y a aucun intérêt à s’embarquer dans les complexités de la prise d’empreinte de pile si la machine annonce d’une manière aussi flagrante et précise quel OS tourne.
Malheureusement, beaucoup de systèmes actuels existent avec ce genre de bannière et beaucoup d’administrateurs ne la désactive pas.

Nous verrons en détail d’autres méthodes de prise d’empreinte système (Finger Printing) dans le chapitre suivant.

    1. Outils Logiciels

Nmap (dont nous allons détailler le mécanisme dans le chapitre suivant) n’est pas le premier programme de reconnaissance d’OS a utiliser l’identification TCP/IP. Le Spoofer IRC de Johan incluait des techniques très rudimentaires d’identification depuis la version 3. Il essaye de placer la machine dans les classes “Linux”, “4.4BSD”, “Win95”, ou “Unknown” en utilisant quelques tests simples sur les flags TCP.

Un autre programme de ce type est Checkos. Les techniques d’identifications sont exactement les mêmes que dans SIRC. Checkos ajoute la vérification de la bannière Telnet, qui est utile mais qui possède des inconvénients limitatifs.


QUESO est plus récent, et marque une grande évolution par rapport aux autres programmes. Non seulement il introduit des tests nouveaux, mais il est aussi le premier a déplacer les empreintes d’OS hors du code.

A l’intersection entre le renseignement de système distant, le scannage de port et le sniffing, se trouve l’excellent outil Nautilus NetRanger, efficace et rapide (www.nautidigital.com).

PRECEDENT     SUITE…