Test d'intrusion

Un article de Wikipédia, l'encyclopédie libre.
Aller à : navigation, rechercher

Un test d'intrusion (« penetration test » en anglais) est une méthode d'évaluation de la sécurité d'un système ou d'un réseau informatique.

La méthode consiste généralement à simuler une attaque d'un utilisateur mal intentionné, voire d'un logiciel malveillant. On analyse alors les risques potentiels dus à une mauvaise configuration d'un système, d'un défaut de programmation ou encore d'une vulnérabilité liée à la solution testée. Lors d'un test d'intrusion, nous nous retrouvons dans la position de l'attaquant potentiel. Le principal but de cette manœuvre est de trouver des vulnérabilités exploitables en vue de proposer un plan d'actions permettant d'améliorer la sécurité d'un système.

La différence avec un simple audit de sécurité est la motivation pour la personne à aller jusqu'à exploiter les failles, montrant ainsi la vulnérabilité. L'exploitation n'a bien sûr pas pour but de détruire ou endommager le système, mais elle permettra de situer le degré du risque lui étant associé.

L'analyse peut se réaliser selon trois cas :

  1. Le testeur se met dans la peau d'un attaquant potentiel, et ne possède aucune information ;
  2. Le testeur possède un nombre limité d'informations ;
  3. Le testeur possède les informations dont il a besoin.

Le testeur n'a aucune information (ou black box)[modifier | modifier le code]

Fondement[modifier | modifier le code]

Il s'agit dans un premier temps de rechercher des informations sur l'entreprise, la personne, ou toute autre donnée pour s'assurer que la cible est bien celle que l'on tente d'infiltrer. Connaître la situation géographique, les informations générales d'une société, ou son fournisseur d'accès à Internet sont peut être des choses banales, mais pourtant à ne pas négliger. Effectivement, ces quelques informations nous en disent plus sur la cible.

Pour cela le testeur dispose de plusieurs outils :

  • Le web : cela peut paraître insignifiant mais il peut devenir une véritable mine d'informations (adresses email, adresses postales, numéros de téléphone ...) sur une cible donnée (entité physique ou morale) cette pratique devient triviale avec les réseaux sociaux et les moteurs de recherche.
  • Le service DNS via les outils nslookup et dig afin d'interroger les serveurs DNS pour obtenir soit l'adresse IP en fonction d'un nom de domaine, soit l'inverse, ou encore les noms de domaine des serveurs par lesquels transitent les emails. Par ailleurs, les enregistrements DNS fournissent souvent de nombreuses informations utiles.
  • Le service whois qui, même si ses données ne sont pas toujours à jour, permet de récupérer des informations diverses sur une adresse IP ou un nom de domaine.

Cet ensemble de techniques non intrusives permet d'obtenir des informations publiques sur la cible. Certaines d'entre elles peuvent cependant être confidentielles (mais diffusées généralement par erreur ou insouciance). Leur récupération, pas toujours détectable par la cible, entre dans le cadre de ce que l'on pourrait appeler une reconnaissance passive.

  • L'ingénierie sociale qui reste probablement le meilleur outil du testeur afin d'obtenir un maximum d'informations sur sa cible en un minimum de temps.

Ces deux dernières techniques, bien que non intrusives, deviennent détectables par la cible et entrent dans le cadre de ce que l'on pourrait appeler une reconnaissance semi-active.

Il nous faut ensuite pouvoir schématiser l'emplacement et l'étendue du système à tester, c'est-à-dire réaliser une cartographie (ou map en anglais). Outre le fait que l'on ne testera pas uniquement une partie du système, le fait d'effectuer une telle analyse permet de comprendre le mode de fonctionnement et le raisonnement de son propriétaire. De plus, un système en réseau étendu nécessite une sécurité plus importante : la pénétration d'un seul ordinateur d'un réseau peut permettre la pénétration de tous les autres beaucoup plus facilement.

La compromission (exploitation d'une vulnérabilité, escalade de privilège et mise en place d'un rootkit) d'un seul poste permet :

  • La mise en place d'un sniffer qui permet quant à elle la récupération des identifiants et mots de passe pour les protocoles de communication en clair.
  • Une cartographie du réseau de l'intérieur et un inventaire des ressources disponibles de ce fait beaucoup plus simple et détaillé en utilisant par exemple les propriétés des protocoles SNMP, RPC et SMB.
  • La mise en place d'une détection automatisée de vulnérabilités via des outils tel que Nessus...
  • L'effacement des traces.

Ces dernières techniques, hautement intrusives, entrent dans le cadre d'une reconnaissance active.

Réseau[modifier | modifier le code]

Il n'est pas toujours chose aisée de cartographier un réseau, surtout lorsque celui-ci est bien protégé. De ce fait, on peut très bien trouver une autre vulnérabilité nous permettant de pénétrer le réseau. Cela sera ensuite beaucoup plus simple de faire une cartographie.

C'est lors de cette étape de cartographie que l'on détermine et trouve les informations relatives au système d'information. Dans la pratique, il s'agit principalement de :

  • Prise d'empreinte de la pile TCP/IP afin d'étudier les différentes réponses dues aux implémentations des piles TCP/IP et de déterminer le système d'exploitation installé, ainsi que sa version.
  • Balayage des ports et Firewalking afin de détecter des ports ouverts et les règles de filtrage des machines.
  • Récupération des bannières d'informations et identification protocolaire afin d'identifier les services qui tournent derrière ces ports et leur versions en vue d'une exploitation ultérieure.

Ceci, de nos jours, est relativement trivial avec des outils comme Nmap qui réalisent aisément ces opérations en fournissant une interface complète et conviviale.

Ces techniques quant à elles peuvent être aisément détectées notamment à l'aide d'un système de détection d'intrusion et elles entrent aussi dans le cadre de la reconnaissance semi-passive.

Le testeur doit tester le réseau, autrement dit, il n'a pas encore terminé car c'est notamment pendant cette action qu'il va tenter de corrompre les éventuels pare-feux. Après un balayage des ports, nous allons également nous intéresser aux ports ouverts et filtrés, où il faudra utiliser les protocoles des services proposés.

Exemple : protocole de communication http pour le service d'un serveur web. protocole de communication irc pour des conversations entre internautes.

Certains protocoles sont intrinsèquement faillibles, dans ce cas, si le sujet respecte les normes, il sera alors facile de corrompre un service derrière un port. Cette étape est importante car sachant qu'un pare-feu ou un IDS est présent, il faudra alors le contourner, ou le corrompre. La corruption s'effectue grâce à ce que l'on peut appeler des paquets empoisonnés. Selon une certaine méthode, le pare-feu ou l'IDS qui récupèrera ces paquets va réagir en vous laissant passer au travers.

L'IP et le DNS spoofing sont des techniques qui peuvent porter leur fruits dans ces conditions. Si une machine du réseau est en zone de confiance, alors il suffira d'usurper son identité pour pouvoir être dans cette même zone.

Il est donc important pour l'attaquant de savoir forger ses propres paquets, et notamment utiliser des sockets brutes (raw socks).

Applicatif[modifier | modifier le code]

Il ne s'agit pas d'une étape, mais d'une globalité. Après avoir trouvé les programmes actifs qui communiquent avec un autre réseau, trouver une faille dans ces applications peut amener à corrompre tout un système en peu de temps. Trouver une faille dans une application est très complexe, et peut nécessiter pas mal de temps. Cela dit, les attaques portées sur des applications sont très efficaces.

Il est tout de même important pour le testeur d'avoir de solides connaissances en architecture des systèmes d'exploitation, et en langage d'assemblage, qui différera bien sûr en fonction du type de système sur lequel on tente de pénétrer.

Dans beaucoup de cas, la personne qui tente de corrompre un programme va aller le trouver, puis l'étudier. Dans le cas ou il lui est possible d'obtenir la source, cela facilitera davantage la tâche, car il n'aura pas, ou presque pas, à lire de code assemblé. Il aura beaucoup plus de facilité à trouver des erreurs de programmation.

Le but recherché ici va être de corrompre une application pour lui faire exécuter son propre code, généralement donné en langage d'assemblage. La plus grande faille connue à ce jour est le BOF (dépassement de tampon). Mais il en existe bien d'autres qui peuvent être au moins aussi dangereuses et exploitables.

Web[modifier | modifier le code]

De nombreuses possibilités s'offrent à vous si le système dispose d'un serveur web sur le même réseau. Naturellement, plus le nombre de services actifs est élevé, plus la surface d'attaque est importante. Ainsi, un service de plus mène à des failles potentielles. Le service web est l'un des plus exploités des Hackers et débutants, de ce fait, il est primordial d'y avoir une bonne sécurité. D'autant plus que la sécurité d'un site web est beaucoup plus mise en péril en raison du grand nombre d'attaquants qui préféreront ce type d'attaque à la recherche d'autres failles dans le système.

La plupart, pour ne pas dire la totalité des failles présentes sur le web sont dues à une mauvaise programmation du service proposé. De multiples vulnérabilités sont connues à ce jour, telles que les injections SQL, les failles CSRF, etc.

Outre le fait que l'attaquant peut parfaitement élever ses droits sur le site, il lui est également possible en fonction des failles d'élever ses droits sur le système complet, pouvant ainsi le corrompre aisément. Il doit pour cela avoir une maîtrise parfaite du protocole de communication mis à disposition, en l'occurrence, HTTP pour un site web.

L'attaquant présumé va alors tester tout le site: URL, formulaires et variables principalement (requêtes GET, POST), en-têtes, etc. On pourrait le classer dans la rubrique réseau car les attaques vont s'effectuer via des requêtes et leurs réponses.

Système, Services et Configuration[modifier | modifier le code]

Vous travaillez sur des systèmes Linux ou Microsoft Windows (ou autre), la configuration de ceux-là s'avère plus que primordiale. La configuration du réseau du système, de ses services, de la façon dont il réagit face aux événements. Pour les systèmes Windows, la configuration est beaucoup plus restreinte car le code du système ne peut être modifié sans être dans l'illégalité.

De nouvelles failles sont trouvées tous les jours dans les systèmes d'exploitation, on parle souvent de failles applicatives, mais il ne faut pas se faire d'illusions, on en trouve également dans des services exploitant le réseau.

Le testeur possède un nombre limité d'informations (ou grey box)[modifier | modifier le code]

En général, lors de tests d'intrusion en mode boîte grise, le testeur dispose uniquement d'un couple identifiant - mot de passe. Ceci lui permet notamment de passer l'étape d'authentification.

L'objectif de ce type de test est d'évaluer le niveau de sécurité vis-à-vis d'un "utilisateur normal".

Le testeur se trouve en possession des informations nécessaires (ou white box)[modifier | modifier le code]

Le testeur peut être en possession de nombreuses informations. Parmi elles, les plus courantes sont :

  • Schémas d'architecture ;
  • Compte utilisateur permettant de s'authentifier ;
  • Code source de l'application ;
  • Etc.

Dans ce cas, il n'aura plus qu'une chose à faire : rechercher la ou les failles, et trouver le moyen de les exploiter.

De même, un testeur se trouvant à l'intérieur du réseau à tester aura plus de facilité à trouver ces failles car il connaît non seulement le système, mais il peut avoir accès directement aux ressources dont il a besoin.

Voir aussi[modifier | modifier le code]

Liens externes[modifier | modifier le code]